removed dead vars + front tracing
This commit is contained in:
@@ -4,7 +4,6 @@ matrix:
|
||||
CHAIN_GATEWAY_DOCKERFILE: ci/prod/compose/chain_gateway.dockerfile
|
||||
CHAIN_GATEWAY_MONGO_SECRET_PATH: sendico/db
|
||||
CHAIN_GATEWAY_RPC_SECRET_PATH: sendico/gateway/chain
|
||||
CHAIN_GATEWAY_WALLET_SECRET_PATH: sendico/gateway/chain/wallet
|
||||
CHAIN_GATEWAY_VAULT_SECRET_PATH: sendico/gateway/chain/vault
|
||||
|
||||
labels:
|
||||
|
||||
@@ -56,11 +56,6 @@ chains:
|
||||
- symbol: USDC
|
||||
contract: "0x75faf114eafb1bdbe2f0316df893fd58ce46aa4d"
|
||||
|
||||
service_wallet:
|
||||
chain: arbitrum_sepolia
|
||||
address_env: CHAIN_GATEWAY_SERVICE_WALLET_ADDRESS
|
||||
private_key_env: CHAIN_GATEWAY_SERVICE_WALLET_KEY
|
||||
|
||||
key_management:
|
||||
driver: vault
|
||||
settings:
|
||||
|
||||
@@ -53,11 +53,6 @@ chains:
|
||||
- symbol: USDC
|
||||
contract: "0xaf88d065e77c8cc2239327c5edb3a432268e5831"
|
||||
|
||||
service_wallet:
|
||||
chain: arbitrum_one
|
||||
address_env: CHAIN_GATEWAY_SERVICE_WALLET_ADDRESS
|
||||
private_key_env: CHAIN_GATEWAY_SERVICE_WALLET_KEY
|
||||
|
||||
key_management:
|
||||
driver: vault
|
||||
settings:
|
||||
|
||||
@@ -43,7 +43,6 @@ type Imp struct {
|
||||
type config struct {
|
||||
*grpcapp.Config `yaml:",inline"`
|
||||
Chains []chainConfig `yaml:"chains"`
|
||||
ServiceWallet serviceWalletConfig `yaml:"service_wallet"`
|
||||
KeyManagement keymanager.Config `yaml:"key_management"`
|
||||
Settings gatewayservice.CacheSettings `yaml:"cache"`
|
||||
}
|
||||
@@ -57,13 +56,6 @@ type chainConfig struct {
|
||||
GasTopUpPolicy *gasTopUpPolicyConfig `yaml:"gas_topup_policy"`
|
||||
}
|
||||
|
||||
type serviceWalletConfig struct {
|
||||
Chain pmodel.ChainNetwork `yaml:"chain"`
|
||||
Address string `yaml:"address"`
|
||||
AddressEnv string `yaml:"address_env"`
|
||||
PrivateKeyEnv string `yaml:"private_key_env"`
|
||||
}
|
||||
|
||||
type tokenConfig struct {
|
||||
Symbol string `yaml:"symbol"`
|
||||
Contract string `yaml:"contract"`
|
||||
@@ -138,7 +130,6 @@ func (i *Imp) Start() error {
|
||||
return err
|
||||
}
|
||||
i.rpcClients = rpcClients
|
||||
walletConfig := resolveServiceWallet(cl.Named("wallet"), cfg.ServiceWallet)
|
||||
keyManager, err := resolveKeyManager(i.logger.Named("key_manager"), cfg.KeyManagement)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -156,7 +147,6 @@ func (i *Imp) Start() error {
|
||||
opts := []gatewayservice.Option{
|
||||
gatewayservice.WithDiscoveryInvokeURI(invokeURI),
|
||||
gatewayservice.WithNetworks(networkConfigs),
|
||||
gatewayservice.WithServiceWallet(walletConfig),
|
||||
gatewayservice.WithKeyManager(keyManager),
|
||||
gatewayservice.WithRPCClients(rpcClients),
|
||||
gatewayservice.WithDriverRegistry(driverRegistry),
|
||||
@@ -325,32 +315,6 @@ func parseGasTopUpRule(chainName pmodel.ChainNetwork, label string, cfg gasTopUp
|
||||
}, true, nil
|
||||
}
|
||||
|
||||
func resolveServiceWallet(logger mlogger.Logger, cfg serviceWalletConfig) gatewayshared.ServiceWallet {
|
||||
address := strings.TrimSpace(cfg.Address)
|
||||
if address == "" && cfg.AddressEnv != "" {
|
||||
address = strings.TrimSpace(os.Getenv(cfg.AddressEnv))
|
||||
}
|
||||
|
||||
privateKey := strings.TrimSpace(os.Getenv(cfg.PrivateKeyEnv))
|
||||
|
||||
if address == "" {
|
||||
if cfg.AddressEnv != "" {
|
||||
logger.Warn("Service wallet address not configured", zap.String("env", cfg.AddressEnv))
|
||||
} else {
|
||||
logger.Warn("Service wallet address not configured", zap.String("chain", string(cfg.Chain)))
|
||||
}
|
||||
}
|
||||
if privateKey == "" {
|
||||
logger.Warn("Service wallet private key not configured", zap.String("env", cfg.PrivateKeyEnv))
|
||||
}
|
||||
|
||||
return gatewayshared.ServiceWallet{
|
||||
Network: cfg.Chain,
|
||||
Address: address,
|
||||
PrivateKey: privateKey,
|
||||
}
|
||||
}
|
||||
|
||||
func resolveKeyManager(logger mlogger.Logger, cfg keymanager.Config) (keymanager.Manager, error) {
|
||||
driver := strings.ToLower(strings.TrimSpace(string(cfg.Driver)))
|
||||
if driver == "" {
|
||||
|
||||
@@ -55,13 +55,6 @@ func WithNetworks(networks []shared.Network) Option {
|
||||
}
|
||||
}
|
||||
|
||||
// WithServiceWallet configures the service wallet binding.
|
||||
func WithServiceWallet(wallet shared.ServiceWallet) Option {
|
||||
return func(s *Service) {
|
||||
s.serviceWallet = wallet
|
||||
}
|
||||
}
|
||||
|
||||
// WithDriverRegistry configures the chain driver registry.
|
||||
func WithDriverRegistry(registry *drivers.Registry) Option {
|
||||
return func(s *Service) {
|
||||
|
||||
@@ -49,7 +49,6 @@ type Service struct {
|
||||
outbox gatewayoutbox.ReliableRuntime
|
||||
|
||||
networks map[pmodel.ChainNetwork]shared.Network
|
||||
serviceWallet shared.ServiceWallet
|
||||
keyManager keymanager.Manager
|
||||
rpcClients *rpcclient.Clients
|
||||
networkRegistry *rpcclient.Registry
|
||||
|
||||
@@ -700,7 +700,6 @@ func newTestServiceWithRepository(t *testing.T, repo storage.Repository) *Servic
|
||||
svc := NewService(logger, repo, nil,
|
||||
WithKeyManager(&fakeKeyManager{}),
|
||||
WithNetworks(networks),
|
||||
WithServiceWallet(shared.ServiceWallet{Network: "ethereum_mainnet", Address: "0xservice"}),
|
||||
WithDriverRegistry(driverRegistry),
|
||||
)
|
||||
return svc
|
||||
|
||||
@@ -201,13 +201,6 @@ type TokenContract struct {
|
||||
ContractAddress string
|
||||
}
|
||||
|
||||
// ServiceWallet captures the managed service wallet configuration.
|
||||
type ServiceWallet struct {
|
||||
Network pmodel.ChainNetwork
|
||||
Address string
|
||||
PrivateKey string
|
||||
}
|
||||
|
||||
func ProtoToMoney(money *moneyv1.Money) *paymenttypes.Money {
|
||||
if money == nil {
|
||||
return &paymenttypes.Money{}
|
||||
|
||||
@@ -5,6 +5,7 @@ API_PROTOCOL=https
|
||||
SERVICE_HOST=dev.sendico.io
|
||||
WS_PROTOCOL=wss
|
||||
CADDY_ACME_CA=https://acme-v02.api.letsencrypt.org/directory
|
||||
FRONTEND_FLUTTER_BUILD_ARGS=--source-maps
|
||||
|
||||
SSH_HOST=178.57.67.136
|
||||
SSH_USER=cloud
|
||||
|
||||
@@ -46,8 +46,6 @@ services:
|
||||
NATS_USER: ${NATS_USER}
|
||||
NATS_PASSWORD: ${NATS_PASSWORD}
|
||||
CHAIN_GATEWAY_RPC_URL: ${CHAIN_GATEWAY_RPC_URL}
|
||||
CHAIN_GATEWAY_SERVICE_WALLET_KEY: ${CHAIN_GATEWAY_SERVICE_WALLET_KEY}
|
||||
CHAIN_GATEWAY_SERVICE_WALLET_ADDRESS: ${CHAIN_GATEWAY_SERVICE_WALLET_ADDRESS}
|
||||
VAULT_TOKEN_FILE: /run/vault/token
|
||||
command: ["--config.file", "/app/config.yml"]
|
||||
ports:
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
|
||||
FROM dart:latest AS web_builder
|
||||
|
||||
ARG FRONTEND_FLUTTER_BUILD_ARGS=""
|
||||
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
git \
|
||||
curl \
|
||||
@@ -36,7 +38,7 @@ RUN flutter clean \
|
||||
WORKDIR /home/flutteruser/app/pweb
|
||||
RUN flutter clean \
|
||||
&& flutter pub get \
|
||||
&& flutter build web --release --no-tree-shake-icons
|
||||
&& flutter build web --release --no-tree-shake-icons ${FRONTEND_FLUTTER_BUILD_ARGS}
|
||||
|
||||
FROM caddy:alpine AS runtime
|
||||
|
||||
|
||||
@@ -20,8 +20,6 @@ REQUIRED_SECRETS=(
|
||||
CHAIN_GATEWAY_MONGO_USER
|
||||
CHAIN_GATEWAY_MONGO_PASSWORD
|
||||
CHAIN_GATEWAY_RPC_URL
|
||||
CHAIN_GATEWAY_SERVICE_WALLET_KEY
|
||||
CHAIN_GATEWAY_SERVICE_WALLET_ADDRESS
|
||||
NATS_USER
|
||||
NATS_PASSWORD
|
||||
NATS_URL
|
||||
@@ -46,8 +44,6 @@ b64enc() {
|
||||
CHAIN_GATEWAY_MONGO_USER_B64="$(b64enc "${CHAIN_GATEWAY_MONGO_USER}")"
|
||||
CHAIN_GATEWAY_MONGO_PASSWORD_B64="$(b64enc "${CHAIN_GATEWAY_MONGO_PASSWORD}")"
|
||||
CHAIN_GATEWAY_RPC_URL_B64="$(b64enc "${CHAIN_GATEWAY_RPC_URL}")"
|
||||
CHAIN_GATEWAY_SERVICE_WALLET_KEY_B64="$(b64enc "${CHAIN_GATEWAY_SERVICE_WALLET_KEY}")"
|
||||
CHAIN_GATEWAY_SERVICE_WALLET_ADDRESS_B64="$(b64enc "${CHAIN_GATEWAY_SERVICE_WALLET_ADDRESS}")"
|
||||
CHAIN_GATEWAY_VAULT_ROLE_ID_B64="$(b64enc "${CHAIN_GATEWAY_VAULT_ROLE_ID:-}")"
|
||||
CHAIN_GATEWAY_VAULT_SECRET_ID_B64="$(b64enc "${CHAIN_GATEWAY_VAULT_SECRET_ID:-}")"
|
||||
NATS_USER_B64="$(b64enc "${NATS_USER}")"
|
||||
@@ -87,8 +83,6 @@ ssh "${SSH_OPTS[@]}" "$REMOTE_TARGET" \
|
||||
CHAIN_GATEWAY_MONGO_USER_B64="$CHAIN_GATEWAY_MONGO_USER_B64" \
|
||||
CHAIN_GATEWAY_MONGO_PASSWORD_B64="$CHAIN_GATEWAY_MONGO_PASSWORD_B64" \
|
||||
CHAIN_GATEWAY_RPC_URL_B64="$CHAIN_GATEWAY_RPC_URL_B64" \
|
||||
CHAIN_GATEWAY_SERVICE_WALLET_KEY_B64="$CHAIN_GATEWAY_SERVICE_WALLET_KEY_B64" \
|
||||
CHAIN_GATEWAY_SERVICE_WALLET_ADDRESS_B64="$CHAIN_GATEWAY_SERVICE_WALLET_ADDRESS_B64" \
|
||||
CHAIN_GATEWAY_VAULT_ROLE_ID_B64="$CHAIN_GATEWAY_VAULT_ROLE_ID_B64" \
|
||||
CHAIN_GATEWAY_VAULT_SECRET_ID_B64="$CHAIN_GATEWAY_VAULT_SECRET_ID_B64" \
|
||||
NATS_USER_B64="$NATS_USER_B64" \
|
||||
@@ -144,8 +138,6 @@ decode_b64() {
|
||||
CHAIN_GATEWAY_MONGO_USER="$(decode_b64 "$CHAIN_GATEWAY_MONGO_USER_B64")"
|
||||
CHAIN_GATEWAY_MONGO_PASSWORD="$(decode_b64 "$CHAIN_GATEWAY_MONGO_PASSWORD_B64")"
|
||||
CHAIN_GATEWAY_RPC_URL="$(decode_b64 "$CHAIN_GATEWAY_RPC_URL_B64")"
|
||||
CHAIN_GATEWAY_SERVICE_WALLET_KEY="$(decode_b64 "$CHAIN_GATEWAY_SERVICE_WALLET_KEY_B64")"
|
||||
CHAIN_GATEWAY_SERVICE_WALLET_ADDRESS="$(decode_b64 "$CHAIN_GATEWAY_SERVICE_WALLET_ADDRESS_B64")"
|
||||
NATS_USER="$(decode_b64 "$NATS_USER_B64")"
|
||||
NATS_PASSWORD="$(decode_b64 "$NATS_PASSWORD_B64")"
|
||||
NATS_URL="$(decode_b64 "$NATS_URL_B64")"
|
||||
@@ -159,7 +151,6 @@ fi
|
||||
|
||||
export CHAIN_GATEWAY_MONGO_USER CHAIN_GATEWAY_MONGO_PASSWORD
|
||||
export CHAIN_GATEWAY_RPC_URL
|
||||
export CHAIN_GATEWAY_SERVICE_WALLET_KEY CHAIN_GATEWAY_SERVICE_WALLET_ADDRESS
|
||||
export CHAIN_GATEWAY_VAULT_ROLE_ID CHAIN_GATEWAY_VAULT_SECRET_ID
|
||||
export NATS_USER NATS_PASSWORD NATS_URL
|
||||
if [[ -z "${CHAIN_GATEWAY_VAULT_ROLE_ID:-}" || -z "${CHAIN_GATEWAY_VAULT_SECRET_ID:-}" ]]; then
|
||||
|
||||
@@ -156,11 +156,6 @@ if [[ -f ../env/dev-vault-seed.env ]]; then
|
||||
vault kv put -mount=kv sendico/gateway/chain \
|
||||
arbitrum_rpc_url="$(decode_b64 "${CHAIN_GATEWAY_RPC_URL_B64:-}")" >/dev/null
|
||||
|
||||
docker exec -e VAULT_ADDR=http://127.0.0.1:8200 -e VAULT_TOKEN="${ROOT_TOKEN}" dev-vault \
|
||||
vault kv put -mount=kv sendico/gateway/chain/wallet \
|
||||
private_key="$(decode_b64 "${CHAIN_GATEWAY_WALLET_PRIVATE_KEY_B64:-}")" \
|
||||
address="$(decode_b64 "${CHAIN_GATEWAY_WALLET_ADDRESS_B64:-}")" >/dev/null
|
||||
|
||||
docker exec -e VAULT_ADDR=http://127.0.0.1:8200 -e VAULT_TOKEN="${ROOT_TOKEN}" dev-vault \
|
||||
vault kv put -mount=kv sendico/gateway/tron \
|
||||
rpc_url="$(decode_b64 "${TRON_GATEWAY_RPC_URL_B64:-}")" \
|
||||
|
||||
@@ -40,7 +40,6 @@ load_runtime_env_bundle "${CHAIN_GATEWAY_ENV_NAME}"
|
||||
|
||||
CHAIN_GATEWAY_MONGO_SECRET_PATH="${CHAIN_GATEWAY_MONGO_SECRET_PATH:?missing CHAIN_GATEWAY_MONGO_SECRET_PATH}"
|
||||
CHAIN_GATEWAY_RPC_SECRET_PATH="${CHAIN_GATEWAY_RPC_SECRET_PATH:?missing CHAIN_GATEWAY_RPC_SECRET_PATH}"
|
||||
CHAIN_GATEWAY_WALLET_SECRET_PATH="${CHAIN_GATEWAY_WALLET_SECRET_PATH:?missing CHAIN_GATEWAY_WALLET_SECRET_PATH}"
|
||||
CHAIN_GATEWAY_VAULT_SECRET_PATH="${CHAIN_GATEWAY_VAULT_SECRET_PATH:?missing CHAIN_GATEWAY_VAULT_SECRET_PATH}"
|
||||
|
||||
export CHAIN_GATEWAY_MONGO_USER="$(sh ci/scripts/common/runtime_kv_get.sh kv_get kv "${CHAIN_GATEWAY_MONGO_SECRET_PATH}" user)"
|
||||
@@ -48,9 +47,6 @@ export CHAIN_GATEWAY_MONGO_PASSWORD="$(sh ci/scripts/common/runtime_kv_get.sh kv
|
||||
|
||||
export CHAIN_GATEWAY_RPC_URL="$(sh ci/scripts/common/runtime_kv_get.sh kv_get kv "${CHAIN_GATEWAY_RPC_SECRET_PATH}" arbitrum_rpc_url)"
|
||||
|
||||
export CHAIN_GATEWAY_SERVICE_WALLET_KEY="$(sh ci/scripts/common/runtime_kv_get.sh kv_get kv "${CHAIN_GATEWAY_WALLET_SECRET_PATH}" private_key)"
|
||||
export CHAIN_GATEWAY_SERVICE_WALLET_ADDRESS="$(sh ci/scripts/common/runtime_kv_get.sh kv_get kv "${CHAIN_GATEWAY_WALLET_SECRET_PATH}" address || true)"
|
||||
|
||||
if [ "${CI_RUNTIME_ENV_NAME:-prod}" != "devserver" ]; then
|
||||
export CHAIN_GATEWAY_VAULT_ROLE_ID="$(sh ci/scripts/common/runtime_kv_get.sh kv_get kv "${CHAIN_GATEWAY_VAULT_SECRET_PATH}" role_id)"
|
||||
export CHAIN_GATEWAY_VAULT_SECRET_ID="$(sh ci/scripts/common/runtime_kv_get.sh kv_get kv "${CHAIN_GATEWAY_VAULT_SECRET_PATH}" secret_id)"
|
||||
|
||||
@@ -70,6 +70,7 @@ fi
|
||||
--dockerfile "${FRONTEND_DOCKERFILE}" \
|
||||
--destination "${REGISTRY_URL}/${FRONTEND_IMAGE_PATH}:${IMAGE_TAG}" \
|
||||
--build-arg APP_VERSION="${APP_V}" \
|
||||
--build-arg FRONTEND_FLUTTER_BUILD_ARGS="${FRONTEND_FLUTTER_BUILD_ARGS:-}" \
|
||||
--build-arg GIT_REV="${GIT_REV}" \
|
||||
--build-arg BUILD_BRANCH="${BUILD_BRANCH}" \
|
||||
--build-arg BUILD_DATE="${BUILD_DATE}" \
|
||||
|
||||
@@ -74,8 +74,6 @@ seed_field NOTIFICATION_TELEGRAM_BOT_TOKEN_B64 sendico/notification/telegram bot
|
||||
seed_field NOTIFICATION_TELEGRAM_CHAT_ID_B64 sendico/notification/telegram chat_id
|
||||
seed_field NOTIFICATION_TELEGRAM_THREAD_ID_B64 sendico/notification/telegram thread_id 1
|
||||
seed_field CHAIN_GATEWAY_RPC_URL_B64 sendico/gateway/chain arbitrum_rpc_url
|
||||
seed_field CHAIN_GATEWAY_WALLET_PRIVATE_KEY_B64 sendico/gateway/chain/wallet private_key
|
||||
seed_field CHAIN_GATEWAY_WALLET_ADDRESS_B64 sendico/gateway/chain/wallet address 1
|
||||
seed_field TRON_GATEWAY_RPC_URL_B64 sendico/gateway/tron rpc_url
|
||||
seed_field TRON_GATEWAY_GRPC_URL_B64 sendico/gateway/tron grpc_url 1
|
||||
seed_field TRON_GATEWAY_GRPC_TOKEN_B64 sendico/gateway/tron grpc_token 1
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
import 'dart:ui' show PlatformDispatcher;
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
// ignore: depend_on_referenced_packages
|
||||
@@ -35,6 +37,8 @@ import 'package:pweb/services/posthog.dart';
|
||||
import 'package:pweb/providers/account.dart';
|
||||
import 'package:pweb/providers/locale.dart';
|
||||
|
||||
final _bootstrapLogger = Logger('bootstrap');
|
||||
|
||||
void _setupLogging() {
|
||||
Logger.root.level = Level.ALL;
|
||||
Logger.root.onRecord.listen((record) {
|
||||
@@ -45,102 +49,135 @@ void _setupLogging() {
|
||||
});
|
||||
}
|
||||
|
||||
void _setupErrorHandling() {
|
||||
FlutterError.onError = (details) {
|
||||
FlutterError.presentError(details);
|
||||
_bootstrapLogger.severe(
|
||||
'FlutterError: ${details.exceptionAsString()}',
|
||||
details.exception,
|
||||
details.stack,
|
||||
);
|
||||
};
|
||||
|
||||
PlatformDispatcher.instance.onError = (error, stack) {
|
||||
_bootstrapLogger.severe('Uncaught platform error', error, stack);
|
||||
return false;
|
||||
};
|
||||
}
|
||||
|
||||
void main() async {
|
||||
WidgetsFlutterBinding.ensureInitialized();
|
||||
await Constants.initialize();
|
||||
await PosthogService.initialize();
|
||||
|
||||
_setupLogging();
|
||||
setUrlStrategy(PathUrlStrategy());
|
||||
GoRouter.optionURLReflectsImperativeAPIs = true;
|
||||
_setupErrorHandling();
|
||||
|
||||
initializeTimeagoLocales();
|
||||
try {
|
||||
await Constants.initialize();
|
||||
await PosthogService.initialize();
|
||||
|
||||
runApp(
|
||||
MultiProvider(
|
||||
providers: [
|
||||
ChangeNotifierProvider<LocaleProvider>(
|
||||
create: (_) => PwebLocaleProvider(null),
|
||||
),
|
||||
ChangeNotifierProxyProvider<LocaleProvider, AccountProvider>(
|
||||
create: (_) => PwebAccountProvider(),
|
||||
update: (context, localeProvider, provider) =>
|
||||
provider!..updateProvider(localeProvider),
|
||||
),
|
||||
ChangeNotifierProxyProvider<AccountProvider, TwoFactorProvider>(
|
||||
create: (_) => TwoFactorProvider(),
|
||||
update: (context, accountProvider, provider) =>
|
||||
provider!..update(accountProvider),
|
||||
),
|
||||
ChangeNotifierProxyProvider<AccountProvider, OrganizationsProvider>(
|
||||
//TODO controll scope of the provider
|
||||
create: (_) => OrganizationsProvider(),
|
||||
lazy: false,
|
||||
update: (_, accountProvider, organizations) =>
|
||||
organizations!..updateAccount(accountProvider),
|
||||
),
|
||||
ChangeNotifierProxyProvider<OrganizationsProvider, PermissionsProvider>(
|
||||
create: (_) => PermissionsProvider(),
|
||||
update: (context, orgnization, provider) =>
|
||||
provider!..update(orgnization),
|
||||
),
|
||||
ChangeNotifierProxyProvider<OrganizationsProvider, EmployeesProvider>(
|
||||
create: (_) => EmployeesProvider(),
|
||||
update: (context, organizations, provider) =>
|
||||
provider!..updateProviders(organizations),
|
||||
),
|
||||
ChangeNotifierProxyProvider<OrganizationsProvider, PaymentsProvider>(
|
||||
create: (_) => PaymentsProvider(),
|
||||
update: (context, organizations, provider) =>
|
||||
provider!..update(organizations),
|
||||
),
|
||||
ChangeNotifierProvider(create: (_) => EmailVerificationProvider()),
|
||||
ChangeNotifierProxyProvider<OrganizationsProvider, RecipientsProvider>(
|
||||
create: (_) => RecipientsProvider(),
|
||||
update: (context, organizations, provider) =>
|
||||
provider!..updateProviders(organizations),
|
||||
),
|
||||
ChangeNotifierProxyProvider<OrganizationsProvider, InvitationsProvider>(
|
||||
create: (_) => InvitationsProvider(),
|
||||
update: (context, organizations, provider) =>
|
||||
provider!..updateProviders(organizations),
|
||||
),
|
||||
ChangeNotifierProxyProvider2<
|
||||
OrganizationsProvider,
|
||||
RecipientsProvider,
|
||||
PaymentMethodsProvider
|
||||
>(
|
||||
create: (_) => PaymentMethodsProvider(),
|
||||
update: (context, organizations, recipients, provider) =>
|
||||
provider!..updateProviders(organizations, recipients),
|
||||
),
|
||||
ChangeNotifierProvider(create: (_) => InvitationListViewModel()),
|
||||
ChangeNotifierProxyProvider<OrganizationsProvider, WalletsProvider>(
|
||||
create: (_) => WalletsProvider(ApiWalletsService()),
|
||||
update: (context, organizations, provider) =>
|
||||
provider!..update(organizations),
|
||||
),
|
||||
ChangeNotifierProxyProvider<
|
||||
OrganizationsProvider,
|
||||
LedgerAccountsProvider
|
||||
>(
|
||||
create: (_) => LedgerAccountsProvider(LedgerService()),
|
||||
update: (context, organizations, provider) =>
|
||||
provider!..update(organizations),
|
||||
),
|
||||
ChangeNotifierProxyProvider<
|
||||
LedgerAccountsProvider,
|
||||
LedgerBalanceMaskController
|
||||
>(
|
||||
create: (_) => LedgerBalanceMaskController(),
|
||||
update: (context, ledger, controller) => controller!..update(ledger),
|
||||
),
|
||||
ChangeNotifierProxyProvider<WalletsProvider, WalletsController>(
|
||||
create: (_) => WalletsController(),
|
||||
update: (_, wallets, controller) => controller!..update(wallets),
|
||||
),
|
||||
],
|
||||
child: const PayApp(),
|
||||
),
|
||||
);
|
||||
setUrlStrategy(PathUrlStrategy());
|
||||
GoRouter.optionURLReflectsImperativeAPIs = true;
|
||||
|
||||
initializeTimeagoLocales();
|
||||
|
||||
runApp(
|
||||
MultiProvider(
|
||||
providers: [
|
||||
ChangeNotifierProvider<LocaleProvider>(
|
||||
create: (_) => PwebLocaleProvider(null),
|
||||
),
|
||||
ChangeNotifierProxyProvider<LocaleProvider, AccountProvider>(
|
||||
create: (_) => PwebAccountProvider(),
|
||||
update: (context, localeProvider, provider) =>
|
||||
provider!..updateProvider(localeProvider),
|
||||
),
|
||||
ChangeNotifierProxyProvider<AccountProvider, TwoFactorProvider>(
|
||||
create: (_) => TwoFactorProvider(),
|
||||
update: (context, accountProvider, provider) =>
|
||||
provider!..update(accountProvider),
|
||||
),
|
||||
ChangeNotifierProxyProvider<AccountProvider, OrganizationsProvider>(
|
||||
//TODO controll scope of the provider
|
||||
create: (_) => OrganizationsProvider(),
|
||||
lazy: false,
|
||||
update: (_, accountProvider, organizations) =>
|
||||
organizations!..updateAccount(accountProvider),
|
||||
),
|
||||
ChangeNotifierProxyProvider<
|
||||
OrganizationsProvider,
|
||||
PermissionsProvider
|
||||
>(
|
||||
create: (_) => PermissionsProvider(),
|
||||
update: (context, orgnization, provider) =>
|
||||
provider!..update(orgnization),
|
||||
),
|
||||
ChangeNotifierProxyProvider<OrganizationsProvider, EmployeesProvider>(
|
||||
create: (_) => EmployeesProvider(),
|
||||
update: (context, organizations, provider) =>
|
||||
provider!..updateProviders(organizations),
|
||||
),
|
||||
ChangeNotifierProxyProvider<OrganizationsProvider, PaymentsProvider>(
|
||||
create: (_) => PaymentsProvider(),
|
||||
update: (context, organizations, provider) =>
|
||||
provider!..update(organizations),
|
||||
),
|
||||
ChangeNotifierProvider(create: (_) => EmailVerificationProvider()),
|
||||
ChangeNotifierProxyProvider<
|
||||
OrganizationsProvider,
|
||||
RecipientsProvider
|
||||
>(
|
||||
create: (_) => RecipientsProvider(),
|
||||
update: (context, organizations, provider) =>
|
||||
provider!..updateProviders(organizations),
|
||||
),
|
||||
ChangeNotifierProxyProvider<
|
||||
OrganizationsProvider,
|
||||
InvitationsProvider
|
||||
>(
|
||||
create: (_) => InvitationsProvider(),
|
||||
update: (context, organizations, provider) =>
|
||||
provider!..updateProviders(organizations),
|
||||
),
|
||||
ChangeNotifierProxyProvider2<
|
||||
OrganizationsProvider,
|
||||
RecipientsProvider,
|
||||
PaymentMethodsProvider
|
||||
>(
|
||||
create: (_) => PaymentMethodsProvider(),
|
||||
update: (context, organizations, recipients, provider) =>
|
||||
provider!..updateProviders(organizations, recipients),
|
||||
),
|
||||
ChangeNotifierProvider(create: (_) => InvitationListViewModel()),
|
||||
ChangeNotifierProxyProvider<OrganizationsProvider, WalletsProvider>(
|
||||
create: (_) => WalletsProvider(ApiWalletsService()),
|
||||
update: (context, organizations, provider) =>
|
||||
provider!..update(organizations),
|
||||
),
|
||||
ChangeNotifierProxyProvider<
|
||||
OrganizationsProvider,
|
||||
LedgerAccountsProvider
|
||||
>(
|
||||
create: (_) => LedgerAccountsProvider(LedgerService()),
|
||||
update: (context, organizations, provider) =>
|
||||
provider!..update(organizations),
|
||||
),
|
||||
ChangeNotifierProxyProvider<
|
||||
LedgerAccountsProvider,
|
||||
LedgerBalanceMaskController
|
||||
>(
|
||||
create: (_) => LedgerBalanceMaskController(),
|
||||
update: (context, ledger, controller) =>
|
||||
controller!..update(ledger),
|
||||
),
|
||||
ChangeNotifierProxyProvider<WalletsProvider, WalletsController>(
|
||||
create: (_) => WalletsController(),
|
||||
update: (_, wallets, controller) => controller!..update(wallets),
|
||||
),
|
||||
],
|
||||
child: const PayApp(),
|
||||
),
|
||||
);
|
||||
} catch (error, stack) {
|
||||
_bootstrapLogger.severe('Bootstrap failed', error, stack);
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user