Added test case for Adapter

1. Removed config files from config folder.
2. Added test cases for the Adapter with code coverage of 91%.
3. Resolved linting issues.
This commit is contained in:
MohitKatare-protean
2025-03-26 18:15:06 +05:30
parent 75883c6f6a
commit 2fa34759bc
70 changed files with 549 additions and 7228 deletions

View File

@@ -19,8 +19,8 @@ import (
"github.com/beckn/beckn-onix/pkg/plugin"
)
// config struct holds all configurations.
type config struct {
// Config struct holds all configurations.
type Config struct {
AppName string `yaml:"appName"`
Log log.Config `yaml:"log"`
PluginManager *plugin.ManagerConfig `yaml:"pluginManager"`
@@ -40,6 +40,7 @@ type timeoutConfig struct {
}
var configPath string
var runFunc = run
func main() {
// Define and parse command-line flags.
@@ -50,14 +51,14 @@ func main() {
log.Infof(context.Background(), "Starting application with config: %s", configPath)
// Run the application within a context.
if err := run(context.Background(), configPath); err != nil {
if err := runFunc(context.Background(), configPath); err != nil {
log.Fatalf(context.Background(), err, "Application failed: %v", err)
}
log.Infof(context.Background(), "Application finished")
}
// initConfig loads and validates the configuration.
func initConfig(ctx context.Context, path string) (*config, error) {
func initConfig(ctx context.Context, path string) (*Config, error) {
// Open the configuration file.
file, err := os.Open(path)
if err != nil {
@@ -66,7 +67,7 @@ func initConfig(ctx context.Context, path string) (*config, error) {
defer file.Close()
// Decode the YAML configuration.
var cfg config
var cfg Config
if err := yaml.NewDecoder(file).Decode(&cfg); err != nil {
return nil, fmt.Errorf("could not decode config: %w", err)
}
@@ -80,7 +81,7 @@ func initConfig(ctx context.Context, path string) (*config, error) {
}
// validateConfig validates the configuration.
func validateConfig(cfg *config) error {
func validateConfig(cfg *Config) error {
if strings.TrimSpace(cfg.AppName) == "" {
return fmt.Errorf("missing app name")
}
@@ -91,7 +92,7 @@ func validateConfig(cfg *config) error {
}
// newServer creates and initializes the HTTP server.
func newServer(ctx context.Context, mgr handler.PluginManager, cfg *config) (http.Handler, error) {
func newServer(ctx context.Context, mgr handler.PluginManager, cfg *Config) (http.Handler, error) {
mux := http.NewServeMux()
err := module.Register(ctx, cfg.Modules, mux, mgr)
if err != nil {
@@ -100,6 +101,10 @@ func newServer(ctx context.Context, mgr handler.PluginManager, cfg *config) (htt
return mux, nil
}
var newManagerFunc = plugin.NewManager
var newServerFunc = newServer
var initLoggerFunc = log.InitLogger
// run encapsulates the application logic.
func run(ctx context.Context, configPath string) error {
closers := []func(){}
@@ -109,13 +114,13 @@ func run(ctx context.Context, configPath string) error {
return fmt.Errorf("failed to initialize config: %w", err)
}
log.Infof(ctx, "Initializing logger with config: %+v", cfg.Log)
if err := log.InitLogger(cfg.Log); err != nil {
if err := initLoggerFunc(cfg.Log); err != nil {
return fmt.Errorf("failed to initialize logger: %w", err)
}
// Initialize plugin manager.
log.Infof(ctx, "Initializing plugin manager")
mgr, closer, err := plugin.NewManager(ctx, cfg.PluginManager)
mgr, closer, err := newManagerFunc(ctx, cfg.PluginManager)
if err != nil {
return fmt.Errorf("failed to create plugin manager: %w", err)
}
@@ -124,7 +129,7 @@ func run(ctx context.Context, configPath string) error {
// Initialize HTTP server.
log.Infof(ctx, "Initializing HTTP server")
srv, err := newServer(ctx, mgr, cfg)
srv, err := newServerFunc(ctx, mgr, cfg)
if err != nil {
return fmt.Errorf("failed to initialize server: %w", err)
}

514
cmd/adapter/main_test.go Normal file
View File

@@ -0,0 +1,514 @@
package main
import (
"context"
"errors"
"flag"
"net/http"
"os"
"strings"
"testing"
"time"
"github.com/beckn/beckn-onix/core/module"
"github.com/beckn/beckn-onix/core/module/handler"
"github.com/beckn/beckn-onix/pkg/plugin"
"github.com/beckn/beckn-onix/pkg/plugin/definition"
"github.com/stretchr/testify/mock"
)
// MockPluginManager implements handler.PluginManager for testing.
type MockPluginManager struct {
mock.Mock
}
// Middleware returns a middleware function based on the provided configuration.
func (m *MockPluginManager) Middleware(ctx context.Context, cfg *plugin.Config) (func(http.Handler) http.Handler, error) {
args := m.Called(ctx, cfg)
return args.Get(0).(func(http.Handler) http.Handler), args.Error(1)
}
// SignValidator returns a mock implementation of the Verifier interface.
func (m *MockPluginManager) SignValidator(ctx context.Context, cfg *plugin.Config) (definition.Verifier, error) {
return nil, nil
}
// Validator returns a mock implementation of the SchemaValidator interface.
func (m *MockPluginManager) Validator(ctx context.Context, cfg *plugin.Config) (definition.SchemaValidator, error) {
return nil, nil
}
// Router returns a mock implementation of the Router interface.
func (m *MockPluginManager) Router(ctx context.Context, cfg *plugin.Config) (definition.Router, error) {
return nil, nil
}
// Publisher returns a mock implementation of the Publisher interface.
func (m *MockPluginManager) Publisher(ctx context.Context, cfg *plugin.Config) (definition.Publisher, error) {
return nil, nil
}
// Signer returns a mock implementation of the Signer interface.
func (m *MockPluginManager) Signer(ctx context.Context, cfg *plugin.Config) (definition.Signer, error) {
return nil, nil
}
// Step returns a mock implementation of the Step interface.
func (m *MockPluginManager) Step(ctx context.Context, cfg *plugin.Config) (definition.Step, error) {
return nil, nil
}
// Cache returns a mock implementation of the Cache interface.
func (m *MockPluginManager) Cache(ctx context.Context, cfg *plugin.Config) (definition.Cache, error) {
return nil, nil
}
// KeyManager returns a mock implementation of the KeyManager interface.
func (m *MockPluginManager) KeyManager(ctx context.Context, cache definition.Cache, rLookup definition.RegistryLookup, cfg *plugin.Config) (definition.KeyManager, error) {
return nil, nil
}
// SchemaValidator returns a mock implementation of the SchemaValidator interface.
func (m *MockPluginManager) SchemaValidator(ctx context.Context, cfg *plugin.Config) (definition.SchemaValidator, error) {
return nil, nil
}
// testConfigContent defines a mock configuration used in tests.
const testConfigContent = `
appName: "TestApp"
http:
port: "8080"
timeout:
read: 5
write: 5
idle: 10
`
// initLogger is a mock function to initialize the logger.
var initLogger = func(cfg *Config) error {
return nil
}
// mockRun is a mock implementation of the `run` function, simulating a successful run.
func mockRun(ctx context.Context, configPath string) error {
return nil // Simulate a successful run
}
// TestMainFunction tests the main function execution, including command-line argument parsing.
func TestMainFunction(t *testing.T) {
// Backup original run function and restore it after test
origRun := runFunc
defer func() { runFunc = origRun }()
runFunc = mockRun
origArgs := os.Args
defer func() { os.Args = origArgs }()
// Set mock command-line arguments
os.Args = []string{"cmd", "-config=../../config/test-config.yaml"}
fs := flag.NewFlagSet("test", flag.ExitOnError)
fs.StringVar(&configPath, "config", "../../config/clientSideHandler-config.yaml", "Path to the configuration file")
fs.Parse(os.Args[1:])
main()
}
// TestRunSuccess tests the successful execution of the run function with different configurations.
func TestRunSuccess(t *testing.T) {
tests := []struct {
name string
configData string
mockMgr func() (*plugin.Manager, func(), error)
mockLogger func(cfg *Config) error
mockServer func(ctx context.Context, mgr handler.PluginManager, cfg *Config) (http.Handler, error)
}{
{
name: "Valid Config",
configData: "valid_config.yaml",
mockMgr: func() (*plugin.Manager, func(), error) {
return &plugin.Manager{}, func() {}, nil
},
mockLogger: func(cfg *Config) error {
return nil
},
mockServer: func(ctx context.Context, mgr handler.PluginManager, cfg *Config) (http.Handler, error) {
return http.NewServeMux(), nil
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
defer cancel()
testFilePath := tt.configData
mockConfig := `appName: "testAdapter"
log:
level: debug
destinations:
- type: stdout
context_keys:
- transaction_id
- message_id
http:
port: 8080
timeout:
read: 30
write: 30
idle: 30
plugin:
root: "/mock/plugins"
pluginZipPath: "/mock/plugins/plugins_bundle.zip"
plugins:
- testPlugin1
- testPlugin2
modules:
- name: testModule
type: transaction
path: /testPath
targetType: msgQ
plugin:
schemaValidator:
id: testValidator
publisher:
id: testPublisher
config:
project: test-project
topic: test-topic
router:
id: testRouter
config:
routingConfigPath: "/mock/configs/testRouting-config.yaml"`
err := os.WriteFile(testFilePath, []byte(mockConfig), 0644)
if err != nil {
t.Errorf("Failed to create test config file: %v", err)
}
defer os.Remove(testFilePath)
// Mock dependencies
originalNewManager := newManagerFunc
newManagerFunc = func(ctx context.Context, cfg *plugin.ManagerConfig) (*plugin.Manager, func(), error) {
return tt.mockMgr()
}
defer func() { newManagerFunc = originalNewManager }()
originalNewServer := newServerFunc
newServerFunc = func(ctx context.Context, mgr handler.PluginManager, cfg *Config) (http.Handler, error) {
return tt.mockServer(ctx, mgr, cfg)
}
defer func() { newServerFunc = originalNewServer }()
// Run function
err = run(ctx, testFilePath)
if err != nil {
t.Errorf("Expected no error, but got: %v", err)
}
})
}
}
// TestRunFailure validates failure scenarios for the run function.
func TestRunFailure(t *testing.T) {
tests := []struct {
name string
configData string
mockMgr func() (*plugin.Manager, func(), error)
mockLogger func(cfg *Config) error
mockServer func(ctx context.Context, mgr handler.PluginManager, cfg *Config) (http.Handler, error)
expectedErr string
}{
{
name: "Invalid Config File",
configData: "invalid_config.yaml",
mockMgr: func() (*plugin.Manager, func(), error) {
return &plugin.Manager{}, func() {}, nil
},
mockLogger: func(cfg *Config) error {
return nil
},
mockServer: func(ctx context.Context, mgr handler.PluginManager, cfg *Config) (http.Handler, error) {
return nil, errors.New("failed to start server")
},
expectedErr: "failed to initialize config: invalid config: missing app name",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
defer cancel()
testFilePath := tt.configData
mockConfig := `invalid: "config"`
err := os.WriteFile(testFilePath, []byte(mockConfig), 0644)
if err != nil {
t.Errorf("Failed to create test config file: %v", err)
}
defer os.Remove(testFilePath)
// Mock dependencies
originalNewManager := newManagerFunc
newManagerFunc = func(ctx context.Context, cfg *plugin.ManagerConfig) (*plugin.Manager, func(), error) {
return tt.mockMgr()
}
defer func() { newManagerFunc = originalNewManager }()
originalNewServer := newServerFunc
newServerFunc = func(ctx context.Context, mgr handler.PluginManager, cfg *Config) (http.Handler, error) {
return tt.mockServer(ctx, mgr, cfg)
}
defer func() { newServerFunc = originalNewServer }()
// Run function
err = run(ctx, testFilePath)
if err == nil {
t.Errorf("Expected error, but got nil")
} else if err.Error() != tt.expectedErr {
t.Errorf("Expected error '%s', but got '%s'", tt.expectedErr, err.Error())
}
})
}
}
// TestInitConfigSuccess tests the successful initialization of the config.
func TestInitConfigSuccess(t *testing.T) {
tests := []struct {
name string
configData string
}{
{
name: "Valid Config",
configData: `
appName: "TestApp"
http:
port: "8080"
timeout:
read: 5
write: 5
idle: 10
`,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
configPath := "test_config_success.yaml"
defer os.Remove(configPath)
err := os.WriteFile(configPath, []byte(tt.configData), 0644)
if err != nil {
t.Errorf("Failed to create test config file: %v", err)
}
_, err = initConfig(context.Background(), configPath)
if err != nil {
t.Errorf("Expected no error, but got: %v", err)
}
})
}
}
// TestInitConfigFailure tests failure scenarios for config initialization.
func TestInitConfigFailure(t *testing.T) {
tests := []struct {
name string
configData string
expectedErr string
}{
{
name: "Invalid YAML Format",
configData: `appName: "TestApp"\nhttp: { invalid_yaml }`,
expectedErr: "could not decode config",
},
{
name: "Missing Required Fields",
configData: `appName: ""\nhttp:\n timeout:\n read: 5\n`,
expectedErr: "could not decode config: yaml: did not find expected key",
},
{
name: "Non-Existent File",
configData: "",
expectedErr: "could not open config file",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
configPath := "test_config_failure.yaml"
if tt.configData != "" {
err := os.WriteFile(configPath, []byte(tt.configData), 0644)
if err != nil {
t.Errorf("Failed to create test config file: %v", err)
}
defer os.Remove(configPath)
} else {
// Ensure file does not exist for non-existent file test
os.Remove(configPath)
}
_, err := initConfig(context.Background(), configPath)
if err == nil {
t.Errorf("Expected error but got nil")
} else if !strings.Contains(err.Error(), tt.expectedErr) {
t.Errorf("Expected error containing '%s', but got '%s'", tt.expectedErr, err.Error())
}
})
}
}
// TestNewServerSuccess tests successful server creation.
func TestNewServerSuccess(t *testing.T) {
tests := []struct {
name string
modules []module.Config
}{
{
name: "Successful server creation with no modules",
modules: []module.Config{}, // No modules to simplify the test
},
}
mockMgr := new(MockPluginManager) // Mocking PluginManager
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
cfg := &Config{
Modules: tt.modules,
HTTP: httpConfig{
Port: "8080",
Timeout: timeoutConfig{
Read: 5,
Write: 5,
Idle: 10,
},
},
}
handler, err := newServer(context.Background(), mockMgr, cfg)
if err != nil {
t.Errorf("Expected no error, but got: %v", err)
}
if handler == nil {
t.Errorf("Expected handler to be non-nil, but got nil")
}
})
}
}
// TestNewServerFailure tests failure scenarios when creating a server.
func TestNewServerFailure(t *testing.T) {
tests := []struct {
name string
modules []module.Config
}{
{
name: "Module registration failure",
modules: []module.Config{
{
Name: "InvalidModule",
Path: "/invalid",
},
},
},
}
mockMgr := new(MockPluginManager) // Mocking PluginManager
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
cfg := &Config{
Modules: tt.modules,
HTTP: httpConfig{
Port: "8080",
Timeout: timeoutConfig{
Read: 5,
Write: 5,
Idle: 10,
},
},
}
handler, err := newServer(context.Background(), mockMgr, cfg)
if err == nil {
t.Errorf("Expected an error, but got nil")
}
if handler != nil {
t.Errorf("Expected handler to be nil, but got a non-nil value")
}
})
}
}
// TestValidateConfigSuccess tests validation of a correct config.
func TestValidateConfigSuccess(t *testing.T) {
tests := []struct {
name string
cfg Config
}{
{
name: "Valid Config",
cfg: Config{
AppName: "TestApp",
HTTP: httpConfig{
Port: "8080",
},
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
err := validateConfig(&tt.cfg)
if err != nil {
t.Errorf("Expected no error, but got: %v", err)
}
})
}
}
// TestValidateConfigFailure tests validation failures for incorrect config.
func TestValidateConfigFailure(t *testing.T) {
tests := []struct {
name string
cfg Config
expectedErr string
}{
{
name: "Missing AppName",
cfg: Config{
AppName: "",
HTTP: httpConfig{
Port: "8080",
},
},
expectedErr: "missing app name",
},
{
name: "Missing Port",
cfg: Config{
AppName: "TestApp",
HTTP: httpConfig{
Port: "",
},
},
expectedErr: "missing port",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
err := validateConfig(&tt.cfg)
if err == nil {
t.Errorf("Expected error '%s', but got nil", tt.expectedErr)
} else if err.Error() != tt.expectedErr {
t.Errorf("Expected error '%s', but got '%s'", tt.expectedErr, err.Error())
}
})
}
}

View File

@@ -1,69 +0,0 @@
appName: "bapAdapter"
log:
level: debug
destinations:
- type: stdout
context_keys:
- transaction_id
- message_id
http:
port: 8080
timeout:
read: 30
write: 30
idle: 30
plugin:
root: /app/plugins
pluginZipPath: /mnt/gcs/plugins/plugins_bundle.zip
plugins:
- publisher Src version raw comp zip
- nopschemavalidator
- router
- nopsigner
- nopsignvalidator
- reqpreprocessor
- gcpAuthMdw
modules:
- name: reciever
type: transaction
path: /reciever
targetType: msgQ
plugin:
schemaValidator:
id: nopschemavalidator
signValidator:
id: nopsignvalidator
publisher:
id: publisher
config:
project: ondc-seller-dev
topic: bapNetworkReciever
router:
id: router
config:
routingConfigPath: /mnt/gcs/configs/bapRecieverRouting-config.yaml
preProcessors:
- id: reqpreprocessor
steps:
steps:
- addRoute
signValidate
-addRout
customValidate
- name: transactionCaller
path: /caller
targetType: "http"
plugin:
signer:
id: nopsigner
router:
id: router
config:
routingConfigPath: /mnt/gcs/configs/bapCallerRouting-config.yaml
preProcessors:
- id: reqpreprocessor
# postProcessors:
# - id: gcpAuthMdw
# config:
# audience: https://bpp-adapter-903496459467.asia-southeast1.run.app
# serviceAccount: 903496459467-compute@developer.gserviceaccount.com

View File

@@ -1,3 +0,0 @@
routes:
- action: search
target: https://bpp-adapter-903496459467.asia-southeast1.run.app/reciever

View File

@@ -1,63 +0,0 @@
appName: "bppClientService"
log:
level: debug
destinations:
- type: stdout
context_keys:
- transaction_id
- message_id
http:
port: 8080
timeout:
read: 30
write: 30
idle: 30
plugin:
root: extracted/plugins
pluginZipPath: plugins_bundle.zip
plugins:
- publisher
- nopschemavalidator
- router
- nopsigner
- nopsignvalidator
- reqpreprocessor
- gcpAuthMdw
module:
modules:
- name: transactionReciever
path: /reciever
targetType: msgQ
plugin:
schemaValidator:
id: nopschemavalidator
signValidator:
id: nopsignValidator
publisher:
id: publisher
config:
project: ondc-seller-dev
topic: clientSideTopic
Router:
id: router
config:
routingConfigPath: configs/bppRecieverRouting-config.yaml
preProcessors:
- id: reqpreprocessor
- name: transactionCaller
path: /caller
targetType: "http"
plugin:
signer:
id: nopsigner
Router:
id: router
config:
routingConfigPath: configs/bppCallerRouting-config.yaml
preProcessors:
- id: reqpreprocessor
postProcessors:
- id: gcpAuthMdw
config:
audience: "target"

View File

@@ -1,63 +0,0 @@
appName: "bppClientService"
log:
level: debug
destinations:
- type: stdout
context_keys:
- transaction_id
- message_id
http:
port: 8080
timeout:
read: 30
write: 30
idle: 30
plugin:
root: /app/plugins
pluginZipPath: /mnt/gcs/plugins/plugins_bundle.zip
plugins:
- publisher
- nopschemavalidator
- router
- nopsigner
- nopsignvalidator
- reqpreprocessor
- gcpAuthMdw
module:
modules:
- name: transactionReciever
path: /reciever
targetType: msgQ
plugin:
schemaValidator:
id: nopschemavalidator
signValidator:
id: nopsignvalidator
publisher:
id: publisher
config:
project: ondc-seller-dev
topic: bppNetworkReciever
router:
id: router
config:
routingConfigPath: /mnt/gcs/configs/bppRecieverRouting-config.yaml
preProcessors:
- id: reqpreprocessor
- name: transactionCaller
path: /caller
targetType: "http"
plugin:
signer:
id: nopsigner
router:
id: router
config:
routingConfigPath: /mnt/gcs/configs/bppCallerRouting-config.yaml
preProcessors:
- id: reqpreprocessor
# postProcessors:
# - id: gcpAuthMdw
# config:
# audience: https://bap-adapter-903496459467.asia-southeast1.run.app
# serviceAccount: 903496459467-compute@developer.gserviceaccount.com

View File

@@ -1,3 +0,0 @@
routes:
- action: on_search
target: targeturl

View File

@@ -1,3 +0,0 @@
routes:
- action: search
target: https://sellerapp-903496459467.asia-southeast1.run.app

View File

@@ -1,2 +0,0 @@
bap_url: "https://bap-csr-903496459467.asia-southeast1.run.app" # Replace with actual Beckn API endpoint
port: "8080" # The port on which the server will run

View File

@@ -1,4 +0,0 @@
routes:
- action: search
type: url
target: http://localhost:8080/bpp/reciever/search

View File

@@ -1,4 +0,0 @@
routes:
- action: on_search
type: publisher
target: bapNetworkReciever

View File

@@ -1,4 +0,0 @@
routes:
- action: on_search
type: url
target: http://localhost:8080/bap/reciever/on_search

View File

@@ -1,4 +0,0 @@
routes:
- action: search
type: publisher
target: bapNetworkReciever

View File

@@ -1,231 +0,0 @@
appName: "onix"
log:
level: debug
destinations:
- type: stdout
contextKeys:
- transaction_id
- message_id
- subscriber_id
http:
port: 8080
timeout:
read: 30
write: 30
idle: 30
pluginManager:
root: /app/plugins
remoteRoot: /mnt/gcs/plugins/plugins_bundle.zip
modules:
- name: bapTxnReciever
path: /bap/reciever/
handler:
type: std
role: bap
trace:
# validateSign: true
# addRoute: true
# validateSchema: true
# reqpreprocessor: true
registryUrl: http://localhost:8080/reg
plugins:
keyManager:
id: secretskeymanager
config:
projectID: trusty-relic-370809
cache:
id: redis
config:
addr: 10.81.192.4:6379
# schemaValidator:
# id: schemavalidator
# config:
# schemaDir: /mnt/gcs/configs/schemas
signValidator:
id: signvalidator
publisher:
id: publisher
config:
project: trusty-relic-370809
topic: bapNetworkReciever
router:
id: router
config:
routingConfigPath: /mnt/gcs/configs/bapTxnReciever-routing.yaml
middleware:
- id: reqpreprocessor
config:
uuidKeys: transaction_id,message_id
role: bap
steps:
- validateSign
- addRoute
# - validateSchema
- name: bapTxnCaller
path: /bap/caller/
handler:
type: std
registryUrl: http://localhost:8080/reg
role: bap
plugins:
keyManager:
id: secretskeymanager
config:
projectID: trusty-relic-370809
cache:
id: redis
config:
addr: 10.81.192.4:6379
# schemaValidator:
# id: schemavalidator
# config:
# schemaDir: /mnt/gcs/configs/schemas
signer:
id: signer
publisher:
id: publisher
config:
project: trusty-relic-370809
topic: bapNetworkReciever
router:
id: router
config:
routingConfigPath: /mnt/gcs/configs/bapTxnCaller-routing.yaml
middleware:
- id: reqpreprocessor
config:
uuidKeys: transaction_id,message_id
role: bap
steps:
# - validateSchema
- addRoute
- sign
- name: bapSubscribeCaller
path: /bap/subscribe
handler:
type: npSub
role: bap
registryUrl: http://localhost:8080/reg
plugins:
keyManager:
id: secretskeymanager
config:
projectID: trusty-relic-370809
cache:
id: redis
config:
addr: 10.81.192.4:6379
- name: bppTxnReciever
path: /bpp/reciever/
handler:
type: std
role: bpp
subscriberId: bpp1
registryUrl: http://localhost:8080/reg
plugins:
keyManager:
id: secretskeymanager
config:
projectID: trusty-relic-370809
cache:
id: redis
config:
addr: 10.81.192.4:6379
# schemaValidator:
# id: schemavalidator
# config:
# schemaDir: /mnt/gcs/configs/schemas
signValidator:
id: signvalidator
publisher:
id: publisher
config:
project: trusty-relic-370809
topic: bapNetworkReciever
router:
id: router
config:
routingConfigPath: /mnt/gcs/configs/bppTxnReciever-routing.yaml
middleware:
- id: reqpreprocessor
config:
uuidKeys: transaction_id,message_id
role: bpp
steps:
- validateSign
- addRoute
# - validateSchema
- name: bppTxnCaller
path: /bpp/caller/
handler:
type: std
role: bpp
registryUrl: http://localhost:8080/reg
plugins:
keyManager:
id: secretskeymanager
config:
projectID: trusty-relic-370809
cache:
id: redis
config:
addr: 10.81.192.4:6379
# schemaValidator:
# id: schemavalidator
# config:
# schemaDir: /mnt/gcs/configs/schemas
signer:
id: signer
publisher:
id: publisher
config:
project: trusty-relic-370809
topic: bapNetworkReciever
router:
id: router
config:
routingConfigPath: /mnt/gcs/configs/bppTxnCaller-routing.yaml
middleware:
- id: reqpreprocessor
config:
uuidKeys: transaction_id,message_id
role: bpp
steps:
# - validateSchema
- addRoute
- sign
- name: bppSubscribeCaller
path: /bpp/subscribe
handler:
type: npSub
role: bpp
registryUrl: http://localhost:8080/reg
plugins:
keyManager:
id: secretskeymanager
config:
projectID: trusty-relic-370809
cache:
id: redis
config:
addr: 10.81.192.4:6379
- name: regSubscribeReciever
path: /reg/subscribe
handler:
type: regSub
role: registery
plugins:
cache:
id: redis
config:
addr: "10.81.192.4:6379"
- name: regLookUpReciever
path: /reg/lookUp
handler:
type: lookUp
role: registery
plugins:
cache:
id: redis
config:
addr: "10.81.192.4:6379"

View File

@@ -1,8 +0,0 @@
plugins:
- gcpAuthMdw
- nopsigner
- router
- publisher
- reqpreprocessor
- nopschemavalidator
- nopsignvalidator

View File

@@ -1,32 +0,0 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "cancel",
"type": "object",
"properties": {
"context": {
"allOf": [
{
"$ref": "definitions.json#/$defs/Context"
},
{
"type": "object",
"properties": {
"action": {
"enum": [
"cancel"
]
}
},
"required": [
"action"
]
}
]
}
},
"required": [
"message",
"context"
]
}

View File

@@ -1,43 +0,0 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "confirm",
"type": "object",
"properties": {
"context": {
"allOf": [
{
"$ref": "definitions.json#/$defs/Context"
},
{
"type": "object",
"properties": {
"action": {
"enum": [
"confirm"
]
}
},
"required": [
"action"
]
}
]
},
"message": {
"type": "object",
"additionalProperties": false,
"properties": {
"order": {
"$ref": "definitions.json#/$defs/Order"
}
},
"required": [
"order"
]
}
},
"required": [
"message",
"context"
]
}

View File

@@ -1,43 +0,0 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "init",
"type": "object",
"properties": {
"context": {
"allOf": [
{
"$ref": "./definitions.json#/$defs/Context"
},
{
"type": "object",
"properties": {
"action": {
"enum": [
"init"
]
}
},
"required": [
"action"
]
}
]
},
"message": {
"type": "object",
"additionalProperties": false,
"properties": {
"order": {
"$ref": "./definitions.json#/$defs/Order"
}
},
"required": [
"order"
]
}
},
"required": [
"message",
"context"
]
}

View File

@@ -1,43 +0,0 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "OnCancel",
"type": "object",
"properties": {
"context": {
"allOf": [
{
"$ref": "./definitions.json#/$defs/Context"
},
{
"properties": {
"action": {
"enum": [
"on_cancel"
]
}
},
"required": [
"action"
]
}
]
},
"message": {
"type": "object",
"properties": {
"order": {
"$ref": "./definitions.json#/$defs/Order"
}
},
"required": [
"order"
]
},
"error": {
"$ref": "./definitions.json#/$defs/Error"
}
},
"required": [
"context"
]
}

View File

@@ -1,43 +0,0 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "OnConfirm",
"type": "object",
"properties": {
"context": {
"allOf": [
{
"$ref": "./definitions.json#/$defs/Context"
},
{
"properties": {
"action": {
"enum": [
"on_confirm"
]
}
},
"required": [
"action"
]
}
]
},
"message": {
"type": "object",
"properties": {
"order": {
"$ref": "./definitions.json#/$defs/Order"
}
},
"required": [
"order"
]
},
"error": {
"$ref": "./definitions.json#/$defs/Error"
}
},
"required": [
"context"
]
}

View File

@@ -1,43 +0,0 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "OnInit",
"type": "object",
"properties": {
"context": {
"allOf": [
{
"$ref": "./definitions.json#/$defs/Context"
},
{
"properties": {
"action": {
"enum": [
"on_init"
]
}
},
"required": [
"action"
]
}
]
},
"message": {
"type": "object",
"properties": {
"order": {
"$ref": "./definitions.json#/$defs/Order"
}
},
"required": [
"order"
]
},
"error": {
"$ref": "./definitions.json#/$defs/Error"
}
},
"required": [
"context"
]
}

