diff --git a/app/lib/core/widgets/coming_soon_screen.dart b/app/lib/core/widgets/coming_soon_screen.dart new file mode 100644 index 0000000..235a02a --- /dev/null +++ b/app/lib/core/widgets/coming_soon_screen.dart @@ -0,0 +1,26 @@ +import 'package:app/core/theme/pg_colors.dart'; +import 'package:app/core/widgets/pg_texts.dart'; +import 'package:flutter/material.dart'; + +class ComingSoonScreen extends StatelessWidget { + final String title; + const ComingSoonScreen({super.key, required this.title}); + + @override + Widget build(BuildContext context) { + return Scaffold( + body: Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + const Icon(Icons.construction, size: 64, color: PgColors.primary), + const SizedBox(height: 16), + PgTexts.text700(context, text: "$title Coming Soon", fontSize: 24), + const SizedBox(height: 8), + PgTexts.text400(context, text: "We're working on it!", color: Colors.grey), + ], + ), + ), + ); + } +} diff --git a/app/lib/features/auth/data/models/auth_models.dart b/app/lib/features/auth/data/models/auth_models.dart index 147e356..165e643 100644 --- a/app/lib/features/auth/data/models/auth_models.dart +++ b/app/lib/features/auth/data/models/auth_models.dart @@ -58,6 +58,403 @@ class IndividualCompleteAccountRequest { }; } +// Person Model +class Person { + final int id; + final String firstName; + final String lastName; + final String middleName; + final String address; + final String? otherNames; + final String gender; + final String dateOfBirth; + final String country; + final String state; + final String city; + final String postalCode; + final int userID; + + Person({ + required this.id, + required this.firstName, + required this.lastName, + required this.middleName, + required this.address, + this.otherNames, + required this.gender, + required this.dateOfBirth, + required this.country, + required this.state, + required this.city, + required this.postalCode, + required this.userID, + }); + + factory Person.fromJson(Map json) { + return Person( + id: json['id'] as int, + firstName: json['firstName'] as String, + lastName: json['lastName'] as String, + middleName: json['middleName'] as String, + address: json['address'] as String, + otherNames: json['otherNames'] as String?, + gender: json['gender'] as String, + dateOfBirth: json['dateOfBirth'] as String, + country: json['country'] as String, + state: json['state'] as String, + city: json['city'] as String, + postalCode: json['postalCode'] as String, + userID: json['UserID'] as int, + ); + } + + Map toJson() => { + 'id': id, + 'firstName': firstName, + 'lastName': lastName, + 'middleName': middleName, + 'address': address, + 'otherNames': otherNames, + 'gender': gender, + 'dateOfBirth': dateOfBirth, + 'country': country, + 'state': state, + 'city': city, + 'postalCode': postalCode, + 'UserID': userID, + }; +} + +// AuthInfo Model +class AuthInfo { + final int id; + final int userID; + final String lastLoginAt; + final int loginAttempts; + final int otpRequestCount; + final String createdAt; + final String updatedAt; + + AuthInfo({ + required this.id, + required this.userID, + required this.lastLoginAt, + required this.loginAttempts, + required this.otpRequestCount, + required this.createdAt, + required this.updatedAt, + }); + + factory AuthInfo.fromJson(Map json) { + return AuthInfo( + id: json['id'] as int, + userID: json['userID'] as int, + lastLoginAt: json['lastLoginAt'] as String, + loginAttempts: json['loginAttempts'] as int, + otpRequestCount: json['otpRequestCount'] as int, + createdAt: json['createdAt'] as String, + updatedAt: json['updatedAt'] as String, + ); + } + + Map toJson() => { + 'id': id, + 'userID': userID, + 'lastLoginAt': lastLoginAt, + 'loginAttempts': loginAttempts, + 'otpRequestCount': otpRequestCount, + 'createdAt': createdAt, + 'updatedAt': updatedAt, + }; +} + +// Business Model +class Business { + final int id; + final int userId; + final String name; + final String registrationNumber; + final String type; + final String industry; + final String? additionalDocs; + final String createdAt; + final String updatedAt; + + Business({ + required this.id, + required this.userId, + required this.name, + required this.registrationNumber, + required this.type, + required this.industry, + this.additionalDocs, + required this.createdAt, + required this.updatedAt, + }); + + factory Business.fromJson(Map json) { + return Business( + id: json['id'] as int, + userId: json['userId'] as int, + name: json['name'] as String, + registrationNumber: json['registrationNumber'] as String, + type: json['type'] as String, + industry: json['industry'] as String, + additionalDocs: json['additionalDocs'] as String?, + createdAt: json['createdAt'] as String, + updatedAt: json['updatedAt'] as String, + ); + } + + Map toJson() => { + 'id': id, + 'userId': userId, + 'name': name, + 'registrationNumber': registrationNumber, + 'type': type, + 'industry': industry, + 'additionalDocs': additionalDocs, + 'createdAt': createdAt, + 'updatedAt': updatedAt, + }; +} + +// Preferences Model +class Preferences { + final int id; + final int userId; + final String theme; + final String language; + final String timezone; + final bool notificationsEnabled; + final String createdAt; + final String updatedAt; + + Preferences({ + required this.id, + required this.userId, + required this.theme, + required this.language, + required this.timezone, + required this.notificationsEnabled, + required this.createdAt, + required this.updatedAt, + }); + + factory Preferences.fromJson(Map json) { + return Preferences( + id: json['id'] as int, + userId: json['userId'] as int, + theme: json['theme'] as String, + language: json['language'] as String, + timezone: json['timezone'] as String, + notificationsEnabled: json['notificationsEnabled'] as bool, + createdAt: json['createdAt'] as String, + updatedAt: json['updatedAt'] as String, + ); + } + + Map toJson() => { + 'id': id, + 'userId': userId, + 'theme': theme, + 'language': language, + 'timezone': timezone, + 'notificationsEnabled': notificationsEnabled, + 'createdAt': createdAt, + 'updatedAt': updatedAt, + }; +} + +// User Model (PgUser to avoid conflict with Flutter's User) +class PgUser { + final int id; + final String uid; + final String phone; + final String email; + final String username; + final Person? person; + final String hashedNIN; + final List? kycs; // Assuming dynamic for now, can be modeled later + final List? contact; // Assuming dynamic for now + final bool twoFactorEnabled; + final bool isFirstTime; + final bool emailVerified; + final bool phoneVerified; + final String accountType; + final AuthInfo? authInfo; + final Business? business; + final List? sessions; // Assuming dynamic for now + final List? activities; // Assuming dynamic for now + final Preferences? preferences; + final List? roles; // Assuming dynamic for now + final bool biometricEnabled; + final String biometricID; + final String status; + final List? otps; // Assuming dynamic for now + final String createdAt; + final String updatedAt; + final bool? hasPin; // Added hasPin + + PgUser({ + required this.id, + required this.uid, + required this.phone, + required this.email, + required this.username, + this.person, + this.hashedNIN = '', + this.kycs, + this.contact, + required this.twoFactorEnabled, + required this.isFirstTime, + required this.emailVerified, + required this.phoneVerified, + required this.accountType, + this.authInfo, + this.business, + this.sessions, + this.activities, + this.preferences, + this.roles, + required this.biometricEnabled, + this.biometricID = '', + required this.status, + this.otps, + required this.createdAt, + required this.updatedAt, + this.hasPin, // Added hasPin to constructor + }); + + factory PgUser.fromJson(Map json) { + return PgUser( + id: json['id'] as int, + uid: json['uid'] as String, + phone: json['phone'] as String, + email: json['email'] as String, + username: json['username'] as String, + person: json['Person'] != null ? Person.fromJson(json['Person']) : null, + hashedNIN: json['hashedNIN'] as String? ?? '', + kycs: json['kycs'] as List?, + contact: json['contact'] as List?, + twoFactorEnabled: json['twoFactorEnabled'] as bool, + isFirstTime: json['isFirstTime'] as bool, + emailVerified: json['emailVerified'] as bool, + phoneVerified: json['phoneVerified'] as bool, + accountType: json['accountType'] as String, + authInfo: json['authInfo'] != null + ? AuthInfo.fromJson(json['authInfo']) + : null, + business: json['business'] != null + ? Business.fromJson(json['business']) + : null, + sessions: json['sessions'] as List?, + activities: json['activities'] as List?, + preferences: json['preferences'] != null + ? Preferences.fromJson(json['preferences']) + : null, + roles: json['roles'] as List?, + biometricEnabled: json['biometricEnabled'] as bool, + biometricID: json['biometricID'] as String? ?? '', + status: json['status'] as String, + otps: json['otps'] as List?, + createdAt: json['createdAt'] as String, + updatedAt: json['updatedAt'] as String, + hasPin: json['hasPin'] as bool?, // Added hasPin to fromJson + ); + } + + // Convenience getters + String? get firstName => person?.firstName; + String? get lastName => person?.lastName; + bool get needsOnboarding => isFirstTime; + + Map toJson() => { + 'id': id, + 'uid': uid, + 'phone': phone, + 'email': email, + 'username': username, + 'Person': person?.toJson(), + 'hashedNIN': hashedNIN, + 'kycs': kycs, + 'contact': contact, + 'twoFactorEnabled': twoFactorEnabled, + 'isFirstTime': isFirstTime, + 'emailVerified': emailVerified, + 'phoneVerified': phoneVerified, + 'accountType': accountType, + 'authInfo': authInfo?.toJson(), + 'business': business?.toJson(), + 'sessions': sessions, + 'activities': activities, + 'preferences': preferences?.toJson(), + 'roles': roles, + 'biometricEnabled': biometricEnabled, + 'biometricID': biometricID, + 'status': status, + 'otps': otps, + 'createdAt': createdAt, + 'updatedAt': updatedAt, + 'hasPin': hasPin, // Added hasPin to toJson + }; +} + +// Wallet Model - Basic structure for now, can be expanded +class Wallet { + final int id; + final String accountName; + final String accountNumber; + final String bankName; + final String currency; + final double availableBalance; + final double ledgerBalance; + final String status; + final String createdAt; + final String updatedAt; + + Wallet({ + required this.id, + required this.accountName, + required this.accountNumber, + required this.bankName, + required this.currency, + required this.availableBalance, + required this.ledgerBalance, + required this.status, + required this.createdAt, + required this.updatedAt, + }); + + factory Wallet.fromJson(Map json) { + return Wallet( + id: json['id'] as int, + accountName: json['accountName'] as String, + accountNumber: json['accountNumber'] as String, + bankName: json['bankName'] as String, + currency: json['currency'] as String, + availableBalance: (json['availableBalance'] as num).toDouble(), + ledgerBalance: (json['ledgerBalance'] as num).toDouble(), + status: json['status'] as String, + createdAt: json['createdAt'] as String, + updatedAt: json['updatedAt'] as String, + ); + } + + Map toJson() => { + 'id': id, + 'accountName': accountName, + 'accountNumber': accountNumber, + 'bankName': bankName, + 'currency': currency, + 'availableBalance': availableBalance, + 'ledgerBalance': ledgerBalance, + 'status': status, + 'createdAt': createdAt, + 'updatedAt': updatedAt, + }; +} + class AuthResponseData { final String? token; final String? refreshToken; @@ -116,6 +513,39 @@ class AuthResponseData { }; } +// AccountResponse for /me endpoint +class AccountResponse { + final AccountResponseData data; + final String message; + + AccountResponse({required this.data, required this.message}); + + factory AccountResponse.fromJson(Map json) { + // ApiResponse.fromJson already unwraps the outer 'data' key before calling + // this factory, so `json` here IS the data payload {"user":{...},"wallets":[...]}. + return AccountResponse( + data: AccountResponseData.fromJson(json), + message: '', + ); + } +} + +class AccountResponseData { + final PgUser user; + final List? wallets; + + AccountResponseData({required this.user, this.wallets}); + + factory AccountResponseData.fromJson(Map json) { + return AccountResponseData( + user: PgUser.fromJson(json['user']), + wallets: (json['wallets'] as List?) + ?.map((e) => Wallet.fromJson(e as Map)) + .toList(), + ); + } +} + class BiometricRegisterRequest { final String biometricID; diff --git a/app/lib/features/auth/data/repositories/auth_repository.dart b/app/lib/features/auth/data/repositories/auth_repository.dart index 0232c43..519c3c1 100644 --- a/app/lib/features/auth/data/repositories/auth_repository.dart +++ b/app/lib/features/auth/data/repositories/auth_repository.dart @@ -3,6 +3,7 @@ import 'package:app/core/network/api_response.dart'; import 'package:app/core/network/api_service.dart'; import 'package:app/features/auth/data/models/auth_models.dart'; import 'package:dio/dio.dart'; +import 'package:flutter/foundation.dart'; class AuthRepository { final ApiService _apiService; @@ -104,12 +105,12 @@ class AuthRepository { } } - Future> fetchCurrentUser() async { + Future> fetchCurrentUser() async { try { - final response = await _apiService.get('/me'); + final response = await _apiService.get('/account/me'); return ApiResponse.fromJson( response.data, - (json) => AuthResponseData.fromJson(json as Map), + (json) => AccountResponse.fromJson(json as Map), ); } on DioException catch (e) { return ApiResponse.fromJson( diff --git a/app/lib/features/auth/data/services/auth_storage_service.dart b/app/lib/features/auth/data/services/auth_storage_service.dart index 4b885f6..95e3648 100644 --- a/app/lib/features/auth/data/services/auth_storage_service.dart +++ b/app/lib/features/auth/data/services/auth_storage_service.dart @@ -7,22 +7,31 @@ class AuthStorageService { static const _tokenKey = 'auth_token'; static const _refreshTokenKey = 'refresh_token'; - static const _userKey = 'user_data'; + static const _authResponseDataKey = 'auth_response_data'; + static const _pgUserKey = 'pg_user_data'; Future saveTokens({required String token, required String refreshToken}) async { await _storage.write(key: _tokenKey, value: token); await _storage.write(key: _refreshTokenKey, value: refreshToken); } - Future saveUserData(AuthResponseData userData) async { - await _storage.write(key: _userKey, value: jsonEncode(userData.toJson())); + Future getToken() async { + return await _storage.read(key: _tokenKey); } - Future getUserData() async { - final userJson = await _storage.read(key: _userKey); - if (userJson != null) { + Future getRefreshToken() async { + return await _storage.read(key: _refreshTokenKey); + } + + Future saveAuthResponseData(AuthResponseData authResponseData) async { + await _storage.write(key: _authResponseDataKey, value: jsonEncode(authResponseData.toJson())); + } + + Future getAuthResponseData() async { + final authResponseJson = await _storage.read(key: _authResponseDataKey); + if (authResponseJson != null) { try { - return AuthResponseData.fromJson(jsonDecode(userJson)); + return AuthResponseData.fromJson(jsonDecode(authResponseJson)); } catch (e) { return null; } @@ -30,17 +39,26 @@ class AuthStorageService { return null; } - Future getToken() async { - return await _storage.read(key: _tokenKey); + Future savePgUser(PgUser pgUser) async { + await _storage.write(key: _pgUserKey, value: jsonEncode(pgUser.toJson())); } - Future getRefreshToken() async { - return await _storage.read(key: _refreshTokenKey); + Future getPgUser() async { + final pgUserJson = await _storage.read(key: _pgUserKey); + if (pgUserJson != null) { + try { + return PgUser.fromJson(jsonDecode(pgUserJson)); + } catch (e) { + return null; + } + } + return null; } - Future clearTokens() async { + Future clearAllAuthData() async { await _storage.delete(key: _tokenKey); await _storage.delete(key: _refreshTokenKey); - await _storage.delete(key: _userKey); + await _storage.delete(key: _authResponseDataKey); + await _storage.delete(key: _pgUserKey); } } diff --git a/app/lib/features/auth/presentation/providers/auth_provider.dart b/app/lib/features/auth/presentation/providers/auth_provider.dart index 31b32a7..fe80cf5 100644 --- a/app/lib/features/auth/presentation/providers/auth_provider.dart +++ b/app/lib/features/auth/presentation/providers/auth_provider.dart @@ -18,20 +18,27 @@ class AuthProvider extends ChangeNotifier { bool _isLoggedIn = false; bool get isLoggedIn => _isLoggedIn; - AuthResponseData? _userData; - AuthResponseData? get userData => _userData; + PgUser? _userData; // Holds comprehensive user details + PgUser? get userData => _userData; + + List? _wallets; // Holds user's wallets + List? get wallets => _wallets; + + AuthResponseData? _authResponseData; // Holds basic auth info (tokens, etc.) + AuthResponseData? get authResponseData => _authResponseData; String? _errorMessage; String? get errorMessage => _errorMessage; Future checkLoginStatus() async { final token = await _storageService.getToken(); - final userData = await _storageService.getUserData(); - if (token != null && userData != null) { + if (token != null) { _isLoggedIn = true; - _userData = userData; + _authResponseData = await _storageService.getAuthResponseData(); + _userData = await _storageService.getPgUser(); } else { _isLoggedIn = false; + _authResponseData = null; _userData = null; } notifyListeners(); @@ -60,9 +67,16 @@ class AuthProvider extends ChangeNotifier { debugPrint( "Data: ${response.data?.phone}, Needs Onboarding: ${response.data?.needsOnboarding}", ); - _userData = response.data; - if (response.data != null) { - await _storageService.saveUserData(response.data!); + _authResponseData = response.data; + if (_authResponseData != null) { + await _storageService.saveAuthResponseData(_authResponseData!); + if (_authResponseData?.token != null) { + await _storageService.saveTokens( + token: _authResponseData!.token!, + refreshToken: _authResponseData!.refreshToken ?? "", + ); + _isLoggedIn = true; + } } return true; } else { @@ -86,18 +100,18 @@ class AuthProvider extends ChangeNotifier { debugPrint( "Data: ${response.data?.phone}, Needs Onboarding: ${response.data?.needsOnboarding}, Token: ${response.data?.token != null}", ); - _userData = response.data; - if (response.data != null) { - await _storageService.saveUserData(response.data!); - if (response.data?.phone != null) { - await _biometricService.saveLastPhone(response.data!.phone!); + _authResponseData = response.data; + if (_authResponseData != null) { + await _storageService.saveAuthResponseData(_authResponseData!); + if (_authResponseData?.phone != null) { + await _biometricService.saveLastPhone(_authResponseData!.phone!); } - if (response.data?.token != null) { + if (_authResponseData?.token != null) { debugPrint("--- AuthProvider: New token received: ${response.data!.token} ---"); _isLoggedIn = true; await _storageService.saveTokens( - token: response.data!.token!, - refreshToken: response.data!.refreshToken ?? "", + token: _authResponseData!.token!, + refreshToken: _authResponseData!.refreshToken ?? "", ); } else { debugPrint("--- AuthProvider: No new token received in response ---"); @@ -136,15 +150,15 @@ class AuthProvider extends ChangeNotifier { setLoading(false); if (response.isSuccess) { - _userData = response.data; - if (response.data != null) { - await _storageService.saveUserData(response.data!); - if (response.data?.token != null) { + _authResponseData = response.data; + if (_authResponseData != null) { + await _storageService.saveAuthResponseData(_authResponseData!); + if (_authResponseData?.token != null) { debugPrint("--- AuthProvider: New token received: ${response.data!.token} ---"); _isLoggedIn = true; await _storageService.saveTokens( - token: response.data!.token!, - refreshToken: response.data!.refreshToken ?? "", + token: _authResponseData!.token!, + refreshToken: _authResponseData!.refreshToken ?? "", ); } else { debugPrint("--- AuthProvider: No new token received in response ---"); @@ -161,14 +175,17 @@ class AuthProvider extends ChangeNotifier { final response = await _repository.fetchCurrentUser(); if (response.isSuccess && response.data != null) { - _userData = response.data; + _userData = response.data!.data.user; + _wallets = response.data!.data.wallets; _isLoggedIn = true; - await _storageService.saveUserData(response.data!); + await _storageService.savePgUser(_userData!); notifyListeners(); return true; } else { - _isLoggedIn = false; - _userData = null; + // A failed /me fetch (network blip, parse error, etc.) must NOT log the + // user out. We keep whatever cached data we already have and simply + // signal to the caller that the refresh did not succeed. + debugPrint("--- fetchAndSetCurrentUser failed: ${response.error} ---"); notifyListeners(); return false; } @@ -180,20 +197,20 @@ class AuthProvider extends ChangeNotifier { setLoading(true); final response = await _repository.completeIndividualAccount( request, - token: _userData?.token, + token: _authResponseData?.token, // Use _authResponseData for token ); setLoading(false); if (response.isSuccess) { - _userData = response.data; - if (response.data != null) { - await _storageService.saveUserData(response.data!); - if (response.data?.token != null) { + _authResponseData = response.data; + if (_authResponseData != null) { + await _storageService.saveAuthResponseData(_authResponseData!); + if (_authResponseData?.token != null) { debugPrint("--- AuthProvider: New token received: ${response.data!.token} ---"); _isLoggedIn = true; await _storageService.saveTokens( - token: response.data!.token!, - refreshToken: response.data!.refreshToken ?? "", + token: _authResponseData!.token!, + refreshToken: _authResponseData!.refreshToken ?? "", ); } else { debugPrint("--- AuthProvider: No new token received in response ---"); @@ -209,7 +226,9 @@ class AuthProvider extends ChangeNotifier { void logout() { _isLoggedIn = false; _userData = null; - _storageService.clearTokens(); + _wallets = null; + _authResponseData = null; + _storageService.clearAllAuthData(); notifyListeners(); } } diff --git a/app/lib/features/auth/presentation/screens/individual/individual_otp_screen.dart b/app/lib/features/auth/presentation/screens/individual/individual_otp_screen.dart index 89f90b7..bf3313e 100644 --- a/app/lib/features/auth/presentation/screens/individual/individual_otp_screen.dart +++ b/app/lib/features/auth/presentation/screens/individual/individual_otp_screen.dart @@ -71,7 +71,10 @@ class _IndividualOtpScreenState extends State { if (!mounted) return; if (success) { - final needsOnboarding = authProvider.userData?.needsOnboarding ?? false; + // userData is null at this point — it's populated later by /me. + // needsOnboarding lives on authResponseData, which is set by verifyOtp(). + final needsOnboarding = + authProvider.authResponseData?.needsOnboarding ?? false; if (!needsOnboarding) { context.goNamed(PgRouteNames.individualMain); } else { diff --git a/app/lib/features/home/presentation/components/home_header.dart b/app/lib/features/home/presentation/components/home_header.dart index b815ac0..a2a7126 100644 --- a/app/lib/features/home/presentation/components/home_header.dart +++ b/app/lib/features/home/presentation/components/home_header.dart @@ -10,6 +10,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_svg/svg.dart'; import 'package:iconsax_flutter/iconsax_flutter.dart'; import 'package:provider/provider.dart'; +import 'package:shimmer/shimmer.dart'; /// A custom header for the Home Screen that displays the app logo, /// a personalized greeting for the user, and a notification icon. @@ -41,12 +42,35 @@ class HomeHeader extends StatelessWidget { fontSize: 12, color: Colors.grey, ), - PgTexts.text700( - context, - text: authProvider.userData?.firstName ?? "Guest User", - fontSize: 16, - color: theme.textTheme.bodyLarge?.color ?? PgColors.black, - fontFamily: PgFonts.googleSans, + Builder( + builder: (context) { + final name = authProvider.userData?.firstName ?? + authProvider.authResponseData?.firstName; + + if (name != null) { + return PgTexts.text700( + context, + text: name, + fontSize: 16, + color: theme.textTheme.bodyLarge?.color ?? PgColors.black, + fontFamily: PgFonts.googleSans, + ); + } + + // Shimmer loading skeleton + return Shimmer.fromColors( + baseColor: Colors.grey.shade300, + highlightColor: Colors.grey.shade100, + child: Container( + height: 20, + width: 100, + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(4), + ), + ), + ); + }, ), ], ), diff --git a/app/lib/features/home/presentation/components/home_recent_transactions.dart b/app/lib/features/home/presentation/components/home_recent_transactions.dart index 88d3f6c..ffe77a8 100644 --- a/app/lib/features/home/presentation/components/home_recent_transactions.dart +++ b/app/lib/features/home/presentation/components/home_recent_transactions.dart @@ -9,7 +9,9 @@ import 'package:app/routes/pg_route_names.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/svg.dart'; import 'package:go_router/go_router.dart'; +import 'package:iconsax_flutter/iconsax_flutter.dart'; import 'package:provider/provider.dart'; +import 'package:shimmer/shimmer.dart'; /// A list of the user's most recent transactions. /// Displays transaction title, date, and amount with credit/debit indicators. @@ -43,7 +45,7 @@ class _HomeRecentTransactionsState extends State { PgTexts.text600( context, text: "Recent Transactions", - fontSize: 18, + fontSize: 16, color: theme.textTheme.bodyLarge?.color ?? PgColors.black, ), GestureDetector( @@ -60,7 +62,10 @@ class _HomeRecentTransactionsState extends State { const SizedBox(width: 4), SvgPicture.asset( PgAssets.customIcon(iconName: "arrow_right"), - colorFilter: const ColorFilter.mode(PgColors.secondary, BlendMode.srcIn), + colorFilter: const ColorFilter.mode( + PgColors.secondary, + BlendMode.srcIn, + ), width: 14, ), ], @@ -70,12 +75,92 @@ class _HomeRecentTransactionsState extends State { ), const SizedBox(height: 16), if (walletProvider.isLoadingTransactions) - const Center(child: Padding(padding: EdgeInsets.all(20), child: CircularProgressIndicator())) + Shimmer.fromColors( + baseColor: Colors.grey.shade300, + highlightColor: Colors.grey.shade100, + child: ListView.separated( + shrinkWrap: true, + physics: const NeverScrollableScrollPhysics(), + itemCount: 3, + separatorBuilder: (context, index) => + Divider(height: 1, thickness: 1, color: Colors.grey.shade100), + itemBuilder: (context, index) { + return Padding( + padding: const EdgeInsets.symmetric(vertical: 16), + child: Row( + children: [ + Container( + width: 42, + height: 42, + decoration: const BoxDecoration( + color: Colors.white, + shape: BoxShape.circle, + ), + ), + const SizedBox(width: 16), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Container( + height: 16, + width: 150, + color: Colors.white, + ), + const SizedBox(height: 8), + Container( + height: 12, + width: 80, + color: Colors.white, + ), + ], + ), + ), + Container(height: 16, width: 60, color: Colors.white), + ], + ), + ); + }, + ), + ) else if (transactions.isEmpty) Center( child: Padding( - padding: const EdgeInsets.all(32), - child: PgTexts.text400(context, text: "No transactions yet", color: Colors.grey), + padding: const EdgeInsets.symmetric(vertical: 32), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Container( + padding: const EdgeInsets.all(24), + decoration: BoxDecoration( + color: PgColors.primary.withValues(alpha: 0.05), + shape: BoxShape.circle, + ), + child: const Icon( + Iconsax.receipt_copy, + size: 36, + color: PgColors.primary, + ), + ), + const SizedBox(height: 24), + PgTexts.text600( + context, + text: "No transactions yet", + fontSize: 20, + color: theme.textTheme.bodyLarge?.color ?? PgColors.black, + ), + const SizedBox(height: 3), + PgTexts.text400( + context, + text: "Your recent activities will show up here.", + color: + theme.textTheme.bodyMedium?.color?.withValues( + alpha: 0.7, + ) ?? + Colors.black54, + ), + ], + ), ), ) else @@ -86,14 +171,13 @@ class _HomeRecentTransactionsState extends State { separatorBuilder: (context, index) => Divider( height: 1, thickness: 1, - color: theme.brightness == Brightness.dark ? Colors.white10 : Colors.grey.shade100, + color: theme.brightness == Brightness.dark + ? Colors.white10 + : Colors.grey.shade100, ), itemBuilder: (context, index) { final tx = transactions[index]; - return _buildTransaction( - context, - transaction: tx, - ); + return _buildTransaction(context, transaction: tx); }, ), ], @@ -105,7 +189,9 @@ class _HomeRecentTransactionsState extends State { required Transaction transaction, }) { final theme = Theme.of(context); - final statusColor = transaction.isCredit ? const Color(0xFF10B981) : const Color(0xFFEF4444); + final statusColor = transaction.isCredit + ? const Color(0xFF10B981) + : const Color(0xFFEF4444); return InkWell( onTap: () => context.pushNamed( @@ -126,10 +212,7 @@ class _HomeRecentTransactionsState extends State { angle: transaction.isCredit ? 0 : math.pi / 2, child: SvgPicture.asset( PgAssets.customIcon(iconName: 'arrow_trend'), - colorFilter: ColorFilter.mode( - statusColor, - BlendMode.srcIn, - ), + colorFilter: ColorFilter.mode(statusColor, BlendMode.srcIn), width: 22, ), ), @@ -171,5 +254,3 @@ class _HomeRecentTransactionsState extends State { ); } } - - diff --git a/app/lib/features/home/presentation/screens/individual/individual_main_screen.dart b/app/lib/features/home/presentation/screens/individual/individual_main_screen.dart index 019bf73..e25f73c 100644 --- a/app/lib/features/home/presentation/screens/individual/individual_main_screen.dart +++ b/app/lib/features/home/presentation/screens/individual/individual_main_screen.dart @@ -1,3 +1,4 @@ +import 'package:app/core/widgets/coming_soon_screen.dart'; // Add import import 'package:app/features/auth/presentation/providers/auth_provider.dart'; import 'package:app/core/theme/pg_colors.dart'; // import 'package:app/core/theme/pg_styles.dart'; @@ -24,11 +25,14 @@ class IndividualMainScreen extends StatefulWidget { class _IndividualMainScreenState extends State { int _selectedIndex = 0; + static const bool _isFeatureEnabled = false; // Flag for enabling/disabling final List _screens = [ const IndividualHomeScreen(), - const IndividualCardsScreen(), - const IndividualFinanceScreen(), + // const IndividualCardsScreen(), + _isFeatureEnabled ? const IndividualCardsScreen() : const ComingSoonScreen(title: "Cards"), + // const IndividualFinanceScreen(), + _isFeatureEnabled ? const IndividualFinanceScreen() : const ComingSoonScreen(title: "Finance"), const IndividualMeScreen(), ]; diff --git a/app/lib/features/home/presentation/screens/individual/individual_me_screen.dart b/app/lib/features/home/presentation/screens/individual/individual_me_screen.dart index 4fb3a94..2718c2d 100644 --- a/app/lib/features/home/presentation/screens/individual/individual_me_screen.dart +++ b/app/lib/features/home/presentation/screens/individual/individual_me_screen.dart @@ -299,7 +299,7 @@ class IndividualMeScreen extends StatelessWidget { heightSpacing(2), PgTexts.text400( context, - text: user?.phone ?? "", + text: user?.email ?? "", fontSize: 14, color: (theme.textTheme.bodyMedium?.color ?? PgColors.black) .withValues(alpha: 0.7), diff --git a/app/lib/features/wallet/data/models/bank_model.dart b/app/lib/features/wallet/data/models/bank_model.dart index fdcefb3..6cc71e5 100644 --- a/app/lib/features/wallet/data/models/bank_model.dart +++ b/app/lib/features/wallet/data/models/bank_model.dart @@ -1,16 +1,19 @@ class Bank { final String name; final String code; + final String? icon; Bank({ required this.name, required this.code, + this.icon, }); factory Bank.fromJson(Map json) { return Bank( name: json['name'] ?? '', code: json['code'] ?? '', + icon: json['icon'], ); } @@ -18,6 +21,7 @@ class Bank { return { 'name': name, 'code': code, + 'icon': icon, }; } } diff --git a/app/lib/features/wallet/data/repositories/wallet_repository.dart b/app/lib/features/wallet/data/repositories/wallet_repository.dart index 18d4cee..4db5a2a 100644 --- a/app/lib/features/wallet/data/repositories/wallet_repository.dart +++ b/app/lib/features/wallet/data/repositories/wallet_repository.dart @@ -67,17 +67,14 @@ class WalletRepository { } } - Future>> verifyAccountNumber({ + Future>> lookupAccount({ required String accountNumber, required String bankCode, }) async { try { final response = await _apiService.post( - '/wallet/verify-account', - data: { - 'accountNumber': accountNumber, - 'bankCode': bankCode, - }, + '/wallet/transfer/lookup', + data: {'account_number': accountNumber, 'bank_code': bankCode}, ); return ApiResponse.fromJson( response.data, diff --git a/app/lib/features/wallet/presentation/providers/wallet_provider.dart b/app/lib/features/wallet/presentation/providers/wallet_provider.dart index c2cbf93..c4b36ed 100644 --- a/app/lib/features/wallet/presentation/providers/wallet_provider.dart +++ b/app/lib/features/wallet/presentation/providers/wallet_provider.dart @@ -119,11 +119,11 @@ class WalletProvider with ChangeNotifier { ]); } - Future>> verifyAccount({ + Future>> lookupAccount({ required String accountNumber, required String bankCode, }) async { - return await _walletRepository.verifyAccountNumber( + return await _walletRepository.lookupAccount( accountNumber: accountNumber, bankCode: bankCode, ); diff --git a/app/lib/features/wallet/presentation/screens/instant_payment_screen.dart b/app/lib/features/wallet/presentation/screens/instant_payment_screen.dart index ad4f63b..8fef341 100644 --- a/app/lib/features/wallet/presentation/screens/instant_payment_screen.dart +++ b/app/lib/features/wallet/presentation/screens/instant_payment_screen.dart @@ -12,6 +12,7 @@ import 'package:app/features/wallet/presentation/providers/wallet_provider.dart' import 'package:flutter/material.dart'; import 'package:iconsax_flutter/iconsax_flutter.dart'; import 'package:provider/provider.dart'; +import 'package:shimmer/shimmer.dart'; class InstantPaymentScreen extends StatefulWidget { const InstantPaymentScreen({super.key}); @@ -51,9 +52,12 @@ class _InstantPaymentScreenState extends State { Future _verifyAccount() async { if (_selectedBank == null) return; setState(() => _isValidatingAccount = true); - + final walletProvider = context.read(); - final response = await walletProvider.verifyAccount( + // Assuming WalletProvider has a corresponding method or needs one added. + // The previous code called `walletProvider.verifyAccount`. + // I need to make sure this maps to the `/transfer/lookup` endpoint. + final response = await walletProvider.lookupAccount( accountNumber: _accountController.text, bankCode: _selectedBank!.code, ); @@ -62,11 +66,14 @@ class _InstantPaymentScreenState extends State { setState(() { _isValidatingAccount = false; if (response.data != null) { - _accountName = response.data!['accountName'] ?? response.data!['account_name']; + _accountName = + response.data!['accountName'] ?? response.data!['account_name']; } else { _accountName = null; ScaffoldMessenger.of(context).showSnackBar( - SnackBar(content: Text(response.error ?? "Failed to verify account")), + SnackBar( + content: Text(response.error ?? "Failed to verify account"), + ), ); } }); @@ -90,7 +97,8 @@ class _InstantPaymentScreenState extends State { children: [ const SizedBox(height: 12), Container( - width: 40, height: 4, + width: 40, + height: 4, decoration: BoxDecoration( color: Colors.grey.withValues(alpha: 0.3), borderRadius: BorderRadius.circular(2), @@ -113,31 +121,63 @@ class _InstantPaymentScreenState extends State { child: Consumer( builder: (context, provider, child) { if (provider.isLoadingBanks) { - return const Center(child: CircularProgressIndicator()); + return Shimmer.fromColors( + baseColor: Colors.grey.shade300, + highlightColor: Colors.grey.shade100, + child: ListView.separated( + padding: const EdgeInsets.symmetric( + horizontal: 24, + vertical: 8, + ), + itemCount: 8, + separatorBuilder: (context, index) => const Divider(), + itemBuilder: (context, index) => ListTile( + contentPadding: EdgeInsets.zero, + title: Container( + height: 16, + width: double.infinity, + color: Colors.white, + ), + ), + ), + ); } - - final filteredBanks = provider.banks.where((bank) => - bank.name.toLowerCase().contains(_searchQuery.toLowerCase()) - ).toList(); + + final filteredBanks = provider.banks + .where( + (bank) => bank.name.toLowerCase().contains( + _searchQuery.toLowerCase(), + ), + ) + .toList(); if (filteredBanks.isEmpty) { - return Center(child: PgTexts.text400(context, text: "No banks found")); + return Center( + child: PgTexts.text400(context, text: "No banks found"), + ); } return ListView.separated( - padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 8), + padding: const EdgeInsets.symmetric( + horizontal: 24, + vertical: 8, + ), itemCount: filteredBanks.length, separatorBuilder: (context, index) => const Divider(), itemBuilder: (context, index) => ListTile( contentPadding: EdgeInsets.zero, - title: PgTexts.text500(context, text: filteredBanks[index].name), + title: PgTexts.text500( + context, + text: filteredBanks[index].name, + ), onTap: () { setState(() { _selectedBank = filteredBanks[index]; _accountName = null; }); Navigator.pop(context); - if (_accountController.text.length == 10) _verifyAccount(); + if (_accountController.text.length == 10) + _verifyAccount(); }, ), ); @@ -169,7 +209,8 @@ class _InstantPaymentScreenState extends State { children: [ Center( child: Container( - width: 40, height: 4, + width: 40, + height: 4, decoration: BoxDecoration( color: Colors.grey.withValues(alpha: 0.3), borderRadius: BorderRadius.circular(2), @@ -178,7 +219,11 @@ class _InstantPaymentScreenState extends State { ), const SizedBox(height: 32), Center( - child: PgTexts.text700(context, text: "Review Payment", fontSize: 22), + child: PgTexts.text700( + context, + text: "Review Payment", + fontSize: 22, + ), ), const SizedBox(height: 32), Container( @@ -186,7 +231,9 @@ class _InstantPaymentScreenState extends State { decoration: BoxDecoration( color: theme.cardTheme.color, borderRadius: BorderRadius.circular(24), - border: Border.all(color: theme.dividerTheme.color ?? Colors.grey.shade100), + border: Border.all( + color: theme.dividerTheme.color ?? Colors.grey.shade100, + ), ), child: Column( children: [ @@ -206,8 +253,16 @@ class _InstantPaymentScreenState extends State { Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - PgTexts.text500(context, text: "Total Payable", color: Colors.grey), - PgTexts.text700(context, text: "₦${_amountController.text}", fontSize: 20), + PgTexts.text500( + context, + text: "Total Payable", + color: Colors.grey, + ), + PgTexts.text700( + context, + text: "₦${_amountController.text}", + fontSize: 20, + ), ], ), const SizedBox(height: 40), @@ -226,7 +281,12 @@ class _InstantPaymentScreenState extends State { colors: [PgColors.primary, PgColors.secondary], ), ), - child: PgTexts.text600(context, text: "Confirm & Pay", color: Colors.white, fontSize: 16), + child: PgTexts.text600( + context, + text: "Confirm & Pay", + color: Colors.white, + fontSize: 16, + ), ), ), const SizedBox(height: 24), @@ -242,8 +302,23 @@ class _InstantPaymentScreenState extends State { child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - PgTexts.text400(context, text: label, color: Colors.grey, fontSize: 14), - PgTexts.text600(context, text: value, fontSize: 14), + PgTexts.text400( + context, + text: label, + color: Colors.grey, + fontSize: 14, + ), + const SizedBox(width: 16), + Expanded( + child: PgTexts.text600( + context, + text: value, + fontSize: 14, + textOverflow: TextOverflow.ellipsis, + maxLines: 1, + textAlign: TextAlign.right, + ), + ), ], ), ); @@ -253,10 +328,13 @@ class _InstantPaymentScreenState extends State { final auth = context.read(); final biometricService = context.read(); bool biometricEnabled = await biometricService.isBiometricEnabled(); - + if (biometricEnabled) { bool authenticated = await biometricService.authenticateLocally(); - if (authenticated) { _executePayment("0000"); return; } // Dummy pin if biometric authenticated + if (authenticated) { + _executePayment("0000"); + return; + } // Dummy pin if biometric authenticated } if (auth.userData?.hasPin ?? false) { @@ -282,7 +360,8 @@ class _InstantPaymentScreenState extends State { PgPinSheet.show( context, title: "Create PIN", - description: "You haven't set a transaction PIN. Create one now to continue.", + description: + "You haven't set a transaction PIN. Create one now to continue.", onVerify: (pin) { Navigator.pop(context); _showConfirmPinFlow(pin); @@ -300,7 +379,9 @@ class _InstantPaymentScreenState extends State { Navigator.pop(context); _executePayment(pin); } else { - ScaffoldMessenger.of(context).showSnackBar(const SnackBar(content: Text("PINs do not match."))); + ScaffoldMessenger.of( + context, + ).showSnackBar(const SnackBar(content: Text("PINs do not match."))); } }, ); @@ -308,7 +389,7 @@ class _InstantPaymentScreenState extends State { Future _executePayment(String pin) async { setState(() => _isValidatingAccount = true); - + final walletProvider = context.read(); final response = await walletProvider.transfer( amount: double.tryParse(_amountController.text.replaceAll(',', '')) ?? 0, @@ -323,7 +404,8 @@ class _InstantPaymentScreenState extends State { PgSuccessDialog.show( context, title: "Payment Successful", - message: "You have successfully sent ₦${_amountController.text} to $_accountName", + message: + "You have successfully sent ₦${_amountController.text} to $_accountName", buttonText: "Continue", onButtonPressed: () { Navigator.pop(context); @@ -342,7 +424,9 @@ class _InstantPaymentScreenState extends State { Widget build(BuildContext context) { final theme = Theme.of(context); final isDark = theme.brightness == Brightness.dark; - final backgroundColor = isDark ? theme.scaffoldBackgroundColor : PgColors.homeBackground; + final backgroundColor = isDark + ? theme.scaffoldBackgroundColor + : PgColors.homeBackground; return buildPGAnnotatedRegion( brightness: isDark ? Brightness.light : Brightness.dark, @@ -352,136 +436,208 @@ class _InstantPaymentScreenState extends State { body: Padding( padding: const EdgeInsets.symmetric(horizontal: 24), child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - heightSpacing(24), - PgScaleButton( - onTap: () { - if (_currentStep > 0) { - setState(() => _currentStep = 0); - } else { - Navigator.pop(context); - } - }, - child: Container( - padding: const EdgeInsets.all(10), - decoration: BoxDecoration( - color: theme.cardTheme.color, - shape: BoxShape.circle, - border: Border.all(color: theme.dividerTheme.color ?? Colors.grey.shade100), + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + heightSpacing(24), + PgScaleButton( + onTap: () { + if (_currentStep > 0) { + setState(() => _currentStep = 0); + } else { + Navigator.pop(context); + } + }, + child: Container( + padding: const EdgeInsets.all(10), + decoration: BoxDecoration( + color: theme.cardTheme.color, + shape: BoxShape.circle, + border: Border.all( + color: theme.dividerTheme.color ?? Colors.grey.shade100, ), - child: Icon(Icons.arrow_back_outlined, size: 20, color: theme.textTheme.bodyLarge?.color), + ), + child: Icon( + Icons.arrow_back_outlined, + size: 20, + color: theme.textTheme.bodyLarge?.color, ), ), - heightSpacing(24), - PgTexts.text700(context, text: "Instant Payment", fontSize: 28), - heightSpacing(4), - PgTexts.text400( - context, - text: _currentStep == 0 - ? "Enter recipient details to send money." - : "How much would you like to send to $_accountName?", - fontSize: 16, - color: Colors.grey - ), - heightSpacing(32), - Expanded( - child: SingleChildScrollView( - child: Column( - children: [ - if (_currentStep == 0) ...[ - PgTextField( - controller: _accountController, - hintText: "Account Number", - label: "Account Number", - keyboardType: TextInputType.number, - maxLength: 10, - prefixIcon: const Icon(Iconsax.card_copy, size: 20, color: Colors.grey), - suffixIcon: _isValidatingAccount ? const SizedBox(width: 20, height: 20, child: Padding(padding: EdgeInsets.all(12), child: CircularProgressIndicator(strokeWidth: 2))) : null, - ), - const SizedBox(height: 12), - GestureDetector( - onTap: _showBankSelection, - child: AbsorbPointer( - child: PgTextField( - hintText: _selectedBank?.name ?? "Select Bank", - label: "Bank", - prefixIcon: const Icon(Iconsax.bank_copy, size: 20, color: Colors.grey), - suffixIcon: const Icon(Iconsax.arrow_down_1_copy), + ), + heightSpacing(24), + PgTexts.text700(context, text: "Instant Payment", fontSize: 28), + heightSpacing(4), + PgTexts.text400( + context, + text: _currentStep == 0 + ? "Enter recipient details to send money." + : "How much would you like to send to $_accountName?", + fontSize: 16, + color: Colors.grey, + ), + heightSpacing(32), + Expanded( + child: SingleChildScrollView( + child: Column( + children: [ + if (_currentStep == 0) ...[ + GestureDetector( + onTap: _showBankSelection, + child: AbsorbPointer( + child: PgTextField( + // Use a controller or just display text to control color + // Since PgTextField takes 'hintText', and we want it to look "filled", + // we might need to adjust PgTextField or just use 'controller' + controller: TextEditingController( + text: _selectedBank?.name ?? "", ), + hintText: "Select Bank", + label: "Bank", + prefixIcon: const Icon( + Iconsax.bank_copy, + size: 20, + color: Colors.grey, + ), + suffixIcon: const Icon(Iconsax.arrow_down_1_copy), + // This is a trick to make it look "greyed out" if we can't change the field style + // enabled: false, ), ), - if (_accountName != null) ...[ - const SizedBox(height: 16), - Container( - padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 12), - decoration: BoxDecoration( - color: Colors.green.withValues(alpha: 0.1), - borderRadius: BorderRadius.circular(12), - border: Border.all(color: Colors.green.withValues(alpha: 0.2)), - ), - child: Row( - children: [ - const Icon(Icons.check_circle, color: Colors.green, size: 18), - const SizedBox(width: 10), - Expanded( - child: PgTexts.text600(context, text: _accountName!, color: Colors.green, fontSize: 14), + ), + const SizedBox(height: 16), + PgTextField( + controller: _accountController, + hintText: "Account Number", + label: "Account Number", + keyboardType: TextInputType.number, + maxLength: 10, + prefixIcon: const Icon( + Iconsax.card_copy, + size: 20, + color: Colors.grey, + ), + suffixIcon: _isValidatingAccount + ? const SizedBox( + width: 16, + height: 16, + child: Padding( + padding: EdgeInsets.all(12), + child: CircularProgressIndicator( + strokeWidth: 1, + ), ), - ], + ) + : null, + ), + if (_accountName != null) ...[ + const SizedBox(height: 16), + Container( + padding: const EdgeInsets.symmetric( + horizontal: 16, + vertical: 12, + ), + decoration: BoxDecoration( + color: Colors.green.withValues(alpha: 0.1), + borderRadius: BorderRadius.circular(12), + border: Border.all( + color: Colors.green.withValues(alpha: 0.2), ), ), - ], - ] else ...[ - PgTextField( - controller: _amountController, - hintText: "0.00", - label: "Amount", - keyboardType: TextInputType.number, - prefixIcon: const Icon(Iconsax.money_2_copy, size: 20, color: Colors.grey), - prefix: const Padding( - padding: EdgeInsets.symmetric(horizontal: 4.0), - child: Text("₦", style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold)), + child: Row( + children: [ + const Icon( + Icons.check_circle, + color: Colors.green, + size: 18, + ), + const SizedBox(width: 10), + Expanded( + child: PgTexts.text600( + context, + text: _accountName!, + color: Colors.green, + fontSize: 14, + ), + ), + ], ), ), ], - const SizedBox(height: 40), + ] else ...[ + PgTextField( + controller: _amountController, + hintText: "0.00", + label: "Amount", + keyboardType: TextInputType.number, + prefixIcon: const Icon( + Iconsax.money_2_copy, + size: 20, + color: Colors.grey, + ), + prefix: const Padding( + padding: EdgeInsets.symmetric(horizontal: 4.0), + child: Text( + "₦", + style: TextStyle( + fontSize: 18, + fontWeight: FontWeight.bold, + ), + ), + ), + ), ], - ), + const SizedBox(height: 40), + ], ), ), - PgScaleButton( - onTap: () { - if (_currentStep == 0) { - if (_accountController.text.length == 10 && _selectedBank != null && _accountName != null) { - setState(() => _currentStep = 1); - } else { - ScaffoldMessenger.of(context).showSnackBar(const SnackBar(content: Text("Please enter valid account details."))); - } + ), + PgScaleButton( + onTap: () { + if (_currentStep == 0) { + if (_accountController.text.length == 10 && + _selectedBank != null && + _accountName != null) { + setState(() => _currentStep = 1); } else { - if (_amountController.text.isNotEmpty) { - _showReviewBottomSheet(); - } else { - ScaffoldMessenger.of(context).showSnackBar(const SnackBar(content: Text("Please enter an amount."))); - } + ScaffoldMessenger.of(context).showSnackBar( + const SnackBar( + content: Text("Please enter valid account details."), + ), + ); } - }, - child: Container( - height: 60, - width: double.infinity, - alignment: Alignment.center, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(100), - gradient: const LinearGradient( - colors: [PgColors.primary, PgColors.secondary], - ), + } else { + if (_amountController.text.isNotEmpty) { + _showReviewBottomSheet(); + } else { + ScaffoldMessenger.of(context).showSnackBar( + const SnackBar( + content: Text("Please enter an amount."), + ), + ); + } + } + }, + child: Container( + height: 60, + width: double.infinity, + alignment: Alignment.center, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(100), + gradient: const LinearGradient( + colors: [PgColors.primary, PgColors.secondary], ), - child: PgTexts.text600(context, text: _currentStep == 0 ? "Continue" : "Proceed to Review", color: Colors.white, fontSize: 16), + ), + child: PgTexts.text600( + context, + text: _currentStep == 0 ? "Continue" : "Proceed to Review", + color: Colors.white, + fontSize: 16, ), ), - heightSpacing(30), - ], - ), + ), + heightSpacing(30), + ], ), + ), ), ); } diff --git a/app/lib/routes/pg_router.dart b/app/lib/routes/pg_router.dart index 5c93d95..fbdbd5c 100644 --- a/app/lib/routes/pg_router.dart +++ b/app/lib/routes/pg_router.dart @@ -37,7 +37,7 @@ class PayGidiRouter { refreshListenable: authProvider, redirect: (context, state) { final isLoggedIn = authProvider.isLoggedIn; - final needsOnboarding = authProvider.userData?.needsOnboarding ?? false; + final needsOnboarding = authProvider.authResponseData?.needsOnboarding ?? false; final isSplash = state.matchedLocation == "/${PgRouteNames.splashPage}"; final isOnboarding = diff --git a/app/pubspec.lock b/app/pubspec.lock index 73ddc47..dc63614 100644 --- a/app/pubspec.lock +++ b/app/pubspec.lock @@ -704,6 +704,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.4.1" + shimmer: + dependency: "direct main" + description: + name: shimmer + sha256: "5f88c883a22e9f9f299e5ba0e4f7e6054857224976a5d9f839d4ebdc94a14ac9" + url: "https://pub.dev" + source: hosted + version: "3.0.0" sky_engine: dependency: transitive description: flutter diff --git a/app/pubspec.yaml b/app/pubspec.yaml index 4dc72aa..ba3f28e 100644 --- a/app/pubspec.yaml +++ b/app/pubspec.yaml @@ -47,6 +47,7 @@ dependencies: url_launcher: ^6.3.2 local_auth: ^3.0.1 uuid: ^4.5.3 + shimmer: ^3.0.0 dev_dependencies: flutter_test: diff --git a/services/account/controllers/account.go b/services/account/controllers/account.go index ff5a801..c65625e 100644 --- a/services/account/controllers/account.go +++ b/services/account/controllers/account.go @@ -1,10 +1,12 @@ package controllers import ( + "log" "net/http" payGidiErrors "github.com/PayGidi/AccountService/core/interfaces/errors" "github.com/PayGidi/AccountService/models" + "github.com/PayGidi/AccountService/services/wallet" "github.com/PayGidi/AccountService/utils" "github.com/PayGidi/AccountService/validators" "github.com/gin-gonic/gin" @@ -35,15 +37,15 @@ func GetAccountDetails(c *gin.Context) { c.JSON(http.StatusOK, gin.H{ "message": "Account details retrieved successfully", "data": gin.H{ - "userId": currentUser.UID, - "username": currentUser.Username, - "email": currentUser.Email, - "phone": currentUser.Phone, - "accountType": currentUser.AccountType, - "status": currentUser.Status, - "person": currentUser.Person, - "isFirstTime": currentUser.IsFirstTime, - "pinSet": currentUser.Pin != "", + "userId": currentUser.UID, + "username": currentUser.Username, + "email": currentUser.Email, + "phone": currentUser.Phone, + "accountType": currentUser.AccountType, + "status": currentUser.Status, + "person": currentUser.Person, + "isFirstTime": currentUser.IsFirstTime, + "pinSet": currentUser.Pin != "", }, }) } @@ -262,12 +264,14 @@ func DeleteAccount(c *gin.Context) { // @Accept json // @Produce json // @Security ApiKeyAuth -// @Success 200 {object} responses.ApiResponse{data=models.User} "Current user details" +// @Success 200 {object} responses.ApiResponse{data=map[string]interface{}} "Current user details with wallets" // @Failure 401 {object} responses.ApiResponse "Unauthorized" // @Failure 500 {object} responses.ApiResponse "Internal Server Error" // @Router /me [get] func Me(c *gin.Context) { - db, _ := c.Get("db") + log.Printf("Me controller called for path: %s", c.Request.URL.Path) + dbVal, _ := c.Get("db") + db := dbVal.(*gorm.DB) user, exists := c.Get("user") if !exists { c.JSON(http.StatusUnauthorized, gin.H{ @@ -277,11 +281,11 @@ func Me(c *gin.Context) { return } - currentUser := user.(*models.User) - + currentUser := user.(models.User) + // Preload associations var fullUser models.User - if err := db.(*gorm.DB).Preload("Person").Preload("Accounts").Preload("Contact").Preload("AuthInfo").Preload("Preferences").Preload("Roles").First(&fullUser, currentUser.ID).Error; err != nil { + if err := db.Preload("Person").Preload("Contact").Preload("AuthInfo").Preload("Preferences").Preload("Roles").First(&fullUser, currentUser.ID).Error; err != nil { c.JSON(http.StatusInternalServerError, gin.H{ "code": payGidiErrors.INTERNAL_SERVER_ERROR, "error": "Failed to fetch user associations", @@ -289,8 +293,26 @@ func Me(c *gin.Context) { return } + // Fetch wallets via gRPC + walletClient, err := wallet.NewWalletService("") + var wallets interface{} + if err == nil { + defer walletClient.Close() + resp, err := walletClient.GetWalletsForUser(c.Request.Context(), currentUser.UID) + if err == nil && resp.Success { + wallets = resp.Wallets + } else { + log.Printf("[Me] failed to fetch wallets: %v", err) + } + } else { + log.Printf("[Me] failed to create wallet service client: %v", err) + } + c.JSON(http.StatusOK, gin.H{ "message": "User details retrieved successfully", - "data": fullUser, + "data": gin.H{ + "user": fullUser, + "wallets": wallets, + }, }) } diff --git a/services/account/controllers/auth.go b/services/account/controllers/auth.go index 0a0d899..db18ce7 100644 --- a/services/account/controllers/auth.go +++ b/services/account/controllers/auth.go @@ -392,7 +392,7 @@ func VerifyAuthOTP(c *gin.Context) { func RegisterBiometric(c *gin.Context) { db, _ := c.Get("db") user, _ := c.Get("user") - currentUser := user.(*models.User) + currentUser := user.(models.User) validatedBody, _ := c.Get("validatedBody") data := validatedBody.(*validators.RegisterBiometricDto) diff --git a/services/account/controllers/register.go b/services/account/controllers/register.go index 56964da..3599d8f 100644 --- a/services/account/controllers/register.go +++ b/services/account/controllers/register.go @@ -12,7 +12,7 @@ import ( walletService "github.com/PayGidi/AccountService/services/wallet" "github.com/PayGidi/AccountService/utils" "github.com/PayGidi/AccountService/validators" - walletpb "github.com/PayGidi/WalletService/proto/connection/pb" + pb "github.com/PayGidi/AccountService/proto/connection/pb" "github.com/gin-gonic/gin" "gorm.io/gorm" ) @@ -173,7 +173,7 @@ func CompleteAccount(c *gin.Context) { defer cancel() log.Printf("[CompleteAccount] calling CreateWalletForUser at %s", constants.WALLET_SERVICE_ADDR) - resp, err := walletClient.CreateWalletForUser(ctx, &walletpb.CreateWalletRequest{ + resp, err := walletClient.CreateWalletForUser(ctx, &pb.CreateWalletRequest{ Firstname: firstName, Middlename: middleName, Lastname: lastName, diff --git a/services/account/docs/docs.go b/services/account/docs/docs.go index 9d1694f..bf36a2b 100644 --- a/services/account/docs/docs.go +++ b/services/account/docs/docs.go @@ -815,7 +815,7 @@ const docTemplate = `{ "summary": "Get current user", "responses": { "200": { - "description": "Current user details", + "description": "Current user details with wallets", "schema": { "allOf": [ { @@ -825,7 +825,8 @@ const docTemplate = `{ "type": "object", "properties": { "data": { - "$ref": "#/definitions/models.User" + "type": "object", + "additionalProperties": true } } } @@ -849,580 +850,6 @@ const docTemplate = `{ } }, "definitions": { - "models.Activity": { - "type": "object", - "properties": { - "createdAt": { - "type": "string" - }, - "deletedAt": { - "description": "Nullable for soft deletes", - "type": "string" - }, - "details": { - "description": "Additional details about the activity", - "type": "string" - }, - "id": { - "description": "Unique identifier for the activity", - "type": "integer" - }, - "ipAddress": { - "description": "IP address from which the activity was performed", - "type": "string" - }, - "type": { - "description": "Type of activity (e.g., \"login\", \"logout\", \"update_profile\")", - "type": "string" - }, - "updatedAt": { - "type": "string" - }, - "user": { - "description": "Belongs to User", - "allOf": [ - { - "$ref": "#/definitions/models.User" - } - ] - }, - "userAgent": { - "description": "User agent string for the activity", - "type": "string" - }, - "userId": { - "description": "Reference to the user associated with the activity", - "type": "integer" - } - } - }, - "models.AuthInfo": { - "type": "object", - "properties": { - "createdAt": { - "type": "string" - }, - "deletedAt": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "lastLoginAt": { - "description": "User User ` + "`" + `gorm:\"constraint:OnUpdate:CASCADE,OnDelete:SET NULL;\"` + "`" + ` // Belongs to User", - "type": "string" - }, - "lockedReason": { - "type": "string" - }, - "lockedUntil": { - "description": "Timestamp until which the user is locked out", - "type": "string" - }, - "loginAttempts": { - "description": "Number of login attempts", - "type": "integer" - }, - "otpCooldownUntil": { - "description": "Timestamp until which the user is cooled down from requesting OTP", - "type": "string" - }, - "otpRequestCount": { - "description": "Number of OTP requests", - "type": "integer" - }, - "updatedAt": { - "type": "string" - }, - "userID": { - "description": "Unique identifier for the user", - "type": "integer" - } - } - }, - "models.Business": { - "type": "object", - "properties": { - "additionalDocs": { - "type": "array", - "items": { - "type": "string" - } - }, - "createdAt": { - "type": "string" - }, - "facebook": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "industry": { - "type": "string" - }, - "instagram": { - "type": "string" - }, - "linkedIn": { - "type": "string" - }, - "name": { - "type": "string" - }, - "registrationDoc": { - "description": "URL to the document", - "type": "string" - }, - "registrationNumber": { - "type": "string" - }, - "twitter": { - "type": "string" - }, - "type": { - "description": "e.g., \"LLC\", \"Sole Proprietorship\"", - "type": "string" - }, - "updatedAt": { - "type": "string" - }, - "userId": { - "type": "integer" - }, - "website": { - "type": "string" - } - } - }, - "models.ContactInfo": { - "type": "object", - "properties": { - "address": { - "type": "string" - }, - "city": { - "type": "string" - }, - "country": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "postalCode": { - "type": "string" - }, - "state": { - "type": "string" - }, - "user": { - "description": "Belongs to User", - "allOf": [ - { - "$ref": "#/definitions/models.User" - } - ] - }, - "userId": { - "type": "integer" - } - } - }, - "models.KYC": { - "type": "object", - "properties": { - "createdAt": { - "type": "string" - }, - "document": { - "description": "base64 or URL to document", - "type": "string" - }, - "id": { - "type": "integer" - }, - "kycType": { - "description": "e.g., \"passport\", \"nationalID\"", - "type": "string" - }, - "status": { - "description": "\"pending\", \"approved\", \"rejected\"", - "type": "string" - }, - "updatedAt": { - "type": "string" - }, - "userId": { - "description": "remove uniqueIndex, keep index for performance", - "type": "integer" - } - } - }, - "models.OTP": { - "type": "object", - "properties": { - "code": { - "type": "string" - }, - "createdAt": { - "type": "string" - }, - "expiresAt": { - "type": "string" - }, - "forWhat": { - "description": "e.g., \"register\", \"login\", \"setPin\", \"updatePin\"", - "type": "string" - }, - "id": { - "type": "integer" - }, - "userId": { - "type": "integer" - }, - "verified": { - "type": "boolean" - }, - "via": { - "description": "sms, email, whatsapp", - "type": "string" - } - } - }, - "models.Permission": { - "type": "object", - "properties": { - "createdAt": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "name": { - "description": "e.g., \"read_account\", \"edit_user\"", - "type": "string" - }, - "updatedAt": { - "type": "string" - } - } - }, - "models.Person": { - "type": "object", - "properties": { - "address": { - "type": "string" - }, - "city": { - "type": "string" - }, - "country": { - "type": "string" - }, - "dateOfBirth": { - "type": "string" - }, - "firstName": { - "type": "string" - }, - "gender": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "lastName": { - "type": "string" - }, - "middleName": { - "type": "string" - }, - "otherNames": { - "type": "array", - "items": { - "type": "string" - } - }, - "postalCode": { - "type": "string" - }, - "state": { - "type": "string" - }, - "userID": { - "description": "Make sure only one Person per User", - "type": "integer" - } - } - }, - "models.Preference": { - "type": "object", - "properties": { - "createdAt": { - "type": "string" - }, - "deletedAt": { - "description": "Nullable for soft deletes", - "type": "string" - }, - "id": { - "description": "Unique identifier for the preference", - "type": "integer" - }, - "language": { - "description": "e.g., \"en\", \"fr\", etc.", - "type": "string" - }, - "notificationsEnabled": { - "description": "Indicates if notifications are enabled", - "type": "boolean" - }, - "theme": { - "description": "e.g., \"light\", \"dark\"", - "type": "string" - }, - "timezone": { - "description": "e.g., \"UTC\", \"America/New_York\"", - "type": "string" - }, - "updatedAt": { - "type": "string" - }, - "userId": { - "type": "integer" - } - } - }, - "models.Role": { - "type": "object", - "properties": { - "createdAt": { - "type": "string" - }, - "description": { - "description": "Description of the role", - "type": "string" - }, - "id": { - "type": "integer" - }, - "name": { - "description": "e.g., \"admin\", \"user\"", - "type": "string" - }, - "permissions": { - "type": "array", - "items": { - "$ref": "#/definitions/models.Permission" - } - }, - "updatedAt": { - "type": "string" - } - } - }, - "models.Session": { - "type": "object", - "properties": { - "createdAt": { - "type": "string" - }, - "currentSessionID": { - "description": "Token for the current session", - "type": "string" - }, - "expiresAt": { - "description": "Expiration time for the session", - "type": "string" - }, - "id": { - "type": "integer" - }, - "lastKnownIp": { - "description": "Last known IP address of the user", - "type": "string" - }, - "lastUserAgent": { - "description": "User agent string for the session", - "type": "string" - }, - "updatedAt": { - "type": "string" - }, - "user": { - "description": "Belongs to User", - "allOf": [ - { - "$ref": "#/definitions/models.User" - } - ] - }, - "userId": { - "description": "Reference to the user associated with the session", - "type": "integer" - } - } - }, - "models.User": { - "type": "object", - "required": [ - "email", - "username" - ], - "properties": { - "accountType": { - "description": "individual or business", - "type": "string" - }, - "activities": { - "description": "List of activities performed by the user", - "type": "array", - "items": { - "$ref": "#/definitions/models.Activity" - } - }, - "authInfo": { - "description": "Authentication-related information", - "allOf": [ - { - "$ref": "#/definitions/models.AuthInfo" - } - ] - }, - "biometricEnabled": { - "type": "boolean" - }, - "biometricID": { - "description": "Unique identifier for biometrics (e.g., Device ID + Biometric Hash)", - "type": "string" - }, - "business": { - "description": "Business-related information (if accountType is business)", - "allOf": [ - { - "$ref": "#/definitions/models.Business" - } - ] - }, - "contact": { - "description": "Contact information for the user", - "type": "array", - "items": { - "$ref": "#/definitions/models.ContactInfo" - } - }, - "createdAt": { - "type": "string" - }, - "deletedAt": { - "type": "string" - }, - "email": { - "type": "string" - }, - "emailVerified": { - "description": "Indicates if the user's email is verified", - "type": "boolean" - }, - "hashedNIN": { - "description": "Hashed version of the user's NIN for security", - "type": "string" - }, - "id": { - "type": "integer" - }, - "isFirstTime": { - "description": "Indicates if this is the user's first login", - "type": "boolean" - }, - "kycs": { - "description": "List of KYC documents associated with the user", - "type": "array", - "items": { - "$ref": "#/definitions/models.KYC" - } - }, - "otps": { - "description": "List of OTPs associated with the user", - "type": "array", - "items": { - "$ref": "#/definitions/models.OTP" - } - }, - "person": { - "description": "One-to-one link", - "allOf": [ - { - "$ref": "#/definitions/models.Person" - } - ] - }, - "phone": { - "type": "string" - }, - "phoneVerified": { - "description": "Indicates if the user's phone number is verified", - "type": "boolean" - }, - "pin": { - "description": "Hashed version of the user's PIN for security", - "type": "string" - }, - "preferences": { - "description": "User preferences", - "allOf": [ - { - "$ref": "#/definitions/models.Preference" - } - ] - }, - "profile_pic": { - "description": "URL to the user's profile picture", - "type": "string" - }, - "roles": { - "type": "array", - "items": { - "$ref": "#/definitions/models.Role" - } - }, - "sessions": { - "description": "List of active sessions for the user", - "type": "array", - "items": { - "$ref": "#/definitions/models.Session" - } - }, - "status": { - "description": "e.g., \"active\", \"inactive\", etc.", - "type": "string" - }, - "twoFactorEnabled": { - "description": "Indicates if two-factor authentication is enabled", - "type": "boolean" - }, - "twoFactorMethod": { - "description": "Method of two-factor authentication (e.g., \"sms\", \"email\", \"app\")", - "type": "string" - }, - "twoFactorSecret": { - "description": "Secret for two-factor authentication", - "type": "string" - }, - "uid": { - "type": "string" - }, - "updatedAt": { - "type": "string" - }, - "username": { - "type": "string", - "maxLength": 30, - "minLength": 3 - } - } - }, "responses.ApiResponse": { "type": "object", "properties": { diff --git a/services/account/docs/swagger.json b/services/account/docs/swagger.json index 31b5efd..8869f9e 100644 --- a/services/account/docs/swagger.json +++ b/services/account/docs/swagger.json @@ -809,7 +809,7 @@ "summary": "Get current user", "responses": { "200": { - "description": "Current user details", + "description": "Current user details with wallets", "schema": { "allOf": [ { @@ -819,7 +819,8 @@ "type": "object", "properties": { "data": { - "$ref": "#/definitions/models.User" + "type": "object", + "additionalProperties": true } } } @@ -843,580 +844,6 @@ } }, "definitions": { - "models.Activity": { - "type": "object", - "properties": { - "createdAt": { - "type": "string" - }, - "deletedAt": { - "description": "Nullable for soft deletes", - "type": "string" - }, - "details": { - "description": "Additional details about the activity", - "type": "string" - }, - "id": { - "description": "Unique identifier for the activity", - "type": "integer" - }, - "ipAddress": { - "description": "IP address from which the activity was performed", - "type": "string" - }, - "type": { - "description": "Type of activity (e.g., \"login\", \"logout\", \"update_profile\")", - "type": "string" - }, - "updatedAt": { - "type": "string" - }, - "user": { - "description": "Belongs to User", - "allOf": [ - { - "$ref": "#/definitions/models.User" - } - ] - }, - "userAgent": { - "description": "User agent string for the activity", - "type": "string" - }, - "userId": { - "description": "Reference to the user associated with the activity", - "type": "integer" - } - } - }, - "models.AuthInfo": { - "type": "object", - "properties": { - "createdAt": { - "type": "string" - }, - "deletedAt": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "lastLoginAt": { - "description": "User User `gorm:\"constraint:OnUpdate:CASCADE,OnDelete:SET NULL;\"` // Belongs to User", - "type": "string" - }, - "lockedReason": { - "type": "string" - }, - "lockedUntil": { - "description": "Timestamp until which the user is locked out", - "type": "string" - }, - "loginAttempts": { - "description": "Number of login attempts", - "type": "integer" - }, - "otpCooldownUntil": { - "description": "Timestamp until which the user is cooled down from requesting OTP", - "type": "string" - }, - "otpRequestCount": { - "description": "Number of OTP requests", - "type": "integer" - }, - "updatedAt": { - "type": "string" - }, - "userID": { - "description": "Unique identifier for the user", - "type": "integer" - } - } - }, - "models.Business": { - "type": "object", - "properties": { - "additionalDocs": { - "type": "array", - "items": { - "type": "string" - } - }, - "createdAt": { - "type": "string" - }, - "facebook": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "industry": { - "type": "string" - }, - "instagram": { - "type": "string" - }, - "linkedIn": { - "type": "string" - }, - "name": { - "type": "string" - }, - "registrationDoc": { - "description": "URL to the document", - "type": "string" - }, - "registrationNumber": { - "type": "string" - }, - "twitter": { - "type": "string" - }, - "type": { - "description": "e.g., \"LLC\", \"Sole Proprietorship\"", - "type": "string" - }, - "updatedAt": { - "type": "string" - }, - "userId": { - "type": "integer" - }, - "website": { - "type": "string" - } - } - }, - "models.ContactInfo": { - "type": "object", - "properties": { - "address": { - "type": "string" - }, - "city": { - "type": "string" - }, - "country": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "postalCode": { - "type": "string" - }, - "state": { - "type": "string" - }, - "user": { - "description": "Belongs to User", - "allOf": [ - { - "$ref": "#/definitions/models.User" - } - ] - }, - "userId": { - "type": "integer" - } - } - }, - "models.KYC": { - "type": "object", - "properties": { - "createdAt": { - "type": "string" - }, - "document": { - "description": "base64 or URL to document", - "type": "string" - }, - "id": { - "type": "integer" - }, - "kycType": { - "description": "e.g., \"passport\", \"nationalID\"", - "type": "string" - }, - "status": { - "description": "\"pending\", \"approved\", \"rejected\"", - "type": "string" - }, - "updatedAt": { - "type": "string" - }, - "userId": { - "description": "remove uniqueIndex, keep index for performance", - "type": "integer" - } - } - }, - "models.OTP": { - "type": "object", - "properties": { - "code": { - "type": "string" - }, - "createdAt": { - "type": "string" - }, - "expiresAt": { - "type": "string" - }, - "forWhat": { - "description": "e.g., \"register\", \"login\", \"setPin\", \"updatePin\"", - "type": "string" - }, - "id": { - "type": "integer" - }, - "userId": { - "type": "integer" - }, - "verified": { - "type": "boolean" - }, - "via": { - "description": "sms, email, whatsapp", - "type": "string" - } - } - }, - "models.Permission": { - "type": "object", - "properties": { - "createdAt": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "name": { - "description": "e.g., \"read_account\", \"edit_user\"", - "type": "string" - }, - "updatedAt": { - "type": "string" - } - } - }, - "models.Person": { - "type": "object", - "properties": { - "address": { - "type": "string" - }, - "city": { - "type": "string" - }, - "country": { - "type": "string" - }, - "dateOfBirth": { - "type": "string" - }, - "firstName": { - "type": "string" - }, - "gender": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "lastName": { - "type": "string" - }, - "middleName": { - "type": "string" - }, - "otherNames": { - "type": "array", - "items": { - "type": "string" - } - }, - "postalCode": { - "type": "string" - }, - "state": { - "type": "string" - }, - "userID": { - "description": "Make sure only one Person per User", - "type": "integer" - } - } - }, - "models.Preference": { - "type": "object", - "properties": { - "createdAt": { - "type": "string" - }, - "deletedAt": { - "description": "Nullable for soft deletes", - "type": "string" - }, - "id": { - "description": "Unique identifier for the preference", - "type": "integer" - }, - "language": { - "description": "e.g., \"en\", \"fr\", etc.", - "type": "string" - }, - "notificationsEnabled": { - "description": "Indicates if notifications are enabled", - "type": "boolean" - }, - "theme": { - "description": "e.g., \"light\", \"dark\"", - "type": "string" - }, - "timezone": { - "description": "e.g., \"UTC\", \"America/New_York\"", - "type": "string" - }, - "updatedAt": { - "type": "string" - }, - "userId": { - "type": "integer" - } - } - }, - "models.Role": { - "type": "object", - "properties": { - "createdAt": { - "type": "string" - }, - "description": { - "description": "Description of the role", - "type": "string" - }, - "id": { - "type": "integer" - }, - "name": { - "description": "e.g., \"admin\", \"user\"", - "type": "string" - }, - "permissions": { - "type": "array", - "items": { - "$ref": "#/definitions/models.Permission" - } - }, - "updatedAt": { - "type": "string" - } - } - }, - "models.Session": { - "type": "object", - "properties": { - "createdAt": { - "type": "string" - }, - "currentSessionID": { - "description": "Token for the current session", - "type": "string" - }, - "expiresAt": { - "description": "Expiration time for the session", - "type": "string" - }, - "id": { - "type": "integer" - }, - "lastKnownIp": { - "description": "Last known IP address of the user", - "type": "string" - }, - "lastUserAgent": { - "description": "User agent string for the session", - "type": "string" - }, - "updatedAt": { - "type": "string" - }, - "user": { - "description": "Belongs to User", - "allOf": [ - { - "$ref": "#/definitions/models.User" - } - ] - }, - "userId": { - "description": "Reference to the user associated with the session", - "type": "integer" - } - } - }, - "models.User": { - "type": "object", - "required": [ - "email", - "username" - ], - "properties": { - "accountType": { - "description": "individual or business", - "type": "string" - }, - "activities": { - "description": "List of activities performed by the user", - "type": "array", - "items": { - "$ref": "#/definitions/models.Activity" - } - }, - "authInfo": { - "description": "Authentication-related information", - "allOf": [ - { - "$ref": "#/definitions/models.AuthInfo" - } - ] - }, - "biometricEnabled": { - "type": "boolean" - }, - "biometricID": { - "description": "Unique identifier for biometrics (e.g., Device ID + Biometric Hash)", - "type": "string" - }, - "business": { - "description": "Business-related information (if accountType is business)", - "allOf": [ - { - "$ref": "#/definitions/models.Business" - } - ] - }, - "contact": { - "description": "Contact information for the user", - "type": "array", - "items": { - "$ref": "#/definitions/models.ContactInfo" - } - }, - "createdAt": { - "type": "string" - }, - "deletedAt": { - "type": "string" - }, - "email": { - "type": "string" - }, - "emailVerified": { - "description": "Indicates if the user's email is verified", - "type": "boolean" - }, - "hashedNIN": { - "description": "Hashed version of the user's NIN for security", - "type": "string" - }, - "id": { - "type": "integer" - }, - "isFirstTime": { - "description": "Indicates if this is the user's first login", - "type": "boolean" - }, - "kycs": { - "description": "List of KYC documents associated with the user", - "type": "array", - "items": { - "$ref": "#/definitions/models.KYC" - } - }, - "otps": { - "description": "List of OTPs associated with the user", - "type": "array", - "items": { - "$ref": "#/definitions/models.OTP" - } - }, - "person": { - "description": "One-to-one link", - "allOf": [ - { - "$ref": "#/definitions/models.Person" - } - ] - }, - "phone": { - "type": "string" - }, - "phoneVerified": { - "description": "Indicates if the user's phone number is verified", - "type": "boolean" - }, - "pin": { - "description": "Hashed version of the user's PIN for security", - "type": "string" - }, - "preferences": { - "description": "User preferences", - "allOf": [ - { - "$ref": "#/definitions/models.Preference" - } - ] - }, - "profile_pic": { - "description": "URL to the user's profile picture", - "type": "string" - }, - "roles": { - "type": "array", - "items": { - "$ref": "#/definitions/models.Role" - } - }, - "sessions": { - "description": "List of active sessions for the user", - "type": "array", - "items": { - "$ref": "#/definitions/models.Session" - } - }, - "status": { - "description": "e.g., \"active\", \"inactive\", etc.", - "type": "string" - }, - "twoFactorEnabled": { - "description": "Indicates if two-factor authentication is enabled", - "type": "boolean" - }, - "twoFactorMethod": { - "description": "Method of two-factor authentication (e.g., \"sms\", \"email\", \"app\")", - "type": "string" - }, - "twoFactorSecret": { - "description": "Secret for two-factor authentication", - "type": "string" - }, - "uid": { - "type": "string" - }, - "updatedAt": { - "type": "string" - }, - "username": { - "type": "string", - "maxLength": 30, - "minLength": 3 - } - } - }, "responses.ApiResponse": { "type": "object", "properties": { diff --git a/services/account/docs/swagger.yaml b/services/account/docs/swagger.yaml index 62da3e3..d028201 100644 --- a/services/account/docs/swagger.yaml +++ b/services/account/docs/swagger.yaml @@ -1,396 +1,5 @@ basePath: /api/v1 definitions: - models.Activity: - properties: - createdAt: - type: string - deletedAt: - description: Nullable for soft deletes - type: string - details: - description: Additional details about the activity - type: string - id: - description: Unique identifier for the activity - type: integer - ipAddress: - description: IP address from which the activity was performed - type: string - type: - description: Type of activity (e.g., "login", "logout", "update_profile") - type: string - updatedAt: - type: string - user: - allOf: - - $ref: '#/definitions/models.User' - description: Belongs to User - userAgent: - description: User agent string for the activity - type: string - userId: - description: Reference to the user associated with the activity - type: integer - type: object - models.AuthInfo: - properties: - createdAt: - type: string - deletedAt: - type: string - id: - type: integer - lastLoginAt: - description: User User `gorm:"constraint:OnUpdate:CASCADE,OnDelete:SET - NULL;"` // Belongs to User - type: string - lockedReason: - type: string - lockedUntil: - description: Timestamp until which the user is locked out - type: string - loginAttempts: - description: Number of login attempts - type: integer - otpCooldownUntil: - description: Timestamp until which the user is cooled down from requesting - OTP - type: string - otpRequestCount: - description: Number of OTP requests - type: integer - updatedAt: - type: string - userID: - description: Unique identifier for the user - type: integer - type: object - models.Business: - properties: - additionalDocs: - items: - type: string - type: array - createdAt: - type: string - facebook: - type: string - id: - type: integer - industry: - type: string - instagram: - type: string - linkedIn: - type: string - name: - type: string - registrationDoc: - description: URL to the document - type: string - registrationNumber: - type: string - twitter: - type: string - type: - description: e.g., "LLC", "Sole Proprietorship" - type: string - updatedAt: - type: string - userId: - type: integer - website: - type: string - type: object - models.ContactInfo: - properties: - address: - type: string - city: - type: string - country: - type: string - id: - type: integer - postalCode: - type: string - state: - type: string - user: - allOf: - - $ref: '#/definitions/models.User' - description: Belongs to User - userId: - type: integer - type: object - models.KYC: - properties: - createdAt: - type: string - document: - description: base64 or URL to document - type: string - id: - type: integer - kycType: - description: e.g., "passport", "nationalID" - type: string - status: - description: '"pending", "approved", "rejected"' - type: string - updatedAt: - type: string - userId: - description: remove uniqueIndex, keep index for performance - type: integer - type: object - models.OTP: - properties: - code: - type: string - createdAt: - type: string - expiresAt: - type: string - forWhat: - description: e.g., "register", "login", "setPin", "updatePin" - type: string - id: - type: integer - userId: - type: integer - verified: - type: boolean - via: - description: sms, email, whatsapp - type: string - type: object - models.Permission: - properties: - createdAt: - type: string - id: - type: integer - name: - description: e.g., "read_account", "edit_user" - type: string - updatedAt: - type: string - type: object - models.Person: - properties: - address: - type: string - city: - type: string - country: - type: string - dateOfBirth: - type: string - firstName: - type: string - gender: - type: string - id: - type: integer - lastName: - type: string - middleName: - type: string - otherNames: - items: - type: string - type: array - postalCode: - type: string - state: - type: string - userID: - description: Make sure only one Person per User - type: integer - type: object - models.Preference: - properties: - createdAt: - type: string - deletedAt: - description: Nullable for soft deletes - type: string - id: - description: Unique identifier for the preference - type: integer - language: - description: e.g., "en", "fr", etc. - type: string - notificationsEnabled: - description: Indicates if notifications are enabled - type: boolean - theme: - description: e.g., "light", "dark" - type: string - timezone: - description: e.g., "UTC", "America/New_York" - type: string - updatedAt: - type: string - userId: - type: integer - type: object - models.Role: - properties: - createdAt: - type: string - description: - description: Description of the role - type: string - id: - type: integer - name: - description: e.g., "admin", "user" - type: string - permissions: - items: - $ref: '#/definitions/models.Permission' - type: array - updatedAt: - type: string - type: object - models.Session: - properties: - createdAt: - type: string - currentSessionID: - description: Token for the current session - type: string - expiresAt: - description: Expiration time for the session - type: string - id: - type: integer - lastKnownIp: - description: Last known IP address of the user - type: string - lastUserAgent: - description: User agent string for the session - type: string - updatedAt: - type: string - user: - allOf: - - $ref: '#/definitions/models.User' - description: Belongs to User - userId: - description: Reference to the user associated with the session - type: integer - type: object - models.User: - properties: - accountType: - description: individual or business - type: string - activities: - description: List of activities performed by the user - items: - $ref: '#/definitions/models.Activity' - type: array - authInfo: - allOf: - - $ref: '#/definitions/models.AuthInfo' - description: Authentication-related information - biometricEnabled: - type: boolean - biometricID: - description: Unique identifier for biometrics (e.g., Device ID + Biometric - Hash) - type: string - business: - allOf: - - $ref: '#/definitions/models.Business' - description: Business-related information (if accountType is business) - contact: - description: Contact information for the user - items: - $ref: '#/definitions/models.ContactInfo' - type: array - createdAt: - type: string - deletedAt: - type: string - email: - type: string - emailVerified: - description: Indicates if the user's email is verified - type: boolean - hashedNIN: - description: Hashed version of the user's NIN for security - type: string - id: - type: integer - isFirstTime: - description: Indicates if this is the user's first login - type: boolean - kycs: - description: List of KYC documents associated with the user - items: - $ref: '#/definitions/models.KYC' - type: array - otps: - description: List of OTPs associated with the user - items: - $ref: '#/definitions/models.OTP' - type: array - person: - allOf: - - $ref: '#/definitions/models.Person' - description: One-to-one link - phone: - type: string - phoneVerified: - description: Indicates if the user's phone number is verified - type: boolean - pin: - description: Hashed version of the user's PIN for security - type: string - preferences: - allOf: - - $ref: '#/definitions/models.Preference' - description: User preferences - profile_pic: - description: URL to the user's profile picture - type: string - roles: - items: - $ref: '#/definitions/models.Role' - type: array - sessions: - description: List of active sessions for the user - items: - $ref: '#/definitions/models.Session' - type: array - status: - description: e.g., "active", "inactive", etc. - type: string - twoFactorEnabled: - description: Indicates if two-factor authentication is enabled - type: boolean - twoFactorMethod: - description: Method of two-factor authentication (e.g., "sms", "email", "app") - type: string - twoFactorSecret: - description: Secret for two-factor authentication - type: string - uid: - type: string - updatedAt: - type: string - username: - maxLength: 30 - minLength: 3 - type: string - required: - - email - - username - type: object responses.ApiResponse: properties: data: {} @@ -1089,13 +698,14 @@ paths: - application/json responses: "200": - description: Current user details + description: Current user details with wallets schema: allOf: - $ref: '#/definitions/responses.ApiResponse' - properties: data: - $ref: '#/definitions/models.User' + additionalProperties: true + type: object type: object "401": description: Unauthorized diff --git a/services/account/go.mod b/services/account/go.mod index 240c4c9..b4df0bc 100644 --- a/services/account/go.mod +++ b/services/account/go.mod @@ -1,13 +1,12 @@ module github.com/PayGidi/AccountService -go 1.25.0 +go 1.26.3 require github.com/gin-gonic/gin v1.10.1 require github.com/PayGidi/NotificationService v0.0.0 require ( - github.com/PayGidi/WalletService v0.0.0 github.com/go-playground/validator/v10 v10.30.1 github.com/golang-jwt/jwt/v5 v5.2.2 github.com/google/uuid v1.6.0 @@ -54,12 +53,14 @@ require ( github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/klauspost/cpuid/v2 v2.3.0 // indirect + github.com/kr/pretty v0.3.1 // indirect github.com/leodido/go-urn v1.4.0 // indirect github.com/mailru/easyjson v0.7.6 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect github.com/pelletier/go-toml/v2 v2.2.4 // indirect + github.com/stretchr/testify v1.11.1 // indirect github.com/twitchyliquid64/golang-asm v0.15.1 // indirect github.com/ugorji/go/codec v1.3.1 // indirect golang.org/x/arch v0.22.0 // indirect diff --git a/services/account/go.sum b/services/account/go.sum index bcdf922..1d28277 100644 --- a/services/account/go.sum +++ b/services/account/go.sum @@ -104,8 +104,10 @@ github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaR github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ= github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4= github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= +github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= 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.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= diff --git a/services/account/main.go b/services/account/main.go index 8d4ee07..2a69283 100644 --- a/services/account/main.go +++ b/services/account/main.go @@ -47,6 +47,7 @@ func main() { // Middleware to inject db into context app.Use(func(c *gin.Context) { + log.Printf("Incoming request: %s %s", c.Request.Method, c.Request.URL.Path) c.Set("db", db) c.Next() }) diff --git a/services/account/middlewares/auth.go b/services/account/middlewares/auth.go index bd99e48..4b37f8e 100644 --- a/services/account/middlewares/auth.go +++ b/services/account/middlewares/auth.go @@ -1,6 +1,7 @@ package middlewares import ( + "log" "net/http" "strings" @@ -14,6 +15,7 @@ import ( // Authenticate is a middleware that checks if the user is authenticated func Authenticate() gin.HandlerFunc { return func(c *gin.Context) { + log.Printf("Authenticate middleware called for path: %s", c.Request.URL.Path) db := c.MustGet("db").(*gorm.DB) if db == nil { c.JSON(http.StatusInternalServerError, gin.H{ diff --git a/services/account/middlewares/default.go b/services/account/middlewares/default.go index adb4c4e..c16cc43 100644 --- a/services/account/middlewares/default.go +++ b/services/account/middlewares/default.go @@ -1,6 +1,7 @@ package middlewares import ( + "log" "net/http" payGidiErrors "github.com/PayGidi/AccountService/core/interfaces/errors" @@ -10,6 +11,7 @@ import ( // VerifyVersion is a middleware that checks if the API version is valid func VerifyVersion(c *gin.Context) { + log.Printf("VerifyVersion middleware called for path: %s", c.Request.URL.Path) // Get the version from the URL version := c.Param("version") diff --git a/services/account/models/user.go b/services/account/models/user.go index 82d09cf..993a573 100644 --- a/services/account/models/user.go +++ b/services/account/models/user.go @@ -18,7 +18,7 @@ type User struct { ProfilePic string `json:"profile_pic,omitempty"` // URL to the user's profile picture TwoFactorEnabled bool `json:"twoFactorEnabled"` // Indicates if two-factor authentication is enabled IsFirstTime bool `json:"isFirstTime"` // Indicates if this is the user's first login - TwoFactorSecret string `json:"twoFactorSecret,omitempty"` // Secret for two-factor authentication + TwoFactorSecret string `json:"-"` // Secret for two-factor authentication TwoFactorMethod string `json:"twoFactorMethod,omitempty"` // Method of two-factor authentication (e.g., "sms", "email", "app") EmailVerified bool `json:"emailVerified"` // Indicates if the user's email is verified PhoneVerified bool `json:"phoneVerified"` // Indicates if the user's phone number is verified @@ -33,7 +33,7 @@ type User struct { BiometricID string `json:"biometricID"` // Unique identifier for biometrics (e.g., Device ID + Biometric Hash) Status string `json:"status"` // e.g., "active", "inactive", etc. OTPs []OTP `json:"otps" gorm:"foreignKey:UserID"` // List of OTPs associated with the user - Pin string `json:"pin"` // Hashed version of the user's PIN for security + Pin string `json:"-"` // Hashed version of the user's PIN for security CreatedAt time.Time `json:"createdAt"` UpdatedAt time.Time `json:"updatedAt"` DeletedAt *time.Time `json:"deletedAt,omitempty"` diff --git a/services/account/proto/connection/auth.proto b/services/account/proto/connection/auth.proto new file mode 100644 index 0000000..fd3406b --- /dev/null +++ b/services/account/proto/connection/auth.proto @@ -0,0 +1,79 @@ +syntax = "proto3"; + +package account_service; +import "google/protobuf/timestamp.proto"; + +option go_package = "github.com/PayGidi/AccountService/proto/connection/pb;pb"; + +service AuthService { + rpc ValidateToken (ValidateTokenRequest) returns (ValidateTokenResponse); + rpc GetUser (GetUserRequest) returns (GetUserResponse); +} + +message ValidateTokenRequest { + string token = 1; +} + +message Preference { + string theme = 1; + string language = 2; +} + +message PersonData { + string firstName = 1; + string lastName = 2; +} + +message UserData { + PersonData personData = 1; + string email = 2; + string phone = 3; + string username = 4; + string profilePic = 5; + bool twoFactorEnabled = 6; + bool isFirstTime = 7; + bool emailVerified = 8; + bool phoneVerified = 9; + string twoFactorMethod = 10; + string status = 11; + Preference preference = 12; + string lastLogin = 13; + string lastPinChange = 14; + repeated Role roles = 15; + string createdAt = 16; + string updatedAt = 17; +} + +message Permission { + int32 id = 1; + string name = 2; + string description = 3; +} + +message Role { + uint32 id = 1; + string name = 2; + string description = 3; + repeated Permission permissions = 4; + google.protobuf.Timestamp createdAt = 5; + google.protobuf.Timestamp updatedAt = 6; +} + +message ValidateTokenResponse { + bool valid = 1; + string userId = 2; + string email = 3; + double exp = 4; // Expiration time in seconds + string error = 5; // Error message if validation fails + UserData userData = 6; // Additional user data if available +} + +message GetUserRequest { + string userId = 1; +} + +message GetUserResponse { + bool success = 1; + UserData userData = 2; + string message = 3; +} \ No newline at end of file diff --git a/services/account/proto/connection/pb/wallet.pb.go b/services/account/proto/connection/pb/wallet.pb.go new file mode 100644 index 0000000..085ab3e --- /dev/null +++ b/services/account/proto/connection/pb/wallet.pb.go @@ -0,0 +1,2142 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.35.1 +// protoc v6.33.3 +// source: wallet.proto + +package pb + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type CreateWalletRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Firstname string `protobuf:"bytes,1,opt,name=firstname,proto3" json:"firstname,omitempty"` + Middlename string `protobuf:"bytes,2,opt,name=middlename,proto3" json:"middlename,omitempty"` + Lastname string `protobuf:"bytes,3,opt,name=lastname,proto3" json:"lastname,omitempty"` + Nin string `protobuf:"bytes,4,opt,name=nin,proto3" json:"nin,omitempty"` + DateOfBirth string `protobuf:"bytes,5,opt,name=dateOfBirth,proto3" json:"dateOfBirth,omitempty"` + Bvn string `protobuf:"bytes,6,opt,name=bvn,proto3" json:"bvn,omitempty"` + Phone string `protobuf:"bytes,7,opt,name=phone,proto3" json:"phone,omitempty"` + Email string `protobuf:"bytes,8,opt,name=email,proto3" json:"email,omitempty"` + Gender string `protobuf:"bytes,9,opt,name=gender,proto3" json:"gender,omitempty"` + UserId string `protobuf:"bytes,10,opt,name=userId,proto3" json:"userId,omitempty"` + AccountType string `protobuf:"bytes,11,opt,name=accountType,proto3" json:"accountType,omitempty"` + BusinessName string `protobuf:"bytes,12,opt,name=businessName,proto3" json:"businessName,omitempty"` + Address string `protobuf:"bytes,13,opt,name=address,proto3" json:"address,omitempty"` +} + +func (x *CreateWalletRequest) Reset() { + *x = CreateWalletRequest{} + mi := &file_wallet_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *CreateWalletRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateWalletRequest) ProtoMessage() {} + +func (x *CreateWalletRequest) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CreateWalletRequest.ProtoReflect.Descriptor instead. +func (*CreateWalletRequest) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{0} +} + +func (x *CreateWalletRequest) GetFirstname() string { + if x != nil { + return x.Firstname + } + return "" +} + +func (x *CreateWalletRequest) GetMiddlename() string { + if x != nil { + return x.Middlename + } + return "" +} + +func (x *CreateWalletRequest) GetLastname() string { + if x != nil { + return x.Lastname + } + return "" +} + +func (x *CreateWalletRequest) GetNin() string { + if x != nil { + return x.Nin + } + return "" +} + +func (x *CreateWalletRequest) GetDateOfBirth() string { + if x != nil { + return x.DateOfBirth + } + return "" +} + +func (x *CreateWalletRequest) GetBvn() string { + if x != nil { + return x.Bvn + } + return "" +} + +func (x *CreateWalletRequest) GetPhone() string { + if x != nil { + return x.Phone + } + return "" +} + +func (x *CreateWalletRequest) GetEmail() string { + if x != nil { + return x.Email + } + return "" +} + +func (x *CreateWalletRequest) GetGender() string { + if x != nil { + return x.Gender + } + return "" +} + +func (x *CreateWalletRequest) GetUserId() string { + if x != nil { + return x.UserId + } + return "" +} + +func (x *CreateWalletRequest) GetAccountType() string { + if x != nil { + return x.AccountType + } + return "" +} + +func (x *CreateWalletRequest) GetBusinessName() string { + if x != nil { + return x.BusinessName + } + return "" +} + +func (x *CreateWalletRequest) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +type CreateWalletResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Success bool `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"` + Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` + Message string `protobuf:"bytes,3,opt,name=message,proto3" json:"message,omitempty"` + Firstname string `protobuf:"bytes,4,opt,name=firstname,proto3" json:"firstname,omitempty"` + Middlename string `protobuf:"bytes,5,opt,name=middlename,proto3" json:"middlename,omitempty"` + Lastname string `protobuf:"bytes,6,opt,name=lastname,proto3" json:"lastname,omitempty"` + AccountNo string `protobuf:"bytes,7,opt,name=accountNo,proto3" json:"accountNo,omitempty"` + CurrentTier string `protobuf:"bytes,8,opt,name=currentTier,proto3" json:"currentTier,omitempty"` + CustomerIdentifier string `protobuf:"bytes,9,opt,name=customerIdentifier,proto3" json:"customerIdentifier,omitempty"` +} + +func (x *CreateWalletResponse) Reset() { + *x = CreateWalletResponse{} + mi := &file_wallet_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *CreateWalletResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateWalletResponse) ProtoMessage() {} + +func (x *CreateWalletResponse) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CreateWalletResponse.ProtoReflect.Descriptor instead. +func (*CreateWalletResponse) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{1} +} + +func (x *CreateWalletResponse) GetSuccess() bool { + if x != nil { + return x.Success + } + return false +} + +func (x *CreateWalletResponse) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *CreateWalletResponse) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +func (x *CreateWalletResponse) GetFirstname() string { + if x != nil { + return x.Firstname + } + return "" +} + +func (x *CreateWalletResponse) GetMiddlename() string { + if x != nil { + return x.Middlename + } + return "" +} + +func (x *CreateWalletResponse) GetLastname() string { + if x != nil { + return x.Lastname + } + return "" +} + +func (x *CreateWalletResponse) GetAccountNo() string { + if x != nil { + return x.AccountNo + } + return "" +} + +func (x *CreateWalletResponse) GetCurrentTier() string { + if x != nil { + return x.CurrentTier + } + return "" +} + +func (x *CreateWalletResponse) GetCustomerIdentifier() string { + if x != nil { + return x.CustomerIdentifier + } + return "" +} + +type InitiatePaymentRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Amount int64 `protobuf:"varint,1,opt,name=amount,proto3" json:"amount,omitempty"` // in kobo + Email string `protobuf:"bytes,2,opt,name=email,proto3" json:"email,omitempty"` + Currency string `protobuf:"bytes,3,opt,name=currency,proto3" json:"currency,omitempty"` +} + +func (x *InitiatePaymentRequest) Reset() { + *x = InitiatePaymentRequest{} + mi := &file_wallet_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *InitiatePaymentRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*InitiatePaymentRequest) ProtoMessage() {} + +func (x *InitiatePaymentRequest) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use InitiatePaymentRequest.ProtoReflect.Descriptor instead. +func (*InitiatePaymentRequest) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{2} +} + +func (x *InitiatePaymentRequest) GetAmount() int64 { + if x != nil { + return x.Amount + } + return 0 +} + +func (x *InitiatePaymentRequest) GetEmail() string { + if x != nil { + return x.Email + } + return "" +} + +func (x *InitiatePaymentRequest) GetCurrency() string { + if x != nil { + return x.Currency + } + return "" +} + +type InitiatePaymentResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Success bool `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"` + Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` + Message string `protobuf:"bytes,3,opt,name=message,proto3" json:"message,omitempty"` + CheckoutUrl string `protobuf:"bytes,4,opt,name=checkoutUrl,proto3" json:"checkoutUrl,omitempty"` +} + +func (x *InitiatePaymentResponse) Reset() { + *x = InitiatePaymentResponse{} + mi := &file_wallet_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *InitiatePaymentResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*InitiatePaymentResponse) ProtoMessage() {} + +func (x *InitiatePaymentResponse) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[3] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use InitiatePaymentResponse.ProtoReflect.Descriptor instead. +func (*InitiatePaymentResponse) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{3} +} + +func (x *InitiatePaymentResponse) GetSuccess() bool { + if x != nil { + return x.Success + } + return false +} + +func (x *InitiatePaymentResponse) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *InitiatePaymentResponse) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +func (x *InitiatePaymentResponse) GetCheckoutUrl() string { + if x != nil { + return x.CheckoutUrl + } + return "" +} + +type InitiateTransferRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TransactionReference string `protobuf:"bytes,1,opt,name=transactionReference,proto3" json:"transactionReference,omitempty"` + Amount int64 `protobuf:"varint,2,opt,name=amount,proto3" json:"amount,omitempty"` // in kobo + BankCode string `protobuf:"bytes,3,opt,name=bankCode,proto3" json:"bankCode,omitempty"` + AccountNumber string `protobuf:"bytes,4,opt,name=accountNumber,proto3" json:"accountNumber,omitempty"` + AccountName string `protobuf:"bytes,5,opt,name=accountName,proto3" json:"accountName,omitempty"` + Remark string `protobuf:"bytes,6,opt,name=remark,proto3" json:"remark,omitempty"` +} + +func (x *InitiateTransferRequest) Reset() { + *x = InitiateTransferRequest{} + mi := &file_wallet_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *InitiateTransferRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*InitiateTransferRequest) ProtoMessage() {} + +func (x *InitiateTransferRequest) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[4] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use InitiateTransferRequest.ProtoReflect.Descriptor instead. +func (*InitiateTransferRequest) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{4} +} + +func (x *InitiateTransferRequest) GetTransactionReference() string { + if x != nil { + return x.TransactionReference + } + return "" +} + +func (x *InitiateTransferRequest) GetAmount() int64 { + if x != nil { + return x.Amount + } + return 0 +} + +func (x *InitiateTransferRequest) GetBankCode() string { + if x != nil { + return x.BankCode + } + return "" +} + +func (x *InitiateTransferRequest) GetAccountNumber() string { + if x != nil { + return x.AccountNumber + } + return "" +} + +func (x *InitiateTransferRequest) GetAccountName() string { + if x != nil { + return x.AccountName + } + return "" +} + +func (x *InitiateTransferRequest) GetRemark() string { + if x != nil { + return x.Remark + } + return "" +} + +type InitiateTransferResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Success bool `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"` + Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` + Message string `protobuf:"bytes,3,opt,name=message,proto3" json:"message,omitempty"` + TransactionReference string `protobuf:"bytes,4,opt,name=transactionReference,proto3" json:"transactionReference,omitempty"` +} + +func (x *InitiateTransferResponse) Reset() { + *x = InitiateTransferResponse{} + mi := &file_wallet_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *InitiateTransferResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*InitiateTransferResponse) ProtoMessage() {} + +func (x *InitiateTransferResponse) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[5] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use InitiateTransferResponse.ProtoReflect.Descriptor instead. +func (*InitiateTransferResponse) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{5} +} + +func (x *InitiateTransferResponse) GetSuccess() bool { + if x != nil { + return x.Success + } + return false +} + +func (x *InitiateTransferResponse) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *InitiateTransferResponse) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +func (x *InitiateTransferResponse) GetTransactionReference() string { + if x != nil { + return x.TransactionReference + } + return "" +} + +type GetTransactionsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + CustomerIdentifier string `protobuf:"bytes,1,opt,name=customerIdentifier,proto3" json:"customerIdentifier,omitempty"` +} + +func (x *GetTransactionsRequest) Reset() { + *x = GetTransactionsRequest{} + mi := &file_wallet_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetTransactionsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetTransactionsRequest) ProtoMessage() {} + +func (x *GetTransactionsRequest) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[6] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetTransactionsRequest.ProtoReflect.Descriptor instead. +func (*GetTransactionsRequest) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{6} +} + +func (x *GetTransactionsRequest) GetCustomerIdentifier() string { + if x != nil { + return x.CustomerIdentifier + } + return "" +} + +type GetTransactionsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Success bool `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"` + Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` + Transactions []*TransactionData `protobuf:"bytes,3,rep,name=transactions,proto3" json:"transactions,omitempty"` +} + +func (x *GetTransactionsResponse) Reset() { + *x = GetTransactionsResponse{} + mi := &file_wallet_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetTransactionsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetTransactionsResponse) ProtoMessage() {} + +func (x *GetTransactionsResponse) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[7] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetTransactionsResponse.ProtoReflect.Descriptor instead. +func (*GetTransactionsResponse) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{7} +} + +func (x *GetTransactionsResponse) GetSuccess() bool { + if x != nil { + return x.Success + } + return false +} + +func (x *GetTransactionsResponse) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +func (x *GetTransactionsResponse) GetTransactions() []*TransactionData { + if x != nil { + return x.Transactions + } + return nil +} + +type ResolveAccountRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + BankCode string `protobuf:"bytes,1,opt,name=bankCode,proto3" json:"bankCode,omitempty"` + AccountNumber string `protobuf:"bytes,2,opt,name=accountNumber,proto3" json:"accountNumber,omitempty"` +} + +func (x *ResolveAccountRequest) Reset() { + *x = ResolveAccountRequest{} + mi := &file_wallet_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ResolveAccountRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ResolveAccountRequest) ProtoMessage() {} + +func (x *ResolveAccountRequest) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[8] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ResolveAccountRequest.ProtoReflect.Descriptor instead. +func (*ResolveAccountRequest) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{8} +} + +func (x *ResolveAccountRequest) GetBankCode() string { + if x != nil { + return x.BankCode + } + return "" +} + +func (x *ResolveAccountRequest) GetAccountNumber() string { + if x != nil { + return x.AccountNumber + } + return "" +} + +type ResolveAccountResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Success bool `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"` + Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` + Message string `protobuf:"bytes,3,opt,name=message,proto3" json:"message,omitempty"` + AccountName string `protobuf:"bytes,4,opt,name=accountName,proto3" json:"accountName,omitempty"` + AccountNumber string `protobuf:"bytes,5,opt,name=accountNumber,proto3" json:"accountNumber,omitempty"` +} + +func (x *ResolveAccountResponse) Reset() { + *x = ResolveAccountResponse{} + mi := &file_wallet_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ResolveAccountResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ResolveAccountResponse) ProtoMessage() {} + +func (x *ResolveAccountResponse) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[9] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ResolveAccountResponse.ProtoReflect.Descriptor instead. +func (*ResolveAccountResponse) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{9} +} + +func (x *ResolveAccountResponse) GetSuccess() bool { + if x != nil { + return x.Success + } + return false +} + +func (x *ResolveAccountResponse) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *ResolveAccountResponse) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +func (x *ResolveAccountResponse) GetAccountName() string { + if x != nil { + return x.AccountName + } + return "" +} + +func (x *ResolveAccountResponse) GetAccountNumber() string { + if x != nil { + return x.AccountNumber + } + return "" +} + +type TransactionData struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Amount int64 `protobuf:"varint,1,opt,name=amount,proto3" json:"amount,omitempty"` + TransactionRef string `protobuf:"bytes,2,opt,name=transactionRef,proto3" json:"transactionRef,omitempty"` + GatewayRef string `protobuf:"bytes,3,opt,name=gatewayRef,proto3" json:"gatewayRef,omitempty"` + TransactionType string `protobuf:"bytes,4,opt,name=transactionType,proto3" json:"transactionType,omitempty"` + CreatedAt string `protobuf:"bytes,5,opt,name=createdAt,proto3" json:"createdAt,omitempty"` + Status string `protobuf:"bytes,6,opt,name=status,proto3" json:"status,omitempty"` +} + +func (x *TransactionData) Reset() { + *x = TransactionData{} + mi := &file_wallet_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *TransactionData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TransactionData) ProtoMessage() {} + +func (x *TransactionData) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[10] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TransactionData.ProtoReflect.Descriptor instead. +func (*TransactionData) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{10} +} + +func (x *TransactionData) GetAmount() int64 { + if x != nil { + return x.Amount + } + return 0 +} + +func (x *TransactionData) GetTransactionRef() string { + if x != nil { + return x.TransactionRef + } + return "" +} + +func (x *TransactionData) GetGatewayRef() string { + if x != nil { + return x.GatewayRef + } + return "" +} + +func (x *TransactionData) GetTransactionType() string { + if x != nil { + return x.TransactionType + } + return "" +} + +func (x *TransactionData) GetCreatedAt() string { + if x != nil { + return x.CreatedAt + } + return "" +} + +func (x *TransactionData) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +type VerifyNINRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Nin string `protobuf:"bytes,1,opt,name=nin,proto3" json:"nin,omitempty"` +} + +func (x *VerifyNINRequest) Reset() { + *x = VerifyNINRequest{} + mi := &file_wallet_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VerifyNINRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VerifyNINRequest) ProtoMessage() {} + +func (x *VerifyNINRequest) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[11] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VerifyNINRequest.ProtoReflect.Descriptor instead. +func (*VerifyNINRequest) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{11} +} + +func (x *VerifyNINRequest) GetNin() string { + if x != nil { + return x.Nin + } + return "" +} + +type VerifyNINResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Success bool `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"` + Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` + Message string `protobuf:"bytes,3,opt,name=message,proto3" json:"message,omitempty"` + IsValid bool `protobuf:"varint,4,opt,name=isValid,proto3" json:"isValid,omitempty"` +} + +func (x *VerifyNINResponse) Reset() { + *x = VerifyNINResponse{} + mi := &file_wallet_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VerifyNINResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VerifyNINResponse) ProtoMessage() {} + +func (x *VerifyNINResponse) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[12] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VerifyNINResponse.ProtoReflect.Descriptor instead. +func (*VerifyNINResponse) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{12} +} + +func (x *VerifyNINResponse) GetSuccess() bool { + if x != nil { + return x.Success + } + return false +} + +func (x *VerifyNINResponse) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *VerifyNINResponse) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +func (x *VerifyNINResponse) GetIsValid() bool { + if x != nil { + return x.IsValid + } + return false +} + +type VerifyBVNImageRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Base64Image string `protobuf:"bytes,1,opt,name=base64Image,proto3" json:"base64Image,omitempty"` + Bvn string `protobuf:"bytes,2,opt,name=bvn,proto3" json:"bvn,omitempty"` +} + +func (x *VerifyBVNImageRequest) Reset() { + *x = VerifyBVNImageRequest{} + mi := &file_wallet_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VerifyBVNImageRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VerifyBVNImageRequest) ProtoMessage() {} + +func (x *VerifyBVNImageRequest) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[13] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VerifyBVNImageRequest.ProtoReflect.Descriptor instead. +func (*VerifyBVNImageRequest) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{13} +} + +func (x *VerifyBVNImageRequest) GetBase64Image() string { + if x != nil { + return x.Base64Image + } + return "" +} + +func (x *VerifyBVNImageRequest) GetBvn() string { + if x != nil { + return x.Bvn + } + return "" +} + +type VerifyBVNImageResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Success bool `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"` + Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` + Message string `protobuf:"bytes,3,opt,name=message,proto3" json:"message,omitempty"` + ImageMatched bool `protobuf:"varint,4,opt,name=imageMatched,proto3" json:"imageMatched,omitempty"` +} + +func (x *VerifyBVNImageResponse) Reset() { + *x = VerifyBVNImageResponse{} + mi := &file_wallet_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VerifyBVNImageResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VerifyBVNImageResponse) ProtoMessage() {} + +func (x *VerifyBVNImageResponse) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[14] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VerifyBVNImageResponse.ProtoReflect.Descriptor instead. +func (*VerifyBVNImageResponse) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{14} +} + +func (x *VerifyBVNImageResponse) GetSuccess() bool { + if x != nil { + return x.Success + } + return false +} + +func (x *VerifyBVNImageResponse) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *VerifyBVNImageResponse) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +func (x *VerifyBVNImageResponse) GetImageMatched() bool { + if x != nil { + return x.ImageMatched + } + return false +} + +type HealthCheckRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *HealthCheckRequest) Reset() { + *x = HealthCheckRequest{} + mi := &file_wallet_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *HealthCheckRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*HealthCheckRequest) ProtoMessage() {} + +func (x *HealthCheckRequest) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[15] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use HealthCheckRequest.ProtoReflect.Descriptor instead. +func (*HealthCheckRequest) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{15} +} + +type HealthCheckResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Status string `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"` +} + +func (x *HealthCheckResponse) Reset() { + *x = HealthCheckResponse{} + mi := &file_wallet_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *HealthCheckResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*HealthCheckResponse) ProtoMessage() {} + +func (x *HealthCheckResponse) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[16] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use HealthCheckResponse.ProtoReflect.Descriptor instead. +func (*HealthCheckResponse) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{16} +} + +func (x *HealthCheckResponse) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +type GetPaymentRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + PaymentId uint64 `protobuf:"varint,1,opt,name=paymentId,proto3" json:"paymentId,omitempty"` +} + +func (x *GetPaymentRequest) Reset() { + *x = GetPaymentRequest{} + mi := &file_wallet_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetPaymentRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetPaymentRequest) ProtoMessage() {} + +func (x *GetPaymentRequest) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[17] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetPaymentRequest.ProtoReflect.Descriptor instead. +func (*GetPaymentRequest) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{17} +} + +func (x *GetPaymentRequest) GetPaymentId() uint64 { + if x != nil { + return x.PaymentId + } + return 0 +} + +type GetPaymentResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Success bool `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"` + Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` + Data *PaymentData `protobuf:"bytes,3,opt,name=data,proto3" json:"data,omitempty"` +} + +func (x *GetPaymentResponse) Reset() { + *x = GetPaymentResponse{} + mi := &file_wallet_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetPaymentResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetPaymentResponse) ProtoMessage() {} + +func (x *GetPaymentResponse) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[18] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetPaymentResponse.ProtoReflect.Descriptor instead. +func (*GetPaymentResponse) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{18} +} + +func (x *GetPaymentResponse) GetSuccess() bool { + if x != nil { + return x.Success + } + return false +} + +func (x *GetPaymentResponse) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +func (x *GetPaymentResponse) GetData() *PaymentData { + if x != nil { + return x.Data + } + return nil +} + +type PaymentData struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + UserId string `protobuf:"bytes,2,opt,name=userId,proto3" json:"userId,omitempty"` + Amount float64 `protobuf:"fixed64,3,opt,name=amount,proto3" json:"amount,omitempty"` + AccountNumber string `protobuf:"bytes,4,opt,name=accountNumber,proto3" json:"accountNumber,omitempty"` + Bank string `protobuf:"bytes,5,opt,name=bank,proto3" json:"bank,omitempty"` + MerchantPhoneNumber string `protobuf:"bytes,6,opt,name=merchantPhoneNumber,proto3" json:"merchantPhoneNumber,omitempty"` + MerchantEmail string `protobuf:"bytes,7,opt,name=merchantEmail,proto3" json:"merchantEmail,omitempty"` + AdvanceOptions string `protobuf:"bytes,8,opt,name=advanceOptions,proto3" json:"advanceOptions,omitempty"` + Status string `protobuf:"bytes,9,opt,name=status,proto3" json:"status,omitempty"` + TrustScore float64 `protobuf:"fixed64,10,opt,name=trustScore,proto3" json:"trustScore,omitempty"` + ExpiresAt string `protobuf:"bytes,11,opt,name=expiresAt,proto3" json:"expiresAt,omitempty"` + CreatedAt string `protobuf:"bytes,12,opt,name=createdAt,proto3" json:"createdAt,omitempty"` +} + +func (x *PaymentData) Reset() { + *x = PaymentData{} + mi := &file_wallet_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PaymentData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PaymentData) ProtoMessage() {} + +func (x *PaymentData) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[19] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PaymentData.ProtoReflect.Descriptor instead. +func (*PaymentData) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{19} +} + +func (x *PaymentData) GetId() uint64 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *PaymentData) GetUserId() string { + if x != nil { + return x.UserId + } + return "" +} + +func (x *PaymentData) GetAmount() float64 { + if x != nil { + return x.Amount + } + return 0 +} + +func (x *PaymentData) GetAccountNumber() string { + if x != nil { + return x.AccountNumber + } + return "" +} + +func (x *PaymentData) GetBank() string { + if x != nil { + return x.Bank + } + return "" +} + +func (x *PaymentData) GetMerchantPhoneNumber() string { + if x != nil { + return x.MerchantPhoneNumber + } + return "" +} + +func (x *PaymentData) GetMerchantEmail() string { + if x != nil { + return x.MerchantEmail + } + return "" +} + +func (x *PaymentData) GetAdvanceOptions() string { + if x != nil { + return x.AdvanceOptions + } + return "" +} + +func (x *PaymentData) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +func (x *PaymentData) GetTrustScore() float64 { + if x != nil { + return x.TrustScore + } + return 0 +} + +func (x *PaymentData) GetExpiresAt() string { + if x != nil { + return x.ExpiresAt + } + return "" +} + +func (x *PaymentData) GetCreatedAt() string { + if x != nil { + return x.CreatedAt + } + return "" +} + +type UpdatePaymentStatusRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + PaymentId uint64 `protobuf:"varint,1,opt,name=paymentId,proto3" json:"paymentId,omitempty"` + Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` + TrustScore float64 `protobuf:"fixed64,3,opt,name=trustScore,proto3" json:"trustScore,omitempty"` + Summary string `protobuf:"bytes,4,opt,name=summary,proto3" json:"summary,omitempty"` +} + +func (x *UpdatePaymentStatusRequest) Reset() { + *x = UpdatePaymentStatusRequest{} + mi := &file_wallet_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *UpdatePaymentStatusRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdatePaymentStatusRequest) ProtoMessage() {} + +func (x *UpdatePaymentStatusRequest) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[20] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UpdatePaymentStatusRequest.ProtoReflect.Descriptor instead. +func (*UpdatePaymentStatusRequest) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{20} +} + +func (x *UpdatePaymentStatusRequest) GetPaymentId() uint64 { + if x != nil { + return x.PaymentId + } + return 0 +} + +func (x *UpdatePaymentStatusRequest) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +func (x *UpdatePaymentStatusRequest) GetTrustScore() float64 { + if x != nil { + return x.TrustScore + } + return 0 +} + +func (x *UpdatePaymentStatusRequest) GetSummary() string { + if x != nil { + return x.Summary + } + return "" +} + +type UpdatePaymentStatusResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Success bool `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"` + Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` +} + +func (x *UpdatePaymentStatusResponse) Reset() { + *x = UpdatePaymentStatusResponse{} + mi := &file_wallet_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *UpdatePaymentStatusResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdatePaymentStatusResponse) ProtoMessage() {} + +func (x *UpdatePaymentStatusResponse) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[21] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UpdatePaymentStatusResponse.ProtoReflect.Descriptor instead. +func (*UpdatePaymentStatusResponse) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{21} +} + +func (x *UpdatePaymentStatusResponse) GetSuccess() bool { + if x != nil { + return x.Success + } + return false +} + +func (x *UpdatePaymentStatusResponse) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +type GetWalletsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + UserId string `protobuf:"bytes,1,opt,name=userId,proto3" json:"userId,omitempty"` +} + +func (x *GetWalletsRequest) Reset() { + *x = GetWalletsRequest{} + mi := &file_wallet_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetWalletsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetWalletsRequest) ProtoMessage() {} + +func (x *GetWalletsRequest) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[22] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetWalletsRequest.ProtoReflect.Descriptor instead. +func (*GetWalletsRequest) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{22} +} + +func (x *GetWalletsRequest) GetUserId() string { + if x != nil { + return x.UserId + } + return "" +} + +type GetWalletsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Success bool `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"` + Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` + Wallets []*WalletData `protobuf:"bytes,3,rep,name=wallets,proto3" json:"wallets,omitempty"` +} + +func (x *GetWalletsResponse) Reset() { + *x = GetWalletsResponse{} + mi := &file_wallet_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetWalletsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetWalletsResponse) ProtoMessage() {} + +func (x *GetWalletsResponse) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[23] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetWalletsResponse.ProtoReflect.Descriptor instead. +func (*GetWalletsResponse) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{23} +} + +func (x *GetWalletsResponse) GetSuccess() bool { + if x != nil { + return x.Success + } + return false +} + +func (x *GetWalletsResponse) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +func (x *GetWalletsResponse) GetWallets() []*WalletData { + if x != nil { + return x.Wallets + } + return nil +} + +type WalletData struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + AccountNumber string `protobuf:"bytes,2,opt,name=accountNumber,proto3" json:"accountNumber,omitempty"` + AccountType string `protobuf:"bytes,3,opt,name=accountType,proto3" json:"accountType,omitempty"` + AccountCategory string `protobuf:"bytes,4,opt,name=accountCategory,proto3" json:"accountCategory,omitempty"` + CurrencyCode string `protobuf:"bytes,5,opt,name=currencyCode,proto3" json:"currencyCode,omitempty"` + Status string `protobuf:"bytes,6,opt,name=status,proto3" json:"status,omitempty"` + AccountNickname string `protobuf:"bytes,7,opt,name=accountNickname,proto3" json:"accountNickname,omitempty"` +} + +func (x *WalletData) Reset() { + *x = WalletData{} + mi := &file_wallet_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *WalletData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WalletData) ProtoMessage() {} + +func (x *WalletData) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[24] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use WalletData.ProtoReflect.Descriptor instead. +func (*WalletData) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{24} +} + +func (x *WalletData) GetId() uint64 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *WalletData) GetAccountNumber() string { + if x != nil { + return x.AccountNumber + } + return "" +} + +func (x *WalletData) GetAccountType() string { + if x != nil { + return x.AccountType + } + return "" +} + +func (x *WalletData) GetAccountCategory() string { + if x != nil { + return x.AccountCategory + } + return "" +} + +func (x *WalletData) GetCurrencyCode() string { + if x != nil { + return x.CurrencyCode + } + return "" +} + +func (x *WalletData) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +func (x *WalletData) GetAccountNickname() string { + if x != nil { + return x.AccountNickname + } + return "" +} + +var File_wallet_proto protoreflect.FileDescriptor + +var file_wallet_proto_rawDesc = []byte{ + 0x0a, 0x0c, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x06, + 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x22, 0xf1, 0x02, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, + 0x0a, 0x09, 0x66, 0x69, 0x72, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x66, 0x69, 0x72, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, + 0x6d, 0x69, 0x64, 0x64, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0a, 0x6d, 0x69, 0x64, 0x64, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, + 0x6c, 0x61, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x6c, 0x61, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6e, 0x69, 0x6e, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6e, 0x69, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x61, + 0x74, 0x65, 0x4f, 0x66, 0x42, 0x69, 0x72, 0x74, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x66, 0x42, 0x69, 0x72, 0x74, 0x68, 0x12, 0x10, 0x0a, 0x03, + 0x62, 0x76, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x62, 0x76, 0x6e, 0x12, 0x14, + 0x0a, 0x05, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, + 0x68, 0x6f, 0x6e, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x67, 0x65, + 0x6e, 0x64, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x67, 0x65, 0x6e, 0x64, + 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x0a, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x22, 0x0a, 0x0c, + 0x62, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x0c, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0c, 0x62, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x4e, 0x61, 0x6d, 0x65, + 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0xa8, 0x02, 0x0a, 0x14, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x12, 0x0a, + 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, + 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x66, + 0x69, 0x72, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x66, 0x69, 0x72, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x6d, 0x69, 0x64, + 0x64, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, + 0x69, 0x64, 0x64, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x73, + 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x61, 0x73, + 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x4e, 0x6f, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x4e, 0x6f, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x54, 0x69, + 0x65, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x74, 0x54, 0x69, 0x65, 0x72, 0x12, 0x2e, 0x0a, 0x12, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, + 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x12, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x66, 0x69, 0x65, 0x72, 0x22, 0x62, 0x0a, 0x16, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, + 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x1a, 0x0a, + 0x08, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x83, 0x01, 0x0a, 0x17, 0x49, 0x6e, + 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, + 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, + 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x20, 0x0a, + 0x0b, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x55, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x55, 0x72, 0x6c, 0x22, + 0xe1, 0x01, 0x0a, 0x17, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x66, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x14, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, + 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, + 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x62, 0x61, 0x6e, 0x6b, 0x43, + 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x62, 0x61, 0x6e, 0x6b, 0x43, + 0x6f, 0x64, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, + 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x6d, + 0x61, 0x72, 0x6b, 0x22, 0x96, 0x01, 0x0a, 0x18, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, + 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x18, + 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x32, 0x0a, 0x14, 0x74, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x22, 0x48, 0x0a, 0x16, + 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x12, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, + 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x12, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x22, 0x8a, 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3b, 0x0a, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x77, + 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x22, 0x59, 0x0a, 0x15, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x41, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, + 0x62, 0x61, 0x6e, 0x6b, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x62, 0x61, 0x6e, 0x6b, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0d, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, 0xa8, + 0x01, 0x0a, 0x16, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, 0xd1, 0x01, 0x0a, 0x0f, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, + 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x61, + 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x12, 0x1e, 0x0a, + 0x0a, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x52, 0x65, 0x66, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0a, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x52, 0x65, 0x66, 0x12, 0x28, 0x0a, + 0x0f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x41, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x24, 0x0a, + 0x10, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x4e, 0x49, 0x4e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6e, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6e, 0x69, 0x6e, 0x22, 0x75, 0x0a, 0x11, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x4e, 0x49, 0x4e, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x12, 0x18, 0x0a, 0x07, 0x69, 0x73, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x07, 0x69, 0x73, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x22, 0x4b, 0x0a, 0x15, 0x56, 0x65, + 0x72, 0x69, 0x66, 0x79, 0x42, 0x56, 0x4e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x49, 0x6d, 0x61, + 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, + 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x62, 0x76, 0x6e, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x62, 0x76, 0x6e, 0x22, 0x84, 0x01, 0x0a, 0x16, 0x56, 0x65, 0x72, 0x69, + 0x66, 0x79, 0x42, 0x56, 0x4e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, + 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, + 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x69, 0x6d, + 0x61, 0x67, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0c, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x64, 0x22, 0x14, + 0x0a, 0x12, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x22, 0x2d, 0x0a, 0x13, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, + 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x22, 0x31, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x61, 0x79, 0x6d, + 0x65, 0x6e, 0x74, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x70, 0x61, 0x79, + 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x71, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, + 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, + 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, + 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x12, 0x27, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, + 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x44, + 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xfb, 0x02, 0x0a, 0x0b, 0x50, 0x61, + 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, + 0x72, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, + 0x64, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x01, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0d, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, + 0x12, 0x0a, 0x04, 0x62, 0x61, 0x6e, 0x6b, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x62, + 0x61, 0x6e, 0x6b, 0x12, 0x30, 0x0a, 0x13, 0x6d, 0x65, 0x72, 0x63, 0x68, 0x61, 0x6e, 0x74, 0x50, + 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x13, 0x6d, 0x65, 0x72, 0x63, 0x68, 0x61, 0x6e, 0x74, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x4e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x24, 0x0a, 0x0d, 0x6d, 0x65, 0x72, 0x63, 0x68, 0x61, 0x6e, + 0x74, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6d, 0x65, + 0x72, 0x63, 0x68, 0x61, 0x6e, 0x74, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x26, 0x0a, 0x0e, 0x61, + 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0e, 0x61, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x4f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x74, + 0x72, 0x75, 0x73, 0x74, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x01, 0x52, + 0x0a, 0x74, 0x72, 0x75, 0x73, 0x74, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x65, + 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x41, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x41, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x22, 0x8c, 0x01, 0x0a, 0x1a, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, + 0x74, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x70, 0x61, 0x79, 0x6d, 0x65, + 0x6e, 0x74, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1e, 0x0a, 0x0a, + 0x74, 0x72, 0x75, 0x73, 0x74, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, + 0x52, 0x0a, 0x74, 0x72, 0x75, 0x73, 0x74, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x18, 0x0a, 0x07, + 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, + 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x22, 0x51, 0x0a, 0x1b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, + 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x2b, 0x0a, 0x11, 0x47, 0x65, 0x74, + 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, + 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x76, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x57, 0x61, 0x6c, + 0x6c, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, + 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, + 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x12, 0x2c, 0x0a, 0x07, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x12, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, + 0x74, 0x44, 0x61, 0x74, 0x61, 0x52, 0x07, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x73, 0x22, 0xf4, + 0x01, 0x0a, 0x0a, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x24, 0x0a, + 0x0d, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x79, + 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, + 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, + 0x22, 0x0a, 0x0c, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x43, + 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x28, 0x0a, 0x0f, 0x61, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x69, 0x63, + 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x32, 0xef, 0x06, 0x0a, 0x0d, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x49, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x12, 0x1b, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, + 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0f, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x50, 0x61, + 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1e, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x49, + 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x49, + 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x10, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, + 0x74, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x12, 0x1f, 0x2e, 0x77, 0x61, 0x6c, + 0x6c, 0x65, 0x74, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x66, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x77, 0x61, + 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x66, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, + 0x0f, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0x1e, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x1f, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x4f, 0x0a, 0x0e, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x41, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x12, 0x1d, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x52, 0x65, 0x73, + 0x6f, 0x6c, 0x76, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x52, 0x65, 0x73, 0x6f, + 0x6c, 0x76, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x40, 0x0a, 0x09, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x4e, 0x49, 0x4e, 0x12, + 0x18, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x4e, + 0x49, 0x4e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x77, 0x61, 0x6c, 0x6c, + 0x65, 0x74, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x4e, 0x49, 0x4e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, 0x0e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x42, 0x56, + 0x4e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x1d, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, + 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x42, 0x56, 0x4e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x56, + 0x65, 0x72, 0x69, 0x66, 0x79, 0x42, 0x56, 0x4e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, + 0x65, 0x6e, 0x74, 0x12, 0x19, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x47, 0x65, 0x74, + 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, + 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, + 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5e, 0x0a, 0x13, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x12, 0x22, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x0b, 0x48, 0x65, + 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x1a, 0x2e, 0x77, 0x61, 0x6c, 0x6c, + 0x65, 0x74, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x48, + 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x43, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x73, + 0x12, 0x19, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x61, 0x6c, + 0x6c, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x77, 0x61, + 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x39, 0x5a, 0x37, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x50, 0x61, 0x79, 0x47, 0x69, 0x64, 0x69, 0x2f, 0x57, 0x61, + 0x6c, 0x6c, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x70, 0x62, 0x3b, + 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_wallet_proto_rawDescOnce sync.Once + file_wallet_proto_rawDescData = file_wallet_proto_rawDesc +) + +func file_wallet_proto_rawDescGZIP() []byte { + file_wallet_proto_rawDescOnce.Do(func() { + file_wallet_proto_rawDescData = protoimpl.X.CompressGZIP(file_wallet_proto_rawDescData) + }) + return file_wallet_proto_rawDescData +} + +var file_wallet_proto_msgTypes = make([]protoimpl.MessageInfo, 25) +var file_wallet_proto_goTypes = []any{ + (*CreateWalletRequest)(nil), // 0: wallet.CreateWalletRequest + (*CreateWalletResponse)(nil), // 1: wallet.CreateWalletResponse + (*InitiatePaymentRequest)(nil), // 2: wallet.InitiatePaymentRequest + (*InitiatePaymentResponse)(nil), // 3: wallet.InitiatePaymentResponse + (*InitiateTransferRequest)(nil), // 4: wallet.InitiateTransferRequest + (*InitiateTransferResponse)(nil), // 5: wallet.InitiateTransferResponse + (*GetTransactionsRequest)(nil), // 6: wallet.GetTransactionsRequest + (*GetTransactionsResponse)(nil), // 7: wallet.GetTransactionsResponse + (*ResolveAccountRequest)(nil), // 8: wallet.ResolveAccountRequest + (*ResolveAccountResponse)(nil), // 9: wallet.ResolveAccountResponse + (*TransactionData)(nil), // 10: wallet.TransactionData + (*VerifyNINRequest)(nil), // 11: wallet.VerifyNINRequest + (*VerifyNINResponse)(nil), // 12: wallet.VerifyNINResponse + (*VerifyBVNImageRequest)(nil), // 13: wallet.VerifyBVNImageRequest + (*VerifyBVNImageResponse)(nil), // 14: wallet.VerifyBVNImageResponse + (*HealthCheckRequest)(nil), // 15: wallet.HealthCheckRequest + (*HealthCheckResponse)(nil), // 16: wallet.HealthCheckResponse + (*GetPaymentRequest)(nil), // 17: wallet.GetPaymentRequest + (*GetPaymentResponse)(nil), // 18: wallet.GetPaymentResponse + (*PaymentData)(nil), // 19: wallet.PaymentData + (*UpdatePaymentStatusRequest)(nil), // 20: wallet.UpdatePaymentStatusRequest + (*UpdatePaymentStatusResponse)(nil), // 21: wallet.UpdatePaymentStatusResponse + (*GetWalletsRequest)(nil), // 22: wallet.GetWalletsRequest + (*GetWalletsResponse)(nil), // 23: wallet.GetWalletsResponse + (*WalletData)(nil), // 24: wallet.WalletData +} +var file_wallet_proto_depIdxs = []int32{ + 10, // 0: wallet.GetTransactionsResponse.transactions:type_name -> wallet.TransactionData + 19, // 1: wallet.GetPaymentResponse.data:type_name -> wallet.PaymentData + 24, // 2: wallet.GetWalletsResponse.wallets:type_name -> wallet.WalletData + 0, // 3: wallet.WalletService.CreateWallet:input_type -> wallet.CreateWalletRequest + 2, // 4: wallet.WalletService.InitiatePayment:input_type -> wallet.InitiatePaymentRequest + 4, // 5: wallet.WalletService.InitiateTransfer:input_type -> wallet.InitiateTransferRequest + 6, // 6: wallet.WalletService.GetTransactions:input_type -> wallet.GetTransactionsRequest + 8, // 7: wallet.WalletService.ResolveAccount:input_type -> wallet.ResolveAccountRequest + 11, // 8: wallet.WalletService.VerifyNIN:input_type -> wallet.VerifyNINRequest + 13, // 9: wallet.WalletService.VerifyBVNImage:input_type -> wallet.VerifyBVNImageRequest + 17, // 10: wallet.WalletService.GetPayment:input_type -> wallet.GetPaymentRequest + 20, // 11: wallet.WalletService.UpdatePaymentStatus:input_type -> wallet.UpdatePaymentStatusRequest + 15, // 12: wallet.WalletService.HealthCheck:input_type -> wallet.HealthCheckRequest + 22, // 13: wallet.WalletService.GetWallets:input_type -> wallet.GetWalletsRequest + 1, // 14: wallet.WalletService.CreateWallet:output_type -> wallet.CreateWalletResponse + 3, // 15: wallet.WalletService.InitiatePayment:output_type -> wallet.InitiatePaymentResponse + 5, // 16: wallet.WalletService.InitiateTransfer:output_type -> wallet.InitiateTransferResponse + 7, // 17: wallet.WalletService.GetTransactions:output_type -> wallet.GetTransactionsResponse + 9, // 18: wallet.WalletService.ResolveAccount:output_type -> wallet.ResolveAccountResponse + 12, // 19: wallet.WalletService.VerifyNIN:output_type -> wallet.VerifyNINResponse + 14, // 20: wallet.WalletService.VerifyBVNImage:output_type -> wallet.VerifyBVNImageResponse + 18, // 21: wallet.WalletService.GetPayment:output_type -> wallet.GetPaymentResponse + 21, // 22: wallet.WalletService.UpdatePaymentStatus:output_type -> wallet.UpdatePaymentStatusResponse + 16, // 23: wallet.WalletService.HealthCheck:output_type -> wallet.HealthCheckResponse + 23, // 24: wallet.WalletService.GetWallets:output_type -> wallet.GetWalletsResponse + 14, // [14:25] is the sub-list for method output_type + 3, // [3:14] is the sub-list for method input_type + 3, // [3:3] is the sub-list for extension type_name + 3, // [3:3] is the sub-list for extension extendee + 0, // [0:3] is the sub-list for field type_name +} + +func init() { file_wallet_proto_init() } +func file_wallet_proto_init() { + if File_wallet_proto != nil { + return + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_wallet_proto_rawDesc, + NumEnums: 0, + NumMessages: 25, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_wallet_proto_goTypes, + DependencyIndexes: file_wallet_proto_depIdxs, + MessageInfos: file_wallet_proto_msgTypes, + }.Build() + File_wallet_proto = out.File + file_wallet_proto_rawDesc = nil + file_wallet_proto_goTypes = nil + file_wallet_proto_depIdxs = nil +} diff --git a/services/account/proto/connection/pb/wallet_grpc.pb.go b/services/account/proto/connection/pb/wallet_grpc.pb.go new file mode 100644 index 0000000..d622ac2 --- /dev/null +++ b/services/account/proto/connection/pb/wallet_grpc.pb.go @@ -0,0 +1,501 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.5.1 +// - protoc v6.33.3 +// source: wallet.proto + +package pb + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 + +const ( + WalletService_CreateWallet_FullMethodName = "/wallet.WalletService/CreateWallet" + WalletService_InitiatePayment_FullMethodName = "/wallet.WalletService/InitiatePayment" + WalletService_InitiateTransfer_FullMethodName = "/wallet.WalletService/InitiateTransfer" + WalletService_GetTransactions_FullMethodName = "/wallet.WalletService/GetTransactions" + WalletService_ResolveAccount_FullMethodName = "/wallet.WalletService/ResolveAccount" + WalletService_VerifyNIN_FullMethodName = "/wallet.WalletService/VerifyNIN" + WalletService_VerifyBVNImage_FullMethodName = "/wallet.WalletService/VerifyBVNImage" + WalletService_GetPayment_FullMethodName = "/wallet.WalletService/GetPayment" + WalletService_UpdatePaymentStatus_FullMethodName = "/wallet.WalletService/UpdatePaymentStatus" + WalletService_HealthCheck_FullMethodName = "/wallet.WalletService/HealthCheck" + WalletService_GetWallets_FullMethodName = "/wallet.WalletService/GetWallets" +) + +// WalletServiceClient is the client API for WalletService service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type WalletServiceClient interface { + CreateWallet(ctx context.Context, in *CreateWalletRequest, opts ...grpc.CallOption) (*CreateWalletResponse, error) + InitiatePayment(ctx context.Context, in *InitiatePaymentRequest, opts ...grpc.CallOption) (*InitiatePaymentResponse, error) + InitiateTransfer(ctx context.Context, in *InitiateTransferRequest, opts ...grpc.CallOption) (*InitiateTransferResponse, error) + GetTransactions(ctx context.Context, in *GetTransactionsRequest, opts ...grpc.CallOption) (*GetTransactionsResponse, error) + ResolveAccount(ctx context.Context, in *ResolveAccountRequest, opts ...grpc.CallOption) (*ResolveAccountResponse, error) + VerifyNIN(ctx context.Context, in *VerifyNINRequest, opts ...grpc.CallOption) (*VerifyNINResponse, error) + VerifyBVNImage(ctx context.Context, in *VerifyBVNImageRequest, opts ...grpc.CallOption) (*VerifyBVNImageResponse, error) + GetPayment(ctx context.Context, in *GetPaymentRequest, opts ...grpc.CallOption) (*GetPaymentResponse, error) + UpdatePaymentStatus(ctx context.Context, in *UpdatePaymentStatusRequest, opts ...grpc.CallOption) (*UpdatePaymentStatusResponse, error) + HealthCheck(ctx context.Context, in *HealthCheckRequest, opts ...grpc.CallOption) (*HealthCheckResponse, error) + GetWallets(ctx context.Context, in *GetWalletsRequest, opts ...grpc.CallOption) (*GetWalletsResponse, error) +} + +type walletServiceClient struct { + cc grpc.ClientConnInterface +} + +func NewWalletServiceClient(cc grpc.ClientConnInterface) WalletServiceClient { + return &walletServiceClient{cc} +} + +func (c *walletServiceClient) CreateWallet(ctx context.Context, in *CreateWalletRequest, opts ...grpc.CallOption) (*CreateWalletResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(CreateWalletResponse) + err := c.cc.Invoke(ctx, WalletService_CreateWallet_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *walletServiceClient) InitiatePayment(ctx context.Context, in *InitiatePaymentRequest, opts ...grpc.CallOption) (*InitiatePaymentResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(InitiatePaymentResponse) + err := c.cc.Invoke(ctx, WalletService_InitiatePayment_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *walletServiceClient) InitiateTransfer(ctx context.Context, in *InitiateTransferRequest, opts ...grpc.CallOption) (*InitiateTransferResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(InitiateTransferResponse) + err := c.cc.Invoke(ctx, WalletService_InitiateTransfer_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *walletServiceClient) GetTransactions(ctx context.Context, in *GetTransactionsRequest, opts ...grpc.CallOption) (*GetTransactionsResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(GetTransactionsResponse) + err := c.cc.Invoke(ctx, WalletService_GetTransactions_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *walletServiceClient) ResolveAccount(ctx context.Context, in *ResolveAccountRequest, opts ...grpc.CallOption) (*ResolveAccountResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(ResolveAccountResponse) + err := c.cc.Invoke(ctx, WalletService_ResolveAccount_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *walletServiceClient) VerifyNIN(ctx context.Context, in *VerifyNINRequest, opts ...grpc.CallOption) (*VerifyNINResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(VerifyNINResponse) + err := c.cc.Invoke(ctx, WalletService_VerifyNIN_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *walletServiceClient) VerifyBVNImage(ctx context.Context, in *VerifyBVNImageRequest, opts ...grpc.CallOption) (*VerifyBVNImageResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(VerifyBVNImageResponse) + err := c.cc.Invoke(ctx, WalletService_VerifyBVNImage_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *walletServiceClient) GetPayment(ctx context.Context, in *GetPaymentRequest, opts ...grpc.CallOption) (*GetPaymentResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(GetPaymentResponse) + err := c.cc.Invoke(ctx, WalletService_GetPayment_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *walletServiceClient) UpdatePaymentStatus(ctx context.Context, in *UpdatePaymentStatusRequest, opts ...grpc.CallOption) (*UpdatePaymentStatusResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(UpdatePaymentStatusResponse) + err := c.cc.Invoke(ctx, WalletService_UpdatePaymentStatus_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *walletServiceClient) HealthCheck(ctx context.Context, in *HealthCheckRequest, opts ...grpc.CallOption) (*HealthCheckResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(HealthCheckResponse) + err := c.cc.Invoke(ctx, WalletService_HealthCheck_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *walletServiceClient) GetWallets(ctx context.Context, in *GetWalletsRequest, opts ...grpc.CallOption) (*GetWalletsResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(GetWalletsResponse) + err := c.cc.Invoke(ctx, WalletService_GetWallets_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +// WalletServiceServer is the server API for WalletService service. +// All implementations must embed UnimplementedWalletServiceServer +// for forward compatibility. +type WalletServiceServer interface { + CreateWallet(context.Context, *CreateWalletRequest) (*CreateWalletResponse, error) + InitiatePayment(context.Context, *InitiatePaymentRequest) (*InitiatePaymentResponse, error) + InitiateTransfer(context.Context, *InitiateTransferRequest) (*InitiateTransferResponse, error) + GetTransactions(context.Context, *GetTransactionsRequest) (*GetTransactionsResponse, error) + ResolveAccount(context.Context, *ResolveAccountRequest) (*ResolveAccountResponse, error) + VerifyNIN(context.Context, *VerifyNINRequest) (*VerifyNINResponse, error) + VerifyBVNImage(context.Context, *VerifyBVNImageRequest) (*VerifyBVNImageResponse, error) + GetPayment(context.Context, *GetPaymentRequest) (*GetPaymentResponse, error) + UpdatePaymentStatus(context.Context, *UpdatePaymentStatusRequest) (*UpdatePaymentStatusResponse, error) + HealthCheck(context.Context, *HealthCheckRequest) (*HealthCheckResponse, error) + GetWallets(context.Context, *GetWalletsRequest) (*GetWalletsResponse, error) + mustEmbedUnimplementedWalletServiceServer() +} + +// UnimplementedWalletServiceServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedWalletServiceServer struct{} + +func (UnimplementedWalletServiceServer) CreateWallet(context.Context, *CreateWalletRequest) (*CreateWalletResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method CreateWallet not implemented") +} +func (UnimplementedWalletServiceServer) InitiatePayment(context.Context, *InitiatePaymentRequest) (*InitiatePaymentResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method InitiatePayment not implemented") +} +func (UnimplementedWalletServiceServer) InitiateTransfer(context.Context, *InitiateTransferRequest) (*InitiateTransferResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method InitiateTransfer not implemented") +} +func (UnimplementedWalletServiceServer) GetTransactions(context.Context, *GetTransactionsRequest) (*GetTransactionsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetTransactions not implemented") +} +func (UnimplementedWalletServiceServer) ResolveAccount(context.Context, *ResolveAccountRequest) (*ResolveAccountResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ResolveAccount not implemented") +} +func (UnimplementedWalletServiceServer) VerifyNIN(context.Context, *VerifyNINRequest) (*VerifyNINResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method VerifyNIN not implemented") +} +func (UnimplementedWalletServiceServer) VerifyBVNImage(context.Context, *VerifyBVNImageRequest) (*VerifyBVNImageResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method VerifyBVNImage not implemented") +} +func (UnimplementedWalletServiceServer) GetPayment(context.Context, *GetPaymentRequest) (*GetPaymentResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetPayment not implemented") +} +func (UnimplementedWalletServiceServer) UpdatePaymentStatus(context.Context, *UpdatePaymentStatusRequest) (*UpdatePaymentStatusResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdatePaymentStatus not implemented") +} +func (UnimplementedWalletServiceServer) HealthCheck(context.Context, *HealthCheckRequest) (*HealthCheckResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method HealthCheck not implemented") +} +func (UnimplementedWalletServiceServer) GetWallets(context.Context, *GetWalletsRequest) (*GetWalletsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetWallets not implemented") +} +func (UnimplementedWalletServiceServer) mustEmbedUnimplementedWalletServiceServer() {} +func (UnimplementedWalletServiceServer) testEmbeddedByValue() {} + +// UnsafeWalletServiceServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to WalletServiceServer will +// result in compilation errors. +type UnsafeWalletServiceServer interface { + mustEmbedUnimplementedWalletServiceServer() +} + +func RegisterWalletServiceServer(s grpc.ServiceRegistrar, srv WalletServiceServer) { + // If the following call pancis, it indicates UnimplementedWalletServiceServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } + s.RegisterService(&WalletService_ServiceDesc, srv) +} + +func _WalletService_CreateWallet_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateWalletRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(WalletServiceServer).CreateWallet(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: WalletService_CreateWallet_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(WalletServiceServer).CreateWallet(ctx, req.(*CreateWalletRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _WalletService_InitiatePayment_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(InitiatePaymentRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(WalletServiceServer).InitiatePayment(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: WalletService_InitiatePayment_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(WalletServiceServer).InitiatePayment(ctx, req.(*InitiatePaymentRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _WalletService_InitiateTransfer_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(InitiateTransferRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(WalletServiceServer).InitiateTransfer(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: WalletService_InitiateTransfer_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(WalletServiceServer).InitiateTransfer(ctx, req.(*InitiateTransferRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _WalletService_GetTransactions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetTransactionsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(WalletServiceServer).GetTransactions(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: WalletService_GetTransactions_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(WalletServiceServer).GetTransactions(ctx, req.(*GetTransactionsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _WalletService_ResolveAccount_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ResolveAccountRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(WalletServiceServer).ResolveAccount(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: WalletService_ResolveAccount_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(WalletServiceServer).ResolveAccount(ctx, req.(*ResolveAccountRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _WalletService_VerifyNIN_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(VerifyNINRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(WalletServiceServer).VerifyNIN(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: WalletService_VerifyNIN_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(WalletServiceServer).VerifyNIN(ctx, req.(*VerifyNINRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _WalletService_VerifyBVNImage_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(VerifyBVNImageRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(WalletServiceServer).VerifyBVNImage(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: WalletService_VerifyBVNImage_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(WalletServiceServer).VerifyBVNImage(ctx, req.(*VerifyBVNImageRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _WalletService_GetPayment_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetPaymentRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(WalletServiceServer).GetPayment(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: WalletService_GetPayment_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(WalletServiceServer).GetPayment(ctx, req.(*GetPaymentRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _WalletService_UpdatePaymentStatus_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdatePaymentStatusRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(WalletServiceServer).UpdatePaymentStatus(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: WalletService_UpdatePaymentStatus_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(WalletServiceServer).UpdatePaymentStatus(ctx, req.(*UpdatePaymentStatusRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _WalletService_HealthCheck_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(HealthCheckRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(WalletServiceServer).HealthCheck(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: WalletService_HealthCheck_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(WalletServiceServer).HealthCheck(ctx, req.(*HealthCheckRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _WalletService_GetWallets_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetWalletsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(WalletServiceServer).GetWallets(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: WalletService_GetWallets_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(WalletServiceServer).GetWallets(ctx, req.(*GetWalletsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// WalletService_ServiceDesc is the grpc.ServiceDesc for WalletService service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var WalletService_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "wallet.WalletService", + HandlerType: (*WalletServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "CreateWallet", + Handler: _WalletService_CreateWallet_Handler, + }, + { + MethodName: "InitiatePayment", + Handler: _WalletService_InitiatePayment_Handler, + }, + { + MethodName: "InitiateTransfer", + Handler: _WalletService_InitiateTransfer_Handler, + }, + { + MethodName: "GetTransactions", + Handler: _WalletService_GetTransactions_Handler, + }, + { + MethodName: "ResolveAccount", + Handler: _WalletService_ResolveAccount_Handler, + }, + { + MethodName: "VerifyNIN", + Handler: _WalletService_VerifyNIN_Handler, + }, + { + MethodName: "VerifyBVNImage", + Handler: _WalletService_VerifyBVNImage_Handler, + }, + { + MethodName: "GetPayment", + Handler: _WalletService_GetPayment_Handler, + }, + { + MethodName: "UpdatePaymentStatus", + Handler: _WalletService_UpdatePaymentStatus_Handler, + }, + { + MethodName: "HealthCheck", + Handler: _WalletService_HealthCheck_Handler, + }, + { + MethodName: "GetWallets", + Handler: _WalletService_GetWallets_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "wallet.proto", +} diff --git a/services/account/proto/connection/wallet.proto b/services/account/proto/connection/wallet.proto new file mode 100644 index 0000000..126d586 --- /dev/null +++ b/services/account/proto/connection/wallet.proto @@ -0,0 +1,194 @@ +syntax = "proto3"; + +package wallet; + +option go_package = "github.com/PayGidi/WalletService/proto/connection/pb;pb"; + +service WalletService { + rpc CreateWallet (CreateWalletRequest) returns (CreateWalletResponse); + rpc InitiatePayment (InitiatePaymentRequest) returns (InitiatePaymentResponse); + rpc InitiateTransfer (InitiateTransferRequest) returns (InitiateTransferResponse); + rpc GetTransactions (GetTransactionsRequest) returns (GetTransactionsResponse); + rpc ResolveAccount (ResolveAccountRequest) returns (ResolveAccountResponse); + rpc VerifyNIN (VerifyNINRequest) returns (VerifyNINResponse); + rpc VerifyBVNImage (VerifyBVNImageRequest) returns (VerifyBVNImageResponse); + rpc GetPayment (GetPaymentRequest) returns (GetPaymentResponse); + rpc UpdatePaymentStatus (UpdatePaymentStatusRequest) returns (UpdatePaymentStatusResponse); + rpc HealthCheck (HealthCheckRequest) returns (HealthCheckResponse); + rpc GetWallets (GetWalletsRequest) returns (GetWalletsResponse); +} + +message CreateWalletRequest { + string firstname = 1; + string middlename = 2; + string lastname = 3; + string nin = 4; + string dateOfBirth = 5; + string bvn = 6; + string phone = 7; + string email = 8; + string gender = 9; + string userId = 10; + string accountType = 11; + string businessName = 12; + string address = 13; +} + +message CreateWalletResponse { + bool success = 1; + string code = 2; + string message = 3; + string firstname = 4; + string middlename = 5; + string lastname = 6; + string accountNo = 7; + string currentTier = 8; + string customerIdentifier = 9; +} + +message InitiatePaymentRequest { + int64 amount = 1; // in kobo + string email = 2; + string currency = 3; +} + +message InitiatePaymentResponse { + bool success = 1; + string code = 2; + string message = 3; + string checkoutUrl = 4; +} + +message InitiateTransferRequest { + string transactionReference = 1; + int64 amount = 2; // in kobo + string bankCode = 3; + string accountNumber = 4; + string accountName = 5; + string remark = 6; +} + +message InitiateTransferResponse { + bool success = 1; + string code = 2; + string message = 3; + string transactionReference = 4; +} + +message GetTransactionsRequest { + string customerIdentifier = 1; +} + +message GetTransactionsResponse { + bool success = 1; + string message = 2; + repeated TransactionData transactions = 3; +} + +message ResolveAccountRequest { + string bankCode = 1; + string accountNumber = 2; +} + +message ResolveAccountResponse { + bool success = 1; + string code = 2; + string message = 3; + string accountName = 4; + string accountNumber = 5; +} + +message TransactionData { + int64 amount = 1; + string transactionRef = 2; + string gatewayRef = 3; + string transactionType = 4; + string createdAt = 5; + string status = 6; +} + +message VerifyNINRequest { + string nin = 1; +} + +message VerifyNINResponse { + bool success = 1; + string code = 2; + string message = 3; + bool isValid = 4; +} + +message VerifyBVNImageRequest { + string base64Image = 1; + string bvn = 2; +} + +message VerifyBVNImageResponse { + bool success = 1; + string code = 2; + string message = 3; + bool imageMatched = 4; +} + +message HealthCheckRequest {} + +message HealthCheckResponse { + string status = 1; +} + +message GetPaymentRequest { + uint64 paymentId = 1; +} + +message GetPaymentResponse { + bool success = 1; + string message = 2; + PaymentData data = 3; +} + +message PaymentData { + uint64 id = 1; + string userId = 2; + double amount = 3; + string accountNumber = 4; + string bank = 5; + string merchantPhoneNumber = 6; + string merchantEmail = 7; + string advanceOptions = 8; + string status = 9; + double trustScore = 10; + string expiresAt = 11; + string createdAt = 12; +} + +message UpdatePaymentStatusRequest { + uint64 paymentId = 1; + string status = 2; + double trustScore = 3; + string summary = 4; +} + +message UpdatePaymentStatusResponse { + bool success = 1; + string message = 2; +} + +message GetWalletsRequest { + string userId = 1; +} + +message GetWalletsResponse { + bool success = 1; + string message = 2; + repeated WalletData wallets = 3; +} + +message WalletData { + uint64 id = 1; + string accountNumber = 2; + string accountType = 3; + string accountCategory = 4; + string currencyCode = 5; + string status = 6; + string accountNickname = 7; +} diff --git a/services/account/router/routes.go b/services/account/router/routes.go index 58829cd..d05ddd0 100644 --- a/services/account/router/routes.go +++ b/services/account/router/routes.go @@ -52,12 +52,10 @@ func SetupRoutes(app *gin.Engine) { { account.GET("", controllers.GetAccountDetails) account.DELETE("", controllers.DeleteAccount) + account.GET("/me", controllers.Me) account.POST("/pin", middlewares.ValidateDTO(&validators.SetPinDto{}), controllers.SetPin) account.PUT("/pin", middlewares.ValidateDTO(&validators.UpdatePinDto{}), controllers.UpdatePin) } - // me route - api.GET("/me", middlewares.Authenticate(), controllers.Me) - api.GET("/health", controllers.HealthCheck) } diff --git a/services/account/services/wallet/wallet.go b/services/account/services/wallet/wallet.go index d45358d..b0cdf40 100644 --- a/services/account/services/wallet/wallet.go +++ b/services/account/services/wallet/wallet.go @@ -6,7 +6,7 @@ import ( "strconv" "github.com/PayGidi/AccountService/core/constants" - walletpb "github.com/PayGidi/WalletService/proto/connection/pb" + pb "github.com/PayGidi/AccountService/proto/connection/pb" "google.golang.org/grpc" "google.golang.org/grpc/credentials/insecure" "google.golang.org/grpc/metadata" @@ -24,7 +24,7 @@ func CheckNINValidity(ctx context.Context, nin string) (bool, *string) { fmt.Println("[VerifyNIN][account-wallet-client] sending VerifyNIN request; nin length:", len(nin)) - response, err := client.client.VerifyNIN(ctx, &walletpb.VerifyNINRequest{Nin: nin}) + response, err := client.client.VerifyNIN(ctx, &pb.VerifyNINRequest{Nin: nin}) if err != nil { fmt.Println("[VerifyNIN][account-wallet-client] grpc VerifyNIN error:", err) errMsg := err.Error() @@ -58,7 +58,7 @@ func VerifyBVNImage(ctx context.Context, bvn string, base64Image string) (bool, } defer client.Close() - response, err := client.client.VerifyBVNImage(ctx, &walletpb.VerifyBVNImageRequest{ + response, err := client.client.VerifyBVNImage(ctx, &pb.VerifyBVNImageRequest{ Bvn: bvn, Base64Image: base64Image, }) @@ -85,7 +85,7 @@ func VerifyBVNImage(ctx context.Context, bvn string, base64Image string) (bool, type WalletService struct { conn *grpc.ClientConn - client walletpb.WalletServiceClient + client pb.WalletServiceClient } func NewWalletService(address string) (*WalletService, error) { @@ -103,7 +103,7 @@ func NewWalletService(address string) (*WalletService, error) { return &WalletService{ conn: conn, - client: walletpb.NewWalletServiceClient(conn), + client: pb.NewWalletServiceClient(conn), }, nil } @@ -115,7 +115,7 @@ func (s *WalletService) Close() error { return s.conn.Close() } -func (s *WalletService) CreateWalletForUser(ctx context.Context, req *walletpb.CreateWalletRequest, userID uint, recipient string) (*walletpb.CreateWalletResponse, error) { +func (s *WalletService) CreateWalletForUser(ctx context.Context, req *pb.CreateWalletRequest, userID uint, recipient string) (*pb.CreateWalletResponse, error) { md := metadata.Pairs("x-user-id", strconv.FormatUint(uint64(userID), 10)) if recipient != "" { md.Append("x-recipient", recipient) @@ -126,6 +126,10 @@ func (s *WalletService) CreateWalletForUser(ctx context.Context, req *walletpb.C return s.client.CreateWallet(ctx, req) } -func (s *WalletService) CreateWallet(ctx context.Context, req *walletpb.CreateWalletRequest) (*walletpb.CreateWalletResponse, error) { +func (s *WalletService) GetWalletsForUser(ctx context.Context, userID string) (*pb.GetWalletsResponse, error) { + return s.client.GetWallets(ctx, &pb.GetWalletsRequest{UserId: userID}) +} + +func (s *WalletService) CreateWallet(ctx context.Context, req *pb.CreateWalletRequest) (*pb.CreateWalletResponse, error) { return s.client.CreateWallet(ctx, req) } diff --git a/services/gateway/main.go b/services/gateway/main.go index 8130a56..be650f5 100644 --- a/services/gateway/main.go +++ b/services/gateway/main.go @@ -40,7 +40,7 @@ func main() { // --- Central Swagger UI --- // We'll serve a custom HTML page that aggregates all swagger.json files. r.GET("/docs", serveSwaggerUI) - + // Proxy to each service's swagger.json r.GET("/docs/account/swagger.json", gin.WrapH(proxyRewrite(accountProxy, "/docs/doc.json"))) r.GET("/docs/wallet/swagger.json", gin.WrapH(proxyRewrite(walletProxy, "/docs/doc.json"))) @@ -48,30 +48,31 @@ func main() { r.GET("/docs/ai/swagger.json", gin.WrapH(proxyRewrite(aiProxy, "/docs/doc.json"))) r.GET("/docs/notification/swagger.json", gin.WrapH(proxyRewrite(notificationProxy, "/docs/doc.json"))) - // --- API Routing --- api := r.Group("/api/v1") - + // Account Service routes api.Any("/auth", gin.WrapH(accountProxy)) api.Any("/auth/*path", gin.WrapH(accountProxy)) + api.Any("/account", gin.WrapH(accountProxy)) + api.Any("/account/*path", gin.WrapH(accountProxy)) api.Any("/business", gin.WrapH(accountProxy)) api.Any("/business/*path", gin.WrapH(accountProxy)) - + // Wallet Service routes api.Any("/wallet", gin.WrapH(walletProxy)) api.Any("/wallet/*path", gin.WrapH(walletProxy)) api.Any("/payment", gin.WrapH(walletProxy)) api.Any("/payment/*path", gin.WrapH(walletProxy)) - + // Transaction Service routes api.Any("/transactions", gin.WrapH(transactionProxy)) api.Any("/transactions/*path", gin.WrapH(transactionProxy)) - + // AI Service routes api.Any("/kyb", gin.WrapH(aiProxy)) api.Any("/kyb/*path", gin.WrapH(aiProxy)) - + // Notification Service routes api.Any("/notification", gin.WrapH(notificationProxy)) api.Any("/notification/*path", gin.WrapH(notificationProxy)) diff --git a/services/transaction/controllers/transaction.go b/services/transaction/controllers/transaction.go index 98e5be8..5bd0c42 100644 --- a/services/transaction/controllers/transaction.go +++ b/services/transaction/controllers/transaction.go @@ -5,7 +5,7 @@ import ( "sort" "time" - "github.com/PayGidi/TransactionService/core/interfaces/responses" + "github.com/PayGidi/TransactionService/core/interfaces/legacy_responses" "github.com/PayGidi/TransactionService/models" "github.com/PayGidi/TransactionService/services/squad" "github.com/PayGidi/TransactionService/utils" @@ -21,8 +21,8 @@ import ( // @Accept json // @Produce json // @Security BearerAuth -// @Success 200 {object} map[string]interface{} "Success" -// @Failure 400 {object} map[string]interface{} "Bad Request" +// @Success 200 {object} responses.ApiResponse{data=[]legacy_responses.SquadCustomerTransaction} "Success" +// @Failure 400 {object} responses.ApiResponse "Bad Request" // @Router /transactions [get] func GetCustomerTransactions(c *gin.Context) { // Get user from context (set by Authenticate middleware) @@ -106,7 +106,7 @@ func GetCustomerTransactions(c *gin.Context) { return } - var allTransactions []responses.SquadCustomerTransaction = []responses.SquadCustomerTransaction{} + var allTransactions []legacy_responses.SquadCustomerTransaction = []legacy_responses.SquadCustomerTransaction{} seenRefs := make(map[string]bool) for _, acc := range accounts { diff --git a/services/transaction/core/interfaces/responses/response.go b/services/transaction/core/interfaces/legacy_responses/response.go similarity index 99% rename from services/transaction/core/interfaces/responses/response.go rename to services/transaction/core/interfaces/legacy_responses/response.go index ab9d1ec..c6a54b4 100644 --- a/services/transaction/core/interfaces/responses/response.go +++ b/services/transaction/core/interfaces/legacy_responses/response.go @@ -1,4 +1,4 @@ -package responses +package legacy_responses type VfdResponse[T any] struct { Status string `json:"status"` diff --git a/services/transaction/core/interfaces/responses/api_response.go b/services/transaction/core/interfaces/responses/api_response.go new file mode 100644 index 0000000..ed19172 --- /dev/null +++ b/services/transaction/core/interfaces/responses/api_response.go @@ -0,0 +1,8 @@ +package responses + +// ApiResponse defines a generic API response structure for Swagger documentation. +type LegacyApiResponse struct { + Message string `json:"message"` + Data interface{} `json:"data,omitempty"` + Error string `json:"error,omitempty"` +} diff --git a/services/transaction/core/interfaces/responses/swagger.go b/services/transaction/core/interfaces/responses/swagger.go new file mode 100644 index 0000000..339fc9a --- /dev/null +++ b/services/transaction/core/interfaces/responses/swagger.go @@ -0,0 +1,70 @@ +package responses + +import "time" + +// ApiResponse defines a generic API response structure for Swagger documentation. +type ApiResponse struct { + Message string `json:"message"` + Data interface{} `json:"data,omitempty"` + Error string `json:"error,omitempty"` +} + +type Transaction struct { + ID string `json:"id"` + Reference string `json:"reference"` + Type string `json:"type"` + Currency string `json:"currency"` + Amount float64 `json:"amount"` + Fee float64 `json:"fee"` + Narration string `json:"narration"` + Description string `json:"description"` + Status string `json:"status"` + Metadata string `json:"metadata"` + Channel string `json:"channel"` + Source string `json:"source"` + BeneficiaryID string `json:"beneficiaryId"` + BeneficiaryEmail string `json:"beneficiaryEmail"` + InitiatedBy string `json:"initiatedBy"` + CompletedBy string `json:"completedBy"` + ExternalRef string `json:"externalRef"` + IsReconciled bool `json:"isReconciled"` + IsReversal bool `json:"isReversal"` + CreatedAt time.Time `json:"createdAt"` + UpdatedAt time.Time `json:"updatedAt"` + CompletedAt time.Time `json:"completedAt"` +} + +type ListTransactionsResponse struct { + Transactions []Transaction `json:"transactions"` + TotalCount int `json:"totalCount"` + Limit int `json:"limit"` + Offset int `json:"offset"` + MoreRecords bool `json:"moreRecords"` +} + +type CreateTransactionResponse struct { + Transaction `json:"transaction"` +} + +type GetTransactionResponse struct { + Transaction `json:"transaction"` +} + +type TransactionSummary struct { + TotalCount int64 `json:"totalCount"` + CompletedCount int64 `json:"completedCount"` + FailedCount int64 `json:"failedCount"` + PendingCount int64 `json:"pendingCount"` + TotalVolume string `json:"totalVolume"` + TotalFee string `json:"totalFee"` + Date string `json:"date"` + Filters string `json:"filters"` +} + +type ListTransactionSummaryResponse struct { + TransactionSummary `json:"summary"` +} + +type CreateTransactionSummaryResponse struct { + TransactionSummary `json:"summary"` +} diff --git a/services/transaction/docs/docs.go b/services/transaction/docs/docs.go index 36daa3e..c1a3b2e 100644 --- a/services/transaction/docs/docs.go +++ b/services/transaction/docs/docs.go @@ -50,9 +50,14 @@ const docTemplate = `{ } } }, - "/transactions/{customerIdentifier}": { + "/transactions": { "get": { - "description": "Fetch transaction history for a specific customer identifier using the Squad API.", + "security": [ + { + "BearerAuth": [] + } + ], + "description": "Fetch transaction history for all wallet accounts of the authenticated customer using the Squad API.", "consumes": [ "application/json" ], @@ -63,33 +68,91 @@ const docTemplate = `{ "Transactions" ], "summary": "Get customer transactions", - "parameters": [ - { - "type": "string", - "description": "Customer Identifier (e.g. email or UID)", - "name": "customerIdentifier", - "in": "path", - "required": true - } - ], "responses": { "200": { "description": "Success", "schema": { - "type": "object", - "additionalProperties": true + "allOf": [ + { + "$ref": "#/definitions/responses.ApiResponse" + }, + { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/legacy_responses.SquadCustomerTransaction" + } + } + } + } + ] } }, "400": { "description": "Bad Request", "schema": { - "type": "object", - "additionalProperties": true + "$ref": "#/definitions/responses.ApiResponse" } } } } } + }, + "definitions": { + "legacy_responses.SquadCustomerTransaction": { + "type": "object", + "properties": { + "currency": { + "type": "string" + }, + "customer": { + "type": "object", + "properties": { + "customer_identifier": { + "type": "string" + } + } + }, + "fee_charged": { + "type": "string" + }, + "principal_amount": { + "type": "string" + }, + "remarks": { + "type": "string" + }, + "settled_amount": { + "type": "string" + }, + "transaction_date": { + "type": "string" + }, + "transaction_indicator": { + "type": "string" + }, + "transaction_reference": { + "type": "string" + }, + "virtual_account_number": { + "type": "string" + } + } + }, + "responses.ApiResponse": { + "type": "object", + "properties": { + "data": {}, + "error": { + "type": "string" + }, + "message": { + "type": "string" + } + } + } } }` diff --git a/services/transaction/docs/swagger.json b/services/transaction/docs/swagger.json index 0690cbc..e97f803 100644 --- a/services/transaction/docs/swagger.json +++ b/services/transaction/docs/swagger.json @@ -44,9 +44,14 @@ } } }, - "/transactions/{customerIdentifier}": { + "/transactions": { "get": { - "description": "Fetch transaction history for a specific customer identifier using the Squad API.", + "security": [ + { + "BearerAuth": [] + } + ], + "description": "Fetch transaction history for all wallet accounts of the authenticated customer using the Squad API.", "consumes": [ "application/json" ], @@ -57,32 +62,90 @@ "Transactions" ], "summary": "Get customer transactions", - "parameters": [ - { - "type": "string", - "description": "Customer Identifier (e.g. email or UID)", - "name": "customerIdentifier", - "in": "path", - "required": true - } - ], "responses": { "200": { "description": "Success", "schema": { - "type": "object", - "additionalProperties": true + "allOf": [ + { + "$ref": "#/definitions/responses.ApiResponse" + }, + { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/legacy_responses.SquadCustomerTransaction" + } + } + } + } + ] } }, "400": { "description": "Bad Request", "schema": { - "type": "object", - "additionalProperties": true + "$ref": "#/definitions/responses.ApiResponse" } } } } } + }, + "definitions": { + "legacy_responses.SquadCustomerTransaction": { + "type": "object", + "properties": { + "currency": { + "type": "string" + }, + "customer": { + "type": "object", + "properties": { + "customer_identifier": { + "type": "string" + } + } + }, + "fee_charged": { + "type": "string" + }, + "principal_amount": { + "type": "string" + }, + "remarks": { + "type": "string" + }, + "settled_amount": { + "type": "string" + }, + "transaction_date": { + "type": "string" + }, + "transaction_indicator": { + "type": "string" + }, + "transaction_reference": { + "type": "string" + }, + "virtual_account_number": { + "type": "string" + } + } + }, + "responses.ApiResponse": { + "type": "object", + "properties": { + "data": {}, + "error": { + "type": "string" + }, + "message": { + "type": "string" + } + } + } } } \ No newline at end of file diff --git a/services/transaction/docs/swagger.yaml b/services/transaction/docs/swagger.yaml index 7c13c94..c9e0b11 100644 --- a/services/transaction/docs/swagger.yaml +++ b/services/transaction/docs/swagger.yaml @@ -1,4 +1,39 @@ basePath: /api/v1 +definitions: + legacy_responses.SquadCustomerTransaction: + properties: + currency: + type: string + customer: + properties: + customer_identifier: + type: string + type: object + fee_charged: + type: string + principal_amount: + type: string + remarks: + type: string + settled_amount: + type: string + transaction_date: + type: string + transaction_indicator: + type: string + transaction_reference: + type: string + virtual_account_number: + type: string + type: object + responses.ApiResponse: + properties: + data: {} + error: + type: string + message: + type: string + type: object host: api.paygidi.site info: contact: @@ -30,31 +65,32 @@ paths: summary: Health Check tags: - Health - /transactions/{customerIdentifier}: + /transactions: get: consumes: - application/json - description: Fetch transaction history for a specific customer identifier using - the Squad API. - parameters: - - description: Customer Identifier (e.g. email or UID) - in: path - name: customerIdentifier - required: true - type: string + description: Fetch transaction history for all wallet accounts of the authenticated + customer using the Squad API. produces: - application/json responses: "200": description: Success schema: - additionalProperties: true - type: object + allOf: + - $ref: '#/definitions/responses.ApiResponse' + - properties: + data: + items: + $ref: '#/definitions/legacy_responses.SquadCustomerTransaction' + type: array + type: object "400": description: Bad Request schema: - additionalProperties: true - type: object + $ref: '#/definitions/responses.ApiResponse' + security: + - BearerAuth: [] summary: Get customer transactions tags: - Transactions diff --git a/services/transaction/go.mod b/services/transaction/go.mod index 47415ea..bba4f37 100644 --- a/services/transaction/go.mod +++ b/services/transaction/go.mod @@ -1,6 +1,6 @@ module github.com/PayGidi/TransactionService -go 1.24.1 +go 1.26.3 require ( github.com/gin-gonic/gin v1.10.1 diff --git a/services/transaction/services/squad/squad.go b/services/transaction/services/squad/squad.go index 2494a39..816ddb0 100644 --- a/services/transaction/services/squad/squad.go +++ b/services/transaction/services/squad/squad.go @@ -7,7 +7,7 @@ import ( "os" "strings" - "github.com/PayGidi/TransactionService/core/interfaces/responses" + "github.com/PayGidi/TransactionService/core/interfaces/legacy_responses" httpclient "github.com/PayGidi/TransactionService/utils/http" ) @@ -23,9 +23,9 @@ func refreshSquadClient() { } // GetCustomerTransactions fetches the transactions for a specific customer identifier from Squad. -func GetCustomerTransactions(ctx context.Context, customerIdentifier string) (bool, *string, []responses.SquadCustomerTransaction) { +func GetCustomerTransactions(ctx context.Context, customerIdentifier string) (bool, *string, []legacy_responses.SquadCustomerTransaction) { refreshSquadClient() - var response responses.SquadResponse[[]responses.SquadCustomerTransaction] + var response legacy_responses.SquadResponse[[]legacy_responses.SquadCustomerTransaction] path := fmt.Sprintf("/virtual-account/customer/transactions/%s", customerIdentifier) _, err := httpclient.Get(client, ctx, path, &response) diff --git a/services/wallet/connection/grpc/server.go b/services/wallet/connection/grpc/server.go index d3fa551..54f2d70 100644 --- a/services/wallet/connection/grpc/server.go +++ b/services/wallet/connection/grpc/server.go @@ -35,6 +35,36 @@ func (s *WalletServer) HealthCheck(context.Context, *pb.HealthCheckRequest) (*pb return &pb.HealthCheckResponse{Status: "ok"}, nil } +func (s *WalletServer) GetWallets(ctx context.Context, req *pb.GetWalletsRequest) (*pb.GetWalletsResponse, error) { + if req == nil || req.UserId == "" { + return nil, status.Error(codes.InvalidArgument, "userId is required") + } + + accounts, err := s.walletController.GetWallets(ctx, req.UserId) + if err != nil { + return nil, status.Errorf(codes.Internal, "failed to fetch wallets: %v", err) + } + + wallets := make([]*pb.WalletData, 0) + for _, a := range accounts { + wallets = append(wallets, &pb.WalletData{ + Id: uint64(a.ID), + AccountNumber: a.AccountNumber, + AccountType: a.AccountType, + AccountCategory: a.AccountCategory, + CurrencyCode: a.CurrencyCode, + Status: a.Status, + AccountNickname: a.AccountNickname, + }) + } + + return &pb.GetWalletsResponse{ + Success: true, + Message: "wallets retrieved successfully", + Wallets: wallets, + }, nil +} + func (s *WalletServer) CreateWallet(ctx context.Context, req *pb.CreateWalletRequest) (*pb.CreateWalletResponse, error) { log.Printf("[WalletServer] CreateWallet request for UserID: %s, Phone: %s", req.UserId, req.Phone) diff --git a/services/wallet/connection/wallet.proto b/services/wallet/connection/wallet.proto index 82781ae..126d586 100644 --- a/services/wallet/connection/wallet.proto +++ b/services/wallet/connection/wallet.proto @@ -15,6 +15,7 @@ service WalletService { rpc GetPayment (GetPaymentRequest) returns (GetPaymentResponse); rpc UpdatePaymentStatus (UpdatePaymentStatusRequest) returns (UpdatePaymentStatusResponse); rpc HealthCheck (HealthCheckRequest) returns (HealthCheckResponse); + rpc GetWallets (GetWalletsRequest) returns (GetWalletsResponse); } message CreateWalletRequest { @@ -171,3 +172,23 @@ message UpdatePaymentStatusResponse { bool success = 1; string message = 2; } + +message GetWalletsRequest { + string userId = 1; +} + +message GetWalletsResponse { + bool success = 1; + string message = 2; + repeated WalletData wallets = 3; +} + +message WalletData { + uint64 id = 1; + string accountNumber = 2; + string accountType = 3; + string accountCategory = 4; + string currencyCode = 5; + string status = 6; + string accountNickname = 7; +} diff --git a/services/wallet/controllers/wallet.go b/services/wallet/controllers/wallet.go index e5cb92c..7288989 100644 --- a/services/wallet/controllers/wallet.go +++ b/services/wallet/controllers/wallet.go @@ -16,6 +16,7 @@ import ( "github.com/PayGidi/WalletService/models" "github.com/PayGidi/WalletService/services/account" squadService "github.com/PayGidi/WalletService/services/squad" + "github.com/PayGidi/WalletService/utils" "github.com/gin-gonic/gin" "gorm.io/gorm" ) @@ -165,38 +166,76 @@ func (wc *WalletController) GetTransactions(ctx context.Context, customerIdentif return squadService.GetCustomerTransactions(ctx, customerIdentifier) } -func (wc *WalletController) ResolveAccount(ctx context.Context, request payloads.SquadAccountLookupPayload) (bool, *string, *responses.SquadAccountLookupResponseData) { - return squadService.ResolveAccount(ctx, request) +func (wc *WalletController) GetTotalBalance(ctx context.Context, userID string) (float64, error) { + var accounts []models.Account + userIDInt, err := strconv.Atoi(userID) + if err != nil { + return 0, err + } + + if err := wc.db.WithContext(ctx).Where("user_id = ?", uint(userIDInt)).Find(&accounts).Error; err != nil { + return 0, err + } + + var totalBalance float64 + for _, acc := range accounts { + // Squad virtual accounts don't maintain individual balances on their end. + // All inbound funds are settled to the Merchant wallet. + // Therefore, we use the locally tracked balance. + totalBalance += acc.Balance + } + + return totalBalance, nil } -// GetWalletHttp handles the GET /wallet HTTP request to fetch virtual account details -// GetWalletHttp godoc -// @Summary Get wallet details -// @Description Retrieve virtual account details for the authenticated user or a specific account number. +// GetTotalBalanceHttp godoc +// @Summary Get total wallet balance +// @Description Fetch total balance across all wallets for the authenticated user. // @Tags Wallet // @Produce json // @Security ApiKeyAuth -// @Param accountNumber path string false "Account Number" // @Success 200 {object} map[string]interface{} "Success" -// @Failure 401 {object} map[string]interface{} "Unauthorized" -// @Failure 404 {object} map[string]interface{} "Not Found" -// @Router /wallet/{accountNumber} [get] +// @Router /wallet/balance [get] +func (wc *WalletController) GetWallets(ctx context.Context, userID string) ([]models.Account, error) { + var accounts []models.Account + userIDInt, err := strconv.Atoi(userID) + if err != nil { + return nil, err + } + if err := wc.db.WithContext(ctx).Where("user_id = ?", uint(userIDInt)).Find(&accounts).Error; err != nil { + return nil, err + } + return accounts, nil +} + +func (wc *WalletController) GetTotalBalanceHttp(c *gin.Context) { + // Temporarily bypass authentication for testing + userID := "1" + + balance, err := wc.GetTotalBalance(c.Request.Context(), userID) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{ + "status": 500, + "success": false, + "message": "Failed to calculate balance", + }) + return + } + + c.JSON(http.StatusOK, gin.H{ + "status": 200, + "success": true, + "totalBalance": balance, + }) +} + func (wc *WalletController) GetWalletHttp(c *gin.Context) { accountNumber := c.Param("accountNumber") var account models.Account if accountNumber == "" { - // Try from authenticated user - userID, exists := c.Get("userID") - if !exists { - c.JSON(http.StatusUnauthorized, gin.H{ - "status": 401, - "success": false, - "message": "Unauthorized", - "data": gin.H{}, - }) - return - } + // Temporarily bypass authentication for testing + userID := "1" if err := wc.db.Where("user_id = ?", userID).First(&account).Error; err != nil { c.JSON(http.StatusNotFound, gin.H{ @@ -393,6 +432,10 @@ func (wc *WalletController) SimulatePaymentHttp(c *gin.Context) { }) } +func (wc *WalletController) ResolveAccount(ctx context.Context, request payloads.SquadAccountLookupPayload) (bool, *string, *responses.SquadAccountLookupResponseData) { + return squadService.ResolveAccount(ctx, request) +} + // ResolveAccountHttp handles the POST /wallet/transfer/lookup HTTP request // ResolveAccountHttp godoc // @Summary Resolve bank account @@ -538,18 +581,17 @@ func (wc *WalletController) InitiateTransferHttp(c *gin.Context) { // @Success 200 {object} map[string]interface{} "Success" // @Router /wallet/banks [get] func (wc *WalletController) GetBanksHttp(c *gin.Context) { - success, errMsg, data := squadService.GetBanks(c.Request.Context()) + var banks []struct { + Code string `json:"code"` + Name string `json:"name"` + Icon *string `json:"icon"` + } - if !success { - msg := "Failed to retrieve bank list" - if errMsg != nil { - msg = *errMsg - } - c.JSON(http.StatusBadRequest, gin.H{ - "status": 400, + if err := utils.LoadJSONFile("data/banks.json", &banks); err != nil { + c.JSON(http.StatusInternalServerError, gin.H{ + "status": 500, "success": false, - "message": msg, - "data": gin.H{}, + "message": "Failed to load bank list", }) return } @@ -558,7 +600,7 @@ func (wc *WalletController) GetBanksHttp(c *gin.Context) { "status": 200, "success": true, "message": "Success", - "data": data, + "data": banks, }) } diff --git a/services/wallet/data/banks.json b/services/wallet/data/banks.json new file mode 100644 index 0000000..a3f36d0 --- /dev/null +++ b/services/wallet/data/banks.json @@ -0,0 +1,2212 @@ +[ + { + "code": "000001", + "name": "Sterling Bank", + "icon": null + }, + { + "code": "000002", + "name": "Keystone Bank", + "icon": null + }, + { + "code": "000003", + "name": "FCMB", + "icon": null + }, + { + "code": "000004", + "name": "United Bank for Africa", + "icon": null + }, + { + "code": "000005", + "name": "Diamond Bank", + "icon": null + }, + { + "code": "000006", + "name": "JAIZ Bank", + "icon": null + }, + { + "code": "000007", + "name": "Fidelity Bank", + "icon": null + }, + { + "code": "000008", + "name": "Polaris Bank", + "icon": null + }, + { + "code": "000009", + "name": "Citi Bank", + "icon": null + }, + { + "code": "000010", + "name": "Ecobank Bank", + "icon": null + }, + { + "code": "000011", + "name": "Unity Bank", + "icon": null + }, + { + "code": "000012", + "name": "StanbicIBTC Bank", + "icon": null + }, + { + "code": "000013", + "name": "GTBank Plc", + "icon": null + }, + { + "code": "000014", + "name": "Access Bank", + "icon": null + }, + { + "code": "000015", + "name": "Zenith Bank Plc", + "icon": null + }, + { + "code": "000016", + "name": "First Bank of Nigeria", + "icon": null + }, + { + "code": "000017", + "name": "Wema Bank", + "icon": null + }, + { + "code": "000018", + "name": "Union Bank", + "icon": null + }, + { + "code": "000019", + "name": "Enterprise Bank", + "icon": null + }, + { + "code": "000020", + "name": "Heritage", + "icon": null + }, + { + "code": "000021", + "name": "Standard Chartered", + "icon": null + }, + { + "code": "000022", + "name": "Suntrust Bank", + "icon": null + }, + { + "code": "000023", + "name": "Providus Bank", + "icon": null + }, + { + "code": "000024", + "name": "Rand Merchant Bank", + "icon": null + }, + { + "code": "000025", + "name": "Titan Trust Bank", + "icon": null + }, + { + "code": "000026", + "name": "Taj Bank", + "icon": null + }, + { + "code": "000027", + "name": "Globus Bank", + "icon": null + }, + { + "code": "000028", + "name": "Central Bank of Nigeria", + "icon": null + }, + { + "code": "000029", + "name": "Lotus Bank", + "icon": null + }, + { + "code": "000031", + "name": "Premium Trust Bank", + "icon": null + }, + { + "code": "000033", + "name": "eNaira", + "icon": null + }, + { + "code": "000034", + "name": "Signature Bank", + "icon": null + }, + { + "code": "000036", + "name": "Optimus Bank", + "icon": null + }, + { + "code": "050002", + "name": "FEWCHORE FINANCE COMPANY LIMITED", + "icon": null + }, + { + "code": "050003", + "name": "SageGrey Finance Limited", + "icon": null + }, + { + "code": "050005", + "name": "AAA Finance", + "icon": null + }, + { + "code": "050006", + "name": "Branch International Financial Services", + "icon": null + }, + { + "code": "050007", + "name": "Tekla Finance Limited", + "icon": null + }, + { + "code": "050009", + "name": "Fast Credit", + "icon": null + }, + { + "code": "050010", + "name": "Fundquest Financial Services Limited", + "icon": null + }, + { + "code": "050012", + "name": "Enco Finance", + "icon": null + }, + { + "code": "050013", + "name": "Dignity Finance", + "icon": null + }, + { + "code": "050013", + "name": "Trinity Financial Services Limited", + "icon": null + }, + { + "code": "400001", + "name": "FSDH Merchant Bank", + "icon": null + }, + { + "code": "060001", + "name": "Coronation Merchant Bank", + "icon": null + }, + { + "code": "060002", + "name": "FBNQUEST Merchant Bank", + "icon": null + }, + { + "code": "060003", + "name": "Nova Merchant Bank", + "icon": null + }, + { + "code": "060004", + "name": "Greenwich Merchant Bank", + "icon": null + }, + { + "code": "070007", + "name": "Omoluabi savings and loans", + "icon": null + }, + { + "code": "090001", + "name": "ASOSavings & Loans", + "icon": null + }, + { + "code": "090005", + "name": "Trustbond Mortgage Bank", + "icon": null + }, + { + "code": "090006", + "name": "SafeTrust", + "icon": null + }, + { + "code": "090107", + "name": "FBN Mortgages Limited", + "icon": null + }, + { + "code": "100024", + "name": "Imperial Homes Mortgage Bank", + "icon": null + }, + { + "code": "100028", + "name": "AG Mortgage Bank", + "icon": null + }, + { + "code": "070009", + "name": "Gateway Mortgage Bank", + "icon": null + }, + { + "code": "070010", + "name": "Abbey Mortgage Bank", + "icon": null + }, + { + "code": "070011", + "name": "Refuge Mortgage Bank", + "icon": null + }, + { + "code": "070012", + "name": "Lagos Building Investment Company", + "icon": null + }, + { + "code": "070013", + "name": "Platinum Mortgage Bank", + "icon": null + }, + { + "code": "070014", + "name": "First Generation Mortgage Bank", + "icon": null + }, + { + "code": "070015", + "name": "Brent Mortgage Bank", + "icon": null + }, + { + "code": "070016", + "name": "Infinity Trust Mortgage Bank", + "icon": null + }, + { + "code": "070019", + "name": "MayFresh Mortgage Bank", + "icon": null + }, + { + "code": "090003", + "name": "Jubilee-Life Mortgage Bank", + "icon": null + }, + { + "code": "070017", + "name": "Haggai Mortgage Bank Limited", + "icon": null + }, + { + "code": "070021", + "name": "Coop Mortgage Bank", + "icon": null + }, + { + "code": "070023", + "name": "Delta Trust Microfinance Bank", + "icon": null + }, + { + "code": "070024", + "name": "Homebase Mortgage Bank", + "icon": null + }, + { + "code": "070025", + "name": "Akwa Savings & Loans Limited", + "icon": null + }, + { + "code": "070026", + "name": "FHA Mortgage Bank", + "icon": null + }, + { + "code": "090108", + "name": "New Prudential Bank", + "icon": null + }, + { + "code": "070001", + "name": "NPF MicroFinance Bank", + "icon": null + }, + { + "code": "070002", + "name": "Fortis Microfinance Bank", + "icon": null + }, + { + "code": "070006", + "name": "Covenant MFB", + "icon": null + }, + { + "code": "070008", + "name": "Page Financials", + "icon": null + }, + { + "code": "090004", + "name": "Parralex Microfinance bank", + "icon": null + }, + { + "code": "090097", + "name": "Ekondo MFB", + "icon": null + }, + { + "code": "090110", + "name": "VFD MFB", + "icon": null + }, + { + "code": "090111", + "name": "FinaTrust Microfinance Bank", + "icon": null + }, + { + "code": "090112", + "name": "Seed Capital Microfinance Bank", + "icon": null + }, + { + "code": "090114", + "name": "Empire trust MFB", + "icon": null + }, + { + "code": "090115", + "name": "TCF MFB", + "icon": null + }, + { + "code": "090116", + "name": "AMML MFB", + "icon": null + }, + { + "code": "090117", + "name": "Boctrust Microfinance Bank", + "icon": null + }, + { + "code": "090118", + "name": "IBILE Microfinance Bank", + "icon": null + }, + { + "code": "090119", + "name": "Ohafia Microfinance Bank", + "icon": null + }, + { + "code": "090120", + "name": "Wetland Microfinance Bank", + "icon": null + }, + { + "code": "090121", + "name": "Hasal Microfinance Bank", + "icon": null + }, + { + "code": "090122", + "name": "Gowans Microfinance Bank", + "icon": null + }, + { + "code": "090123", + "name": "Verite Microfinance Bank", + "icon": null + }, + { + "code": "090124", + "name": "Xslnce Microfinance Bank", + "icon": null + }, + { + "code": "090125", + "name": "Regent Microfinance Bank", + "icon": null + }, + { + "code": "090126", + "name": "Fidfund Microfinance Bank", + "icon": null + }, + { + "code": "090127", + "name": "BC Kash Microfinance Bank", + "icon": null + }, + { + "code": "090128", + "name": "Ndiorah Microfinance Bank", + "icon": null + }, + { + "code": "090129", + "name": "Money Trust Microfinance Bank", + "icon": null + }, + { + "code": "090130", + "name": "Consumer Microfinance Bank", + "icon": null + }, + { + "code": "090131", + "name": "Allworkers Microfinance Bank", + "icon": null + }, + { + "code": "090132", + "name": "Richway Microfinance Bank", + "icon": null + }, + { + "code": "090133", + "name": "AL-Barakah Microfinance Bank", + "icon": null + }, + { + "code": "090134", + "name": "Accion Microfinance Bank", + "icon": null + }, + { + "code": "090135", + "name": "Personal Trust Microfinance Bank", + "icon": null + }, + { + "code": "090136", + "name": "Microcred Microfinance Bank", + "icon": null + }, + { + "code": "090137", + "name": "PecanTrust Microfinance Bank", + "icon": null + }, + { + "code": "090138", + "name": "Royal Exchange Microfinance Bank", + "icon": null + }, + { + "code": "090139", + "name": "Visa Microfinance Bank", + "icon": null + }, + { + "code": "090140", + "name": "Sagamu Microfinance Bank", + "icon": null + }, + { + "code": "090141", + "name": "Chikum Microfinance Bank", + "icon": null + }, + { + "code": "090142", + "name": "Yes Microfinance Bank", + "icon": null + }, + { + "code": "090143", + "name": "Apeks Microfinance Bank", + "icon": null + }, + { + "code": "090144", + "name": "CIT Microfinance Bank", + "icon": null + }, + { + "code": "090145", + "name": "Fullrange Microfinance Bank", + "icon": null + }, + { + "code": "090146", + "name": "Trident Microfinance Bank", + "icon": null + }, + { + "code": "090147", + "name": "Hackman Microfinance Bank", + "icon": null + }, + { + "code": "090148", + "name": "Bowen Microfinance Bank", + "icon": null + }, + { + "code": "090149", + "name": "IRL Microfinance Bank", + "icon": null + }, + { + "code": "090150", + "name": "Virtue Microfinance Bank", + "icon": null + }, + { + "code": "090151", + "name": "Mutual Trust Microfinance Bank", + "icon": null + }, + { + "code": "090152", + "name": "Nagarta Microfinance Bank", + "icon": null + }, + { + "code": "090153", + "name": "FFS Microfinance Bank", + "icon": null + }, + { + "code": "090154", + "name": "CEMCS Microfinance Bank", + "icon": null + }, + { + "code": "090155", + "name": "Advans La Fayette Microfinance Bank", + "icon": null + }, + { + "code": "090156", + "name": "e-Barcs Microfinance Bank", + "icon": null + }, + { + "code": "090157", + "name": "Infinity Microfinance Bank", + "icon": null + }, + { + "code": "090158", + "name": "Futo Microfinance Bank", + "icon": null + }, + { + "code": "090159", + "name": "Credit Afrique Microfinance Bank", + "icon": null + }, + { + "code": "090160", + "name": "Addosser Microfinance Bank", + "icon": null + }, + { + "code": "090161", + "name": "Okpoga Microfinance Bank", + "icon": null + }, + { + "code": "090162", + "name": "Stanford Microfinance Bak", + "icon": null + }, + { + "code": "090164", + "name": "First Royal Microfinance Bank", + "icon": null + }, + { + "code": "090165", + "name": "Petra Microfinance Bank", + "icon": null + }, + { + "code": "090166", + "name": "Eso-E Microfinance Bank", + "icon": null + }, + { + "code": "090167", + "name": "Daylight Microfinance Bank", + "icon": null + }, + { + "code": "090168", + "name": "Gashua Microfinance Bank", + "icon": null + }, + { + "code": "090169", + "name": "Alpha Kapital Microfinance Bank", + "icon": null + }, + { + "code": "090171", + "name": "Mainstreet Microfinance Bank", + "icon": null + }, + { + "code": "090172", + "name": "Astrapolaris Microfinance Bank", + "icon": null + }, + { + "code": "090173", + "name": "Reliance Microfinance Bank", + "icon": null + }, + { + "code": "090174", + "name": "Malachy Microfinance Bank", + "icon": null + }, + { + "code": "090175", + "name": "HighStreet Microfinance Bank", + "icon": null + }, + { + "code": "090176", + "name": "Bosak Microfinance Bank", + "icon": null + }, + { + "code": "090177", + "name": "Lapo Microfinance Bank", + "icon": null + }, + { + "code": "090178", + "name": "GreenBank Microfinance Bank", + "icon": null + }, + { + "code": "090179", + "name": "FAST Microfinance Bank", + "icon": null + }, + { + "code": "090180", + "name": "Amju Unique Microfinance Bank", + "icon": null + }, + { + "code": "090186", + "name": "Girei Microfinance Bank", + "icon": null + }, + { + "code": "090188", + "name": "Baines Credit Microfinance Bank", + "icon": null + }, + { + "code": "090189", + "name": "Esan Microfinance Bank", + "icon": null + }, + { + "code": "090190", + "name": "Mutual Benefits Microfinance Bank", + "icon": null + }, + { + "code": "090191", + "name": "KCMB Microfinance Bank", + "icon": null + }, + { + "code": "090192", + "name": "Midland Microfinance Bank", + "icon": null + }, + { + "code": "090193", + "name": "Unical Microfinance Bank", + "icon": null + }, + { + "code": "090194", + "name": "NIRSAL Microfinance Bank", + "icon": null + }, + { + "code": "090195", + "name": "Grooming Microfinance Bank", + "icon": null + }, + { + "code": "090196", + "name": "Pennywise Microfinance Bank", + "icon": null + }, + { + "code": "090197", + "name": "ABU Microfinance Bank", + "icon": null + }, + { + "code": "090198", + "name": "RenMoney Microfinance Bank", + "icon": null + }, + { + "code": "090205", + "name": "New Dawn Microfinance Bank", + "icon": null + }, + { + "code": "090251", + "name": "UNN MFB", + "icon": null + }, + { + "code": "090252", + "name": "Yobe Microfinance Bank", + "icon": null + }, + { + "code": "090254", + "name": "Coalcamp Microfinance Bank", + "icon": null + }, + { + "code": "090258", + "name": "Imo State Microfinance Bank", + "icon": null + }, + { + "code": "090259", + "name": "Alekun Microfinance Bank", + "icon": null + }, + { + "code": "090260", + "name": "Above Only Microfinance Bank", + "icon": null + }, + { + "code": "090261", + "name": "Quickfund Microfinance Bank", + "icon": null + }, + { + "code": "090262", + "name": "Stellas Microfinance Bank", + "icon": null + }, + { + "code": "090263", + "name": "Navy Microfinance Bank", + "icon": null + }, + { + "code": "090264", + "name": "Auchi Microfinance Bank", + "icon": null + }, + { + "code": "090265", + "name": "Lovonus Microfinance Bank", + "icon": null + }, + { + "code": "090266", + "name": "Uniben Microfinance Bank", + "icon": null + }, + { + "code": "090267", + "name": "Kuda Microfinance Bank", + "icon": null + }, + { + "code": "090268", + "name": "Adeyemi College Staff Microfinance Bank", + "icon": null + }, + { + "code": "090269", + "name": "Greenville Microfinance Bank", + "icon": null + }, + { + "code": "090270", + "name": "AB Microfinance Bank", + "icon": null + }, + { + "code": "090271", + "name": "Lavender Microfinance Bank", + "icon": null + }, + { + "code": "090272", + "name": "Olabisi Onabanjo University Microfinance Bank", + "icon": null + }, + { + "code": "090273", + "name": "Emeralds Microfinance Bank", + "icon": null + }, + { + "code": "090274", + "name": "Prestige Microfinance Bank", + "icon": null + }, + { + "code": "090276", + "name": "Trustfund Microfinance Bank", + "icon": null + }, + { + "code": "090277", + "name": "Al-Hayat Microfinance Bank", + "icon": null + }, + { + "code": "090278", + "name": "Glory Microfinance Bank", + "icon": null + }, + { + "code": "090279", + "name": "Ikire Microfinance Bank", + "icon": null + }, + { + "code": "090280", + "name": "Megapraise Microfinance Bank", + "icon": null + }, + { + "code": "090281", + "name": "MintFinex Microfinance Bank", + "icon": null + }, + { + "code": "090282", + "name": "Arise Microfinance Bank", + "icon": null + }, + { + "code": "090283", + "name": "Nnew Women Microfinance Bank", + "icon": null + }, + { + "code": "090285", + "name": "First Option Microfinance Bank", + "icon": null + }, + { + "code": "090286", + "name": "Safe Haven Microfinance Bank", + "icon": null + }, + { + "code": "090287", + "name": "AssetMatrix Microfinance Bank", + "icon": null + }, + { + "code": "090289", + "name": "Pillar Microfinance Bank", + "icon": null + }, + { + "code": "090290", + "name": "FCT Microfinance Bank", + "icon": null + }, + { + "code": "090291", + "name": "Halal Credit Microfinance Bank", + "icon": null + }, + { + "code": "090292", + "name": "Afekhafe Microfinance Bank", + "icon": null + }, + { + "code": "090293", + "name": "Brethren Microfinance Bank", + "icon": null + }, + { + "code": "090294", + "name": "Eagle Flight Microfinance Bank", + "icon": null + }, + { + "code": "090295", + "name": "Omiye Microfinance Bank", + "icon": null + }, + { + "code": "090296", + "name": "Polyunwana Microfinance Bank", + "icon": null + }, + { + "code": "090297", + "name": "Alert Microfinance Bank", + "icon": null + }, + { + "code": "090298", + "name": "FedPoly Nasarawa Microfinance Bank", + "icon": null + }, + { + "code": "090299", + "name": "Kontagora Microfinance Bank", + "icon": null + }, + { + "code": "090303", + "name": "Purplemoney Microfinance Bank", + "icon": null + }, + { + "code": "090304", + "name": "Evangel Microfinance Bank", + "icon": null + }, + { + "code": "090305", + "name": "Sulspap Microfinance Bank", + "icon": null + }, + { + "code": "090307", + "name": "Aramoko Microfinance Bank", + "icon": null + }, + { + "code": "090308", + "name": "Brightway Microfinance Bank", + "icon": null + }, + { + "code": "090310", + "name": "EdFin Microfinance Bank", + "icon": null + }, + { + "code": "090315", + "name": "U & C Microfinance Bank", + "icon": null + }, + { + "code": "090317", + "name": "PatrickGold Microfinance Bank", + "icon": null + }, + { + "code": "090318", + "name": "Federal University Dutse Microfinance Bank", + "icon": null + }, + { + "code": "090320", + "name": "KadPoly Microfinance Bank", + "icon": null + }, + { + "code": "090321", + "name": "MayFair Microfinance Bank", + "icon": null + }, + { + "code": "090322", + "name": "Rephidim Microfinance Bank", + "icon": null + }, + { + "code": "090323", + "name": "Mainland Microfinance Bank", + "icon": null + }, + { + "code": "090324", + "name": "Ikenne Microfinance Bank", + "icon": null + }, + { + "code": "090325", + "name": "Sparkle", + "icon": null + }, + { + "code": "090326", + "name": "Balogun Gambari Microfinance Bank", + "icon": null + }, + { + "code": "090327", + "name": "Trust Microfinance Bank", + "icon": null + }, + { + "code": "090328", + "name": "Eyowo", + "icon": null + }, + { + "code": "090329", + "name": "Neptune Microfinance Bank", + "icon": null + }, + { + "code": "090331", + "name": "UNAAB Microfinance Bank", + "icon": null + }, + { + "code": "090332", + "name": "Evergreen Microfinance Bank", + "icon": null + }, + { + "code": "090333", + "name": "Oche Microfinance Bank", + "icon": null + }, + { + "code": "090337", + "name": "Iyeru Okin Microfinance Bank", + "icon": null + }, + { + "code": "090352", + "name": "Jessefield Microfinance Bank", + "icon": null + }, + { + "code": "090336", + "name": "BIPC Microfinance Bank", + "icon": null + }, + { + "code": "090345", + "name": "OAU Microfinance Bank", + "icon": null + }, + { + "code": "090349", + "name": "Nassarawa Microfinance Bank", + "icon": null + }, + { + "code": "090360", + "name": "CashConnect Microfinance Bank", + "icon": null + }, + { + "code": "090362", + "name": "Molusi Microfinance Bank", + "icon": null + }, + { + "code": "090363", + "name": "Headway Microfinance Bank", + "icon": null + }, + { + "code": "090364", + "name": "Nuture Microfinance Bank", + "icon": null + }, + { + "code": "090365", + "name": "Corestep Microfinance Bank", + "icon": null + }, + { + "code": "090366", + "name": "Firmus Microfinance Bank", + "icon": null + }, + { + "code": "090369", + "name": "Seedvest Microfinance Bank", + "icon": null + }, + { + "code": "090370", + "name": "Ilisan Microfinance Bank", + "icon": null + }, + { + "code": "090372", + "name": "Legend Microfinance Bank", + "icon": null + }, + { + "code": "090373", + "name": "Think Finance Microfinance Bank", + "icon": null + }, + { + "code": "090374", + "name": "Coastline Microfinance Bank", + "icon": null + }, + { + "code": "090376", + "name": "Apple Microfinance Bank", + "icon": null + }, + { + "code": "090377", + "name": "Isaleoyo Microfinance Bank", + "icon": null + }, + { + "code": "090378", + "name": "New Golden Pastures Microfinance Bank", + "icon": null + }, + { + "code": "090385", + "name": "GTI Microfinance Bank", + "icon": null + }, + { + "code": "090386", + "name": "Interland Microfinance Bank", + "icon": null + }, + { + "code": "090389", + "name": "EK-Reliable Microfinance Bank", + "icon": null + }, + { + "code": "090391", + "name": "Davodani Microfinance Bank", + "icon": null + }, + { + "code": "090380", + "name": "Conpro Microfinance Bank", + "icon": null + }, + { + "code": "090393", + "name": "Bridgeway Microfinance Bank", + "icon": null + }, + { + "code": "090394", + "name": "Amac Microfinance Bank", + "icon": null + }, + { + "code": "090395", + "name": "Borgu Microfinance Bank", + "icon": null + }, + { + "code": "090396", + "name": "Oscotech Microfinance Bank", + "icon": null + }, + { + "code": "090399", + "name": "Nwannegadi Microfinance Bank", + "icon": null + }, + { + "code": "090398", + "name": "Federal Polytechnic Nekede Microfinance Bank", + "icon": null + }, + { + "code": "090401", + "name": "Shepherd Trust Microfinance Bank", + "icon": null + }, + { + "code": "090403", + "name": "UDA Microfinance Bank", + "icon": null + }, + { + "code": "090404", + "name": "Olowolagba Microfinance Bank", + "icon": null + }, + { + "code": "090405", + "name": "Rolez Microfinance Bank", + "icon": null + }, + { + "code": "090406", + "name": "Business Support Microfinance Bank", + "icon": null + }, + { + "code": "090409", + "name": "FCMB BETA", + "icon": null + }, + { + "code": "090408", + "name": "GMB Microfinance Bank", + "icon": null + }, + { + "code": "090410", + "name": "Maritime Microfinance Bank", + "icon": null + }, + { + "code": "090411", + "name": "Giginya Microfinance bank", + "icon": null + }, + { + "code": "090412", + "name": "Preeminent Microfinance Bank", + "icon": null + }, + { + "code": "090444", + "name": "BOI Microfinance Bank", + "icon": null + }, + { + "code": "090448", + "name": "Moyofade Microfinance Bank", + "icon": null + }, + { + "code": "090455", + "name": "Mkobo Microfinance Bank", + "icon": null + }, + { + "code": "090463", + "name": "Rehoboth Microfinance Bank", + "icon": null + }, + { + "code": "090464", + "name": "Unimaid Microfinance Bank", + "icon": null + }, + { + "code": "090468", + "name": "OLOFIN OWENA Microfinance Bank", + "icon": null + }, + { + "code": "090473", + "name": "Assets Microfinance Bank", + "icon": null + }, + { + "code": "090338", + "name": "UniUyo Microfinance Bank", + "icon": null + }, + { + "code": "090466", + "name": "YCT Microfinance Bank", + "icon": null + }, + { + "code": "090467", + "name": "Good Neigbours Microfinance Bank", + "icon": null + }, + { + "code": "090471", + "name": "Oluchukwu Microfinance Bank", + "icon": null + }, + { + "code": "090465", + "name": "Maintrust Microfinance Bank", + "icon": null + }, + { + "code": "090469", + "name": "Aniocha Microfinance bank", + "icon": null + }, + { + "code": "090472", + "name": "Caretaker Microfinance Bank", + "icon": null + }, + { + "code": "090475", + "name": "Giant Stride Microfinance Bank", + "icon": null + }, + { + "code": "090181", + "name": "Balogun Fulani Microfinance Bank", + "icon": null + }, + { + "code": "090474", + "name": "Verdant Microfinance Bank", + "icon": null + }, + { + "code": "090470", + "name": "Changan RTS Microfinance Bank", + "icon": null + }, + { + "code": "090476", + "name": "Anchorage Microfinance Bank", + "icon": null + }, + { + "code": "090477", + "name": "Light MFB", + "icon": null + }, + { + "code": "090480", + "name": "Cintrust Microfinance Bank", + "icon": null + }, + { + "code": "090482", + "name": "Fedeth Microfinance Bank", + "icon": null + }, + { + "code": "090483", + "name": "Ada Microfinance Bank", + "icon": null + }, + { + "code": "090488", + "name": "Ibu-Aje Microfinance Bank", + "icon": null + }, + { + "code": "090489", + "name": "Alvana Microfinance Bank", + "icon": null + }, + { + "code": "090490", + "name": "Chukwunenye MFB", + "icon": null + }, + { + "code": "090491", + "name": "Nsuk MFB", + "icon": null + }, + { + "code": "090492", + "name": "Oraukwu MFB", + "icon": null + }, + { + "code": "090494", + "name": "Boji MFB", + "icon": null + }, + { + "code": "090495", + "name": "Goodnews Microfinance Bank", + "icon": null + }, + { + "code": "090496", + "name": "Randalpha Microfinance Bank", + "icon": null + }, + { + "code": "090499", + "name": "Pristine Divitis Microfinance Bank", + "icon": null + }, + { + "code": "090502", + "name": "Shalom Microfinance Bank", + "icon": null + }, + { + "code": "090503", + "name": "Projects Microfinance Bank", + "icon": null + }, + { + "code": "090504", + "name": "Zikora Microfinance Bank", + "icon": null + }, + { + "code": "090505", + "name": "Nigerian Prisons Microfinance Bank", + "icon": null + }, + { + "code": "090506", + "name": "Solid Allianze MFB", + "icon": null + }, + { + "code": "090507", + "name": "FIMS MFB", + "icon": null + }, + { + "code": "090513", + "name": "SEAP Microfinance Bank", + "icon": null + }, + { + "code": "090515", + "name": "RIMA Growth Pathway Microfinance Bank", + "icon": null + }, + { + "code": "090469", + "name": "Aniocha Microfinance bank", + "icon": null + }, + { + "code": "090516", + "name": "Numo Microfinance Bank", + "icon": null + }, + { + "code": "090517", + "name": "Uhuru Microfinance Bank", + "icon": null + }, + { + "code": "090518", + "name": "Afemai Microfinance Bank", + "icon": null + }, + { + "code": "090519", + "name": "Iboma Fadama Microfinance Bank", + "icon": null + }, + { + "code": "090523", + "name": "Chase Microfinance Bank", + "icon": null + }, + { + "code": "090524", + "name": "Solidrock microfinance Bank", + "icon": null + }, + { + "code": "090525", + "name": "TripleA Microfinance Bank", + "icon": null + }, + { + "code": "090526", + "name": "Crescent Microfinance Bank", + "icon": null + }, + { + "code": "090527", + "name": "Ojokoro Microfinance Bank", + "icon": null + }, + { + "code": "090528", + "name": "Mgbidi Microfinance Bank", + "icon": null + }, + { + "code": "090529", + "name": "Ampersand Microfinance Bank", + "icon": null + }, + { + "code": "090530", + "name": "Confidence MFB", + "icon": null + }, + { + "code": "090531", + "name": "Aku Microfinance Bank", + "icon": null + }, + { + "code": "090534", + "name": "Polybadan Microfinance Bank", + "icon": null + }, + { + "code": "090536", + "name": "Ikoyi-Osun Microfinance Bank", + "icon": null + }, + { + "code": "090537", + "name": "Lobrem Microfinance Bank", + "icon": null + }, + { + "code": "090538", + "name": "BluePrint Investments Microfinance Bank", + "icon": null + }, + { + "code": "090539", + "name": "Enrich Microfinance Bank", + "icon": null + }, + { + "code": "090540", + "name": "Aztec Microfinance Bank", + "icon": null + }, + { + "code": "090541", + "name": "Excellent Microfinance Bank", + "icon": null + }, + { + "code": "090542", + "name": "Otuo Microfinance Bank", + "icon": null + }, + { + "code": "090543", + "name": "Iwoama Microfinance Bank", + "icon": null + }, + { + "code": "090544", + "name": "Aspire Microfinance Bank", + "icon": null + }, + { + "code": "090545", + "name": "Abulesoro Microfinance Bank", + "icon": null + }, + { + "code": "090546", + "name": "Ijebu-Ife Microfinance Bank", + "icon": null + }, + { + "code": "090547", + "name": "Rockshield Microfinance Bank", + "icon": null + }, + { + "code": "090548", + "name": "Ally Microfinance Bank", + "icon": null + }, + { + "code": "090549", + "name": "KC Microfinance Bank", + "icon": null + }, + { + "code": "090550", + "name": "Green Energy Microfinance Bank", + "icon": null + }, + { + "code": "090551", + "name": "FairMoney Microfinance Bank", + "icon": null + }, + { + "code": "090553", + "name": "Consistent Trust Microfinance Bank", + "icon": null + }, + { + "code": "090554", + "name": "Kayvee Microfinance Bank", + "icon": null + }, + { + "code": "090555", + "name": "BishopGate Microfinance Bank", + "icon": null + }, + { + "code": "090556", + "name": "Egwafin Microfinance Bank", + "icon": null + }, + { + "code": "090557", + "name": "Lifegate Microfinance Bank", + "icon": null + }, + { + "code": "090558", + "name": "Shongom Microfinance Bank", + "icon": null + }, + { + "code": "090559", + "name": "Shield Microfinance Bank", + "icon": null + }, + { + "code": "090560", + "name": "Tanadi Microfinance Bank", + "icon": null + }, + { + "code": "090561", + "name": "Akuchuckwu Microfinance Bank", + "icon": null + }, + { + "code": "090562", + "name": "Cedar Microfinance Bank", + "icon": null + }, + { + "code": "090563", + "name": "Balera Microfinance Bank", + "icon": null + }, + { + "code": "090564", + "name": "Supreme Microfinance Bank", + "icon": null + }, + { + "code": "090565", + "name": "Oke-Aro Oredegbe Microfinance Bank", + "icon": null + }, + { + "code": "090566", + "name": "Okuku Microfinance Bank", + "icon": null + }, + { + "code": "090567", + "name": "Orokam Microfinance Bank", + "icon": null + }, + { + "code": "090568", + "name": "Broadview Microfinance Bank", + "icon": null + }, + { + "code": "090569", + "name": "Qube Microfinance Bank", + "icon": null + }, + { + "code": "090570", + "name": "Iyamoye Microfinance Bank", + "icon": null + }, + { + "code": "090571", + "name": "Ilaro Poly Microfinance Bank", + "icon": null + }, + { + "code": "090572", + "name": "EWT Microfinance Bank", + "icon": null + }, + { + "code": "090573", + "name": "Snow MFB", + "icon": null + }, + { + "code": "090575", + "name": "First Midas Microfinance Bank", + "icon": null + }, + { + "code": "090576", + "name": "Octopus Microfinance Bank", + "icon": null + }, + { + "code": "090579", + "name": "Gbede Microfinance Bank", + "icon": null + }, + { + "code": "090580", + "name": "Otech Microfinance Bank", + "icon": null + }, + { + "code": "090583", + "name": "Stateside Microfinance Bank", + "icon": null + }, + { + "code": "090574", + "name": "GOLDMAN MFB", + "icon": null + }, + { + "code": "090535", + "name": "Nkpolu-Ust MFB", + "icon": null + }, + { + "code": "090578", + "name": "Iwade MFB Ltd", + "icon": null + }, + { + "code": "090587", + "name": "Microbiz MFB", + "icon": null + }, + { + "code": "090588", + "name": "Orisun MFB", + "icon": null + }, + { + "code": "090589", + "name": "Mercury MFB", + "icon": null + }, + { + "code": "090591", + "name": "Gabsyn Microfinance Bank Limited", + "icon": null + }, + { + "code": "090593", + "name": "Tasued Microfinance Bank", + "icon": null + }, + { + "code": "090602", + "name": "Kenechukwu Microfinance Bank", + "icon": null + }, + { + "code": "090950", + "name": "Waya Microfinance Bank", + "icon": null + }, + { + "code": "090598", + "name": "IBA Microfinance Bank", + "icon": null + }, + { + "code": "090584", + "name": "Island Microfinance Bank", + "icon": null + }, + { + "code": "090600", + "name": "Ave Maria Microfinance Bank", + "icon": null + }, + { + "code": "090608", + "name": "Akpo Microfinance Bank", + "icon": null + }, + { + "code": "090609", + "name": "Ummah Microfinance Bank", + "icon": null + }, + { + "code": "090610", + "name": "Amoye Microfinance Bank", + "icon": null + }, + { + "code": "090612", + "name": "Medef Microfinance Bank", + "icon": null + }, + { + "code": "090532", + "name": "IBOLO Microfinance Bank", + "icon": null + }, + { + "code": "090581", + "name": "Banc Corp MFB", + "icon": null + }, + { + "code": "090614", + "name": "Flourish MFB", + "icon": null + }, + { + "code": "090615", + "name": "Beststar MFB", + "icon": null + }, + { + "code": "090616", + "name": "Rayyan MFB", + "icon": null + }, + { + "code": "090603", + "name": "Macrod MFB", + "icon": null + }, + { + "code": "090634", + "name": "Cashbridge Microfinance Bank", + "icon": null + }, + { + "code": "090620", + "name": "Iyin Ekiti MFB", + "icon": null + }, + { + "code": "090611", + "name": "Creditville MFB", + "icon": null + }, + { + "code": "090623", + "name": "MAB Allianz MFB", + "icon": null + }, + { + "code": "100001", + "name": "FET", + "icon": null + }, + { + "code": "100002", + "name": "Paga", + "icon": null + }, + { + "code": "100003", + "name": "Parkway-ReadyCash", + "icon": null + }, + { + "code": "100004", + "name": "Opay Digital Services LTD", + "icon": null + }, + { + "code": "100005", + "name": "Cellulant", + "icon": null + }, + { + "code": "100006", + "name": "eTranzact", + "icon": null + }, + { + "code": "100007", + "name": "Stanbic IBTC @ease wallet", + "icon": null + }, + { + "code": "100008", + "name": "Ecobank Xpress Account", + "icon": null + }, + { + "code": "100009", + "name": "GTMobile", + "icon": null + }, + { + "code": "100010", + "name": "TeasyMobile", + "icon": null + }, + { + "code": "100011", + "name": "Mkudi", + "icon": null + }, + { + "code": "100012", + "name": "VTNetworks", + "icon": null + }, + { + "code": "100013", + "name": "AccessMobile", + "icon": null + }, + { + "code": "100014", + "name": "FBNMobile", + "icon": null + }, + { + "code": "100036", + "name": "Kegow (Chamsmobile)", + "icon": null + }, + { + "code": "100016", + "name": "FortisMobile", + "icon": null + }, + { + "code": "100017", + "name": "Hedonmark", + "icon": null + }, + { + "code": "100018", + "name": "ZenithMobile", + "icon": null + }, + { + "code": "100019", + "name": "Fidelity Mobile", + "icon": null + }, + { + "code": "100020", + "name": "MoneyBox", + "icon": null + }, + { + "code": "100021", + "name": "Eartholeum", + "icon": null + }, + { + "code": "100022", + "name": "GoMoney", + "icon": null + }, + { + "code": "100023", + "name": "TagPay", + "icon": null + }, + { + "code": "100025", + "name": "Zinternet Nigera Limited", + "icon": null + }, + { + "code": "100026", + "name": "One Finance", + "icon": null + }, + { + "code": "100029", + "name": "Innovectives Kesh", + "icon": null + }, + { + "code": "100030", + "name": "EcoMobile", + "icon": null + }, + { + "code": "100031", + "name": "FCMB Easy Account", + "icon": null + }, + { + "code": "100032", + "name": "Contec Global Infotech Limited (NowNow)", + "icon": null + }, + { + "code": "100033", + "name": "PalmPay Limited", + "icon": null + }, + { + "code": "100034", + "name": "Zenith Eazy Wallet", + "icon": null + }, + { + "code": "100052", + "name": "Access Yello", + "icon": null + }, + { + "code": "100035", + "name": "M36", + "icon": null + }, + { + "code": "100039", + "name": "TitanPaystack", + "icon": null + }, + { + "code": "080002", + "name": "Taj_Pinspay", + "icon": null + }, + { + "code": "100027", + "name": "Intellifin", + "icon": null + }, + { + "code": "110001", + "name": "PayAttitude Online", + "icon": null + }, + { + "code": "110002", + "name": "Flutterwave Technology Solutions Limited", + "icon": null + }, + { + "code": "110003", + "name": "Interswitch Limited", + "icon": null + }, + { + "code": "110004", + "name": "First Apple Limited", + "icon": null + }, + { + "code": "110005", + "name": "3line Card Management Limited", + "icon": null + }, + { + "code": "110006", + "name": "Paystack Payment Limited", + "icon": null + }, + { + "code": "110007", + "name": "Teamapt Limited", + "icon": null + }, + { + "code": "110014", + "name": "Cyberspace Limited", + "icon": null + }, + { + "code": "110015", + "name": "Vas2nets Limited", + "icon": null + }, + { + "code": "110017", + "name": "Crowdforce", + "icon": null + }, + { + "code": "110032", + "name": "Prophius", + "icon": null + }, + { + "code": "090202", + "name": "Accelerex Network Limited", + "icon": null + }, + { + "code": "999999", + "name": "NIP Virtual Bank", + "icon": null + }, + { + "code": "120001", + "name": "9Payment Service Bank", + "icon": null + }, + { + "code": "120002", + "name": "HopePSB", + "icon": null + }, + { + "code": "120003", + "name": "MoMo PSB", + "icon": null + }, + { + "code": "120004", + "name": "SmartCash PSB", + "icon": null + }, + { + "code": "090982", + "name": "Ethica MFB", + "icon": null + }, + { + "code": "090645", + "name": "Nombank MFB", + "icon": null + } +] \ No newline at end of file diff --git a/services/wallet/docs/docs.go b/services/wallet/docs/docs.go index b78390e..6b80d16 100644 --- a/services/wallet/docs/docs.go +++ b/services/wallet/docs/docs.go @@ -50,6 +50,32 @@ const docTemplate = `{ } } }, + "/wallet/balance": { + "get": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Fetch total balance across all wallets for the authenticated user.", + "produces": [ + "application/json" + ], + "tags": [ + "Wallet" + ], + "summary": "Get total wallet balance", + "responses": { + "200": { + "description": "Success", + "schema": { + "type": "object", + "additionalProperties": true + } + } + } + } + }, "/wallet/banks": { "get": { "security": [ @@ -628,6 +654,7 @@ const docTemplate = `{ "dto.CreateWalletDto": { "type": "object", "required": [ + "address", "dateOfBirth", "email", "firstname", @@ -645,6 +672,9 @@ const docTemplate = `{ "business" ] }, + "address": { + "type": "string" + }, "businessName": { "type": "string" }, diff --git a/services/wallet/docs/swagger.json b/services/wallet/docs/swagger.json index d59e033..e1d8ed9 100644 --- a/services/wallet/docs/swagger.json +++ b/services/wallet/docs/swagger.json @@ -44,6 +44,32 @@ } } }, + "/wallet/balance": { + "get": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Fetch total balance across all wallets for the authenticated user.", + "produces": [ + "application/json" + ], + "tags": [ + "Wallet" + ], + "summary": "Get total wallet balance", + "responses": { + "200": { + "description": "Success", + "schema": { + "type": "object", + "additionalProperties": true + } + } + } + } + }, "/wallet/banks": { "get": { "security": [ @@ -622,6 +648,7 @@ "dto.CreateWalletDto": { "type": "object", "required": [ + "address", "dateOfBirth", "email", "firstname", @@ -639,6 +666,9 @@ "business" ] }, + "address": { + "type": "string" + }, "businessName": { "type": "string" }, diff --git a/services/wallet/docs/swagger.yaml b/services/wallet/docs/swagger.yaml index 7096997..6dfe5b3 100644 --- a/services/wallet/docs/swagger.yaml +++ b/services/wallet/docs/swagger.yaml @@ -31,6 +31,8 @@ definitions: - individual - business type: string + address: + type: string businessName: type: string bvn: @@ -58,6 +60,7 @@ definitions: userId: type: string required: + - address - dateOfBirth - email - firstname @@ -181,6 +184,22 @@ paths: summary: Get wallet transactions tags: - Wallet + /wallet/balance: + get: + description: Fetch total balance across all wallets for the authenticated user. + produces: + - application/json + responses: + "200": + description: Success + schema: + additionalProperties: true + type: object + security: + - ApiKeyAuth: [] + summary: Get total wallet balance + tags: + - Wallet /wallet/banks: get: description: Retrieve a list of supported banks and their codes. diff --git a/services/wallet/main.go b/services/wallet/main.go index bcf4b2b..6c70199 100644 --- a/services/wallet/main.go +++ b/services/wallet/main.go @@ -31,18 +31,22 @@ import ( // @BasePath /api/v1 func main() { - log.Println("[WalletService] Starting main...") + app := gin.Default() + + // Load environment variables if err := constants.ConfigDotenv(); err != nil { - log.Fatalf("failed to load configuration: %v", err) + log.Fatalf("Error loading .env file: %v", err) } + // Initialize database connection db, err := config.GetDBConnection() if err != nil { - log.Fatalf("failed to connect to database: %v", err) + log.Fatalf("Error connecting to database: %v", err) } + // Run automigrations if err := config.RunAutoMigrations(db); err != nil { - log.Fatalf("failed to run migrations: %v", err) + log.Fatalf("Error running auto migrations: %v", err) } // Initialize Account Client @@ -51,32 +55,44 @@ func main() { log.Fatalf("failed to initialize account client: %v", err) } + // Middleware to inject db into context + app.Use(func(c *gin.Context) { + log.Printf("Incoming request: %s %s", c.Request.Method, c.Request.URL.Path) + c.Set("db", db) + c.Next() + }) + if constants.IsDevMode() { log.Println("Wallet service running in development mode") + gin.SetMode(gin.DebugMode) } else { log.Println("Wallet service running in production mode") + gin.SetMode(gin.ReleaseMode) } - lis, err := net.Listen("tcp", ":"+constants.GRPC_PORT) - if err != nil { - log.Fatalf("failed to open gRPC listener: %v", err) - } - - grpcSrv := grpc.NewServer() - pb.RegisterWalletServiceServer(grpcSrv, grpcserver.NewWalletServer(db, accClient)) + // Setup routes + router.SetupRoutes(app, db, accClient) - // Start Gin HTTP server - r := gin.Default() - router.SetupRoutes(r, db, accClient) + // Start gRPC server in a separate goroutine go func() { - log.Printf("Wallet HTTP service listening on :%s", constants.HTTP_PORT) - if err := r.Run(":" + constants.HTTP_PORT); err != nil { - log.Fatalf("failed to start HTTP server: %v", err) + lis, err := net.Listen("tcp", ":"+constants.GRPC_PORT) + if err != nil { + log.Fatalf("failed to listen: %v", err) + } + + grpcServer := grpc.NewServer() + walletServer := grpcserver.NewWalletServer(db, accClient) + pb.RegisterWalletServiceServer(grpcServer, walletServer) + + log.Println("gRPC server listening on :" + constants.GRPC_PORT) + if err := grpcServer.Serve(lis); err != nil { + log.Fatalf("failed to serve: %v", err) } }() - log.Printf("Wallet gRPC service listening on :%s", constants.GRPC_PORT) - if err := grpcSrv.Serve(lis); err != nil { - log.Fatalf("failed to start gRPC server: %v", err) + // Start HTTP server + log.Println("HTTP server listening on :" + constants.HTTP_PORT) + if err := app.Run(":" + constants.HTTP_PORT); err != nil { + log.Fatalf("failed to run HTTP server: %v", err) } } diff --git a/services/wallet/middlewares/auth.go b/services/wallet/middlewares/auth.go index 9b55ab1..09252a8 100644 --- a/services/wallet/middlewares/auth.go +++ b/services/wallet/middlewares/auth.go @@ -19,6 +19,7 @@ import ( // Authenticate is a middleware that checks if the user is authenticated by calling Account Service via gRPC func Authenticate() gin.HandlerFunc { return func(c *gin.Context) { + log.Printf("DEBUG: Authenticate middleware triggered for: %s", c.Request.URL.Path) // Extract the token from the Authorization header or Cookie var tokenString string authHeader := c.GetHeader("Authorization") diff --git a/services/wallet/models/account.go b/services/wallet/models/account.go index 5ecd875..cfdbcf9 100644 --- a/services/wallet/models/account.go +++ b/services/wallet/models/account.go @@ -23,6 +23,7 @@ type Account struct { AccountPin string `json:"accountPin"` // PIN or security code for account access Status string `json:"status"` Tier string `json:"tier"` // Unique identifier for the account on the provider's system + Balance float64 `json:"balance" gorm:"default:0"` // Local wallet balance CreatedAt time.Time `json:"createdAt"` // Timestamp when the account was created UpdatedAt time.Time `json:"updatedAt"` // Timestamp for last update to the account DeletedAt *time.Time `json:"deletedAt,omitempty"` // Timestamp for soft deletion, nil if active diff --git a/services/wallet/proto/connection/pb/connection/pb/account.pb.go b/services/wallet/proto/connection/pb/connection/pb/account.pb.go new file mode 100644 index 0000000..fe8593d --- /dev/null +++ b/services/wallet/proto/connection/pb/connection/pb/account.pb.go @@ -0,0 +1,866 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.35.1 +// protoc v6.33.3 +// source: account.proto + +package pb + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type ValidateTokenRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Token string `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"` +} + +func (x *ValidateTokenRequest) Reset() { + *x = ValidateTokenRequest{} + mi := &file_account_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ValidateTokenRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ValidateTokenRequest) ProtoMessage() {} + +func (x *ValidateTokenRequest) ProtoReflect() protoreflect.Message { + mi := &file_account_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ValidateTokenRequest.ProtoReflect.Descriptor instead. +func (*ValidateTokenRequest) Descriptor() ([]byte, []int) { + return file_account_proto_rawDescGZIP(), []int{0} +} + +func (x *ValidateTokenRequest) GetToken() string { + if x != nil { + return x.Token + } + return "" +} + +type Preference struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Theme string `protobuf:"bytes,1,opt,name=theme,proto3" json:"theme,omitempty"` + Language string `protobuf:"bytes,2,opt,name=language,proto3" json:"language,omitempty"` +} + +func (x *Preference) Reset() { + *x = Preference{} + mi := &file_account_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Preference) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Preference) ProtoMessage() {} + +func (x *Preference) ProtoReflect() protoreflect.Message { + mi := &file_account_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Preference.ProtoReflect.Descriptor instead. +func (*Preference) Descriptor() ([]byte, []int) { + return file_account_proto_rawDescGZIP(), []int{1} +} + +func (x *Preference) GetTheme() string { + if x != nil { + return x.Theme + } + return "" +} + +func (x *Preference) GetLanguage() string { + if x != nil { + return x.Language + } + return "" +} + +type PersonData struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + FirstName string `protobuf:"bytes,1,opt,name=firstName,proto3" json:"firstName,omitempty"` + LastName string `protobuf:"bytes,2,opt,name=lastName,proto3" json:"lastName,omitempty"` +} + +func (x *PersonData) Reset() { + *x = PersonData{} + mi := &file_account_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PersonData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PersonData) ProtoMessage() {} + +func (x *PersonData) ProtoReflect() protoreflect.Message { + mi := &file_account_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PersonData.ProtoReflect.Descriptor instead. +func (*PersonData) Descriptor() ([]byte, []int) { + return file_account_proto_rawDescGZIP(), []int{2} +} + +func (x *PersonData) GetFirstName() string { + if x != nil { + return x.FirstName + } + return "" +} + +func (x *PersonData) GetLastName() string { + if x != nil { + return x.LastName + } + return "" +} + +type UserData struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + PersonData *PersonData `protobuf:"bytes,1,opt,name=personData,proto3" json:"personData,omitempty"` + Email string `protobuf:"bytes,2,opt,name=email,proto3" json:"email,omitempty"` + Phone string `protobuf:"bytes,3,opt,name=phone,proto3" json:"phone,omitempty"` + Username string `protobuf:"bytes,4,opt,name=username,proto3" json:"username,omitempty"` + ProfilePic string `protobuf:"bytes,5,opt,name=profilePic,proto3" json:"profilePic,omitempty"` + TwoFactorEnabled bool `protobuf:"varint,6,opt,name=twoFactorEnabled,proto3" json:"twoFactorEnabled,omitempty"` + IsFirstTime bool `protobuf:"varint,7,opt,name=isFirstTime,proto3" json:"isFirstTime,omitempty"` + EmailVerified bool `protobuf:"varint,8,opt,name=emailVerified,proto3" json:"emailVerified,omitempty"` + PhoneVerified bool `protobuf:"varint,9,opt,name=phoneVerified,proto3" json:"phoneVerified,omitempty"` + TwoFactorMethod string `protobuf:"bytes,10,opt,name=twoFactorMethod,proto3" json:"twoFactorMethod,omitempty"` + Status string `protobuf:"bytes,11,opt,name=status,proto3" json:"status,omitempty"` + Preference *Preference `protobuf:"bytes,12,opt,name=preference,proto3" json:"preference,omitempty"` + LastLogin string `protobuf:"bytes,13,opt,name=lastLogin,proto3" json:"lastLogin,omitempty"` + LastPasswordChange string `protobuf:"bytes,14,opt,name=lastPasswordChange,proto3" json:"lastPasswordChange,omitempty"` + Roles []*Role `protobuf:"bytes,15,rep,name=roles,proto3" json:"roles,omitempty"` + CreatedAt string `protobuf:"bytes,16,opt,name=createdAt,proto3" json:"createdAt,omitempty"` + UpdatedAt string `protobuf:"bytes,17,opt,name=updatedAt,proto3" json:"updatedAt,omitempty"` +} + +func (x *UserData) Reset() { + *x = UserData{} + mi := &file_account_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *UserData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UserData) ProtoMessage() {} + +func (x *UserData) ProtoReflect() protoreflect.Message { + mi := &file_account_proto_msgTypes[3] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UserData.ProtoReflect.Descriptor instead. +func (*UserData) Descriptor() ([]byte, []int) { + return file_account_proto_rawDescGZIP(), []int{3} +} + +func (x *UserData) GetPersonData() *PersonData { + if x != nil { + return x.PersonData + } + return nil +} + +func (x *UserData) GetEmail() string { + if x != nil { + return x.Email + } + return "" +} + +func (x *UserData) GetPhone() string { + if x != nil { + return x.Phone + } + return "" +} + +func (x *UserData) GetUsername() string { + if x != nil { + return x.Username + } + return "" +} + +func (x *UserData) GetProfilePic() string { + if x != nil { + return x.ProfilePic + } + return "" +} + +func (x *UserData) GetTwoFactorEnabled() bool { + if x != nil { + return x.TwoFactorEnabled + } + return false +} + +func (x *UserData) GetIsFirstTime() bool { + if x != nil { + return x.IsFirstTime + } + return false +} + +func (x *UserData) GetEmailVerified() bool { + if x != nil { + return x.EmailVerified + } + return false +} + +func (x *UserData) GetPhoneVerified() bool { + if x != nil { + return x.PhoneVerified + } + return false +} + +func (x *UserData) GetTwoFactorMethod() string { + if x != nil { + return x.TwoFactorMethod + } + return "" +} + +func (x *UserData) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +func (x *UserData) GetPreference() *Preference { + if x != nil { + return x.Preference + } + return nil +} + +func (x *UserData) GetLastLogin() string { + if x != nil { + return x.LastLogin + } + return "" +} + +func (x *UserData) GetLastPasswordChange() string { + if x != nil { + return x.LastPasswordChange + } + return "" +} + +func (x *UserData) GetRoles() []*Role { + if x != nil { + return x.Roles + } + return nil +} + +func (x *UserData) GetCreatedAt() string { + if x != nil { + return x.CreatedAt + } + return "" +} + +func (x *UserData) GetUpdatedAt() string { + if x != nil { + return x.UpdatedAt + } + return "" +} + +type Permission struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id int32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` +} + +func (x *Permission) Reset() { + *x = Permission{} + mi := &file_account_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Permission) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Permission) ProtoMessage() {} + +func (x *Permission) ProtoReflect() protoreflect.Message { + mi := &file_account_proto_msgTypes[4] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Permission.ProtoReflect.Descriptor instead. +func (*Permission) Descriptor() ([]byte, []int) { + return file_account_proto_rawDescGZIP(), []int{4} +} + +func (x *Permission) GetId() int32 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *Permission) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *Permission) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +type Role struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id uint32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` + Permissions []*Permission `protobuf:"bytes,4,rep,name=permissions,proto3" json:"permissions,omitempty"` + CreatedAt *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=createdAt,proto3" json:"createdAt,omitempty"` + UpdatedAt *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=updatedAt,proto3" json:"updatedAt,omitempty"` +} + +func (x *Role) Reset() { + *x = Role{} + mi := &file_account_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Role) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Role) ProtoMessage() {} + +func (x *Role) ProtoReflect() protoreflect.Message { + mi := &file_account_proto_msgTypes[5] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Role.ProtoReflect.Descriptor instead. +func (*Role) Descriptor() ([]byte, []int) { + return file_account_proto_rawDescGZIP(), []int{5} +} + +func (x *Role) GetId() uint32 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *Role) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *Role) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *Role) GetPermissions() []*Permission { + if x != nil { + return x.Permissions + } + return nil +} + +func (x *Role) GetCreatedAt() *timestamppb.Timestamp { + if x != nil { + return x.CreatedAt + } + return nil +} + +func (x *Role) GetUpdatedAt() *timestamppb.Timestamp { + if x != nil { + return x.UpdatedAt + } + return nil +} + +type ValidateTokenResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Valid bool `protobuf:"varint,1,opt,name=valid,proto3" json:"valid,omitempty"` + UserId string `protobuf:"bytes,2,opt,name=userId,proto3" json:"userId,omitempty"` + Email string `protobuf:"bytes,3,opt,name=email,proto3" json:"email,omitempty"` + Exp float64 `protobuf:"fixed64,4,opt,name=exp,proto3" json:"exp,omitempty"` // Expiration time in seconds + Error string `protobuf:"bytes,5,opt,name=error,proto3" json:"error,omitempty"` // Error message if validation fails + UserData *UserData `protobuf:"bytes,6,opt,name=userData,proto3" json:"userData,omitempty"` // Additional user data if available +} + +func (x *ValidateTokenResponse) Reset() { + *x = ValidateTokenResponse{} + mi := &file_account_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ValidateTokenResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ValidateTokenResponse) ProtoMessage() {} + +func (x *ValidateTokenResponse) ProtoReflect() protoreflect.Message { + mi := &file_account_proto_msgTypes[6] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ValidateTokenResponse.ProtoReflect.Descriptor instead. +func (*ValidateTokenResponse) Descriptor() ([]byte, []int) { + return file_account_proto_rawDescGZIP(), []int{6} +} + +func (x *ValidateTokenResponse) GetValid() bool { + if x != nil { + return x.Valid + } + return false +} + +func (x *ValidateTokenResponse) GetUserId() string { + if x != nil { + return x.UserId + } + return "" +} + +func (x *ValidateTokenResponse) GetEmail() string { + if x != nil { + return x.Email + } + return "" +} + +func (x *ValidateTokenResponse) GetExp() float64 { + if x != nil { + return x.Exp + } + return 0 +} + +func (x *ValidateTokenResponse) GetError() string { + if x != nil { + return x.Error + } + return "" +} + +func (x *ValidateTokenResponse) GetUserData() *UserData { + if x != nil { + return x.UserData + } + return nil +} + +type GetUserRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + UserId string `protobuf:"bytes,1,opt,name=userId,proto3" json:"userId,omitempty"` +} + +func (x *GetUserRequest) Reset() { + *x = GetUserRequest{} + mi := &file_account_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetUserRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetUserRequest) ProtoMessage() {} + +func (x *GetUserRequest) ProtoReflect() protoreflect.Message { + mi := &file_account_proto_msgTypes[7] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetUserRequest.ProtoReflect.Descriptor instead. +func (*GetUserRequest) Descriptor() ([]byte, []int) { + return file_account_proto_rawDescGZIP(), []int{7} +} + +func (x *GetUserRequest) GetUserId() string { + if x != nil { + return x.UserId + } + return "" +} + +type GetUserResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Success bool `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"` + UserData *UserData `protobuf:"bytes,2,opt,name=userData,proto3" json:"userData,omitempty"` + Message string `protobuf:"bytes,3,opt,name=message,proto3" json:"message,omitempty"` +} + +func (x *GetUserResponse) Reset() { + *x = GetUserResponse{} + mi := &file_account_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetUserResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetUserResponse) ProtoMessage() {} + +func (x *GetUserResponse) ProtoReflect() protoreflect.Message { + mi := &file_account_proto_msgTypes[8] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetUserResponse.ProtoReflect.Descriptor instead. +func (*GetUserResponse) Descriptor() ([]byte, []int) { + return file_account_proto_rawDescGZIP(), []int{8} +} + +func (x *GetUserResponse) GetSuccess() bool { + if x != nil { + return x.Success + } + return false +} + +func (x *GetUserResponse) GetUserData() *UserData { + if x != nil { + return x.UserData + } + return nil +} + +func (x *GetUserResponse) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +var File_account_proto protoreflect.FileDescriptor + +var file_account_proto_rawDesc = []byte{ + 0x0a, 0x0d, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, + 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x2c, 0x0a, 0x14, 0x56, 0x61, 0x6c, + 0x69, 0x64, 0x61, 0x74, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x3e, 0x0a, 0x0a, 0x50, 0x72, 0x65, 0x66, 0x65, + 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x68, 0x65, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x68, 0x65, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6c, + 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, + 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x22, 0x46, 0x0a, 0x0a, 0x50, 0x65, 0x72, 0x73, 0x6f, + 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1c, 0x0a, 0x09, 0x66, 0x69, 0x72, 0x73, 0x74, 0x4e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x69, 0x72, 0x73, 0x74, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x22, + 0xe7, 0x04, 0x0a, 0x08, 0x55, 0x73, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x33, 0x0a, 0x0a, + 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x13, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x50, 0x65, 0x72, 0x73, 0x6f, + 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0a, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x44, 0x61, 0x74, + 0x61, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x68, 0x6f, 0x6e, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x12, 0x1a, 0x0a, + 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x72, 0x6f, + 0x66, 0x69, 0x6c, 0x65, 0x50, 0x69, 0x63, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, + 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x50, 0x69, 0x63, 0x12, 0x2a, 0x0a, 0x10, 0x74, 0x77, 0x6f, + 0x46, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x10, 0x74, 0x77, 0x6f, 0x46, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x45, 0x6e, + 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x73, 0x46, 0x69, 0x72, 0x73, 0x74, + 0x54, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x73, 0x46, 0x69, + 0x72, 0x73, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x65, 0x6d, 0x61, 0x69, 0x6c, + 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, + 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x12, 0x24, 0x0a, + 0x0d, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x18, 0x09, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x56, 0x65, 0x72, 0x69, 0x66, + 0x69, 0x65, 0x64, 0x12, 0x28, 0x0a, 0x0f, 0x74, 0x77, 0x6f, 0x46, 0x61, 0x63, 0x74, 0x6f, 0x72, + 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x74, 0x77, + 0x6f, 0x46, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x16, 0x0a, + 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x33, 0x0a, 0x0a, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, + 0x6e, 0x63, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x2e, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x0a, + 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x61, + 0x73, 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6c, + 0x61, 0x73, 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x2e, 0x0a, 0x12, 0x6c, 0x61, 0x73, 0x74, + 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x0e, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x6c, 0x61, 0x73, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, + 0x72, 0x64, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x23, 0x0a, 0x05, 0x72, 0x6f, 0x6c, 0x65, + 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x1c, 0x0a, + 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x75, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x22, 0x52, 0x0a, 0x0a, 0x50, 0x65, 0x72, + 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xf7, 0x01, + 0x0a, 0x04, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x35, 0x0a, 0x0b, + 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x50, 0x65, 0x72, 0x6d, + 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0x12, 0x38, 0x0a, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x38, 0x0a, + 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x22, 0xb2, 0x01, 0x0a, 0x15, 0x56, 0x61, 0x6c, 0x69, + 0x64, 0x61, 0x74, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, + 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x78, 0x70, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x01, 0x52, 0x03, 0x65, 0x78, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x2d, 0x0a, + 0x08, 0x75, 0x73, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x11, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x44, 0x61, + 0x74, 0x61, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x22, 0x28, 0x0a, 0x0e, + 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, + 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x74, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, + 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x12, 0x2d, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, + 0x55, 0x73, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x44, 0x61, + 0x74, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x32, 0x9b, 0x01, 0x0a, + 0x0b, 0x41, 0x75, 0x74, 0x68, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x4e, 0x0a, 0x0d, + 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1d, 0x2e, + 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, + 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x61, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x07, + 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x12, 0x17, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x18, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, + 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x12, 0x5a, 0x10, 0x63, 0x6f, + 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x70, 0x62, 0x3b, 0x70, 0x62, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_account_proto_rawDescOnce sync.Once + file_account_proto_rawDescData = file_account_proto_rawDesc +) + +func file_account_proto_rawDescGZIP() []byte { + file_account_proto_rawDescOnce.Do(func() { + file_account_proto_rawDescData = protoimpl.X.CompressGZIP(file_account_proto_rawDescData) + }) + return file_account_proto_rawDescData +} + +var file_account_proto_msgTypes = make([]protoimpl.MessageInfo, 9) +var file_account_proto_goTypes = []any{ + (*ValidateTokenRequest)(nil), // 0: account.ValidateTokenRequest + (*Preference)(nil), // 1: account.Preference + (*PersonData)(nil), // 2: account.PersonData + (*UserData)(nil), // 3: account.UserData + (*Permission)(nil), // 4: account.Permission + (*Role)(nil), // 5: account.Role + (*ValidateTokenResponse)(nil), // 6: account.ValidateTokenResponse + (*GetUserRequest)(nil), // 7: account.GetUserRequest + (*GetUserResponse)(nil), // 8: account.GetUserResponse + (*timestamppb.Timestamp)(nil), // 9: google.protobuf.Timestamp +} +var file_account_proto_depIdxs = []int32{ + 2, // 0: account.UserData.personData:type_name -> account.PersonData + 1, // 1: account.UserData.preference:type_name -> account.Preference + 5, // 2: account.UserData.roles:type_name -> account.Role + 4, // 3: account.Role.permissions:type_name -> account.Permission + 9, // 4: account.Role.createdAt:type_name -> google.protobuf.Timestamp + 9, // 5: account.Role.updatedAt:type_name -> google.protobuf.Timestamp + 3, // 6: account.ValidateTokenResponse.userData:type_name -> account.UserData + 3, // 7: account.GetUserResponse.userData:type_name -> account.UserData + 0, // 8: account.AuthService.ValidateToken:input_type -> account.ValidateTokenRequest + 7, // 9: account.AuthService.GetUser:input_type -> account.GetUserRequest + 6, // 10: account.AuthService.ValidateToken:output_type -> account.ValidateTokenResponse + 8, // 11: account.AuthService.GetUser:output_type -> account.GetUserResponse + 10, // [10:12] is the sub-list for method output_type + 8, // [8:10] is the sub-list for method input_type + 8, // [8:8] is the sub-list for extension type_name + 8, // [8:8] is the sub-list for extension extendee + 0, // [0:8] is the sub-list for field type_name +} + +func init() { file_account_proto_init() } +func file_account_proto_init() { + if File_account_proto != nil { + return + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_account_proto_rawDesc, + NumEnums: 0, + NumMessages: 9, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_account_proto_goTypes, + DependencyIndexes: file_account_proto_depIdxs, + MessageInfos: file_account_proto_msgTypes, + }.Build() + File_account_proto = out.File + file_account_proto_rawDesc = nil + file_account_proto_goTypes = nil + file_account_proto_depIdxs = nil +} diff --git a/services/wallet/proto/connection/pb/connection/pb/account_grpc.pb.go b/services/wallet/proto/connection/pb/connection/pb/account_grpc.pb.go new file mode 100644 index 0000000..72cc12b --- /dev/null +++ b/services/wallet/proto/connection/pb/connection/pb/account_grpc.pb.go @@ -0,0 +1,159 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.5.1 +// - protoc v6.33.3 +// source: account.proto + +package pb + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 + +const ( + AuthService_ValidateToken_FullMethodName = "/account.AuthService/ValidateToken" + AuthService_GetUser_FullMethodName = "/account.AuthService/GetUser" +) + +// AuthServiceClient is the client API for AuthService service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type AuthServiceClient interface { + ValidateToken(ctx context.Context, in *ValidateTokenRequest, opts ...grpc.CallOption) (*ValidateTokenResponse, error) + GetUser(ctx context.Context, in *GetUserRequest, opts ...grpc.CallOption) (*GetUserResponse, error) +} + +type authServiceClient struct { + cc grpc.ClientConnInterface +} + +func NewAuthServiceClient(cc grpc.ClientConnInterface) AuthServiceClient { + return &authServiceClient{cc} +} + +func (c *authServiceClient) ValidateToken(ctx context.Context, in *ValidateTokenRequest, opts ...grpc.CallOption) (*ValidateTokenResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(ValidateTokenResponse) + err := c.cc.Invoke(ctx, AuthService_ValidateToken_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *authServiceClient) GetUser(ctx context.Context, in *GetUserRequest, opts ...grpc.CallOption) (*GetUserResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(GetUserResponse) + err := c.cc.Invoke(ctx, AuthService_GetUser_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +// AuthServiceServer is the server API for AuthService service. +// All implementations must embed UnimplementedAuthServiceServer +// for forward compatibility. +type AuthServiceServer interface { + ValidateToken(context.Context, *ValidateTokenRequest) (*ValidateTokenResponse, error) + GetUser(context.Context, *GetUserRequest) (*GetUserResponse, error) + mustEmbedUnimplementedAuthServiceServer() +} + +// UnimplementedAuthServiceServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedAuthServiceServer struct{} + +func (UnimplementedAuthServiceServer) ValidateToken(context.Context, *ValidateTokenRequest) (*ValidateTokenResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ValidateToken not implemented") +} +func (UnimplementedAuthServiceServer) GetUser(context.Context, *GetUserRequest) (*GetUserResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetUser not implemented") +} +func (UnimplementedAuthServiceServer) mustEmbedUnimplementedAuthServiceServer() {} +func (UnimplementedAuthServiceServer) testEmbeddedByValue() {} + +// UnsafeAuthServiceServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to AuthServiceServer will +// result in compilation errors. +type UnsafeAuthServiceServer interface { + mustEmbedUnimplementedAuthServiceServer() +} + +func RegisterAuthServiceServer(s grpc.ServiceRegistrar, srv AuthServiceServer) { + // If the following call pancis, it indicates UnimplementedAuthServiceServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } + s.RegisterService(&AuthService_ServiceDesc, srv) +} + +func _AuthService_ValidateToken_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ValidateTokenRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AuthServiceServer).ValidateToken(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: AuthService_ValidateToken_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AuthServiceServer).ValidateToken(ctx, req.(*ValidateTokenRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _AuthService_GetUser_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetUserRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AuthServiceServer).GetUser(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: AuthService_GetUser_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AuthServiceServer).GetUser(ctx, req.(*GetUserRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// AuthService_ServiceDesc is the grpc.ServiceDesc for AuthService service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var AuthService_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "account.AuthService", + HandlerType: (*AuthServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "ValidateToken", + Handler: _AuthService_ValidateToken_Handler, + }, + { + MethodName: "GetUser", + Handler: _AuthService_GetUser_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "account.proto", +} diff --git a/services/wallet/proto/connection/pb/github.com/PayGidi/WalletService/proto/connection/pb/wallet.pb.go b/services/wallet/proto/connection/pb/github.com/PayGidi/WalletService/proto/connection/pb/wallet.pb.go new file mode 100644 index 0000000..085ab3e --- /dev/null +++ b/services/wallet/proto/connection/pb/github.com/PayGidi/WalletService/proto/connection/pb/wallet.pb.go @@ -0,0 +1,2142 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.35.1 +// protoc v6.33.3 +// source: wallet.proto + +package pb + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type CreateWalletRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Firstname string `protobuf:"bytes,1,opt,name=firstname,proto3" json:"firstname,omitempty"` + Middlename string `protobuf:"bytes,2,opt,name=middlename,proto3" json:"middlename,omitempty"` + Lastname string `protobuf:"bytes,3,opt,name=lastname,proto3" json:"lastname,omitempty"` + Nin string `protobuf:"bytes,4,opt,name=nin,proto3" json:"nin,omitempty"` + DateOfBirth string `protobuf:"bytes,5,opt,name=dateOfBirth,proto3" json:"dateOfBirth,omitempty"` + Bvn string `protobuf:"bytes,6,opt,name=bvn,proto3" json:"bvn,omitempty"` + Phone string `protobuf:"bytes,7,opt,name=phone,proto3" json:"phone,omitempty"` + Email string `protobuf:"bytes,8,opt,name=email,proto3" json:"email,omitempty"` + Gender string `protobuf:"bytes,9,opt,name=gender,proto3" json:"gender,omitempty"` + UserId string `protobuf:"bytes,10,opt,name=userId,proto3" json:"userId,omitempty"` + AccountType string `protobuf:"bytes,11,opt,name=accountType,proto3" json:"accountType,omitempty"` + BusinessName string `protobuf:"bytes,12,opt,name=businessName,proto3" json:"businessName,omitempty"` + Address string `protobuf:"bytes,13,opt,name=address,proto3" json:"address,omitempty"` +} + +func (x *CreateWalletRequest) Reset() { + *x = CreateWalletRequest{} + mi := &file_wallet_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *CreateWalletRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateWalletRequest) ProtoMessage() {} + +func (x *CreateWalletRequest) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CreateWalletRequest.ProtoReflect.Descriptor instead. +func (*CreateWalletRequest) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{0} +} + +func (x *CreateWalletRequest) GetFirstname() string { + if x != nil { + return x.Firstname + } + return "" +} + +func (x *CreateWalletRequest) GetMiddlename() string { + if x != nil { + return x.Middlename + } + return "" +} + +func (x *CreateWalletRequest) GetLastname() string { + if x != nil { + return x.Lastname + } + return "" +} + +func (x *CreateWalletRequest) GetNin() string { + if x != nil { + return x.Nin + } + return "" +} + +func (x *CreateWalletRequest) GetDateOfBirth() string { + if x != nil { + return x.DateOfBirth + } + return "" +} + +func (x *CreateWalletRequest) GetBvn() string { + if x != nil { + return x.Bvn + } + return "" +} + +func (x *CreateWalletRequest) GetPhone() string { + if x != nil { + return x.Phone + } + return "" +} + +func (x *CreateWalletRequest) GetEmail() string { + if x != nil { + return x.Email + } + return "" +} + +func (x *CreateWalletRequest) GetGender() string { + if x != nil { + return x.Gender + } + return "" +} + +func (x *CreateWalletRequest) GetUserId() string { + if x != nil { + return x.UserId + } + return "" +} + +func (x *CreateWalletRequest) GetAccountType() string { + if x != nil { + return x.AccountType + } + return "" +} + +func (x *CreateWalletRequest) GetBusinessName() string { + if x != nil { + return x.BusinessName + } + return "" +} + +func (x *CreateWalletRequest) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +type CreateWalletResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Success bool `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"` + Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` + Message string `protobuf:"bytes,3,opt,name=message,proto3" json:"message,omitempty"` + Firstname string `protobuf:"bytes,4,opt,name=firstname,proto3" json:"firstname,omitempty"` + Middlename string `protobuf:"bytes,5,opt,name=middlename,proto3" json:"middlename,omitempty"` + Lastname string `protobuf:"bytes,6,opt,name=lastname,proto3" json:"lastname,omitempty"` + AccountNo string `protobuf:"bytes,7,opt,name=accountNo,proto3" json:"accountNo,omitempty"` + CurrentTier string `protobuf:"bytes,8,opt,name=currentTier,proto3" json:"currentTier,omitempty"` + CustomerIdentifier string `protobuf:"bytes,9,opt,name=customerIdentifier,proto3" json:"customerIdentifier,omitempty"` +} + +func (x *CreateWalletResponse) Reset() { + *x = CreateWalletResponse{} + mi := &file_wallet_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *CreateWalletResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateWalletResponse) ProtoMessage() {} + +func (x *CreateWalletResponse) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CreateWalletResponse.ProtoReflect.Descriptor instead. +func (*CreateWalletResponse) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{1} +} + +func (x *CreateWalletResponse) GetSuccess() bool { + if x != nil { + return x.Success + } + return false +} + +func (x *CreateWalletResponse) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *CreateWalletResponse) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +func (x *CreateWalletResponse) GetFirstname() string { + if x != nil { + return x.Firstname + } + return "" +} + +func (x *CreateWalletResponse) GetMiddlename() string { + if x != nil { + return x.Middlename + } + return "" +} + +func (x *CreateWalletResponse) GetLastname() string { + if x != nil { + return x.Lastname + } + return "" +} + +func (x *CreateWalletResponse) GetAccountNo() string { + if x != nil { + return x.AccountNo + } + return "" +} + +func (x *CreateWalletResponse) GetCurrentTier() string { + if x != nil { + return x.CurrentTier + } + return "" +} + +func (x *CreateWalletResponse) GetCustomerIdentifier() string { + if x != nil { + return x.CustomerIdentifier + } + return "" +} + +type InitiatePaymentRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Amount int64 `protobuf:"varint,1,opt,name=amount,proto3" json:"amount,omitempty"` // in kobo + Email string `protobuf:"bytes,2,opt,name=email,proto3" json:"email,omitempty"` + Currency string `protobuf:"bytes,3,opt,name=currency,proto3" json:"currency,omitempty"` +} + +func (x *InitiatePaymentRequest) Reset() { + *x = InitiatePaymentRequest{} + mi := &file_wallet_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *InitiatePaymentRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*InitiatePaymentRequest) ProtoMessage() {} + +func (x *InitiatePaymentRequest) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use InitiatePaymentRequest.ProtoReflect.Descriptor instead. +func (*InitiatePaymentRequest) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{2} +} + +func (x *InitiatePaymentRequest) GetAmount() int64 { + if x != nil { + return x.Amount + } + return 0 +} + +func (x *InitiatePaymentRequest) GetEmail() string { + if x != nil { + return x.Email + } + return "" +} + +func (x *InitiatePaymentRequest) GetCurrency() string { + if x != nil { + return x.Currency + } + return "" +} + +type InitiatePaymentResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Success bool `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"` + Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` + Message string `protobuf:"bytes,3,opt,name=message,proto3" json:"message,omitempty"` + CheckoutUrl string `protobuf:"bytes,4,opt,name=checkoutUrl,proto3" json:"checkoutUrl,omitempty"` +} + +func (x *InitiatePaymentResponse) Reset() { + *x = InitiatePaymentResponse{} + mi := &file_wallet_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *InitiatePaymentResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*InitiatePaymentResponse) ProtoMessage() {} + +func (x *InitiatePaymentResponse) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[3] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use InitiatePaymentResponse.ProtoReflect.Descriptor instead. +func (*InitiatePaymentResponse) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{3} +} + +func (x *InitiatePaymentResponse) GetSuccess() bool { + if x != nil { + return x.Success + } + return false +} + +func (x *InitiatePaymentResponse) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *InitiatePaymentResponse) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +func (x *InitiatePaymentResponse) GetCheckoutUrl() string { + if x != nil { + return x.CheckoutUrl + } + return "" +} + +type InitiateTransferRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TransactionReference string `protobuf:"bytes,1,opt,name=transactionReference,proto3" json:"transactionReference,omitempty"` + Amount int64 `protobuf:"varint,2,opt,name=amount,proto3" json:"amount,omitempty"` // in kobo + BankCode string `protobuf:"bytes,3,opt,name=bankCode,proto3" json:"bankCode,omitempty"` + AccountNumber string `protobuf:"bytes,4,opt,name=accountNumber,proto3" json:"accountNumber,omitempty"` + AccountName string `protobuf:"bytes,5,opt,name=accountName,proto3" json:"accountName,omitempty"` + Remark string `protobuf:"bytes,6,opt,name=remark,proto3" json:"remark,omitempty"` +} + +func (x *InitiateTransferRequest) Reset() { + *x = InitiateTransferRequest{} + mi := &file_wallet_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *InitiateTransferRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*InitiateTransferRequest) ProtoMessage() {} + +func (x *InitiateTransferRequest) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[4] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use InitiateTransferRequest.ProtoReflect.Descriptor instead. +func (*InitiateTransferRequest) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{4} +} + +func (x *InitiateTransferRequest) GetTransactionReference() string { + if x != nil { + return x.TransactionReference + } + return "" +} + +func (x *InitiateTransferRequest) GetAmount() int64 { + if x != nil { + return x.Amount + } + return 0 +} + +func (x *InitiateTransferRequest) GetBankCode() string { + if x != nil { + return x.BankCode + } + return "" +} + +func (x *InitiateTransferRequest) GetAccountNumber() string { + if x != nil { + return x.AccountNumber + } + return "" +} + +func (x *InitiateTransferRequest) GetAccountName() string { + if x != nil { + return x.AccountName + } + return "" +} + +func (x *InitiateTransferRequest) GetRemark() string { + if x != nil { + return x.Remark + } + return "" +} + +type InitiateTransferResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Success bool `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"` + Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` + Message string `protobuf:"bytes,3,opt,name=message,proto3" json:"message,omitempty"` + TransactionReference string `protobuf:"bytes,4,opt,name=transactionReference,proto3" json:"transactionReference,omitempty"` +} + +func (x *InitiateTransferResponse) Reset() { + *x = InitiateTransferResponse{} + mi := &file_wallet_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *InitiateTransferResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*InitiateTransferResponse) ProtoMessage() {} + +func (x *InitiateTransferResponse) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[5] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use InitiateTransferResponse.ProtoReflect.Descriptor instead. +func (*InitiateTransferResponse) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{5} +} + +func (x *InitiateTransferResponse) GetSuccess() bool { + if x != nil { + return x.Success + } + return false +} + +func (x *InitiateTransferResponse) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *InitiateTransferResponse) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +func (x *InitiateTransferResponse) GetTransactionReference() string { + if x != nil { + return x.TransactionReference + } + return "" +} + +type GetTransactionsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + CustomerIdentifier string `protobuf:"bytes,1,opt,name=customerIdentifier,proto3" json:"customerIdentifier,omitempty"` +} + +func (x *GetTransactionsRequest) Reset() { + *x = GetTransactionsRequest{} + mi := &file_wallet_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetTransactionsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetTransactionsRequest) ProtoMessage() {} + +func (x *GetTransactionsRequest) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[6] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetTransactionsRequest.ProtoReflect.Descriptor instead. +func (*GetTransactionsRequest) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{6} +} + +func (x *GetTransactionsRequest) GetCustomerIdentifier() string { + if x != nil { + return x.CustomerIdentifier + } + return "" +} + +type GetTransactionsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Success bool `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"` + Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` + Transactions []*TransactionData `protobuf:"bytes,3,rep,name=transactions,proto3" json:"transactions,omitempty"` +} + +func (x *GetTransactionsResponse) Reset() { + *x = GetTransactionsResponse{} + mi := &file_wallet_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetTransactionsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetTransactionsResponse) ProtoMessage() {} + +func (x *GetTransactionsResponse) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[7] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetTransactionsResponse.ProtoReflect.Descriptor instead. +func (*GetTransactionsResponse) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{7} +} + +func (x *GetTransactionsResponse) GetSuccess() bool { + if x != nil { + return x.Success + } + return false +} + +func (x *GetTransactionsResponse) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +func (x *GetTransactionsResponse) GetTransactions() []*TransactionData { + if x != nil { + return x.Transactions + } + return nil +} + +type ResolveAccountRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + BankCode string `protobuf:"bytes,1,opt,name=bankCode,proto3" json:"bankCode,omitempty"` + AccountNumber string `protobuf:"bytes,2,opt,name=accountNumber,proto3" json:"accountNumber,omitempty"` +} + +func (x *ResolveAccountRequest) Reset() { + *x = ResolveAccountRequest{} + mi := &file_wallet_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ResolveAccountRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ResolveAccountRequest) ProtoMessage() {} + +func (x *ResolveAccountRequest) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[8] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ResolveAccountRequest.ProtoReflect.Descriptor instead. +func (*ResolveAccountRequest) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{8} +} + +func (x *ResolveAccountRequest) GetBankCode() string { + if x != nil { + return x.BankCode + } + return "" +} + +func (x *ResolveAccountRequest) GetAccountNumber() string { + if x != nil { + return x.AccountNumber + } + return "" +} + +type ResolveAccountResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Success bool `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"` + Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` + Message string `protobuf:"bytes,3,opt,name=message,proto3" json:"message,omitempty"` + AccountName string `protobuf:"bytes,4,opt,name=accountName,proto3" json:"accountName,omitempty"` + AccountNumber string `protobuf:"bytes,5,opt,name=accountNumber,proto3" json:"accountNumber,omitempty"` +} + +func (x *ResolveAccountResponse) Reset() { + *x = ResolveAccountResponse{} + mi := &file_wallet_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ResolveAccountResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ResolveAccountResponse) ProtoMessage() {} + +func (x *ResolveAccountResponse) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[9] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ResolveAccountResponse.ProtoReflect.Descriptor instead. +func (*ResolveAccountResponse) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{9} +} + +func (x *ResolveAccountResponse) GetSuccess() bool { + if x != nil { + return x.Success + } + return false +} + +func (x *ResolveAccountResponse) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *ResolveAccountResponse) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +func (x *ResolveAccountResponse) GetAccountName() string { + if x != nil { + return x.AccountName + } + return "" +} + +func (x *ResolveAccountResponse) GetAccountNumber() string { + if x != nil { + return x.AccountNumber + } + return "" +} + +type TransactionData struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Amount int64 `protobuf:"varint,1,opt,name=amount,proto3" json:"amount,omitempty"` + TransactionRef string `protobuf:"bytes,2,opt,name=transactionRef,proto3" json:"transactionRef,omitempty"` + GatewayRef string `protobuf:"bytes,3,opt,name=gatewayRef,proto3" json:"gatewayRef,omitempty"` + TransactionType string `protobuf:"bytes,4,opt,name=transactionType,proto3" json:"transactionType,omitempty"` + CreatedAt string `protobuf:"bytes,5,opt,name=createdAt,proto3" json:"createdAt,omitempty"` + Status string `protobuf:"bytes,6,opt,name=status,proto3" json:"status,omitempty"` +} + +func (x *TransactionData) Reset() { + *x = TransactionData{} + mi := &file_wallet_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *TransactionData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TransactionData) ProtoMessage() {} + +func (x *TransactionData) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[10] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TransactionData.ProtoReflect.Descriptor instead. +func (*TransactionData) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{10} +} + +func (x *TransactionData) GetAmount() int64 { + if x != nil { + return x.Amount + } + return 0 +} + +func (x *TransactionData) GetTransactionRef() string { + if x != nil { + return x.TransactionRef + } + return "" +} + +func (x *TransactionData) GetGatewayRef() string { + if x != nil { + return x.GatewayRef + } + return "" +} + +func (x *TransactionData) GetTransactionType() string { + if x != nil { + return x.TransactionType + } + return "" +} + +func (x *TransactionData) GetCreatedAt() string { + if x != nil { + return x.CreatedAt + } + return "" +} + +func (x *TransactionData) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +type VerifyNINRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Nin string `protobuf:"bytes,1,opt,name=nin,proto3" json:"nin,omitempty"` +} + +func (x *VerifyNINRequest) Reset() { + *x = VerifyNINRequest{} + mi := &file_wallet_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VerifyNINRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VerifyNINRequest) ProtoMessage() {} + +func (x *VerifyNINRequest) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[11] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VerifyNINRequest.ProtoReflect.Descriptor instead. +func (*VerifyNINRequest) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{11} +} + +func (x *VerifyNINRequest) GetNin() string { + if x != nil { + return x.Nin + } + return "" +} + +type VerifyNINResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Success bool `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"` + Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` + Message string `protobuf:"bytes,3,opt,name=message,proto3" json:"message,omitempty"` + IsValid bool `protobuf:"varint,4,opt,name=isValid,proto3" json:"isValid,omitempty"` +} + +func (x *VerifyNINResponse) Reset() { + *x = VerifyNINResponse{} + mi := &file_wallet_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VerifyNINResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VerifyNINResponse) ProtoMessage() {} + +func (x *VerifyNINResponse) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[12] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VerifyNINResponse.ProtoReflect.Descriptor instead. +func (*VerifyNINResponse) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{12} +} + +func (x *VerifyNINResponse) GetSuccess() bool { + if x != nil { + return x.Success + } + return false +} + +func (x *VerifyNINResponse) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *VerifyNINResponse) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +func (x *VerifyNINResponse) GetIsValid() bool { + if x != nil { + return x.IsValid + } + return false +} + +type VerifyBVNImageRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Base64Image string `protobuf:"bytes,1,opt,name=base64Image,proto3" json:"base64Image,omitempty"` + Bvn string `protobuf:"bytes,2,opt,name=bvn,proto3" json:"bvn,omitempty"` +} + +func (x *VerifyBVNImageRequest) Reset() { + *x = VerifyBVNImageRequest{} + mi := &file_wallet_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VerifyBVNImageRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VerifyBVNImageRequest) ProtoMessage() {} + +func (x *VerifyBVNImageRequest) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[13] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VerifyBVNImageRequest.ProtoReflect.Descriptor instead. +func (*VerifyBVNImageRequest) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{13} +} + +func (x *VerifyBVNImageRequest) GetBase64Image() string { + if x != nil { + return x.Base64Image + } + return "" +} + +func (x *VerifyBVNImageRequest) GetBvn() string { + if x != nil { + return x.Bvn + } + return "" +} + +type VerifyBVNImageResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Success bool `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"` + Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` + Message string `protobuf:"bytes,3,opt,name=message,proto3" json:"message,omitempty"` + ImageMatched bool `protobuf:"varint,4,opt,name=imageMatched,proto3" json:"imageMatched,omitempty"` +} + +func (x *VerifyBVNImageResponse) Reset() { + *x = VerifyBVNImageResponse{} + mi := &file_wallet_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VerifyBVNImageResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VerifyBVNImageResponse) ProtoMessage() {} + +func (x *VerifyBVNImageResponse) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[14] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VerifyBVNImageResponse.ProtoReflect.Descriptor instead. +func (*VerifyBVNImageResponse) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{14} +} + +func (x *VerifyBVNImageResponse) GetSuccess() bool { + if x != nil { + return x.Success + } + return false +} + +func (x *VerifyBVNImageResponse) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *VerifyBVNImageResponse) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +func (x *VerifyBVNImageResponse) GetImageMatched() bool { + if x != nil { + return x.ImageMatched + } + return false +} + +type HealthCheckRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *HealthCheckRequest) Reset() { + *x = HealthCheckRequest{} + mi := &file_wallet_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *HealthCheckRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*HealthCheckRequest) ProtoMessage() {} + +func (x *HealthCheckRequest) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[15] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use HealthCheckRequest.ProtoReflect.Descriptor instead. +func (*HealthCheckRequest) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{15} +} + +type HealthCheckResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Status string `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"` +} + +func (x *HealthCheckResponse) Reset() { + *x = HealthCheckResponse{} + mi := &file_wallet_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *HealthCheckResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*HealthCheckResponse) ProtoMessage() {} + +func (x *HealthCheckResponse) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[16] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use HealthCheckResponse.ProtoReflect.Descriptor instead. +func (*HealthCheckResponse) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{16} +} + +func (x *HealthCheckResponse) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +type GetPaymentRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + PaymentId uint64 `protobuf:"varint,1,opt,name=paymentId,proto3" json:"paymentId,omitempty"` +} + +func (x *GetPaymentRequest) Reset() { + *x = GetPaymentRequest{} + mi := &file_wallet_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetPaymentRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetPaymentRequest) ProtoMessage() {} + +func (x *GetPaymentRequest) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[17] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetPaymentRequest.ProtoReflect.Descriptor instead. +func (*GetPaymentRequest) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{17} +} + +func (x *GetPaymentRequest) GetPaymentId() uint64 { + if x != nil { + return x.PaymentId + } + return 0 +} + +type GetPaymentResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Success bool `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"` + Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` + Data *PaymentData `protobuf:"bytes,3,opt,name=data,proto3" json:"data,omitempty"` +} + +func (x *GetPaymentResponse) Reset() { + *x = GetPaymentResponse{} + mi := &file_wallet_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetPaymentResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetPaymentResponse) ProtoMessage() {} + +func (x *GetPaymentResponse) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[18] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetPaymentResponse.ProtoReflect.Descriptor instead. +func (*GetPaymentResponse) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{18} +} + +func (x *GetPaymentResponse) GetSuccess() bool { + if x != nil { + return x.Success + } + return false +} + +func (x *GetPaymentResponse) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +func (x *GetPaymentResponse) GetData() *PaymentData { + if x != nil { + return x.Data + } + return nil +} + +type PaymentData struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + UserId string `protobuf:"bytes,2,opt,name=userId,proto3" json:"userId,omitempty"` + Amount float64 `protobuf:"fixed64,3,opt,name=amount,proto3" json:"amount,omitempty"` + AccountNumber string `protobuf:"bytes,4,opt,name=accountNumber,proto3" json:"accountNumber,omitempty"` + Bank string `protobuf:"bytes,5,opt,name=bank,proto3" json:"bank,omitempty"` + MerchantPhoneNumber string `protobuf:"bytes,6,opt,name=merchantPhoneNumber,proto3" json:"merchantPhoneNumber,omitempty"` + MerchantEmail string `protobuf:"bytes,7,opt,name=merchantEmail,proto3" json:"merchantEmail,omitempty"` + AdvanceOptions string `protobuf:"bytes,8,opt,name=advanceOptions,proto3" json:"advanceOptions,omitempty"` + Status string `protobuf:"bytes,9,opt,name=status,proto3" json:"status,omitempty"` + TrustScore float64 `protobuf:"fixed64,10,opt,name=trustScore,proto3" json:"trustScore,omitempty"` + ExpiresAt string `protobuf:"bytes,11,opt,name=expiresAt,proto3" json:"expiresAt,omitempty"` + CreatedAt string `protobuf:"bytes,12,opt,name=createdAt,proto3" json:"createdAt,omitempty"` +} + +func (x *PaymentData) Reset() { + *x = PaymentData{} + mi := &file_wallet_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PaymentData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PaymentData) ProtoMessage() {} + +func (x *PaymentData) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[19] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PaymentData.ProtoReflect.Descriptor instead. +func (*PaymentData) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{19} +} + +func (x *PaymentData) GetId() uint64 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *PaymentData) GetUserId() string { + if x != nil { + return x.UserId + } + return "" +} + +func (x *PaymentData) GetAmount() float64 { + if x != nil { + return x.Amount + } + return 0 +} + +func (x *PaymentData) GetAccountNumber() string { + if x != nil { + return x.AccountNumber + } + return "" +} + +func (x *PaymentData) GetBank() string { + if x != nil { + return x.Bank + } + return "" +} + +func (x *PaymentData) GetMerchantPhoneNumber() string { + if x != nil { + return x.MerchantPhoneNumber + } + return "" +} + +func (x *PaymentData) GetMerchantEmail() string { + if x != nil { + return x.MerchantEmail + } + return "" +} + +func (x *PaymentData) GetAdvanceOptions() string { + if x != nil { + return x.AdvanceOptions + } + return "" +} + +func (x *PaymentData) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +func (x *PaymentData) GetTrustScore() float64 { + if x != nil { + return x.TrustScore + } + return 0 +} + +func (x *PaymentData) GetExpiresAt() string { + if x != nil { + return x.ExpiresAt + } + return "" +} + +func (x *PaymentData) GetCreatedAt() string { + if x != nil { + return x.CreatedAt + } + return "" +} + +type UpdatePaymentStatusRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + PaymentId uint64 `protobuf:"varint,1,opt,name=paymentId,proto3" json:"paymentId,omitempty"` + Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` + TrustScore float64 `protobuf:"fixed64,3,opt,name=trustScore,proto3" json:"trustScore,omitempty"` + Summary string `protobuf:"bytes,4,opt,name=summary,proto3" json:"summary,omitempty"` +} + +func (x *UpdatePaymentStatusRequest) Reset() { + *x = UpdatePaymentStatusRequest{} + mi := &file_wallet_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *UpdatePaymentStatusRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdatePaymentStatusRequest) ProtoMessage() {} + +func (x *UpdatePaymentStatusRequest) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[20] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UpdatePaymentStatusRequest.ProtoReflect.Descriptor instead. +func (*UpdatePaymentStatusRequest) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{20} +} + +func (x *UpdatePaymentStatusRequest) GetPaymentId() uint64 { + if x != nil { + return x.PaymentId + } + return 0 +} + +func (x *UpdatePaymentStatusRequest) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +func (x *UpdatePaymentStatusRequest) GetTrustScore() float64 { + if x != nil { + return x.TrustScore + } + return 0 +} + +func (x *UpdatePaymentStatusRequest) GetSummary() string { + if x != nil { + return x.Summary + } + return "" +} + +type UpdatePaymentStatusResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Success bool `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"` + Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` +} + +func (x *UpdatePaymentStatusResponse) Reset() { + *x = UpdatePaymentStatusResponse{} + mi := &file_wallet_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *UpdatePaymentStatusResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdatePaymentStatusResponse) ProtoMessage() {} + +func (x *UpdatePaymentStatusResponse) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[21] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UpdatePaymentStatusResponse.ProtoReflect.Descriptor instead. +func (*UpdatePaymentStatusResponse) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{21} +} + +func (x *UpdatePaymentStatusResponse) GetSuccess() bool { + if x != nil { + return x.Success + } + return false +} + +func (x *UpdatePaymentStatusResponse) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +type GetWalletsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + UserId string `protobuf:"bytes,1,opt,name=userId,proto3" json:"userId,omitempty"` +} + +func (x *GetWalletsRequest) Reset() { + *x = GetWalletsRequest{} + mi := &file_wallet_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetWalletsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetWalletsRequest) ProtoMessage() {} + +func (x *GetWalletsRequest) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[22] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetWalletsRequest.ProtoReflect.Descriptor instead. +func (*GetWalletsRequest) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{22} +} + +func (x *GetWalletsRequest) GetUserId() string { + if x != nil { + return x.UserId + } + return "" +} + +type GetWalletsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Success bool `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"` + Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` + Wallets []*WalletData `protobuf:"bytes,3,rep,name=wallets,proto3" json:"wallets,omitempty"` +} + +func (x *GetWalletsResponse) Reset() { + *x = GetWalletsResponse{} + mi := &file_wallet_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetWalletsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetWalletsResponse) ProtoMessage() {} + +func (x *GetWalletsResponse) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[23] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetWalletsResponse.ProtoReflect.Descriptor instead. +func (*GetWalletsResponse) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{23} +} + +func (x *GetWalletsResponse) GetSuccess() bool { + if x != nil { + return x.Success + } + return false +} + +func (x *GetWalletsResponse) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +func (x *GetWalletsResponse) GetWallets() []*WalletData { + if x != nil { + return x.Wallets + } + return nil +} + +type WalletData struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + AccountNumber string `protobuf:"bytes,2,opt,name=accountNumber,proto3" json:"accountNumber,omitempty"` + AccountType string `protobuf:"bytes,3,opt,name=accountType,proto3" json:"accountType,omitempty"` + AccountCategory string `protobuf:"bytes,4,opt,name=accountCategory,proto3" json:"accountCategory,omitempty"` + CurrencyCode string `protobuf:"bytes,5,opt,name=currencyCode,proto3" json:"currencyCode,omitempty"` + Status string `protobuf:"bytes,6,opt,name=status,proto3" json:"status,omitempty"` + AccountNickname string `protobuf:"bytes,7,opt,name=accountNickname,proto3" json:"accountNickname,omitempty"` +} + +func (x *WalletData) Reset() { + *x = WalletData{} + mi := &file_wallet_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *WalletData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WalletData) ProtoMessage() {} + +func (x *WalletData) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[24] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use WalletData.ProtoReflect.Descriptor instead. +func (*WalletData) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{24} +} + +func (x *WalletData) GetId() uint64 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *WalletData) GetAccountNumber() string { + if x != nil { + return x.AccountNumber + } + return "" +} + +func (x *WalletData) GetAccountType() string { + if x != nil { + return x.AccountType + } + return "" +} + +func (x *WalletData) GetAccountCategory() string { + if x != nil { + return x.AccountCategory + } + return "" +} + +func (x *WalletData) GetCurrencyCode() string { + if x != nil { + return x.CurrencyCode + } + return "" +} + +func (x *WalletData) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +func (x *WalletData) GetAccountNickname() string { + if x != nil { + return x.AccountNickname + } + return "" +} + +var File_wallet_proto protoreflect.FileDescriptor + +var file_wallet_proto_rawDesc = []byte{ + 0x0a, 0x0c, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x06, + 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x22, 0xf1, 0x02, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, + 0x0a, 0x09, 0x66, 0x69, 0x72, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x66, 0x69, 0x72, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, + 0x6d, 0x69, 0x64, 0x64, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0a, 0x6d, 0x69, 0x64, 0x64, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, + 0x6c, 0x61, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x6c, 0x61, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6e, 0x69, 0x6e, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6e, 0x69, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x61, + 0x74, 0x65, 0x4f, 0x66, 0x42, 0x69, 0x72, 0x74, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x66, 0x42, 0x69, 0x72, 0x74, 0x68, 0x12, 0x10, 0x0a, 0x03, + 0x62, 0x76, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x62, 0x76, 0x6e, 0x12, 0x14, + 0x0a, 0x05, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, + 0x68, 0x6f, 0x6e, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x67, 0x65, + 0x6e, 0x64, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x67, 0x65, 0x6e, 0x64, + 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x0a, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x22, 0x0a, 0x0c, + 0x62, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x0c, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0c, 0x62, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x4e, 0x61, 0x6d, 0x65, + 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0xa8, 0x02, 0x0a, 0x14, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x12, 0x0a, + 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, + 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x66, + 0x69, 0x72, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x66, 0x69, 0x72, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x6d, 0x69, 0x64, + 0x64, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, + 0x69, 0x64, 0x64, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x73, + 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x61, 0x73, + 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x4e, 0x6f, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x4e, 0x6f, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x54, 0x69, + 0x65, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x74, 0x54, 0x69, 0x65, 0x72, 0x12, 0x2e, 0x0a, 0x12, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, + 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x12, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x66, 0x69, 0x65, 0x72, 0x22, 0x62, 0x0a, 0x16, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, + 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x1a, 0x0a, + 0x08, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x83, 0x01, 0x0a, 0x17, 0x49, 0x6e, + 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, + 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, + 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x20, 0x0a, + 0x0b, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x55, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x55, 0x72, 0x6c, 0x22, + 0xe1, 0x01, 0x0a, 0x17, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x66, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x14, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, + 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, + 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x62, 0x61, 0x6e, 0x6b, 0x43, + 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x62, 0x61, 0x6e, 0x6b, 0x43, + 0x6f, 0x64, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, + 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x6d, + 0x61, 0x72, 0x6b, 0x22, 0x96, 0x01, 0x0a, 0x18, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, + 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x18, + 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x32, 0x0a, 0x14, 0x74, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x22, 0x48, 0x0a, 0x16, + 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x12, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, + 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x12, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x22, 0x8a, 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3b, 0x0a, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x77, + 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x22, 0x59, 0x0a, 0x15, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x41, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, + 0x62, 0x61, 0x6e, 0x6b, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x62, 0x61, 0x6e, 0x6b, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0d, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, 0xa8, + 0x01, 0x0a, 0x16, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, 0xd1, 0x01, 0x0a, 0x0f, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, + 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x61, + 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x12, 0x1e, 0x0a, + 0x0a, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x52, 0x65, 0x66, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0a, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x52, 0x65, 0x66, 0x12, 0x28, 0x0a, + 0x0f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x41, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x24, 0x0a, + 0x10, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x4e, 0x49, 0x4e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6e, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6e, 0x69, 0x6e, 0x22, 0x75, 0x0a, 0x11, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x4e, 0x49, 0x4e, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x12, 0x18, 0x0a, 0x07, 0x69, 0x73, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x07, 0x69, 0x73, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x22, 0x4b, 0x0a, 0x15, 0x56, 0x65, + 0x72, 0x69, 0x66, 0x79, 0x42, 0x56, 0x4e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x49, 0x6d, 0x61, + 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, + 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x62, 0x76, 0x6e, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x62, 0x76, 0x6e, 0x22, 0x84, 0x01, 0x0a, 0x16, 0x56, 0x65, 0x72, 0x69, + 0x66, 0x79, 0x42, 0x56, 0x4e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, + 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, + 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x69, 0x6d, + 0x61, 0x67, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0c, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x64, 0x22, 0x14, + 0x0a, 0x12, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x22, 0x2d, 0x0a, 0x13, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, + 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x22, 0x31, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x61, 0x79, 0x6d, + 0x65, 0x6e, 0x74, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x70, 0x61, 0x79, + 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x71, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, + 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, + 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, + 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x12, 0x27, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, + 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x44, + 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xfb, 0x02, 0x0a, 0x0b, 0x50, 0x61, + 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, + 0x72, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, + 0x64, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x01, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0d, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, + 0x12, 0x0a, 0x04, 0x62, 0x61, 0x6e, 0x6b, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x62, + 0x61, 0x6e, 0x6b, 0x12, 0x30, 0x0a, 0x13, 0x6d, 0x65, 0x72, 0x63, 0x68, 0x61, 0x6e, 0x74, 0x50, + 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x13, 0x6d, 0x65, 0x72, 0x63, 0x68, 0x61, 0x6e, 0x74, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x4e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x24, 0x0a, 0x0d, 0x6d, 0x65, 0x72, 0x63, 0x68, 0x61, 0x6e, + 0x74, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6d, 0x65, + 0x72, 0x63, 0x68, 0x61, 0x6e, 0x74, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x26, 0x0a, 0x0e, 0x61, + 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0e, 0x61, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x4f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x74, + 0x72, 0x75, 0x73, 0x74, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x01, 0x52, + 0x0a, 0x74, 0x72, 0x75, 0x73, 0x74, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x65, + 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x41, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x41, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x22, 0x8c, 0x01, 0x0a, 0x1a, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, + 0x74, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x70, 0x61, 0x79, 0x6d, 0x65, + 0x6e, 0x74, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1e, 0x0a, 0x0a, + 0x74, 0x72, 0x75, 0x73, 0x74, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, + 0x52, 0x0a, 0x74, 0x72, 0x75, 0x73, 0x74, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x18, 0x0a, 0x07, + 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, + 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x22, 0x51, 0x0a, 0x1b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, + 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x2b, 0x0a, 0x11, 0x47, 0x65, 0x74, + 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, + 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x76, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x57, 0x61, 0x6c, + 0x6c, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, + 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, + 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x12, 0x2c, 0x0a, 0x07, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x12, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, + 0x74, 0x44, 0x61, 0x74, 0x61, 0x52, 0x07, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x73, 0x22, 0xf4, + 0x01, 0x0a, 0x0a, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x24, 0x0a, + 0x0d, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x79, + 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, + 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, + 0x22, 0x0a, 0x0c, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x43, + 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x28, 0x0a, 0x0f, 0x61, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x69, 0x63, + 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x32, 0xef, 0x06, 0x0a, 0x0d, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x49, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x12, 0x1b, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, + 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0f, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x50, 0x61, + 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1e, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x49, + 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x49, + 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x10, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, + 0x74, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x12, 0x1f, 0x2e, 0x77, 0x61, 0x6c, + 0x6c, 0x65, 0x74, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x66, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x77, 0x61, + 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x66, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, + 0x0f, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0x1e, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x1f, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x4f, 0x0a, 0x0e, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x41, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x12, 0x1d, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x52, 0x65, 0x73, + 0x6f, 0x6c, 0x76, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x52, 0x65, 0x73, 0x6f, + 0x6c, 0x76, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x40, 0x0a, 0x09, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x4e, 0x49, 0x4e, 0x12, + 0x18, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x4e, + 0x49, 0x4e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x77, 0x61, 0x6c, 0x6c, + 0x65, 0x74, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x4e, 0x49, 0x4e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, 0x0e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x42, 0x56, + 0x4e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x1d, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, + 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x42, 0x56, 0x4e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x56, + 0x65, 0x72, 0x69, 0x66, 0x79, 0x42, 0x56, 0x4e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, + 0x65, 0x6e, 0x74, 0x12, 0x19, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x47, 0x65, 0x74, + 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, + 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, + 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5e, 0x0a, 0x13, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x12, 0x22, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x0b, 0x48, 0x65, + 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x1a, 0x2e, 0x77, 0x61, 0x6c, 0x6c, + 0x65, 0x74, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x48, + 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x43, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x73, + 0x12, 0x19, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x61, 0x6c, + 0x6c, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x77, 0x61, + 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x39, 0x5a, 0x37, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x50, 0x61, 0x79, 0x47, 0x69, 0x64, 0x69, 0x2f, 0x57, 0x61, + 0x6c, 0x6c, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x70, 0x62, 0x3b, + 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_wallet_proto_rawDescOnce sync.Once + file_wallet_proto_rawDescData = file_wallet_proto_rawDesc +) + +func file_wallet_proto_rawDescGZIP() []byte { + file_wallet_proto_rawDescOnce.Do(func() { + file_wallet_proto_rawDescData = protoimpl.X.CompressGZIP(file_wallet_proto_rawDescData) + }) + return file_wallet_proto_rawDescData +} + +var file_wallet_proto_msgTypes = make([]protoimpl.MessageInfo, 25) +var file_wallet_proto_goTypes = []any{ + (*CreateWalletRequest)(nil), // 0: wallet.CreateWalletRequest + (*CreateWalletResponse)(nil), // 1: wallet.CreateWalletResponse + (*InitiatePaymentRequest)(nil), // 2: wallet.InitiatePaymentRequest + (*InitiatePaymentResponse)(nil), // 3: wallet.InitiatePaymentResponse + (*InitiateTransferRequest)(nil), // 4: wallet.InitiateTransferRequest + (*InitiateTransferResponse)(nil), // 5: wallet.InitiateTransferResponse + (*GetTransactionsRequest)(nil), // 6: wallet.GetTransactionsRequest + (*GetTransactionsResponse)(nil), // 7: wallet.GetTransactionsResponse + (*ResolveAccountRequest)(nil), // 8: wallet.ResolveAccountRequest + (*ResolveAccountResponse)(nil), // 9: wallet.ResolveAccountResponse + (*TransactionData)(nil), // 10: wallet.TransactionData + (*VerifyNINRequest)(nil), // 11: wallet.VerifyNINRequest + (*VerifyNINResponse)(nil), // 12: wallet.VerifyNINResponse + (*VerifyBVNImageRequest)(nil), // 13: wallet.VerifyBVNImageRequest + (*VerifyBVNImageResponse)(nil), // 14: wallet.VerifyBVNImageResponse + (*HealthCheckRequest)(nil), // 15: wallet.HealthCheckRequest + (*HealthCheckResponse)(nil), // 16: wallet.HealthCheckResponse + (*GetPaymentRequest)(nil), // 17: wallet.GetPaymentRequest + (*GetPaymentResponse)(nil), // 18: wallet.GetPaymentResponse + (*PaymentData)(nil), // 19: wallet.PaymentData + (*UpdatePaymentStatusRequest)(nil), // 20: wallet.UpdatePaymentStatusRequest + (*UpdatePaymentStatusResponse)(nil), // 21: wallet.UpdatePaymentStatusResponse + (*GetWalletsRequest)(nil), // 22: wallet.GetWalletsRequest + (*GetWalletsResponse)(nil), // 23: wallet.GetWalletsResponse + (*WalletData)(nil), // 24: wallet.WalletData +} +var file_wallet_proto_depIdxs = []int32{ + 10, // 0: wallet.GetTransactionsResponse.transactions:type_name -> wallet.TransactionData + 19, // 1: wallet.GetPaymentResponse.data:type_name -> wallet.PaymentData + 24, // 2: wallet.GetWalletsResponse.wallets:type_name -> wallet.WalletData + 0, // 3: wallet.WalletService.CreateWallet:input_type -> wallet.CreateWalletRequest + 2, // 4: wallet.WalletService.InitiatePayment:input_type -> wallet.InitiatePaymentRequest + 4, // 5: wallet.WalletService.InitiateTransfer:input_type -> wallet.InitiateTransferRequest + 6, // 6: wallet.WalletService.GetTransactions:input_type -> wallet.GetTransactionsRequest + 8, // 7: wallet.WalletService.ResolveAccount:input_type -> wallet.ResolveAccountRequest + 11, // 8: wallet.WalletService.VerifyNIN:input_type -> wallet.VerifyNINRequest + 13, // 9: wallet.WalletService.VerifyBVNImage:input_type -> wallet.VerifyBVNImageRequest + 17, // 10: wallet.WalletService.GetPayment:input_type -> wallet.GetPaymentRequest + 20, // 11: wallet.WalletService.UpdatePaymentStatus:input_type -> wallet.UpdatePaymentStatusRequest + 15, // 12: wallet.WalletService.HealthCheck:input_type -> wallet.HealthCheckRequest + 22, // 13: wallet.WalletService.GetWallets:input_type -> wallet.GetWalletsRequest + 1, // 14: wallet.WalletService.CreateWallet:output_type -> wallet.CreateWalletResponse + 3, // 15: wallet.WalletService.InitiatePayment:output_type -> wallet.InitiatePaymentResponse + 5, // 16: wallet.WalletService.InitiateTransfer:output_type -> wallet.InitiateTransferResponse + 7, // 17: wallet.WalletService.GetTransactions:output_type -> wallet.GetTransactionsResponse + 9, // 18: wallet.WalletService.ResolveAccount:output_type -> wallet.ResolveAccountResponse + 12, // 19: wallet.WalletService.VerifyNIN:output_type -> wallet.VerifyNINResponse + 14, // 20: wallet.WalletService.VerifyBVNImage:output_type -> wallet.VerifyBVNImageResponse + 18, // 21: wallet.WalletService.GetPayment:output_type -> wallet.GetPaymentResponse + 21, // 22: wallet.WalletService.UpdatePaymentStatus:output_type -> wallet.UpdatePaymentStatusResponse + 16, // 23: wallet.WalletService.HealthCheck:output_type -> wallet.HealthCheckResponse + 23, // 24: wallet.WalletService.GetWallets:output_type -> wallet.GetWalletsResponse + 14, // [14:25] is the sub-list for method output_type + 3, // [3:14] is the sub-list for method input_type + 3, // [3:3] is the sub-list for extension type_name + 3, // [3:3] is the sub-list for extension extendee + 0, // [0:3] is the sub-list for field type_name +} + +func init() { file_wallet_proto_init() } +func file_wallet_proto_init() { + if File_wallet_proto != nil { + return + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_wallet_proto_rawDesc, + NumEnums: 0, + NumMessages: 25, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_wallet_proto_goTypes, + DependencyIndexes: file_wallet_proto_depIdxs, + MessageInfos: file_wallet_proto_msgTypes, + }.Build() + File_wallet_proto = out.File + file_wallet_proto_rawDesc = nil + file_wallet_proto_goTypes = nil + file_wallet_proto_depIdxs = nil +} diff --git a/services/wallet/proto/connection/pb/github.com/PayGidi/WalletService/proto/connection/pb/wallet_grpc.pb.go b/services/wallet/proto/connection/pb/github.com/PayGidi/WalletService/proto/connection/pb/wallet_grpc.pb.go new file mode 100644 index 0000000..d622ac2 --- /dev/null +++ b/services/wallet/proto/connection/pb/github.com/PayGidi/WalletService/proto/connection/pb/wallet_grpc.pb.go @@ -0,0 +1,501 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.5.1 +// - protoc v6.33.3 +// source: wallet.proto + +package pb + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 + +const ( + WalletService_CreateWallet_FullMethodName = "/wallet.WalletService/CreateWallet" + WalletService_InitiatePayment_FullMethodName = "/wallet.WalletService/InitiatePayment" + WalletService_InitiateTransfer_FullMethodName = "/wallet.WalletService/InitiateTransfer" + WalletService_GetTransactions_FullMethodName = "/wallet.WalletService/GetTransactions" + WalletService_ResolveAccount_FullMethodName = "/wallet.WalletService/ResolveAccount" + WalletService_VerifyNIN_FullMethodName = "/wallet.WalletService/VerifyNIN" + WalletService_VerifyBVNImage_FullMethodName = "/wallet.WalletService/VerifyBVNImage" + WalletService_GetPayment_FullMethodName = "/wallet.WalletService/GetPayment" + WalletService_UpdatePaymentStatus_FullMethodName = "/wallet.WalletService/UpdatePaymentStatus" + WalletService_HealthCheck_FullMethodName = "/wallet.WalletService/HealthCheck" + WalletService_GetWallets_FullMethodName = "/wallet.WalletService/GetWallets" +) + +// WalletServiceClient is the client API for WalletService service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type WalletServiceClient interface { + CreateWallet(ctx context.Context, in *CreateWalletRequest, opts ...grpc.CallOption) (*CreateWalletResponse, error) + InitiatePayment(ctx context.Context, in *InitiatePaymentRequest, opts ...grpc.CallOption) (*InitiatePaymentResponse, error) + InitiateTransfer(ctx context.Context, in *InitiateTransferRequest, opts ...grpc.CallOption) (*InitiateTransferResponse, error) + GetTransactions(ctx context.Context, in *GetTransactionsRequest, opts ...grpc.CallOption) (*GetTransactionsResponse, error) + ResolveAccount(ctx context.Context, in *ResolveAccountRequest, opts ...grpc.CallOption) (*ResolveAccountResponse, error) + VerifyNIN(ctx context.Context, in *VerifyNINRequest, opts ...grpc.CallOption) (*VerifyNINResponse, error) + VerifyBVNImage(ctx context.Context, in *VerifyBVNImageRequest, opts ...grpc.CallOption) (*VerifyBVNImageResponse, error) + GetPayment(ctx context.Context, in *GetPaymentRequest, opts ...grpc.CallOption) (*GetPaymentResponse, error) + UpdatePaymentStatus(ctx context.Context, in *UpdatePaymentStatusRequest, opts ...grpc.CallOption) (*UpdatePaymentStatusResponse, error) + HealthCheck(ctx context.Context, in *HealthCheckRequest, opts ...grpc.CallOption) (*HealthCheckResponse, error) + GetWallets(ctx context.Context, in *GetWalletsRequest, opts ...grpc.CallOption) (*GetWalletsResponse, error) +} + +type walletServiceClient struct { + cc grpc.ClientConnInterface +} + +func NewWalletServiceClient(cc grpc.ClientConnInterface) WalletServiceClient { + return &walletServiceClient{cc} +} + +func (c *walletServiceClient) CreateWallet(ctx context.Context, in *CreateWalletRequest, opts ...grpc.CallOption) (*CreateWalletResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(CreateWalletResponse) + err := c.cc.Invoke(ctx, WalletService_CreateWallet_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *walletServiceClient) InitiatePayment(ctx context.Context, in *InitiatePaymentRequest, opts ...grpc.CallOption) (*InitiatePaymentResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(InitiatePaymentResponse) + err := c.cc.Invoke(ctx, WalletService_InitiatePayment_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *walletServiceClient) InitiateTransfer(ctx context.Context, in *InitiateTransferRequest, opts ...grpc.CallOption) (*InitiateTransferResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(InitiateTransferResponse) + err := c.cc.Invoke(ctx, WalletService_InitiateTransfer_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *walletServiceClient) GetTransactions(ctx context.Context, in *GetTransactionsRequest, opts ...grpc.CallOption) (*GetTransactionsResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(GetTransactionsResponse) + err := c.cc.Invoke(ctx, WalletService_GetTransactions_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *walletServiceClient) ResolveAccount(ctx context.Context, in *ResolveAccountRequest, opts ...grpc.CallOption) (*ResolveAccountResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(ResolveAccountResponse) + err := c.cc.Invoke(ctx, WalletService_ResolveAccount_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *walletServiceClient) VerifyNIN(ctx context.Context, in *VerifyNINRequest, opts ...grpc.CallOption) (*VerifyNINResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(VerifyNINResponse) + err := c.cc.Invoke(ctx, WalletService_VerifyNIN_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *walletServiceClient) VerifyBVNImage(ctx context.Context, in *VerifyBVNImageRequest, opts ...grpc.CallOption) (*VerifyBVNImageResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(VerifyBVNImageResponse) + err := c.cc.Invoke(ctx, WalletService_VerifyBVNImage_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *walletServiceClient) GetPayment(ctx context.Context, in *GetPaymentRequest, opts ...grpc.CallOption) (*GetPaymentResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(GetPaymentResponse) + err := c.cc.Invoke(ctx, WalletService_GetPayment_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *walletServiceClient) UpdatePaymentStatus(ctx context.Context, in *UpdatePaymentStatusRequest, opts ...grpc.CallOption) (*UpdatePaymentStatusResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(UpdatePaymentStatusResponse) + err := c.cc.Invoke(ctx, WalletService_UpdatePaymentStatus_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *walletServiceClient) HealthCheck(ctx context.Context, in *HealthCheckRequest, opts ...grpc.CallOption) (*HealthCheckResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(HealthCheckResponse) + err := c.cc.Invoke(ctx, WalletService_HealthCheck_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *walletServiceClient) GetWallets(ctx context.Context, in *GetWalletsRequest, opts ...grpc.CallOption) (*GetWalletsResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(GetWalletsResponse) + err := c.cc.Invoke(ctx, WalletService_GetWallets_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +// WalletServiceServer is the server API for WalletService service. +// All implementations must embed UnimplementedWalletServiceServer +// for forward compatibility. +type WalletServiceServer interface { + CreateWallet(context.Context, *CreateWalletRequest) (*CreateWalletResponse, error) + InitiatePayment(context.Context, *InitiatePaymentRequest) (*InitiatePaymentResponse, error) + InitiateTransfer(context.Context, *InitiateTransferRequest) (*InitiateTransferResponse, error) + GetTransactions(context.Context, *GetTransactionsRequest) (*GetTransactionsResponse, error) + ResolveAccount(context.Context, *ResolveAccountRequest) (*ResolveAccountResponse, error) + VerifyNIN(context.Context, *VerifyNINRequest) (*VerifyNINResponse, error) + VerifyBVNImage(context.Context, *VerifyBVNImageRequest) (*VerifyBVNImageResponse, error) + GetPayment(context.Context, *GetPaymentRequest) (*GetPaymentResponse, error) + UpdatePaymentStatus(context.Context, *UpdatePaymentStatusRequest) (*UpdatePaymentStatusResponse, error) + HealthCheck(context.Context, *HealthCheckRequest) (*HealthCheckResponse, error) + GetWallets(context.Context, *GetWalletsRequest) (*GetWalletsResponse, error) + mustEmbedUnimplementedWalletServiceServer() +} + +// UnimplementedWalletServiceServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedWalletServiceServer struct{} + +func (UnimplementedWalletServiceServer) CreateWallet(context.Context, *CreateWalletRequest) (*CreateWalletResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method CreateWallet not implemented") +} +func (UnimplementedWalletServiceServer) InitiatePayment(context.Context, *InitiatePaymentRequest) (*InitiatePaymentResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method InitiatePayment not implemented") +} +func (UnimplementedWalletServiceServer) InitiateTransfer(context.Context, *InitiateTransferRequest) (*InitiateTransferResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method InitiateTransfer not implemented") +} +func (UnimplementedWalletServiceServer) GetTransactions(context.Context, *GetTransactionsRequest) (*GetTransactionsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetTransactions not implemented") +} +func (UnimplementedWalletServiceServer) ResolveAccount(context.Context, *ResolveAccountRequest) (*ResolveAccountResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ResolveAccount not implemented") +} +func (UnimplementedWalletServiceServer) VerifyNIN(context.Context, *VerifyNINRequest) (*VerifyNINResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method VerifyNIN not implemented") +} +func (UnimplementedWalletServiceServer) VerifyBVNImage(context.Context, *VerifyBVNImageRequest) (*VerifyBVNImageResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method VerifyBVNImage not implemented") +} +func (UnimplementedWalletServiceServer) GetPayment(context.Context, *GetPaymentRequest) (*GetPaymentResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetPayment not implemented") +} +func (UnimplementedWalletServiceServer) UpdatePaymentStatus(context.Context, *UpdatePaymentStatusRequest) (*UpdatePaymentStatusResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdatePaymentStatus not implemented") +} +func (UnimplementedWalletServiceServer) HealthCheck(context.Context, *HealthCheckRequest) (*HealthCheckResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method HealthCheck not implemented") +} +func (UnimplementedWalletServiceServer) GetWallets(context.Context, *GetWalletsRequest) (*GetWalletsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetWallets not implemented") +} +func (UnimplementedWalletServiceServer) mustEmbedUnimplementedWalletServiceServer() {} +func (UnimplementedWalletServiceServer) testEmbeddedByValue() {} + +// UnsafeWalletServiceServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to WalletServiceServer will +// result in compilation errors. +type UnsafeWalletServiceServer interface { + mustEmbedUnimplementedWalletServiceServer() +} + +func RegisterWalletServiceServer(s grpc.ServiceRegistrar, srv WalletServiceServer) { + // If the following call pancis, it indicates UnimplementedWalletServiceServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } + s.RegisterService(&WalletService_ServiceDesc, srv) +} + +func _WalletService_CreateWallet_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateWalletRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(WalletServiceServer).CreateWallet(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: WalletService_CreateWallet_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(WalletServiceServer).CreateWallet(ctx, req.(*CreateWalletRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _WalletService_InitiatePayment_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(InitiatePaymentRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(WalletServiceServer).InitiatePayment(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: WalletService_InitiatePayment_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(WalletServiceServer).InitiatePayment(ctx, req.(*InitiatePaymentRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _WalletService_InitiateTransfer_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(InitiateTransferRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(WalletServiceServer).InitiateTransfer(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: WalletService_InitiateTransfer_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(WalletServiceServer).InitiateTransfer(ctx, req.(*InitiateTransferRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _WalletService_GetTransactions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetTransactionsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(WalletServiceServer).GetTransactions(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: WalletService_GetTransactions_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(WalletServiceServer).GetTransactions(ctx, req.(*GetTransactionsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _WalletService_ResolveAccount_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ResolveAccountRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(WalletServiceServer).ResolveAccount(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: WalletService_ResolveAccount_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(WalletServiceServer).ResolveAccount(ctx, req.(*ResolveAccountRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _WalletService_VerifyNIN_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(VerifyNINRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(WalletServiceServer).VerifyNIN(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: WalletService_VerifyNIN_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(WalletServiceServer).VerifyNIN(ctx, req.(*VerifyNINRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _WalletService_VerifyBVNImage_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(VerifyBVNImageRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(WalletServiceServer).VerifyBVNImage(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: WalletService_VerifyBVNImage_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(WalletServiceServer).VerifyBVNImage(ctx, req.(*VerifyBVNImageRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _WalletService_GetPayment_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetPaymentRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(WalletServiceServer).GetPayment(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: WalletService_GetPayment_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(WalletServiceServer).GetPayment(ctx, req.(*GetPaymentRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _WalletService_UpdatePaymentStatus_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdatePaymentStatusRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(WalletServiceServer).UpdatePaymentStatus(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: WalletService_UpdatePaymentStatus_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(WalletServiceServer).UpdatePaymentStatus(ctx, req.(*UpdatePaymentStatusRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _WalletService_HealthCheck_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(HealthCheckRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(WalletServiceServer).HealthCheck(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: WalletService_HealthCheck_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(WalletServiceServer).HealthCheck(ctx, req.(*HealthCheckRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _WalletService_GetWallets_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetWalletsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(WalletServiceServer).GetWallets(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: WalletService_GetWallets_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(WalletServiceServer).GetWallets(ctx, req.(*GetWalletsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// WalletService_ServiceDesc is the grpc.ServiceDesc for WalletService service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var WalletService_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "wallet.WalletService", + HandlerType: (*WalletServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "CreateWallet", + Handler: _WalletService_CreateWallet_Handler, + }, + { + MethodName: "InitiatePayment", + Handler: _WalletService_InitiatePayment_Handler, + }, + { + MethodName: "InitiateTransfer", + Handler: _WalletService_InitiateTransfer_Handler, + }, + { + MethodName: "GetTransactions", + Handler: _WalletService_GetTransactions_Handler, + }, + { + MethodName: "ResolveAccount", + Handler: _WalletService_ResolveAccount_Handler, + }, + { + MethodName: "VerifyNIN", + Handler: _WalletService_VerifyNIN_Handler, + }, + { + MethodName: "VerifyBVNImage", + Handler: _WalletService_VerifyBVNImage_Handler, + }, + { + MethodName: "GetPayment", + Handler: _WalletService_GetPayment_Handler, + }, + { + MethodName: "UpdatePaymentStatus", + Handler: _WalletService_UpdatePaymentStatus_Handler, + }, + { + MethodName: "HealthCheck", + Handler: _WalletService_HealthCheck_Handler, + }, + { + MethodName: "GetWallets", + Handler: _WalletService_GetWallets_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "wallet.proto", +} diff --git a/services/wallet/proto/connection/pb/wallet.pb.go b/services/wallet/proto/connection/pb/wallet.pb.go index 6ec04a1..085ab3e 100644 --- a/services/wallet/proto/connection/pb/wallet.pb.go +++ b/services/wallet/proto/connection/pb/wallet.pb.go @@ -2,7 +2,7 @@ // versions: // protoc-gen-go v1.35.1 // protoc v6.33.3 -// source: connection/wallet.proto +// source: wallet.proto package pb @@ -42,7 +42,7 @@ type CreateWalletRequest struct { func (x *CreateWalletRequest) Reset() { *x = CreateWalletRequest{} - mi := &file_connection_wallet_proto_msgTypes[0] + mi := &file_wallet_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -54,7 +54,7 @@ func (x *CreateWalletRequest) String() string { func (*CreateWalletRequest) ProtoMessage() {} func (x *CreateWalletRequest) ProtoReflect() protoreflect.Message { - mi := &file_connection_wallet_proto_msgTypes[0] + mi := &file_wallet_proto_msgTypes[0] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -67,7 +67,7 @@ func (x *CreateWalletRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateWalletRequest.ProtoReflect.Descriptor instead. func (*CreateWalletRequest) Descriptor() ([]byte, []int) { - return file_connection_wallet_proto_rawDescGZIP(), []int{0} + return file_wallet_proto_rawDescGZIP(), []int{0} } func (x *CreateWalletRequest) GetFirstname() string { @@ -179,7 +179,7 @@ type CreateWalletResponse struct { func (x *CreateWalletResponse) Reset() { *x = CreateWalletResponse{} - mi := &file_connection_wallet_proto_msgTypes[1] + mi := &file_wallet_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -191,7 +191,7 @@ func (x *CreateWalletResponse) String() string { func (*CreateWalletResponse) ProtoMessage() {} func (x *CreateWalletResponse) ProtoReflect() protoreflect.Message { - mi := &file_connection_wallet_proto_msgTypes[1] + mi := &file_wallet_proto_msgTypes[1] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -204,7 +204,7 @@ func (x *CreateWalletResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateWalletResponse.ProtoReflect.Descriptor instead. func (*CreateWalletResponse) Descriptor() ([]byte, []int) { - return file_connection_wallet_proto_rawDescGZIP(), []int{1} + return file_wallet_proto_rawDescGZIP(), []int{1} } func (x *CreateWalletResponse) GetSuccess() bool { @@ -282,7 +282,7 @@ type InitiatePaymentRequest struct { func (x *InitiatePaymentRequest) Reset() { *x = InitiatePaymentRequest{} - mi := &file_connection_wallet_proto_msgTypes[2] + mi := &file_wallet_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -294,7 +294,7 @@ func (x *InitiatePaymentRequest) String() string { func (*InitiatePaymentRequest) ProtoMessage() {} func (x *InitiatePaymentRequest) ProtoReflect() protoreflect.Message { - mi := &file_connection_wallet_proto_msgTypes[2] + mi := &file_wallet_proto_msgTypes[2] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -307,7 +307,7 @@ func (x *InitiatePaymentRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use InitiatePaymentRequest.ProtoReflect.Descriptor instead. func (*InitiatePaymentRequest) Descriptor() ([]byte, []int) { - return file_connection_wallet_proto_rawDescGZIP(), []int{2} + return file_wallet_proto_rawDescGZIP(), []int{2} } func (x *InitiatePaymentRequest) GetAmount() int64 { @@ -344,7 +344,7 @@ type InitiatePaymentResponse struct { func (x *InitiatePaymentResponse) Reset() { *x = InitiatePaymentResponse{} - mi := &file_connection_wallet_proto_msgTypes[3] + mi := &file_wallet_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -356,7 +356,7 @@ func (x *InitiatePaymentResponse) String() string { func (*InitiatePaymentResponse) ProtoMessage() {} func (x *InitiatePaymentResponse) ProtoReflect() protoreflect.Message { - mi := &file_connection_wallet_proto_msgTypes[3] + mi := &file_wallet_proto_msgTypes[3] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -369,7 +369,7 @@ func (x *InitiatePaymentResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use InitiatePaymentResponse.ProtoReflect.Descriptor instead. func (*InitiatePaymentResponse) Descriptor() ([]byte, []int) { - return file_connection_wallet_proto_rawDescGZIP(), []int{3} + return file_wallet_proto_rawDescGZIP(), []int{3} } func (x *InitiatePaymentResponse) GetSuccess() bool { @@ -415,7 +415,7 @@ type InitiateTransferRequest struct { func (x *InitiateTransferRequest) Reset() { *x = InitiateTransferRequest{} - mi := &file_connection_wallet_proto_msgTypes[4] + mi := &file_wallet_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -427,7 +427,7 @@ func (x *InitiateTransferRequest) String() string { func (*InitiateTransferRequest) ProtoMessage() {} func (x *InitiateTransferRequest) ProtoReflect() protoreflect.Message { - mi := &file_connection_wallet_proto_msgTypes[4] + mi := &file_wallet_proto_msgTypes[4] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -440,7 +440,7 @@ func (x *InitiateTransferRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use InitiateTransferRequest.ProtoReflect.Descriptor instead. func (*InitiateTransferRequest) Descriptor() ([]byte, []int) { - return file_connection_wallet_proto_rawDescGZIP(), []int{4} + return file_wallet_proto_rawDescGZIP(), []int{4} } func (x *InitiateTransferRequest) GetTransactionReference() string { @@ -498,7 +498,7 @@ type InitiateTransferResponse struct { func (x *InitiateTransferResponse) Reset() { *x = InitiateTransferResponse{} - mi := &file_connection_wallet_proto_msgTypes[5] + mi := &file_wallet_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -510,7 +510,7 @@ func (x *InitiateTransferResponse) String() string { func (*InitiateTransferResponse) ProtoMessage() {} func (x *InitiateTransferResponse) ProtoReflect() protoreflect.Message { - mi := &file_connection_wallet_proto_msgTypes[5] + mi := &file_wallet_proto_msgTypes[5] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -523,7 +523,7 @@ func (x *InitiateTransferResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use InitiateTransferResponse.ProtoReflect.Descriptor instead. func (*InitiateTransferResponse) Descriptor() ([]byte, []int) { - return file_connection_wallet_proto_rawDescGZIP(), []int{5} + return file_wallet_proto_rawDescGZIP(), []int{5} } func (x *InitiateTransferResponse) GetSuccess() bool { @@ -564,7 +564,7 @@ type GetTransactionsRequest struct { func (x *GetTransactionsRequest) Reset() { *x = GetTransactionsRequest{} - mi := &file_connection_wallet_proto_msgTypes[6] + mi := &file_wallet_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -576,7 +576,7 @@ func (x *GetTransactionsRequest) String() string { func (*GetTransactionsRequest) ProtoMessage() {} func (x *GetTransactionsRequest) ProtoReflect() protoreflect.Message { - mi := &file_connection_wallet_proto_msgTypes[6] + mi := &file_wallet_proto_msgTypes[6] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -589,7 +589,7 @@ func (x *GetTransactionsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetTransactionsRequest.ProtoReflect.Descriptor instead. func (*GetTransactionsRequest) Descriptor() ([]byte, []int) { - return file_connection_wallet_proto_rawDescGZIP(), []int{6} + return file_wallet_proto_rawDescGZIP(), []int{6} } func (x *GetTransactionsRequest) GetCustomerIdentifier() string { @@ -611,7 +611,7 @@ type GetTransactionsResponse struct { func (x *GetTransactionsResponse) Reset() { *x = GetTransactionsResponse{} - mi := &file_connection_wallet_proto_msgTypes[7] + mi := &file_wallet_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -623,7 +623,7 @@ func (x *GetTransactionsResponse) String() string { func (*GetTransactionsResponse) ProtoMessage() {} func (x *GetTransactionsResponse) ProtoReflect() protoreflect.Message { - mi := &file_connection_wallet_proto_msgTypes[7] + mi := &file_wallet_proto_msgTypes[7] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -636,7 +636,7 @@ func (x *GetTransactionsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetTransactionsResponse.ProtoReflect.Descriptor instead. func (*GetTransactionsResponse) Descriptor() ([]byte, []int) { - return file_connection_wallet_proto_rawDescGZIP(), []int{7} + return file_wallet_proto_rawDescGZIP(), []int{7} } func (x *GetTransactionsResponse) GetSuccess() bool { @@ -671,7 +671,7 @@ type ResolveAccountRequest struct { func (x *ResolveAccountRequest) Reset() { *x = ResolveAccountRequest{} - mi := &file_connection_wallet_proto_msgTypes[8] + mi := &file_wallet_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -683,7 +683,7 @@ func (x *ResolveAccountRequest) String() string { func (*ResolveAccountRequest) ProtoMessage() {} func (x *ResolveAccountRequest) ProtoReflect() protoreflect.Message { - mi := &file_connection_wallet_proto_msgTypes[8] + mi := &file_wallet_proto_msgTypes[8] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -696,7 +696,7 @@ func (x *ResolveAccountRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ResolveAccountRequest.ProtoReflect.Descriptor instead. func (*ResolveAccountRequest) Descriptor() ([]byte, []int) { - return file_connection_wallet_proto_rawDescGZIP(), []int{8} + return file_wallet_proto_rawDescGZIP(), []int{8} } func (x *ResolveAccountRequest) GetBankCode() string { @@ -727,7 +727,7 @@ type ResolveAccountResponse struct { func (x *ResolveAccountResponse) Reset() { *x = ResolveAccountResponse{} - mi := &file_connection_wallet_proto_msgTypes[9] + mi := &file_wallet_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -739,7 +739,7 @@ func (x *ResolveAccountResponse) String() string { func (*ResolveAccountResponse) ProtoMessage() {} func (x *ResolveAccountResponse) ProtoReflect() protoreflect.Message { - mi := &file_connection_wallet_proto_msgTypes[9] + mi := &file_wallet_proto_msgTypes[9] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -752,7 +752,7 @@ func (x *ResolveAccountResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ResolveAccountResponse.ProtoReflect.Descriptor instead. func (*ResolveAccountResponse) Descriptor() ([]byte, []int) { - return file_connection_wallet_proto_rawDescGZIP(), []int{9} + return file_wallet_proto_rawDescGZIP(), []int{9} } func (x *ResolveAccountResponse) GetSuccess() bool { @@ -805,7 +805,7 @@ type TransactionData struct { func (x *TransactionData) Reset() { *x = TransactionData{} - mi := &file_connection_wallet_proto_msgTypes[10] + mi := &file_wallet_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -817,7 +817,7 @@ func (x *TransactionData) String() string { func (*TransactionData) ProtoMessage() {} func (x *TransactionData) ProtoReflect() protoreflect.Message { - mi := &file_connection_wallet_proto_msgTypes[10] + mi := &file_wallet_proto_msgTypes[10] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -830,7 +830,7 @@ func (x *TransactionData) ProtoReflect() protoreflect.Message { // Deprecated: Use TransactionData.ProtoReflect.Descriptor instead. func (*TransactionData) Descriptor() ([]byte, []int) { - return file_connection_wallet_proto_rawDescGZIP(), []int{10} + return file_wallet_proto_rawDescGZIP(), []int{10} } func (x *TransactionData) GetAmount() int64 { @@ -885,7 +885,7 @@ type VerifyNINRequest struct { func (x *VerifyNINRequest) Reset() { *x = VerifyNINRequest{} - mi := &file_connection_wallet_proto_msgTypes[11] + mi := &file_wallet_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -897,7 +897,7 @@ func (x *VerifyNINRequest) String() string { func (*VerifyNINRequest) ProtoMessage() {} func (x *VerifyNINRequest) ProtoReflect() protoreflect.Message { - mi := &file_connection_wallet_proto_msgTypes[11] + mi := &file_wallet_proto_msgTypes[11] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -910,7 +910,7 @@ func (x *VerifyNINRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use VerifyNINRequest.ProtoReflect.Descriptor instead. func (*VerifyNINRequest) Descriptor() ([]byte, []int) { - return file_connection_wallet_proto_rawDescGZIP(), []int{11} + return file_wallet_proto_rawDescGZIP(), []int{11} } func (x *VerifyNINRequest) GetNin() string { @@ -933,7 +933,7 @@ type VerifyNINResponse struct { func (x *VerifyNINResponse) Reset() { *x = VerifyNINResponse{} - mi := &file_connection_wallet_proto_msgTypes[12] + mi := &file_wallet_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -945,7 +945,7 @@ func (x *VerifyNINResponse) String() string { func (*VerifyNINResponse) ProtoMessage() {} func (x *VerifyNINResponse) ProtoReflect() protoreflect.Message { - mi := &file_connection_wallet_proto_msgTypes[12] + mi := &file_wallet_proto_msgTypes[12] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -958,7 +958,7 @@ func (x *VerifyNINResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use VerifyNINResponse.ProtoReflect.Descriptor instead. func (*VerifyNINResponse) Descriptor() ([]byte, []int) { - return file_connection_wallet_proto_rawDescGZIP(), []int{12} + return file_wallet_proto_rawDescGZIP(), []int{12} } func (x *VerifyNINResponse) GetSuccess() bool { @@ -1000,7 +1000,7 @@ type VerifyBVNImageRequest struct { func (x *VerifyBVNImageRequest) Reset() { *x = VerifyBVNImageRequest{} - mi := &file_connection_wallet_proto_msgTypes[13] + mi := &file_wallet_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1012,7 +1012,7 @@ func (x *VerifyBVNImageRequest) String() string { func (*VerifyBVNImageRequest) ProtoMessage() {} func (x *VerifyBVNImageRequest) ProtoReflect() protoreflect.Message { - mi := &file_connection_wallet_proto_msgTypes[13] + mi := &file_wallet_proto_msgTypes[13] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1025,7 +1025,7 @@ func (x *VerifyBVNImageRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use VerifyBVNImageRequest.ProtoReflect.Descriptor instead. func (*VerifyBVNImageRequest) Descriptor() ([]byte, []int) { - return file_connection_wallet_proto_rawDescGZIP(), []int{13} + return file_wallet_proto_rawDescGZIP(), []int{13} } func (x *VerifyBVNImageRequest) GetBase64Image() string { @@ -1055,7 +1055,7 @@ type VerifyBVNImageResponse struct { func (x *VerifyBVNImageResponse) Reset() { *x = VerifyBVNImageResponse{} - mi := &file_connection_wallet_proto_msgTypes[14] + mi := &file_wallet_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1067,7 +1067,7 @@ func (x *VerifyBVNImageResponse) String() string { func (*VerifyBVNImageResponse) ProtoMessage() {} func (x *VerifyBVNImageResponse) ProtoReflect() protoreflect.Message { - mi := &file_connection_wallet_proto_msgTypes[14] + mi := &file_wallet_proto_msgTypes[14] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1080,7 +1080,7 @@ func (x *VerifyBVNImageResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use VerifyBVNImageResponse.ProtoReflect.Descriptor instead. func (*VerifyBVNImageResponse) Descriptor() ([]byte, []int) { - return file_connection_wallet_proto_rawDescGZIP(), []int{14} + return file_wallet_proto_rawDescGZIP(), []int{14} } func (x *VerifyBVNImageResponse) GetSuccess() bool { @@ -1119,7 +1119,7 @@ type HealthCheckRequest struct { func (x *HealthCheckRequest) Reset() { *x = HealthCheckRequest{} - mi := &file_connection_wallet_proto_msgTypes[15] + mi := &file_wallet_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1131,7 +1131,7 @@ func (x *HealthCheckRequest) String() string { func (*HealthCheckRequest) ProtoMessage() {} func (x *HealthCheckRequest) ProtoReflect() protoreflect.Message { - mi := &file_connection_wallet_proto_msgTypes[15] + mi := &file_wallet_proto_msgTypes[15] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1144,7 +1144,7 @@ func (x *HealthCheckRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use HealthCheckRequest.ProtoReflect.Descriptor instead. func (*HealthCheckRequest) Descriptor() ([]byte, []int) { - return file_connection_wallet_proto_rawDescGZIP(), []int{15} + return file_wallet_proto_rawDescGZIP(), []int{15} } type HealthCheckResponse struct { @@ -1157,7 +1157,7 @@ type HealthCheckResponse struct { func (x *HealthCheckResponse) Reset() { *x = HealthCheckResponse{} - mi := &file_connection_wallet_proto_msgTypes[16] + mi := &file_wallet_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1169,7 +1169,7 @@ func (x *HealthCheckResponse) String() string { func (*HealthCheckResponse) ProtoMessage() {} func (x *HealthCheckResponse) ProtoReflect() protoreflect.Message { - mi := &file_connection_wallet_proto_msgTypes[16] + mi := &file_wallet_proto_msgTypes[16] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1182,7 +1182,7 @@ func (x *HealthCheckResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use HealthCheckResponse.ProtoReflect.Descriptor instead. func (*HealthCheckResponse) Descriptor() ([]byte, []int) { - return file_connection_wallet_proto_rawDescGZIP(), []int{16} + return file_wallet_proto_rawDescGZIP(), []int{16} } func (x *HealthCheckResponse) GetStatus() string { @@ -1202,7 +1202,7 @@ type GetPaymentRequest struct { func (x *GetPaymentRequest) Reset() { *x = GetPaymentRequest{} - mi := &file_connection_wallet_proto_msgTypes[17] + mi := &file_wallet_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1214,7 +1214,7 @@ func (x *GetPaymentRequest) String() string { func (*GetPaymentRequest) ProtoMessage() {} func (x *GetPaymentRequest) ProtoReflect() protoreflect.Message { - mi := &file_connection_wallet_proto_msgTypes[17] + mi := &file_wallet_proto_msgTypes[17] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1227,7 +1227,7 @@ func (x *GetPaymentRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetPaymentRequest.ProtoReflect.Descriptor instead. func (*GetPaymentRequest) Descriptor() ([]byte, []int) { - return file_connection_wallet_proto_rawDescGZIP(), []int{17} + return file_wallet_proto_rawDescGZIP(), []int{17} } func (x *GetPaymentRequest) GetPaymentId() uint64 { @@ -1249,7 +1249,7 @@ type GetPaymentResponse struct { func (x *GetPaymentResponse) Reset() { *x = GetPaymentResponse{} - mi := &file_connection_wallet_proto_msgTypes[18] + mi := &file_wallet_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1261,7 +1261,7 @@ func (x *GetPaymentResponse) String() string { func (*GetPaymentResponse) ProtoMessage() {} func (x *GetPaymentResponse) ProtoReflect() protoreflect.Message { - mi := &file_connection_wallet_proto_msgTypes[18] + mi := &file_wallet_proto_msgTypes[18] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1274,7 +1274,7 @@ func (x *GetPaymentResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetPaymentResponse.ProtoReflect.Descriptor instead. func (*GetPaymentResponse) Descriptor() ([]byte, []int) { - return file_connection_wallet_proto_rawDescGZIP(), []int{18} + return file_wallet_proto_rawDescGZIP(), []int{18} } func (x *GetPaymentResponse) GetSuccess() bool { @@ -1319,7 +1319,7 @@ type PaymentData struct { func (x *PaymentData) Reset() { *x = PaymentData{} - mi := &file_connection_wallet_proto_msgTypes[19] + mi := &file_wallet_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1331,7 +1331,7 @@ func (x *PaymentData) String() string { func (*PaymentData) ProtoMessage() {} func (x *PaymentData) ProtoReflect() protoreflect.Message { - mi := &file_connection_wallet_proto_msgTypes[19] + mi := &file_wallet_proto_msgTypes[19] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1344,7 +1344,7 @@ func (x *PaymentData) ProtoReflect() protoreflect.Message { // Deprecated: Use PaymentData.ProtoReflect.Descriptor instead. func (*PaymentData) Descriptor() ([]byte, []int) { - return file_connection_wallet_proto_rawDescGZIP(), []int{19} + return file_wallet_proto_rawDescGZIP(), []int{19} } func (x *PaymentData) GetId() uint64 { @@ -1444,7 +1444,7 @@ type UpdatePaymentStatusRequest struct { func (x *UpdatePaymentStatusRequest) Reset() { *x = UpdatePaymentStatusRequest{} - mi := &file_connection_wallet_proto_msgTypes[20] + mi := &file_wallet_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1456,7 +1456,7 @@ func (x *UpdatePaymentStatusRequest) String() string { func (*UpdatePaymentStatusRequest) ProtoMessage() {} func (x *UpdatePaymentStatusRequest) ProtoReflect() protoreflect.Message { - mi := &file_connection_wallet_proto_msgTypes[20] + mi := &file_wallet_proto_msgTypes[20] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1469,7 +1469,7 @@ func (x *UpdatePaymentStatusRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdatePaymentStatusRequest.ProtoReflect.Descriptor instead. func (*UpdatePaymentStatusRequest) Descriptor() ([]byte, []int) { - return file_connection_wallet_proto_rawDescGZIP(), []int{20} + return file_wallet_proto_rawDescGZIP(), []int{20} } func (x *UpdatePaymentStatusRequest) GetPaymentId() uint64 { @@ -1511,7 +1511,7 @@ type UpdatePaymentStatusResponse struct { func (x *UpdatePaymentStatusResponse) Reset() { *x = UpdatePaymentStatusResponse{} - mi := &file_connection_wallet_proto_msgTypes[21] + mi := &file_wallet_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1523,7 +1523,7 @@ func (x *UpdatePaymentStatusResponse) String() string { func (*UpdatePaymentStatusResponse) ProtoMessage() {} func (x *UpdatePaymentStatusResponse) ProtoReflect() protoreflect.Message { - mi := &file_connection_wallet_proto_msgTypes[21] + mi := &file_wallet_proto_msgTypes[21] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1536,7 +1536,7 @@ func (x *UpdatePaymentStatusResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdatePaymentStatusResponse.ProtoReflect.Descriptor instead. func (*UpdatePaymentStatusResponse) Descriptor() ([]byte, []int) { - return file_connection_wallet_proto_rawDescGZIP(), []int{21} + return file_wallet_proto_rawDescGZIP(), []int{21} } func (x *UpdatePaymentStatusResponse) GetSuccess() bool { @@ -1553,282 +1553,510 @@ func (x *UpdatePaymentStatusResponse) GetMessage() string { return "" } -var File_connection_wallet_proto protoreflect.FileDescriptor - -var file_connection_wallet_proto_rawDesc = []byte{ - 0x0a, 0x17, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x77, 0x61, 0x6c, - 0x6c, 0x65, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x06, 0x77, 0x61, 0x6c, 0x6c, 0x65, - 0x74, 0x22, 0xf1, 0x02, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x57, 0x61, 0x6c, 0x6c, - 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x66, 0x69, 0x72, - 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x69, - 0x72, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x6d, 0x69, 0x64, 0x64, 0x6c, - 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x69, 0x64, - 0x64, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6e, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x6e, 0x69, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x66, 0x42, - 0x69, 0x72, 0x74, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x61, 0x74, 0x65, - 0x4f, 0x66, 0x42, 0x69, 0x72, 0x74, 0x68, 0x12, 0x10, 0x0a, 0x03, 0x62, 0x76, 0x6e, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x62, 0x76, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x68, 0x6f, - 0x6e, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x12, - 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x67, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x67, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x16, 0x0a, - 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, - 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x54, 0x79, 0x70, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x62, 0x75, 0x73, 0x69, 0x6e, - 0x65, 0x73, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x62, - 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0xa8, 0x02, 0x0a, 0x14, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, - 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, - 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x66, 0x69, 0x72, 0x73, 0x74, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x69, 0x72, 0x73, 0x74, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x6d, 0x69, 0x64, 0x64, 0x6c, 0x65, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x69, 0x64, 0x64, 0x6c, 0x65, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, - 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x6f, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x6f, 0x12, 0x20, - 0x0a, 0x0b, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x54, 0x69, 0x65, 0x72, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x54, 0x69, 0x65, 0x72, - 0x12, 0x2e, 0x0a, 0x12, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x63, 0x75, - 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, - 0x22, 0x62, 0x0a, 0x16, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, - 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, - 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, - 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x75, 0x72, 0x72, - 0x65, 0x6e, 0x63, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x75, 0x72, 0x72, - 0x65, 0x6e, 0x63, 0x79, 0x22, 0x83, 0x01, 0x0a, 0x17, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, - 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, - 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x18, - 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x68, 0x65, 0x63, - 0x6b, 0x6f, 0x75, 0x74, 0x55, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, - 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x55, 0x72, 0x6c, 0x22, 0xe1, 0x01, 0x0a, 0x17, 0x49, - 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x14, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, - 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, - 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x62, 0x61, 0x6e, 0x6b, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x62, 0x61, 0x6e, 0x6b, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x24, - 0x0a, 0x0d, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x75, - 0x6d, 0x62, 0x65, 0x72, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, - 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x6d, 0x61, 0x72, 0x6b, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x22, 0x96, - 0x01, 0x0a, 0x18, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x66, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, - 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x12, 0x32, 0x0a, 0x14, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x14, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x22, 0x48, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x2e, 0x0a, 0x12, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x49, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x63, - 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, - 0x72, 0x22, 0x8a, 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, - 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, - 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x12, 0x3b, 0x0a, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, - 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, - 0x52, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x59, - 0x0a, 0x15, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x62, 0x61, 0x6e, 0x6b, 0x43, - 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x62, 0x61, 0x6e, 0x6b, 0x43, - 0x6f, 0x64, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x75, - 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, 0xa8, 0x01, 0x0a, 0x16, 0x52, 0x65, - 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x12, - 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, - 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x20, 0x0a, 0x0b, - 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x24, - 0x0a, 0x0d, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x75, - 0x6d, 0x62, 0x65, 0x72, 0x22, 0xd1, 0x01, 0x0a, 0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, - 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, - 0x12, 0x26, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x12, 0x1e, 0x0a, 0x0a, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x52, 0x65, 0x66, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x52, 0x65, 0x66, 0x12, 0x28, 0x0a, 0x0f, 0x74, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, - 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x24, 0x0a, 0x10, 0x56, 0x65, 0x72, 0x69, - 0x66, 0x79, 0x4e, 0x49, 0x4e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, - 0x6e, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6e, 0x69, 0x6e, 0x22, 0x75, - 0x0a, 0x11, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x4e, 0x49, 0x4e, 0x52, 0x65, 0x73, 0x70, 0x6f, +type GetWalletsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + UserId string `protobuf:"bytes,1,opt,name=userId,proto3" json:"userId,omitempty"` +} + +func (x *GetWalletsRequest) Reset() { + *x = GetWalletsRequest{} + mi := &file_wallet_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetWalletsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetWalletsRequest) ProtoMessage() {} + +func (x *GetWalletsRequest) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[22] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetWalletsRequest.ProtoReflect.Descriptor instead. +func (*GetWalletsRequest) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{22} +} + +func (x *GetWalletsRequest) GetUserId() string { + if x != nil { + return x.UserId + } + return "" +} + +type GetWalletsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Success bool `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"` + Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` + Wallets []*WalletData `protobuf:"bytes,3,rep,name=wallets,proto3" json:"wallets,omitempty"` +} + +func (x *GetWalletsResponse) Reset() { + *x = GetWalletsResponse{} + mi := &file_wallet_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetWalletsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetWalletsResponse) ProtoMessage() {} + +func (x *GetWalletsResponse) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[23] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetWalletsResponse.ProtoReflect.Descriptor instead. +func (*GetWalletsResponse) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{23} +} + +func (x *GetWalletsResponse) GetSuccess() bool { + if x != nil { + return x.Success + } + return false +} + +func (x *GetWalletsResponse) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +func (x *GetWalletsResponse) GetWallets() []*WalletData { + if x != nil { + return x.Wallets + } + return nil +} + +type WalletData struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + AccountNumber string `protobuf:"bytes,2,opt,name=accountNumber,proto3" json:"accountNumber,omitempty"` + AccountType string `protobuf:"bytes,3,opt,name=accountType,proto3" json:"accountType,omitempty"` + AccountCategory string `protobuf:"bytes,4,opt,name=accountCategory,proto3" json:"accountCategory,omitempty"` + CurrencyCode string `protobuf:"bytes,5,opt,name=currencyCode,proto3" json:"currencyCode,omitempty"` + Status string `protobuf:"bytes,6,opt,name=status,proto3" json:"status,omitempty"` + AccountNickname string `protobuf:"bytes,7,opt,name=accountNickname,proto3" json:"accountNickname,omitempty"` +} + +func (x *WalletData) Reset() { + *x = WalletData{} + mi := &file_wallet_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *WalletData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WalletData) ProtoMessage() {} + +func (x *WalletData) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[24] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use WalletData.ProtoReflect.Descriptor instead. +func (*WalletData) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{24} +} + +func (x *WalletData) GetId() uint64 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *WalletData) GetAccountNumber() string { + if x != nil { + return x.AccountNumber + } + return "" +} + +func (x *WalletData) GetAccountType() string { + if x != nil { + return x.AccountType + } + return "" +} + +func (x *WalletData) GetAccountCategory() string { + if x != nil { + return x.AccountCategory + } + return "" +} + +func (x *WalletData) GetCurrencyCode() string { + if x != nil { + return x.CurrencyCode + } + return "" +} + +func (x *WalletData) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +func (x *WalletData) GetAccountNickname() string { + if x != nil { + return x.AccountNickname + } + return "" +} + +var File_wallet_proto protoreflect.FileDescriptor + +var file_wallet_proto_rawDesc = []byte{ + 0x0a, 0x0c, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x06, + 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x22, 0xf1, 0x02, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, + 0x0a, 0x09, 0x66, 0x69, 0x72, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x66, 0x69, 0x72, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, + 0x6d, 0x69, 0x64, 0x64, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0a, 0x6d, 0x69, 0x64, 0x64, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, + 0x6c, 0x61, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x6c, 0x61, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6e, 0x69, 0x6e, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6e, 0x69, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x61, + 0x74, 0x65, 0x4f, 0x66, 0x42, 0x69, 0x72, 0x74, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x66, 0x42, 0x69, 0x72, 0x74, 0x68, 0x12, 0x10, 0x0a, 0x03, + 0x62, 0x76, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x62, 0x76, 0x6e, 0x12, 0x14, + 0x0a, 0x05, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, + 0x68, 0x6f, 0x6e, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x67, 0x65, + 0x6e, 0x64, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x67, 0x65, 0x6e, 0x64, + 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x0a, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x22, 0x0a, 0x0c, + 0x62, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x0c, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0c, 0x62, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x4e, 0x61, 0x6d, 0x65, + 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0xa8, 0x02, 0x0a, 0x14, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x69, - 0x73, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, - 0x56, 0x61, 0x6c, 0x69, 0x64, 0x22, 0x4b, 0x0a, 0x15, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x42, - 0x56, 0x4e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, - 0x0a, 0x0b, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0b, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x49, 0x6d, 0x61, 0x67, 0x65, - 0x12, 0x10, 0x0a, 0x03, 0x62, 0x76, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x62, - 0x76, 0x6e, 0x22, 0x84, 0x01, 0x0a, 0x16, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x42, 0x56, 0x4e, - 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, - 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, - 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4d, 0x61, - 0x74, 0x63, 0x68, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x6d, 0x61, - 0x67, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x64, 0x22, 0x14, 0x0a, 0x12, 0x48, 0x65, 0x61, - 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, - 0x2d, 0x0a, 0x13, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x31, - 0x0a, 0x11, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x49, - 0x64, 0x22, 0x71, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x27, 0x0a, 0x04, 0x64, - 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x77, 0x61, 0x6c, 0x6c, - 0x65, 0x74, 0x2e, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, - 0x64, 0x61, 0x74, 0x61, 0x22, 0xfb, 0x02, 0x0a, 0x0b, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, - 0x44, 0x61, 0x74, 0x61, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, - 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x06, 0x61, 0x6d, - 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, - 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x61, - 0x6e, 0x6b, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x62, 0x61, 0x6e, 0x6b, 0x12, 0x30, - 0x0a, 0x13, 0x6d, 0x65, 0x72, 0x63, 0x68, 0x61, 0x6e, 0x74, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x4e, - 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x6d, 0x65, 0x72, - 0x63, 0x68, 0x61, 0x6e, 0x74, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, - 0x12, 0x24, 0x0a, 0x0d, 0x6d, 0x65, 0x72, 0x63, 0x68, 0x61, 0x6e, 0x74, 0x45, 0x6d, 0x61, 0x69, - 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6d, 0x65, 0x72, 0x63, 0x68, 0x61, 0x6e, - 0x74, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x26, 0x0a, 0x0e, 0x61, 0x64, 0x76, 0x61, 0x6e, 0x63, - 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, - 0x61, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x16, - 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x74, 0x72, 0x75, 0x73, 0x74, 0x53, - 0x63, 0x6f, 0x72, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0a, 0x74, 0x72, 0x75, 0x73, - 0x74, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, - 0x73, 0x41, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x65, 0x78, 0x70, 0x69, 0x72, - 0x65, 0x73, 0x41, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, - 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x41, 0x74, 0x22, 0x8c, 0x01, 0x0a, 0x1a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, - 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, - 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x74, 0x72, 0x75, 0x73, 0x74, - 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0a, 0x74, 0x72, 0x75, - 0x73, 0x74, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, - 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, - 0x79, 0x22, 0x51, 0x0a, 0x1b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, - 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x32, 0xaa, 0x06, 0x0a, 0x0d, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x49, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x12, 0x1b, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x52, 0x0a, 0x0f, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, - 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1e, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x49, 0x6e, - 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x49, 0x6e, + 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x66, + 0x69, 0x72, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x66, 0x69, 0x72, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x6d, 0x69, 0x64, + 0x64, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, + 0x69, 0x64, 0x64, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x73, + 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x61, 0x73, + 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x4e, 0x6f, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x4e, 0x6f, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x54, 0x69, + 0x65, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x74, 0x54, 0x69, 0x65, 0x72, 0x12, 0x2e, 0x0a, 0x12, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, + 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x12, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x66, 0x69, 0x65, 0x72, 0x22, 0x62, 0x0a, 0x16, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, + 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x1a, 0x0a, + 0x08, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x83, 0x01, 0x0a, 0x17, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x10, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, - 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x12, 0x1f, 0x2e, 0x77, 0x61, 0x6c, 0x6c, - 0x65, 0x74, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x66, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x77, 0x61, 0x6c, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, + 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, + 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x20, 0x0a, + 0x0b, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x55, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x55, 0x72, 0x6c, 0x22, + 0xe1, 0x01, 0x0a, 0x17, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x66, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x14, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, + 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, + 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x62, 0x61, 0x6e, 0x6b, 0x43, + 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x62, 0x61, 0x6e, 0x6b, 0x43, + 0x6f, 0x64, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, + 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x6d, + 0x61, 0x72, 0x6b, 0x22, 0x96, 0x01, 0x0a, 0x18, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, + 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x18, + 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x32, 0x0a, 0x14, 0x74, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x22, 0x48, 0x0a, 0x16, + 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x12, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, + 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x12, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x22, 0x8a, 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3b, 0x0a, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x77, + 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x22, 0x59, 0x0a, 0x15, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x41, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, + 0x62, 0x61, 0x6e, 0x6b, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x62, 0x61, 0x6e, 0x6b, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0d, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, 0xa8, + 0x01, 0x0a, 0x16, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, 0xd1, 0x01, 0x0a, 0x0f, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, + 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x61, + 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x12, 0x1e, 0x0a, + 0x0a, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x52, 0x65, 0x66, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0a, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x52, 0x65, 0x66, 0x12, 0x28, 0x0a, + 0x0f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x41, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x24, 0x0a, + 0x10, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x4e, 0x49, 0x4e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6e, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6e, 0x69, 0x6e, 0x22, 0x75, 0x0a, 0x11, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x4e, 0x49, 0x4e, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x12, 0x18, 0x0a, 0x07, 0x69, 0x73, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x07, 0x69, 0x73, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x22, 0x4b, 0x0a, 0x15, 0x56, 0x65, + 0x72, 0x69, 0x66, 0x79, 0x42, 0x56, 0x4e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x49, 0x6d, 0x61, + 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, + 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x62, 0x76, 0x6e, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x62, 0x76, 0x6e, 0x22, 0x84, 0x01, 0x0a, 0x16, 0x56, 0x65, 0x72, 0x69, + 0x66, 0x79, 0x42, 0x56, 0x4e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, + 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, + 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x69, 0x6d, + 0x61, 0x67, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0c, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x64, 0x22, 0x14, + 0x0a, 0x12, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x22, 0x2d, 0x0a, 0x13, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, + 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x22, 0x31, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x61, 0x79, 0x6d, + 0x65, 0x6e, 0x74, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x70, 0x61, 0x79, + 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x71, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, + 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, + 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, + 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x12, 0x27, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, + 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x44, + 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xfb, 0x02, 0x0a, 0x0b, 0x50, 0x61, + 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, + 0x72, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, + 0x64, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x01, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0d, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, + 0x12, 0x0a, 0x04, 0x62, 0x61, 0x6e, 0x6b, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x62, + 0x61, 0x6e, 0x6b, 0x12, 0x30, 0x0a, 0x13, 0x6d, 0x65, 0x72, 0x63, 0x68, 0x61, 0x6e, 0x74, 0x50, + 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x13, 0x6d, 0x65, 0x72, 0x63, 0x68, 0x61, 0x6e, 0x74, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x4e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x24, 0x0a, 0x0d, 0x6d, 0x65, 0x72, 0x63, 0x68, 0x61, 0x6e, + 0x74, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6d, 0x65, + 0x72, 0x63, 0x68, 0x61, 0x6e, 0x74, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x26, 0x0a, 0x0e, 0x61, + 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0e, 0x61, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x4f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x74, + 0x72, 0x75, 0x73, 0x74, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x01, 0x52, + 0x0a, 0x74, 0x72, 0x75, 0x73, 0x74, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x65, + 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x41, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x41, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x22, 0x8c, 0x01, 0x0a, 0x1a, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, + 0x74, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x70, 0x61, 0x79, 0x6d, 0x65, + 0x6e, 0x74, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1e, 0x0a, 0x0a, + 0x74, 0x72, 0x75, 0x73, 0x74, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, + 0x52, 0x0a, 0x74, 0x72, 0x75, 0x73, 0x74, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x18, 0x0a, 0x07, + 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, + 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x22, 0x51, 0x0a, 0x1b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, + 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x2b, 0x0a, 0x11, 0x47, 0x65, 0x74, + 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, + 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x76, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x57, 0x61, 0x6c, + 0x6c, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, + 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, + 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x12, 0x2c, 0x0a, 0x07, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x12, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, + 0x74, 0x44, 0x61, 0x74, 0x61, 0x52, 0x07, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x73, 0x22, 0xf4, + 0x01, 0x0a, 0x0a, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x24, 0x0a, + 0x0d, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x79, + 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, + 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, + 0x22, 0x0a, 0x0c, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x43, + 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x28, 0x0a, 0x0f, 0x61, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x69, 0x63, + 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x32, 0xef, 0x06, 0x0a, 0x0d, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x49, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x12, 0x1b, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, + 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0f, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x50, 0x61, + 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1e, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x49, + 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x49, + 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x10, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, + 0x74, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x12, 0x1f, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x66, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0f, - 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, - 0x1e, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x1f, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x4f, 0x0a, 0x0e, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x12, 0x1d, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x52, 0x65, 0x73, 0x6f, - 0x6c, 0x76, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x1e, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x6c, - 0x76, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x40, 0x0a, 0x09, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x4e, 0x49, 0x4e, 0x12, 0x18, - 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x4e, 0x49, - 0x4e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, - 0x74, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x4e, 0x49, 0x4e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, 0x0e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x42, 0x56, 0x4e, - 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x1d, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x56, - 0x65, 0x72, 0x69, 0x66, 0x79, 0x42, 0x56, 0x4e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x56, 0x65, - 0x72, 0x69, 0x66, 0x79, 0x42, 0x56, 0x4e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, - 0x6e, 0x74, 0x12, 0x19, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x50, - 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, - 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5e, 0x0a, 0x13, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x12, 0x22, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x55, 0x70, + 0x73, 0x66, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x77, 0x61, + 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x66, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, + 0x0f, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0x1e, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x1f, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x4f, 0x0a, 0x0e, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x41, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x12, 0x1d, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x52, 0x65, 0x73, + 0x6f, 0x6c, 0x76, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x52, 0x65, 0x73, 0x6f, + 0x6c, 0x76, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x40, 0x0a, 0x09, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x4e, 0x49, 0x4e, 0x12, + 0x18, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x4e, + 0x49, 0x4e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x77, 0x61, 0x6c, 0x6c, + 0x65, 0x74, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x4e, 0x49, 0x4e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, 0x0e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x42, 0x56, + 0x4e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x1d, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, + 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x42, 0x56, 0x4e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x56, + 0x65, 0x72, 0x69, 0x66, 0x79, 0x42, 0x56, 0x4e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, + 0x65, 0x6e, 0x74, 0x12, 0x19, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x47, 0x65, 0x74, + 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, + 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, + 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5e, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x0b, 0x48, 0x65, 0x61, - 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x1a, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, - 0x74, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x48, 0x65, - 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x42, 0x39, 0x5a, 0x37, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x50, 0x61, 0x79, 0x47, 0x69, 0x64, 0x69, 0x2f, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x6f, 0x6e, 0x6e, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x70, 0x62, 0x3b, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, + 0x73, 0x12, 0x22, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x0b, 0x48, 0x65, + 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x1a, 0x2e, 0x77, 0x61, 0x6c, 0x6c, + 0x65, 0x74, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x48, + 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x43, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x73, + 0x12, 0x19, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x61, 0x6c, + 0x6c, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x77, 0x61, + 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x39, 0x5a, 0x37, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x50, 0x61, 0x79, 0x47, 0x69, 0x64, 0x69, 0x2f, 0x57, 0x61, + 0x6c, 0x6c, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x70, 0x62, 0x3b, + 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( - file_connection_wallet_proto_rawDescOnce sync.Once - file_connection_wallet_proto_rawDescData = file_connection_wallet_proto_rawDesc + file_wallet_proto_rawDescOnce sync.Once + file_wallet_proto_rawDescData = file_wallet_proto_rawDesc ) -func file_connection_wallet_proto_rawDescGZIP() []byte { - file_connection_wallet_proto_rawDescOnce.Do(func() { - file_connection_wallet_proto_rawDescData = protoimpl.X.CompressGZIP(file_connection_wallet_proto_rawDescData) +func file_wallet_proto_rawDescGZIP() []byte { + file_wallet_proto_rawDescOnce.Do(func() { + file_wallet_proto_rawDescData = protoimpl.X.CompressGZIP(file_wallet_proto_rawDescData) }) - return file_connection_wallet_proto_rawDescData + return file_wallet_proto_rawDescData } -var file_connection_wallet_proto_msgTypes = make([]protoimpl.MessageInfo, 22) -var file_connection_wallet_proto_goTypes = []any{ +var file_wallet_proto_msgTypes = make([]protoimpl.MessageInfo, 25) +var file_wallet_proto_goTypes = []any{ (*CreateWalletRequest)(nil), // 0: wallet.CreateWalletRequest (*CreateWalletResponse)(nil), // 1: wallet.CreateWalletResponse (*InitiatePaymentRequest)(nil), // 2: wallet.InitiatePaymentRequest @@ -1851,58 +2079,64 @@ var file_connection_wallet_proto_goTypes = []any{ (*PaymentData)(nil), // 19: wallet.PaymentData (*UpdatePaymentStatusRequest)(nil), // 20: wallet.UpdatePaymentStatusRequest (*UpdatePaymentStatusResponse)(nil), // 21: wallet.UpdatePaymentStatusResponse + (*GetWalletsRequest)(nil), // 22: wallet.GetWalletsRequest + (*GetWalletsResponse)(nil), // 23: wallet.GetWalletsResponse + (*WalletData)(nil), // 24: wallet.WalletData } -var file_connection_wallet_proto_depIdxs = []int32{ +var file_wallet_proto_depIdxs = []int32{ 10, // 0: wallet.GetTransactionsResponse.transactions:type_name -> wallet.TransactionData 19, // 1: wallet.GetPaymentResponse.data:type_name -> wallet.PaymentData - 0, // 2: wallet.WalletService.CreateWallet:input_type -> wallet.CreateWalletRequest - 2, // 3: wallet.WalletService.InitiatePayment:input_type -> wallet.InitiatePaymentRequest - 4, // 4: wallet.WalletService.InitiateTransfer:input_type -> wallet.InitiateTransferRequest - 6, // 5: wallet.WalletService.GetTransactions:input_type -> wallet.GetTransactionsRequest - 8, // 6: wallet.WalletService.ResolveAccount:input_type -> wallet.ResolveAccountRequest - 11, // 7: wallet.WalletService.VerifyNIN:input_type -> wallet.VerifyNINRequest - 13, // 8: wallet.WalletService.VerifyBVNImage:input_type -> wallet.VerifyBVNImageRequest - 17, // 9: wallet.WalletService.GetPayment:input_type -> wallet.GetPaymentRequest - 20, // 10: wallet.WalletService.UpdatePaymentStatus:input_type -> wallet.UpdatePaymentStatusRequest - 15, // 11: wallet.WalletService.HealthCheck:input_type -> wallet.HealthCheckRequest - 1, // 12: wallet.WalletService.CreateWallet:output_type -> wallet.CreateWalletResponse - 3, // 13: wallet.WalletService.InitiatePayment:output_type -> wallet.InitiatePaymentResponse - 5, // 14: wallet.WalletService.InitiateTransfer:output_type -> wallet.InitiateTransferResponse - 7, // 15: wallet.WalletService.GetTransactions:output_type -> wallet.GetTransactionsResponse - 9, // 16: wallet.WalletService.ResolveAccount:output_type -> wallet.ResolveAccountResponse - 12, // 17: wallet.WalletService.VerifyNIN:output_type -> wallet.VerifyNINResponse - 14, // 18: wallet.WalletService.VerifyBVNImage:output_type -> wallet.VerifyBVNImageResponse - 18, // 19: wallet.WalletService.GetPayment:output_type -> wallet.GetPaymentResponse - 21, // 20: wallet.WalletService.UpdatePaymentStatus:output_type -> wallet.UpdatePaymentStatusResponse - 16, // 21: wallet.WalletService.HealthCheck:output_type -> wallet.HealthCheckResponse - 12, // [12:22] is the sub-list for method output_type - 2, // [2:12] is the sub-list for method input_type - 2, // [2:2] is the sub-list for extension type_name - 2, // [2:2] is the sub-list for extension extendee - 0, // [0:2] is the sub-list for field type_name -} - -func init() { file_connection_wallet_proto_init() } -func file_connection_wallet_proto_init() { - if File_connection_wallet_proto != nil { + 24, // 2: wallet.GetWalletsResponse.wallets:type_name -> wallet.WalletData + 0, // 3: wallet.WalletService.CreateWallet:input_type -> wallet.CreateWalletRequest + 2, // 4: wallet.WalletService.InitiatePayment:input_type -> wallet.InitiatePaymentRequest + 4, // 5: wallet.WalletService.InitiateTransfer:input_type -> wallet.InitiateTransferRequest + 6, // 6: wallet.WalletService.GetTransactions:input_type -> wallet.GetTransactionsRequest + 8, // 7: wallet.WalletService.ResolveAccount:input_type -> wallet.ResolveAccountRequest + 11, // 8: wallet.WalletService.VerifyNIN:input_type -> wallet.VerifyNINRequest + 13, // 9: wallet.WalletService.VerifyBVNImage:input_type -> wallet.VerifyBVNImageRequest + 17, // 10: wallet.WalletService.GetPayment:input_type -> wallet.GetPaymentRequest + 20, // 11: wallet.WalletService.UpdatePaymentStatus:input_type -> wallet.UpdatePaymentStatusRequest + 15, // 12: wallet.WalletService.HealthCheck:input_type -> wallet.HealthCheckRequest + 22, // 13: wallet.WalletService.GetWallets:input_type -> wallet.GetWalletsRequest + 1, // 14: wallet.WalletService.CreateWallet:output_type -> wallet.CreateWalletResponse + 3, // 15: wallet.WalletService.InitiatePayment:output_type -> wallet.InitiatePaymentResponse + 5, // 16: wallet.WalletService.InitiateTransfer:output_type -> wallet.InitiateTransferResponse + 7, // 17: wallet.WalletService.GetTransactions:output_type -> wallet.GetTransactionsResponse + 9, // 18: wallet.WalletService.ResolveAccount:output_type -> wallet.ResolveAccountResponse + 12, // 19: wallet.WalletService.VerifyNIN:output_type -> wallet.VerifyNINResponse + 14, // 20: wallet.WalletService.VerifyBVNImage:output_type -> wallet.VerifyBVNImageResponse + 18, // 21: wallet.WalletService.GetPayment:output_type -> wallet.GetPaymentResponse + 21, // 22: wallet.WalletService.UpdatePaymentStatus:output_type -> wallet.UpdatePaymentStatusResponse + 16, // 23: wallet.WalletService.HealthCheck:output_type -> wallet.HealthCheckResponse + 23, // 24: wallet.WalletService.GetWallets:output_type -> wallet.GetWalletsResponse + 14, // [14:25] is the sub-list for method output_type + 3, // [3:14] is the sub-list for method input_type + 3, // [3:3] is the sub-list for extension type_name + 3, // [3:3] is the sub-list for extension extendee + 0, // [0:3] is the sub-list for field type_name +} + +func init() { file_wallet_proto_init() } +func file_wallet_proto_init() { + if File_wallet_proto != nil { return } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_connection_wallet_proto_rawDesc, + RawDescriptor: file_wallet_proto_rawDesc, NumEnums: 0, - NumMessages: 22, + NumMessages: 25, NumExtensions: 0, NumServices: 1, }, - GoTypes: file_connection_wallet_proto_goTypes, - DependencyIndexes: file_connection_wallet_proto_depIdxs, - MessageInfos: file_connection_wallet_proto_msgTypes, + GoTypes: file_wallet_proto_goTypes, + DependencyIndexes: file_wallet_proto_depIdxs, + MessageInfos: file_wallet_proto_msgTypes, }.Build() - File_connection_wallet_proto = out.File - file_connection_wallet_proto_rawDesc = nil - file_connection_wallet_proto_goTypes = nil - file_connection_wallet_proto_depIdxs = nil + File_wallet_proto = out.File + file_wallet_proto_rawDesc = nil + file_wallet_proto_goTypes = nil + file_wallet_proto_depIdxs = nil } diff --git a/services/wallet/proto/connection/pb/wallet_grpc.pb.go b/services/wallet/proto/connection/pb/wallet_grpc.pb.go index 9128e3d..d622ac2 100644 --- a/services/wallet/proto/connection/pb/wallet_grpc.pb.go +++ b/services/wallet/proto/connection/pb/wallet_grpc.pb.go @@ -2,7 +2,7 @@ // versions: // - protoc-gen-go-grpc v1.5.1 // - protoc v6.33.3 -// source: connection/wallet.proto +// source: wallet.proto package pb @@ -29,6 +29,7 @@ const ( WalletService_GetPayment_FullMethodName = "/wallet.WalletService/GetPayment" WalletService_UpdatePaymentStatus_FullMethodName = "/wallet.WalletService/UpdatePaymentStatus" WalletService_HealthCheck_FullMethodName = "/wallet.WalletService/HealthCheck" + WalletService_GetWallets_FullMethodName = "/wallet.WalletService/GetWallets" ) // WalletServiceClient is the client API for WalletService service. @@ -45,6 +46,7 @@ type WalletServiceClient interface { GetPayment(ctx context.Context, in *GetPaymentRequest, opts ...grpc.CallOption) (*GetPaymentResponse, error) UpdatePaymentStatus(ctx context.Context, in *UpdatePaymentStatusRequest, opts ...grpc.CallOption) (*UpdatePaymentStatusResponse, error) HealthCheck(ctx context.Context, in *HealthCheckRequest, opts ...grpc.CallOption) (*HealthCheckResponse, error) + GetWallets(ctx context.Context, in *GetWalletsRequest, opts ...grpc.CallOption) (*GetWalletsResponse, error) } type walletServiceClient struct { @@ -155,6 +157,16 @@ func (c *walletServiceClient) HealthCheck(ctx context.Context, in *HealthCheckRe return out, nil } +func (c *walletServiceClient) GetWallets(ctx context.Context, in *GetWalletsRequest, opts ...grpc.CallOption) (*GetWalletsResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(GetWalletsResponse) + err := c.cc.Invoke(ctx, WalletService_GetWallets_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + // WalletServiceServer is the server API for WalletService service. // All implementations must embed UnimplementedWalletServiceServer // for forward compatibility. @@ -169,6 +181,7 @@ type WalletServiceServer interface { GetPayment(context.Context, *GetPaymentRequest) (*GetPaymentResponse, error) UpdatePaymentStatus(context.Context, *UpdatePaymentStatusRequest) (*UpdatePaymentStatusResponse, error) HealthCheck(context.Context, *HealthCheckRequest) (*HealthCheckResponse, error) + GetWallets(context.Context, *GetWalletsRequest) (*GetWalletsResponse, error) mustEmbedUnimplementedWalletServiceServer() } @@ -209,6 +222,9 @@ func (UnimplementedWalletServiceServer) UpdatePaymentStatus(context.Context, *Up func (UnimplementedWalletServiceServer) HealthCheck(context.Context, *HealthCheckRequest) (*HealthCheckResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method HealthCheck not implemented") } +func (UnimplementedWalletServiceServer) GetWallets(context.Context, *GetWalletsRequest) (*GetWalletsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetWallets not implemented") +} func (UnimplementedWalletServiceServer) mustEmbedUnimplementedWalletServiceServer() {} func (UnimplementedWalletServiceServer) testEmbeddedByValue() {} @@ -410,6 +426,24 @@ func _WalletService_HealthCheck_Handler(srv interface{}, ctx context.Context, de return interceptor(ctx, in, info, handler) } +func _WalletService_GetWallets_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetWalletsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(WalletServiceServer).GetWallets(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: WalletService_GetWallets_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(WalletServiceServer).GetWallets(ctx, req.(*GetWalletsRequest)) + } + return interceptor(ctx, in, info, handler) +} + // WalletService_ServiceDesc is the grpc.ServiceDesc for WalletService service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -457,7 +491,11 @@ var WalletService_ServiceDesc = grpc.ServiceDesc{ MethodName: "HealthCheck", Handler: _WalletService_HealthCheck_Handler, }, + { + MethodName: "GetWallets", + Handler: _WalletService_GetWallets_Handler, + }, }, Streams: []grpc.StreamDesc{}, - Metadata: "connection/wallet.proto", + Metadata: "wallet.proto", } diff --git a/services/wallet/proto/github.com/PayGidi/WalletService/proto/connection/pb/wallet.pb.go b/services/wallet/proto/github.com/PayGidi/WalletService/proto/connection/pb/wallet.pb.go new file mode 100644 index 0000000..085ab3e --- /dev/null +++ b/services/wallet/proto/github.com/PayGidi/WalletService/proto/connection/pb/wallet.pb.go @@ -0,0 +1,2142 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.35.1 +// protoc v6.33.3 +// source: wallet.proto + +package pb + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type CreateWalletRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Firstname string `protobuf:"bytes,1,opt,name=firstname,proto3" json:"firstname,omitempty"` + Middlename string `protobuf:"bytes,2,opt,name=middlename,proto3" json:"middlename,omitempty"` + Lastname string `protobuf:"bytes,3,opt,name=lastname,proto3" json:"lastname,omitempty"` + Nin string `protobuf:"bytes,4,opt,name=nin,proto3" json:"nin,omitempty"` + DateOfBirth string `protobuf:"bytes,5,opt,name=dateOfBirth,proto3" json:"dateOfBirth,omitempty"` + Bvn string `protobuf:"bytes,6,opt,name=bvn,proto3" json:"bvn,omitempty"` + Phone string `protobuf:"bytes,7,opt,name=phone,proto3" json:"phone,omitempty"` + Email string `protobuf:"bytes,8,opt,name=email,proto3" json:"email,omitempty"` + Gender string `protobuf:"bytes,9,opt,name=gender,proto3" json:"gender,omitempty"` + UserId string `protobuf:"bytes,10,opt,name=userId,proto3" json:"userId,omitempty"` + AccountType string `protobuf:"bytes,11,opt,name=accountType,proto3" json:"accountType,omitempty"` + BusinessName string `protobuf:"bytes,12,opt,name=businessName,proto3" json:"businessName,omitempty"` + Address string `protobuf:"bytes,13,opt,name=address,proto3" json:"address,omitempty"` +} + +func (x *CreateWalletRequest) Reset() { + *x = CreateWalletRequest{} + mi := &file_wallet_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *CreateWalletRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateWalletRequest) ProtoMessage() {} + +func (x *CreateWalletRequest) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CreateWalletRequest.ProtoReflect.Descriptor instead. +func (*CreateWalletRequest) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{0} +} + +func (x *CreateWalletRequest) GetFirstname() string { + if x != nil { + return x.Firstname + } + return "" +} + +func (x *CreateWalletRequest) GetMiddlename() string { + if x != nil { + return x.Middlename + } + return "" +} + +func (x *CreateWalletRequest) GetLastname() string { + if x != nil { + return x.Lastname + } + return "" +} + +func (x *CreateWalletRequest) GetNin() string { + if x != nil { + return x.Nin + } + return "" +} + +func (x *CreateWalletRequest) GetDateOfBirth() string { + if x != nil { + return x.DateOfBirth + } + return "" +} + +func (x *CreateWalletRequest) GetBvn() string { + if x != nil { + return x.Bvn + } + return "" +} + +func (x *CreateWalletRequest) GetPhone() string { + if x != nil { + return x.Phone + } + return "" +} + +func (x *CreateWalletRequest) GetEmail() string { + if x != nil { + return x.Email + } + return "" +} + +func (x *CreateWalletRequest) GetGender() string { + if x != nil { + return x.Gender + } + return "" +} + +func (x *CreateWalletRequest) GetUserId() string { + if x != nil { + return x.UserId + } + return "" +} + +func (x *CreateWalletRequest) GetAccountType() string { + if x != nil { + return x.AccountType + } + return "" +} + +func (x *CreateWalletRequest) GetBusinessName() string { + if x != nil { + return x.BusinessName + } + return "" +} + +func (x *CreateWalletRequest) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +type CreateWalletResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Success bool `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"` + Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` + Message string `protobuf:"bytes,3,opt,name=message,proto3" json:"message,omitempty"` + Firstname string `protobuf:"bytes,4,opt,name=firstname,proto3" json:"firstname,omitempty"` + Middlename string `protobuf:"bytes,5,opt,name=middlename,proto3" json:"middlename,omitempty"` + Lastname string `protobuf:"bytes,6,opt,name=lastname,proto3" json:"lastname,omitempty"` + AccountNo string `protobuf:"bytes,7,opt,name=accountNo,proto3" json:"accountNo,omitempty"` + CurrentTier string `protobuf:"bytes,8,opt,name=currentTier,proto3" json:"currentTier,omitempty"` + CustomerIdentifier string `protobuf:"bytes,9,opt,name=customerIdentifier,proto3" json:"customerIdentifier,omitempty"` +} + +func (x *CreateWalletResponse) Reset() { + *x = CreateWalletResponse{} + mi := &file_wallet_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *CreateWalletResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateWalletResponse) ProtoMessage() {} + +func (x *CreateWalletResponse) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CreateWalletResponse.ProtoReflect.Descriptor instead. +func (*CreateWalletResponse) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{1} +} + +func (x *CreateWalletResponse) GetSuccess() bool { + if x != nil { + return x.Success + } + return false +} + +func (x *CreateWalletResponse) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *CreateWalletResponse) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +func (x *CreateWalletResponse) GetFirstname() string { + if x != nil { + return x.Firstname + } + return "" +} + +func (x *CreateWalletResponse) GetMiddlename() string { + if x != nil { + return x.Middlename + } + return "" +} + +func (x *CreateWalletResponse) GetLastname() string { + if x != nil { + return x.Lastname + } + return "" +} + +func (x *CreateWalletResponse) GetAccountNo() string { + if x != nil { + return x.AccountNo + } + return "" +} + +func (x *CreateWalletResponse) GetCurrentTier() string { + if x != nil { + return x.CurrentTier + } + return "" +} + +func (x *CreateWalletResponse) GetCustomerIdentifier() string { + if x != nil { + return x.CustomerIdentifier + } + return "" +} + +type InitiatePaymentRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Amount int64 `protobuf:"varint,1,opt,name=amount,proto3" json:"amount,omitempty"` // in kobo + Email string `protobuf:"bytes,2,opt,name=email,proto3" json:"email,omitempty"` + Currency string `protobuf:"bytes,3,opt,name=currency,proto3" json:"currency,omitempty"` +} + +func (x *InitiatePaymentRequest) Reset() { + *x = InitiatePaymentRequest{} + mi := &file_wallet_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *InitiatePaymentRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*InitiatePaymentRequest) ProtoMessage() {} + +func (x *InitiatePaymentRequest) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use InitiatePaymentRequest.ProtoReflect.Descriptor instead. +func (*InitiatePaymentRequest) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{2} +} + +func (x *InitiatePaymentRequest) GetAmount() int64 { + if x != nil { + return x.Amount + } + return 0 +} + +func (x *InitiatePaymentRequest) GetEmail() string { + if x != nil { + return x.Email + } + return "" +} + +func (x *InitiatePaymentRequest) GetCurrency() string { + if x != nil { + return x.Currency + } + return "" +} + +type InitiatePaymentResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Success bool `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"` + Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` + Message string `protobuf:"bytes,3,opt,name=message,proto3" json:"message,omitempty"` + CheckoutUrl string `protobuf:"bytes,4,opt,name=checkoutUrl,proto3" json:"checkoutUrl,omitempty"` +} + +func (x *InitiatePaymentResponse) Reset() { + *x = InitiatePaymentResponse{} + mi := &file_wallet_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *InitiatePaymentResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*InitiatePaymentResponse) ProtoMessage() {} + +func (x *InitiatePaymentResponse) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[3] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use InitiatePaymentResponse.ProtoReflect.Descriptor instead. +func (*InitiatePaymentResponse) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{3} +} + +func (x *InitiatePaymentResponse) GetSuccess() bool { + if x != nil { + return x.Success + } + return false +} + +func (x *InitiatePaymentResponse) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *InitiatePaymentResponse) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +func (x *InitiatePaymentResponse) GetCheckoutUrl() string { + if x != nil { + return x.CheckoutUrl + } + return "" +} + +type InitiateTransferRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TransactionReference string `protobuf:"bytes,1,opt,name=transactionReference,proto3" json:"transactionReference,omitempty"` + Amount int64 `protobuf:"varint,2,opt,name=amount,proto3" json:"amount,omitempty"` // in kobo + BankCode string `protobuf:"bytes,3,opt,name=bankCode,proto3" json:"bankCode,omitempty"` + AccountNumber string `protobuf:"bytes,4,opt,name=accountNumber,proto3" json:"accountNumber,omitempty"` + AccountName string `protobuf:"bytes,5,opt,name=accountName,proto3" json:"accountName,omitempty"` + Remark string `protobuf:"bytes,6,opt,name=remark,proto3" json:"remark,omitempty"` +} + +func (x *InitiateTransferRequest) Reset() { + *x = InitiateTransferRequest{} + mi := &file_wallet_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *InitiateTransferRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*InitiateTransferRequest) ProtoMessage() {} + +func (x *InitiateTransferRequest) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[4] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use InitiateTransferRequest.ProtoReflect.Descriptor instead. +func (*InitiateTransferRequest) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{4} +} + +func (x *InitiateTransferRequest) GetTransactionReference() string { + if x != nil { + return x.TransactionReference + } + return "" +} + +func (x *InitiateTransferRequest) GetAmount() int64 { + if x != nil { + return x.Amount + } + return 0 +} + +func (x *InitiateTransferRequest) GetBankCode() string { + if x != nil { + return x.BankCode + } + return "" +} + +func (x *InitiateTransferRequest) GetAccountNumber() string { + if x != nil { + return x.AccountNumber + } + return "" +} + +func (x *InitiateTransferRequest) GetAccountName() string { + if x != nil { + return x.AccountName + } + return "" +} + +func (x *InitiateTransferRequest) GetRemark() string { + if x != nil { + return x.Remark + } + return "" +} + +type InitiateTransferResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Success bool `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"` + Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` + Message string `protobuf:"bytes,3,opt,name=message,proto3" json:"message,omitempty"` + TransactionReference string `protobuf:"bytes,4,opt,name=transactionReference,proto3" json:"transactionReference,omitempty"` +} + +func (x *InitiateTransferResponse) Reset() { + *x = InitiateTransferResponse{} + mi := &file_wallet_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *InitiateTransferResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*InitiateTransferResponse) ProtoMessage() {} + +func (x *InitiateTransferResponse) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[5] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use InitiateTransferResponse.ProtoReflect.Descriptor instead. +func (*InitiateTransferResponse) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{5} +} + +func (x *InitiateTransferResponse) GetSuccess() bool { + if x != nil { + return x.Success + } + return false +} + +func (x *InitiateTransferResponse) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *InitiateTransferResponse) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +func (x *InitiateTransferResponse) GetTransactionReference() string { + if x != nil { + return x.TransactionReference + } + return "" +} + +type GetTransactionsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + CustomerIdentifier string `protobuf:"bytes,1,opt,name=customerIdentifier,proto3" json:"customerIdentifier,omitempty"` +} + +func (x *GetTransactionsRequest) Reset() { + *x = GetTransactionsRequest{} + mi := &file_wallet_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetTransactionsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetTransactionsRequest) ProtoMessage() {} + +func (x *GetTransactionsRequest) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[6] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetTransactionsRequest.ProtoReflect.Descriptor instead. +func (*GetTransactionsRequest) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{6} +} + +func (x *GetTransactionsRequest) GetCustomerIdentifier() string { + if x != nil { + return x.CustomerIdentifier + } + return "" +} + +type GetTransactionsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Success bool `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"` + Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` + Transactions []*TransactionData `protobuf:"bytes,3,rep,name=transactions,proto3" json:"transactions,omitempty"` +} + +func (x *GetTransactionsResponse) Reset() { + *x = GetTransactionsResponse{} + mi := &file_wallet_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetTransactionsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetTransactionsResponse) ProtoMessage() {} + +func (x *GetTransactionsResponse) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[7] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetTransactionsResponse.ProtoReflect.Descriptor instead. +func (*GetTransactionsResponse) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{7} +} + +func (x *GetTransactionsResponse) GetSuccess() bool { + if x != nil { + return x.Success + } + return false +} + +func (x *GetTransactionsResponse) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +func (x *GetTransactionsResponse) GetTransactions() []*TransactionData { + if x != nil { + return x.Transactions + } + return nil +} + +type ResolveAccountRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + BankCode string `protobuf:"bytes,1,opt,name=bankCode,proto3" json:"bankCode,omitempty"` + AccountNumber string `protobuf:"bytes,2,opt,name=accountNumber,proto3" json:"accountNumber,omitempty"` +} + +func (x *ResolveAccountRequest) Reset() { + *x = ResolveAccountRequest{} + mi := &file_wallet_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ResolveAccountRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ResolveAccountRequest) ProtoMessage() {} + +func (x *ResolveAccountRequest) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[8] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ResolveAccountRequest.ProtoReflect.Descriptor instead. +func (*ResolveAccountRequest) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{8} +} + +func (x *ResolveAccountRequest) GetBankCode() string { + if x != nil { + return x.BankCode + } + return "" +} + +func (x *ResolveAccountRequest) GetAccountNumber() string { + if x != nil { + return x.AccountNumber + } + return "" +} + +type ResolveAccountResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Success bool `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"` + Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` + Message string `protobuf:"bytes,3,opt,name=message,proto3" json:"message,omitempty"` + AccountName string `protobuf:"bytes,4,opt,name=accountName,proto3" json:"accountName,omitempty"` + AccountNumber string `protobuf:"bytes,5,opt,name=accountNumber,proto3" json:"accountNumber,omitempty"` +} + +func (x *ResolveAccountResponse) Reset() { + *x = ResolveAccountResponse{} + mi := &file_wallet_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ResolveAccountResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ResolveAccountResponse) ProtoMessage() {} + +func (x *ResolveAccountResponse) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[9] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ResolveAccountResponse.ProtoReflect.Descriptor instead. +func (*ResolveAccountResponse) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{9} +} + +func (x *ResolveAccountResponse) GetSuccess() bool { + if x != nil { + return x.Success + } + return false +} + +func (x *ResolveAccountResponse) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *ResolveAccountResponse) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +func (x *ResolveAccountResponse) GetAccountName() string { + if x != nil { + return x.AccountName + } + return "" +} + +func (x *ResolveAccountResponse) GetAccountNumber() string { + if x != nil { + return x.AccountNumber + } + return "" +} + +type TransactionData struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Amount int64 `protobuf:"varint,1,opt,name=amount,proto3" json:"amount,omitempty"` + TransactionRef string `protobuf:"bytes,2,opt,name=transactionRef,proto3" json:"transactionRef,omitempty"` + GatewayRef string `protobuf:"bytes,3,opt,name=gatewayRef,proto3" json:"gatewayRef,omitempty"` + TransactionType string `protobuf:"bytes,4,opt,name=transactionType,proto3" json:"transactionType,omitempty"` + CreatedAt string `protobuf:"bytes,5,opt,name=createdAt,proto3" json:"createdAt,omitempty"` + Status string `protobuf:"bytes,6,opt,name=status,proto3" json:"status,omitempty"` +} + +func (x *TransactionData) Reset() { + *x = TransactionData{} + mi := &file_wallet_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *TransactionData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TransactionData) ProtoMessage() {} + +func (x *TransactionData) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[10] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TransactionData.ProtoReflect.Descriptor instead. +func (*TransactionData) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{10} +} + +func (x *TransactionData) GetAmount() int64 { + if x != nil { + return x.Amount + } + return 0 +} + +func (x *TransactionData) GetTransactionRef() string { + if x != nil { + return x.TransactionRef + } + return "" +} + +func (x *TransactionData) GetGatewayRef() string { + if x != nil { + return x.GatewayRef + } + return "" +} + +func (x *TransactionData) GetTransactionType() string { + if x != nil { + return x.TransactionType + } + return "" +} + +func (x *TransactionData) GetCreatedAt() string { + if x != nil { + return x.CreatedAt + } + return "" +} + +func (x *TransactionData) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +type VerifyNINRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Nin string `protobuf:"bytes,1,opt,name=nin,proto3" json:"nin,omitempty"` +} + +func (x *VerifyNINRequest) Reset() { + *x = VerifyNINRequest{} + mi := &file_wallet_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VerifyNINRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VerifyNINRequest) ProtoMessage() {} + +func (x *VerifyNINRequest) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[11] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VerifyNINRequest.ProtoReflect.Descriptor instead. +func (*VerifyNINRequest) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{11} +} + +func (x *VerifyNINRequest) GetNin() string { + if x != nil { + return x.Nin + } + return "" +} + +type VerifyNINResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Success bool `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"` + Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` + Message string `protobuf:"bytes,3,opt,name=message,proto3" json:"message,omitempty"` + IsValid bool `protobuf:"varint,4,opt,name=isValid,proto3" json:"isValid,omitempty"` +} + +func (x *VerifyNINResponse) Reset() { + *x = VerifyNINResponse{} + mi := &file_wallet_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VerifyNINResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VerifyNINResponse) ProtoMessage() {} + +func (x *VerifyNINResponse) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[12] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VerifyNINResponse.ProtoReflect.Descriptor instead. +func (*VerifyNINResponse) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{12} +} + +func (x *VerifyNINResponse) GetSuccess() bool { + if x != nil { + return x.Success + } + return false +} + +func (x *VerifyNINResponse) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *VerifyNINResponse) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +func (x *VerifyNINResponse) GetIsValid() bool { + if x != nil { + return x.IsValid + } + return false +} + +type VerifyBVNImageRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Base64Image string `protobuf:"bytes,1,opt,name=base64Image,proto3" json:"base64Image,omitempty"` + Bvn string `protobuf:"bytes,2,opt,name=bvn,proto3" json:"bvn,omitempty"` +} + +func (x *VerifyBVNImageRequest) Reset() { + *x = VerifyBVNImageRequest{} + mi := &file_wallet_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VerifyBVNImageRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VerifyBVNImageRequest) ProtoMessage() {} + +func (x *VerifyBVNImageRequest) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[13] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VerifyBVNImageRequest.ProtoReflect.Descriptor instead. +func (*VerifyBVNImageRequest) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{13} +} + +func (x *VerifyBVNImageRequest) GetBase64Image() string { + if x != nil { + return x.Base64Image + } + return "" +} + +func (x *VerifyBVNImageRequest) GetBvn() string { + if x != nil { + return x.Bvn + } + return "" +} + +type VerifyBVNImageResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Success bool `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"` + Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` + Message string `protobuf:"bytes,3,opt,name=message,proto3" json:"message,omitempty"` + ImageMatched bool `protobuf:"varint,4,opt,name=imageMatched,proto3" json:"imageMatched,omitempty"` +} + +func (x *VerifyBVNImageResponse) Reset() { + *x = VerifyBVNImageResponse{} + mi := &file_wallet_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VerifyBVNImageResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VerifyBVNImageResponse) ProtoMessage() {} + +func (x *VerifyBVNImageResponse) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[14] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VerifyBVNImageResponse.ProtoReflect.Descriptor instead. +func (*VerifyBVNImageResponse) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{14} +} + +func (x *VerifyBVNImageResponse) GetSuccess() bool { + if x != nil { + return x.Success + } + return false +} + +func (x *VerifyBVNImageResponse) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *VerifyBVNImageResponse) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +func (x *VerifyBVNImageResponse) GetImageMatched() bool { + if x != nil { + return x.ImageMatched + } + return false +} + +type HealthCheckRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *HealthCheckRequest) Reset() { + *x = HealthCheckRequest{} + mi := &file_wallet_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *HealthCheckRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*HealthCheckRequest) ProtoMessage() {} + +func (x *HealthCheckRequest) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[15] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use HealthCheckRequest.ProtoReflect.Descriptor instead. +func (*HealthCheckRequest) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{15} +} + +type HealthCheckResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Status string `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"` +} + +func (x *HealthCheckResponse) Reset() { + *x = HealthCheckResponse{} + mi := &file_wallet_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *HealthCheckResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*HealthCheckResponse) ProtoMessage() {} + +func (x *HealthCheckResponse) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[16] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use HealthCheckResponse.ProtoReflect.Descriptor instead. +func (*HealthCheckResponse) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{16} +} + +func (x *HealthCheckResponse) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +type GetPaymentRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + PaymentId uint64 `protobuf:"varint,1,opt,name=paymentId,proto3" json:"paymentId,omitempty"` +} + +func (x *GetPaymentRequest) Reset() { + *x = GetPaymentRequest{} + mi := &file_wallet_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetPaymentRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetPaymentRequest) ProtoMessage() {} + +func (x *GetPaymentRequest) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[17] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetPaymentRequest.ProtoReflect.Descriptor instead. +func (*GetPaymentRequest) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{17} +} + +func (x *GetPaymentRequest) GetPaymentId() uint64 { + if x != nil { + return x.PaymentId + } + return 0 +} + +type GetPaymentResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Success bool `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"` + Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` + Data *PaymentData `protobuf:"bytes,3,opt,name=data,proto3" json:"data,omitempty"` +} + +func (x *GetPaymentResponse) Reset() { + *x = GetPaymentResponse{} + mi := &file_wallet_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetPaymentResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetPaymentResponse) ProtoMessage() {} + +func (x *GetPaymentResponse) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[18] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetPaymentResponse.ProtoReflect.Descriptor instead. +func (*GetPaymentResponse) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{18} +} + +func (x *GetPaymentResponse) GetSuccess() bool { + if x != nil { + return x.Success + } + return false +} + +func (x *GetPaymentResponse) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +func (x *GetPaymentResponse) GetData() *PaymentData { + if x != nil { + return x.Data + } + return nil +} + +type PaymentData struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + UserId string `protobuf:"bytes,2,opt,name=userId,proto3" json:"userId,omitempty"` + Amount float64 `protobuf:"fixed64,3,opt,name=amount,proto3" json:"amount,omitempty"` + AccountNumber string `protobuf:"bytes,4,opt,name=accountNumber,proto3" json:"accountNumber,omitempty"` + Bank string `protobuf:"bytes,5,opt,name=bank,proto3" json:"bank,omitempty"` + MerchantPhoneNumber string `protobuf:"bytes,6,opt,name=merchantPhoneNumber,proto3" json:"merchantPhoneNumber,omitempty"` + MerchantEmail string `protobuf:"bytes,7,opt,name=merchantEmail,proto3" json:"merchantEmail,omitempty"` + AdvanceOptions string `protobuf:"bytes,8,opt,name=advanceOptions,proto3" json:"advanceOptions,omitempty"` + Status string `protobuf:"bytes,9,opt,name=status,proto3" json:"status,omitempty"` + TrustScore float64 `protobuf:"fixed64,10,opt,name=trustScore,proto3" json:"trustScore,omitempty"` + ExpiresAt string `protobuf:"bytes,11,opt,name=expiresAt,proto3" json:"expiresAt,omitempty"` + CreatedAt string `protobuf:"bytes,12,opt,name=createdAt,proto3" json:"createdAt,omitempty"` +} + +func (x *PaymentData) Reset() { + *x = PaymentData{} + mi := &file_wallet_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PaymentData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PaymentData) ProtoMessage() {} + +func (x *PaymentData) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[19] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PaymentData.ProtoReflect.Descriptor instead. +func (*PaymentData) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{19} +} + +func (x *PaymentData) GetId() uint64 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *PaymentData) GetUserId() string { + if x != nil { + return x.UserId + } + return "" +} + +func (x *PaymentData) GetAmount() float64 { + if x != nil { + return x.Amount + } + return 0 +} + +func (x *PaymentData) GetAccountNumber() string { + if x != nil { + return x.AccountNumber + } + return "" +} + +func (x *PaymentData) GetBank() string { + if x != nil { + return x.Bank + } + return "" +} + +func (x *PaymentData) GetMerchantPhoneNumber() string { + if x != nil { + return x.MerchantPhoneNumber + } + return "" +} + +func (x *PaymentData) GetMerchantEmail() string { + if x != nil { + return x.MerchantEmail + } + return "" +} + +func (x *PaymentData) GetAdvanceOptions() string { + if x != nil { + return x.AdvanceOptions + } + return "" +} + +func (x *PaymentData) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +func (x *PaymentData) GetTrustScore() float64 { + if x != nil { + return x.TrustScore + } + return 0 +} + +func (x *PaymentData) GetExpiresAt() string { + if x != nil { + return x.ExpiresAt + } + return "" +} + +func (x *PaymentData) GetCreatedAt() string { + if x != nil { + return x.CreatedAt + } + return "" +} + +type UpdatePaymentStatusRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + PaymentId uint64 `protobuf:"varint,1,opt,name=paymentId,proto3" json:"paymentId,omitempty"` + Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` + TrustScore float64 `protobuf:"fixed64,3,opt,name=trustScore,proto3" json:"trustScore,omitempty"` + Summary string `protobuf:"bytes,4,opt,name=summary,proto3" json:"summary,omitempty"` +} + +func (x *UpdatePaymentStatusRequest) Reset() { + *x = UpdatePaymentStatusRequest{} + mi := &file_wallet_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *UpdatePaymentStatusRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdatePaymentStatusRequest) ProtoMessage() {} + +func (x *UpdatePaymentStatusRequest) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[20] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UpdatePaymentStatusRequest.ProtoReflect.Descriptor instead. +func (*UpdatePaymentStatusRequest) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{20} +} + +func (x *UpdatePaymentStatusRequest) GetPaymentId() uint64 { + if x != nil { + return x.PaymentId + } + return 0 +} + +func (x *UpdatePaymentStatusRequest) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +func (x *UpdatePaymentStatusRequest) GetTrustScore() float64 { + if x != nil { + return x.TrustScore + } + return 0 +} + +func (x *UpdatePaymentStatusRequest) GetSummary() string { + if x != nil { + return x.Summary + } + return "" +} + +type UpdatePaymentStatusResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Success bool `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"` + Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` +} + +func (x *UpdatePaymentStatusResponse) Reset() { + *x = UpdatePaymentStatusResponse{} + mi := &file_wallet_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *UpdatePaymentStatusResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdatePaymentStatusResponse) ProtoMessage() {} + +func (x *UpdatePaymentStatusResponse) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[21] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UpdatePaymentStatusResponse.ProtoReflect.Descriptor instead. +func (*UpdatePaymentStatusResponse) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{21} +} + +func (x *UpdatePaymentStatusResponse) GetSuccess() bool { + if x != nil { + return x.Success + } + return false +} + +func (x *UpdatePaymentStatusResponse) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +type GetWalletsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + UserId string `protobuf:"bytes,1,opt,name=userId,proto3" json:"userId,omitempty"` +} + +func (x *GetWalletsRequest) Reset() { + *x = GetWalletsRequest{} + mi := &file_wallet_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetWalletsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetWalletsRequest) ProtoMessage() {} + +func (x *GetWalletsRequest) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[22] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetWalletsRequest.ProtoReflect.Descriptor instead. +func (*GetWalletsRequest) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{22} +} + +func (x *GetWalletsRequest) GetUserId() string { + if x != nil { + return x.UserId + } + return "" +} + +type GetWalletsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Success bool `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"` + Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` + Wallets []*WalletData `protobuf:"bytes,3,rep,name=wallets,proto3" json:"wallets,omitempty"` +} + +func (x *GetWalletsResponse) Reset() { + *x = GetWalletsResponse{} + mi := &file_wallet_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetWalletsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetWalletsResponse) ProtoMessage() {} + +func (x *GetWalletsResponse) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[23] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetWalletsResponse.ProtoReflect.Descriptor instead. +func (*GetWalletsResponse) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{23} +} + +func (x *GetWalletsResponse) GetSuccess() bool { + if x != nil { + return x.Success + } + return false +} + +func (x *GetWalletsResponse) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +func (x *GetWalletsResponse) GetWallets() []*WalletData { + if x != nil { + return x.Wallets + } + return nil +} + +type WalletData struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + AccountNumber string `protobuf:"bytes,2,opt,name=accountNumber,proto3" json:"accountNumber,omitempty"` + AccountType string `protobuf:"bytes,3,opt,name=accountType,proto3" json:"accountType,omitempty"` + AccountCategory string `protobuf:"bytes,4,opt,name=accountCategory,proto3" json:"accountCategory,omitempty"` + CurrencyCode string `protobuf:"bytes,5,opt,name=currencyCode,proto3" json:"currencyCode,omitempty"` + Status string `protobuf:"bytes,6,opt,name=status,proto3" json:"status,omitempty"` + AccountNickname string `protobuf:"bytes,7,opt,name=accountNickname,proto3" json:"accountNickname,omitempty"` +} + +func (x *WalletData) Reset() { + *x = WalletData{} + mi := &file_wallet_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *WalletData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WalletData) ProtoMessage() {} + +func (x *WalletData) ProtoReflect() protoreflect.Message { + mi := &file_wallet_proto_msgTypes[24] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use WalletData.ProtoReflect.Descriptor instead. +func (*WalletData) Descriptor() ([]byte, []int) { + return file_wallet_proto_rawDescGZIP(), []int{24} +} + +func (x *WalletData) GetId() uint64 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *WalletData) GetAccountNumber() string { + if x != nil { + return x.AccountNumber + } + return "" +} + +func (x *WalletData) GetAccountType() string { + if x != nil { + return x.AccountType + } + return "" +} + +func (x *WalletData) GetAccountCategory() string { + if x != nil { + return x.AccountCategory + } + return "" +} + +func (x *WalletData) GetCurrencyCode() string { + if x != nil { + return x.CurrencyCode + } + return "" +} + +func (x *WalletData) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +func (x *WalletData) GetAccountNickname() string { + if x != nil { + return x.AccountNickname + } + return "" +} + +var File_wallet_proto protoreflect.FileDescriptor + +var file_wallet_proto_rawDesc = []byte{ + 0x0a, 0x0c, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x06, + 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x22, 0xf1, 0x02, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, + 0x0a, 0x09, 0x66, 0x69, 0x72, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x66, 0x69, 0x72, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, + 0x6d, 0x69, 0x64, 0x64, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0a, 0x6d, 0x69, 0x64, 0x64, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, + 0x6c, 0x61, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x6c, 0x61, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6e, 0x69, 0x6e, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6e, 0x69, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x61, + 0x74, 0x65, 0x4f, 0x66, 0x42, 0x69, 0x72, 0x74, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x66, 0x42, 0x69, 0x72, 0x74, 0x68, 0x12, 0x10, 0x0a, 0x03, + 0x62, 0x76, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x62, 0x76, 0x6e, 0x12, 0x14, + 0x0a, 0x05, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, + 0x68, 0x6f, 0x6e, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x67, 0x65, + 0x6e, 0x64, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x67, 0x65, 0x6e, 0x64, + 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x0a, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x22, 0x0a, 0x0c, + 0x62, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x0c, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0c, 0x62, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x4e, 0x61, 0x6d, 0x65, + 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0xa8, 0x02, 0x0a, 0x14, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x12, 0x0a, + 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, + 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x66, + 0x69, 0x72, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x66, 0x69, 0x72, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x6d, 0x69, 0x64, + 0x64, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, + 0x69, 0x64, 0x64, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x73, + 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x61, 0x73, + 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x4e, 0x6f, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x4e, 0x6f, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x54, 0x69, + 0x65, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x74, 0x54, 0x69, 0x65, 0x72, 0x12, 0x2e, 0x0a, 0x12, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, + 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x12, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x66, 0x69, 0x65, 0x72, 0x22, 0x62, 0x0a, 0x16, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, + 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x1a, 0x0a, + 0x08, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x83, 0x01, 0x0a, 0x17, 0x49, 0x6e, + 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, + 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, + 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x20, 0x0a, + 0x0b, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x55, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x55, 0x72, 0x6c, 0x22, + 0xe1, 0x01, 0x0a, 0x17, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x66, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x14, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, + 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, + 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x62, 0x61, 0x6e, 0x6b, 0x43, + 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x62, 0x61, 0x6e, 0x6b, 0x43, + 0x6f, 0x64, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, + 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x6d, + 0x61, 0x72, 0x6b, 0x22, 0x96, 0x01, 0x0a, 0x18, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, + 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x18, + 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x32, 0x0a, 0x14, 0x74, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x22, 0x48, 0x0a, 0x16, + 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x12, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, + 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x12, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x22, 0x8a, 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3b, 0x0a, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x77, + 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x22, 0x59, 0x0a, 0x15, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x41, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, + 0x62, 0x61, 0x6e, 0x6b, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x62, 0x61, 0x6e, 0x6b, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0d, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, 0xa8, + 0x01, 0x0a, 0x16, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, 0xd1, 0x01, 0x0a, 0x0f, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, + 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x61, + 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x12, 0x1e, 0x0a, + 0x0a, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x52, 0x65, 0x66, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0a, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x52, 0x65, 0x66, 0x12, 0x28, 0x0a, + 0x0f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x41, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x24, 0x0a, + 0x10, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x4e, 0x49, 0x4e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6e, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6e, 0x69, 0x6e, 0x22, 0x75, 0x0a, 0x11, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x4e, 0x49, 0x4e, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x12, 0x18, 0x0a, 0x07, 0x69, 0x73, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x07, 0x69, 0x73, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x22, 0x4b, 0x0a, 0x15, 0x56, 0x65, + 0x72, 0x69, 0x66, 0x79, 0x42, 0x56, 0x4e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x49, 0x6d, 0x61, + 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, + 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x62, 0x76, 0x6e, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x62, 0x76, 0x6e, 0x22, 0x84, 0x01, 0x0a, 0x16, 0x56, 0x65, 0x72, 0x69, + 0x66, 0x79, 0x42, 0x56, 0x4e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, + 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, + 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x69, 0x6d, + 0x61, 0x67, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0c, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x64, 0x22, 0x14, + 0x0a, 0x12, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x22, 0x2d, 0x0a, 0x13, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, + 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x22, 0x31, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x61, 0x79, 0x6d, + 0x65, 0x6e, 0x74, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x70, 0x61, 0x79, + 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x71, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, + 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, + 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, + 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x12, 0x27, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, + 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x44, + 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xfb, 0x02, 0x0a, 0x0b, 0x50, 0x61, + 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, + 0x72, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, + 0x64, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x01, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0d, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, + 0x12, 0x0a, 0x04, 0x62, 0x61, 0x6e, 0x6b, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x62, + 0x61, 0x6e, 0x6b, 0x12, 0x30, 0x0a, 0x13, 0x6d, 0x65, 0x72, 0x63, 0x68, 0x61, 0x6e, 0x74, 0x50, + 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x13, 0x6d, 0x65, 0x72, 0x63, 0x68, 0x61, 0x6e, 0x74, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x4e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x24, 0x0a, 0x0d, 0x6d, 0x65, 0x72, 0x63, 0x68, 0x61, 0x6e, + 0x74, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6d, 0x65, + 0x72, 0x63, 0x68, 0x61, 0x6e, 0x74, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x26, 0x0a, 0x0e, 0x61, + 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0e, 0x61, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x4f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x74, + 0x72, 0x75, 0x73, 0x74, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x01, 0x52, + 0x0a, 0x74, 0x72, 0x75, 0x73, 0x74, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x65, + 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x41, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x41, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x22, 0x8c, 0x01, 0x0a, 0x1a, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, + 0x74, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x70, 0x61, 0x79, 0x6d, 0x65, + 0x6e, 0x74, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1e, 0x0a, 0x0a, + 0x74, 0x72, 0x75, 0x73, 0x74, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, + 0x52, 0x0a, 0x74, 0x72, 0x75, 0x73, 0x74, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x18, 0x0a, 0x07, + 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, + 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x22, 0x51, 0x0a, 0x1b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, + 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x2b, 0x0a, 0x11, 0x47, 0x65, 0x74, + 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, + 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x76, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x57, 0x61, 0x6c, + 0x6c, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, + 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, + 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x12, 0x2c, 0x0a, 0x07, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x12, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, + 0x74, 0x44, 0x61, 0x74, 0x61, 0x52, 0x07, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x73, 0x22, 0xf4, + 0x01, 0x0a, 0x0a, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x24, 0x0a, + 0x0d, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x79, + 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, + 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, + 0x22, 0x0a, 0x0c, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x43, + 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x28, 0x0a, 0x0f, 0x61, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x69, 0x63, + 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x32, 0xef, 0x06, 0x0a, 0x0d, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x49, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x12, 0x1b, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, + 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0f, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x50, 0x61, + 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1e, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x49, + 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x49, + 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x10, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, + 0x74, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x12, 0x1f, 0x2e, 0x77, 0x61, 0x6c, + 0x6c, 0x65, 0x74, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x66, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x77, 0x61, + 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x66, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, + 0x0f, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0x1e, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x1f, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x4f, 0x0a, 0x0e, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x41, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x12, 0x1d, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x52, 0x65, 0x73, + 0x6f, 0x6c, 0x76, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x52, 0x65, 0x73, 0x6f, + 0x6c, 0x76, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x40, 0x0a, 0x09, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x4e, 0x49, 0x4e, 0x12, + 0x18, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x4e, + 0x49, 0x4e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x77, 0x61, 0x6c, 0x6c, + 0x65, 0x74, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x4e, 0x49, 0x4e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, 0x0e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x42, 0x56, + 0x4e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x1d, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, + 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x42, 0x56, 0x4e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x56, + 0x65, 0x72, 0x69, 0x66, 0x79, 0x42, 0x56, 0x4e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, + 0x65, 0x6e, 0x74, 0x12, 0x19, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x47, 0x65, 0x74, + 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, + 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, + 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5e, 0x0a, 0x13, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x12, 0x22, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x0b, 0x48, 0x65, + 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x1a, 0x2e, 0x77, 0x61, 0x6c, 0x6c, + 0x65, 0x74, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x48, + 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x43, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x73, + 0x12, 0x19, 0x2e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x61, 0x6c, + 0x6c, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x77, 0x61, + 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x39, 0x5a, 0x37, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x50, 0x61, 0x79, 0x47, 0x69, 0x64, 0x69, 0x2f, 0x57, 0x61, + 0x6c, 0x6c, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x70, 0x62, 0x3b, + 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_wallet_proto_rawDescOnce sync.Once + file_wallet_proto_rawDescData = file_wallet_proto_rawDesc +) + +func file_wallet_proto_rawDescGZIP() []byte { + file_wallet_proto_rawDescOnce.Do(func() { + file_wallet_proto_rawDescData = protoimpl.X.CompressGZIP(file_wallet_proto_rawDescData) + }) + return file_wallet_proto_rawDescData +} + +var file_wallet_proto_msgTypes = make([]protoimpl.MessageInfo, 25) +var file_wallet_proto_goTypes = []any{ + (*CreateWalletRequest)(nil), // 0: wallet.CreateWalletRequest + (*CreateWalletResponse)(nil), // 1: wallet.CreateWalletResponse + (*InitiatePaymentRequest)(nil), // 2: wallet.InitiatePaymentRequest + (*InitiatePaymentResponse)(nil), // 3: wallet.InitiatePaymentResponse + (*InitiateTransferRequest)(nil), // 4: wallet.InitiateTransferRequest + (*InitiateTransferResponse)(nil), // 5: wallet.InitiateTransferResponse + (*GetTransactionsRequest)(nil), // 6: wallet.GetTransactionsRequest + (*GetTransactionsResponse)(nil), // 7: wallet.GetTransactionsResponse + (*ResolveAccountRequest)(nil), // 8: wallet.ResolveAccountRequest + (*ResolveAccountResponse)(nil), // 9: wallet.ResolveAccountResponse + (*TransactionData)(nil), // 10: wallet.TransactionData + (*VerifyNINRequest)(nil), // 11: wallet.VerifyNINRequest + (*VerifyNINResponse)(nil), // 12: wallet.VerifyNINResponse + (*VerifyBVNImageRequest)(nil), // 13: wallet.VerifyBVNImageRequest + (*VerifyBVNImageResponse)(nil), // 14: wallet.VerifyBVNImageResponse + (*HealthCheckRequest)(nil), // 15: wallet.HealthCheckRequest + (*HealthCheckResponse)(nil), // 16: wallet.HealthCheckResponse + (*GetPaymentRequest)(nil), // 17: wallet.GetPaymentRequest + (*GetPaymentResponse)(nil), // 18: wallet.GetPaymentResponse + (*PaymentData)(nil), // 19: wallet.PaymentData + (*UpdatePaymentStatusRequest)(nil), // 20: wallet.UpdatePaymentStatusRequest + (*UpdatePaymentStatusResponse)(nil), // 21: wallet.UpdatePaymentStatusResponse + (*GetWalletsRequest)(nil), // 22: wallet.GetWalletsRequest + (*GetWalletsResponse)(nil), // 23: wallet.GetWalletsResponse + (*WalletData)(nil), // 24: wallet.WalletData +} +var file_wallet_proto_depIdxs = []int32{ + 10, // 0: wallet.GetTransactionsResponse.transactions:type_name -> wallet.TransactionData + 19, // 1: wallet.GetPaymentResponse.data:type_name -> wallet.PaymentData + 24, // 2: wallet.GetWalletsResponse.wallets:type_name -> wallet.WalletData + 0, // 3: wallet.WalletService.CreateWallet:input_type -> wallet.CreateWalletRequest + 2, // 4: wallet.WalletService.InitiatePayment:input_type -> wallet.InitiatePaymentRequest + 4, // 5: wallet.WalletService.InitiateTransfer:input_type -> wallet.InitiateTransferRequest + 6, // 6: wallet.WalletService.GetTransactions:input_type -> wallet.GetTransactionsRequest + 8, // 7: wallet.WalletService.ResolveAccount:input_type -> wallet.ResolveAccountRequest + 11, // 8: wallet.WalletService.VerifyNIN:input_type -> wallet.VerifyNINRequest + 13, // 9: wallet.WalletService.VerifyBVNImage:input_type -> wallet.VerifyBVNImageRequest + 17, // 10: wallet.WalletService.GetPayment:input_type -> wallet.GetPaymentRequest + 20, // 11: wallet.WalletService.UpdatePaymentStatus:input_type -> wallet.UpdatePaymentStatusRequest + 15, // 12: wallet.WalletService.HealthCheck:input_type -> wallet.HealthCheckRequest + 22, // 13: wallet.WalletService.GetWallets:input_type -> wallet.GetWalletsRequest + 1, // 14: wallet.WalletService.CreateWallet:output_type -> wallet.CreateWalletResponse + 3, // 15: wallet.WalletService.InitiatePayment:output_type -> wallet.InitiatePaymentResponse + 5, // 16: wallet.WalletService.InitiateTransfer:output_type -> wallet.InitiateTransferResponse + 7, // 17: wallet.WalletService.GetTransactions:output_type -> wallet.GetTransactionsResponse + 9, // 18: wallet.WalletService.ResolveAccount:output_type -> wallet.ResolveAccountResponse + 12, // 19: wallet.WalletService.VerifyNIN:output_type -> wallet.VerifyNINResponse + 14, // 20: wallet.WalletService.VerifyBVNImage:output_type -> wallet.VerifyBVNImageResponse + 18, // 21: wallet.WalletService.GetPayment:output_type -> wallet.GetPaymentResponse + 21, // 22: wallet.WalletService.UpdatePaymentStatus:output_type -> wallet.UpdatePaymentStatusResponse + 16, // 23: wallet.WalletService.HealthCheck:output_type -> wallet.HealthCheckResponse + 23, // 24: wallet.WalletService.GetWallets:output_type -> wallet.GetWalletsResponse + 14, // [14:25] is the sub-list for method output_type + 3, // [3:14] is the sub-list for method input_type + 3, // [3:3] is the sub-list for extension type_name + 3, // [3:3] is the sub-list for extension extendee + 0, // [0:3] is the sub-list for field type_name +} + +func init() { file_wallet_proto_init() } +func file_wallet_proto_init() { + if File_wallet_proto != nil { + return + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_wallet_proto_rawDesc, + NumEnums: 0, + NumMessages: 25, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_wallet_proto_goTypes, + DependencyIndexes: file_wallet_proto_depIdxs, + MessageInfos: file_wallet_proto_msgTypes, + }.Build() + File_wallet_proto = out.File + file_wallet_proto_rawDesc = nil + file_wallet_proto_goTypes = nil + file_wallet_proto_depIdxs = nil +} diff --git a/services/wallet/proto/github.com/PayGidi/WalletService/proto/connection/pb/wallet_grpc.pb.go b/services/wallet/proto/github.com/PayGidi/WalletService/proto/connection/pb/wallet_grpc.pb.go new file mode 100644 index 0000000..d622ac2 --- /dev/null +++ b/services/wallet/proto/github.com/PayGidi/WalletService/proto/connection/pb/wallet_grpc.pb.go @@ -0,0 +1,501 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.5.1 +// - protoc v6.33.3 +// source: wallet.proto + +package pb + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 + +const ( + WalletService_CreateWallet_FullMethodName = "/wallet.WalletService/CreateWallet" + WalletService_InitiatePayment_FullMethodName = "/wallet.WalletService/InitiatePayment" + WalletService_InitiateTransfer_FullMethodName = "/wallet.WalletService/InitiateTransfer" + WalletService_GetTransactions_FullMethodName = "/wallet.WalletService/GetTransactions" + WalletService_ResolveAccount_FullMethodName = "/wallet.WalletService/ResolveAccount" + WalletService_VerifyNIN_FullMethodName = "/wallet.WalletService/VerifyNIN" + WalletService_VerifyBVNImage_FullMethodName = "/wallet.WalletService/VerifyBVNImage" + WalletService_GetPayment_FullMethodName = "/wallet.WalletService/GetPayment" + WalletService_UpdatePaymentStatus_FullMethodName = "/wallet.WalletService/UpdatePaymentStatus" + WalletService_HealthCheck_FullMethodName = "/wallet.WalletService/HealthCheck" + WalletService_GetWallets_FullMethodName = "/wallet.WalletService/GetWallets" +) + +// WalletServiceClient is the client API for WalletService service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type WalletServiceClient interface { + CreateWallet(ctx context.Context, in *CreateWalletRequest, opts ...grpc.CallOption) (*CreateWalletResponse, error) + InitiatePayment(ctx context.Context, in *InitiatePaymentRequest, opts ...grpc.CallOption) (*InitiatePaymentResponse, error) + InitiateTransfer(ctx context.Context, in *InitiateTransferRequest, opts ...grpc.CallOption) (*InitiateTransferResponse, error) + GetTransactions(ctx context.Context, in *GetTransactionsRequest, opts ...grpc.CallOption) (*GetTransactionsResponse, error) + ResolveAccount(ctx context.Context, in *ResolveAccountRequest, opts ...grpc.CallOption) (*ResolveAccountResponse, error) + VerifyNIN(ctx context.Context, in *VerifyNINRequest, opts ...grpc.CallOption) (*VerifyNINResponse, error) + VerifyBVNImage(ctx context.Context, in *VerifyBVNImageRequest, opts ...grpc.CallOption) (*VerifyBVNImageResponse, error) + GetPayment(ctx context.Context, in *GetPaymentRequest, opts ...grpc.CallOption) (*GetPaymentResponse, error) + UpdatePaymentStatus(ctx context.Context, in *UpdatePaymentStatusRequest, opts ...grpc.CallOption) (*UpdatePaymentStatusResponse, error) + HealthCheck(ctx context.Context, in *HealthCheckRequest, opts ...grpc.CallOption) (*HealthCheckResponse, error) + GetWallets(ctx context.Context, in *GetWalletsRequest, opts ...grpc.CallOption) (*GetWalletsResponse, error) +} + +type walletServiceClient struct { + cc grpc.ClientConnInterface +} + +func NewWalletServiceClient(cc grpc.ClientConnInterface) WalletServiceClient { + return &walletServiceClient{cc} +} + +func (c *walletServiceClient) CreateWallet(ctx context.Context, in *CreateWalletRequest, opts ...grpc.CallOption) (*CreateWalletResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(CreateWalletResponse) + err := c.cc.Invoke(ctx, WalletService_CreateWallet_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *walletServiceClient) InitiatePayment(ctx context.Context, in *InitiatePaymentRequest, opts ...grpc.CallOption) (*InitiatePaymentResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(InitiatePaymentResponse) + err := c.cc.Invoke(ctx, WalletService_InitiatePayment_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *walletServiceClient) InitiateTransfer(ctx context.Context, in *InitiateTransferRequest, opts ...grpc.CallOption) (*InitiateTransferResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(InitiateTransferResponse) + err := c.cc.Invoke(ctx, WalletService_InitiateTransfer_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *walletServiceClient) GetTransactions(ctx context.Context, in *GetTransactionsRequest, opts ...grpc.CallOption) (*GetTransactionsResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(GetTransactionsResponse) + err := c.cc.Invoke(ctx, WalletService_GetTransactions_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *walletServiceClient) ResolveAccount(ctx context.Context, in *ResolveAccountRequest, opts ...grpc.CallOption) (*ResolveAccountResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(ResolveAccountResponse) + err := c.cc.Invoke(ctx, WalletService_ResolveAccount_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *walletServiceClient) VerifyNIN(ctx context.Context, in *VerifyNINRequest, opts ...grpc.CallOption) (*VerifyNINResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(VerifyNINResponse) + err := c.cc.Invoke(ctx, WalletService_VerifyNIN_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *walletServiceClient) VerifyBVNImage(ctx context.Context, in *VerifyBVNImageRequest, opts ...grpc.CallOption) (*VerifyBVNImageResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(VerifyBVNImageResponse) + err := c.cc.Invoke(ctx, WalletService_VerifyBVNImage_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *walletServiceClient) GetPayment(ctx context.Context, in *GetPaymentRequest, opts ...grpc.CallOption) (*GetPaymentResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(GetPaymentResponse) + err := c.cc.Invoke(ctx, WalletService_GetPayment_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *walletServiceClient) UpdatePaymentStatus(ctx context.Context, in *UpdatePaymentStatusRequest, opts ...grpc.CallOption) (*UpdatePaymentStatusResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(UpdatePaymentStatusResponse) + err := c.cc.Invoke(ctx, WalletService_UpdatePaymentStatus_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *walletServiceClient) HealthCheck(ctx context.Context, in *HealthCheckRequest, opts ...grpc.CallOption) (*HealthCheckResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(HealthCheckResponse) + err := c.cc.Invoke(ctx, WalletService_HealthCheck_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *walletServiceClient) GetWallets(ctx context.Context, in *GetWalletsRequest, opts ...grpc.CallOption) (*GetWalletsResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(GetWalletsResponse) + err := c.cc.Invoke(ctx, WalletService_GetWallets_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +// WalletServiceServer is the server API for WalletService service. +// All implementations must embed UnimplementedWalletServiceServer +// for forward compatibility. +type WalletServiceServer interface { + CreateWallet(context.Context, *CreateWalletRequest) (*CreateWalletResponse, error) + InitiatePayment(context.Context, *InitiatePaymentRequest) (*InitiatePaymentResponse, error) + InitiateTransfer(context.Context, *InitiateTransferRequest) (*InitiateTransferResponse, error) + GetTransactions(context.Context, *GetTransactionsRequest) (*GetTransactionsResponse, error) + ResolveAccount(context.Context, *ResolveAccountRequest) (*ResolveAccountResponse, error) + VerifyNIN(context.Context, *VerifyNINRequest) (*VerifyNINResponse, error) + VerifyBVNImage(context.Context, *VerifyBVNImageRequest) (*VerifyBVNImageResponse, error) + GetPayment(context.Context, *GetPaymentRequest) (*GetPaymentResponse, error) + UpdatePaymentStatus(context.Context, *UpdatePaymentStatusRequest) (*UpdatePaymentStatusResponse, error) + HealthCheck(context.Context, *HealthCheckRequest) (*HealthCheckResponse, error) + GetWallets(context.Context, *GetWalletsRequest) (*GetWalletsResponse, error) + mustEmbedUnimplementedWalletServiceServer() +} + +// UnimplementedWalletServiceServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedWalletServiceServer struct{} + +func (UnimplementedWalletServiceServer) CreateWallet(context.Context, *CreateWalletRequest) (*CreateWalletResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method CreateWallet not implemented") +} +func (UnimplementedWalletServiceServer) InitiatePayment(context.Context, *InitiatePaymentRequest) (*InitiatePaymentResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method InitiatePayment not implemented") +} +func (UnimplementedWalletServiceServer) InitiateTransfer(context.Context, *InitiateTransferRequest) (*InitiateTransferResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method InitiateTransfer not implemented") +} +func (UnimplementedWalletServiceServer) GetTransactions(context.Context, *GetTransactionsRequest) (*GetTransactionsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetTransactions not implemented") +} +func (UnimplementedWalletServiceServer) ResolveAccount(context.Context, *ResolveAccountRequest) (*ResolveAccountResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ResolveAccount not implemented") +} +func (UnimplementedWalletServiceServer) VerifyNIN(context.Context, *VerifyNINRequest) (*VerifyNINResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method VerifyNIN not implemented") +} +func (UnimplementedWalletServiceServer) VerifyBVNImage(context.Context, *VerifyBVNImageRequest) (*VerifyBVNImageResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method VerifyBVNImage not implemented") +} +func (UnimplementedWalletServiceServer) GetPayment(context.Context, *GetPaymentRequest) (*GetPaymentResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetPayment not implemented") +} +func (UnimplementedWalletServiceServer) UpdatePaymentStatus(context.Context, *UpdatePaymentStatusRequest) (*UpdatePaymentStatusResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdatePaymentStatus not implemented") +} +func (UnimplementedWalletServiceServer) HealthCheck(context.Context, *HealthCheckRequest) (*HealthCheckResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method HealthCheck not implemented") +} +func (UnimplementedWalletServiceServer) GetWallets(context.Context, *GetWalletsRequest) (*GetWalletsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetWallets not implemented") +} +func (UnimplementedWalletServiceServer) mustEmbedUnimplementedWalletServiceServer() {} +func (UnimplementedWalletServiceServer) testEmbeddedByValue() {} + +// UnsafeWalletServiceServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to WalletServiceServer will +// result in compilation errors. +type UnsafeWalletServiceServer interface { + mustEmbedUnimplementedWalletServiceServer() +} + +func RegisterWalletServiceServer(s grpc.ServiceRegistrar, srv WalletServiceServer) { + // If the following call pancis, it indicates UnimplementedWalletServiceServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } + s.RegisterService(&WalletService_ServiceDesc, srv) +} + +func _WalletService_CreateWallet_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateWalletRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(WalletServiceServer).CreateWallet(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: WalletService_CreateWallet_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(WalletServiceServer).CreateWallet(ctx, req.(*CreateWalletRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _WalletService_InitiatePayment_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(InitiatePaymentRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(WalletServiceServer).InitiatePayment(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: WalletService_InitiatePayment_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(WalletServiceServer).InitiatePayment(ctx, req.(*InitiatePaymentRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _WalletService_InitiateTransfer_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(InitiateTransferRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(WalletServiceServer).InitiateTransfer(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: WalletService_InitiateTransfer_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(WalletServiceServer).InitiateTransfer(ctx, req.(*InitiateTransferRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _WalletService_GetTransactions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetTransactionsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(WalletServiceServer).GetTransactions(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: WalletService_GetTransactions_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(WalletServiceServer).GetTransactions(ctx, req.(*GetTransactionsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _WalletService_ResolveAccount_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ResolveAccountRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(WalletServiceServer).ResolveAccount(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: WalletService_ResolveAccount_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(WalletServiceServer).ResolveAccount(ctx, req.(*ResolveAccountRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _WalletService_VerifyNIN_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(VerifyNINRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(WalletServiceServer).VerifyNIN(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: WalletService_VerifyNIN_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(WalletServiceServer).VerifyNIN(ctx, req.(*VerifyNINRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _WalletService_VerifyBVNImage_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(VerifyBVNImageRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(WalletServiceServer).VerifyBVNImage(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: WalletService_VerifyBVNImage_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(WalletServiceServer).VerifyBVNImage(ctx, req.(*VerifyBVNImageRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _WalletService_GetPayment_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetPaymentRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(WalletServiceServer).GetPayment(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: WalletService_GetPayment_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(WalletServiceServer).GetPayment(ctx, req.(*GetPaymentRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _WalletService_UpdatePaymentStatus_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdatePaymentStatusRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(WalletServiceServer).UpdatePaymentStatus(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: WalletService_UpdatePaymentStatus_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(WalletServiceServer).UpdatePaymentStatus(ctx, req.(*UpdatePaymentStatusRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _WalletService_HealthCheck_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(HealthCheckRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(WalletServiceServer).HealthCheck(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: WalletService_HealthCheck_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(WalletServiceServer).HealthCheck(ctx, req.(*HealthCheckRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _WalletService_GetWallets_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetWalletsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(WalletServiceServer).GetWallets(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: WalletService_GetWallets_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(WalletServiceServer).GetWallets(ctx, req.(*GetWalletsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// WalletService_ServiceDesc is the grpc.ServiceDesc for WalletService service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var WalletService_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "wallet.WalletService", + HandlerType: (*WalletServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "CreateWallet", + Handler: _WalletService_CreateWallet_Handler, + }, + { + MethodName: "InitiatePayment", + Handler: _WalletService_InitiatePayment_Handler, + }, + { + MethodName: "InitiateTransfer", + Handler: _WalletService_InitiateTransfer_Handler, + }, + { + MethodName: "GetTransactions", + Handler: _WalletService_GetTransactions_Handler, + }, + { + MethodName: "ResolveAccount", + Handler: _WalletService_ResolveAccount_Handler, + }, + { + MethodName: "VerifyNIN", + Handler: _WalletService_VerifyNIN_Handler, + }, + { + MethodName: "VerifyBVNImage", + Handler: _WalletService_VerifyBVNImage_Handler, + }, + { + MethodName: "GetPayment", + Handler: _WalletService_GetPayment_Handler, + }, + { + MethodName: "UpdatePaymentStatus", + Handler: _WalletService_UpdatePaymentStatus_Handler, + }, + { + MethodName: "HealthCheck", + Handler: _WalletService_HealthCheck_Handler, + }, + { + MethodName: "GetWallets", + Handler: _WalletService_GetWallets_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "wallet.proto", +} diff --git a/services/wallet/router/routes.go b/services/wallet/router/routes.go index 4ebb01b..d7bfc7e 100644 --- a/services/wallet/router/routes.go +++ b/services/wallet/router/routes.go @@ -1,9 +1,11 @@ package router import ( - _ "github.com/PayGidi/WalletService/docs" + "log" + "github.com/PayGidi/WalletService/controllers" "github.com/PayGidi/WalletService/core/constants" + _ "github.com/PayGidi/WalletService/docs" "github.com/PayGidi/WalletService/middlewares" "github.com/PayGidi/WalletService/services/account" "github.com/gin-gonic/gin" @@ -19,40 +21,54 @@ func SetupRoutes(r *gin.Engine, db *gorm.DB, accClient *account.AccountClient) { // health check r.GET("/health", controllers.HealthCheck) + // Create the WalletController instance with both dependencies walletController := controllers.NewWalletController(db, accClient) api := r.Group("/api/v1") + + api.GET("/health", func(ctx *gin.Context) { + log.Printf("Wallet is running") + }) + walletGroup := api.Group("/wallet") - // Public endpoints + + // Public endpoints - defined outside the authenticated group + log.Println("Setting up public routes...") + walletGroup.GET("/banks", walletController.GetBanksHttp) + walletGroup.POST("/transfer/lookup", walletController.ResolveAccountHttp) + walletGroup.GET("/payments/:payment_id", walletController.GetPaymentHttp) walletGroup.POST("/webhook/squad", walletController.HandleSquadWebhook) - - walletGroup.Use(middlewares.Authenticate()) + + // Authenticated endpoints + authGroup := walletGroup.Group("", middlewares.Authenticate()) { - walletGroup.GET("/banks", walletController.GetBanksHttp) - walletGroup.GET("", walletController.GetWalletHttp) - walletGroup.GET("/:accountNumber", walletController.GetWalletHttp) - walletGroup.GET("/:accountNumber/transactions", walletController.GetTransactionsHttp) + authGroup.GET("", walletController.GetWalletHttp) + authGroup.GET("/:accountNumber", walletController.GetWalletHttp) + authGroup.GET("/:accountNumber/transactions", walletController.GetTransactionsHttp) // Transfers - walletGroup.POST("/transfer/lookup", walletController.ResolveAccountHttp) - walletGroup.POST("/transfer", walletController.InitiateTransferHttp) - walletGroup.GET("/transfer/list", walletController.GetAllTransfersHttp) - walletGroup.POST("/transfer/requery", walletController.RequeryTransferHttp) + authGroup.POST("/transfer", walletController.InitiateTransferHttp) + authGroup.GET("/transfer/list", walletController.GetAllTransfersHttp) + authGroup.POST("/transfer/requery", walletController.RequeryTransferHttp) // Disputes - walletGroup.GET("/disputes", walletController.GetAllDisputesHttp) - walletGroup.GET("/disputes/upload-url/:ticketId/:fileName", walletController.GetDisputeUploadURLHttp) - walletGroup.POST("/disputes/:ticketId/resolve", walletController.ResolveDisputeHttp) + authGroup.GET("/disputes", walletController.GetAllDisputesHttp) + authGroup.GET("/disputes/upload-url/:ticketId/:fileName", walletController.GetDisputeUploadURLHttp) + authGroup.POST("/disputes/:ticketId/resolve", walletController.ResolveDisputeHttp) // Create Wallet - walletGroup.POST("/create", walletController.CreateWalletHttp) + authGroup.POST("/create", walletController.CreateWalletHttp) + + // Balance + authGroup.GET("/balance", walletController.GetTotalBalanceHttp) // Payments (KYB Trust Layer integration) - walletGroup.POST("/payments/new", walletController.CreatePaymentHttp) + authGroup.POST("/payments/new", walletController.CreatePaymentHttp) if constants.IsDevMode() { - walletGroup.POST("/deposit/simulate", walletController.SimulatePaymentHttp) + authGroup.POST("/deposit/simulate", walletController.SimulatePaymentHttp) } } + } diff --git a/services/wallet/services/squad/squad.go b/services/wallet/services/squad/squad.go index 1a9c7a8..1ef5bd8 100644 --- a/services/wallet/services/squad/squad.go +++ b/services/wallet/services/squad/squad.go @@ -232,7 +232,7 @@ func GetBanks(ctx context.Context) (bool, *string, []responses.SquadBankData) { var response responses.SquadResponse[[]responses.SquadBankData] // The endpoint for fetching bank list in Squad is typically /payout/banks - _, err := httpclient.Get(client, ctx, "/payout/banks", &response) + _, err := httpclient.PostJSON(client, ctx, "/transaction/mandate/banklists", nil, &response) if err != nil { log.Printf("[Squad][GetBanks] request failed: %v", err) errMsg := err.Error() diff --git a/services/wallet/utils/file.go b/services/wallet/utils/file.go new file mode 100644 index 0000000..66a74ac --- /dev/null +++ b/services/wallet/utils/file.go @@ -0,0 +1,15 @@ +package utils + +import ( + "encoding/json" + "os" +) + +func LoadJSONFile(filePath string, v interface{}) error { + file, err := os.Open(filePath) + if err != nil { + return err + } + defer file.Close() + return json.NewDecoder(file).Decode(v) +}