View File

@@ -1,46 +0,0 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "OnRating",
"type": "object",
"properties": {
"context": {
"allOf": [
{
"$ref": "./definitions.json#/$defs/Context"
},
{
"properties": {
"action": {
"enum": [
"on_rating"
]
}
},
"required": [
"action"
]
}
]
},
"message": {
"type": "object",
"properties": {
"feedback_form": {
"description": "A feedback form to allow the user to provide additional information on the rating provided",
"allOf": [
{
"$ref": "./definitions.json#/$defs/XInput"
}
]
}
}
},
"error": {
"$ref": "./definitions.json#/$defs/Error"
}
},
"required": [
"context",
"message"
]
}

View File

@@ -1,43 +0,0 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "OnSearch",
"type": "object",
"properties": {
"context": {
"allOf": [
{
"$ref": "./definitions.json#/$defs/Context"
},
{
"properties": {
"action": {
"enum": [
"on_search"
]
}
},
"required": [
"action"
]
}
]
},
"message": {
"type": "object",
"properties": {
"catalog": {
"$ref": "./definitions.json#/$defs/Catalog"
}
},
"required": [
"catalog"
]
},
"error": {
"$ref": "./definitions.json#/$defs/Error"
}
},
"required": [
"context"
]
}

View File

@@ -1,40 +0,0 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "OnSelect",
"type": "object",
"properties": {
"context": {
"allOf": [
{
"$ref": "./definitions.json#/$defs/Context"
},
{
"properties": {
"action": {
"enum": [
"on_select"
]
}
},
"required": [
"action"
]
}
]
},
"message": {
"type": "object",
"properties": {
"order": {
"$ref": "./definitions.json#/$defs/Order"
}
}
},
"error": {
"$ref": "./definitions.json#/$defs/Error"
}
},
"required": [
"context"
]
}

View File

@@ -1,43 +0,0 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "OnStatus",
"type": "object",
"properties": {
"context": {
"allOf": [
{
"$ref": "./definitions.json#/$defs/Context"
},
{
"properties": {
"action": {
"enum": [
"on_status"
]
}
},
"required": [
"action"
]
}
]
},
"message": {
"type": "object",
"properties": {
"order": {
"$ref": "./definitions.json#/$defs/Order"
}
},
"required": [
"order"
]
},
"error": {
"$ref": "./definitions.json#/$defs/Error"
}
},
"required": [
"context"
]
}

View File

@@ -1,40 +0,0 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "OnSupport",
"type": "object",
"properties": {
"context": {
"allOf": [
{
"$ref": "./definitions.json#/$defs/Context"
},
{
"properties": {
"action": {
"enum": [
"on_support"
]
}
},
"required": [
"action"
]
}
]
},
"message": {
"type": "object",
"properties": {
"support": {
"$ref": "./definitions.json#/$defs/Support"
}
}
},
"error": {
"$ref": "./definitions.json#/$defs/Error"
}
},
"required": [
"context"
]
}

View File

@@ -1,43 +0,0 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "OnTrack",
"type": "object",
"properties": {
"context": {
"allOf": [
{
"$ref": "./definitions.json#/$defs/Context"
},
{
"properties": {
"action": {
"enum": [
"on_track"
]
}
},
"required": [
"action"
]
}
]
},
"message": {
"type": "object",
"properties": {
"tracking": {
"$ref": "./definitions.json#/$defs/Tracking"
}
},
"required": [
"tracking"
]
},
"error": {
"$ref": "./definitions.json#/$defs/Error"
}
},
"required": [
"context"
]
}

View File

@@ -1,43 +0,0 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "OnUpdate",
"type": "object",
"properties": {
"context": {
"allOf": [
{
"$ref": "./definitions.json#/$defs/Context"
},
{
"properties": {
"action": {
"enum": [
"on_update"
]
}
},
"required": [
"action"
]
}
]
},
"message": {
"type": "object",
"properties": {
"order": {
"$ref": "./definitions.json#/$defs/Order"
}
},
"required": [
"order"
]
},
"error": {
"$ref": "./definitions.json#/$defs/Error"
}
},
"required": [
"context"
]
}

View File

@@ -1,42 +0,0 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "rating",
"type": "object",
"properties": {
"context": {
"allOf": [
{
"$ref": "./definitions.json#/$defs/Context"
},
{
"type": "object",
"properties": {
"action": {
"enum": [
"rating"
]
}
},
"required": [
"action"
]
}
]
},
"message": {
"type": "object",
"properties": {
"ratings": {
"type": "array",
"items": {
"$ref": "./definitions.json#/$defs/Rating"
}
}
}
}
},
"required": [
"message",
"context"
]
}

View File

@@ -1,7 +0,0 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "Response",
"type": "object",
"properties": {},
"required": []
}

View File

@@ -1,43 +0,0 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "status",
"type": "object",
"properties": {
"context": {
"allOf": [
{
"$ref": "./definitions.json#/$defs/Context"
},
{
"type": "object",
"properties": {
"action": {
"enum": [
"status"
]
}
},
"required": [
"action"
]
}
]
},
"message": {
"type": "object",
"additionalProperties": false,
"properties": {
"ref_id": {
"$ref": "./definitions.json#/$defs/Order"
},
"order_id": {
"$ref": "./definitions.json#/$defs/Order"
}
}
}
},
"required": [
"message",
"context"
]
}

View File

@@ -1,39 +0,0 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "support",
"type": "object",
"properties": {
"context": {
"allOf": [
{
"$ref": "./definitions.json#/$defs/Context"
},
{
"type": "object",
"properties": {
"action": {
"enum": [
"support"
]
}
},
"required": [
"action"
]
}
]
},
"message": {
"type": "object",
"properties": {
"support": {
"$ref": "./definitions.json#/$defs/Support"
}
}
}
},
"required": [
"message",
"context"
]
}

View File

@@ -1,47 +0,0 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "track",
"type": "object",
"properties": {
"context": {
"allOf": [
{
"$ref": "./definitions.json#/$defs/Context"
},
{
"type": "object",
"properties": {
"action": {
"enum": [
"track"
]
}
},
"required": [
"action"
]
}
]
},
"message": {
"type": "object",
"additionalProperties": false,
"properties": {
"order_id": {
"$ref": "./definitions.json#/$defs/Order"
},
"callback_url": {
"type": "string",
"format": "uri"
}
},
"required": [
"order_id"
]
}
},
"required": [
"message",
"context"
]
}

View File

@@ -1,53 +0,0 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "update",
"type": "object",
"properties": {
"context": {
"allOf": [
{
"$ref": "./definitions.json#/$defs/Context"
},
{
"type": "object",
"properties": {
"action": {
"enum": [
"update"
]
}
},
"required": [
"action"
]
}
]
},
"message": {
"type": "object",
"additionalProperties": false,
"properties": {
"update_target": {
"description": "Comma separated values of order objects being updated. For example: ```\"update_target\":\"item,billing,fulfillment\"```",
"type": "string"
},
"order": {
"description": "Updated order object",
"allOf": [
{
"$ref": "./definitions.json#/$defs/Order"
}
]
}
},
"required": [
"update_target",
"order"
]
}
},
"required": [
"message",
"context"
]
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,46 +0,0 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "on_cancel",
"type": "object",
"properties": {
"context": {
"allOf": [
{
"$ref": "./definitions.json#/$defs/Context"
},
{
"type": "object",
"properties": {
"action": {
"enum": [
"on_cancel"
]
}
},
"required": [
"action"
]
}
]
},
"message": {
"type": "object",
"additionalProperties": false,
"properties": {
"order": {
"$ref": "./definitions.json#/$defs/Order"
}
},
"required": [
"order"
]
},
"error": {
"$ref": "./definitions.json#/$defs/Error"
}
},
"required": [
"context",
"message"
]
}

View File

@@ -1,46 +0,0 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "on_confirm",
"type": "object",
"properties": {
"context": {
"allOf": [
{
"$ref": "./definitions.json#/$defs/Context"
},
{
"type": "object",
"properties": {
"action": {
"enum": [
"on_confirm"
]
}
},
"required": [
"action"
]
}
]
},
"message": {
"type": "object",
"additionalProperties": false,
"properties": {
"order": {
"$ref": "./definitions.json#/$defs/Order"
}
},
"required": [
"order"
]
},
"error": {
"$ref": "./definitions.json#/$defs/Error"
}
},
"required": [
"message",
"context"
]
}

View File

@@ -1,46 +0,0 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "on_init",
"type": "object",
"properties": {
"context": {
"allOf": [
{
"$ref": "./definitions.json#/$defs/Context"
},
{
"type": "object",
"properties": {
"action": {
"enum": [
"on_init"
]
}
},
"required": [
"action"
]
}
]
},
"message": {
"type": "object",
"additionalProperties": false,
"properties": {
"order": {
"$ref": "./definitions.json#/$defs/Order"
}
},
"required": [
"order"
]
},
"error": {
"$ref": "./definitions.json#/$defs/Error"
}
},
"required": [
"message",
"context"
]
}

View File

@@ -1,47 +0,0 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "on_rating",
"type": "object",
"properties": {
"context": {
"allOf": [
{
"$ref": "./definitions.json#/$defs/Context"
},
{
"type": "object",
"properties": {
"action": {
"enum": [
"on_rating"
]
}
},
"required": [
"action"
]
}
]
},
"message": {
"type": "object",
"properties": {
"feedback_form": {
"description": "A feedback form to allow the user to provide additional information on the rating provided",
"allOf": [
{
"$ref": "./definitions.json#/$defs/XInput"
}
]
}
}
},
"error": {
"$ref": "./definitions.json#/$defs/Error"
}
},
"required": [
"context",
"message"
]
}

View File

@@ -1,46 +0,0 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "on_search",
"type": "object",
"properties": {
"context": {
"allOf": [
{
"$ref": "./definitions.json#/$defs/Context"
},
{
"type": "object",
"properties": {
"action": {
"enum": [
"on_search"
]
}
},
"required": [
"action"
]
}
]
},
"message": {
"type": "object",
"additionalProperties": false,
"properties": {
"catalog": {
"$ref": "./definitions.json#/$defs/Catalog"
}
},
"required": [
"catalog"
]
},
"error": {
"$ref": "./definitions.json#/$defs/Error"
}
},
"required": [
"message",
"context"
]
}

View File

@@ -1,43 +0,0 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "on_select",
"type": "object",
"properties": {
"context": {
"allOf": [
{
"$ref": "./definitions.json#/$defs/Context"
},
{
"type": "object",
"properties": {
"action": {
"enum": [
"on_select"
]
}
},
"required": [
"action"
]
}
]
},
"message": {
"type": "object",
"additionalProperties": false,
"properties": {
"order": {
"$ref": "./definitions.json#/$defs/Order"
}
}
},
"error": {
"$ref": "./definitions.json#/$defs/Error"
}
},
"required": [
"message",
"context"
]
}

View File

@@ -1,46 +0,0 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "on_status",
"type": "object",
"properties": {
"context": {
"allOf": [
{
"$ref": "./definitions.json#/$defs/Context"
},
{
"type": "object",
"properties": {
"action": {
"enum": [
"on_status"
]
}
},
"required": [
"action"
]
}
]
},
"message": {
"type": "object",
"additionalProperties": false,
"properties": {
"order": {
"$ref": "./definitions.json#/$defs/Order"
}
},
"required": [
"order"
]
},
"error": {
"$ref": "./definitions.json#/$defs/Error"
}
},
"required": [
"message",
"context"
]
}

View File

@@ -1,42 +0,0 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "on_support",
"type": "object",
"properties": {
"context": {
"allOf": [
{
"$ref": "./definitions.json#/$defs/Context"
},
{
"type": "object",
"properties": {
"action": {
"enum": [
"on_support"
]
}
},
"required": [
"action"
]
}
]
},
"message": {
"type": "object",
"properties": {
"support": {
"$ref": "./definitions.json#/$defs/Support"
}
}
},
"error": {
"$ref": "./definitions.json#/$defs/Error"
}
},
"required": [
"context",
"message"
]
}

View File

@@ -1,46 +0,0 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "on_track",
"type": "object",
"properties": {
"context": {
"allOf": [
{
"$ref": "./definitions.json#/$defs/Context"
},
{
"type": "object",
"properties": {
"action": {
"enum": [
"on_track"
]
}
},
"required": [
"action"
]
}
]
},
"message": {
"type": "object",
"additionalProperties": false,
"properties": {
"tracking": {
"$ref": "./definitions.json#/$defs/Tracking"
}
},
"required": [
"tracking"
]
},
"error": {
"$ref": "./definitions.json#/$defs/Error"
}
},
"required": [
"context",
"message"
]
}

View File

@@ -1,46 +0,0 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "on_update",
"type": "object",
"properties": {
"context": {
"allOf": [
{
"$ref": "./definitions.json#/$defs/Context"
},
{
"type": "object",
"properties": {
"action": {
"enum": [
"on_update"
]
}
},
"required": [
"action"
]
}
]
},
"message": {
"type": "object",
"additionalProperties": false,
"properties": {
"order": {
"$ref": "./definitions.json#/$defs/Order"
}
},
"required": [
"order"
]
},
"error": {
"$ref": "./definitions.json#/$defs/Error"
}
},
"required": [
"message",
"context"
]
}

View File

@@ -1,26 +0,0 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "search",
"type": "object",
"properties": {
"context": {
"allOf": [
{
"$ref": "./definitions.json#/$defs/Context"
}
]
},
"message": {
"properties": {
"intent": {
"$ref": "./definitions.json#/$defs/Intent"
}
},
"type": "object"
}
},
"required": [
"message",
"context"
]
}

View File

@@ -1,43 +0,0 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "select",
"type": "object",
"properties": {
"context": {
"allOf": [
{
"$ref": "./definitions.json#/$defs/Context"
},
{
"type": "object",
"properties": {
"action": {
"enum": [
"select"
]
}
},
"required": [
"action"
]
}
]
},
"message": {
"type": "object",
"additionalProperties": false,
"properties": {
"order": {
"$ref": "./definitions.json#/$defs/Order"
}
},
"required": [
"order"
]
}
},
"required": [
"message",
"context"
]
}

View File

@@ -1,40 +0,0 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "cancel",
"type": "object",
"allOf": [
{
"$ref": "../../core/v1.1.0/cancel.json#"
},
{
"$ref": "init.json#/allOf/2"
},
{
"properties": {
"message": {
"type": "object",
"properties": {
"order_id": {
"type": "string"
},
"descriptor": {
"type": "object",
"properties": {
"code": {
"type": "string",
"enum": ["SOFT_CANCEL", "CONFIRM_CANCEL"]
}
},
"required": ["code"]
},
"cancellation_reason_id": {
"type": "string",
"pattern": "^[0-9]+$"
}
},
"required": ["order_id", "descriptor", "cancellation_reason_id"]
}
}
}
]
}

View File

@@ -1,463 +0,0 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "confirm",
"type": "object",
"allOf": [
{
"$ref": "../../core/v1.1.0/confirm.json#"
},
{
"$ref": "./init.json#/allOf/1"
},
{
"$ref": "./init.json#/allOf/2"
},
{
"allOf": [
{
"$ref": "./on_select.json#/allOf/5"
},
{
"properties": {
"message": {
"properties": {
"order": {
"properties": {
"fulfillments": {
"type": "array",
"items": {
"allOf": [
{
"properties": {
"customer": {
"properties": {
"contact": {
"properties": {
"phone": {
"type": "string",
"pattern": "^\\+?[1-9]\\d{1,14}$"
}
},
"required": [
"phone"
]
},
"person": {
"properties": {
"name": {
"type": "string"
}
},
"required": [
"name"
]
}
},
"required": [
"contact",
"person"
]
}
},
"required": [
"customer"
]
}
]
}
}
}
}
}
}
}
}
]
},
{
"allOf": [
{
"$ref": "./init.json#/allOf/7"
},
{
"properties": {
"message": {
"properties": {
"order": {
"properties": {
"payments": {
"type": "array",
"items": {
"type": "object",
"properties": {
"params": {
"type": "object",
"properties": {
"amount": {
"type": "string",
"pattern": "^\\d+(\\.\\d{1,2})?$"
}
}
},
"type": {
"type": "string",
"enum": [
"PRE-ORDER",
"ON-FULFILLMENT",
"POST-FULFILLMENT"
]
},
"status": {
"type": "string",
"enum": [
"PAID",
"NOT-PAID"
]
},
"collected_by": {
"type": "string",
"enum": [
"BAP",
"BPP"
]
},
"tags": {
"type": "array",
"minItems": 2,
"maxItems": 2,
"uniqueItems": true,
"items": {
"type": "object",
"properties": {
"descriptor": {
"type": "object",
"properties": {
"code": {
"type": "string",
"enum": [
"SETTLEMENT_TERMS",
"BUYER_FINDER_FEES"
]
}
},
"allOf": [
{
"if": {
"properties": {
"descriptor": {
"properties": {
"code": {
"const": "SETTLEMENT_TERMS"
}
}
}
}
},
"then": {
"properties": {
"list": {
"allOf": [
{
"contains": {
"type": "object",
"properties": {
"descriptor": {
"type": "object",
"properties": {
"code": {
"const": "STATIC_TERMS"
}
}
},
"value": {
"type": "string",
"format": "uri"
}
}
}
},
{
"contains": {
"type": "object",
"properties": {
"descriptor": {
"type": "object",
"properties": {
"code": {
"const": "SETTLEMENT_BASIS"
}
}
},
"value": {
"type": "string",
"enum": [
"DELIVERY"
]
}
}
}
},
{
"contains": {
"type": "object",
"properties": {
"descriptor": {
"type": "object",
"properties": {
"code": {
"const": "SETTLEMENT_WINDOW"
}
}
},
"value": {
"type": "string"
}
}
}
},
{
"contains": {
"type": "object",
"properties": {
"descriptor": {
"type": "object",
"properties": {
"code": {
"const": "DELAY_INTEREST"
}
}
},
"value": {
"type": "string",
"pattern": "^\\d+(\\.\\d{1,2})?$"
}
}
}
},
{
"contains": {
"type": "object",
"properties": {
"descriptor": {
"type": "object",
"properties": {
"code": {
"const": "SETTLEMENT_TYPE"
}
}
},
"value": {
"type": "string",
"enum": [
"upi",
"neft",
"rtgs",
"UPI",
"NEFT",
"RTGS"
]
}
}
}
},
{
"contains": {
"type": "object",
"properties": {
"descriptor": {
"type": "object",
"properties": {
"code": {
"const": "SETTLEMENT_AMOUNT"
}
}
},
"value": {
"type": "string",
"pattern": "^\\d+(\\.\\d{1,2})?$"
}
}
}
},
{
"contains": {
"type": "object",
"properties": {
"descriptor": {
"type": "object",
"properties": {
"code": {
"const": "MANDATORY_ARBITRATION"
}
}
},
"value": {
"type": "string",
"enum": [
"true",
"false"
]
}
}
}
},
{
"contains": {
"type": "object",
"properties": {
"descriptor": {
"type": "object",
"properties": {
"code": {
"const": "COURT_JURISDICTION"
}
}
},
"value": {
"type": "string"
}
}
}
}
]
}
}
}
},
{
"if": {
"properties": {
"descriptor": {
"properties": {
"code": {
"const": "BUYER_FINDER_FEES"
}
}
}
}
},
"then": {
"properties": {
"list": {
"type": "array",
"items": {
"type": "object",
"properties": {
"descriptor": {
"type": "object",
"properties": {
"code": {
"enum": [
"BUYER_FINDER_FEES_PERCENTAGE"
]
}
}
},
"value": {
"type": "string",
"pattern": "^-?\\d+(\\.\\d+)?$"
}
}
}
}
}
}
}
]
}
},
"required": [
"descriptor"
]
}
}
},
"required": [
"type",
"status",
"collected_by",
"tags"
]
}
}
}
}
}
}
}
}
]
},
{
"properties": {
"message": {
"properties": {
"order": {
"properties": {
"payments": {
"type": "array",
"items": {
"properties": {
"type": {
"type": "string"
},
"params": {
"type": "object",
"properties": {
"transaction_id": {
"type": "string"
}
}
}
},
"required": [
"type"
],
"allOf": [
{
"if": {
"properties": {
"type": {
"const": "PRE-ORDER"
}
}
},
"then": {
"properties": {
"params": {
"required": [
"transaction_id"
]
}
}
}
}
]
}
}
},
"required": [
"payments"
]
}
}
}
}
},
{
"properties": {
"message": {
"properties": {
"order": {
"not": {
"required": [
"id"
]
}
}
}
}
}
}
]
}

View File

@@ -1,550 +0,0 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "init",
"type": "object",
"allOf": [
{
"$ref": "../../core/v1.1.0/init.json#"
},
{
"properties": {
"context": {
"type": "object",
"allOf": [
{
"$ref": "./search.json#/properties/context/allOf/0"
},
{
"required": [
"bpp_id",
"bpp_uri"
]
}
]
}
}
},
{
"properties": {
"message": {
"properties": {
"order": {
"type": "object",
"properties": {
"provider": {
"type": "object",
"properties": {
"id": {
"type": "string"
}
},
"required": [
"id"
]
},
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
}
},
"required": [
"id"
]
}
}
},
"required": [
"provider",
"items"
]
}
}
}
}
},
{
"$ref": "./confirm.json#/allOf/4"
},
{
"$ref": "./on_select.json#/allOf/7"
},
{
"properties": {
"message": {
"properties": {
"order": {
"required": [
"fulfillments"
]
}
}
}
}
},
{
"properties": {
"message": {
"type": "object",
"properties": {
"order": {
"type": "object",
"properties": {
"payments": {
"type": "array",
"items": {
"type": "object",
"properties": {
"params": {
"type": "object",
"properties": {
"amount": {
"type": "string",
"pattern": "^\\d+(\\.\\d{1,2})?$"
}
}
},
"type": {
"type": "string",
"enum": [
"PRE-ORDER",
"ON-FULFILLMENT",
"POST-FULFILLMENT"
]
},
"status": {
"type": "string",
"enum": [
"PAID",
"NOT-PAID"
]
},
"collected_by": {
"type": "string",
"enum": [
"BAP",
"BPP"
]
},
"tags": {
"type": "array",
"minItems": 2,
"maxItems": 2,
"uniqueItems": true,
"items": {
"type": "object",
"properties": {
"descriptor": {
"type": "object",
"properties": {
"code": {
"type": "string",
"enum": [
"SETTLEMENT_TERMS",
"BUYER_FINDER_FEES"
]
}
}
}
},
"required": [
"descriptor"
]
}
}
},
"required": [
"type",
"status",
"collected_by",
"tags"
],
"allOf": [
{
"if": {
"allOf": [
{
"properties": {
"collected_by": {
"const": "BAP"
}
}
},
{
"properties": {
"type": {
"const": "PRE-ORDER"
}
}
}
]
},
"then": {
"properties": {
"tags": {
"items": {
"if": {
"properties": {
"descriptor": {
"properties": {
"code": {
"const": "SETTLEMENT_TERMS"
}
}
}
}
},
"then": {
"properties": {
"list": {
"allOf": [
{
"contains": {
"type": "object",
"properties": {
"descriptor": {
"type": "object",
"properties": {
"code": {
"const": "STATIC_TERMS"
}
}
},
"value": {
"type": "string",
"format": "uri"
}
}
}
},
{
"contains": {
"type": "object",
"properties": {
"descriptor": {
"type": "object",
"properties": {
"code": {
"const": "SETTLEMENT_BASIS"
}
}
},
"value": {
"type": "string",
"enum": [
"DELIVERY"
]
}
}
}
},
{
"contains": {
"type": "object",
"properties": {
"descriptor": {
"type": "object",
"properties": {
"code": {
"const": "SETTLEMENT_WINDOW"
}
}
},
"value": {
"type": "string"
}
}
}
},
{
"contains": {
"type": "object",
"properties": {
"descriptor": {
"type": "object",
"properties": {
"code": {
"const": "DELAY_INTEREST"
}
}
},
"value": {
"type": "string",
"pattern": "^\\d+(\\.\\d{1,2})?$"
}
}
}
}
]
}
}
}
}
}
}
}
},
{
"if": {
"allOf": [
{
"properties": {
"collected_by": {
"const": "BPP"
}
}
},
{
"properties": {
"type": {
"const": "PRE-ORDER"
}
}
}
]
},
"then": {
"properties": {
"tags": {
"items": {
"if": {
"properties": {
"descriptor": {
"properties": {
"code": {
"const": "SETTLEMENT_TERMS"
}
}
}
}
},
"then": {
"properties": {
"list": {
"allOf": [
{
"contains": {
"type": "object",
"properties": {
"descriptor": {
"type": "object",
"properties": {
"code": {
"const": "STATIC_TERMS"
}
}
},
"value": {
"type": "string",
"format": "uri"
}
}
}
},
{
"contains": {
"type": "object",
"properties": {
"descriptor": {
"type": "object",
"properties": {
"code": {
"const": "SETTLEMENT_BASIS"
}
}
},
"value": {
"type": "string",
"enum": [
"DELIVERY"
]
}
}
}
},
{
"contains": {
"type": "object",
"properties": {
"descriptor": {
"type": "object",
"properties": {
"code": {
"const": "SETTLEMENT_WINDOW"
}
}
},
"value": {
"type": "string"
}
}
}
}
]
}
}
}
}
}
}
}
},
{
"if": {
"allOf": [
{
"properties": {
"collected_by": {
"const": "BPP"
}
}
},
{
"properties": {
"type": {
"const": "ON-FULFILLMENT"
}
}
}
]
},
"then": {
"properties": {
"tags": {
"items": {
"if": {
"properties": {
"descriptor": {
"properties": {
"code": {
"const": "SETTLEMENT_TERMS"
}
}
}
}
},
"then": {
"properties": {
"list": {
"allOf": [
{
"contains": {
"type": "object",
"properties": {
"descriptor": {
"type": "object",
"properties": {
"code": {
"const": "STATIC_TERMS"
}
}
},
"value": {
"type": "string",
"format": "uri"
}
}
}
},
{
"contains": {
"type": "object",
"properties": {
"descriptor": {
"type": "object",
"properties": {
"code": {
"const": "SETTLEMENT_BASIS"
}
}
},
"value": {
"type": "string",
"enum": [
"DELIVERY"
]
}
}
}
},
{
"contains": {
"type": "object",
"properties": {
"descriptor": {
"type": "object",
"properties": {
"code": {
"const": "SETTLEMENT_WINDOW"
}
}
},
"value": {
"type": "string"
}
}
}
},
{
"contains": {
"type": "object",
"properties": {
"descriptor": {
"type": "object",
"properties": {
"code": {
"const": "DELAY_INTEREST"
}
}
},
"value": {
"type": "string",
"pattern": "^\\d+(\\.\\d{1,2})?$"
}
}
}
}
]
}
}
}
}
}
}
}
}
]
}
}
}
}
}
}
}
},
{
"properties": {
"message": {
"properties": {
"order": {
"properties": {
"billing": {
"required": [
"name"
]
}
},
"required": [
"billing"
]
}
}
}
}
}
]
}

View File

@@ -1,13 +0,0 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "on_cancel",
"type": "object",
"allOf": [
{
"$ref": "../../core/v1.1.0/on_cancel.json#"
},
{
"$ref": "./init.json#/allOf/1"
}
]
}

View File

@@ -1,314 +0,0 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "on_confirm",
"type": "object",
"allOf": [
{
"$ref": "../../core/v1.1.0/on_confirm.json#"
},
{
"$ref": "./init.json#/allOf/1"
},
{
"properties": {
"message": {
"properties": {
"order": {
"properties": {
"provider": {
"type": "object",
"properties": {
"id": {
"type": "string"
}
},
"required": ["id"]
}
},
"required": ["provider"]
}
}
}
}
},
{
"$ref": "./confirm.json#/allOf/5"
},
{
"properties": {
"message": {
"properties": {
"order": {
"properties": {
"items": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"properties": {
"fulfillment_ids": {
"minItems": 1
},
"location_ids": {
"minItems": 1
}
},
"required": ["fulfillment_ids", "location_ids"]
}
}
}
}
}
}
}
},
{
"$ref": "./confirm.json#/allOf/4/allOf/1"
},
{
"properties": {
"message": {
"properties": {
"order": {
"properties": {
"fulfillments": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": ["DELIVERY"]
}
},
"required": ["type"]
}
}
}
}
}
}
}
},
{
"allOf": [
{
"properties": {
"message": {
"properties": {
"order": {
"properties": {
"quote": {
"type": "object",
"properties": {
"price": {
"type": "object",
"properties": {
"currency": {
"type": "string"
},
"value": {
"type": "string",
"pattern": "^\\d+(\\.\\d{1,2})?$"
}
},
"required": ["currency", "value"]
},
"breakup": {
"type": "array",
"items": {
"type": "object",
"properties": {
"price": {
"type": "object",
"properties": {
"currency": {
"type": "string"
},
"value": {
"type": "string",
"pattern": "^\\d+(\\.\\d{1,2})?$"
}
},
"required": ["currency", "value"]
},
"title": {
"type": "string",
"enum": [
"BASE_FARE",
"DISTANCE_FARE",
"TAX",
"DISCOUNT",
"WAITING_CHARGE"
]
}
},
"required": ["price", "title"]
}
}
},
"required": ["price", "breakup"]
}
},
"required": ["quote"]
}
}
}
}
},
{
"properties": {
"message": {
"properties": {
"order": {
"properties": {
"quote": {
"properties": {
"breakup": {
"allOf": [
{
"contains": {
"type": "object",
"properties": {
"title": {
"const": "BASE_FARE"
},
"price": {
"type": "object",
"properties": {
"value": {
"type": "string"
}
},
"required": ["value"]
}
},
"required": ["title", "price"]
}
},
{
"contains": {
"type": "object",
"properties": {
"title": {
"const": "DISTANCE_FARE"
},
"price": {
"type": "object",
"properties": {
"value": {
"type": "string"
}
},
"required": ["value"]
}
},
"required": ["title", "price"]
}
}
]
}
}
}
}
}
}
}
}
}
]
},
{
"$ref": "./confirm.json#/allOf/6"
},
{
"allOf": [
{
"properties": {
"message": {
"properties": {
"order": {
"properties": {
"cancellation_terms": {
"type": "array",
"items": {
"type": "object",
"properties": {
"fulfillment_state": {
"type": "object",
"properties": {
"descriptor": {
"type": "object",
"properties": {
"code": {
"type": "string",
"enum": [
"RIDE_ASSIGNED",
"RIDE_ENROUTE_PICKUP",
"RIDE_ARRIVED_PICKUP",
"RIDE_STARTED"
]
}
},
"required": ["code"]
}
},
"required": ["descriptor"]
},
"cancellation_fee": {
"oneOf": [
{
"type": "object",
"properties": {
"percentage": {
"type": "string",
"pattern": "^(100(\\.0{1,2})?|([0-9]{1,2})(\\.\\d{1,2})?)$"
}
},
"required": ["percentage"]
},
{
"type": "object",
"properties": {
"amount": {
"type": "object",
"properties": {
"value": {
"type": "string",
"pattern": "^[+-]?(\\d+(\\.\\d*)?|\\.\\d+)$"
},
"currency": {
"type": "string"
}
},
"required": ["currency", "value"]
}
},
"required": ["amount"]
}
]
}
},
"required": ["fulfillment_state", "cancellation_fee"]
}
}
},
"required": ["cancellation_terms"]
}
}
}
}
},
{
"properties": {
"message": {
"type": "object"
}
},
"required": ["message"]
}
]
}
]
}

View File

@@ -1,317 +0,0 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "on_init",
"type": "object",
"allOf": [
{
"$ref": "../../core/v1.1.0/on_init.json#"
},
{
"$ref": "./init.json#/allOf/1"
},
{
"properties": {
"message": {
"properties": {
"order": {
"properties": {
"provider": {
"type": "object",
"properties": {
"id": {
"type": "string"
}
},
"required": ["id"]
}
},
"required": ["provider"]
}
}
}
}
},
{
"$ref": "./confirm.json#/allOf/5"
},
{
"$ref": "./on_select.json#/allOf/6"
},
{
"properties": {
"message": {
"properties": {
"order": {
"properties": {
"items": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"properties": {
"fulfillment_ids": {
"minItems": 1
},
"location_ids": {
"minItems": 1
}
},
"required": ["fulfillment_ids", "location_ids"]
}
}
}
}
}
}
}
},
{
"$ref": "./confirm.json#/allOf/4/allOf/1"
},
{
"properties": {
"message": {
"properties": {
"order": {
"properties": {
"fulfillments": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": ["DELIVERY"]
}
},
"required": ["type"]
}
}
}
}
}
}
}
},
{
"allOf": [
{
"properties": {
"message": {
"properties": {
"order": {
"properties": {
"quote": {
"type": "object",
"properties": {
"price": {
"type": "object",
"properties": {
"currency": {
"type": "string"
},
"value": {
"type": "string",
"pattern": "^\\d+(\\.\\d{1,2})?$"
}
},
"required": ["currency", "value"]
},
"breakup": {
"type": "array",
"items": {
"type": "object",
"properties": {
"price": {
"type": "object",
"properties": {
"currency": {
"type": "string"
},
"value": {
"type": "string",
"pattern": "^\\d+(\\.\\d{1,2})?$"
}
},
"required": ["currency", "value"]
},
"title": {
"type": "string",
"enum": [
"BASE_FARE",
"DISTANCE_FARE",
"TAX",
"DISCOUNT",
"WAITING_CHARGE"
]
}
},
"required": ["price", "title"]
}
}
},
"required": ["price", "breakup"]
}
},
"required": ["quote"]
}
}
}
}
},
{
"properties": {
"message": {
"properties": {
"order": {
"properties": {
"quote": {
"properties": {
"breakup": {
"allOf": [
{
"contains": {
"type": "object",
"properties": {
"title": {
"const": "BASE_FARE"
},
"price": {
"type": "object",
"properties": {
"value": {
"type": "string"
}
},
"required": ["value"]
}
},
"required": ["title", "price"]
}
},
{
"contains": {
"type": "object",
"properties": {
"title": {
"const": "DISTANCE_FARE"
},
"price": {
"type": "object",
"properties": {
"value": {
"type": "string"
}
},
"required": ["value"]
}
},
"required": ["title", "price"]
}
}
]
}
}
}
}
}
}
}
}
}
]
},
{
"$ref": "./confirm.json#/allOf/6"
},
{
"allOf": [
{
"properties": {
"message": {
"properties": {
"order": {
"properties": {
"cancellation_terms": {
"type": "array",
"items": {
"type": "object",
"properties": {
"fulfillment_state": {
"type": "object",
"properties": {
"descriptor": {
"type": "object",
"properties": {
"code": {
"type": "string",
"enum": [
"RIDE_ASSIGNED",
"RIDE_ENROUTE_PICKUP",
"RIDE_ARRIVED_PICKUP",
"RIDE_STARTED"
]
}
},
"required": ["code"]
}
},
"required": ["descriptor"]
},
"cancellation_fee": {
"oneOf": [
{
"type": "object",
"properties": {
"percentage": {
"type": "string",
"pattern": "^(100(\\.0{1,2})?|([0-9]{1,2})(\\.\\d{1,2})?)$"
}
},
"required": ["percentage"]
},
{
"type": "object",
"properties": {
"amount": {
"type": "object",
"properties": {
"value": {
"type": "string",
"pattern": "^[+-]?(\\d+(\\.\\d*)?|\\.\\d+)$"
},
"currency": {
"type": "string"
}
},
"required": ["currency", "value"]
}
},
"required": ["amount"]
}
]
}
},
"required": ["fulfillment_state", "cancellation_fee"]
}
}
},
"required": ["cancellation_terms"]
}
}
}
}
},
{
"properties": {
"message": {
"type": "object"
}
},
"required": ["message"]
}
]
}
]
}

View File

@@ -1,13 +0,0 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "on_rating",
"type": "object",
"allOf": [
{
"$ref": "../../core/v1.1.0/on_rating.json#"
},
{
"$ref": "./init.json#/allOf/1"
}
]
}

View File

@@ -1,644 +0,0 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "on_search",
"type": "object",
"allOf": [
{
"$ref": "../../core/v1.1.0/on_search.json#"
},
{
"$ref": "./init.json#/allOf/1"
},
{
"properties": {
"message": {
"type": "object",
"properties": {
"catalog": {
"type": "object",
"properties": {
"descriptor": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"images": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1
}
},
"required": [
"name"
]
},
"providers": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"descriptor": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"images": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1
}
},
"required": [
"name"
]
},
"fulfillments": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"properties": {
"vehicle": {
"type": "object",
"properties": {
"category": {
"type": "string",
"enum": [
"AUTO_RICKSHAW",
"CAB"
]
}
},
"required": [
"category"
]
},
"type": {
"type": "string",
"enum": [
"DELIVERY"
]
}
},
"required": [
"id",
"vehicle",
"type"
]
}
},
"items": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"properties": {
"descriptor": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"code": {
"type": "string",
"enum": [
"RIDE"
]
}
},
"required": [
"code"
]
},
"price": {
"type": "object",
"properties": {
"value": {
"type": "string",
"pattern": "^-?\\d+(\\.\\d+)?$"
}
},
"required": [
"value",
"currency"
]
},
"fulfillment_ids": {
"type": "array",
"minItems": 1
},
"payment_ids": {
"type": "array",
"minItems": 1
}
},
"required": [
"id",
"descriptor",
"price",
"fulfillment_ids"
]
}
}
},
"required": [
"id",
"items",
"fulfillments"
]
}
}
},
"required": [
"providers"
]
}
},
"required": [
"catalog"
]
}
}
},
{
"properties": {
"message": {
"properties": {
"order": {
"properties": {
"payments": {
"type": "array",
"items": {
"type": "object",
"properties": {
"collected_by": {
"type": "string",
"enum": [
"BAP",
"BPP"
]
},
"tags": {
"type": "array",
"minItems": 2,
"maxItems": 2,
"uniqueItems": true,
"items": {
"type": "object",
"properties": {
"descriptor": {
"type": "object",
"properties": {
"code": {
"type": "string",
"enum": [
"SETTLEMENT_TERMS",
"BUYER_FINDER_FEES"
]
}
}
}
},
"required": [
"descriptor"
]
}
}
},
"required": [
"collected_by",
"tags"
],
"allOf": [
{
"if": {
"allOf": [
{
"properties": {
"collected_by": {
"const": "BAP"
}
}
}
]
},
"then": {
"properties": {
"tags": {
"items": {
"if": {
"properties": {
"descriptor": {
"properties": {
"code": {
"const": "SETTLEMENT_TERMS"
}
}
}
}
},
"then": {
"properties": {
"list": {
"allOf": [
{
"contains": {
"type": "object",
"properties": {
"descriptor": {
"type": "object",
"properties": {
"code": {
"const": "STATIC_TERMS"
}
}
},
"value": {
"type": "string",
"format": "uri"
}
}
}
},
{
"contains": {
"type": "object",
"properties": {
"descriptor": {
"type": "object",
"properties": {
"code": {
"const": "SETTLEMENT_TYPE"
}
}
},
"value": {
"type": "string",
"enum": [
"upi",
"neft",
"rtgs",
"UPI",
"NEFT",
"RTGS"
]
}
}
}
},
{
"contains": {
"type": "object",
"properties": {
"descriptor": {
"type": "object",
"properties": {
"code": {
"const": "DELAY_INTEREST"
}
}
},
"value": {
"type": "string",
"pattern": "^\\d+(\\.\\d{1,2})?$"
}
}
}
},
{
"contains": {
"type": "object",
"properties": {
"descriptor": {
"type": "object",
"properties": {
"code": {
"const": "MANDATORY_ARBITRATION"
}
}
},
"value": {
"type": "string",
"enum": [
"true",
"false"
]
}
}
}
},
{
"contains": {
"type": "object",
"properties": {
"descriptor": {
"type": "object",
"properties": {
"code": {
"const": "COURT_JURISDICTION"
}
}
},
"value": {
"type": "string"
}
}
}
}
]
}
}
}
}
}
}
}
},
{
"if": {
"allOf": [
{
"properties": {
"collected_by": {
"const": "BPP"
}
}
}
]
},
"then": {
"properties": {
"tags": {
"items": {
"if": {
"properties": {
"descriptor": {
"properties": {
"code": {
"const": "SETTLEMENT_TERMS"
}
}
}
}
},
"then": {
"properties": {
"list": {
"allOf": [
{
"contains": {
"type": "object",
"properties": {
"descriptor": {
"type": "object",
"properties": {
"code": {
"const": "STATIC_TERMS"
}
}
},
"value": {
"type": "string",
"format": "uri"
}
}
}
},
{
"contains": {
"type": "object",
"properties": {
"descriptor": {
"type": "object",
"properties": {
"code": {
"const": "SETTLEMENT_TYPE"
}
}
},
"value": {
"type": "string",
"enum": [
"upi",
"neft",
"rtgs",
"UPI",
"NEFT",
"RTGS"
]
}
}
}
},
{
"contains": {
"type": "object",
"properties": {
"descriptor": {
"type": "object",
"properties": {
"code": {
"const": "DELAY_INTEREST"
}
}
},
"value": {
"type": "string",
"pattern": "^\\d+(\\.\\d{1,2})?$"
}
}
}
},
{
"contains": {
"type": "object",
"properties": {
"descriptor": {
"type": "object",
"properties": {
"code": {
"const": "MANDATORY_ARBITRATION"
}
}
},
"value": {
"type": "string",
"enum": [
"true",
"false"
]
}
}
}
},
{
"contains": {
"type": "object",
"properties": {
"descriptor": {
"type": "object",
"properties": {
"code": {
"const": "COURT_JURISDICTION"
}
}
},
"value": {
"type": "string"
}
}
}
},
{
"contains": {
"type": "object",
"properties": {
"descriptor": {
"type": "object",
"properties": {
"code": {
"const": "SETTLEMENT_BASIS"
}
}
},
"value": {
"type": "string",
"enum": [
"DELIVERY"
]
}
}
}
},
{
"contains": {
"type": "object",
"properties": {
"descriptor": {
"type": "object",
"properties": {
"code": {
"const": "SETTLEMENT_WINDOW"
}
}
},
"value": {
"type": "string"
}
}
}
}
]
}
}
}
}
}
}
}
}
]
}
}
},
"required": [
"payments"
]
}
}
}
}
},
{
"properties": {
"message": {
"properties": {
"catalog": {
"properties": {
"providers": {
"items": {
"properties": {
"fulfillments": {
"items": {
"properties": {
"stops": {
"allOf": [
{
"contains": {
"type": "object",
"properties": {
"location": {
"type": "object",
"properties": {
"gps": {
"type": "string"
}
},
"required": [
"gps"
]
},
"type": {
"const": "START"
}
},
"required": [
"location",
"type"
]
}
},
{
"contains": {
"type": "object",
"properties": {
"location": {
"type": "object",
"properties": {
"gps": {
"type": "string"
}
},
"required": [
"gps"
]
},
"type": {
"const": "END"
}
},
"required": [
"location",
"type"
]
}
}
]
}
},
"required": [
"stops"
]
}
}
}
}
}
}
}
}
}
}
}
]
}

View File

@@ -1,230 +0,0 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "on_select",
"type": "object",
"allOf": [
{
"$ref": "../../core/v1.1.0/on_select.json#"
},
{
"$ref": "./init.json#/allOf/1"
},
{
"$ref": "./on_init.json#/allOf/2"
},
{
"$ref": "./confirm.json#/allOf/5"
},
{
"$ref": "./on_init.json#/allOf/5"
},
{
"allOf": [
{
"properties": {
"message": {
"properties": {
"order": {
"properties": {
"fulfillments": {
"type": "array",
"minItems": 1,
"items": {
"required": ["id"]
}
}
},
"required": ["fulfillments"]
}
}
}
}
},
{
"properties": {
"message": {
"properties": {
"order": {
"properties": {
"fulfillments": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"properties": {
"state": {
"type": "object",
"properties": {
"descriptor": {
"type": "object",
"properties": {
"code": {
"type": "string",
"enum": [
"RIDE_ASSIGNED",
"RIDE_ENROUTE_PICKUP",
"RIDE_ARRIVED_PICKUP",
"RIDE_STARTED",
"RIDE_ENDED",
"RIDE_CANCELLED"
]
}
},
"required": ["code"]
}
}
}
}
}
}
}
}
}
}
}
},
{
"properties": {
"message": {
"properties": {
"order": {
"properties": {
"fulfillments": {
"type": "array",
"minItems": 1,
"items": {
"properties": {
"stops": {
"items": {
"properties": {
"authorization": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": ["OTP"]
},
"token": {
"type": "string",
"pattern": "^-?\\d+(\\.\\d+)?$"
}
},
"required": ["type", "token"]
}
}
}
}
}
}
}
}
}
}
}
}
},
{
"properties": {
"message": {
"properties": {
"order": {
"properties": {
"fulfillments": {
"items": {
"properties": {
"stops": {
"type": "array",
"minItems": 2,
"items": {
"type": "object",
"properties": {
"location": {
"type": "object",
"properties": {
"gps": { "type": "string" }
},
"required": ["gps"]
},
"type": {
"enum": ["START", "END"]
}
},
"required": ["location", "type"]
}
}
},
"required": ["stops"]
}
}
}
}
}
}
}
},
{
"properties": {
"message": {
"properties": {
"order": {
"properties": {
"fulfillments": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"properties": {
"vehicle": {
"properties": {
"category": {
"type": "string",
"enum": ["AUTO_RICKSHAW", "CAB"]
}
},
"required": ["category"]
}
},
"required": ["vehicle"]
}
}
},
"required": ["fulfillments"]
}
}
}
}
}
]
},
{
"$ref": "./on_init.json#/allOf/7"
},
{
"properties": {
"message": {
"properties": {
"order": {
"properties": {
"fulfillments": {
"type": "array",
"items": {
"allOf": [
{
"not": {
"required": ["agent"]
}
}
]
}
}
}
}
}
}
}
},
{
"$ref": "./on_init.json#/allOf/8"
}
]
}

View File

@@ -1,13 +0,0 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "on_status",
"type": "object",
"allOf": [
{
"$ref": "../../core/v1.1.0/on_status.json#"
},
{
"$ref": "./init.json#/allOf/1"
}
]
}

View File

@@ -1,13 +0,0 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "on_support",
"type": "object",
"allOf": [
{
"$ref": "../../core/v1.1.0/on_support.json#"
},
{
"$ref": "./init.json#/allOf/1"
}
]
}

View File

@@ -1,13 +0,0 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "on_track",
"type": "object",
"allOf": [
{
"$ref": "../../core/v1.1.0/on_track.json#"
},
{
"$ref": "./init.json#/allOf/1"
}
]
}

View File

@@ -1,13 +0,0 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "on_update",
"type": "object",
"allOf": [
{
"$ref": "../../core/v1.1.0/on_update.json#"
},
{
"$ref": "./init.json#/allOf/1"
}
]
}

View File

@@ -1,13 +0,0 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "rating",
"type": "object",
"allOf": [
{
"$ref": "../../core/v1.1.0/rating.json#"
},
{
"$ref": "./init.json#/allOf/1"
}
]
}

View File

@@ -1,146 +0,0 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "search",
"allOf": [
{ "$ref": "../../core/v1.1.0/search.json#" }
],
"type": "object",
"properties": {
"context": {
"type": "object",
"allOf": [
{
"properties": {
"action": {
"type": "string"
},
"location": {
"type": "object",
"properties": {
"city": {
"type": "object",
"properties": {
"code": { "type": "string" }
},
"required": ["code"]
},
"country": {
"type": "object",
"properties": {
"code": {
"type": "string",
"enum": ["IND"]
}
},
"required": ["code"]
}
},
"required": ["city", "country"]
},
"bap_id": {
"type": "string"
},
"bpp_id": {
"type": "string"
},
"ttl": {
"type": "string",
"format": "duration"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
},
"required": [
"location",
"domain",
"action",
"message_id",
"transaction_id",
"timestamp",
"bap_id",
"bap_uri",
"ttl"
]
}
]
},
"message": {
"type": "object",
"properties": {
"intent": {
"allOf": [
{
"type": "object",
"properties": {
"payment": {
"type": "object",
"properties": {
"collected_by": {
"type": "string",
"enum": ["BPP", "BAP"]
},
"tags": {
"type": "array",
"minItems": 2,
"maxItems": 2,
"uniqueItems": true,
"items": {
"type": "object",
"properties": {
"descriptor": {
"type": "object",
"properties": {
"code": {
"type": "string",
"enum": ["SETTLEMENT_TERMS", "BUYER_FINDER_FEES"]
}
}
}
},
"required": ["descriptor"]
}
}
},
"required": ["collected_by"]
},
"fulfillment": {
"type": "object",
"properties": {
"stops": {
"type": "array",
"items": {
"type": "object",
"properties": {
"location": {
"type": "object",
"properties": {
"gps": { "type": "string" }
},
"required": ["gps"]
},
"type": {
"type": "string",
"enum": ["START", "END"]
}
},
"required": ["location", "type"]
},
"minItems": 2
}
},
"required": ["stops"]
}
},
"required": ["payment", "fulfillment"]
}
]
}
},
"required": ["intent"]
}
},
"required": ["context", "message"]
}

View File

@@ -1,16 +0,0 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "select",
"type": "object",
"allOf": [
{
"$ref": "../../core/v1.1.0/select.json#"
},
{
"$ref": "./init.json#/allOf/1"
},
{
"$ref": "./init.json#/allOf/2"
}
]
}

View File

@@ -1,26 +0,0 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "status",
"type": "object",
"allOf": [
{
"$ref": "../../core/v1.1.0/status.json#"
},
{
"$ref": "./init.json#/allOf/1"
},
{
"properties": {
"message": {
"type": "object",
"properties": {
"order_id": {
"type": "string"
}
},
"required": ["order_id"]
}
}
}
]
}

View File

@@ -1,13 +0,0 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "support",
"type": "object",
"allOf": [
{
"$ref": "../../core/v1.1.0/support.json#"
},
{
"$ref": "./init.json#/allOf/1"
}
]
}

View File

@@ -1,13 +0,0 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "track",
"type": "object",
"allOf": [
{
"$ref": "../../core/v1.1.0/track.json#"
},
{
"$ref": "./init.json#/allOf/1"
}
]
}

View File

@@ -1,35 +0,0 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "update",
"type": "object",
"allOf": [
{
"$ref": "../../core/v1.1.0/update.json#"
},
{
"$ref": "./init.json#/allOf/1"
},
{
"properties": {
"message": {
"type": "object",
"properties": {
"order": {
"type": "object",
"properties": {
"id": {
"type": "string"
}
},
"required": ["id"]
},
"update_target": {
"type": "string",
"pattern": "^[^,]+(,[^,]+)*$"
}
}
}
}
}
]
}

View File

@@ -1,69 +0,0 @@
- id: pooja-stores
descriptor:
name: Pooja Stores
locations:
- id: koramangala-4th-block-location
gps: "12.9349377,77.6055586"
categories:
- id: fresh_fruits
descriptor:
name: Fresh Fruits
- id: beverages
descriptor:
name: Beverages
items:
- id: item_2
descriptor:
name: Green Apples Organic
images:
- url: "https://mock_bpp.com/images/item_2.jpg"
category_id: fresh_fruits
location_id: koramangala-4th-block-location
price:
currency: INR
value: "170"
matched: true
- id: item_1
descriptor:
name: Red Apples
images:
- url: "https://mock_bpp.com/images/item_1.jpg"
category_id: fresh_fruits
location_id: koramangala-4th-block-location
price:
currency: INR
value: "90"
related: true
- id: item_7
descriptor:
name: Green Apple Juice
images:
- url: "https://mock_bpp.com/images/item_7.jpg"
category_id: beverages
location_id: koramangala-4th-block-location
price:
currency: INR
value: "70"
matched: true
- id: food-mall
descriptor:
name: Food Mall
locations:
- id: food-mall-location
gps: "12.9349377,77.6055586"
categories:
- id: fresh-food
descriptor:
name: Fresh food
items:
- id: item_1_1
descriptor:
name: Green Apple Salad
images:
- url: "https://mock_bpp.com/images/item_1_1.jpg"
category_id: fresh-food
location_id: food-mall-location
price:
currency: INR
value: "200"
matched: true

25
go.mod
View File

@@ -4,26 +4,25 @@ go 1.23.0
toolchain go1.23.7
require golang.org/x/crypto v0.36.0
require (
github.com/stretchr/testify v1.10.0
golang.org/x/crypto v0.36.0
)
require (
github.com/google/go-cmp v0.7.0 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
github.com/kr/pretty v0.3.1 // indirect
github.com/mattn/go-colorable v0.1.13 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
go.opentelemetry.io/otel v1.34.0 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/rogpeppe/go-internal v1.13.1 // indirect
github.com/stretchr/objx v0.5.2 // indirect
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
require (
github.com/felixge/httpsnoop v1.0.4 // indirect
github.com/go-logr/logr v1.4.2 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/zenazn/pkcs7pad v0.0.0-20170308005700-253a5b1f0e03
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.59.0
go.opentelemetry.io/otel/metric v1.34.0 // indirect
go.opentelemetry.io/otel/trace v1.34.0 // indirect
)
require github.com/zenazn/pkcs7pad v0.0.0-20170308005700-253a5b1f0e03
require (
github.com/hashicorp/go-retryablehttp v0.7.7

27
go.sum
View File

@@ -1,26 +1,21 @@
github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM=
github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE=
github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ=
github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48=
github.com/hashicorp/go-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB11/k=
github.com/hashicorp/go-hclog v1.6.3/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M=
github.com/hashicorp/go-retryablehttp v0.7.7 h1:C8hUCYzor8PIfXHa4UrZkU4VvK8o9ISHxT2Q8+VepXU=
github.com/hashicorp/go-retryablehttp v0.7.7/go.mod h1:pkQpWZeYWskR+D1tR2O5OcBFOxfA7DoAO6xtkuQnHTk=
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
@@ -29,28 +24,22 @@ github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/
github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs=
github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII=
github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o=
github.com/rs/xid v1.6.0/go.mod h1:7XoLgs4eV+QndskICGsho+ADou8ySMSjJKDIan90Nz0=
github.com/rs/zerolog v1.34.0 h1:k43nTLIwcTVQAncfCw4KZ2VY6ukYoZaBPNOE8txlOeY=
github.com/rs/zerolog v1.34.0/go.mod h1:bJsvje4Z08ROH4Nhs5iH600c3IkWhwp44iRc54W6wYQ=
github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=
github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/zenazn/pkcs7pad v0.0.0-20170308005700-253a5b1f0e03 h1:m1h+vudopHsI67FPT9MOncyndWhTcdUoBtI1R1uajGY=
github.com/zenazn/pkcs7pad v0.0.0-20170308005700-253a5b1f0e03/go.mod h1:8sheVFH84v3PCyFY/O02mIgSQY9I6wMYPWsq7mDnEZY=
go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.59.0 h1:CV7UdSGJt/Ao6Gp4CXckLxVRRsRgDHoI8XjbL3PDl8s=
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.59.0/go.mod h1:FRmFuRJfag1IZ2dPkHnEoSFVgTVPUd2qf5Vi69hLb8I=
go.opentelemetry.io/otel v1.34.0 h1:zRLXxLCgL1WyKsPVrgbSdMN4c0FMkDAskSTQP+0hdUY=
go.opentelemetry.io/otel v1.34.0/go.mod h1:OWFPOQ+h4G8xpyjgqo4SxJYdDQ/qmRH+wivy7zzx9oI=
go.opentelemetry.io/otel/metric v1.34.0 h1:+eTR3U0MyfWjRDhmFMxe2SsW64QrZ84AOhvqS7Y+PoQ=
go.opentelemetry.io/otel/metric v1.34.0/go.mod h1:CEDrp0fy2D0MvkXE+dPV7cMi8tWZwX3dmaIhwPOaqHE=
go.opentelemetry.io/otel/trace v1.34.0 h1:+ouXS2V8Rd4hp4580a8q23bg0azF2nI8cqLYnC8mh/k=
go.opentelemetry.io/otel/trace v1.34.0/go.mod h1:Svm7lSjQD7kG7KJ/MUHPVXSDGz2OX4h0M2jHBhmSfRE=
golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34=
golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc=
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=