Compare commits
19 Commits
ab8cf877d7
...
win-servic
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
64a07e0ed6 | ||
|
|
f245a6575d | ||
|
|
e3050bc5ff | ||
|
|
d593eedf01 | ||
|
|
2fb5bb3d84 | ||
|
|
86052c9350 | ||
|
|
e5be55e141 | ||
|
|
8f0eb7130b | ||
|
|
94fe04a6a4 | ||
|
|
976c11902c | ||
|
|
c8d2662a36 | ||
|
|
ac5fedddd1 | ||
|
|
0c2d4986a2 | ||
|
|
a3203936d2 | ||
|
|
fb1c0ec130 | ||
|
|
2a21758369 | ||
|
|
1abb5fa006 | ||
|
|
e1b1c857fa | ||
|
|
4216007af3 |
@@ -67,18 +67,7 @@ The `program_client.nonce` column stores the **next usable nonce** — i.e. it i
|
|||||||
## Cryptography
|
## Cryptography
|
||||||
|
|
||||||
### Authentication
|
### Authentication
|
||||||
- **Client protocol:** ed25519
|
- **Signature scheme:** ed25519
|
||||||
|
|
||||||
### User-Agent Authentication
|
|
||||||
|
|
||||||
User-agent authentication supports multiple signature schemes because platform-provided "hardware-bound" keys do not expose a uniform algorithm across operating systems and hardware.
|
|
||||||
|
|
||||||
- **Supported schemes:** RSA, Ed25519, ECDSA (secp256k1)
|
|
||||||
- **Why:** the user agent authenticates with keys backed by platform facilities, and those facilities differ by platform
|
|
||||||
- **Apple Silicon Secure Enclave / Secure Element:** ECDSA-only in practice
|
|
||||||
- **Windows Hello / TPM 2.0:** currently RSA-backed in our integration
|
|
||||||
|
|
||||||
This is why the user-agent auth protocol carries an explicit `KeyType`, while the SDK client protocol remains fixed to ed25519.
|
|
||||||
|
|
||||||
### Encryption at Rest
|
### Encryption at Rest
|
||||||
- **Scheme:** Symmetric AEAD — currently **XChaCha20-Poly1305**
|
- **Scheme:** Symmetric AEAD — currently **XChaCha20-Poly1305**
|
||||||
@@ -159,7 +148,7 @@ The central abstraction is the `Policy` trait. Each implementation handles one s
|
|||||||
Every grant has two layers:
|
Every grant has two layers:
|
||||||
|
|
||||||
- **Shared (`evm_basic_grant`)** — wallet, chain, validity period, gas fee caps, transaction count rate limit. One row per grant regardless of type.
|
- **Shared (`evm_basic_grant`)** — wallet, chain, validity period, gas fee caps, transaction count rate limit. One row per grant regardless of type.
|
||||||
- **Specific** — policy-owned tables (`evm_ether_transfer_grant`, `evm_token_transfer_grant`) holding type-specific configuration.
|
- **Specific** — policy-owned tables (`evm_ether_transfer_grant`, `evm_token_transfer_grant`, etc.) holding type-specific configuration.
|
||||||
|
|
||||||
`find_all_grants` uses a `#[diesel::auto_type]` base join between the specific and shared tables, then batch-loads related rows (targets, volume limits) in two additional queries to avoid N+1.
|
`find_all_grants` uses a `#[diesel::auto_type]` base join between the specific and shared tables, then batch-loads related rows (targets, volume limits) in two additional queries to avoid N+1.
|
||||||
|
|
||||||
@@ -182,6 +171,7 @@ These are checked centrally in `check_shared_constraints` before policy evaluati
|
|||||||
- **Only EIP-1559 transactions are supported.** Legacy and EIP-2930 types are rejected outright.
|
- **Only EIP-1559 transactions are supported.** Legacy and EIP-2930 types are rejected outright.
|
||||||
- **No opaque-calldata (unknown contract) grant type.** The architecture describes a category for unrecognised contracts, but no policy implements it yet. Any transaction that is not a plain ETH transfer or a known ERC-20 transfer is unconditionally rejected.
|
- **No opaque-calldata (unknown contract) grant type.** The architecture describes a category for unrecognised contracts, but no policy implements it yet. Any transaction that is not a plain ETH transfer or a known ERC-20 transfer is unconditionally rejected.
|
||||||
- **Token registry is static.** Tokens are recognised only if they appear in the hard-coded `arbiter_tokens_registry` crate. There is no mechanism to register additional contracts at runtime.
|
- **Token registry is static.** Tokens are recognised only if they appear in the hard-coded `arbiter_tokens_registry` crate. There is no mechanism to register additional contracts at runtime.
|
||||||
|
- **Nonce management is not implemented.** The architecture lists nonce deduplication as a core responsibility, but no nonce tracking or enforcement exists yet.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -189,5 +179,5 @@ These are checked centrally in `check_shared_constraints` before policy evaluati
|
|||||||
|
|
||||||
The unsealed root key must be held in a hardened memory cell resistant to dumps, page swaps, and hibernation.
|
The unsealed root key must be held in a hardened memory cell resistant to dumps, page swaps, and hibernation.
|
||||||
|
|
||||||
- **Current:** A dedicated memory-protection abstraction is in place, with `memsafe` used behind that abstraction today
|
- **Current:** Using the `memsafe` crate as an interim solution
|
||||||
- **Planned:** Additional backends can be introduced behind the same abstraction, including a custom implementation based on `mlock` (Unix) and `VirtualProtect` (Windows)
|
- **Planned:** Custom implementation based on `mlock` (Unix) and `VirtualProtect` (Windows)
|
||||||
|
|||||||
1308
docs/superpowers/plans/2026-03-28-grant-creation-refactor.md
Normal file
1308
docs/superpowers/plans/2026-03-28-grant-creation-refactor.md
Normal file
File diff suppressed because it is too large
Load Diff
821
docs/superpowers/plans/2026-03-28-grant-grid-view.md
Normal file
821
docs/superpowers/plans/2026-03-28-grant-grid-view.md
Normal file
@@ -0,0 +1,821 @@
|
|||||||
|
# Grant Grid View Implementation Plan
|
||||||
|
|
||||||
|
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
|
||||||
|
|
||||||
|
**Goal:** Add an "EVM Grants" dashboard tab that displays all grants as enriched cards (type, chain, wallet address, client name) with per-card revoke support.
|
||||||
|
|
||||||
|
**Architecture:** A new `walletAccessListProvider` fetches wallet accesses with their DB row IDs. The screen (`grants.dart`) watches only `evmGrantsProvider` for top-level state. Each `GrantCard` widget (its own file) watches enrichment providers (`walletAccessListProvider`, `evmProvider`, `sdkClientsProvider`) and the revoke mutation directly — keeping rebuilds scoped to the card. The screen is registered as a dashboard tab in `AdaptiveScaffold`.
|
||||||
|
|
||||||
|
**Tech Stack:** Flutter, Riverpod (`riverpod_annotation` + `build_runner` codegen), `sizer` (adaptive sizing), `auto_route`, Protocol Buffers (Dart), `Palette` design tokens.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## File Map
|
||||||
|
|
||||||
|
| File | Action | Responsibility |
|
||||||
|
|---|---|---|
|
||||||
|
| `useragent/lib/theme/palette.dart` | Modify | Add `Palette.token` (indigo accent for token-transfer cards) |
|
||||||
|
| `useragent/lib/features/connection/evm/wallet_access.dart` | Modify | Add `listAllWalletAccesses()` function |
|
||||||
|
| `useragent/lib/providers/sdk_clients/wallet_access_list.dart` | Create | `WalletAccessListProvider` — fetches full wallet access list with IDs |
|
||||||
|
| `useragent/lib/screens/dashboard/evm/grants/widgets/grant_card.dart` | Create | `GrantCard` widget — watches enrichment providers + revoke mutation; one card per grant |
|
||||||
|
| `useragent/lib/screens/dashboard/evm/grants/grants.dart` | Create | `EvmGrantsScreen` — watches `evmGrantsProvider`; handles loading/error/empty/data states; renders `GrantCard` list |
|
||||||
|
| `useragent/lib/router.dart` | Modify | Register `EvmGrantsRoute` in dashboard children |
|
||||||
|
| `useragent/lib/screens/dashboard.dart` | Modify | Add Grants entry to `routes` list and `NavigationDestination` list |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Task 1: Add `Palette.token`
|
||||||
|
|
||||||
|
**Files:**
|
||||||
|
- Modify: `useragent/lib/theme/palette.dart`
|
||||||
|
|
||||||
|
- [ ] **Step 1: Add the color**
|
||||||
|
|
||||||
|
Replace the contents of `useragent/lib/theme/palette.dart` with:
|
||||||
|
|
||||||
|
```dart
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
class Palette {
|
||||||
|
static const ink = Color(0xFF15263C);
|
||||||
|
static const coral = Color(0xFFE26254);
|
||||||
|
static const cream = Color(0xFFFFFAF4);
|
||||||
|
static const line = Color(0x1A15263C);
|
||||||
|
static const token = Color(0xFF5C6BC0);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
- [ ] **Step 2: Verify**
|
||||||
|
|
||||||
|
```sh
|
||||||
|
cd useragent && flutter analyze lib/theme/palette.dart
|
||||||
|
```
|
||||||
|
|
||||||
|
Expected: no issues.
|
||||||
|
|
||||||
|
- [ ] **Step 3: Commit**
|
||||||
|
|
||||||
|
```sh
|
||||||
|
jj describe -m "feat(theme): add Palette.token for token-transfer grant cards"
|
||||||
|
jj new
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Task 2: Add `listAllWalletAccesses` feature function
|
||||||
|
|
||||||
|
**Files:**
|
||||||
|
- Modify: `useragent/lib/features/connection/evm/wallet_access.dart`
|
||||||
|
|
||||||
|
`readClientWalletAccess` (existing) filters the list to one client's wallet IDs and returns `Set<int>`. This new function returns the complete unfiltered list with row IDs so the grant cards can resolve wallet_access_id → wallet + client.
|
||||||
|
|
||||||
|
- [ ] **Step 1: Append function**
|
||||||
|
|
||||||
|
Add at the bottom of `useragent/lib/features/connection/evm/wallet_access.dart`:
|
||||||
|
|
||||||
|
```dart
|
||||||
|
Future<List<SdkClientWalletAccess>> listAllWalletAccesses(
|
||||||
|
Connection connection,
|
||||||
|
) async {
|
||||||
|
final response = await connection.ask(
|
||||||
|
UserAgentRequest(listWalletAccess: Empty()),
|
||||||
|
);
|
||||||
|
if (!response.hasListWalletAccessResponse()) {
|
||||||
|
throw Exception(
|
||||||
|
'Expected list wallet access response, got ${response.whichPayload()}',
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return response.listWalletAccessResponse.accesses.toList(growable: false);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Each returned `SdkClientWalletAccess` has:
|
||||||
|
- `.id` — the `evm_wallet_access` row ID (same value as `wallet_access_id` in a `GrantEntry`)
|
||||||
|
- `.access.walletId` — the EVM wallet DB ID
|
||||||
|
- `.access.sdkClientId` — the SDK client DB ID
|
||||||
|
|
||||||
|
- [ ] **Step 2: Verify**
|
||||||
|
|
||||||
|
```sh
|
||||||
|
cd useragent && flutter analyze lib/features/connection/evm/wallet_access.dart
|
||||||
|
```
|
||||||
|
|
||||||
|
Expected: no issues.
|
||||||
|
|
||||||
|
- [ ] **Step 3: Commit**
|
||||||
|
|
||||||
|
```sh
|
||||||
|
jj describe -m "feat(evm): add listAllWalletAccesses feature function"
|
||||||
|
jj new
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Task 3: Create `WalletAccessListProvider`
|
||||||
|
|
||||||
|
**Files:**
|
||||||
|
- Create: `useragent/lib/providers/sdk_clients/wallet_access_list.dart`
|
||||||
|
- Generated: `useragent/lib/providers/sdk_clients/wallet_access_list.g.dart`
|
||||||
|
|
||||||
|
Mirrors the structure of `EvmGrants` in `providers/evm/evm_grants.dart` — class-based `@riverpod` with a `refresh()` method.
|
||||||
|
|
||||||
|
- [ ] **Step 1: Write the provider**
|
||||||
|
|
||||||
|
Create `useragent/lib/providers/sdk_clients/wallet_access_list.dart`:
|
||||||
|
|
||||||
|
```dart
|
||||||
|
import 'package:arbiter/features/connection/evm/wallet_access.dart';
|
||||||
|
import 'package:arbiter/proto/user_agent.pb.dart';
|
||||||
|
import 'package:arbiter/providers/connection/connection_manager.dart';
|
||||||
|
import 'package:mtcore/markettakers.dart';
|
||||||
|
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||||
|
|
||||||
|
part 'wallet_access_list.g.dart';
|
||||||
|
|
||||||
|
@riverpod
|
||||||
|
class WalletAccessList extends _$WalletAccessList {
|
||||||
|
@override
|
||||||
|
Future<List<SdkClientWalletAccess>?> build() async {
|
||||||
|
final connection = await ref.watch(connectionManagerProvider.future);
|
||||||
|
if (connection == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
return await listAllWalletAccesses(connection);
|
||||||
|
} catch (e, st) {
|
||||||
|
talker.handle(e, st);
|
||||||
|
rethrow;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> refresh() async {
|
||||||
|
final connection = await ref.read(connectionManagerProvider.future);
|
||||||
|
if (connection == null) {
|
||||||
|
state = const AsyncData(null);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
state = const AsyncLoading();
|
||||||
|
state = await AsyncValue.guard(() => listAllWalletAccesses(connection));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
- [ ] **Step 2: Run code generation**
|
||||||
|
|
||||||
|
```sh
|
||||||
|
cd useragent && dart run build_runner build --delete-conflicting-outputs
|
||||||
|
```
|
||||||
|
|
||||||
|
Expected: `useragent/lib/providers/sdk_clients/wallet_access_list.g.dart` created. No errors.
|
||||||
|
|
||||||
|
- [ ] **Step 3: Verify**
|
||||||
|
|
||||||
|
```sh
|
||||||
|
cd useragent && flutter analyze lib/providers/sdk_clients/
|
||||||
|
```
|
||||||
|
|
||||||
|
Expected: no issues.
|
||||||
|
|
||||||
|
- [ ] **Step 4: Commit**
|
||||||
|
|
||||||
|
```sh
|
||||||
|
jj describe -m "feat(providers): add WalletAccessListProvider"
|
||||||
|
jj new
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Task 4: Create `GrantCard` widget
|
||||||
|
|
||||||
|
**Files:**
|
||||||
|
- Create: `useragent/lib/screens/dashboard/evm/grants/widgets/grant_card.dart`
|
||||||
|
|
||||||
|
This widget owns all per-card logic: enrichment lookups, revoke action, and rebuild scope. The screen only passes it a `GrantEntry` — the card fetches everything else itself.
|
||||||
|
|
||||||
|
**Key types:**
|
||||||
|
- `GrantEntry` (from `proto/evm.pb.dart`): `.id`, `.shared.walletAccessId`, `.shared.chainId`, `.specific.whichGrant()`
|
||||||
|
- `SpecificGrant_Grant.etherTransfer` / `.tokenTransfer` — enum values for the oneof
|
||||||
|
- `SdkClientWalletAccess` (from `proto/user_agent.pb.dart`): `.id`, `.access.walletId`, `.access.sdkClientId`
|
||||||
|
- `WalletEntry` (from `proto/evm.pb.dart`): `.id`, `.address` (List<int>)
|
||||||
|
- `SdkClientEntry` (from `proto/user_agent.pb.dart`): `.id`, `.info.name`
|
||||||
|
- `revokeEvmGrantMutation` — `Mutation<void>` (global; all revoke buttons disable together while any revoke is in flight)
|
||||||
|
- `executeRevokeEvmGrant(ref, grantId: int)` — `Future<void>`
|
||||||
|
|
||||||
|
- [ ] **Step 1: Write the widget**
|
||||||
|
|
||||||
|
Create `useragent/lib/screens/dashboard/evm/grants/widgets/grant_card.dart`:
|
||||||
|
|
||||||
|
```dart
|
||||||
|
import 'package:arbiter/proto/evm.pb.dart';
|
||||||
|
import 'package:arbiter/proto/user_agent.pb.dart';
|
||||||
|
import 'package:arbiter/providers/evm/evm.dart';
|
||||||
|
import 'package:arbiter/providers/evm/evm_grants.dart';
|
||||||
|
import 'package:arbiter/providers/sdk_clients/list.dart';
|
||||||
|
import 'package:arbiter/providers/sdk_clients/wallet_access_list.dart';
|
||||||
|
import 'package:arbiter/theme/palette.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:hooks_riverpod/experimental/mutation.dart';
|
||||||
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
|
import 'package:sizer/sizer.dart';
|
||||||
|
|
||||||
|
String _shortAddress(List<int> bytes) {
|
||||||
|
final hex = bytes.map((b) => b.toRadixString(16).padLeft(2, '0')).join();
|
||||||
|
return '0x${hex.substring(0, 6)}...${hex.substring(hex.length - 4)}';
|
||||||
|
}
|
||||||
|
|
||||||
|
String _formatError(Object error) {
|
||||||
|
final message = error.toString();
|
||||||
|
if (message.startsWith('Exception: ')) {
|
||||||
|
return message.substring('Exception: '.length);
|
||||||
|
}
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
|
||||||
|
class GrantCard extends ConsumerWidget {
|
||||||
|
const GrantCard({super.key, required this.grant});
|
||||||
|
|
||||||
|
final GrantEntry grant;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context, WidgetRef ref) {
|
||||||
|
// Enrichment lookups — each watch scopes rebuilds to this card only
|
||||||
|
final walletAccesses =
|
||||||
|
ref.watch(walletAccessListProvider).asData?.value ?? const [];
|
||||||
|
final wallets = ref.watch(evmProvider).asData?.value ?? const [];
|
||||||
|
final clients = ref.watch(sdkClientsProvider).asData?.value ?? const [];
|
||||||
|
final revoking = ref.watch(revokeEvmGrantMutation) is MutationPending;
|
||||||
|
|
||||||
|
final isEther =
|
||||||
|
grant.specific.whichGrant() == SpecificGrant_Grant.etherTransfer;
|
||||||
|
final accent = isEther ? Palette.coral : Palette.token;
|
||||||
|
final typeLabel = isEther ? 'Ether' : 'Token';
|
||||||
|
final theme = Theme.of(context);
|
||||||
|
final muted = Palette.ink.withValues(alpha: 0.62);
|
||||||
|
|
||||||
|
// Resolve wallet_access_id → wallet address + client name
|
||||||
|
final accessById = <int, SdkClientWalletAccess>{
|
||||||
|
for (final a in walletAccesses) a.id: a,
|
||||||
|
};
|
||||||
|
final walletById = <int, WalletEntry>{
|
||||||
|
for (final w in wallets) w.id: w,
|
||||||
|
};
|
||||||
|
final clientNameById = <int, String>{
|
||||||
|
for (final c in clients) c.id: c.info.name,
|
||||||
|
};
|
||||||
|
|
||||||
|
final accessId = grant.shared.walletAccessId;
|
||||||
|
final access = accessById[accessId];
|
||||||
|
final wallet = access != null ? walletById[access.access.walletId] : null;
|
||||||
|
|
||||||
|
final walletLabel = wallet != null
|
||||||
|
? _shortAddress(wallet.address)
|
||||||
|
: 'Access #$accessId';
|
||||||
|
|
||||||
|
final clientLabel = () {
|
||||||
|
if (access == null) return '';
|
||||||
|
final name = clientNameById[access.access.sdkClientId] ?? '';
|
||||||
|
return name.isEmpty ? 'Client #${access.access.sdkClientId}' : name;
|
||||||
|
}();
|
||||||
|
|
||||||
|
void showError(String message) {
|
||||||
|
if (!context.mounted) return;
|
||||||
|
ScaffoldMessenger.of(context).showSnackBar(
|
||||||
|
SnackBar(content: Text(message), behavior: SnackBarBehavior.floating),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> revoke() async {
|
||||||
|
try {
|
||||||
|
await executeRevokeEvmGrant(ref, grantId: grant.id);
|
||||||
|
} catch (e) {
|
||||||
|
showError(_formatError(e));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return Container(
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
borderRadius: BorderRadius.circular(24),
|
||||||
|
color: Palette.cream.withValues(alpha: 0.92),
|
||||||
|
border: Border.all(color: Palette.line),
|
||||||
|
),
|
||||||
|
child: IntrinsicHeight(
|
||||||
|
child: Row(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.stretch,
|
||||||
|
children: [
|
||||||
|
// Accent strip
|
||||||
|
Container(
|
||||||
|
width: 0.8.w,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: accent,
|
||||||
|
borderRadius: const BorderRadius.horizontal(
|
||||||
|
left: Radius.circular(24),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
// Card body
|
||||||
|
Expanded(
|
||||||
|
child: Padding(
|
||||||
|
padding: EdgeInsets.symmetric(
|
||||||
|
horizontal: 1.6.w,
|
||||||
|
vertical: 1.4.h,
|
||||||
|
),
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
// Row 1: type badge · chain · spacer · revoke button
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
Container(
|
||||||
|
padding: EdgeInsets.symmetric(
|
||||||
|
horizontal: 1.w,
|
||||||
|
vertical: 0.4.h,
|
||||||
|
),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: accent.withValues(alpha: 0.15),
|
||||||
|
borderRadius: BorderRadius.circular(8),
|
||||||
|
),
|
||||||
|
child: Text(
|
||||||
|
typeLabel,
|
||||||
|
style: theme.textTheme.labelSmall?.copyWith(
|
||||||
|
color: accent,
|
||||||
|
fontWeight: FontWeight.w800,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(width: 1.w),
|
||||||
|
Container(
|
||||||
|
padding: EdgeInsets.symmetric(
|
||||||
|
horizontal: 1.w,
|
||||||
|
vertical: 0.4.h,
|
||||||
|
),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: Palette.ink.withValues(alpha: 0.06),
|
||||||
|
borderRadius: BorderRadius.circular(8),
|
||||||
|
),
|
||||||
|
child: Text(
|
||||||
|
'Chain ${grant.shared.chainId}',
|
||||||
|
style: theme.textTheme.labelSmall?.copyWith(
|
||||||
|
color: muted,
|
||||||
|
fontWeight: FontWeight.w700,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
const Spacer(),
|
||||||
|
if (revoking)
|
||||||
|
SizedBox(
|
||||||
|
width: 1.8.h,
|
||||||
|
height: 1.8.h,
|
||||||
|
child: CircularProgressIndicator(
|
||||||
|
strokeWidth: 2,
|
||||||
|
color: Palette.coral,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
else
|
||||||
|
OutlinedButton.icon(
|
||||||
|
onPressed: revoke,
|
||||||
|
style: OutlinedButton.styleFrom(
|
||||||
|
foregroundColor: Palette.coral,
|
||||||
|
side: BorderSide(
|
||||||
|
color: Palette.coral.withValues(alpha: 0.4),
|
||||||
|
),
|
||||||
|
padding: EdgeInsets.symmetric(
|
||||||
|
horizontal: 1.w,
|
||||||
|
vertical: 0.6.h,
|
||||||
|
),
|
||||||
|
shape: RoundedRectangleBorder(
|
||||||
|
borderRadius: BorderRadius.circular(10),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
icon: const Icon(Icons.block_rounded, size: 16),
|
||||||
|
label: const Text('Revoke'),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
SizedBox(height: 0.8.h),
|
||||||
|
// Row 2: wallet address · client name
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
Text(
|
||||||
|
walletLabel,
|
||||||
|
style: theme.textTheme.bodySmall?.copyWith(
|
||||||
|
color: Palette.ink,
|
||||||
|
fontFamily: 'monospace',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Padding(
|
||||||
|
padding: EdgeInsets.symmetric(horizontal: 0.8.w),
|
||||||
|
child: Text(
|
||||||
|
'·',
|
||||||
|
style: theme.textTheme.bodySmall
|
||||||
|
?.copyWith(color: muted),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Expanded(
|
||||||
|
child: Text(
|
||||||
|
clientLabel,
|
||||||
|
maxLines: 1,
|
||||||
|
overflow: TextOverflow.ellipsis,
|
||||||
|
style: theme.textTheme.bodySmall
|
||||||
|
?.copyWith(color: muted),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
- [ ] **Step 2: Verify**
|
||||||
|
|
||||||
|
```sh
|
||||||
|
cd useragent && flutter analyze lib/screens/dashboard/evm/grants/widgets/grant_card.dart
|
||||||
|
```
|
||||||
|
|
||||||
|
Expected: no issues.
|
||||||
|
|
||||||
|
- [ ] **Step 3: Commit**
|
||||||
|
|
||||||
|
```sh
|
||||||
|
jj describe -m "feat(grants): add GrantCard widget with self-contained enrichment"
|
||||||
|
jj new
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Task 5: Create `EvmGrantsScreen`
|
||||||
|
|
||||||
|
**Files:**
|
||||||
|
- Create: `useragent/lib/screens/dashboard/evm/grants/grants.dart`
|
||||||
|
|
||||||
|
The screen watches only `evmGrantsProvider` for top-level state (loading / error / no connection / empty / data). When there is data it renders a list of `GrantCard` widgets — each card manages its own enrichment subscriptions.
|
||||||
|
|
||||||
|
- [ ] **Step 1: Write the screen**
|
||||||
|
|
||||||
|
Create `useragent/lib/screens/dashboard/evm/grants/grants.dart`:
|
||||||
|
|
||||||
|
```dart
|
||||||
|
import 'package:arbiter/proto/evm.pb.dart';
|
||||||
|
import 'package:arbiter/providers/evm/evm_grants.dart';
|
||||||
|
import 'package:arbiter/providers/sdk_clients/wallet_access_list.dart';
|
||||||
|
import 'package:arbiter/router.gr.dart';
|
||||||
|
import 'package:arbiter/screens/dashboard/evm/grants/widgets/grant_card.dart';
|
||||||
|
import 'package:arbiter/theme/palette.dart';
|
||||||
|
import 'package:arbiter/widgets/page_header.dart';
|
||||||
|
import 'package:auto_route/auto_route.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
|
import 'package:sizer/sizer.dart';
|
||||||
|
|
||||||
|
String _formatError(Object error) {
|
||||||
|
final message = error.toString();
|
||||||
|
if (message.startsWith('Exception: ')) {
|
||||||
|
return message.substring('Exception: '.length);
|
||||||
|
}
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ─── State panel ──────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
|
class _StatePanel extends StatelessWidget {
|
||||||
|
const _StatePanel({
|
||||||
|
required this.icon,
|
||||||
|
required this.title,
|
||||||
|
required this.body,
|
||||||
|
this.actionLabel,
|
||||||
|
this.onAction,
|
||||||
|
this.busy = false,
|
||||||
|
});
|
||||||
|
|
||||||
|
final IconData icon;
|
||||||
|
final String title;
|
||||||
|
final String body;
|
||||||
|
final String? actionLabel;
|
||||||
|
final Future<void> Function()? onAction;
|
||||||
|
final bool busy;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
final theme = Theme.of(context);
|
||||||
|
|
||||||
|
return Container(
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
borderRadius: BorderRadius.circular(24),
|
||||||
|
color: Palette.cream.withValues(alpha: 0.92),
|
||||||
|
border: Border.all(color: Palette.line),
|
||||||
|
),
|
||||||
|
child: Padding(
|
||||||
|
padding: EdgeInsets.all(2.8.h),
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
if (busy)
|
||||||
|
SizedBox(
|
||||||
|
width: 2.8.h,
|
||||||
|
height: 2.8.h,
|
||||||
|
child: const CircularProgressIndicator(strokeWidth: 2.5),
|
||||||
|
)
|
||||||
|
else
|
||||||
|
Icon(icon, size: 34, color: Palette.coral),
|
||||||
|
SizedBox(height: 1.8.h),
|
||||||
|
Text(
|
||||||
|
title,
|
||||||
|
style: theme.textTheme.headlineSmall?.copyWith(
|
||||||
|
color: Palette.ink,
|
||||||
|
fontWeight: FontWeight.w800,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(height: 1.h),
|
||||||
|
Text(
|
||||||
|
body,
|
||||||
|
style: theme.textTheme.bodyLarge?.copyWith(
|
||||||
|
color: Palette.ink.withValues(alpha: 0.72),
|
||||||
|
height: 1.5,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
if (actionLabel != null && onAction != null) ...[
|
||||||
|
SizedBox(height: 2.h),
|
||||||
|
OutlinedButton.icon(
|
||||||
|
onPressed: () => onAction!(),
|
||||||
|
icon: const Icon(Icons.refresh),
|
||||||
|
label: Text(actionLabel!),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ─── Grant list ───────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
|
class _GrantList extends StatelessWidget {
|
||||||
|
const _GrantList({required this.grants});
|
||||||
|
|
||||||
|
final List<GrantEntry> grants;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Column(
|
||||||
|
children: [
|
||||||
|
for (var i = 0; i < grants.length; i++)
|
||||||
|
Padding(
|
||||||
|
padding: EdgeInsets.only(
|
||||||
|
bottom: i == grants.length - 1 ? 0 : 1.8.h,
|
||||||
|
),
|
||||||
|
child: GrantCard(grant: grants[i]),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ─── Screen ───────────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
|
@RoutePage()
|
||||||
|
class EvmGrantsScreen extends ConsumerWidget {
|
||||||
|
const EvmGrantsScreen({super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context, WidgetRef ref) {
|
||||||
|
// Screen watches only the grant list for top-level state decisions
|
||||||
|
final grantsAsync = ref.watch(evmGrantsProvider);
|
||||||
|
|
||||||
|
Future<void> refresh() async {
|
||||||
|
await Future.wait([
|
||||||
|
ref.read(evmGrantsProvider.notifier).refresh(),
|
||||||
|
ref.read(walletAccessListProvider.notifier).refresh(),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
void showMessage(String message) {
|
||||||
|
if (!context.mounted) return;
|
||||||
|
ScaffoldMessenger.of(context).showSnackBar(
|
||||||
|
SnackBar(content: Text(message), behavior: SnackBarBehavior.floating),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> safeRefresh() async {
|
||||||
|
try {
|
||||||
|
await refresh();
|
||||||
|
} catch (e) {
|
||||||
|
showMessage(_formatError(e));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
final grantsState = grantsAsync.asData?.value;
|
||||||
|
final grants = grantsState?.grants;
|
||||||
|
|
||||||
|
final content = switch (grantsAsync) {
|
||||||
|
AsyncLoading() when grantsState == null => const _StatePanel(
|
||||||
|
icon: Icons.hourglass_top,
|
||||||
|
title: 'Loading grants',
|
||||||
|
body: 'Pulling grant registry from Arbiter.',
|
||||||
|
busy: true,
|
||||||
|
),
|
||||||
|
AsyncError(:final error) => _StatePanel(
|
||||||
|
icon: Icons.sync_problem,
|
||||||
|
title: 'Grant registry unavailable',
|
||||||
|
body: _formatError(error),
|
||||||
|
actionLabel: 'Retry',
|
||||||
|
onAction: safeRefresh,
|
||||||
|
),
|
||||||
|
AsyncData(:final value) when value == null => _StatePanel(
|
||||||
|
icon: Icons.portable_wifi_off,
|
||||||
|
title: 'No active server connection',
|
||||||
|
body: 'Reconnect to Arbiter to list EVM grants.',
|
||||||
|
actionLabel: 'Refresh',
|
||||||
|
onAction: safeRefresh,
|
||||||
|
),
|
||||||
|
_ when grants != null && grants.isEmpty => _StatePanel(
|
||||||
|
icon: Icons.policy_outlined,
|
||||||
|
title: 'No grants yet',
|
||||||
|
body: 'Create a grant to allow SDK clients to sign transactions.',
|
||||||
|
actionLabel: 'Create grant',
|
||||||
|
onAction: () => context.router.push(const CreateEvmGrantRoute()),
|
||||||
|
),
|
||||||
|
_ => _GrantList(grants: grants ?? const []),
|
||||||
|
};
|
||||||
|
|
||||||
|
return Scaffold(
|
||||||
|
body: SafeArea(
|
||||||
|
child: RefreshIndicator.adaptive(
|
||||||
|
color: Palette.ink,
|
||||||
|
backgroundColor: Colors.white,
|
||||||
|
onRefresh: safeRefresh,
|
||||||
|
child: ListView(
|
||||||
|
physics: const BouncingScrollPhysics(
|
||||||
|
parent: AlwaysScrollableScrollPhysics(),
|
||||||
|
),
|
||||||
|
padding: EdgeInsets.fromLTRB(2.4.w, 2.4.h, 2.4.w, 3.2.h),
|
||||||
|
children: [
|
||||||
|
PageHeader(
|
||||||
|
title: 'EVM Grants',
|
||||||
|
isBusy: grantsAsync.isLoading,
|
||||||
|
actions: [
|
||||||
|
FilledButton.icon(
|
||||||
|
onPressed: () =>
|
||||||
|
context.router.push(const CreateEvmGrantRoute()),
|
||||||
|
icon: const Icon(Icons.add_rounded),
|
||||||
|
label: const Text('Create grant'),
|
||||||
|
),
|
||||||
|
SizedBox(width: 1.w),
|
||||||
|
OutlinedButton.icon(
|
||||||
|
onPressed: safeRefresh,
|
||||||
|
style: OutlinedButton.styleFrom(
|
||||||
|
foregroundColor: Palette.ink,
|
||||||
|
side: BorderSide(color: Palette.line),
|
||||||
|
padding: EdgeInsets.symmetric(
|
||||||
|
horizontal: 1.4.w,
|
||||||
|
vertical: 1.2.h,
|
||||||
|
),
|
||||||
|
shape: RoundedRectangleBorder(
|
||||||
|
borderRadius: BorderRadius.circular(14),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
icon: const Icon(Icons.refresh, size: 18),
|
||||||
|
label: const Text('Refresh'),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
SizedBox(height: 1.8.h),
|
||||||
|
content,
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
- [ ] **Step 2: Verify**
|
||||||
|
|
||||||
|
```sh
|
||||||
|
cd useragent && flutter analyze lib/screens/dashboard/evm/grants/
|
||||||
|
```
|
||||||
|
|
||||||
|
Expected: no issues.
|
||||||
|
|
||||||
|
- [ ] **Step 3: Commit**
|
||||||
|
|
||||||
|
```sh
|
||||||
|
jj describe -m "feat(grants): add EvmGrantsScreen"
|
||||||
|
jj new
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Task 6: Wire router and dashboard tab
|
||||||
|
|
||||||
|
**Files:**
|
||||||
|
- Modify: `useragent/lib/router.dart`
|
||||||
|
- Modify: `useragent/lib/screens/dashboard.dart`
|
||||||
|
- Regenerated: `useragent/lib/router.gr.dart`
|
||||||
|
|
||||||
|
- [ ] **Step 1: Add route to `router.dart`**
|
||||||
|
|
||||||
|
Replace the contents of `useragent/lib/router.dart` with:
|
||||||
|
|
||||||
|
```dart
|
||||||
|
import 'package:auto_route/auto_route.dart';
|
||||||
|
|
||||||
|
import 'router.gr.dart';
|
||||||
|
|
||||||
|
@AutoRouterConfig(generateForDir: ['lib/screens'])
|
||||||
|
class Router extends RootStackRouter {
|
||||||
|
@override
|
||||||
|
List<AutoRoute> get routes => [
|
||||||
|
AutoRoute(page: Bootstrap.page, path: '/bootstrap', initial: true),
|
||||||
|
AutoRoute(page: ServerInfoSetupRoute.page, path: '/server-info'),
|
||||||
|
AutoRoute(page: ServerConnectionRoute.page, path: '/server-connection'),
|
||||||
|
AutoRoute(page: VaultSetupRoute.page, path: '/vault'),
|
||||||
|
AutoRoute(page: ClientDetailsRoute.page, path: '/clients/:clientId'),
|
||||||
|
AutoRoute(page: CreateEvmGrantRoute.page, path: '/evm-grants/create'),
|
||||||
|
|
||||||
|
AutoRoute(
|
||||||
|
page: DashboardRouter.page,
|
||||||
|
path: '/dashboard',
|
||||||
|
children: [
|
||||||
|
AutoRoute(page: EvmRoute.page, path: 'evm'),
|
||||||
|
AutoRoute(page: ClientsRoute.page, path: 'clients'),
|
||||||
|
AutoRoute(page: EvmGrantsRoute.page, path: 'grants'),
|
||||||
|
AutoRoute(page: AboutRoute.page, path: 'about'),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
- [ ] **Step 2: Update `dashboard.dart`**
|
||||||
|
|
||||||
|
In `useragent/lib/screens/dashboard.dart`, replace the `routes` constant:
|
||||||
|
|
||||||
|
```dart
|
||||||
|
final routes = [
|
||||||
|
const EvmRoute(),
|
||||||
|
const ClientsRoute(),
|
||||||
|
const EvmGrantsRoute(),
|
||||||
|
const AboutRoute(),
|
||||||
|
];
|
||||||
|
```
|
||||||
|
|
||||||
|
And replace the `destinations` list inside `AdaptiveScaffold`:
|
||||||
|
|
||||||
|
```dart
|
||||||
|
destinations: const [
|
||||||
|
NavigationDestination(
|
||||||
|
icon: Icon(Icons.account_balance_wallet_outlined),
|
||||||
|
selectedIcon: Icon(Icons.account_balance_wallet),
|
||||||
|
label: 'Wallets',
|
||||||
|
),
|
||||||
|
NavigationDestination(
|
||||||
|
icon: Icon(Icons.devices_other_outlined),
|
||||||
|
selectedIcon: Icon(Icons.devices_other),
|
||||||
|
label: 'Clients',
|
||||||
|
),
|
||||||
|
NavigationDestination(
|
||||||
|
icon: Icon(Icons.policy_outlined),
|
||||||
|
selectedIcon: Icon(Icons.policy),
|
||||||
|
label: 'Grants',
|
||||||
|
),
|
||||||
|
NavigationDestination(
|
||||||
|
icon: Icon(Icons.info_outline),
|
||||||
|
selectedIcon: Icon(Icons.info),
|
||||||
|
label: 'About',
|
||||||
|
),
|
||||||
|
],
|
||||||
|
```
|
||||||
|
|
||||||
|
- [ ] **Step 3: Regenerate router**
|
||||||
|
|
||||||
|
```sh
|
||||||
|
cd useragent && dart run build_runner build --delete-conflicting-outputs
|
||||||
|
```
|
||||||
|
|
||||||
|
Expected: `lib/router.gr.dart` updated, `EvmGrantsRoute` now available, no errors.
|
||||||
|
|
||||||
|
- [ ] **Step 4: Full project verify**
|
||||||
|
|
||||||
|
```sh
|
||||||
|
cd useragent && flutter analyze
|
||||||
|
```
|
||||||
|
|
||||||
|
Expected: no issues.
|
||||||
|
|
||||||
|
- [ ] **Step 5: Commit**
|
||||||
|
|
||||||
|
```sh
|
||||||
|
jj describe -m "feat(nav): add Grants dashboard tab"
|
||||||
|
jj new
|
||||||
|
```
|
||||||
170
docs/superpowers/specs/2026-03-28-grant-grid-view-design.md
Normal file
170
docs/superpowers/specs/2026-03-28-grant-grid-view-design.md
Normal file
@@ -0,0 +1,170 @@
|
|||||||
|
# Grant Grid View — Design Spec
|
||||||
|
|
||||||
|
**Date:** 2026-03-28
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
Add a "Grants" dashboard tab to the Flutter user-agent app that displays all EVM grants as a card-based grid. Each card shows a compact summary (type, chain, wallet address, client name) with a revoke action. The tab integrates into the existing `AdaptiveScaffold` navigation alongside Wallets, Clients, and About.
|
||||||
|
|
||||||
|
## Scope
|
||||||
|
|
||||||
|
- New `walletAccessListProvider` for fetching wallet access entries with their DB row IDs
|
||||||
|
- New `EvmGrantsScreen` as a dashboard tab
|
||||||
|
- Grant card widget with enriched display (type, chain, wallet, client)
|
||||||
|
- Revoke action wired to existing `executeRevokeEvmGrant` mutation
|
||||||
|
- Dashboard tab bar and router updated
|
||||||
|
- New token-transfer accent color added to `Palette`
|
||||||
|
|
||||||
|
**Out of scope:** Fixing grant creation (separate task).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Data Layer
|
||||||
|
|
||||||
|
### `walletAccessListProvider`
|
||||||
|
|
||||||
|
**File:** `useragent/lib/providers/sdk_clients/wallet_access_list.dart`
|
||||||
|
|
||||||
|
- `@riverpod` class, watches `connectionManagerProvider.future`
|
||||||
|
- Returns `List<SdkClientWalletAccess>?` (null when not connected)
|
||||||
|
- Each entry: `.id` (wallet_access_id), `.access.walletId`, `.access.sdkClientId`
|
||||||
|
- Exposes a `refresh()` method following the same pattern as `EvmGrants.refresh()`
|
||||||
|
|
||||||
|
### Enrichment at render time (Approach A)
|
||||||
|
|
||||||
|
The `EvmGrantsScreen` watches four providers:
|
||||||
|
1. `evmGrantsProvider` — the grant list
|
||||||
|
2. `walletAccessListProvider` — to resolve wallet_access_id → (wallet_id, sdk_client_id)
|
||||||
|
3. `evmProvider` — to resolve wallet_id → wallet address
|
||||||
|
4. `sdkClientsProvider` — to resolve sdk_client_id → client name
|
||||||
|
|
||||||
|
All lookups are in-memory Maps built inside the build method; no extra model class needed.
|
||||||
|
|
||||||
|
Fallbacks:
|
||||||
|
- Wallet address not found → `"Access #N"` where N is the wallet_access_id
|
||||||
|
- Client name not found → `"Client #N"` where N is the sdk_client_id
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Route Structure
|
||||||
|
|
||||||
|
```
|
||||||
|
/dashboard
|
||||||
|
/evm ← existing (Wallets tab)
|
||||||
|
/clients ← existing (Clients tab)
|
||||||
|
/grants ← NEW (Grants tab)
|
||||||
|
/about ← existing
|
||||||
|
|
||||||
|
/evm-grants/create ← existing push route (unchanged)
|
||||||
|
```
|
||||||
|
|
||||||
|
### Changes to `router.dart`
|
||||||
|
|
||||||
|
Add inside dashboard children:
|
||||||
|
```dart
|
||||||
|
AutoRoute(page: EvmGrantsRoute.page, path: 'grants'),
|
||||||
|
```
|
||||||
|
|
||||||
|
### Changes to `dashboard.dart`
|
||||||
|
|
||||||
|
Add to `routes` list:
|
||||||
|
```dart
|
||||||
|
const EvmGrantsRoute()
|
||||||
|
```
|
||||||
|
|
||||||
|
Add `NavigationDestination`:
|
||||||
|
```dart
|
||||||
|
NavigationDestination(
|
||||||
|
icon: Icon(Icons.policy_outlined),
|
||||||
|
selectedIcon: Icon(Icons.policy),
|
||||||
|
label: 'Grants',
|
||||||
|
),
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Screen: `EvmGrantsScreen`
|
||||||
|
|
||||||
|
**File:** `useragent/lib/screens/dashboard/evm/grants/grants.dart`
|
||||||
|
|
||||||
|
```
|
||||||
|
Scaffold
|
||||||
|
└─ SafeArea
|
||||||
|
└─ RefreshIndicator.adaptive (refreshes evmGrantsProvider + walletAccessListProvider)
|
||||||
|
└─ ListView (BouncingScrollPhysics + AlwaysScrollableScrollPhysics)
|
||||||
|
├─ PageHeader
|
||||||
|
│ title: 'EVM Grants'
|
||||||
|
│ isBusy: evmGrantsProvider.isLoading
|
||||||
|
│ actions: [CreateGrantButton, RefreshButton]
|
||||||
|
├─ SizedBox(height: 1.8.h)
|
||||||
|
└─ <content>
|
||||||
|
```
|
||||||
|
|
||||||
|
### State handling
|
||||||
|
|
||||||
|
Matches the pattern from `EvmScreen` and `ClientsScreen`:
|
||||||
|
|
||||||
|
| State | Display |
|
||||||
|
|---|---|
|
||||||
|
| Loading (no data yet) | `_StatePanel` with spinner, "Loading grants" |
|
||||||
|
| Error | `_StatePanel` with coral icon, error message, Retry button |
|
||||||
|
| No connection | `_StatePanel`, "No active server connection" |
|
||||||
|
| Empty list | `_StatePanel`, "No grants yet", with Create Grant shortcut |
|
||||||
|
| Data | Column of `_GrantCard` widgets |
|
||||||
|
|
||||||
|
### Header actions
|
||||||
|
|
||||||
|
**CreateGrantButton:** `FilledButton.icon` with `Icons.add_rounded`, pushes `CreateEvmGrantRoute()` via `context.router.push(...)`.
|
||||||
|
|
||||||
|
**RefreshButton:** `OutlinedButton.icon` with `Icons.refresh`, calls `ref.read(evmGrantsProvider.notifier).refresh()`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Grant Card: `_GrantCard`
|
||||||
|
|
||||||
|
**Layout:**
|
||||||
|
|
||||||
|
```
|
||||||
|
Container (rounded 24, Palette.cream bg, Palette.line border)
|
||||||
|
└─ IntrinsicHeight > Row
|
||||||
|
├─ Accent strip (0.8.w wide, full height, rounded left)
|
||||||
|
└─ Padding > Column
|
||||||
|
├─ Row 1: TypeBadge + ChainChip + Spacer + RevokeButton
|
||||||
|
└─ Row 2: WalletText + "·" + ClientText
|
||||||
|
```
|
||||||
|
|
||||||
|
**Accent color by grant type:**
|
||||||
|
- Ether transfer → `Palette.coral`
|
||||||
|
- Token transfer → `Palette.token` (new entry in `Palette` — indigo, e.g. `Color(0xFF5C6BC0)`)
|
||||||
|
|
||||||
|
**TypeBadge:** Small pill container with accent color background at 15% opacity, accent-colored text. Label: `'Ether'` or `'Token'`.
|
||||||
|
|
||||||
|
**ChainChip:** Small container: `'Chain ${grant.shared.chainId}'`, muted ink color.
|
||||||
|
|
||||||
|
**WalletText:** Short hex address (`0xabc...def`) from wallet lookup, `bodySmall`, monospace font family.
|
||||||
|
|
||||||
|
**ClientText:** Client name from `sdkClientsProvider` lookup, or fallback string. `bodySmall`, muted ink.
|
||||||
|
|
||||||
|
**RevokeButton:**
|
||||||
|
- `OutlinedButton` with `Icons.block_rounded` icon, label `'Revoke'`
|
||||||
|
- `foregroundColor: Palette.coral`, `side: BorderSide(color: Palette.coral.withValues(alpha: 0.4))`
|
||||||
|
- Disabled (replaced with `CircularProgressIndicator`) while `revokeEvmGrantMutation` is pending — note: this is a single global mutation, so all revoke buttons disable while any revoke is in flight
|
||||||
|
- On press: calls `executeRevokeEvmGrant(ref, grantId: grant.id)`; shows `SnackBar` on error
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Adaptive Sizing
|
||||||
|
|
||||||
|
All sizing uses `sizer` units (`1.h`, `1.w`, etc.). No hardcoded pixel values.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Files to Create / Modify
|
||||||
|
|
||||||
|
| File | Action |
|
||||||
|
|---|---|
|
||||||
|
| `lib/theme/palette.dart` | Modify — add `Palette.token` color |
|
||||||
|
| `lib/providers/sdk_clients/wallet_access_list.dart` | Create |
|
||||||
|
| `lib/screens/dashboard/evm/grants/grants.dart` | Create |
|
||||||
|
| `lib/router.dart` | Modify — add grants route to dashboard children |
|
||||||
|
| `lib/screens/dashboard.dart` | Modify — add tab to routes list and NavigationDestinations |
|
||||||
@@ -14,9 +14,9 @@ ast-grep = "0.42.0"
|
|||||||
"cargo:cargo-edit" = "0.13.9"
|
"cargo:cargo-edit" = "0.13.9"
|
||||||
|
|
||||||
[tasks.codegen]
|
[tasks.codegen]
|
||||||
sources = ['protobufs/*.proto', 'protobufs/**/*.proto']
|
sources = ['protobufs/*.proto']
|
||||||
outputs = ['useragent/lib/proto/**']
|
outputs = ['useragent/lib/proto/*']
|
||||||
run = '''
|
run = '''
|
||||||
dart pub global activate protoc_plugin && \
|
dart pub global activate protoc_plugin && \
|
||||||
protoc --dart_out=grpc:useragent/lib/proto --proto_path=protobufs/ $(find protobufs -name '*.proto' | sort)
|
protoc --dart_out=grpc:useragent/lib/proto --proto_path=protobufs/ protobufs/*.proto
|
||||||
'''
|
'''
|
||||||
|
|||||||
@@ -2,24 +2,63 @@ syntax = "proto3";
|
|||||||
|
|
||||||
package arbiter.client;
|
package arbiter.client;
|
||||||
|
|
||||||
import "client/auth.proto";
|
import "evm.proto";
|
||||||
import "client/evm.proto";
|
import "google/protobuf/empty.proto";
|
||||||
import "client/vault.proto";
|
|
||||||
|
message ClientInfo {
|
||||||
|
string name = 1;
|
||||||
|
optional string description = 2;
|
||||||
|
optional string version = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
message AuthChallengeRequest {
|
||||||
|
bytes pubkey = 1;
|
||||||
|
ClientInfo client_info = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message AuthChallenge {
|
||||||
|
bytes pubkey = 1;
|
||||||
|
int32 nonce = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message AuthChallengeSolution {
|
||||||
|
bytes signature = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
enum AuthResult {
|
||||||
|
AUTH_RESULT_UNSPECIFIED = 0;
|
||||||
|
AUTH_RESULT_SUCCESS = 1;
|
||||||
|
AUTH_RESULT_INVALID_KEY = 2;
|
||||||
|
AUTH_RESULT_INVALID_SIGNATURE = 3;
|
||||||
|
AUTH_RESULT_APPROVAL_DENIED = 4;
|
||||||
|
AUTH_RESULT_NO_USER_AGENTS_ONLINE = 5;
|
||||||
|
AUTH_RESULT_INTERNAL = 6;
|
||||||
|
}
|
||||||
|
|
||||||
|
enum VaultState {
|
||||||
|
VAULT_STATE_UNSPECIFIED = 0;
|
||||||
|
VAULT_STATE_UNBOOTSTRAPPED = 1;
|
||||||
|
VAULT_STATE_SEALED = 2;
|
||||||
|
VAULT_STATE_UNSEALED = 3;
|
||||||
|
VAULT_STATE_ERROR = 4;
|
||||||
|
}
|
||||||
|
|
||||||
message ClientRequest {
|
message ClientRequest {
|
||||||
int32 request_id = 4;
|
int32 request_id = 4;
|
||||||
oneof payload {
|
oneof payload {
|
||||||
auth.Request auth = 1;
|
AuthChallengeRequest auth_challenge_request = 1;
|
||||||
vault.Request vault = 2;
|
AuthChallengeSolution auth_challenge_solution = 2;
|
||||||
evm.Request evm = 3;
|
google.protobuf.Empty query_vault_state = 3;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
message ClientResponse {
|
message ClientResponse {
|
||||||
optional int32 request_id = 7;
|
optional int32 request_id = 7;
|
||||||
oneof payload {
|
oneof payload {
|
||||||
auth.Response auth = 1;
|
AuthChallenge auth_challenge = 1;
|
||||||
vault.Response vault = 2;
|
AuthResult auth_result = 2;
|
||||||
evm.Response evm = 3;
|
arbiter.evm.EvmSignTransactionResponse evm_sign_transaction = 3;
|
||||||
|
arbiter.evm.EvmAnalyzeTransactionResponse evm_analyze_transaction = 4;
|
||||||
|
VaultState vault_state = 6;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,43 +0,0 @@
|
|||||||
syntax = "proto3";
|
|
||||||
|
|
||||||
package arbiter.client.auth;
|
|
||||||
|
|
||||||
import "shared/client.proto";
|
|
||||||
|
|
||||||
message AuthChallengeRequest {
|
|
||||||
bytes pubkey = 1;
|
|
||||||
arbiter.shared.ClientInfo client_info = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
message AuthChallenge {
|
|
||||||
bytes pubkey = 1;
|
|
||||||
int32 nonce = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
message AuthChallengeSolution {
|
|
||||||
bytes signature = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
enum AuthResult {
|
|
||||||
AUTH_RESULT_UNSPECIFIED = 0;
|
|
||||||
AUTH_RESULT_SUCCESS = 1;
|
|
||||||
AUTH_RESULT_INVALID_KEY = 2;
|
|
||||||
AUTH_RESULT_INVALID_SIGNATURE = 3;
|
|
||||||
AUTH_RESULT_APPROVAL_DENIED = 4;
|
|
||||||
AUTH_RESULT_NO_USER_AGENTS_ONLINE = 5;
|
|
||||||
AUTH_RESULT_INTERNAL = 6;
|
|
||||||
}
|
|
||||||
|
|
||||||
message Request {
|
|
||||||
oneof payload {
|
|
||||||
AuthChallengeRequest challenge_request = 1;
|
|
||||||
AuthChallengeSolution challenge_solution = 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
message Response {
|
|
||||||
oneof payload {
|
|
||||||
AuthChallenge challenge = 1;
|
|
||||||
AuthResult result = 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
syntax = "proto3";
|
|
||||||
|
|
||||||
package arbiter.client.evm;
|
|
||||||
|
|
||||||
import "evm.proto";
|
|
||||||
|
|
||||||
message Request {
|
|
||||||
oneof payload {
|
|
||||||
arbiter.evm.EvmSignTransactionRequest sign_transaction = 1;
|
|
||||||
arbiter.evm.EvmAnalyzeTransactionRequest analyze_transaction = 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
message Response {
|
|
||||||
oneof payload {
|
|
||||||
arbiter.evm.EvmSignTransactionResponse sign_transaction = 1;
|
|
||||||
arbiter.evm.EvmAnalyzeTransactionResponse analyze_transaction = 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
syntax = "proto3";
|
|
||||||
|
|
||||||
package arbiter.client.vault;
|
|
||||||
|
|
||||||
import "google/protobuf/empty.proto";
|
|
||||||
import "shared/vault.proto";
|
|
||||||
|
|
||||||
message Request {
|
|
||||||
oneof payload {
|
|
||||||
google.protobuf.Empty query_state = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
message Response {
|
|
||||||
oneof payload {
|
|
||||||
arbiter.shared.VaultState state = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -4,7 +4,6 @@ package arbiter.evm;
|
|||||||
|
|
||||||
import "google/protobuf/empty.proto";
|
import "google/protobuf/empty.proto";
|
||||||
import "google/protobuf/timestamp.proto";
|
import "google/protobuf/timestamp.proto";
|
||||||
import "shared/evm.proto";
|
|
||||||
|
|
||||||
enum EvmError {
|
enum EvmError {
|
||||||
EVM_ERROR_UNSPECIFIED = 0;
|
EVM_ERROR_UNSPECIFIED = 0;
|
||||||
@@ -75,6 +74,70 @@ message SpecificGrant {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
message EtherTransferMeaning {
|
||||||
|
bytes to = 1; // 20-byte Ethereum address
|
||||||
|
bytes value = 2; // U256 as big-endian bytes
|
||||||
|
}
|
||||||
|
|
||||||
|
message TokenInfo {
|
||||||
|
string symbol = 1;
|
||||||
|
bytes address = 2; // 20-byte Ethereum address
|
||||||
|
uint64 chain_id = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Mirror of token_transfers::Meaning
|
||||||
|
message TokenTransferMeaning {
|
||||||
|
TokenInfo token = 1;
|
||||||
|
bytes to = 2; // 20-byte Ethereum address
|
||||||
|
bytes value = 3; // U256 as big-endian bytes
|
||||||
|
}
|
||||||
|
|
||||||
|
// Mirror of policies::SpecificMeaning
|
||||||
|
message SpecificMeaning {
|
||||||
|
oneof meaning {
|
||||||
|
EtherTransferMeaning ether_transfer = 1;
|
||||||
|
TokenTransferMeaning token_transfer = 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// --- Eval error types ---
|
||||||
|
message GasLimitExceededViolation {
|
||||||
|
optional bytes max_gas_fee_per_gas = 1; // U256 as big-endian bytes
|
||||||
|
optional bytes max_priority_fee_per_gas = 2; // U256 as big-endian bytes
|
||||||
|
}
|
||||||
|
|
||||||
|
message EvalViolation {
|
||||||
|
oneof kind {
|
||||||
|
bytes invalid_target = 1; // 20-byte Ethereum address
|
||||||
|
GasLimitExceededViolation gas_limit_exceeded = 2;
|
||||||
|
google.protobuf.Empty rate_limit_exceeded = 3;
|
||||||
|
google.protobuf.Empty volumetric_limit_exceeded = 4;
|
||||||
|
google.protobuf.Empty invalid_time = 5;
|
||||||
|
google.protobuf.Empty invalid_transaction_type = 6;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Transaction was classified but no grant covers it
|
||||||
|
message NoMatchingGrantError {
|
||||||
|
SpecificMeaning meaning = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Transaction was classified and a grant was found, but constraints were violated
|
||||||
|
message PolicyViolationsError {
|
||||||
|
SpecificMeaning meaning = 1;
|
||||||
|
repeated EvalViolation violations = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
// top-level error returned when transaction evaluation fails
|
||||||
|
message TransactionEvalError {
|
||||||
|
oneof kind {
|
||||||
|
google.protobuf.Empty contract_creation_not_supported = 1;
|
||||||
|
google.protobuf.Empty unsupported_transaction_type = 2;
|
||||||
|
NoMatchingGrantError no_matching_grant = 3;
|
||||||
|
PolicyViolationsError policy_violations = 4;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// --- UserAgent grant management ---
|
// --- UserAgent grant management ---
|
||||||
message EvmGrantCreateRequest {
|
message EvmGrantCreateRequest {
|
||||||
SharedSettings shared = 1;
|
SharedSettings shared = 1;
|
||||||
@@ -134,7 +197,7 @@ message EvmSignTransactionRequest {
|
|||||||
message EvmSignTransactionResponse {
|
message EvmSignTransactionResponse {
|
||||||
oneof result {
|
oneof result {
|
||||||
bytes signature = 1; // 65-byte signature: r[32] || s[32] || v[1]
|
bytes signature = 1; // 65-byte signature: r[32] || s[32] || v[1]
|
||||||
arbiter.shared.evm.TransactionEvalError eval_error = 2;
|
TransactionEvalError eval_error = 2;
|
||||||
EvmError error = 3;
|
EvmError error = 3;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -146,8 +209,8 @@ message EvmAnalyzeTransactionRequest {
|
|||||||
|
|
||||||
message EvmAnalyzeTransactionResponse {
|
message EvmAnalyzeTransactionResponse {
|
||||||
oneof result {
|
oneof result {
|
||||||
arbiter.shared.evm.SpecificMeaning meaning = 1;
|
SpecificMeaning meaning = 1;
|
||||||
arbiter.shared.evm.TransactionEvalError eval_error = 2;
|
TransactionEvalError eval_error = 2;
|
||||||
EvmError error = 3;
|
EvmError error = 3;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +0,0 @@
|
|||||||
syntax = "proto3";
|
|
||||||
|
|
||||||
package arbiter.shared;
|
|
||||||
|
|
||||||
message ClientInfo {
|
|
||||||
string name = 1;
|
|
||||||
optional string description = 2;
|
|
||||||
optional string version = 3;
|
|
||||||
}
|
|
||||||
@@ -1,68 +0,0 @@
|
|||||||
syntax = "proto3";
|
|
||||||
|
|
||||||
package arbiter.shared.evm;
|
|
||||||
|
|
||||||
import "google/protobuf/empty.proto";
|
|
||||||
|
|
||||||
message EtherTransferMeaning {
|
|
||||||
bytes to = 1; // 20-byte Ethereum address
|
|
||||||
bytes value = 2; // U256 as big-endian bytes
|
|
||||||
}
|
|
||||||
|
|
||||||
message TokenInfo {
|
|
||||||
string symbol = 1;
|
|
||||||
bytes address = 2; // 20-byte Ethereum address
|
|
||||||
uint64 chain_id = 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Mirror of token_transfers::Meaning
|
|
||||||
message TokenTransferMeaning {
|
|
||||||
TokenInfo token = 1;
|
|
||||||
bytes to = 2; // 20-byte Ethereum address
|
|
||||||
bytes value = 3; // U256 as big-endian bytes
|
|
||||||
}
|
|
||||||
|
|
||||||
// Mirror of policies::SpecificMeaning
|
|
||||||
message SpecificMeaning {
|
|
||||||
oneof meaning {
|
|
||||||
EtherTransferMeaning ether_transfer = 1;
|
|
||||||
TokenTransferMeaning token_transfer = 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
message GasLimitExceededViolation {
|
|
||||||
optional bytes max_gas_fee_per_gas = 1; // U256 as big-endian bytes
|
|
||||||
optional bytes max_priority_fee_per_gas = 2; // U256 as big-endian bytes
|
|
||||||
}
|
|
||||||
|
|
||||||
message EvalViolation {
|
|
||||||
oneof kind {
|
|
||||||
bytes invalid_target = 1; // 20-byte Ethereum address
|
|
||||||
GasLimitExceededViolation gas_limit_exceeded = 2;
|
|
||||||
google.protobuf.Empty rate_limit_exceeded = 3;
|
|
||||||
google.protobuf.Empty volumetric_limit_exceeded = 4;
|
|
||||||
google.protobuf.Empty invalid_time = 5;
|
|
||||||
google.protobuf.Empty invalid_transaction_type = 6;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Transaction was classified but no grant covers it
|
|
||||||
message NoMatchingGrantError {
|
|
||||||
SpecificMeaning meaning = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Transaction was classified and a grant was found, but constraints were violated
|
|
||||||
message PolicyViolationsError {
|
|
||||||
SpecificMeaning meaning = 1;
|
|
||||||
repeated EvalViolation violations = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
// top-level error returned when transaction evaluation fails
|
|
||||||
message TransactionEvalError {
|
|
||||||
oneof kind {
|
|
||||||
google.protobuf.Empty contract_creation_not_supported = 1;
|
|
||||||
google.protobuf.Empty unsupported_transaction_type = 2;
|
|
||||||
NoMatchingGrantError no_matching_grant = 3;
|
|
||||||
PolicyViolationsError policy_violations = 4;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
syntax = "proto3";
|
|
||||||
|
|
||||||
package arbiter.shared;
|
|
||||||
|
|
||||||
enum VaultState {
|
|
||||||
VAULT_STATE_UNSPECIFIED = 0;
|
|
||||||
VAULT_STATE_UNBOOTSTRAPPED = 1;
|
|
||||||
VAULT_STATE_SEALED = 2;
|
|
||||||
VAULT_STATE_UNSEALED = 3;
|
|
||||||
VAULT_STATE_ERROR = 4;
|
|
||||||
}
|
|
||||||
@@ -2,27 +2,198 @@ syntax = "proto3";
|
|||||||
|
|
||||||
package arbiter.user_agent;
|
package arbiter.user_agent;
|
||||||
|
|
||||||
import "user_agent/auth.proto";
|
import "client.proto";
|
||||||
import "user_agent/evm.proto";
|
import "evm.proto";
|
||||||
import "user_agent/sdk_client.proto";
|
import "google/protobuf/empty.proto";
|
||||||
import "user_agent/vault/vault.proto";
|
|
||||||
|
enum KeyType {
|
||||||
|
KEY_TYPE_UNSPECIFIED = 0;
|
||||||
|
KEY_TYPE_ED25519 = 1;
|
||||||
|
KEY_TYPE_ECDSA_SECP256K1 = 2;
|
||||||
|
KEY_TYPE_RSA = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
// --- SDK client management ---
|
||||||
|
|
||||||
|
enum SdkClientError {
|
||||||
|
SDK_CLIENT_ERROR_UNSPECIFIED = 0;
|
||||||
|
SDK_CLIENT_ERROR_ALREADY_EXISTS = 1;
|
||||||
|
SDK_CLIENT_ERROR_NOT_FOUND = 2;
|
||||||
|
SDK_CLIENT_ERROR_HAS_RELATED_DATA = 3; // hard-delete blocked by FK (client has grants or transaction logs)
|
||||||
|
SDK_CLIENT_ERROR_INTERNAL = 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
message SdkClientRevokeRequest {
|
||||||
|
int32 client_id = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message SdkClientEntry {
|
||||||
|
int32 id = 1;
|
||||||
|
bytes pubkey = 2;
|
||||||
|
arbiter.client.ClientInfo info = 3;
|
||||||
|
int32 created_at = 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
message SdkClientList {
|
||||||
|
repeated SdkClientEntry clients = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message SdkClientRevokeResponse {
|
||||||
|
oneof result {
|
||||||
|
google.protobuf.Empty ok = 1;
|
||||||
|
SdkClientError error = 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
message SdkClientListResponse {
|
||||||
|
oneof result {
|
||||||
|
SdkClientList clients = 1;
|
||||||
|
SdkClientError error = 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
message AuthChallengeRequest {
|
||||||
|
bytes pubkey = 1;
|
||||||
|
optional string bootstrap_token = 2;
|
||||||
|
KeyType key_type = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
message AuthChallenge {
|
||||||
|
int32 nonce = 2;
|
||||||
|
reserved 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message AuthChallengeSolution {
|
||||||
|
bytes signature = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
enum AuthResult {
|
||||||
|
AUTH_RESULT_UNSPECIFIED = 0;
|
||||||
|
AUTH_RESULT_SUCCESS = 1;
|
||||||
|
AUTH_RESULT_INVALID_KEY = 2;
|
||||||
|
AUTH_RESULT_INVALID_SIGNATURE = 3;
|
||||||
|
AUTH_RESULT_BOOTSTRAP_REQUIRED = 4;
|
||||||
|
AUTH_RESULT_TOKEN_INVALID = 5;
|
||||||
|
AUTH_RESULT_INTERNAL = 6;
|
||||||
|
}
|
||||||
|
|
||||||
|
message UnsealStart {
|
||||||
|
bytes client_pubkey = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message UnsealStartResponse {
|
||||||
|
bytes server_pubkey = 1;
|
||||||
|
}
|
||||||
|
message UnsealEncryptedKey {
|
||||||
|
bytes nonce = 1;
|
||||||
|
bytes ciphertext = 2;
|
||||||
|
bytes associated_data = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
message BootstrapEncryptedKey {
|
||||||
|
bytes nonce = 1;
|
||||||
|
bytes ciphertext = 2;
|
||||||
|
bytes associated_data = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
enum UnsealResult {
|
||||||
|
UNSEAL_RESULT_UNSPECIFIED = 0;
|
||||||
|
UNSEAL_RESULT_SUCCESS = 1;
|
||||||
|
UNSEAL_RESULT_INVALID_KEY = 2;
|
||||||
|
UNSEAL_RESULT_UNBOOTSTRAPPED = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
enum BootstrapResult {
|
||||||
|
BOOTSTRAP_RESULT_UNSPECIFIED = 0;
|
||||||
|
BOOTSTRAP_RESULT_SUCCESS = 1;
|
||||||
|
BOOTSTRAP_RESULT_ALREADY_BOOTSTRAPPED = 2;
|
||||||
|
BOOTSTRAP_RESULT_INVALID_KEY = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
enum VaultState {
|
||||||
|
VAULT_STATE_UNSPECIFIED = 0;
|
||||||
|
VAULT_STATE_UNBOOTSTRAPPED = 1;
|
||||||
|
VAULT_STATE_SEALED = 2;
|
||||||
|
VAULT_STATE_UNSEALED = 3;
|
||||||
|
VAULT_STATE_ERROR = 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
message SdkClientConnectionRequest {
|
||||||
|
bytes pubkey = 1;
|
||||||
|
arbiter.client.ClientInfo info = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message SdkClientConnectionResponse {
|
||||||
|
bool approved = 1;
|
||||||
|
bytes pubkey = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message SdkClientConnectionCancel {
|
||||||
|
bytes pubkey = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message WalletAccess {
|
||||||
|
int32 wallet_id = 1;
|
||||||
|
int32 sdk_client_id = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message SdkClientWalletAccess {
|
||||||
|
int32 id = 1;
|
||||||
|
WalletAccess access = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message SdkClientGrantWalletAccess {
|
||||||
|
repeated WalletAccess accesses = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message SdkClientRevokeWalletAccess {
|
||||||
|
repeated int32 accesses = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message ListWalletAccessResponse {
|
||||||
|
repeated SdkClientWalletAccess accesses = 1;
|
||||||
|
}
|
||||||
|
|
||||||
message UserAgentRequest {
|
message UserAgentRequest {
|
||||||
int32 id = 16;
|
int32 id = 16;
|
||||||
oneof payload {
|
oneof payload {
|
||||||
auth.Request auth = 1;
|
AuthChallengeRequest auth_challenge_request = 1;
|
||||||
vault.Request vault = 2;
|
AuthChallengeSolution auth_challenge_solution = 2;
|
||||||
evm.Request evm = 3;
|
UnsealStart unseal_start = 3;
|
||||||
sdk_client.Request sdk_client = 4;
|
UnsealEncryptedKey unseal_encrypted_key = 4;
|
||||||
|
google.protobuf.Empty query_vault_state = 5;
|
||||||
|
google.protobuf.Empty evm_wallet_create = 6;
|
||||||
|
google.protobuf.Empty evm_wallet_list = 7;
|
||||||
|
arbiter.evm.EvmGrantCreateRequest evm_grant_create = 8;
|
||||||
|
arbiter.evm.EvmGrantDeleteRequest evm_grant_delete = 9;
|
||||||
|
arbiter.evm.EvmGrantListRequest evm_grant_list = 10;
|
||||||
|
SdkClientConnectionResponse sdk_client_connection_response = 11;
|
||||||
|
SdkClientRevokeRequest sdk_client_revoke = 12;
|
||||||
|
google.protobuf.Empty sdk_client_list = 13;
|
||||||
|
BootstrapEncryptedKey bootstrap_encrypted_key = 14;
|
||||||
|
SdkClientGrantWalletAccess grant_wallet_access = 15;
|
||||||
|
SdkClientRevokeWalletAccess revoke_wallet_access = 17;
|
||||||
|
google.protobuf.Empty list_wallet_access = 18;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
message UserAgentResponse {
|
message UserAgentResponse {
|
||||||
optional int32 id = 16;
|
optional int32 id = 16;
|
||||||
oneof payload {
|
oneof payload {
|
||||||
auth.Response auth = 1;
|
AuthChallenge auth_challenge = 1;
|
||||||
vault.Response vault = 2;
|
AuthResult auth_result = 2;
|
||||||
evm.Response evm = 3;
|
UnsealStartResponse unseal_start_response = 3;
|
||||||
sdk_client.Response sdk_client = 4;
|
UnsealResult unseal_result = 4;
|
||||||
|
VaultState vault_state = 5;
|
||||||
|
arbiter.evm.WalletCreateResponse evm_wallet_create = 6;
|
||||||
|
arbiter.evm.WalletListResponse evm_wallet_list = 7;
|
||||||
|
arbiter.evm.EvmGrantCreateResponse evm_grant_create = 8;
|
||||||
|
arbiter.evm.EvmGrantDeleteResponse evm_grant_delete = 9;
|
||||||
|
arbiter.evm.EvmGrantListResponse evm_grant_list = 10;
|
||||||
|
SdkClientConnectionRequest sdk_client_connection_request = 11;
|
||||||
|
SdkClientConnectionCancel sdk_client_connection_cancel = 12;
|
||||||
|
SdkClientRevokeResponse sdk_client_revoke_response = 13;
|
||||||
|
SdkClientListResponse sdk_client_list_response = 14;
|
||||||
|
BootstrapResult bootstrap_result = 15;
|
||||||
|
ListWalletAccessResponse list_wallet_access_response = 17;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,48 +0,0 @@
|
|||||||
syntax = "proto3";
|
|
||||||
|
|
||||||
package arbiter.user_agent.auth;
|
|
||||||
|
|
||||||
enum KeyType {
|
|
||||||
KEY_TYPE_UNSPECIFIED = 0;
|
|
||||||
KEY_TYPE_ED25519 = 1;
|
|
||||||
KEY_TYPE_ECDSA_SECP256K1 = 2;
|
|
||||||
KEY_TYPE_RSA = 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
message AuthChallengeRequest {
|
|
||||||
bytes pubkey = 1;
|
|
||||||
optional string bootstrap_token = 2;
|
|
||||||
KeyType key_type = 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
message AuthChallenge {
|
|
||||||
int32 nonce = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
message AuthChallengeSolution {
|
|
||||||
bytes signature = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
enum AuthResult {
|
|
||||||
AUTH_RESULT_UNSPECIFIED = 0;
|
|
||||||
AUTH_RESULT_SUCCESS = 1;
|
|
||||||
AUTH_RESULT_INVALID_KEY = 2;
|
|
||||||
AUTH_RESULT_INVALID_SIGNATURE = 3;
|
|
||||||
AUTH_RESULT_BOOTSTRAP_REQUIRED = 4;
|
|
||||||
AUTH_RESULT_TOKEN_INVALID = 5;
|
|
||||||
AUTH_RESULT_INTERNAL = 6;
|
|
||||||
}
|
|
||||||
|
|
||||||
message Request {
|
|
||||||
oneof payload {
|
|
||||||
AuthChallengeRequest challenge_request = 1;
|
|
||||||
AuthChallengeSolution challenge_solution = 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
message Response {
|
|
||||||
oneof payload {
|
|
||||||
AuthChallenge challenge = 1;
|
|
||||||
AuthResult result = 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,33 +0,0 @@
|
|||||||
syntax = "proto3";
|
|
||||||
|
|
||||||
package arbiter.user_agent.evm;
|
|
||||||
|
|
||||||
import "evm.proto";
|
|
||||||
import "google/protobuf/empty.proto";
|
|
||||||
|
|
||||||
message SignTransactionRequest {
|
|
||||||
int32 client_id = 1;
|
|
||||||
arbiter.evm.EvmSignTransactionRequest request = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
message Request {
|
|
||||||
oneof payload {
|
|
||||||
google.protobuf.Empty wallet_create = 1;
|
|
||||||
google.protobuf.Empty wallet_list = 2;
|
|
||||||
arbiter.evm.EvmGrantCreateRequest grant_create = 3;
|
|
||||||
arbiter.evm.EvmGrantDeleteRequest grant_delete = 4;
|
|
||||||
arbiter.evm.EvmGrantListRequest grant_list = 5;
|
|
||||||
SignTransactionRequest sign_transaction = 6;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
message Response {
|
|
||||||
oneof payload {
|
|
||||||
arbiter.evm.WalletCreateResponse wallet_create = 1;
|
|
||||||
arbiter.evm.WalletListResponse wallet_list = 2;
|
|
||||||
arbiter.evm.EvmGrantCreateResponse grant_create = 3;
|
|
||||||
arbiter.evm.EvmGrantDeleteResponse grant_delete = 4;
|
|
||||||
arbiter.evm.EvmGrantListResponse grant_list = 5;
|
|
||||||
arbiter.evm.EvmSignTransactionResponse sign_transaction = 6;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,100 +0,0 @@
|
|||||||
syntax = "proto3";
|
|
||||||
|
|
||||||
package arbiter.user_agent.sdk_client;
|
|
||||||
|
|
||||||
import "shared/client.proto";
|
|
||||||
import "google/protobuf/empty.proto";
|
|
||||||
|
|
||||||
enum Error {
|
|
||||||
ERROR_UNSPECIFIED = 0;
|
|
||||||
ERROR_ALREADY_EXISTS = 1;
|
|
||||||
ERROR_NOT_FOUND = 2;
|
|
||||||
ERROR_HAS_RELATED_DATA = 3; // hard-delete blocked by FK (client has grants or transaction logs)
|
|
||||||
ERROR_INTERNAL = 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
message RevokeRequest {
|
|
||||||
int32 client_id = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
message Entry {
|
|
||||||
int32 id = 1;
|
|
||||||
bytes pubkey = 2;
|
|
||||||
arbiter.shared.ClientInfo info = 3;
|
|
||||||
int32 created_at = 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
message List {
|
|
||||||
repeated Entry clients = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
message RevokeResponse {
|
|
||||||
oneof result {
|
|
||||||
google.protobuf.Empty ok = 1;
|
|
||||||
Error error = 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
message ListResponse {
|
|
||||||
oneof result {
|
|
||||||
List clients = 1;
|
|
||||||
Error error = 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
message ConnectionRequest {
|
|
||||||
bytes pubkey = 1;
|
|
||||||
arbiter.shared.ClientInfo info = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
message ConnectionResponse {
|
|
||||||
bool approved = 1;
|
|
||||||
bytes pubkey = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
message ConnectionCancel {
|
|
||||||
bytes pubkey = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
message WalletAccess {
|
|
||||||
int32 wallet_id = 1;
|
|
||||||
int32 sdk_client_id = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
message WalletAccessEntry {
|
|
||||||
int32 id = 1;
|
|
||||||
WalletAccess access = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
message GrantWalletAccess {
|
|
||||||
repeated WalletAccess accesses = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
message RevokeWalletAccess {
|
|
||||||
repeated int32 accesses = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
message ListWalletAccessResponse {
|
|
||||||
repeated WalletAccessEntry accesses = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
message Request {
|
|
||||||
oneof payload {
|
|
||||||
ConnectionResponse connection_response = 1;
|
|
||||||
RevokeRequest revoke = 2;
|
|
||||||
google.protobuf.Empty list = 3;
|
|
||||||
GrantWalletAccess grant_wallet_access = 4;
|
|
||||||
RevokeWalletAccess revoke_wallet_access = 5;
|
|
||||||
google.protobuf.Empty list_wallet_access = 6;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
message Response {
|
|
||||||
oneof payload {
|
|
||||||
ConnectionRequest connection_request = 1;
|
|
||||||
ConnectionCancel connection_cancel = 2;
|
|
||||||
RevokeResponse revoke = 3;
|
|
||||||
ListResponse list = 4;
|
|
||||||
ListWalletAccessResponse list_wallet_access = 5;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
syntax = "proto3";
|
|
||||||
|
|
||||||
package arbiter.user_agent.vault.bootstrap;
|
|
||||||
|
|
||||||
message BootstrapEncryptedKey {
|
|
||||||
bytes nonce = 1;
|
|
||||||
bytes ciphertext = 2;
|
|
||||||
bytes associated_data = 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
enum BootstrapResult {
|
|
||||||
BOOTSTRAP_RESULT_UNSPECIFIED = 0;
|
|
||||||
BOOTSTRAP_RESULT_SUCCESS = 1;
|
|
||||||
BOOTSTRAP_RESULT_ALREADY_BOOTSTRAPPED = 2;
|
|
||||||
BOOTSTRAP_RESULT_INVALID_KEY = 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
message Request {
|
|
||||||
BootstrapEncryptedKey encrypted_key = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
message Response {
|
|
||||||
BootstrapResult result = 1;
|
|
||||||
}
|
|
||||||
@@ -1,37 +0,0 @@
|
|||||||
syntax = "proto3";
|
|
||||||
|
|
||||||
package arbiter.user_agent.vault.unseal;
|
|
||||||
|
|
||||||
message UnsealStart {
|
|
||||||
bytes client_pubkey = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
message UnsealStartResponse {
|
|
||||||
bytes server_pubkey = 1;
|
|
||||||
}
|
|
||||||
message UnsealEncryptedKey {
|
|
||||||
bytes nonce = 1;
|
|
||||||
bytes ciphertext = 2;
|
|
||||||
bytes associated_data = 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
enum UnsealResult {
|
|
||||||
UNSEAL_RESULT_UNSPECIFIED = 0;
|
|
||||||
UNSEAL_RESULT_SUCCESS = 1;
|
|
||||||
UNSEAL_RESULT_INVALID_KEY = 2;
|
|
||||||
UNSEAL_RESULT_UNBOOTSTRAPPED = 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
message Request {
|
|
||||||
oneof payload {
|
|
||||||
UnsealStart start = 1;
|
|
||||||
UnsealEncryptedKey encrypted_key = 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
message Response {
|
|
||||||
oneof payload {
|
|
||||||
UnsealStartResponse start = 1;
|
|
||||||
UnsealResult result = 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
syntax = "proto3";
|
|
||||||
|
|
||||||
package arbiter.user_agent.vault;
|
|
||||||
|
|
||||||
import "google/protobuf/empty.proto";
|
|
||||||
import "shared/vault.proto";
|
|
||||||
import "user_agent/vault/bootstrap.proto";
|
|
||||||
import "user_agent/vault/unseal.proto";
|
|
||||||
|
|
||||||
message Request {
|
|
||||||
oneof payload {
|
|
||||||
google.protobuf.Empty query_state = 1;
|
|
||||||
unseal.Request unseal = 2;
|
|
||||||
bootstrap.Request bootstrap = 3;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
message Response {
|
|
||||||
oneof payload {
|
|
||||||
arbiter.shared.VaultState state = 1;
|
|
||||||
unseal.Response unseal = 2;
|
|
||||||
bootstrap.Response bootstrap = 3;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
143
server/Cargo.lock
generated
143
server/Cargo.lock
generated
@@ -669,6 +669,56 @@ dependencies = [
|
|||||||
"libc",
|
"libc",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "anstream"
|
||||||
|
version = "1.0.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d"
|
||||||
|
dependencies = [
|
||||||
|
"anstyle",
|
||||||
|
"anstyle-parse",
|
||||||
|
"anstyle-query",
|
||||||
|
"anstyle-wincon",
|
||||||
|
"colorchoice",
|
||||||
|
"is_terminal_polyfill",
|
||||||
|
"utf8parse",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "anstyle"
|
||||||
|
version = "1.0.14"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "anstyle-parse"
|
||||||
|
version = "1.0.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e"
|
||||||
|
dependencies = [
|
||||||
|
"utf8parse",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "anstyle-query"
|
||||||
|
version = "1.1.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc"
|
||||||
|
dependencies = [
|
||||||
|
"windows-sys 0.61.2",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "anstyle-wincon"
|
||||||
|
version = "3.0.11"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d"
|
||||||
|
dependencies = [
|
||||||
|
"anstyle",
|
||||||
|
"once_cell_polyfill",
|
||||||
|
"windows-sys 0.61.2",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "anyhow"
|
name = "anyhow"
|
||||||
version = "1.0.102"
|
version = "1.0.102"
|
||||||
@@ -730,6 +780,7 @@ dependencies = [
|
|||||||
"async-trait",
|
"async-trait",
|
||||||
"chacha20poly1305",
|
"chacha20poly1305",
|
||||||
"chrono",
|
"chrono",
|
||||||
|
"clap",
|
||||||
"dashmap",
|
"dashmap",
|
||||||
"diesel",
|
"diesel",
|
||||||
"diesel-async",
|
"diesel-async",
|
||||||
@@ -761,6 +812,7 @@ dependencies = [
|
|||||||
"tonic",
|
"tonic",
|
||||||
"tracing",
|
"tracing",
|
||||||
"tracing-subscriber",
|
"tracing-subscriber",
|
||||||
|
"windows-service",
|
||||||
"x25519-dalek",
|
"x25519-dalek",
|
||||||
"zeroize",
|
"zeroize",
|
||||||
]
|
]
|
||||||
@@ -1433,6 +1485,46 @@ dependencies = [
|
|||||||
"zeroize",
|
"zeroize",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "clap"
|
||||||
|
version = "4.6.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "b193af5b67834b676abd72466a96c1024e6a6ad978a1f484bd90b85c94041351"
|
||||||
|
dependencies = [
|
||||||
|
"clap_builder",
|
||||||
|
"clap_derive",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "clap_builder"
|
||||||
|
version = "4.6.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f"
|
||||||
|
dependencies = [
|
||||||
|
"anstream",
|
||||||
|
"anstyle",
|
||||||
|
"clap_lex",
|
||||||
|
"strsim",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "clap_derive"
|
||||||
|
version = "4.6.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "1110bd8a634a1ab8cb04345d8d878267d57c3cf1b38d91b71af6686408bbca6a"
|
||||||
|
dependencies = [
|
||||||
|
"heck",
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn 2.0.117",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "clap_lex"
|
||||||
|
version = "1.1.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cmake"
|
name = "cmake"
|
||||||
version = "0.1.57"
|
version = "0.1.57"
|
||||||
@@ -1442,6 +1534,12 @@ dependencies = [
|
|||||||
"cc",
|
"cc",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "colorchoice"
|
||||||
|
version = "1.0.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "console"
|
name = "console"
|
||||||
version = "0.15.11"
|
version = "0.15.11"
|
||||||
@@ -2051,7 +2149,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
|
checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"libc",
|
"libc",
|
||||||
"windows-sys 0.52.0",
|
"windows-sys 0.61.2",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -2853,6 +2951,12 @@ version = "1.2.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "7655c9839580ee829dfacba1d1278c2b7883e50a277ff7541299489d6bdfdc45"
|
checksum = "7655c9839580ee829dfacba1d1278c2b7883e50a277ff7541299489d6bdfdc45"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "is_terminal_polyfill"
|
||||||
|
version = "1.70.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "itertools"
|
name = "itertools"
|
||||||
version = "0.10.5"
|
version = "0.10.5"
|
||||||
@@ -3186,7 +3290,7 @@ version = "0.50.3"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5"
|
checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"windows-sys 0.59.0",
|
"windows-sys 0.61.2",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -3320,6 +3424,12 @@ version = "1.21.4"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50"
|
checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "once_cell_polyfill"
|
||||||
|
version = "1.70.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "opaque-debug"
|
name = "opaque-debug"
|
||||||
version = "0.3.1"
|
version = "0.3.1"
|
||||||
@@ -4285,7 +4395,7 @@ dependencies = [
|
|||||||
"errno",
|
"errno",
|
||||||
"libc",
|
"libc",
|
||||||
"linux-raw-sys",
|
"linux-raw-sys",
|
||||||
"windows-sys 0.52.0",
|
"windows-sys 0.61.2",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -4701,7 +4811,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e"
|
checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"libc",
|
"libc",
|
||||||
"windows-sys 0.60.2",
|
"windows-sys 0.61.2",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -4895,7 +5005,7 @@ dependencies = [
|
|||||||
"getrandom 0.4.2",
|
"getrandom 0.4.2",
|
||||||
"once_cell",
|
"once_cell",
|
||||||
"rustix",
|
"rustix",
|
||||||
"windows-sys 0.52.0",
|
"windows-sys 0.61.2",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -5469,6 +5579,12 @@ version = "1.0.4"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be"
|
checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "utf8parse"
|
||||||
|
version = "0.2.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "uuid"
|
name = "uuid"
|
||||||
version = "1.22.0"
|
version = "1.22.0"
|
||||||
@@ -5675,6 +5791,12 @@ dependencies = [
|
|||||||
"rustls-pki-types",
|
"rustls-pki-types",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "widestring"
|
||||||
|
version = "1.2.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "72069c3113ab32ab29e5584db3c6ec55d416895e60715417b5b883a357c3e471"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "winapi"
|
name = "winapi"
|
||||||
version = "0.3.9"
|
version = "0.3.9"
|
||||||
@@ -5747,6 +5869,17 @@ dependencies = [
|
|||||||
"windows-link",
|
"windows-link",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows-service"
|
||||||
|
version = "0.8.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "193cae8e647981c35bc947fdd57ba7928b1fa0d4a79305f6dd2dc55221ac35ac"
|
||||||
|
dependencies = [
|
||||||
|
"bitflags",
|
||||||
|
"widestring",
|
||||||
|
"windows-sys 0.59.0",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "windows-strings"
|
name = "windows-strings"
|
||||||
version = "0.5.1"
|
version = "0.5.1"
|
||||||
|
|||||||
@@ -1,18 +1,10 @@
|
|||||||
use arbiter_proto::{
|
use arbiter_proto::{
|
||||||
ClientMetadata, format_challenge,
|
ClientMetadata, format_challenge,
|
||||||
proto::{
|
proto::client::{
|
||||||
client::{
|
AuthChallengeRequest, AuthChallengeSolution, AuthResult, ClientInfo as ProtoClientInfo,
|
||||||
ClientRequest,
|
ClientRequest, client_request::Payload as ClientRequestPayload,
|
||||||
auth::{
|
|
||||||
self as proto_auth, AuthChallenge, AuthChallengeRequest, AuthChallengeSolution,
|
|
||||||
AuthResult, request::Payload as AuthRequestPayload,
|
|
||||||
response::Payload as AuthResponsePayload,
|
|
||||||
},
|
|
||||||
client_request::Payload as ClientRequestPayload,
|
|
||||||
client_response::Payload as ClientResponsePayload,
|
client_response::Payload as ClientResponsePayload,
|
||||||
},
|
},
|
||||||
shared::ClientInfo as ProtoClientInfo,
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
use ed25519_dalek::Signer as _;
|
use ed25519_dalek::Signer as _;
|
||||||
|
|
||||||
@@ -59,16 +51,16 @@ async fn send_auth_challenge_request(
|
|||||||
transport
|
transport
|
||||||
.send(ClientRequest {
|
.send(ClientRequest {
|
||||||
request_id: next_request_id(),
|
request_id: next_request_id(),
|
||||||
payload: Some(ClientRequestPayload::Auth(proto_auth::Request {
|
payload: Some(ClientRequestPayload::AuthChallengeRequest(
|
||||||
payload: Some(AuthRequestPayload::ChallengeRequest(AuthChallengeRequest {
|
AuthChallengeRequest {
|
||||||
pubkey: key.verifying_key().to_bytes().to_vec(),
|
pubkey: key.verifying_key().to_bytes().to_vec(),
|
||||||
client_info: Some(ProtoClientInfo {
|
client_info: Some(ProtoClientInfo {
|
||||||
name: metadata.name,
|
name: metadata.name,
|
||||||
description: metadata.description,
|
description: metadata.description,
|
||||||
version: metadata.version,
|
version: metadata.version,
|
||||||
}),
|
}),
|
||||||
})),
|
},
|
||||||
})),
|
)),
|
||||||
})
|
})
|
||||||
.await
|
.await
|
||||||
.map_err(|_| AuthError::UnexpectedAuthResponse)
|
.map_err(|_| AuthError::UnexpectedAuthResponse)
|
||||||
@@ -76,7 +68,7 @@ async fn send_auth_challenge_request(
|
|||||||
|
|
||||||
async fn receive_auth_challenge(
|
async fn receive_auth_challenge(
|
||||||
transport: &mut ClientTransport,
|
transport: &mut ClientTransport,
|
||||||
) -> std::result::Result<AuthChallenge, AuthError> {
|
) -> std::result::Result<arbiter_proto::proto::client::AuthChallenge, AuthError> {
|
||||||
let response = transport
|
let response = transport
|
||||||
.recv()
|
.recv()
|
||||||
.await
|
.await
|
||||||
@@ -84,11 +76,8 @@ async fn receive_auth_challenge(
|
|||||||
|
|
||||||
let payload = response.payload.ok_or(AuthError::MissingAuthChallenge)?;
|
let payload = response.payload.ok_or(AuthError::MissingAuthChallenge)?;
|
||||||
match payload {
|
match payload {
|
||||||
ClientResponsePayload::Auth(response) => match response.payload {
|
ClientResponsePayload::AuthChallenge(challenge) => Ok(challenge),
|
||||||
Some(AuthResponsePayload::Challenge(challenge)) => Ok(challenge),
|
ClientResponsePayload::AuthResult(result) => Err(map_auth_result(result)),
|
||||||
Some(AuthResponsePayload::Result(result)) => Err(map_auth_result(result)),
|
|
||||||
None => Err(AuthError::MissingAuthChallenge),
|
|
||||||
},
|
|
||||||
_ => Err(AuthError::UnexpectedAuthResponse),
|
_ => Err(AuthError::UnexpectedAuthResponse),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -96,7 +85,7 @@ async fn receive_auth_challenge(
|
|||||||
async fn send_auth_challenge_solution(
|
async fn send_auth_challenge_solution(
|
||||||
transport: &mut ClientTransport,
|
transport: &mut ClientTransport,
|
||||||
key: &ed25519_dalek::SigningKey,
|
key: &ed25519_dalek::SigningKey,
|
||||||
challenge: AuthChallenge,
|
challenge: arbiter_proto::proto::client::AuthChallenge,
|
||||||
) -> std::result::Result<(), AuthError> {
|
) -> std::result::Result<(), AuthError> {
|
||||||
let challenge_payload = format_challenge(challenge.nonce, &challenge.pubkey);
|
let challenge_payload = format_challenge(challenge.nonce, &challenge.pubkey);
|
||||||
let signature = key.sign(&challenge_payload).to_bytes().to_vec();
|
let signature = key.sign(&challenge_payload).to_bytes().to_vec();
|
||||||
@@ -104,11 +93,9 @@ async fn send_auth_challenge_solution(
|
|||||||
transport
|
transport
|
||||||
.send(ClientRequest {
|
.send(ClientRequest {
|
||||||
request_id: next_request_id(),
|
request_id: next_request_id(),
|
||||||
payload: Some(ClientRequestPayload::Auth(proto_auth::Request {
|
payload: Some(ClientRequestPayload::AuthChallengeSolution(
|
||||||
payload: Some(AuthRequestPayload::ChallengeSolution(
|
|
||||||
AuthChallengeSolution { signature },
|
AuthChallengeSolution { signature },
|
||||||
)),
|
)),
|
||||||
})),
|
|
||||||
})
|
})
|
||||||
.await
|
.await
|
||||||
.map_err(|_| AuthError::UnexpectedAuthResponse)
|
.map_err(|_| AuthError::UnexpectedAuthResponse)
|
||||||
@@ -126,15 +113,12 @@ async fn receive_auth_confirmation(
|
|||||||
.payload
|
.payload
|
||||||
.ok_or(AuthError::UnexpectedAuthResponse)?;
|
.ok_or(AuthError::UnexpectedAuthResponse)?;
|
||||||
match payload {
|
match payload {
|
||||||
ClientResponsePayload::Auth(response) => match response.payload {
|
ClientResponsePayload::AuthResult(result)
|
||||||
Some(AuthResponsePayload::Result(result))
|
|
||||||
if AuthResult::try_from(result).ok() == Some(AuthResult::Success) =>
|
if AuthResult::try_from(result).ok() == Some(AuthResult::Success) =>
|
||||||
{
|
{
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
Some(AuthResponsePayload::Result(result)) => Err(map_auth_result(result)),
|
ClientResponsePayload::AuthResult(result) => Err(map_auth_result(result)),
|
||||||
_ => Err(AuthError::UnexpectedAuthResponse),
|
|
||||||
},
|
|
||||||
_ => Err(AuthError::UnexpectedAuthResponse),
|
_ => Err(AuthError::UnexpectedAuthResponse),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ use std::io::{self, Write};
|
|||||||
|
|
||||||
use arbiter_client::ArbiterClient;
|
use arbiter_client::ArbiterClient;
|
||||||
use arbiter_proto::{ClientMetadata, url::ArbiterUrl};
|
use arbiter_proto::{ClientMetadata, url::ArbiterUrl};
|
||||||
|
use tonic::ConnectError;
|
||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
async fn main() {
|
async fn main() {
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
use arbiter_proto::proto::client::{ClientRequest, ClientResponse};
|
use arbiter_proto::proto::{
|
||||||
|
client::{ClientRequest, ClientResponse},
|
||||||
|
};
|
||||||
use std::sync::atomic::{AtomicI32, Ordering};
|
use std::sync::atomic::{AtomicI32, Ordering};
|
||||||
use tokio::sync::mpsc;
|
use tokio::sync::mpsc;
|
||||||
|
|
||||||
@@ -34,7 +36,9 @@ impl ClientTransport {
|
|||||||
.map_err(|_| ClientSignError::ChannelClosed)
|
.map_err(|_| ClientSignError::ChannelClosed)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) async fn recv(&mut self) -> std::result::Result<ClientResponse, ClientSignError> {
|
pub(crate) async fn recv(
|
||||||
|
&mut self,
|
||||||
|
) -> std::result::Result<ClientResponse, ClientSignError> {
|
||||||
match self.receiver.message().await {
|
match self.receiver.message().await {
|
||||||
Ok(Some(resp)) => Ok(resp),
|
Ok(Some(resp)) => Ok(resp),
|
||||||
Ok(None) => Err(ClientSignError::ConnectionClosed),
|
Ok(None) => Err(ClientSignError::ConnectionClosed),
|
||||||
|
|||||||
@@ -8,15 +8,7 @@ use async_trait::async_trait;
|
|||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use tokio::sync::Mutex;
|
use tokio::sync::Mutex;
|
||||||
|
|
||||||
use arbiter_proto::proto::{
|
use crate::transport::ClientTransport;
|
||||||
client::{
|
|
||||||
ClientRequest, client_request::Payload as ClientRequestPayload,
|
|
||||||
client_response::Payload as ClientResponsePayload,
|
|
||||||
},
|
|
||||||
evm::evm_sign_transaction_response::Result as EvmSignTransactionResult,
|
|
||||||
};
|
|
||||||
|
|
||||||
use crate::transport::{ClientTransport, next_request_id};
|
|
||||||
|
|
||||||
pub struct ArbiterEvmWallet {
|
pub struct ArbiterEvmWallet {
|
||||||
transport: Arc<Mutex<ClientTransport>>,
|
transport: Arc<Mutex<ClientTransport>>,
|
||||||
@@ -87,61 +79,11 @@ impl TxSigner<Signature> for ArbiterEvmWallet {
|
|||||||
&self,
|
&self,
|
||||||
tx: &mut dyn SignableTransaction<Signature>,
|
tx: &mut dyn SignableTransaction<Signature>,
|
||||||
) -> Result<Signature> {
|
) -> Result<Signature> {
|
||||||
|
let _transport = self.transport.lock().await;
|
||||||
self.validate_chain_id(tx)?;
|
self.validate_chain_id(tx)?;
|
||||||
|
|
||||||
let mut transport = self.transport.lock().await;
|
Err(Error::other(
|
||||||
let request_id = next_request_id();
|
"transaction signing is not supported by current arbiter.client protocol",
|
||||||
let rlp_transaction = tx.encoded_for_signing();
|
))
|
||||||
|
|
||||||
transport
|
|
||||||
.send(ClientRequest {
|
|
||||||
request_id,
|
|
||||||
payload: Some(ClientRequestPayload::EvmSignTransaction(
|
|
||||||
arbiter_proto::proto::evm::EvmSignTransactionRequest {
|
|
||||||
wallet_address: self.address.to_vec(),
|
|
||||||
rlp_transaction,
|
|
||||||
},
|
|
||||||
)),
|
|
||||||
})
|
|
||||||
.await
|
|
||||||
.map_err(|_| Error::other("failed to send evm sign transaction request"))?;
|
|
||||||
|
|
||||||
let response = transport
|
|
||||||
.recv()
|
|
||||||
.await
|
|
||||||
.map_err(|_| Error::other("failed to receive evm sign transaction response"))?;
|
|
||||||
|
|
||||||
if response.request_id != Some(request_id) {
|
|
||||||
return Err(Error::other(
|
|
||||||
"received mismatched response id for evm sign transaction",
|
|
||||||
));
|
|
||||||
}
|
|
||||||
|
|
||||||
let payload = response
|
|
||||||
.payload
|
|
||||||
.ok_or_else(|| Error::other("missing evm sign transaction response payload"))?;
|
|
||||||
|
|
||||||
let ClientResponsePayload::EvmSignTransaction(response) = payload else {
|
|
||||||
return Err(Error::other(
|
|
||||||
"unexpected response payload for evm sign transaction request",
|
|
||||||
));
|
|
||||||
};
|
|
||||||
|
|
||||||
let result = response
|
|
||||||
.result
|
|
||||||
.ok_or_else(|| Error::other("missing evm sign transaction result"))?;
|
|
||||||
|
|
||||||
match result {
|
|
||||||
EvmSignTransactionResult::Signature(signature) => {
|
|
||||||
Signature::try_from(signature.as_slice())
|
|
||||||
.map_err(|_| Error::other("invalid signature returned by server"))
|
|
||||||
}
|
|
||||||
EvmSignTransactionResult::EvalError(eval_error) => Err(Error::other(format!(
|
|
||||||
"transaction rejected by policy: {eval_error:?}"
|
|
||||||
))),
|
|
||||||
EvmSignTransactionResult::Error(code) => Err(Error::other(format!(
|
|
||||||
"server failed to sign transaction with error code {code}"
|
|
||||||
))),
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,60 +2,20 @@ pub mod transport;
|
|||||||
pub mod url;
|
pub mod url;
|
||||||
|
|
||||||
use base64::{Engine, prelude::BASE64_STANDARD};
|
use base64::{Engine, prelude::BASE64_STANDARD};
|
||||||
|
use std::{
|
||||||
|
path::PathBuf,
|
||||||
|
sync::{LazyLock, RwLock},
|
||||||
|
};
|
||||||
|
|
||||||
pub mod proto {
|
pub mod proto {
|
||||||
tonic::include_proto!("arbiter");
|
tonic::include_proto!("arbiter");
|
||||||
|
|
||||||
pub mod shared {
|
|
||||||
tonic::include_proto!("arbiter.shared");
|
|
||||||
|
|
||||||
pub mod evm {
|
|
||||||
tonic::include_proto!("arbiter.shared.evm");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub mod user_agent {
|
pub mod user_agent {
|
||||||
tonic::include_proto!("arbiter.user_agent");
|
tonic::include_proto!("arbiter.user_agent");
|
||||||
|
|
||||||
pub mod auth {
|
|
||||||
tonic::include_proto!("arbiter.user_agent.auth");
|
|
||||||
}
|
|
||||||
|
|
||||||
pub mod evm {
|
|
||||||
tonic::include_proto!("arbiter.user_agent.evm");
|
|
||||||
}
|
|
||||||
|
|
||||||
pub mod sdk_client {
|
|
||||||
tonic::include_proto!("arbiter.user_agent.sdk_client");
|
|
||||||
}
|
|
||||||
|
|
||||||
pub mod vault {
|
|
||||||
tonic::include_proto!("arbiter.user_agent.vault");
|
|
||||||
|
|
||||||
pub mod bootstrap {
|
|
||||||
tonic::include_proto!("arbiter.user_agent.vault.bootstrap");
|
|
||||||
}
|
|
||||||
|
|
||||||
pub mod unseal {
|
|
||||||
tonic::include_proto!("arbiter.user_agent.vault.unseal");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub mod client {
|
pub mod client {
|
||||||
tonic::include_proto!("arbiter.client");
|
tonic::include_proto!("arbiter.client");
|
||||||
|
|
||||||
pub mod auth {
|
|
||||||
tonic::include_proto!("arbiter.client.auth");
|
|
||||||
}
|
|
||||||
|
|
||||||
pub mod evm {
|
|
||||||
tonic::include_proto!("arbiter.client.evm");
|
|
||||||
}
|
|
||||||
|
|
||||||
pub mod vault {
|
|
||||||
tonic::include_proto!("arbiter.client.vault");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub mod evm {
|
pub mod evm {
|
||||||
@@ -71,8 +31,27 @@ pub struct ClientMetadata {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub static BOOTSTRAP_PATH: &str = "bootstrap_token";
|
pub static BOOTSTRAP_PATH: &str = "bootstrap_token";
|
||||||
|
pub const DEFAULT_SERVER_PORT: u16 = 50051;
|
||||||
|
static HOME_OVERRIDE: LazyLock<RwLock<Option<PathBuf>>> = LazyLock::new(|| RwLock::new(None));
|
||||||
|
|
||||||
|
pub fn set_home_path_override(path: Option<PathBuf>) -> Result<(), std::io::Error> {
|
||||||
|
let mut lock = HOME_OVERRIDE
|
||||||
|
.write()
|
||||||
|
.map_err(|_| std::io::Error::other("home path override lock poisoned"))?;
|
||||||
|
*lock = path;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
pub fn home_path() -> Result<std::path::PathBuf, std::io::Error> {
|
pub fn home_path() -> Result<std::path::PathBuf, std::io::Error> {
|
||||||
|
if let Some(path) = HOME_OVERRIDE
|
||||||
|
.read()
|
||||||
|
.map_err(|_| std::io::Error::other("home path override lock poisoned"))?
|
||||||
|
.clone()
|
||||||
|
{
|
||||||
|
std::fs::create_dir_all(&path)?;
|
||||||
|
return Ok(path);
|
||||||
|
}
|
||||||
|
|
||||||
static ARBITER_HOME: &str = ".arbiter";
|
static ARBITER_HOME: &str = ".arbiter";
|
||||||
let home_dir = std::env::home_dir().ok_or(std::io::Error::new(
|
let home_dir = std::env::home_dir().ok_or(std::io::Error::new(
|
||||||
std::io::ErrorKind::PermissionDenied,
|
std::io::ErrorKind::PermissionDenied,
|
||||||
|
|||||||
@@ -53,7 +53,11 @@ spki.workspace = true
|
|||||||
alloy.workspace = true
|
alloy.workspace = true
|
||||||
prost-types.workspace = true
|
prost-types.workspace = true
|
||||||
arbiter-tokens-registry.path = "../arbiter-tokens-registry"
|
arbiter-tokens-registry.path = "../arbiter-tokens-registry"
|
||||||
|
clap = { version = "4.6", features = ["derive"] }
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
insta = "1.46.3"
|
insta = "1.46.3"
|
||||||
test-log = { version = "0.2", default-features = false, features = ["trace"] }
|
test-log = { version = "0.2", default-features = false, features = ["trace"] }
|
||||||
|
|
||||||
|
[target.'cfg(windows)'.dependencies]
|
||||||
|
windows-service = "0.8"
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
use arbiter_proto::{
|
use arbiter_proto::{
|
||||||
ClientMetadata, format_challenge,
|
ClientMetadata, format_challenge, transport::{Bi, expect_message}
|
||||||
transport::{Bi, expect_message},
|
|
||||||
};
|
};
|
||||||
use chrono::Utc;
|
use chrono::Utc;
|
||||||
use diesel::{
|
use diesel::{
|
||||||
@@ -84,6 +83,7 @@ async fn get_client_and_nonce(
|
|||||||
})?;
|
})?;
|
||||||
|
|
||||||
conn.exclusive_transaction(|conn| {
|
conn.exclusive_transaction(|conn| {
|
||||||
|
let pubkey_bytes = pubkey_bytes.clone();
|
||||||
Box::pin(async move {
|
Box::pin(async move {
|
||||||
let Some((client_id, current_nonce)) = program_client::table
|
let Some((client_id, current_nonce)) = program_client::table
|
||||||
.filter(program_client::public_key.eq(&pubkey_bytes))
|
.filter(program_client::public_key.eq(&pubkey_bytes))
|
||||||
@@ -290,7 +290,7 @@ where
|
|||||||
pub async fn authenticate<T>(
|
pub async fn authenticate<T>(
|
||||||
props: &mut ClientConnection,
|
props: &mut ClientConnection,
|
||||||
transport: &mut T,
|
transport: &mut T,
|
||||||
) -> Result<i32, Error>
|
) -> Result<VerifyingKey, Error>
|
||||||
where
|
where
|
||||||
T: Bi<Inbound, Result<Outbound, Error>> + Send + ?Sized,
|
T: Bi<Inbound, Result<Outbound, Error>> + Send + ?Sized,
|
||||||
{
|
{
|
||||||
@@ -318,6 +318,7 @@ where
|
|||||||
};
|
};
|
||||||
|
|
||||||
sync_client_metadata(&props.db, info.id, &metadata).await?;
|
sync_client_metadata(&props.db, info.id, &metadata).await?;
|
||||||
|
|
||||||
challenge_client(transport, pubkey, info.current_nonce).await?;
|
challenge_client(transport, pubkey, info.current_nonce).await?;
|
||||||
|
|
||||||
transport
|
transport
|
||||||
@@ -328,5 +329,5 @@ where
|
|||||||
Error::Transport
|
Error::Transport
|
||||||
})?;
|
})?;
|
||||||
|
|
||||||
Ok(info.id)
|
Ok(pubkey)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ use kameo::actor::Spawn;
|
|||||||
use tracing::{error, info};
|
use tracing::{error, info};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
actors::{GlobalActors, client::session::ClientSession},
|
actors::{GlobalActors, client::{ session::ClientSession}},
|
||||||
db,
|
db,
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -20,10 +20,7 @@ pub struct ClientConnection {
|
|||||||
|
|
||||||
impl ClientConnection {
|
impl ClientConnection {
|
||||||
pub fn new(db: db::DatabasePool, actors: GlobalActors) -> Self {
|
pub fn new(db: db::DatabasePool, actors: GlobalActors) -> Self {
|
||||||
Self {
|
Self { db, actors }
|
||||||
db,
|
|
||||||
actors,
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -35,8 +32,8 @@ where
|
|||||||
T: Bi<auth::Inbound, Result<auth::Outbound, auth::Error>> + Send + ?Sized,
|
T: Bi<auth::Inbound, Result<auth::Outbound, auth::Error>> + Send + ?Sized,
|
||||||
{
|
{
|
||||||
match auth::authenticate(&mut props, transport).await {
|
match auth::authenticate(&mut props, transport).await {
|
||||||
Ok(client_id) => {
|
Ok(_pubkey) => {
|
||||||
ClientSession::spawn(ClientSession::new(props, client_id));
|
ClientSession::spawn(ClientSession::new(props));
|
||||||
info!("Client authenticated, session started");
|
info!("Client authenticated, session started");
|
||||||
}
|
}
|
||||||
Err(err) => {
|
Err(err) => {
|
||||||
|
|||||||
@@ -1,29 +1,21 @@
|
|||||||
use kameo::{Actor, messages};
|
use kameo::{Actor, messages};
|
||||||
use tracing::error;
|
use tracing::error;
|
||||||
|
|
||||||
use alloy::{consensus::TxEip1559, primitives::Address, signers::Signature};
|
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
actors::{
|
actors::{
|
||||||
GlobalActors,
|
GlobalActors, client::ClientConnection, flow_coordinator::RegisterClient,
|
||||||
client::ClientConnection, flow_coordinator::RegisterClient,
|
|
||||||
|
|
||||||
evm::{ClientSignTransaction, SignTransactionError},
|
|
||||||
keyholder::KeyHolderState,
|
keyholder::KeyHolderState,
|
||||||
|
|
||||||
},
|
},
|
||||||
db,
|
db,
|
||||||
evm::VetError,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
pub struct ClientSession {
|
pub struct ClientSession {
|
||||||
props: ClientConnection,
|
props: ClientConnection,
|
||||||
client_id: i32,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ClientSession {
|
impl ClientSession {
|
||||||
pub(crate) fn new(props: ClientConnection, client_id: i32) -> Self {
|
pub(crate) fn new(props: ClientConnection) -> Self {
|
||||||
Self { props, client_id }
|
Self { props }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -43,34 +35,6 @@ impl ClientSession {
|
|||||||
|
|
||||||
Ok(vault_state)
|
Ok(vault_state)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[message]
|
|
||||||
pub(crate) async fn handle_sign_transaction(
|
|
||||||
&mut self,
|
|
||||||
wallet_address: Address,
|
|
||||||
transaction: TxEip1559,
|
|
||||||
) -> Result<Signature, SignTransactionRpcError> {
|
|
||||||
match self
|
|
||||||
.props
|
|
||||||
.actors
|
|
||||||
.evm
|
|
||||||
.ask(ClientSignTransaction {
|
|
||||||
client_id: self.client_id,
|
|
||||||
wallet_address,
|
|
||||||
transaction,
|
|
||||||
})
|
|
||||||
.await
|
|
||||||
{
|
|
||||||
Ok(signature) => Ok(signature),
|
|
||||||
Err(kameo::error::SendError::HandlerError(SignTransactionError::Vet(vet_error))) => {
|
|
||||||
Err(SignTransactionRpcError::Vet(vet_error))
|
|
||||||
}
|
|
||||||
Err(err) => {
|
|
||||||
error!(?err, "Failed to sign EVM transaction in client session");
|
|
||||||
Err(SignTransactionRpcError::Internal)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Actor for ClientSession {
|
impl Actor for ClientSession {
|
||||||
@@ -95,7 +59,7 @@ impl Actor for ClientSession {
|
|||||||
impl ClientSession {
|
impl ClientSession {
|
||||||
pub fn new_test(db: db::DatabasePool, actors: GlobalActors) -> Self {
|
pub fn new_test(db: db::DatabasePool, actors: GlobalActors) -> Self {
|
||||||
let props = ClientConnection::new(db, actors);
|
let props = ClientConnection::new(db, actors);
|
||||||
Self { props, client_id: 0 }
|
Self { props }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -106,12 +70,3 @@ pub enum Error {
|
|||||||
#[error("Internal error")]
|
#[error("Internal error")]
|
||||||
Internal,
|
Internal,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, thiserror::Error)]
|
|
||||||
pub enum SignTransactionRpcError {
|
|
||||||
#[error("Policy evaluation failed")]
|
|
||||||
Vet(#[from] VetError),
|
|
||||||
|
|
||||||
#[error("Internal error")]
|
|
||||||
Internal,
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ use rand::{SeedableRng, rng, rngs::StdRng};
|
|||||||
use crate::{
|
use crate::{
|
||||||
actors::keyholder::{CreateNew, Decrypt, KeyHolder},
|
actors::keyholder::{CreateNew, Decrypt, KeyHolder},
|
||||||
db::{
|
db::{
|
||||||
DatabaseError, DatabasePool,
|
self, DatabaseError, DatabasePool,
|
||||||
models::{self, SqliteTimestamp},
|
models::{self, SqliteTimestamp},
|
||||||
schema,
|
schema,
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -214,6 +214,7 @@ impl KeyHolder {
|
|||||||
let mut conn = self.db.get().await?;
|
let mut conn = self.db.get().await?;
|
||||||
schema::root_key_history::table
|
schema::root_key_history::table
|
||||||
.filter(schema::root_key_history::id.eq(*root_key_history_id))
|
.filter(schema::root_key_history::id.eq(*root_key_history_id))
|
||||||
|
.select(schema::root_key_history::data_encryption_nonce)
|
||||||
.select(RootKeyHistory::as_select())
|
.select(RootKeyHistory::as_select())
|
||||||
.first(&mut conn)
|
.first(&mut conn)
|
||||||
.await?
|
.await?
|
||||||
|
|||||||
@@ -210,15 +210,12 @@ where
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
if !valid {
|
if valid {
|
||||||
error!("Invalid challenge solution signature");
|
|
||||||
return Err(Error::InvalidChallengeSolution);
|
|
||||||
}
|
|
||||||
|
|
||||||
self.transport
|
self.transport
|
||||||
.send(Ok(Outbound::AuthSuccess))
|
.send(Ok(Outbound::AuthSuccess))
|
||||||
.await
|
.await
|
||||||
.map_err(|_| Error::Transport)?;
|
.map_err(|_| Error::Transport)?;
|
||||||
|
}
|
||||||
|
|
||||||
Ok(key.clone())
|
Ok(key.clone())
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +1,13 @@
|
|||||||
use std::sync::Mutex;
|
use std::sync::Mutex;
|
||||||
|
|
||||||
use alloy::{consensus::TxEip1559, primitives::Address, signers::Signature};
|
use alloy::primitives::Address;
|
||||||
use chacha20poly1305::{AeadInPlace, XChaCha20Poly1305, XNonce, aead::KeyInit};
|
use chacha20poly1305::{AeadInPlace, XChaCha20Poly1305, XNonce, aead::KeyInit};
|
||||||
use diesel::{ExpressionMethods as _, QueryDsl as _, SelectableHelper};
|
use diesel::sql_types::ops::Add;
|
||||||
|
use diesel::{BoolExpressionMethods as _, ExpressionMethods as _, QueryDsl as _, SelectableHelper};
|
||||||
use diesel_async::{AsyncConnection, RunQueryDsl};
|
use diesel_async::{AsyncConnection, RunQueryDsl};
|
||||||
use kameo::error::SendError;
|
use kameo::error::SendError;
|
||||||
use kameo::prelude::Context;
|
use kameo::prelude::Context;
|
||||||
use kameo::messages;
|
use kameo::{message, messages};
|
||||||
use tracing::{error, info};
|
use tracing::{error, info};
|
||||||
use x25519_dalek::{EphemeralSecret, PublicKey};
|
use x25519_dalek::{EphemeralSecret, PublicKey};
|
||||||
|
|
||||||
@@ -14,15 +15,15 @@ use crate::actors::flow_coordinator::client_connect_approval::ClientApprovalAnsw
|
|||||||
use crate::actors::keyholder::KeyHolderState;
|
use crate::actors::keyholder::KeyHolderState;
|
||||||
use crate::actors::user_agent::session::Error;
|
use crate::actors::user_agent::session::Error;
|
||||||
use crate::db::models::{
|
use crate::db::models::{
|
||||||
EvmWalletAccess, NewEvmWalletAccess, ProgramClient, ProgramClientMetadata,
|
CoreEvmWalletAccess, EvmWalletAccess, NewEvmWalletAccess, ProgramClient, ProgramClientMetadata,
|
||||||
};
|
};
|
||||||
|
use crate::db::schema::evm_wallet_access;
|
||||||
use crate::evm::policies::{Grant, SpecificGrant};
|
use crate::evm::policies::{Grant, SpecificGrant};
|
||||||
use crate::safe_cell::SafeCell;
|
use crate::safe_cell::SafeCell;
|
||||||
use crate::{
|
use crate::{
|
||||||
actors::{
|
actors::{
|
||||||
evm::{
|
evm::{
|
||||||
ClientSignTransaction, Generate, ListWallets, SignTransactionError as EvmSignError,
|
Generate, ListWallets, UseragentCreateGrant, UseragentDeleteGrant, UseragentListGrants,
|
||||||
UseragentCreateGrant, UseragentDeleteGrant, UseragentListGrants,
|
|
||||||
},
|
},
|
||||||
keyholder::{self, Bootstrap, TryUnseal},
|
keyholder::{self, Bootstrap, TryUnseal},
|
||||||
user_agent::session::{
|
user_agent::session::{
|
||||||
@@ -111,15 +112,6 @@ pub enum BootstrapError {
|
|||||||
General(#[from] super::Error),
|
General(#[from] super::Error),
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Error)]
|
|
||||||
pub enum SignTransactionError {
|
|
||||||
#[error("Policy evaluation failed")]
|
|
||||||
Vet(#[from] crate::evm::VetError),
|
|
||||||
|
|
||||||
#[error("Internal signing error")]
|
|
||||||
Internal,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[messages]
|
#[messages]
|
||||||
impl UserAgentSession {
|
impl UserAgentSession {
|
||||||
#[message]
|
#[message]
|
||||||
@@ -364,35 +356,6 @@ impl UserAgentSession {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[message]
|
|
||||||
pub(crate) async fn handle_sign_transaction(
|
|
||||||
&mut self,
|
|
||||||
client_id: i32,
|
|
||||||
wallet_address: Address,
|
|
||||||
transaction: TxEip1559,
|
|
||||||
) -> Result<Signature, SignTransactionError> {
|
|
||||||
match self
|
|
||||||
.props
|
|
||||||
.actors
|
|
||||||
.evm
|
|
||||||
.ask(ClientSignTransaction {
|
|
||||||
client_id,
|
|
||||||
wallet_address,
|
|
||||||
transaction,
|
|
||||||
})
|
|
||||||
.await
|
|
||||||
{
|
|
||||||
Ok(signature) => Ok(signature),
|
|
||||||
Err(SendError::HandlerError(EvmSignError::Vet(vet_error))) => {
|
|
||||||
Err(SignTransactionError::Vet(vet_error))
|
|
||||||
}
|
|
||||||
Err(err) => {
|
|
||||||
error!(?err, "EVM sign transaction failed in user-agent session");
|
|
||||||
Err(SignTransactionError::Internal)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[message]
|
#[message]
|
||||||
pub(crate) async fn handle_grant_evm_wallet_access(
|
pub(crate) async fn handle_grant_evm_wallet_access(
|
||||||
&mut self,
|
&mut self,
|
||||||
|
|||||||
72
server/crates/arbiter-server/src/cli.rs
Normal file
72
server/crates/arbiter-server/src/cli.rs
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
use std::{
|
||||||
|
net::{Ipv4Addr, SocketAddr, SocketAddrV4},
|
||||||
|
path::PathBuf,
|
||||||
|
};
|
||||||
|
|
||||||
|
use clap::{Args, Parser, Subcommand};
|
||||||
|
|
||||||
|
const DEFAULT_LISTEN_ADDR: SocketAddr = SocketAddr::V4(SocketAddrV4::new(
|
||||||
|
Ipv4Addr::LOCALHOST,
|
||||||
|
arbiter_proto::DEFAULT_SERVER_PORT,
|
||||||
|
));
|
||||||
|
|
||||||
|
#[derive(Debug, Parser)]
|
||||||
|
#[command(name = "arbiter-server")]
|
||||||
|
#[command(about = "Arbiter gRPC server")]
|
||||||
|
pub struct Cli {
|
||||||
|
#[command(subcommand)]
|
||||||
|
pub command: Option<Command>,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Subcommand)]
|
||||||
|
pub enum Command {
|
||||||
|
/// Run server in foreground mode.
|
||||||
|
Run(RunArgs),
|
||||||
|
/// Manage service lifecycle.
|
||||||
|
Service {
|
||||||
|
#[command(subcommand)]
|
||||||
|
command: ServiceCommand,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, Args)]
|
||||||
|
pub struct RunArgs {
|
||||||
|
#[arg(long, default_value_t = DEFAULT_LISTEN_ADDR)]
|
||||||
|
pub listen_addr: SocketAddr,
|
||||||
|
#[arg(long)]
|
||||||
|
pub data_dir: Option<PathBuf>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Default for RunArgs {
|
||||||
|
fn default() -> Self {
|
||||||
|
Self {
|
||||||
|
listen_addr: DEFAULT_LISTEN_ADDR,
|
||||||
|
data_dir: None,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Subcommand)]
|
||||||
|
pub enum ServiceCommand {
|
||||||
|
/// Install Windows service in Service Control Manager.
|
||||||
|
Install(ServiceInstallArgs),
|
||||||
|
/// Internal service entrypoint. SCM only.
|
||||||
|
#[command(hide = true)]
|
||||||
|
Run(ServiceRunArgs),
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, Args)]
|
||||||
|
pub struct ServiceInstallArgs {
|
||||||
|
#[arg(long)]
|
||||||
|
pub start: bool,
|
||||||
|
#[arg(long)]
|
||||||
|
pub data_dir: Option<PathBuf>,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, Args)]
|
||||||
|
pub struct ServiceRunArgs {
|
||||||
|
#[arg(long, default_value_t = DEFAULT_LISTEN_ADDR)]
|
||||||
|
pub listen_addr: SocketAddr,
|
||||||
|
#[arg(long)]
|
||||||
|
pub data_dir: Option<PathBuf>,
|
||||||
|
}
|
||||||
@@ -8,6 +8,7 @@ use alloy::{
|
|||||||
use chrono::Utc;
|
use chrono::Utc;
|
||||||
use diesel::{ExpressionMethods as _, QueryDsl as _, QueryResult, insert_into, sqlite::Sqlite};
|
use diesel::{ExpressionMethods as _, QueryDsl as _, QueryResult, insert_into, sqlite::Sqlite};
|
||||||
use diesel_async::{AsyncConnection, RunQueryDsl};
|
use diesel_async::{AsyncConnection, RunQueryDsl};
|
||||||
|
use tracing_subscriber::registry::Data;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
db::{
|
db::{
|
||||||
@@ -31,7 +32,7 @@ mod utils;
|
|||||||
#[derive(Debug, thiserror::Error, miette::Diagnostic)]
|
#[derive(Debug, thiserror::Error, miette::Diagnostic)]
|
||||||
pub enum PolicyError {
|
pub enum PolicyError {
|
||||||
#[error("Database error")]
|
#[error("Database error")]
|
||||||
Database(#[from] crate::db::DatabaseError),
|
Error(#[from] crate::db::DatabaseError),
|
||||||
#[error("Transaction violates policy: {0:?}")]
|
#[error("Transaction violates policy: {0:?}")]
|
||||||
#[diagnostic(code(arbiter_server::evm::policy_error::violation))]
|
#[diagnostic(code(arbiter_server::evm::policy_error::violation))]
|
||||||
Violations(Vec<EvalViolation>),
|
Violations(Vec<EvalViolation>),
|
||||||
|
|||||||
@@ -36,8 +36,8 @@ use super::{DatabaseID, EvalContext, EvalViolation};
|
|||||||
// Plain ether transfer
|
// Plain ether transfer
|
||||||
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
|
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
|
||||||
pub struct Meaning {
|
pub struct Meaning {
|
||||||
pub(crate) to: Address,
|
to: Address,
|
||||||
pub(crate) value: U256,
|
value: U256,
|
||||||
}
|
}
|
||||||
impl Display for Meaning {
|
impl Display for Meaning {
|
||||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
@@ -91,7 +91,6 @@ async fn query_relevant_past_transaction(
|
|||||||
|
|
||||||
async fn check_rate_limits(
|
async fn check_rate_limits(
|
||||||
grant: &Grant<Settings>,
|
grant: &Grant<Settings>,
|
||||||
current_transfer_value: U256,
|
|
||||||
db: &mut impl AsyncConnection<Backend = Sqlite>,
|
db: &mut impl AsyncConnection<Backend = Sqlite>,
|
||||||
) -> QueryResult<Vec<EvalViolation>> {
|
) -> QueryResult<Vec<EvalViolation>> {
|
||||||
let mut violations = Vec::new();
|
let mut violations = Vec::new();
|
||||||
@@ -100,12 +99,12 @@ async fn check_rate_limits(
|
|||||||
let past_transaction = query_relevant_past_transaction(grant.id, window, db).await?;
|
let past_transaction = query_relevant_past_transaction(grant.id, window, db).await?;
|
||||||
|
|
||||||
let window_start = chrono::Utc::now() - grant.settings.limit.window;
|
let window_start = chrono::Utc::now() - grant.settings.limit.window;
|
||||||
let prospective_cumulative_volume: U256 = past_transaction
|
let cumulative_volume: U256 = past_transaction
|
||||||
.iter()
|
.iter()
|
||||||
.filter(|(_, timestamp)| timestamp >= &window_start)
|
.filter(|(_, timestamp)| timestamp >= &window_start)
|
||||||
.fold(current_transfer_value, |acc, (value, _)| acc + *value);
|
.fold(U256::default(), |acc, (value, _)| acc + *value);
|
||||||
|
|
||||||
if prospective_cumulative_volume > grant.settings.limit.max_volume {
|
if cumulative_volume > grant.settings.limit.max_volume {
|
||||||
violations.push(EvalViolation::VolumetricLimitExceeded);
|
violations.push(EvalViolation::VolumetricLimitExceeded);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -142,7 +141,7 @@ impl Policy for EtherTransfer {
|
|||||||
violations.push(EvalViolation::InvalidTarget { target: meaning.to });
|
violations.push(EvalViolation::InvalidTarget { target: meaning.to });
|
||||||
}
|
}
|
||||||
|
|
||||||
let rate_violations = check_rate_limits(grant, meaning.value, db).await?;
|
let rate_violations = check_rate_limits(grant, db).await?;
|
||||||
violations.extend(rate_violations);
|
violations.extend(rate_violations);
|
||||||
|
|
||||||
Ok(violations)
|
Ok(violations)
|
||||||
|
|||||||
@@ -198,7 +198,7 @@ async fn evaluate_rejects_volume_over_limit() {
|
|||||||
grant_id,
|
grant_id,
|
||||||
wallet_access_id: WALLET_ACCESS_ID,
|
wallet_access_id: WALLET_ACCESS_ID,
|
||||||
chain_id: CHAIN_ID as i32,
|
chain_id: CHAIN_ID as i32,
|
||||||
eth_value: utils::u256_to_bytes(U256::from(1_000u64)).to_vec(),
|
eth_value: utils::u256_to_bytes(U256::from(1_001u64)).to_vec(),
|
||||||
signed_at: SqliteTimestamp(Utc::now()),
|
signed_at: SqliteTimestamp(Utc::now()),
|
||||||
})
|
})
|
||||||
.execute(&mut *conn)
|
.execute(&mut *conn)
|
||||||
@@ -211,7 +211,7 @@ async fn evaluate_rejects_volume_over_limit() {
|
|||||||
shared: shared(),
|
shared: shared(),
|
||||||
settings,
|
settings,
|
||||||
};
|
};
|
||||||
let context = ctx(ALLOWED, U256::from(1u64));
|
let context = ctx(ALLOWED, U256::from(100u64));
|
||||||
let m = EtherTransfer::analyze(&context).unwrap();
|
let m = EtherTransfer::analyze(&context).unwrap();
|
||||||
let v = EtherTransfer::evaluate(&context, &m, &grant, &mut *conn)
|
let v = EtherTransfer::evaluate(&context, &m, &grant, &mut *conn)
|
||||||
.await
|
.await
|
||||||
@@ -233,13 +233,13 @@ async fn evaluate_passes_at_exactly_volume_limit() {
|
|||||||
.await
|
.await
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
// Exactly at the limit including current transfer — check is `>`, so this should not violate
|
// Exactly at the limit — the check is `>`, so this should not violate
|
||||||
insert_into(evm_transaction_log::table)
|
insert_into(evm_transaction_log::table)
|
||||||
.values(NewEvmTransactionLog {
|
.values(NewEvmTransactionLog {
|
||||||
grant_id,
|
grant_id,
|
||||||
wallet_access_id: WALLET_ACCESS_ID,
|
wallet_access_id: WALLET_ACCESS_ID,
|
||||||
chain_id: CHAIN_ID as i32,
|
chain_id: CHAIN_ID as i32,
|
||||||
eth_value: utils::u256_to_bytes(U256::from(900u64)).to_vec(),
|
eth_value: utils::u256_to_bytes(U256::from(1_000u64)).to_vec(),
|
||||||
signed_at: SqliteTimestamp(Utc::now()),
|
signed_at: SqliteTimestamp(Utc::now()),
|
||||||
})
|
})
|
||||||
.execute(&mut *conn)
|
.execute(&mut *conn)
|
||||||
|
|||||||
@@ -38,9 +38,9 @@ fn grant_join() -> _ {
|
|||||||
|
|
||||||
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
|
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
|
||||||
pub struct Meaning {
|
pub struct Meaning {
|
||||||
pub(crate) token: &'static TokenInfo,
|
token: &'static TokenInfo,
|
||||||
pub(crate) to: Address,
|
to: Address,
|
||||||
pub(crate) value: U256,
|
value: U256,
|
||||||
}
|
}
|
||||||
impl std::fmt::Display for Meaning {
|
impl std::fmt::Display for Meaning {
|
||||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
@@ -101,7 +101,6 @@ async fn query_relevant_past_transfers(
|
|||||||
|
|
||||||
async fn check_volume_rate_limits(
|
async fn check_volume_rate_limits(
|
||||||
grant: &Grant<Settings>,
|
grant: &Grant<Settings>,
|
||||||
current_transfer_value: U256,
|
|
||||||
db: &mut impl AsyncConnection<Backend = Sqlite>,
|
db: &mut impl AsyncConnection<Backend = Sqlite>,
|
||||||
) -> QueryResult<Vec<EvalViolation>> {
|
) -> QueryResult<Vec<EvalViolation>> {
|
||||||
let mut violations = Vec::new();
|
let mut violations = Vec::new();
|
||||||
@@ -114,12 +113,12 @@ async fn check_volume_rate_limits(
|
|||||||
|
|
||||||
for limit in &grant.settings.volume_limits {
|
for limit in &grant.settings.volume_limits {
|
||||||
let window_start = chrono::Utc::now() - limit.window;
|
let window_start = chrono::Utc::now() - limit.window;
|
||||||
let prospective_cumulative_volume: U256 = past_transfers
|
let cumulative_volume: U256 = past_transfers
|
||||||
.iter()
|
.iter()
|
||||||
.filter(|(_, timestamp)| timestamp >= &window_start)
|
.filter(|(_, timestamp)| timestamp >= &window_start)
|
||||||
.fold(current_transfer_value, |acc, (value, _)| acc + *value);
|
.fold(U256::default(), |acc, (value, _)| acc + *value);
|
||||||
|
|
||||||
if prospective_cumulative_volume > limit.max_volume {
|
if cumulative_volume > limit.max_volume {
|
||||||
violations.push(EvalViolation::VolumetricLimitExceeded);
|
violations.push(EvalViolation::VolumetricLimitExceeded);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -164,7 +163,7 @@ impl Policy for TokenTransfer {
|
|||||||
violations.push(EvalViolation::InvalidTarget { target: meaning.to });
|
violations.push(EvalViolation::InvalidTarget { target: meaning.to });
|
||||||
}
|
}
|
||||||
|
|
||||||
let rate_violations = check_volume_rate_limits(grant, meaning.value, db).await?;
|
let rate_violations = check_volume_rate_limits(grant, db).await?;
|
||||||
violations.extend(rate_violations);
|
violations.extend(rate_violations);
|
||||||
|
|
||||||
Ok(violations)
|
Ok(violations)
|
||||||
|
|||||||
@@ -220,7 +220,7 @@ async fn evaluate_rejects_wrong_restricted_recipient() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn evaluate_passes_volume_at_exact_limit() {
|
async fn evaluate_passes_volume_within_limit() {
|
||||||
let db = db::create_test_pool().await;
|
let db = db::create_test_pool().await;
|
||||||
let mut conn = db.get().await.unwrap();
|
let mut conn = db.get().await.unwrap();
|
||||||
|
|
||||||
@@ -230,7 +230,7 @@ async fn evaluate_passes_volume_at_exact_limit() {
|
|||||||
.await
|
.await
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
// Record a past transfer of 900, with current transfer 100 => exactly 1000 limit
|
// Record a past transfer of 500 (within 1000 limit)
|
||||||
use crate::db::{models::NewEvmTokenTransferLog, schema::evm_token_transfer_log};
|
use crate::db::{models::NewEvmTokenTransferLog, schema::evm_token_transfer_log};
|
||||||
insert_into(evm_token_transfer_log::table)
|
insert_into(evm_token_transfer_log::table)
|
||||||
.values(NewEvmTokenTransferLog {
|
.values(NewEvmTokenTransferLog {
|
||||||
@@ -239,7 +239,7 @@ async fn evaluate_passes_volume_at_exact_limit() {
|
|||||||
chain_id: CHAIN_ID as i32,
|
chain_id: CHAIN_ID as i32,
|
||||||
token_contract: DAI.to_vec(),
|
token_contract: DAI.to_vec(),
|
||||||
recipient_address: RECIPIENT.to_vec(),
|
recipient_address: RECIPIENT.to_vec(),
|
||||||
value: utils::u256_to_bytes(U256::from(900u64)).to_vec(),
|
value: utils::u256_to_bytes(U256::from(500u64)).to_vec(),
|
||||||
})
|
})
|
||||||
.execute(&mut *conn)
|
.execute(&mut *conn)
|
||||||
.await
|
.await
|
||||||
@@ -282,7 +282,7 @@ async fn evaluate_rejects_volume_over_limit() {
|
|||||||
chain_id: CHAIN_ID as i32,
|
chain_id: CHAIN_ID as i32,
|
||||||
token_contract: DAI.to_vec(),
|
token_contract: DAI.to_vec(),
|
||||||
recipient_address: RECIPIENT.to_vec(),
|
recipient_address: RECIPIENT.to_vec(),
|
||||||
value: utils::u256_to_bytes(U256::from(1_000u64)).to_vec(),
|
value: utils::u256_to_bytes(U256::from(1_001u64)).to_vec(),
|
||||||
})
|
})
|
||||||
.execute(&mut *conn)
|
.execute(&mut *conn)
|
||||||
.await
|
.await
|
||||||
@@ -294,7 +294,7 @@ async fn evaluate_rejects_volume_over_limit() {
|
|||||||
shared: shared(),
|
shared: shared(),
|
||||||
settings,
|
settings,
|
||||||
};
|
};
|
||||||
let calldata = transfer_calldata(RECIPIENT, U256::from(1u64));
|
let calldata = transfer_calldata(RECIPIENT, U256::from(100u64));
|
||||||
let context = ctx(DAI, calldata);
|
let context = ctx(DAI, calldata);
|
||||||
let m = TokenTransfer::analyze(&context).unwrap();
|
let m = TokenTransfer::analyze(&context).unwrap();
|
||||||
let v = TokenTransfer::evaluate(&context, &m, &grant, &mut *conn)
|
let v = TokenTransfer::evaluate(&context, &m, &grant, &mut *conn)
|
||||||
|
|||||||
@@ -1,24 +1,32 @@
|
|||||||
use arbiter_proto::{
|
use arbiter_proto::{
|
||||||
proto::client::{
|
proto::client::{
|
||||||
ClientRequest, ClientResponse, client_request::Payload as ClientRequestPayload,
|
ClientRequest, ClientResponse, VaultState as ProtoVaultState,
|
||||||
|
client_request::Payload as ClientRequestPayload,
|
||||||
client_response::Payload as ClientResponsePayload,
|
client_response::Payload as ClientResponsePayload,
|
||||||
},
|
},
|
||||||
transport::{Receiver, Sender, grpc::GrpcBi},
|
transport::{Receiver, Sender, grpc::GrpcBi},
|
||||||
};
|
};
|
||||||
use kameo::actor::{ActorRef, Spawn as _};
|
use kameo::{
|
||||||
|
actor::{ActorRef, Spawn as _},
|
||||||
|
error::SendError,
|
||||||
|
};
|
||||||
use tonic::Status;
|
use tonic::Status;
|
||||||
use tracing::{info, warn};
|
use tracing::{info, warn};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
actors::client::{ClientConnection, session::ClientSession},
|
actors::{
|
||||||
|
client::{
|
||||||
|
self, ClientConnection,
|
||||||
|
session::{ClientSession, Error, HandleQueryVaultState},
|
||||||
|
},
|
||||||
|
keyholder::KeyHolderState,
|
||||||
|
},
|
||||||
grpc::request_tracker::RequestTracker,
|
grpc::request_tracker::RequestTracker,
|
||||||
};
|
};
|
||||||
|
|
||||||
mod auth;
|
mod auth;
|
||||||
mod evm;
|
|
||||||
mod inbound;
|
mod inbound;
|
||||||
mod outbound;
|
mod outbound;
|
||||||
mod vault;
|
|
||||||
|
|
||||||
async fn dispatch_loop(
|
async fn dispatch_loop(
|
||||||
mut bi: GrpcBi<ClientRequest, ClientResponse>,
|
mut bi: GrpcBi<ClientRequest, ClientResponse>,
|
||||||
@@ -26,9 +34,7 @@ async fn dispatch_loop(
|
|||||||
mut request_tracker: RequestTracker,
|
mut request_tracker: RequestTracker,
|
||||||
) {
|
) {
|
||||||
loop {
|
loop {
|
||||||
let Some(message) = bi.recv().await else {
|
let Some(message) = bi.recv().await else { return };
|
||||||
return;
|
|
||||||
};
|
|
||||||
|
|
||||||
let conn = match message {
|
let conn = match message {
|
||||||
Ok(conn) => conn,
|
Ok(conn) => conn,
|
||||||
@@ -47,24 +53,16 @@ async fn dispatch_loop(
|
|||||||
};
|
};
|
||||||
|
|
||||||
let Some(payload) = conn.payload else {
|
let Some(payload) = conn.payload else {
|
||||||
let _ = bi
|
let _ = bi.send(Err(Status::invalid_argument("Missing client request payload"))).await;
|
||||||
.send(Err(Status::invalid_argument(
|
|
||||||
"Missing client request payload",
|
|
||||||
)))
|
|
||||||
.await;
|
|
||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
|
|
||||||
match dispatch_inner(&actor, payload).await {
|
match dispatch_inner(&actor, payload).await {
|
||||||
Ok(response) => {
|
Ok(response) => {
|
||||||
if bi
|
if bi.send(Ok(ClientResponse {
|
||||||
.send(Ok(ClientResponse {
|
|
||||||
request_id: Some(request_id),
|
request_id: Some(request_id),
|
||||||
payload: Some(response),
|
payload: Some(response),
|
||||||
}))
|
})).await.is_err() {
|
||||||
.await
|
|
||||||
.is_err()
|
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -81,10 +79,21 @@ async fn dispatch_inner(
|
|||||||
payload: ClientRequestPayload,
|
payload: ClientRequestPayload,
|
||||||
) -> Result<ClientResponsePayload, Status> {
|
) -> Result<ClientResponsePayload, Status> {
|
||||||
match payload {
|
match payload {
|
||||||
ClientRequestPayload::Vault(req) => vault::dispatch(actor, req).await,
|
ClientRequestPayload::QueryVaultState(_) => {
|
||||||
ClientRequestPayload::Evm(req) => evm::dispatch(actor, req).await,
|
let state = match actor.ask(HandleQueryVaultState {}).await {
|
||||||
ClientRequestPayload::Auth(..) => {
|
Ok(KeyHolderState::Unbootstrapped) => ProtoVaultState::Unbootstrapped,
|
||||||
warn!("Unsupported post-auth client auth request");
|
Ok(KeyHolderState::Sealed) => ProtoVaultState::Sealed,
|
||||||
|
Ok(KeyHolderState::Unsealed) => ProtoVaultState::Unsealed,
|
||||||
|
Err(SendError::HandlerError(Error::Internal)) => ProtoVaultState::Error,
|
||||||
|
Err(err) => {
|
||||||
|
warn!(error = ?err, "Failed to query vault state");
|
||||||
|
ProtoVaultState::Error
|
||||||
|
}
|
||||||
|
};
|
||||||
|
Ok(ClientResponsePayload::VaultState(state.into()))
|
||||||
|
}
|
||||||
|
payload => {
|
||||||
|
warn!(?payload, "Unsupported post-auth client request");
|
||||||
Err(Status::invalid_argument("Unsupported client request"))
|
Err(Status::invalid_argument("Unsupported client request"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -93,21 +102,14 @@ async fn dispatch_inner(
|
|||||||
pub async fn start(mut conn: ClientConnection, mut bi: GrpcBi<ClientRequest, ClientResponse>) {
|
pub async fn start(mut conn: ClientConnection, mut bi: GrpcBi<ClientRequest, ClientResponse>) {
|
||||||
let mut request_tracker = RequestTracker::default();
|
let mut request_tracker = RequestTracker::default();
|
||||||
|
|
||||||
let client_id = match auth::start(&mut conn, &mut bi, &mut request_tracker).await {
|
if let Err(e) = auth::start(&mut conn, &mut bi, &mut request_tracker).await {
|
||||||
Ok(id) => id,
|
let mut transport = auth::AuthTransportAdapter::new(&mut bi, &mut request_tracker);
|
||||||
Err(err) => {
|
let _ = transport.send(Err(e.clone())).await;
|
||||||
let _ = bi
|
warn!(error = ?e, "Client authentication failed");
|
||||||
.send(Err(Status::unauthenticated(format!(
|
|
||||||
"Authentication failed: {}",
|
|
||||||
err
|
|
||||||
))))
|
|
||||||
.await;
|
|
||||||
warn!(error = ?err, "Client authentication failed");
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
let actor = ClientSession::spawn(ClientSession::new(conn, client_id));
|
let actor = client::session::ClientSession::spawn(client::session::ClientSession::new(conn));
|
||||||
let actor_for_cleanup = actor.clone();
|
let actor_for_cleanup = actor.clone();
|
||||||
|
|
||||||
info!("Client authenticated successfully");
|
info!("Client authenticated successfully");
|
||||||
|
|||||||
@@ -1,20 +1,11 @@
|
|||||||
use arbiter_proto::{
|
use arbiter_proto::{
|
||||||
ClientMetadata,
|
ClientMetadata, proto::client::{
|
||||||
proto::{
|
AuthChallenge as ProtoAuthChallenge, AuthChallengeRequest as ProtoAuthChallengeRequest,
|
||||||
client::{
|
|
||||||
ClientRequest, ClientResponse,
|
|
||||||
auth::{
|
|
||||||
self as proto_auth, AuthChallenge as ProtoAuthChallenge,
|
|
||||||
AuthChallengeRequest as ProtoAuthChallengeRequest,
|
|
||||||
AuthChallengeSolution as ProtoAuthChallengeSolution, AuthResult as ProtoAuthResult,
|
AuthChallengeSolution as ProtoAuthChallengeSolution, AuthResult as ProtoAuthResult,
|
||||||
request::Payload as AuthRequestPayload, response::Payload as AuthResponsePayload,
|
ClientInfo as ProtoClientInfo, ClientRequest, ClientResponse,
|
||||||
},
|
|
||||||
client_request::Payload as ClientRequestPayload,
|
client_request::Payload as ClientRequestPayload,
|
||||||
client_response::Payload as ClientResponsePayload,
|
client_response::Payload as ClientResponsePayload,
|
||||||
},
|
}, transport::{Bi, Error as TransportError, Receiver, Sender, grpc::GrpcBi}
|
||||||
shared::ClientInfo as ProtoClientInfo,
|
|
||||||
},
|
|
||||||
transport::{Bi, Error as TransportError, Receiver, Sender, grpc::GrpcBi},
|
|
||||||
};
|
};
|
||||||
use async_trait::async_trait;
|
use async_trait::async_trait;
|
||||||
use tonic::Status;
|
use tonic::Status;
|
||||||
@@ -41,22 +32,22 @@ impl<'a> AuthTransportAdapter<'a> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn response_to_proto(response: auth::Outbound) -> AuthResponsePayload {
|
fn response_to_proto(response: auth::Outbound) -> ClientResponsePayload {
|
||||||
match response {
|
match response {
|
||||||
auth::Outbound::AuthChallenge { pubkey, nonce } => {
|
auth::Outbound::AuthChallenge { pubkey, nonce } => {
|
||||||
AuthResponsePayload::Challenge(ProtoAuthChallenge {
|
ClientResponsePayload::AuthChallenge(ProtoAuthChallenge {
|
||||||
pubkey: pubkey.to_bytes().to_vec(),
|
pubkey: pubkey.to_bytes().to_vec(),
|
||||||
nonce,
|
nonce,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
auth::Outbound::AuthSuccess => {
|
auth::Outbound::AuthSuccess => {
|
||||||
AuthResponsePayload::Result(ProtoAuthResult::Success.into())
|
ClientResponsePayload::AuthResult(ProtoAuthResult::Success.into())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn error_to_proto(error: auth::Error) -> AuthResponsePayload {
|
fn error_to_proto(error: auth::Error) -> ClientResponsePayload {
|
||||||
AuthResponsePayload::Result(
|
ClientResponsePayload::AuthResult(
|
||||||
match error {
|
match error {
|
||||||
auth::Error::InvalidChallengeSolution => ProtoAuthResult::InvalidSignature,
|
auth::Error::InvalidChallengeSolution => ProtoAuthResult::InvalidSignature,
|
||||||
auth::Error::ApproveError(auth::ApproveError::Denied) => {
|
auth::Error::ApproveError(auth::ApproveError::Denied) => {
|
||||||
@@ -76,20 +67,18 @@ impl<'a> AuthTransportAdapter<'a> {
|
|||||||
|
|
||||||
async fn send_client_response(
|
async fn send_client_response(
|
||||||
&mut self,
|
&mut self,
|
||||||
payload: AuthResponsePayload,
|
payload: ClientResponsePayload,
|
||||||
) -> Result<(), TransportError> {
|
) -> Result<(), TransportError> {
|
||||||
self.bi
|
self.bi
|
||||||
.send(Ok(ClientResponse {
|
.send(Ok(ClientResponse {
|
||||||
request_id: Some(self.request_tracker.current_request_id()),
|
request_id: Some(self.request_tracker.current_request_id()),
|
||||||
payload: Some(ClientResponsePayload::Auth(proto_auth::Response {
|
|
||||||
payload: Some(payload),
|
payload: Some(payload),
|
||||||
})),
|
|
||||||
}))
|
}))
|
||||||
.await
|
.await
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn send_auth_result(&mut self, result: ProtoAuthResult) -> Result<(), TransportError> {
|
async fn send_auth_result(&mut self, result: ProtoAuthResult) -> Result<(), TransportError> {
|
||||||
self.send_client_response(AuthResponsePayload::Result(result.into()))
|
self.send_client_response(ClientResponsePayload::AuthResult(result.into()))
|
||||||
.await
|
.await
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -128,25 +117,9 @@ impl Receiver<auth::Inbound> for AuthTransportAdapter<'_> {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
let payload = request.payload?;
|
let payload = request.payload?;
|
||||||
let ClientRequestPayload::Auth(auth_request) = payload else {
|
|
||||||
let _ = self
|
|
||||||
.bi
|
|
||||||
.send(Err(Status::invalid_argument(
|
|
||||||
"Unsupported client auth request",
|
|
||||||
)))
|
|
||||||
.await;
|
|
||||||
return None;
|
|
||||||
};
|
|
||||||
let Some(payload) = auth_request.payload else {
|
|
||||||
let _ = self
|
|
||||||
.bi
|
|
||||||
.send(Err(Status::invalid_argument("Missing client auth request payload")))
|
|
||||||
.await;
|
|
||||||
return None;
|
|
||||||
};
|
|
||||||
|
|
||||||
match payload {
|
match payload {
|
||||||
AuthRequestPayload::ChallengeRequest(ProtoAuthChallengeRequest {
|
ClientRequestPayload::AuthChallengeRequest(ProtoAuthChallengeRequest {
|
||||||
pubkey,
|
pubkey,
|
||||||
client_info,
|
client_info,
|
||||||
}) => {
|
}) => {
|
||||||
@@ -170,7 +143,7 @@ impl Receiver<auth::Inbound> for AuthTransportAdapter<'_> {
|
|||||||
metadata: client_metadata_from_proto(client_info),
|
metadata: client_metadata_from_proto(client_info),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
AuthRequestPayload::ChallengeSolution(ProtoAuthChallengeSolution {
|
ClientRequestPayload::AuthChallengeSolution(ProtoAuthChallengeSolution {
|
||||||
signature,
|
signature,
|
||||||
}) => {
|
}) => {
|
||||||
let Ok(signature) = ed25519_dalek::Signature::try_from(signature.as_slice()) else {
|
let Ok(signature) = ed25519_dalek::Signature::try_from(signature.as_slice()) else {
|
||||||
@@ -181,6 +154,15 @@ impl Receiver<auth::Inbound> for AuthTransportAdapter<'_> {
|
|||||||
};
|
};
|
||||||
Some(auth::Inbound::AuthChallengeSolution { signature })
|
Some(auth::Inbound::AuthChallengeSolution { signature })
|
||||||
}
|
}
|
||||||
|
_ => {
|
||||||
|
let _ = self
|
||||||
|
.bi
|
||||||
|
.send(Err(Status::invalid_argument(
|
||||||
|
"Unsupported client auth request",
|
||||||
|
)))
|
||||||
|
.await;
|
||||||
|
None
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -199,7 +181,8 @@ pub async fn start(
|
|||||||
conn: &mut ClientConnection,
|
conn: &mut ClientConnection,
|
||||||
bi: &mut GrpcBi<ClientRequest, ClientResponse>,
|
bi: &mut GrpcBi<ClientRequest, ClientResponse>,
|
||||||
request_tracker: &mut RequestTracker,
|
request_tracker: &mut RequestTracker,
|
||||||
) -> Result<i32, auth::Error> {
|
) -> Result<(), auth::Error> {
|
||||||
let mut transport = AuthTransportAdapter::new(bi, request_tracker);
|
let mut transport = AuthTransportAdapter::new(bi, request_tracker);
|
||||||
client::auth::authenticate(conn, &mut transport).await
|
client::auth::authenticate(conn, &mut transport).await?;
|
||||||
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,85 +0,0 @@
|
|||||||
use arbiter_proto::proto::{
|
|
||||||
client::{
|
|
||||||
client_response::Payload as ClientResponsePayload,
|
|
||||||
evm::{
|
|
||||||
self as proto_evm, request::Payload as EvmRequestPayload,
|
|
||||||
response::Payload as EvmResponsePayload,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
evm::{
|
|
||||||
EvmError as ProtoEvmError, EvmSignTransactionResponse,
|
|
||||||
evm_sign_transaction_response::Result as EvmSignTransactionResult,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
use kameo::actor::ActorRef;
|
|
||||||
use tonic::Status;
|
|
||||||
use tracing::warn;
|
|
||||||
|
|
||||||
use crate::{
|
|
||||||
actors::client::session::{ClientSession, HandleSignTransaction, SignTransactionRpcError},
|
|
||||||
grpc::{
|
|
||||||
Convert, TryConvert,
|
|
||||||
common::inbound::{RawEvmAddress, RawEvmTransaction},
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
fn wrap_response(payload: EvmResponsePayload) -> ClientResponsePayload {
|
|
||||||
ClientResponsePayload::Evm(proto_evm::Response {
|
|
||||||
payload: Some(payload),
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
pub(super) async fn dispatch(
|
|
||||||
actor: &ActorRef<ClientSession>,
|
|
||||||
req: proto_evm::Request,
|
|
||||||
) -> Result<ClientResponsePayload, Status> {
|
|
||||||
let Some(payload) = req.payload else {
|
|
||||||
return Err(Status::invalid_argument("Missing client EVM request payload"));
|
|
||||||
};
|
|
||||||
|
|
||||||
match payload {
|
|
||||||
EvmRequestPayload::SignTransaction(request) => {
|
|
||||||
let address = RawEvmAddress(request.wallet_address).try_convert()?;
|
|
||||||
let transaction = RawEvmTransaction(request.rlp_transaction).try_convert()?;
|
|
||||||
|
|
||||||
let response = match actor
|
|
||||||
.ask(HandleSignTransaction {
|
|
||||||
wallet_address: address,
|
|
||||||
transaction,
|
|
||||||
})
|
|
||||||
.await
|
|
||||||
{
|
|
||||||
Ok(signature) => EvmSignTransactionResponse {
|
|
||||||
result: Some(EvmSignTransactionResult::Signature(
|
|
||||||
signature.as_bytes().to_vec(),
|
|
||||||
)),
|
|
||||||
},
|
|
||||||
Err(kameo::error::SendError::HandlerError(SignTransactionRpcError::Vet(
|
|
||||||
vet_error,
|
|
||||||
))) => EvmSignTransactionResponse {
|
|
||||||
result: Some(vet_error.convert()),
|
|
||||||
},
|
|
||||||
Err(kameo::error::SendError::HandlerError(
|
|
||||||
SignTransactionRpcError::Internal,
|
|
||||||
)) => EvmSignTransactionResponse {
|
|
||||||
result: Some(EvmSignTransactionResult::Error(
|
|
||||||
ProtoEvmError::Internal.into(),
|
|
||||||
)),
|
|
||||||
},
|
|
||||||
Err(err) => {
|
|
||||||
warn!(error = ?err, "Failed to sign EVM transaction");
|
|
||||||
EvmSignTransactionResponse {
|
|
||||||
result: Some(EvmSignTransactionResult::Error(
|
|
||||||
ProtoEvmError::Internal.into(),
|
|
||||||
)),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
Ok(wrap_response(EvmResponsePayload::SignTransaction(response)))
|
|
||||||
}
|
|
||||||
EvmRequestPayload::AnalyzeTransaction(_) => {
|
|
||||||
Err(Status::unimplemented("EVM transaction analysis is not yet implemented"))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,47 +0,0 @@
|
|||||||
use arbiter_proto::proto::{
|
|
||||||
client::{
|
|
||||||
client_response::Payload as ClientResponsePayload,
|
|
||||||
vault::{
|
|
||||||
self as proto_vault, request::Payload as VaultRequestPayload,
|
|
||||||
response::Payload as VaultResponsePayload,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
shared::VaultState as ProtoVaultState,
|
|
||||||
};
|
|
||||||
use kameo::{actor::ActorRef, error::SendError};
|
|
||||||
use tonic::Status;
|
|
||||||
use tracing::warn;
|
|
||||||
|
|
||||||
use crate::{
|
|
||||||
actors::{
|
|
||||||
client::session::{ClientSession, Error, HandleQueryVaultState},
|
|
||||||
keyholder::KeyHolderState,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
pub(super) async fn dispatch(
|
|
||||||
actor: &ActorRef<ClientSession>,
|
|
||||||
req: proto_vault::Request,
|
|
||||||
) -> Result<ClientResponsePayload, Status> {
|
|
||||||
let Some(payload) = req.payload else {
|
|
||||||
return Err(Status::invalid_argument("Missing client vault request payload"));
|
|
||||||
};
|
|
||||||
|
|
||||||
match payload {
|
|
||||||
VaultRequestPayload::QueryState(_) => {
|
|
||||||
let state = match actor.ask(HandleQueryVaultState {}).await {
|
|
||||||
Ok(KeyHolderState::Unbootstrapped) => ProtoVaultState::Unbootstrapped,
|
|
||||||
Ok(KeyHolderState::Sealed) => ProtoVaultState::Sealed,
|
|
||||||
Ok(KeyHolderState::Unsealed) => ProtoVaultState::Unsealed,
|
|
||||||
Err(SendError::HandlerError(Error::Internal)) => ProtoVaultState::Error,
|
|
||||||
Err(err) => {
|
|
||||||
warn!(error = ?err, "Failed to query vault state");
|
|
||||||
ProtoVaultState::Error
|
|
||||||
}
|
|
||||||
};
|
|
||||||
Ok(ClientResponsePayload::Vault(proto_vault::Response {
|
|
||||||
payload: Some(VaultResponsePayload::State(state.into())),
|
|
||||||
}))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
pub mod inbound;
|
|
||||||
pub mod outbound;
|
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
use alloy::{consensus::TxEip1559, primitives::Address, rlp::Decodable as _};
|
|
||||||
|
|
||||||
use crate::grpc::TryConvert;
|
|
||||||
|
|
||||||
pub struct RawEvmAddress(pub Vec<u8>);
|
|
||||||
impl TryConvert for RawEvmAddress {
|
|
||||||
type Output = Address;
|
|
||||||
|
|
||||||
type Error = tonic::Status;
|
|
||||||
|
|
||||||
fn try_convert(self) -> Result<Self::Output, Self::Error> {
|
|
||||||
let wallet_address = match <[u8; 20]>::try_from(self.0.as_slice()) {
|
|
||||||
Ok(address) => Address::from(address),
|
|
||||||
Err(_) => {
|
|
||||||
return Err(tonic::Status::invalid_argument(
|
|
||||||
"Invalid EVM wallet address",
|
|
||||||
));
|
|
||||||
}
|
|
||||||
};
|
|
||||||
Ok(wallet_address)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub struct RawEvmTransaction(pub Vec<u8>);
|
|
||||||
impl TryConvert for RawEvmTransaction {
|
|
||||||
type Output = TxEip1559;
|
|
||||||
|
|
||||||
type Error = tonic::Status;
|
|
||||||
|
|
||||||
fn try_convert(self) -> Result<Self::Output, Self::Error> {
|
|
||||||
let tx = TxEip1559::decode(&mut self.0.as_slice()).map_err(|_| {
|
|
||||||
tonic::Status::invalid_argument("Invalid EVM transaction format")
|
|
||||||
})?;
|
|
||||||
Ok(tx)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,116 +0,0 @@
|
|||||||
use alloy::primitives::U256;
|
|
||||||
use arbiter_proto::proto::{
|
|
||||||
evm::{EvmError as ProtoEvmError, evm_sign_transaction_response::Result as EvmSignTransactionResult},
|
|
||||||
shared::evm::{
|
|
||||||
EvalViolation as ProtoEvalViolation, GasLimitExceededViolation,
|
|
||||||
NoMatchingGrantError, PolicyViolationsError, SpecificMeaning as ProtoSpecificMeaning,
|
|
||||||
TokenInfo as ProtoTokenInfo, TransactionEvalError as ProtoTransactionEvalError,
|
|
||||||
eval_violation::Kind as ProtoEvalViolationKind,
|
|
||||||
specific_meaning::Meaning as ProtoSpecificMeaningKind,
|
|
||||||
transaction_eval_error::Kind as ProtoTransactionEvalErrorKind,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
use crate::{
|
|
||||||
evm::{
|
|
||||||
PolicyError, VetError,
|
|
||||||
policies::{EvalViolation, SpecificMeaning},
|
|
||||||
},
|
|
||||||
grpc::Convert,
|
|
||||||
};
|
|
||||||
|
|
||||||
fn u256_to_proto_bytes(value: U256) -> Vec<u8> {
|
|
||||||
value.to_be_bytes::<32>().to_vec()
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Convert for SpecificMeaning {
|
|
||||||
type Output = ProtoSpecificMeaning;
|
|
||||||
|
|
||||||
fn convert(self) -> Self::Output {
|
|
||||||
let kind = match self {
|
|
||||||
SpecificMeaning::EtherTransfer(meaning) => ProtoSpecificMeaningKind::EtherTransfer(
|
|
||||||
arbiter_proto::proto::shared::evm::EtherTransferMeaning {
|
|
||||||
to: meaning.to.to_vec(),
|
|
||||||
value: u256_to_proto_bytes(meaning.value),
|
|
||||||
},
|
|
||||||
),
|
|
||||||
SpecificMeaning::TokenTransfer(meaning) => ProtoSpecificMeaningKind::TokenTransfer(
|
|
||||||
arbiter_proto::proto::shared::evm::TokenTransferMeaning {
|
|
||||||
token: Some(ProtoTokenInfo {
|
|
||||||
symbol: meaning.token.symbol.to_string(),
|
|
||||||
address: meaning.token.contract.to_vec(),
|
|
||||||
chain_id: meaning.token.chain,
|
|
||||||
}),
|
|
||||||
to: meaning.to.to_vec(),
|
|
||||||
value: u256_to_proto_bytes(meaning.value),
|
|
||||||
},
|
|
||||||
),
|
|
||||||
};
|
|
||||||
|
|
||||||
ProtoSpecificMeaning {
|
|
||||||
meaning: Some(kind),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Convert for EvalViolation {
|
|
||||||
type Output = ProtoEvalViolation;
|
|
||||||
|
|
||||||
fn convert(self) -> Self::Output {
|
|
||||||
let kind = match self {
|
|
||||||
EvalViolation::InvalidTarget { target } => {
|
|
||||||
ProtoEvalViolationKind::InvalidTarget(target.to_vec())
|
|
||||||
}
|
|
||||||
EvalViolation::GasLimitExceeded {
|
|
||||||
max_gas_fee_per_gas,
|
|
||||||
max_priority_fee_per_gas,
|
|
||||||
} => ProtoEvalViolationKind::GasLimitExceeded(GasLimitExceededViolation {
|
|
||||||
max_gas_fee_per_gas: max_gas_fee_per_gas.map(u256_to_proto_bytes),
|
|
||||||
max_priority_fee_per_gas: max_priority_fee_per_gas.map(u256_to_proto_bytes),
|
|
||||||
}),
|
|
||||||
EvalViolation::RateLimitExceeded => ProtoEvalViolationKind::RateLimitExceeded(()),
|
|
||||||
EvalViolation::VolumetricLimitExceeded => {
|
|
||||||
ProtoEvalViolationKind::VolumetricLimitExceeded(())
|
|
||||||
}
|
|
||||||
EvalViolation::InvalidTime => ProtoEvalViolationKind::InvalidTime(()),
|
|
||||||
EvalViolation::InvalidTransactionType => {
|
|
||||||
ProtoEvalViolationKind::InvalidTransactionType(())
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
ProtoEvalViolation { kind: Some(kind) }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Convert for VetError {
|
|
||||||
type Output = EvmSignTransactionResult;
|
|
||||||
|
|
||||||
fn convert(self) -> Self::Output {
|
|
||||||
let kind = match self {
|
|
||||||
VetError::ContractCreationNotSupported => {
|
|
||||||
ProtoTransactionEvalErrorKind::ContractCreationNotSupported(())
|
|
||||||
}
|
|
||||||
VetError::UnsupportedTransactionType => {
|
|
||||||
ProtoTransactionEvalErrorKind::UnsupportedTransactionType(())
|
|
||||||
}
|
|
||||||
VetError::Evaluated(meaning, policy_error) => match policy_error {
|
|
||||||
PolicyError::NoMatchingGrant => {
|
|
||||||
ProtoTransactionEvalErrorKind::NoMatchingGrant(NoMatchingGrantError {
|
|
||||||
meaning: Some(meaning.convert()),
|
|
||||||
})
|
|
||||||
}
|
|
||||||
PolicyError::Violations(violations) => {
|
|
||||||
ProtoTransactionEvalErrorKind::PolicyViolations(PolicyViolationsError {
|
|
||||||
meaning: Some(meaning.convert()),
|
|
||||||
violations: violations.into_iter().map(Convert::convert).collect(),
|
|
||||||
})
|
|
||||||
}
|
|
||||||
PolicyError::Database(_) => {
|
|
||||||
return EvmSignTransactionResult::Error(ProtoEvmError::Internal.into());
|
|
||||||
}
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
EvmSignTransactionResult::EvalError(ProtoTransactionEvalError { kind: Some(kind) }.into())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -14,13 +14,10 @@ use crate::{
|
|||||||
grpc::user_agent::start,
|
grpc::user_agent::start,
|
||||||
};
|
};
|
||||||
|
|
||||||
mod request_tracker;
|
|
||||||
|
|
||||||
pub mod client;
|
pub mod client;
|
||||||
|
mod request_tracker;
|
||||||
pub mod user_agent;
|
pub mod user_agent;
|
||||||
|
|
||||||
mod common;
|
|
||||||
|
|
||||||
pub trait Convert {
|
pub trait Convert {
|
||||||
type Output;
|
type Output;
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,29 @@ use tokio::sync::mpsc;
|
|||||||
|
|
||||||
use arbiter_proto::{
|
use arbiter_proto::{
|
||||||
proto::{
|
proto::{
|
||||||
|
client::ClientInfo as ProtoClientMetadata,
|
||||||
|
evm::{
|
||||||
|
EvmError as ProtoEvmError, EvmGrantCreateRequest, EvmGrantCreateResponse,
|
||||||
|
EvmGrantDeleteRequest, EvmGrantDeleteResponse, EvmGrantList, EvmGrantListResponse,
|
||||||
|
GrantEntry, WalletCreateResponse, WalletEntry, WalletList, WalletListResponse,
|
||||||
|
evm_grant_create_response::Result as EvmGrantCreateResult,
|
||||||
|
evm_grant_delete_response::Result as EvmGrantDeleteResult,
|
||||||
|
evm_grant_list_response::Result as EvmGrantListResult,
|
||||||
|
wallet_create_response::Result as WalletCreateResult,
|
||||||
|
wallet_list_response::Result as WalletListResult,
|
||||||
|
},
|
||||||
user_agent::{
|
user_agent::{
|
||||||
UserAgentRequest, UserAgentResponse,
|
BootstrapEncryptedKey as ProtoBootstrapEncryptedKey,
|
||||||
|
BootstrapResult as ProtoBootstrapResult, ListWalletAccessResponse,
|
||||||
|
SdkClientConnectionCancel as ProtoSdkClientConnectionCancel,
|
||||||
|
SdkClientConnectionRequest as ProtoSdkClientConnectionRequest,
|
||||||
|
SdkClientEntry as ProtoSdkClientEntry, SdkClientError as ProtoSdkClientError,
|
||||||
|
SdkClientGrantWalletAccess, SdkClientList as ProtoSdkClientList,
|
||||||
|
SdkClientListResponse as ProtoSdkClientListResponse, SdkClientRevokeWalletAccess,
|
||||||
|
SdkClientWalletAccess, UnsealEncryptedKey as ProtoUnsealEncryptedKey,
|
||||||
|
UnsealResult as ProtoUnsealResult, UnsealStart, UserAgentRequest, UserAgentResponse,
|
||||||
|
VaultState as ProtoVaultState,
|
||||||
|
sdk_client_list_response::Result as ProtoSdkClientListResult,
|
||||||
user_agent_request::Payload as UserAgentRequestPayload,
|
user_agent_request::Payload as UserAgentRequestPayload,
|
||||||
user_agent_response::Payload as UserAgentResponsePayload,
|
user_agent_response::Payload as UserAgentResponsePayload,
|
||||||
},
|
},
|
||||||
@@ -11,20 +32,33 @@ use arbiter_proto::{
|
|||||||
transport::{Error as TransportError, Receiver, Sender, grpc::GrpcBi},
|
transport::{Error as TransportError, Receiver, Sender, grpc::GrpcBi},
|
||||||
};
|
};
|
||||||
use async_trait::async_trait;
|
use async_trait::async_trait;
|
||||||
use kameo::actor::{ActorRef, Spawn as _};
|
use kameo::{
|
||||||
|
actor::{ActorRef, Spawn as _},
|
||||||
|
error::SendError,
|
||||||
|
};
|
||||||
use tonic::Status;
|
use tonic::Status;
|
||||||
use tracing::{error, info, warn};
|
use tracing::{error, info, warn};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
actors::user_agent::{OutOfBand, UserAgentConnection, UserAgentSession},
|
actors::{
|
||||||
grpc::request_tracker::RequestTracker,
|
keyholder::KeyHolderState,
|
||||||
|
user_agent::{
|
||||||
|
OutOfBand, UserAgentConnection, UserAgentSession,
|
||||||
|
session::connection::{
|
||||||
|
BootstrapError, HandleBootstrapEncryptedKey, HandleEvmWalletCreate,
|
||||||
|
HandleEvmWalletList, HandleGrantCreate, HandleGrantDelete,
|
||||||
|
HandleGrantEvmWalletAccess, HandleGrantList, HandleListWalletAccess,
|
||||||
|
HandleNewClientApprove, HandleQueryVaultState, HandleRevokeEvmWalletAccess,
|
||||||
|
HandleSdkClientList, HandleUnsealEncryptedKey, HandleUnsealRequest, UnsealError,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
db::models::{CoreEvmWalletAccess, NewEvmWalletAccess},
|
||||||
|
grpc::{Convert, TryConvert, request_tracker::RequestTracker},
|
||||||
};
|
};
|
||||||
mod auth;
|
mod auth;
|
||||||
mod evm;
|
|
||||||
mod inbound;
|
mod inbound;
|
||||||
mod outbound;
|
mod outbound;
|
||||||
mod sdk_client;
|
|
||||||
mod vault;
|
|
||||||
|
|
||||||
pub struct OutOfBandAdapter(mpsc::Sender<OutOfBand>);
|
pub struct OutOfBandAdapter(mpsc::Sender<OutOfBand>);
|
||||||
|
|
||||||
@@ -52,7 +86,23 @@ async fn dispatch_loop(
|
|||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
|
|
||||||
let payload = sdk_client::out_of_band_payload(oob);
|
let payload = match oob {
|
||||||
|
OutOfBand::ClientConnectionRequest { profile } => {
|
||||||
|
UserAgentResponsePayload::SdkClientConnectionRequest(ProtoSdkClientConnectionRequest {
|
||||||
|
pubkey: profile.pubkey.to_bytes().to_vec(),
|
||||||
|
info: Some(ProtoClientMetadata {
|
||||||
|
name: profile.metadata.name,
|
||||||
|
description: profile.metadata.description,
|
||||||
|
version: profile.metadata.version,
|
||||||
|
}),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
OutOfBand::ClientConnectionCancel { pubkey } => {
|
||||||
|
UserAgentResponsePayload::SdkClientConnectionCancel(ProtoSdkClientConnectionCancel {
|
||||||
|
pubkey: pubkey.to_bytes().to_vec(),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
if bi.send(Ok(UserAgentResponse { id: None, payload: Some(payload) })).await.is_err() {
|
if bi.send(Ok(UserAgentResponse { id: None, payload: Some(payload) })).await.is_err() {
|
||||||
return;
|
return;
|
||||||
@@ -108,17 +158,287 @@ async fn dispatch_inner(
|
|||||||
actor: &ActorRef<UserAgentSession>,
|
actor: &ActorRef<UserAgentSession>,
|
||||||
payload: UserAgentRequestPayload,
|
payload: UserAgentRequestPayload,
|
||||||
) -> Result<Option<UserAgentResponsePayload>, Status> {
|
) -> Result<Option<UserAgentResponsePayload>, Status> {
|
||||||
match payload {
|
let response = match payload {
|
||||||
UserAgentRequestPayload::Vault(req) => vault::dispatch(actor, req).await,
|
UserAgentRequestPayload::UnsealStart(UnsealStart { client_pubkey }) => {
|
||||||
UserAgentRequestPayload::Evm(req) => evm::dispatch(actor, req).await,
|
let client_pubkey = <[u8; 32]>::try_from(client_pubkey)
|
||||||
UserAgentRequestPayload::SdkClient(req) => sdk_client::dispatch(actor, req).await,
|
.map(x25519_dalek::PublicKey::from)
|
||||||
UserAgentRequestPayload::Auth(..) => {
|
.map_err(|_| Status::invalid_argument("Invalid X25519 public key"))?;
|
||||||
warn!("Unsupported post-auth user agent auth request");
|
|
||||||
Err(Status::invalid_argument("Unsupported user-agent request"))
|
let response = actor
|
||||||
|
.ask(HandleUnsealRequest { client_pubkey })
|
||||||
|
.await
|
||||||
|
.map_err(|err| {
|
||||||
|
warn!(error = ?err, "Failed to handle unseal start request");
|
||||||
|
Status::internal("Failed to start unseal flow")
|
||||||
|
})?;
|
||||||
|
|
||||||
|
UserAgentResponsePayload::UnsealStartResponse(
|
||||||
|
arbiter_proto::proto::user_agent::UnsealStartResponse {
|
||||||
|
server_pubkey: response.server_pubkey.as_bytes().to_vec(),
|
||||||
|
},
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
UserAgentRequestPayload::UnsealEncryptedKey(ProtoUnsealEncryptedKey {
|
||||||
|
nonce,
|
||||||
|
ciphertext,
|
||||||
|
associated_data,
|
||||||
|
}) => {
|
||||||
|
let result = match actor
|
||||||
|
.ask(HandleUnsealEncryptedKey {
|
||||||
|
nonce,
|
||||||
|
ciphertext,
|
||||||
|
associated_data,
|
||||||
|
})
|
||||||
|
.await
|
||||||
|
{
|
||||||
|
Ok(()) => ProtoUnsealResult::Success,
|
||||||
|
Err(SendError::HandlerError(UnsealError::InvalidKey)) => {
|
||||||
|
ProtoUnsealResult::InvalidKey
|
||||||
|
}
|
||||||
|
Err(err) => {
|
||||||
|
warn!(error = ?err, "Failed to handle unseal request");
|
||||||
|
return Err(Status::internal("Failed to unseal vault"));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
UserAgentResponsePayload::UnsealResult(result.into())
|
||||||
|
}
|
||||||
|
|
||||||
|
UserAgentRequestPayload::BootstrapEncryptedKey(ProtoBootstrapEncryptedKey {
|
||||||
|
nonce,
|
||||||
|
ciphertext,
|
||||||
|
associated_data,
|
||||||
|
}) => {
|
||||||
|
let result = match actor
|
||||||
|
.ask(HandleBootstrapEncryptedKey {
|
||||||
|
nonce,
|
||||||
|
ciphertext,
|
||||||
|
associated_data,
|
||||||
|
})
|
||||||
|
.await
|
||||||
|
{
|
||||||
|
Ok(()) => ProtoBootstrapResult::Success,
|
||||||
|
Err(SendError::HandlerError(BootstrapError::InvalidKey)) => {
|
||||||
|
ProtoBootstrapResult::InvalidKey
|
||||||
|
}
|
||||||
|
Err(SendError::HandlerError(BootstrapError::AlreadyBootstrapped)) => {
|
||||||
|
ProtoBootstrapResult::AlreadyBootstrapped
|
||||||
|
}
|
||||||
|
Err(err) => {
|
||||||
|
warn!(error = ?err, "Failed to handle bootstrap request");
|
||||||
|
return Err(Status::internal("Failed to bootstrap vault"));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
UserAgentResponsePayload::BootstrapResult(result.into())
|
||||||
|
}
|
||||||
|
|
||||||
|
UserAgentRequestPayload::QueryVaultState(_) => {
|
||||||
|
let state = match actor.ask(HandleQueryVaultState {}).await {
|
||||||
|
Ok(KeyHolderState::Unbootstrapped) => ProtoVaultState::Unbootstrapped,
|
||||||
|
Ok(KeyHolderState::Sealed) => ProtoVaultState::Sealed,
|
||||||
|
Ok(KeyHolderState::Unsealed) => ProtoVaultState::Unsealed,
|
||||||
|
Err(err) => {
|
||||||
|
warn!(error = ?err, "Failed to query vault state");
|
||||||
|
ProtoVaultState::Error
|
||||||
|
}
|
||||||
|
};
|
||||||
|
UserAgentResponsePayload::VaultState(state.into())
|
||||||
|
}
|
||||||
|
|
||||||
|
UserAgentRequestPayload::EvmWalletCreate(_) => {
|
||||||
|
let result = match actor.ask(HandleEvmWalletCreate {}).await {
|
||||||
|
Ok((wallet_id, address)) => WalletCreateResult::Wallet(WalletEntry {
|
||||||
|
id: wallet_id,
|
||||||
|
address: address.to_vec(),
|
||||||
|
}),
|
||||||
|
Err(err) => {
|
||||||
|
warn!(error = ?err, "Failed to create EVM wallet");
|
||||||
|
WalletCreateResult::Error(ProtoEvmError::Internal.into())
|
||||||
|
}
|
||||||
|
};
|
||||||
|
UserAgentResponsePayload::EvmWalletCreate(WalletCreateResponse {
|
||||||
|
result: Some(result),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
UserAgentRequestPayload::EvmWalletList(_) => {
|
||||||
|
let result = match actor.ask(HandleEvmWalletList {}).await {
|
||||||
|
Ok(wallets) => WalletListResult::Wallets(WalletList {
|
||||||
|
wallets: wallets
|
||||||
|
.into_iter()
|
||||||
|
.map(|(id, address)| WalletEntry {
|
||||||
|
address: address.to_vec(),
|
||||||
|
id,
|
||||||
|
})
|
||||||
|
.collect(),
|
||||||
|
}),
|
||||||
|
Err(err) => {
|
||||||
|
warn!(error = ?err, "Failed to list EVM wallets");
|
||||||
|
WalletListResult::Error(ProtoEvmError::Internal.into())
|
||||||
|
}
|
||||||
|
};
|
||||||
|
UserAgentResponsePayload::EvmWalletList(WalletListResponse {
|
||||||
|
result: Some(result),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
UserAgentRequestPayload::EvmGrantList(_) => {
|
||||||
|
let result = match actor.ask(HandleGrantList {}).await {
|
||||||
|
Ok(grants) => EvmGrantListResult::Grants(EvmGrantList {
|
||||||
|
grants: grants
|
||||||
|
.into_iter()
|
||||||
|
.map(|grant| GrantEntry {
|
||||||
|
id: grant.id,
|
||||||
|
wallet_access_id: grant.shared.wallet_access_id,
|
||||||
|
shared: Some(grant.shared.convert()),
|
||||||
|
specific: Some(grant.settings.convert()),
|
||||||
|
})
|
||||||
|
.collect(),
|
||||||
|
}),
|
||||||
|
Err(err) => {
|
||||||
|
warn!(error = ?err, "Failed to list EVM grants");
|
||||||
|
EvmGrantListResult::Error(ProtoEvmError::Internal.into())
|
||||||
|
}
|
||||||
|
};
|
||||||
|
UserAgentResponsePayload::EvmGrantList(EvmGrantListResponse {
|
||||||
|
result: Some(result),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
UserAgentRequestPayload::EvmGrantCreate(EvmGrantCreateRequest { shared, specific }) => {
|
||||||
|
let basic = shared
|
||||||
|
.ok_or_else(|| Status::invalid_argument("Missing shared grant settings"))?
|
||||||
|
.try_convert()?;
|
||||||
|
let grant = specific
|
||||||
|
.ok_or_else(|| Status::invalid_argument("Missing specific grant settings"))?
|
||||||
|
.try_convert()?;
|
||||||
|
|
||||||
|
let result = match actor.ask(HandleGrantCreate { basic, grant }).await {
|
||||||
|
Ok(grant_id) => EvmGrantCreateResult::GrantId(grant_id),
|
||||||
|
Err(err) => {
|
||||||
|
warn!(error = ?err, "Failed to create EVM grant");
|
||||||
|
EvmGrantCreateResult::Error(ProtoEvmError::Internal.into())
|
||||||
|
}
|
||||||
|
};
|
||||||
|
UserAgentResponsePayload::EvmGrantCreate(EvmGrantCreateResponse {
|
||||||
|
result: Some(result),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
UserAgentRequestPayload::EvmGrantDelete(EvmGrantDeleteRequest { grant_id }) => {
|
||||||
|
let result = match actor.ask(HandleGrantDelete { grant_id }).await {
|
||||||
|
Ok(()) => EvmGrantDeleteResult::Ok(()),
|
||||||
|
Err(err) => {
|
||||||
|
warn!(error = ?err, "Failed to delete EVM grant");
|
||||||
|
EvmGrantDeleteResult::Error(ProtoEvmError::Internal.into())
|
||||||
|
}
|
||||||
|
};
|
||||||
|
UserAgentResponsePayload::EvmGrantDelete(EvmGrantDeleteResponse {
|
||||||
|
result: Some(result),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
UserAgentRequestPayload::SdkClientConnectionResponse(resp) => {
|
||||||
|
let pubkey_bytes = <[u8; 32]>::try_from(resp.pubkey)
|
||||||
|
.map_err(|_| Status::invalid_argument("Invalid Ed25519 public key length"))?;
|
||||||
|
let pubkey = ed25519_dalek::VerifyingKey::from_bytes(&pubkey_bytes)
|
||||||
|
.map_err(|_| Status::invalid_argument("Invalid Ed25519 public key"))?;
|
||||||
|
|
||||||
|
actor
|
||||||
|
.ask(HandleNewClientApprove {
|
||||||
|
approved: resp.approved,
|
||||||
|
pubkey,
|
||||||
|
})
|
||||||
|
.await
|
||||||
|
.map_err(|err| {
|
||||||
|
warn!(?err, "Failed to process client connection response");
|
||||||
|
Status::internal("Failed to process response")
|
||||||
|
})?;
|
||||||
|
|
||||||
|
return Ok(None);
|
||||||
|
}
|
||||||
|
|
||||||
|
UserAgentRequestPayload::SdkClientRevoke(_) => todo!(),
|
||||||
|
|
||||||
|
UserAgentRequestPayload::SdkClientList(_) => {
|
||||||
|
let result = match actor.ask(HandleSdkClientList {}).await {
|
||||||
|
Ok(clients) => ProtoSdkClientListResult::Clients(ProtoSdkClientList {
|
||||||
|
clients: clients
|
||||||
|
.into_iter()
|
||||||
|
.map(|(client, metadata)| ProtoSdkClientEntry {
|
||||||
|
id: client.id,
|
||||||
|
pubkey: client.public_key,
|
||||||
|
info: Some(ProtoClientMetadata {
|
||||||
|
name: metadata.name,
|
||||||
|
description: metadata.description,
|
||||||
|
version: metadata.version,
|
||||||
|
}),
|
||||||
|
created_at: client.created_at.0.timestamp() as i32,
|
||||||
|
})
|
||||||
|
.collect(),
|
||||||
|
}),
|
||||||
|
Err(err) => {
|
||||||
|
warn!(error = ?err, "Failed to list SDK clients");
|
||||||
|
ProtoSdkClientListResult::Error(ProtoSdkClientError::Internal.into())
|
||||||
|
}
|
||||||
|
};
|
||||||
|
UserAgentResponsePayload::SdkClientListResponse(ProtoSdkClientListResponse {
|
||||||
|
result: Some(result),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
UserAgentRequestPayload::GrantWalletAccess(SdkClientGrantWalletAccess { accesses }) => {
|
||||||
|
let entries: Vec<NewEvmWalletAccess> =
|
||||||
|
accesses.into_iter().map(|a| a.convert()).collect();
|
||||||
|
|
||||||
|
match actor.ask(HandleGrantEvmWalletAccess { entries }).await {
|
||||||
|
Ok(()) => {
|
||||||
|
info!("Successfully granted wallet access");
|
||||||
|
return Ok(None);
|
||||||
|
}
|
||||||
|
Err(err) => {
|
||||||
|
warn!(error = ?err, "Failed to grant wallet access");
|
||||||
|
return Err(Status::internal("Failed to grant wallet access"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
UserAgentRequestPayload::RevokeWalletAccess(SdkClientRevokeWalletAccess { accesses }) => {
|
||||||
|
match actor.ask(HandleRevokeEvmWalletAccess { entries: accesses }).await {
|
||||||
|
Ok(()) => {
|
||||||
|
info!("Successfully revoked wallet access");
|
||||||
|
return Ok(None);
|
||||||
|
}
|
||||||
|
Err(err) => {
|
||||||
|
warn!(error = ?err, "Failed to revoke wallet access");
|
||||||
|
return Err(Status::internal("Failed to revoke wallet access"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
UserAgentRequestPayload::ListWalletAccess(_) => {
|
||||||
|
let result = match actor.ask(HandleListWalletAccess {}).await {
|
||||||
|
Ok(accesses) => ListWalletAccessResponse {
|
||||||
|
accesses: accesses.into_iter().map(|a| a.convert()).collect(),
|
||||||
|
},
|
||||||
|
Err(err) => {
|
||||||
|
warn!(error = ?err, "Failed to list wallet access");
|
||||||
|
return Err(Status::internal("Failed to list wallet access"));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
UserAgentResponsePayload::ListWalletAccessResponse(result)
|
||||||
|
}
|
||||||
|
|
||||||
|
UserAgentRequestPayload::AuthChallengeRequest(..)
|
||||||
|
| UserAgentRequestPayload::AuthChallengeSolution(..) => {
|
||||||
|
warn!(?payload, "Unsupported post-auth user agent request");
|
||||||
|
return Err(Status::invalid_argument("Unsupported user-agent request"));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Ok(Some(response))
|
||||||
|
}
|
||||||
|
|
||||||
pub async fn start(
|
pub async fn start(
|
||||||
mut conn: UserAgentConnection,
|
mut conn: UserAgentConnection,
|
||||||
mut bi: GrpcBi<UserAgentRequest, UserAgentResponse>,
|
mut bi: GrpcBi<UserAgentRequest, UserAgentResponse>,
|
||||||
|
|||||||
@@ -1,12 +1,9 @@
|
|||||||
use arbiter_proto::{
|
use arbiter_proto::{
|
||||||
proto::user_agent::{
|
proto::user_agent::{
|
||||||
UserAgentRequest, UserAgentResponse, auth::{
|
AuthChallenge as ProtoAuthChallenge, AuthChallengeRequest as ProtoAuthChallengeRequest,
|
||||||
self as proto_auth, AuthChallenge as ProtoAuthChallenge,
|
|
||||||
AuthChallengeRequest as ProtoAuthChallengeRequest,
|
|
||||||
AuthChallengeSolution as ProtoAuthChallengeSolution, AuthResult as ProtoAuthResult,
|
AuthChallengeSolution as ProtoAuthChallengeSolution, AuthResult as ProtoAuthResult,
|
||||||
KeyType as ProtoKeyType, request::Payload as AuthRequestPayload,
|
KeyType as ProtoKeyType, UserAgentRequest, UserAgentResponse,
|
||||||
response::Payload as AuthResponsePayload,
|
user_agent_request::Payload as UserAgentRequestPayload,
|
||||||
}, user_agent_request::Payload as UserAgentRequestPayload,
|
|
||||||
user_agent_response::Payload as UserAgentResponsePayload,
|
user_agent_response::Payload as UserAgentResponsePayload,
|
||||||
},
|
},
|
||||||
transport::{Bi, Error as TransportError, Receiver, Sender, grpc::GrpcBi},
|
transport::{Bi, Error as TransportError, Receiver, Sender, grpc::GrpcBi},
|
||||||
@@ -39,14 +36,12 @@ impl<'a> AuthTransportAdapter<'a> {
|
|||||||
|
|
||||||
async fn send_user_agent_response(
|
async fn send_user_agent_response(
|
||||||
&mut self,
|
&mut self,
|
||||||
payload: AuthResponsePayload,
|
payload: UserAgentResponsePayload,
|
||||||
) -> Result<(), TransportError> {
|
) -> Result<(), TransportError> {
|
||||||
self.bi
|
self.bi
|
||||||
.send(Ok(UserAgentResponse {
|
.send(Ok(UserAgentResponse {
|
||||||
id: Some(self.request_tracker.current_request_id()),
|
id: Some(self.request_tracker.current_request_id()),
|
||||||
payload: Some(UserAgentResponsePayload::Auth(proto_auth::Response {
|
|
||||||
payload: Some(payload),
|
payload: Some(payload),
|
||||||
})),
|
|
||||||
}))
|
}))
|
||||||
.await
|
.await
|
||||||
}
|
}
|
||||||
@@ -61,17 +56,19 @@ impl Sender<Result<auth::Outbound, auth::Error>> for AuthTransportAdapter<'_> {
|
|||||||
use auth::{Error, Outbound};
|
use auth::{Error, Outbound};
|
||||||
let payload = match item {
|
let payload = match item {
|
||||||
Ok(Outbound::AuthChallenge { nonce }) => {
|
Ok(Outbound::AuthChallenge { nonce }) => {
|
||||||
AuthResponsePayload::Challenge(ProtoAuthChallenge { nonce })
|
UserAgentResponsePayload::AuthChallenge(ProtoAuthChallenge { nonce })
|
||||||
|
}
|
||||||
|
Ok(Outbound::AuthSuccess) => {
|
||||||
|
UserAgentResponsePayload::AuthResult(ProtoAuthResult::Success.into())
|
||||||
}
|
}
|
||||||
Ok(Outbound::AuthSuccess) => AuthResponsePayload::Result(ProtoAuthResult::Success.into()),
|
|
||||||
Err(Error::UnregisteredPublicKey) => {
|
Err(Error::UnregisteredPublicKey) => {
|
||||||
AuthResponsePayload::Result(ProtoAuthResult::InvalidKey.into())
|
UserAgentResponsePayload::AuthResult(ProtoAuthResult::InvalidKey.into())
|
||||||
}
|
}
|
||||||
Err(Error::InvalidChallengeSolution) => {
|
Err(Error::InvalidChallengeSolution) => {
|
||||||
AuthResponsePayload::Result(ProtoAuthResult::InvalidSignature.into())
|
UserAgentResponsePayload::AuthResult(ProtoAuthResult::InvalidSignature.into())
|
||||||
}
|
}
|
||||||
Err(Error::InvalidBootstrapToken) => {
|
Err(Error::InvalidBootstrapToken) => {
|
||||||
AuthResponsePayload::Result(ProtoAuthResult::TokenInvalid.into())
|
UserAgentResponsePayload::AuthResult(ProtoAuthResult::TokenInvalid.into())
|
||||||
}
|
}
|
||||||
Err(Error::Internal { details }) => {
|
Err(Error::Internal { details }) => {
|
||||||
return self.bi.send(Err(Status::internal(details))).await;
|
return self.bi.send(Err(Status::internal(details))).await;
|
||||||
@@ -115,26 +112,8 @@ impl Receiver<auth::Inbound> for AuthTransportAdapter<'_> {
|
|||||||
return None;
|
return None;
|
||||||
};
|
};
|
||||||
|
|
||||||
let UserAgentRequestPayload::Auth(auth_request) = payload else {
|
|
||||||
let _ = self
|
|
||||||
.bi
|
|
||||||
.send(Err(Status::invalid_argument(
|
|
||||||
"Unsupported user-agent auth request",
|
|
||||||
)))
|
|
||||||
.await;
|
|
||||||
return None;
|
|
||||||
};
|
|
||||||
|
|
||||||
let Some(payload) = auth_request.payload else {
|
|
||||||
warn!(
|
|
||||||
event = "received auth request with empty payload",
|
|
||||||
"grpc.useragent.auth_adapter"
|
|
||||||
);
|
|
||||||
return None;
|
|
||||||
};
|
|
||||||
|
|
||||||
match payload {
|
match payload {
|
||||||
AuthRequestPayload::ChallengeRequest(ProtoAuthChallengeRequest {
|
UserAgentRequestPayload::AuthChallengeRequest(ProtoAuthChallengeRequest {
|
||||||
pubkey,
|
pubkey,
|
||||||
bootstrap_token,
|
bootstrap_token,
|
||||||
key_type,
|
key_type,
|
||||||
@@ -171,9 +150,18 @@ impl Receiver<auth::Inbound> for AuthTransportAdapter<'_> {
|
|||||||
bootstrap_token,
|
bootstrap_token,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
AuthRequestPayload::ChallengeSolution(ProtoAuthChallengeSolution {
|
UserAgentRequestPayload::AuthChallengeSolution(ProtoAuthChallengeSolution {
|
||||||
signature,
|
signature,
|
||||||
}) => Some(auth::Inbound::AuthChallengeSolution { signature }),
|
}) => Some(auth::Inbound::AuthChallengeSolution { signature }),
|
||||||
|
_ => {
|
||||||
|
let _ = self
|
||||||
|
.bi
|
||||||
|
.send(Err(Status::invalid_argument(
|
||||||
|
"Unsupported user-agent auth request",
|
||||||
|
)))
|
||||||
|
.await;
|
||||||
|
None
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,230 +0,0 @@
|
|||||||
use arbiter_proto::proto::{
|
|
||||||
evm::{
|
|
||||||
EvmError as ProtoEvmError, EvmGrantCreateRequest, EvmGrantCreateResponse,
|
|
||||||
EvmGrantDeleteRequest, EvmGrantDeleteResponse, EvmGrantList, EvmGrantListResponse,
|
|
||||||
EvmSignTransactionResponse, GrantEntry, WalletCreateResponse, WalletEntry, WalletList,
|
|
||||||
WalletListResponse,
|
|
||||||
evm_grant_create_response::Result as EvmGrantCreateResult,
|
|
||||||
evm_grant_delete_response::Result as EvmGrantDeleteResult,
|
|
||||||
evm_grant_list_response::Result as EvmGrantListResult,
|
|
||||||
evm_sign_transaction_response::Result as EvmSignTransactionResult,
|
|
||||||
wallet_create_response::Result as WalletCreateResult,
|
|
||||||
wallet_list_response::Result as WalletListResult,
|
|
||||||
},
|
|
||||||
user_agent::{
|
|
||||||
evm::{
|
|
||||||
self as proto_evm, SignTransactionRequest as ProtoSignTransactionRequest,
|
|
||||||
request::Payload as EvmRequestPayload, response::Payload as EvmResponsePayload,
|
|
||||||
},
|
|
||||||
user_agent_response::Payload as UserAgentResponsePayload,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
use kameo::actor::ActorRef;
|
|
||||||
use tonic::Status;
|
|
||||||
use tracing::warn;
|
|
||||||
|
|
||||||
use crate::{
|
|
||||||
actors::user_agent::{
|
|
||||||
UserAgentSession,
|
|
||||||
session::connection::{
|
|
||||||
HandleEvmWalletCreate, HandleEvmWalletList, HandleGrantCreate, HandleGrantDelete,
|
|
||||||
HandleGrantList, HandleSignTransaction,
|
|
||||||
SignTransactionError as SessionSignTransactionError,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
grpc::{
|
|
||||||
Convert, TryConvert,
|
|
||||||
common::inbound::{RawEvmAddress, RawEvmTransaction},
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
fn wrap_evm_response(payload: EvmResponsePayload) -> UserAgentResponsePayload {
|
|
||||||
UserAgentResponsePayload::Evm(proto_evm::Response {
|
|
||||||
payload: Some(payload),
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
pub(super) async fn dispatch(
|
|
||||||
actor: &ActorRef<UserAgentSession>,
|
|
||||||
req: proto_evm::Request,
|
|
||||||
) -> Result<Option<UserAgentResponsePayload>, Status> {
|
|
||||||
let Some(payload) = req.payload else {
|
|
||||||
return Err(Status::invalid_argument("Missing EVM request payload"));
|
|
||||||
};
|
|
||||||
|
|
||||||
match payload {
|
|
||||||
EvmRequestPayload::WalletCreate(_) => handle_wallet_create(actor).await,
|
|
||||||
EvmRequestPayload::WalletList(_) => handle_wallet_list(actor).await,
|
|
||||||
EvmRequestPayload::GrantCreate(req) => handle_grant_create(actor, req).await,
|
|
||||||
EvmRequestPayload::GrantDelete(req) => handle_grant_delete(actor, req).await,
|
|
||||||
EvmRequestPayload::GrantList(_) => handle_grant_list(actor).await,
|
|
||||||
EvmRequestPayload::SignTransaction(req) => handle_sign_transaction(actor, req).await,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
async fn handle_wallet_create(
|
|
||||||
actor: &ActorRef<UserAgentSession>,
|
|
||||||
) -> Result<Option<UserAgentResponsePayload>, Status> {
|
|
||||||
let result = match actor.ask(HandleEvmWalletCreate {}).await {
|
|
||||||
Ok((wallet_id, address)) => WalletCreateResult::Wallet(WalletEntry {
|
|
||||||
id: wallet_id,
|
|
||||||
address: address.to_vec(),
|
|
||||||
}),
|
|
||||||
Err(err) => {
|
|
||||||
warn!(error = ?err, "Failed to create EVM wallet");
|
|
||||||
WalletCreateResult::Error(ProtoEvmError::Internal.into())
|
|
||||||
}
|
|
||||||
};
|
|
||||||
Ok(Some(wrap_evm_response(EvmResponsePayload::WalletCreate(
|
|
||||||
WalletCreateResponse {
|
|
||||||
result: Some(result),
|
|
||||||
},
|
|
||||||
))))
|
|
||||||
}
|
|
||||||
|
|
||||||
async fn handle_wallet_list(
|
|
||||||
actor: &ActorRef<UserAgentSession>,
|
|
||||||
) -> Result<Option<UserAgentResponsePayload>, Status> {
|
|
||||||
let result = match actor.ask(HandleEvmWalletList {}).await {
|
|
||||||
Ok(wallets) => WalletListResult::Wallets(WalletList {
|
|
||||||
wallets: wallets
|
|
||||||
.into_iter()
|
|
||||||
.map(|(id, address)| WalletEntry {
|
|
||||||
address: address.to_vec(),
|
|
||||||
id,
|
|
||||||
})
|
|
||||||
.collect(),
|
|
||||||
}),
|
|
||||||
Err(err) => {
|
|
||||||
warn!(error = ?err, "Failed to list EVM wallets");
|
|
||||||
WalletListResult::Error(ProtoEvmError::Internal.into())
|
|
||||||
}
|
|
||||||
};
|
|
||||||
Ok(Some(wrap_evm_response(EvmResponsePayload::WalletList(
|
|
||||||
WalletListResponse {
|
|
||||||
result: Some(result),
|
|
||||||
},
|
|
||||||
))))
|
|
||||||
}
|
|
||||||
|
|
||||||
async fn handle_grant_list(
|
|
||||||
actor: &ActorRef<UserAgentSession>,
|
|
||||||
) -> Result<Option<UserAgentResponsePayload>, Status> {
|
|
||||||
let result = match actor.ask(HandleGrantList {}).await {
|
|
||||||
Ok(grants) => EvmGrantListResult::Grants(EvmGrantList {
|
|
||||||
grants: grants
|
|
||||||
.into_iter()
|
|
||||||
.map(|grant| GrantEntry {
|
|
||||||
id: grant.id,
|
|
||||||
wallet_access_id: grant.shared.wallet_access_id,
|
|
||||||
shared: Some(grant.shared.convert()),
|
|
||||||
specific: Some(grant.settings.convert()),
|
|
||||||
})
|
|
||||||
.collect(),
|
|
||||||
}),
|
|
||||||
Err(err) => {
|
|
||||||
warn!(error = ?err, "Failed to list EVM grants");
|
|
||||||
EvmGrantListResult::Error(ProtoEvmError::Internal.into())
|
|
||||||
}
|
|
||||||
};
|
|
||||||
Ok(Some(wrap_evm_response(EvmResponsePayload::GrantList(
|
|
||||||
EvmGrantListResponse {
|
|
||||||
result: Some(result),
|
|
||||||
},
|
|
||||||
))))
|
|
||||||
}
|
|
||||||
|
|
||||||
async fn handle_grant_create(
|
|
||||||
actor: &ActorRef<UserAgentSession>,
|
|
||||||
req: EvmGrantCreateRequest,
|
|
||||||
) -> Result<Option<UserAgentResponsePayload>, Status> {
|
|
||||||
let basic = req
|
|
||||||
.shared
|
|
||||||
.ok_or_else(|| Status::invalid_argument("Missing shared grant settings"))?
|
|
||||||
.try_convert()?;
|
|
||||||
let grant = req
|
|
||||||
.specific
|
|
||||||
.ok_or_else(|| Status::invalid_argument("Missing specific grant settings"))?
|
|
||||||
.try_convert()?;
|
|
||||||
|
|
||||||
let result = match actor.ask(HandleGrantCreate { basic, grant }).await {
|
|
||||||
Ok(grant_id) => EvmGrantCreateResult::GrantId(grant_id),
|
|
||||||
Err(err) => {
|
|
||||||
warn!(error = ?err, "Failed to create EVM grant");
|
|
||||||
EvmGrantCreateResult::Error(ProtoEvmError::Internal.into())
|
|
||||||
}
|
|
||||||
};
|
|
||||||
Ok(Some(wrap_evm_response(EvmResponsePayload::GrantCreate(
|
|
||||||
EvmGrantCreateResponse {
|
|
||||||
result: Some(result),
|
|
||||||
},
|
|
||||||
))))
|
|
||||||
}
|
|
||||||
|
|
||||||
async fn handle_grant_delete(
|
|
||||||
actor: &ActorRef<UserAgentSession>,
|
|
||||||
req: EvmGrantDeleteRequest,
|
|
||||||
) -> Result<Option<UserAgentResponsePayload>, Status> {
|
|
||||||
let result = match actor.ask(HandleGrantDelete { grant_id: req.grant_id }).await {
|
|
||||||
Ok(()) => EvmGrantDeleteResult::Ok(()),
|
|
||||||
Err(err) => {
|
|
||||||
warn!(error = ?err, "Failed to delete EVM grant");
|
|
||||||
EvmGrantDeleteResult::Error(ProtoEvmError::Internal.into())
|
|
||||||
}
|
|
||||||
};
|
|
||||||
Ok(Some(wrap_evm_response(EvmResponsePayload::GrantDelete(
|
|
||||||
EvmGrantDeleteResponse {
|
|
||||||
result: Some(result),
|
|
||||||
},
|
|
||||||
))))
|
|
||||||
}
|
|
||||||
|
|
||||||
async fn handle_sign_transaction(
|
|
||||||
actor: &ActorRef<UserAgentSession>,
|
|
||||||
req: ProtoSignTransactionRequest,
|
|
||||||
) -> Result<Option<UserAgentResponsePayload>, Status> {
|
|
||||||
let request = req
|
|
||||||
.request
|
|
||||||
.ok_or_else(|| Status::invalid_argument("Missing sign transaction request"))?;
|
|
||||||
let wallet_address = RawEvmAddress(request.wallet_address).try_convert()?;
|
|
||||||
let transaction = RawEvmTransaction(request.rlp_transaction).try_convert()?;
|
|
||||||
|
|
||||||
let response = match actor
|
|
||||||
.ask(HandleSignTransaction {
|
|
||||||
client_id: req.client_id,
|
|
||||||
wallet_address,
|
|
||||||
transaction,
|
|
||||||
})
|
|
||||||
.await
|
|
||||||
{
|
|
||||||
Ok(signature) => EvmSignTransactionResponse {
|
|
||||||
result: Some(EvmSignTransactionResult::Signature(
|
|
||||||
signature.as_bytes().to_vec(),
|
|
||||||
)),
|
|
||||||
},
|
|
||||||
Err(kameo::error::SendError::HandlerError(
|
|
||||||
SessionSignTransactionError::Vet(vet_error),
|
|
||||||
)) => EvmSignTransactionResponse {
|
|
||||||
result: Some(vet_error.convert()),
|
|
||||||
},
|
|
||||||
Err(kameo::error::SendError::HandlerError(
|
|
||||||
SessionSignTransactionError::Internal,
|
|
||||||
)) => EvmSignTransactionResponse {
|
|
||||||
result: Some(EvmSignTransactionResult::Error(
|
|
||||||
ProtoEvmError::Internal.into(),
|
|
||||||
)),
|
|
||||||
},
|
|
||||||
Err(err) => {
|
|
||||||
warn!(error = ?err, "Failed to sign EVM transaction");
|
|
||||||
EvmSignTransactionResponse {
|
|
||||||
result: Some(EvmSignTransactionResult::Error(
|
|
||||||
ProtoEvmError::Internal.into(),
|
|
||||||
)),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
Ok(Some(wrap_evm_response(EvmResponsePayload::SignTransaction(
|
|
||||||
response,
|
|
||||||
))))
|
|
||||||
}
|
|
||||||
@@ -5,14 +5,12 @@ use arbiter_proto::proto::evm::{
|
|||||||
TransactionRateLimit as ProtoTransactionRateLimit, VolumeRateLimit as ProtoVolumeRateLimit,
|
TransactionRateLimit as ProtoTransactionRateLimit, VolumeRateLimit as ProtoVolumeRateLimit,
|
||||||
specific_grant::Grant as ProtoSpecificGrantType,
|
specific_grant::Grant as ProtoSpecificGrantType,
|
||||||
};
|
};
|
||||||
use arbiter_proto::proto::user_agent::sdk_client::{
|
use arbiter_proto::proto::user_agent::{SdkClientWalletAccess, WalletAccess};
|
||||||
WalletAccess, WalletAccessEntry as SdkClientWalletAccess,
|
|
||||||
};
|
|
||||||
use chrono::{DateTime, TimeZone, Utc};
|
use chrono::{DateTime, TimeZone, Utc};
|
||||||
use prost_types::Timestamp as ProtoTimestamp;
|
use prost_types::Timestamp as ProtoTimestamp;
|
||||||
use tonic::Status;
|
use tonic::Status;
|
||||||
|
|
||||||
use crate::db::models::{CoreEvmWalletAccess, NewEvmWalletAccess};
|
use crate::db::models::{CoreEvmWalletAccess, NewEvmWallet, NewEvmWalletAccess};
|
||||||
use crate::grpc::Convert;
|
use crate::grpc::Convert;
|
||||||
use crate::{
|
use crate::{
|
||||||
evm::policies::{
|
evm::policies::{
|
||||||
|
|||||||
@@ -5,9 +5,7 @@ use arbiter_proto::proto::{
|
|||||||
TransactionRateLimit as ProtoTransactionRateLimit, VolumeRateLimit as ProtoVolumeRateLimit,
|
TransactionRateLimit as ProtoTransactionRateLimit, VolumeRateLimit as ProtoVolumeRateLimit,
|
||||||
specific_grant::Grant as ProtoSpecificGrantType,
|
specific_grant::Grant as ProtoSpecificGrantType,
|
||||||
},
|
},
|
||||||
user_agent::sdk_client::{
|
user_agent::{SdkClientWalletAccess as ProtoSdkClientWalletAccess, WalletAccess},
|
||||||
WalletAccess, WalletAccessEntry as ProtoSdkClientWalletAccess,
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
use chrono::{DateTime, Utc};
|
use chrono::{DateTime, Utc};
|
||||||
use prost_types::Timestamp as ProtoTimestamp;
|
use prost_types::Timestamp as ProtoTimestamp;
|
||||||
|
|||||||
@@ -1,190 +0,0 @@
|
|||||||
use arbiter_proto::proto::{
|
|
||||||
user_agent::{
|
|
||||||
sdk_client::{
|
|
||||||
self as proto_sdk_client, ConnectionCancel as ProtoSdkClientConnectionCancel,
|
|
||||||
ConnectionRequest as ProtoSdkClientConnectionRequest,
|
|
||||||
ConnectionResponse as ProtoSdkClientConnectionResponse, Entry as ProtoSdkClientEntry,
|
|
||||||
Error as ProtoSdkClientError, GrantWalletAccess as ProtoSdkClientGrantWalletAccess,
|
|
||||||
List as ProtoSdkClientList, ListResponse as ProtoSdkClientListResponse,
|
|
||||||
ListWalletAccessResponse, RevokeWalletAccess as ProtoSdkClientRevokeWalletAccess,
|
|
||||||
list_response::Result as ProtoSdkClientListResult,
|
|
||||||
request::Payload as SdkClientRequestPayload,
|
|
||||||
response::Payload as SdkClientResponsePayload,
|
|
||||||
},
|
|
||||||
user_agent_response::Payload as UserAgentResponsePayload,
|
|
||||||
},
|
|
||||||
shared::ClientInfo as ProtoClientMetadata,
|
|
||||||
};
|
|
||||||
use kameo::actor::ActorRef;
|
|
||||||
use tonic::Status;
|
|
||||||
use tracing::{info, warn};
|
|
||||||
|
|
||||||
use crate::{
|
|
||||||
actors::user_agent::{
|
|
||||||
OutOfBand, UserAgentSession,
|
|
||||||
session::connection::{
|
|
||||||
HandleGrantEvmWalletAccess, HandleListWalletAccess, HandleNewClientApprove,
|
|
||||||
HandleRevokeEvmWalletAccess, HandleSdkClientList,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
db::models::NewEvmWalletAccess,
|
|
||||||
grpc::Convert,
|
|
||||||
};
|
|
||||||
|
|
||||||
fn wrap_sdk_client_response(payload: SdkClientResponsePayload) -> UserAgentResponsePayload {
|
|
||||||
UserAgentResponsePayload::SdkClient(proto_sdk_client::Response {
|
|
||||||
payload: Some(payload),
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
pub(super) fn out_of_band_payload(oob: OutOfBand) -> UserAgentResponsePayload {
|
|
||||||
match oob {
|
|
||||||
OutOfBand::ClientConnectionRequest { profile } => wrap_sdk_client_response(
|
|
||||||
SdkClientResponsePayload::ConnectionRequest(ProtoSdkClientConnectionRequest {
|
|
||||||
pubkey: profile.pubkey.to_bytes().to_vec(),
|
|
||||||
info: Some(ProtoClientMetadata {
|
|
||||||
name: profile.metadata.name,
|
|
||||||
description: profile.metadata.description,
|
|
||||||
version: profile.metadata.version,
|
|
||||||
}),
|
|
||||||
}),
|
|
||||||
),
|
|
||||||
OutOfBand::ClientConnectionCancel { pubkey } => wrap_sdk_client_response(
|
|
||||||
SdkClientResponsePayload::ConnectionCancel(ProtoSdkClientConnectionCancel {
|
|
||||||
pubkey: pubkey.to_bytes().to_vec(),
|
|
||||||
}),
|
|
||||||
),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub(super) async fn dispatch(
|
|
||||||
actor: &ActorRef<UserAgentSession>,
|
|
||||||
req: proto_sdk_client::Request,
|
|
||||||
) -> Result<Option<UserAgentResponsePayload>, Status> {
|
|
||||||
let Some(payload) = req.payload else {
|
|
||||||
return Err(Status::invalid_argument("Missing SDK client request payload"));
|
|
||||||
};
|
|
||||||
|
|
||||||
match payload {
|
|
||||||
SdkClientRequestPayload::ConnectionResponse(resp) => {
|
|
||||||
handle_connection_response(actor, resp).await
|
|
||||||
}
|
|
||||||
SdkClientRequestPayload::Revoke(_) => {
|
|
||||||
Err(Status::unimplemented("SdkClientRevoke is not yet implemented"))
|
|
||||||
}
|
|
||||||
SdkClientRequestPayload::List(_) => handle_list(actor).await,
|
|
||||||
SdkClientRequestPayload::GrantWalletAccess(req) => handle_grant_wallet_access(actor, req).await,
|
|
||||||
SdkClientRequestPayload::RevokeWalletAccess(req) => {
|
|
||||||
handle_revoke_wallet_access(actor, req).await
|
|
||||||
}
|
|
||||||
SdkClientRequestPayload::ListWalletAccess(_) => handle_list_wallet_access(actor).await,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
async fn handle_connection_response(
|
|
||||||
actor: &ActorRef<UserAgentSession>,
|
|
||||||
resp: ProtoSdkClientConnectionResponse,
|
|
||||||
) -> Result<Option<UserAgentResponsePayload>, Status> {
|
|
||||||
let pubkey_bytes = <[u8; 32]>::try_from(resp.pubkey)
|
|
||||||
.map_err(|_| Status::invalid_argument("Invalid Ed25519 public key length"))?;
|
|
||||||
let pubkey = ed25519_dalek::VerifyingKey::from_bytes(&pubkey_bytes)
|
|
||||||
.map_err(|_| Status::invalid_argument("Invalid Ed25519 public key"))?;
|
|
||||||
|
|
||||||
actor
|
|
||||||
.ask(HandleNewClientApprove {
|
|
||||||
approved: resp.approved,
|
|
||||||
pubkey,
|
|
||||||
})
|
|
||||||
.await
|
|
||||||
.map_err(|err| {
|
|
||||||
warn!(?err, "Failed to process client connection response");
|
|
||||||
Status::internal("Failed to process response")
|
|
||||||
})?;
|
|
||||||
|
|
||||||
Ok(None)
|
|
||||||
}
|
|
||||||
|
|
||||||
async fn handle_list(
|
|
||||||
actor: &ActorRef<UserAgentSession>,
|
|
||||||
) -> Result<Option<UserAgentResponsePayload>, Status> {
|
|
||||||
let result = match actor.ask(HandleSdkClientList {}).await {
|
|
||||||
Ok(clients) => ProtoSdkClientListResult::Clients(ProtoSdkClientList {
|
|
||||||
clients: clients
|
|
||||||
.into_iter()
|
|
||||||
.map(|(client, metadata)| ProtoSdkClientEntry {
|
|
||||||
id: client.id,
|
|
||||||
pubkey: client.public_key,
|
|
||||||
info: Some(ProtoClientMetadata {
|
|
||||||
name: metadata.name,
|
|
||||||
description: metadata.description,
|
|
||||||
version: metadata.version,
|
|
||||||
}),
|
|
||||||
created_at: client.created_at.0.timestamp() as i32,
|
|
||||||
})
|
|
||||||
.collect(),
|
|
||||||
}),
|
|
||||||
Err(err) => {
|
|
||||||
warn!(error = ?err, "Failed to list SDK clients");
|
|
||||||
ProtoSdkClientListResult::Error(ProtoSdkClientError::Internal.into())
|
|
||||||
}
|
|
||||||
};
|
|
||||||
Ok(Some(wrap_sdk_client_response(SdkClientResponsePayload::List(
|
|
||||||
ProtoSdkClientListResponse {
|
|
||||||
result: Some(result),
|
|
||||||
},
|
|
||||||
))))
|
|
||||||
}
|
|
||||||
|
|
||||||
async fn handle_grant_wallet_access(
|
|
||||||
actor: &ActorRef<UserAgentSession>,
|
|
||||||
req: ProtoSdkClientGrantWalletAccess,
|
|
||||||
) -> Result<Option<UserAgentResponsePayload>, Status> {
|
|
||||||
let entries: Vec<NewEvmWalletAccess> = req.accesses.into_iter().map(|a| a.convert()).collect();
|
|
||||||
match actor.ask(HandleGrantEvmWalletAccess { entries }).await {
|
|
||||||
Ok(()) => {
|
|
||||||
info!("Successfully granted wallet access");
|
|
||||||
Ok(None)
|
|
||||||
}
|
|
||||||
Err(err) => {
|
|
||||||
warn!(error = ?err, "Failed to grant wallet access");
|
|
||||||
Err(Status::internal("Failed to grant wallet access"))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
async fn handle_revoke_wallet_access(
|
|
||||||
actor: &ActorRef<UserAgentSession>,
|
|
||||||
req: ProtoSdkClientRevokeWalletAccess,
|
|
||||||
) -> Result<Option<UserAgentResponsePayload>, Status> {
|
|
||||||
match actor
|
|
||||||
.ask(HandleRevokeEvmWalletAccess {
|
|
||||||
entries: req.accesses,
|
|
||||||
})
|
|
||||||
.await
|
|
||||||
{
|
|
||||||
Ok(()) => {
|
|
||||||
info!("Successfully revoked wallet access");
|
|
||||||
Ok(None)
|
|
||||||
}
|
|
||||||
Err(err) => {
|
|
||||||
warn!(error = ?err, "Failed to revoke wallet access");
|
|
||||||
Err(Status::internal("Failed to revoke wallet access"))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
async fn handle_list_wallet_access(
|
|
||||||
actor: &ActorRef<UserAgentSession>,
|
|
||||||
) -> Result<Option<UserAgentResponsePayload>, Status> {
|
|
||||||
match actor.ask(HandleListWalletAccess {}).await {
|
|
||||||
Ok(accesses) => Ok(Some(wrap_sdk_client_response(
|
|
||||||
SdkClientResponsePayload::ListWalletAccess(ListWalletAccessResponse {
|
|
||||||
accesses: accesses.into_iter().map(|a| a.convert()).collect(),
|
|
||||||
}),
|
|
||||||
))),
|
|
||||||
Err(err) => {
|
|
||||||
warn!(error = ?err, "Failed to list wallet access");
|
|
||||||
Err(Status::internal("Failed to list wallet access"))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,181 +0,0 @@
|
|||||||
use arbiter_proto::proto::user_agent::{
|
|
||||||
user_agent_response::Payload as UserAgentResponsePayload,
|
|
||||||
vault::{
|
|
||||||
self as proto_vault,
|
|
||||||
bootstrap::{
|
|
||||||
self as proto_bootstrap, BootstrapEncryptedKey as ProtoBootstrapEncryptedKey,
|
|
||||||
BootstrapResult as ProtoBootstrapResult,
|
|
||||||
},
|
|
||||||
request::Payload as VaultRequestPayload,
|
|
||||||
response::Payload as VaultResponsePayload,
|
|
||||||
unseal::{
|
|
||||||
self as proto_unseal, UnsealEncryptedKey as ProtoUnsealEncryptedKey,
|
|
||||||
UnsealResult as ProtoUnsealResult, UnsealStart,
|
|
||||||
request::Payload as UnsealRequestPayload,
|
|
||||||
response::Payload as UnsealResponsePayload,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
|
||||||
use arbiter_proto::proto::shared::VaultState as ProtoVaultState;
|
|
||||||
use kameo::{actor::ActorRef, error::SendError};
|
|
||||||
use tonic::Status;
|
|
||||||
use tracing::warn;
|
|
||||||
|
|
||||||
use crate::{
|
|
||||||
actors::{
|
|
||||||
keyholder::KeyHolderState,
|
|
||||||
user_agent::{
|
|
||||||
UserAgentSession,
|
|
||||||
session::connection::{
|
|
||||||
BootstrapError, HandleBootstrapEncryptedKey, HandleQueryVaultState,
|
|
||||||
HandleUnsealEncryptedKey, HandleUnsealRequest, UnsealError,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
fn wrap_vault_response(payload: VaultResponsePayload) -> UserAgentResponsePayload {
|
|
||||||
UserAgentResponsePayload::Vault(proto_vault::Response {
|
|
||||||
payload: Some(payload),
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
fn wrap_unseal_response(payload: UnsealResponsePayload) -> UserAgentResponsePayload {
|
|
||||||
wrap_vault_response(VaultResponsePayload::Unseal(proto_unseal::Response {
|
|
||||||
payload: Some(payload),
|
|
||||||
}))
|
|
||||||
}
|
|
||||||
|
|
||||||
fn wrap_bootstrap_response(result: ProtoBootstrapResult) -> UserAgentResponsePayload {
|
|
||||||
wrap_vault_response(VaultResponsePayload::Bootstrap(proto_bootstrap::Response {
|
|
||||||
result: result.into(),
|
|
||||||
}))
|
|
||||||
}
|
|
||||||
|
|
||||||
pub(super) async fn dispatch(
|
|
||||||
actor: &ActorRef<UserAgentSession>,
|
|
||||||
req: proto_vault::Request,
|
|
||||||
) -> Result<Option<UserAgentResponsePayload>, Status> {
|
|
||||||
let Some(payload) = req.payload else {
|
|
||||||
return Err(Status::invalid_argument("Missing vault request payload"));
|
|
||||||
};
|
|
||||||
|
|
||||||
match payload {
|
|
||||||
VaultRequestPayload::QueryState(_) => handle_query_vault_state(actor).await,
|
|
||||||
VaultRequestPayload::Unseal(req) => dispatch_unseal_request(actor, req).await,
|
|
||||||
VaultRequestPayload::Bootstrap(req) => handle_bootstrap_request(actor, req).await,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
async fn dispatch_unseal_request(
|
|
||||||
actor: &ActorRef<UserAgentSession>,
|
|
||||||
req: proto_unseal::Request,
|
|
||||||
) -> Result<Option<UserAgentResponsePayload>, Status> {
|
|
||||||
let Some(payload) = req.payload else {
|
|
||||||
return Err(Status::invalid_argument("Missing unseal request payload"));
|
|
||||||
};
|
|
||||||
|
|
||||||
match payload {
|
|
||||||
UnsealRequestPayload::Start(req) => handle_unseal_start(actor, req).await,
|
|
||||||
UnsealRequestPayload::EncryptedKey(req) => handle_unseal_encrypted_key(actor, req).await,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
async fn handle_unseal_start(
|
|
||||||
actor: &ActorRef<UserAgentSession>,
|
|
||||||
req: UnsealStart,
|
|
||||||
) -> Result<Option<UserAgentResponsePayload>, Status> {
|
|
||||||
let client_pubkey = <[u8; 32]>::try_from(req.client_pubkey)
|
|
||||||
.map(x25519_dalek::PublicKey::from)
|
|
||||||
.map_err(|_| Status::invalid_argument("Invalid X25519 public key"))?;
|
|
||||||
|
|
||||||
let response = actor
|
|
||||||
.ask(HandleUnsealRequest { client_pubkey })
|
|
||||||
.await
|
|
||||||
.map_err(|err| {
|
|
||||||
warn!(error = ?err, "Failed to handle unseal start request");
|
|
||||||
Status::internal("Failed to start unseal flow")
|
|
||||||
})?;
|
|
||||||
|
|
||||||
Ok(Some(wrap_unseal_response(UnsealResponsePayload::Start(
|
|
||||||
proto_unseal::UnsealStartResponse {
|
|
||||||
server_pubkey: response.server_pubkey.as_bytes().to_vec(),
|
|
||||||
},
|
|
||||||
))))
|
|
||||||
}
|
|
||||||
|
|
||||||
async fn handle_unseal_encrypted_key(
|
|
||||||
actor: &ActorRef<UserAgentSession>,
|
|
||||||
req: ProtoUnsealEncryptedKey,
|
|
||||||
) -> Result<Option<UserAgentResponsePayload>, Status> {
|
|
||||||
let result = match actor
|
|
||||||
.ask(HandleUnsealEncryptedKey {
|
|
||||||
nonce: req.nonce,
|
|
||||||
ciphertext: req.ciphertext,
|
|
||||||
associated_data: req.associated_data,
|
|
||||||
})
|
|
||||||
.await
|
|
||||||
{
|
|
||||||
Ok(()) => ProtoUnsealResult::Success,
|
|
||||||
Err(SendError::HandlerError(UnsealError::InvalidKey)) => ProtoUnsealResult::InvalidKey,
|
|
||||||
Err(err) => {
|
|
||||||
warn!(error = ?err, "Failed to handle unseal request");
|
|
||||||
return Err(Status::internal("Failed to unseal vault"));
|
|
||||||
}
|
|
||||||
};
|
|
||||||
Ok(Some(wrap_unseal_response(UnsealResponsePayload::Result(
|
|
||||||
result.into(),
|
|
||||||
))))
|
|
||||||
}
|
|
||||||
|
|
||||||
async fn handle_bootstrap_request(
|
|
||||||
actor: &ActorRef<UserAgentSession>,
|
|
||||||
req: proto_bootstrap::Request,
|
|
||||||
) -> Result<Option<UserAgentResponsePayload>, Status> {
|
|
||||||
let encrypted_key = req
|
|
||||||
.encrypted_key
|
|
||||||
.ok_or_else(|| Status::invalid_argument("Missing bootstrap encrypted key"))?;
|
|
||||||
handle_bootstrap_encrypted_key(actor, encrypted_key).await
|
|
||||||
}
|
|
||||||
|
|
||||||
async fn handle_bootstrap_encrypted_key(
|
|
||||||
actor: &ActorRef<UserAgentSession>,
|
|
||||||
req: ProtoBootstrapEncryptedKey,
|
|
||||||
) -> Result<Option<UserAgentResponsePayload>, Status> {
|
|
||||||
let result = match actor
|
|
||||||
.ask(HandleBootstrapEncryptedKey {
|
|
||||||
nonce: req.nonce,
|
|
||||||
ciphertext: req.ciphertext,
|
|
||||||
associated_data: req.associated_data,
|
|
||||||
})
|
|
||||||
.await
|
|
||||||
{
|
|
||||||
Ok(()) => ProtoBootstrapResult::Success,
|
|
||||||
Err(SendError::HandlerError(BootstrapError::InvalidKey)) => ProtoBootstrapResult::InvalidKey,
|
|
||||||
Err(SendError::HandlerError(BootstrapError::AlreadyBootstrapped)) => {
|
|
||||||
ProtoBootstrapResult::AlreadyBootstrapped
|
|
||||||
}
|
|
||||||
Err(err) => {
|
|
||||||
warn!(error = ?err, "Failed to handle bootstrap request");
|
|
||||||
return Err(Status::internal("Failed to bootstrap vault"));
|
|
||||||
}
|
|
||||||
};
|
|
||||||
Ok(Some(wrap_bootstrap_response(result)))
|
|
||||||
}
|
|
||||||
|
|
||||||
async fn handle_query_vault_state(
|
|
||||||
actor: &ActorRef<UserAgentSession>,
|
|
||||||
) -> Result<Option<UserAgentResponsePayload>, Status> {
|
|
||||||
let state = match actor.ask(HandleQueryVaultState {}).await {
|
|
||||||
Ok(KeyHolderState::Unbootstrapped) => ProtoVaultState::Unbootstrapped,
|
|
||||||
Ok(KeyHolderState::Sealed) => ProtoVaultState::Sealed,
|
|
||||||
Ok(KeyHolderState::Unsealed) => ProtoVaultState::Unsealed,
|
|
||||||
Err(err) => {
|
|
||||||
warn!(error = ?err, "Failed to query vault state");
|
|
||||||
ProtoVaultState::Error
|
|
||||||
}
|
|
||||||
};
|
|
||||||
Ok(Some(wrap_vault_response(VaultResponsePayload::State(
|
|
||||||
state.into(),
|
|
||||||
))))
|
|
||||||
}
|
|
||||||
@@ -1,5 +1,13 @@
|
|||||||
#![forbid(unsafe_code)]
|
#![forbid(unsafe_code)]
|
||||||
use crate::context::ServerContext;
|
|
||||||
|
use std::{net::SocketAddr, path::PathBuf};
|
||||||
|
|
||||||
|
use arbiter_proto::{proto::arbiter_service_server::ArbiterServiceServer, url::ArbiterUrl};
|
||||||
|
use miette::miette;
|
||||||
|
use tonic::transport::{Identity, ServerTlsConfig};
|
||||||
|
use tracing::info;
|
||||||
|
|
||||||
|
use crate::{actors::bootstrap::GetToken, context::ServerContext};
|
||||||
|
|
||||||
pub mod actors;
|
pub mod actors;
|
||||||
pub mod context;
|
pub mod context;
|
||||||
@@ -18,3 +26,64 @@ impl Server {
|
|||||||
Self { context }
|
Self { context }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Clone)]
|
||||||
|
pub struct RunConfig {
|
||||||
|
pub addr: SocketAddr,
|
||||||
|
pub data_dir: Option<PathBuf>,
|
||||||
|
pub log_arbiter_url: bool,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl RunConfig {
|
||||||
|
pub fn new(addr: SocketAddr, data_dir: Option<PathBuf>) -> Self {
|
||||||
|
Self {
|
||||||
|
addr,
|
||||||
|
data_dir,
|
||||||
|
log_arbiter_url: true,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub async fn run_server_until_shutdown<F>(config: RunConfig, shutdown: F) -> miette::Result<()>
|
||||||
|
where
|
||||||
|
F: Future<Output = ()> + Send + 'static,
|
||||||
|
{
|
||||||
|
arbiter_proto::set_home_path_override(config.data_dir.clone())
|
||||||
|
.map_err(|err| miette!("failed to set home path override: {err}"))?;
|
||||||
|
|
||||||
|
let db = db::create_pool(None).await?;
|
||||||
|
info!(addr = %config.addr, "Database ready");
|
||||||
|
|
||||||
|
let context = ServerContext::new(db).await?;
|
||||||
|
info!(addr = %config.addr, "Server context ready");
|
||||||
|
|
||||||
|
if config.log_arbiter_url {
|
||||||
|
let url = ArbiterUrl {
|
||||||
|
host: config.addr.ip().to_string(),
|
||||||
|
port: config.addr.port(),
|
||||||
|
ca_cert: context.tls.ca_cert().clone().into_owned(),
|
||||||
|
bootstrap_token: context
|
||||||
|
.actors
|
||||||
|
.bootstrapper
|
||||||
|
.ask(GetToken)
|
||||||
|
.await
|
||||||
|
.map_err(|err| miette!("failed to get bootstrap token from actor: {err}"))?,
|
||||||
|
};
|
||||||
|
info!(%url, "Server URL");
|
||||||
|
}
|
||||||
|
|
||||||
|
let tls = ServerTlsConfig::new().identity(Identity::from_pem(
|
||||||
|
context.tls.cert_pem(),
|
||||||
|
context.tls.key_pem(),
|
||||||
|
));
|
||||||
|
|
||||||
|
tonic::transport::Server::builder()
|
||||||
|
.tls_config(tls)
|
||||||
|
.map_err(|err| miette!("Failed to setup TLS: {err}"))?
|
||||||
|
.add_service(ArbiterServiceServer::new(Server::new(context)))
|
||||||
|
.serve_with_shutdown(config.addr, shutdown)
|
||||||
|
.await
|
||||||
|
.map_err(|e| miette!("gRPC server error: {e}"))?;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,56 +1,42 @@
|
|||||||
use std::net::SocketAddr;
|
mod cli;
|
||||||
|
mod service;
|
||||||
|
|
||||||
use arbiter_proto::{proto::arbiter_service_server::ArbiterServiceServer, url::ArbiterUrl};
|
use clap::Parser;
|
||||||
use arbiter_server::{Server, actors::bootstrap::GetToken, context::ServerContext, db};
|
use cli::{Cli, Command, RunArgs, ServiceCommand};
|
||||||
use miette::miette;
|
|
||||||
use rustls::crypto::aws_lc_rs;
|
use rustls::crypto::aws_lc_rs;
|
||||||
use tonic::transport::{Identity, ServerTlsConfig};
|
|
||||||
use tracing::info;
|
use tracing::info;
|
||||||
|
|
||||||
const PORT: u16 = 50051;
|
|
||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
async fn main() -> miette::Result<()> {
|
async fn main() -> miette::Result<()> {
|
||||||
aws_lc_rs::default_provider().install_default().unwrap();
|
aws_lc_rs::default_provider().install_default().unwrap();
|
||||||
|
init_logging();
|
||||||
|
|
||||||
tracing_subscriber::fmt()
|
let cli = Cli::parse();
|
||||||
|
|
||||||
|
match cli.command {
|
||||||
|
None => run_foreground(RunArgs::default()).await,
|
||||||
|
Some(Command::Run(args)) => run_foreground(args).await,
|
||||||
|
Some(Command::Service { command }) => match command {
|
||||||
|
ServiceCommand::Install(args) => service::install_service(args),
|
||||||
|
ServiceCommand::Run(args) => service::run_service_dispatcher(args),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn run_foreground(args: RunArgs) -> miette::Result<()> {
|
||||||
|
info!(addr = %args.listen_addr, "Starting arbiter server");
|
||||||
|
arbiter_server::run_server_until_shutdown(
|
||||||
|
arbiter_server::RunConfig::new(args.listen_addr, args.data_dir),
|
||||||
|
std::future::pending::<()>(),
|
||||||
|
)
|
||||||
|
.await
|
||||||
|
}
|
||||||
|
|
||||||
|
fn init_logging() {
|
||||||
|
let _ = tracing_subscriber::fmt()
|
||||||
.with_env_filter(
|
.with_env_filter(
|
||||||
tracing_subscriber::EnvFilter::try_from_default_env()
|
tracing_subscriber::EnvFilter::try_from_default_env()
|
||||||
.unwrap_or_else(|_| tracing_subscriber::EnvFilter::new("info")),
|
.unwrap_or_else(|_| tracing_subscriber::EnvFilter::new("info")),
|
||||||
)
|
)
|
||||||
.init();
|
.try_init();
|
||||||
|
|
||||||
info!("Starting arbiter server");
|
|
||||||
|
|
||||||
let db = db::create_pool(None).await?;
|
|
||||||
info!("Database ready");
|
|
||||||
|
|
||||||
let context = ServerContext::new(db).await?;
|
|
||||||
|
|
||||||
let addr: SocketAddr = format!("127.0.0.1:{PORT}").parse().expect("valid address");
|
|
||||||
info!(%addr, "Starting gRPC server");
|
|
||||||
|
|
||||||
let url = ArbiterUrl {
|
|
||||||
host: addr.ip().to_string(),
|
|
||||||
port: addr.port(),
|
|
||||||
ca_cert: context.tls.ca_cert().clone().into_owned(),
|
|
||||||
bootstrap_token: context.actors.bootstrapper.ask(GetToken).await.unwrap(),
|
|
||||||
};
|
|
||||||
|
|
||||||
info!(%url, "Server URL");
|
|
||||||
|
|
||||||
let tls = ServerTlsConfig::new().identity(Identity::from_pem(
|
|
||||||
context.tls.cert_pem(),
|
|
||||||
context.tls.key_pem(),
|
|
||||||
));
|
|
||||||
|
|
||||||
tonic::transport::Server::builder()
|
|
||||||
.tls_config(tls)
|
|
||||||
.map_err(|err| miette!("Faild to setup TLS: {err}"))?
|
|
||||||
.add_service(ArbiterServiceServer::new(Server::new(context)))
|
|
||||||
.serve(addr)
|
|
||||||
.await
|
|
||||||
.map_err(|e| miette::miette!("gRPC server error: {e}"))?;
|
|
||||||
|
|
||||||
unreachable!("gRPC server should run indefinitely");
|
|
||||||
}
|
}
|
||||||
|
|||||||
19
server/crates/arbiter-server/src/service/mod.rs
Normal file
19
server/crates/arbiter-server/src/service/mod.rs
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
#[cfg(windows)]
|
||||||
|
mod windows;
|
||||||
|
|
||||||
|
#[cfg(windows)]
|
||||||
|
pub use windows::{install_service, run_service_dispatcher};
|
||||||
|
|
||||||
|
#[cfg(not(windows))]
|
||||||
|
pub fn install_service(_: crate::cli::ServiceInstallArgs) -> miette::Result<()> {
|
||||||
|
Err(miette::miette!(
|
||||||
|
"service install is currently supported only on Windows"
|
||||||
|
))
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(not(windows))]
|
||||||
|
pub fn run_service_dispatcher(_: crate::cli::ServiceRunArgs) -> miette::Result<()> {
|
||||||
|
Err(miette::miette!(
|
||||||
|
"service run entrypoint is currently supported only on Windows"
|
||||||
|
))
|
||||||
|
}
|
||||||
230
server/crates/arbiter-server/src/service/windows.rs
Normal file
230
server/crates/arbiter-server/src/service/windows.rs
Normal file
@@ -0,0 +1,230 @@
|
|||||||
|
use std::{
|
||||||
|
ffi::OsString,
|
||||||
|
path::{Path, PathBuf},
|
||||||
|
process::Command,
|
||||||
|
sync::mpsc,
|
||||||
|
time::Duration,
|
||||||
|
};
|
||||||
|
|
||||||
|
use miette::{Context as _, IntoDiagnostic as _, miette};
|
||||||
|
use windows_service::{
|
||||||
|
define_windows_service,
|
||||||
|
service::{
|
||||||
|
ServiceAccess, ServiceControl, ServiceControlAccept, ServiceErrorControl, ServiceExitCode,
|
||||||
|
ServiceInfo, ServiceStartType, ServiceState, ServiceStatus, ServiceType,
|
||||||
|
},
|
||||||
|
service_control_handler::{self, ServiceControlHandlerResult},
|
||||||
|
service_dispatcher,
|
||||||
|
service_manager::{ServiceManager, ServiceManagerAccess},
|
||||||
|
};
|
||||||
|
|
||||||
|
use crate::cli::{ServiceInstallArgs, ServiceRunArgs};
|
||||||
|
use arbiter_server::{RunConfig, run_server_until_shutdown};
|
||||||
|
|
||||||
|
const SERVICE_NAME: &str = "ArbiterServer";
|
||||||
|
const SERVICE_DISPLAY_NAME: &str = "Arbiter Server";
|
||||||
|
|
||||||
|
pub fn default_service_data_dir() -> PathBuf {
|
||||||
|
let base = std::env::var_os("PROGRAMDATA")
|
||||||
|
.map(PathBuf::from)
|
||||||
|
.unwrap_or_else(|| PathBuf::from(r"C:\ProgramData"));
|
||||||
|
base.join("Arbiter")
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn install_service(args: ServiceInstallArgs) -> miette::Result<()> {
|
||||||
|
ensure_admin_rights()?;
|
||||||
|
|
||||||
|
let executable = std::env::current_exe().into_diagnostic()?;
|
||||||
|
let data_dir = args.data_dir.unwrap_or_else(default_service_data_dir);
|
||||||
|
|
||||||
|
std::fs::create_dir_all(&data_dir)
|
||||||
|
.into_diagnostic()
|
||||||
|
.with_context(|| format!("failed to create service data dir: {}", data_dir.display()))?;
|
||||||
|
ensure_token_acl_contract(&data_dir)?;
|
||||||
|
|
||||||
|
let manager_access = ServiceManagerAccess::CONNECT | ServiceManagerAccess::CREATE_SERVICE;
|
||||||
|
let manager = ServiceManager::local_computer(None::<&str>, manager_access)
|
||||||
|
.into_diagnostic()
|
||||||
|
.wrap_err("failed to open Service Control Manager")?;
|
||||||
|
|
||||||
|
let launch_arguments = vec![
|
||||||
|
OsString::from("service"),
|
||||||
|
OsString::from("run"),
|
||||||
|
OsString::from("--data-dir"),
|
||||||
|
data_dir.as_os_str().to_os_string(),
|
||||||
|
];
|
||||||
|
|
||||||
|
let service_info = ServiceInfo {
|
||||||
|
name: OsString::from(SERVICE_NAME),
|
||||||
|
display_name: OsString::from(SERVICE_DISPLAY_NAME),
|
||||||
|
service_type: ServiceType::OWN_PROCESS,
|
||||||
|
start_type: ServiceStartType::AutoStart,
|
||||||
|
error_control: ServiceErrorControl::Normal,
|
||||||
|
executable_path: executable,
|
||||||
|
launch_arguments,
|
||||||
|
dependencies: vec![],
|
||||||
|
account_name: Some(OsString::from(r"NT AUTHORITY\LocalService")),
|
||||||
|
account_password: None,
|
||||||
|
};
|
||||||
|
|
||||||
|
let service = manager
|
||||||
|
.create_service(
|
||||||
|
&service_info,
|
||||||
|
ServiceAccess::QUERY_STATUS | ServiceAccess::START,
|
||||||
|
)
|
||||||
|
.into_diagnostic()
|
||||||
|
.wrap_err("failed to create Windows service in SCM")?;
|
||||||
|
|
||||||
|
if args.start {
|
||||||
|
service
|
||||||
|
.start::<&str>(&[])
|
||||||
|
.into_diagnostic()
|
||||||
|
.wrap_err("service created but failed to start")?;
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn run_service_dispatcher(args: ServiceRunArgs) -> miette::Result<()> {
|
||||||
|
SERVICE_RUN_ARGS
|
||||||
|
.set(args)
|
||||||
|
.map_err(|_| miette!("service runtime args are already initialized"))?;
|
||||||
|
|
||||||
|
service_dispatcher::start(SERVICE_NAME, ffi_service_main)
|
||||||
|
.into_diagnostic()
|
||||||
|
.wrap_err("failed to start service dispatcher")?;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
define_windows_service!(ffi_service_main, service_main);
|
||||||
|
|
||||||
|
static SERVICE_RUN_ARGS: std::sync::OnceLock<ServiceRunArgs> = std::sync::OnceLock::new();
|
||||||
|
|
||||||
|
fn service_main(_arguments: Vec<OsString>) {
|
||||||
|
if let Err(error) = run_service_main() {
|
||||||
|
tracing::error!(error = ?error, "Windows service main failed");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn run_service_main() -> miette::Result<()> {
|
||||||
|
let args = SERVICE_RUN_ARGS
|
||||||
|
.get()
|
||||||
|
.cloned()
|
||||||
|
.ok_or_else(|| miette!("service run args are missing"))?;
|
||||||
|
|
||||||
|
let (shutdown_tx, shutdown_rx) = mpsc::channel::<()>();
|
||||||
|
|
||||||
|
let status_handle =
|
||||||
|
service_control_handler::register(SERVICE_NAME, move |control| match control {
|
||||||
|
ServiceControl::Stop => {
|
||||||
|
let _ = shutdown_tx.send(());
|
||||||
|
ServiceControlHandlerResult::NoError
|
||||||
|
}
|
||||||
|
ServiceControl::Interrogate => ServiceControlHandlerResult::NoError,
|
||||||
|
_ => ServiceControlHandlerResult::NotImplemented,
|
||||||
|
})
|
||||||
|
.into_diagnostic()
|
||||||
|
.wrap_err("failed to register service control handler")?;
|
||||||
|
|
||||||
|
set_status(
|
||||||
|
&status_handle,
|
||||||
|
ServiceState::StartPending,
|
||||||
|
ServiceControlAccept::empty(),
|
||||||
|
)?;
|
||||||
|
|
||||||
|
let runtime = tokio::runtime::Builder::new_multi_thread()
|
||||||
|
.enable_all()
|
||||||
|
.build()
|
||||||
|
.into_diagnostic()
|
||||||
|
.wrap_err("failed to build tokio runtime for service")?;
|
||||||
|
|
||||||
|
set_status(
|
||||||
|
&status_handle,
|
||||||
|
ServiceState::Running,
|
||||||
|
ServiceControlAccept::STOP,
|
||||||
|
)?;
|
||||||
|
|
||||||
|
let data_dir = args.data_dir.unwrap_or_else(default_service_data_dir);
|
||||||
|
let config = RunConfig {
|
||||||
|
addr: args.listen_addr,
|
||||||
|
data_dir: Some(data_dir),
|
||||||
|
log_arbiter_url: true,
|
||||||
|
};
|
||||||
|
|
||||||
|
let result = runtime.block_on(run_server_until_shutdown(config, async move {
|
||||||
|
let _ = tokio::task::spawn_blocking(move || shutdown_rx.recv()).await;
|
||||||
|
}));
|
||||||
|
|
||||||
|
set_status(
|
||||||
|
&status_handle,
|
||||||
|
ServiceState::Stopped,
|
||||||
|
ServiceControlAccept::empty(),
|
||||||
|
)?;
|
||||||
|
|
||||||
|
result
|
||||||
|
}
|
||||||
|
|
||||||
|
fn set_status(
|
||||||
|
status_handle: &service_control_handler::ServiceStatusHandle,
|
||||||
|
current_state: ServiceState,
|
||||||
|
controls_accepted: ServiceControlAccept,
|
||||||
|
) -> miette::Result<()> {
|
||||||
|
status_handle
|
||||||
|
.set_service_status(ServiceStatus {
|
||||||
|
service_type: ServiceType::OWN_PROCESS,
|
||||||
|
current_state,
|
||||||
|
controls_accepted,
|
||||||
|
exit_code: ServiceExitCode::Win32(0),
|
||||||
|
checkpoint: 0,
|
||||||
|
wait_hint: Duration::from_secs(10),
|
||||||
|
process_id: None,
|
||||||
|
})
|
||||||
|
.into_diagnostic()
|
||||||
|
.wrap_err("failed to update service state")?;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn ensure_admin_rights() -> miette::Result<()> {
|
||||||
|
let status = Command::new("net")
|
||||||
|
.arg("session")
|
||||||
|
.status()
|
||||||
|
.into_diagnostic()
|
||||||
|
.wrap_err("failed to check administrator rights")?;
|
||||||
|
|
||||||
|
if status.success() {
|
||||||
|
Ok(())
|
||||||
|
} else {
|
||||||
|
Err(miette!(
|
||||||
|
"administrator privileges are required to install Windows service"
|
||||||
|
))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn ensure_token_acl_contract(data_dir: &Path) -> miette::Result<()> {
|
||||||
|
// IMPORTANT: Keep this ACL setup explicit.
|
||||||
|
// The service account needs write access, while the interactive user only needs read access
|
||||||
|
// to the bootstrap token and service data directory.
|
||||||
|
let target = data_dir.as_os_str();
|
||||||
|
|
||||||
|
let status = Command::new("icacls")
|
||||||
|
.arg(target)
|
||||||
|
.arg("/grant")
|
||||||
|
.arg("*S-1-5-19:(OI)(CI)M")
|
||||||
|
.arg("/grant")
|
||||||
|
.arg("*S-1-5-32-545:(OI)(CI)RX")
|
||||||
|
.arg("/T")
|
||||||
|
.arg("/C")
|
||||||
|
.status()
|
||||||
|
.into_diagnostic()
|
||||||
|
.wrap_err("failed to apply ACLs for service data directory")?;
|
||||||
|
|
||||||
|
if status.success() {
|
||||||
|
Ok(())
|
||||||
|
} else {
|
||||||
|
Err(miette!(
|
||||||
|
"failed to ensure ACL contract for service data directory"
|
||||||
|
))
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -165,69 +165,3 @@ pub async fn test_challenge_auth() {
|
|||||||
|
|
||||||
task.await.unwrap().unwrap();
|
task.await.unwrap().unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
#[tokio::test]
|
|
||||||
#[test_log::test]
|
|
||||||
pub async fn test_challenge_auth_rejects_invalid_signature() {
|
|
||||||
let db = db::create_test_pool().await;
|
|
||||||
let actors = GlobalActors::spawn(db.clone()).await.unwrap();
|
|
||||||
|
|
||||||
let new_key = ed25519_dalek::SigningKey::generate(&mut rand::rng());
|
|
||||||
let pubkey_bytes = new_key.verifying_key().to_bytes().to_vec();
|
|
||||||
|
|
||||||
// Pre-register key with key_type
|
|
||||||
{
|
|
||||||
let mut conn = db.get().await.unwrap();
|
|
||||||
insert_into(schema::useragent_client::table)
|
|
||||||
.values((
|
|
||||||
schema::useragent_client::public_key.eq(pubkey_bytes.clone()),
|
|
||||||
schema::useragent_client::key_type.eq(1i32),
|
|
||||||
))
|
|
||||||
.execute(&mut conn)
|
|
||||||
.await
|
|
||||||
.unwrap();
|
|
||||||
}
|
|
||||||
|
|
||||||
let (server_transport, mut test_transport) = ChannelTransport::new();
|
|
||||||
let db_for_task = db.clone();
|
|
||||||
let task = tokio::spawn(async move {
|
|
||||||
let mut props = UserAgentConnection::new(db_for_task, actors);
|
|
||||||
auth::authenticate(&mut props, server_transport).await
|
|
||||||
});
|
|
||||||
|
|
||||||
test_transport
|
|
||||||
.send(auth::Inbound::AuthChallengeRequest {
|
|
||||||
pubkey: AuthPublicKey::Ed25519(new_key.verifying_key()),
|
|
||||||
bootstrap_token: None,
|
|
||||||
})
|
|
||||||
.await
|
|
||||||
.unwrap();
|
|
||||||
|
|
||||||
let response = test_transport
|
|
||||||
.recv()
|
|
||||||
.await
|
|
||||||
.expect("should receive challenge");
|
|
||||||
let challenge = match response {
|
|
||||||
Ok(resp) => match resp {
|
|
||||||
auth::Outbound::AuthChallenge { nonce } => nonce,
|
|
||||||
other => panic!("Expected AuthChallenge, got {other:?}"),
|
|
||||||
},
|
|
||||||
Err(err) => panic!("Expected Ok response, got Err({err:?})"),
|
|
||||||
};
|
|
||||||
|
|
||||||
// Sign a different challenge value so signature format is valid but verification must fail.
|
|
||||||
let wrong_challenge = arbiter_proto::format_challenge(challenge + 1, &pubkey_bytes);
|
|
||||||
let signature = new_key.sign(&wrong_challenge);
|
|
||||||
|
|
||||||
test_transport
|
|
||||||
.send(auth::Inbound::AuthChallengeSolution {
|
|
||||||
signature: signature.to_bytes().to_vec(),
|
|
||||||
})
|
|
||||||
.await
|
|
||||||
.unwrap();
|
|
||||||
|
|
||||||
assert!(matches!(
|
|
||||||
task.await.unwrap(),
|
|
||||||
Err(auth::Error::InvalidChallengeSolution)
|
|
||||||
));
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import 'package:arbiter/proto/shared/client.pb.dart';
|
import 'package:arbiter/proto/client.pb.dart';
|
||||||
import 'package:freezed_annotation/freezed_annotation.dart';
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||||
|
import 'package:hooks_riverpod/experimental/mutation.dart';
|
||||||
|
|
||||||
part 'callout_event.freezed.dart';
|
part 'callout_event.freezed.dart';
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import 'package:arbiter/features/callouts/active_callout.dart';
|
|||||||
import 'package:arbiter/features/callouts/callout_event.dart';
|
import 'package:arbiter/features/callouts/callout_event.dart';
|
||||||
import 'package:arbiter/features/callouts/types/sdk_connect_approve.dart'
|
import 'package:arbiter/features/callouts/types/sdk_connect_approve.dart'
|
||||||
as connect_approve;
|
as connect_approve;
|
||||||
import 'package:arbiter/proto/shared/client.pb.dart';
|
import 'package:arbiter/proto/client.pb.dart';
|
||||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||||
|
|
||||||
part 'callout_manager.g.dart';
|
part 'callout_manager.g.dart';
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
|
|
||||||
import 'package:arbiter/features/callouts/callout_event.dart';
|
import 'package:arbiter/features/callouts/callout_event.dart';
|
||||||
import 'package:arbiter/proto/user_agent/sdk_client.pb.dart' as ua_sdk;
|
|
||||||
import 'package:arbiter/proto/user_agent.pb.dart';
|
import 'package:arbiter/proto/user_agent.pb.dart';
|
||||||
import 'package:arbiter/providers/connection/connection_manager.dart';
|
import 'package:arbiter/providers/connection/connection_manager.dart';
|
||||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||||
@@ -15,11 +14,8 @@ Stream<CalloutEvent> connectApproveEvents(Ref ref) async* {
|
|||||||
|
|
||||||
await for (final message in connection.outOfBandMessages) {
|
await for (final message in connection.outOfBandMessages) {
|
||||||
switch (message.whichPayload()) {
|
switch (message.whichPayload()) {
|
||||||
case UserAgentResponse_Payload.sdkClient:
|
case UserAgentResponse_Payload.sdkClientConnectionRequest:
|
||||||
final sdkClientMessage = message.sdkClient;
|
final body = message.sdkClientConnectionRequest;
|
||||||
switch (sdkClientMessage.whichPayload()) {
|
|
||||||
case ua_sdk.Response_Payload.connectionRequest:
|
|
||||||
final body = sdkClientMessage.connectionRequest;
|
|
||||||
final id = base64Encode(body.pubkey);
|
final id = base64Encode(body.pubkey);
|
||||||
yield CalloutEvent.added(
|
yield CalloutEvent.added(
|
||||||
id: 'connect_approve:$id',
|
id: 'connect_approve:$id',
|
||||||
@@ -29,17 +25,13 @@ Stream<CalloutEvent> connectApproveEvents(Ref ref) async* {
|
|||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
case ua_sdk.Response_Payload.connectionCancel:
|
case UserAgentResponse_Payload.sdkClientConnectionCancel:
|
||||||
final id = base64Encode(sdkClientMessage.connectionCancel.pubkey);
|
final id = base64Encode(message.sdkClientConnectionCancel.pubkey);
|
||||||
yield CalloutEvent.cancelled(id: 'connect_approve:$id');
|
yield CalloutEvent.cancelled(id: 'connect_approve:$id');
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -49,14 +41,11 @@ Future<void> sendDecision(Ref ref, String pubkey, bool approved) async {
|
|||||||
|
|
||||||
final bytes = base64Decode(pubkey);
|
final bytes = base64Decode(pubkey);
|
||||||
|
|
||||||
final req = UserAgentRequest(
|
final req = UserAgentRequest(sdkClientConnectionResponse: SdkClientConnectionResponse(
|
||||||
sdkClient: ua_sdk.Request(
|
|
||||||
connectionResponse: ua_sdk.ConnectionResponse(
|
|
||||||
approved: approved,
|
approved: approved,
|
||||||
pubkey: bytes,
|
pubkey: bytes
|
||||||
),
|
));
|
||||||
),
|
|
||||||
);
|
|
||||||
|
|
||||||
await connection.tell(req);
|
await connection.tell(req);
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -47,4 +47,4 @@ final class ConnectApproveEventsProvider
|
|||||||
}
|
}
|
||||||
|
|
||||||
String _$connectApproveEventsHash() =>
|
String _$connectApproveEventsHash() =>
|
||||||
r'abab87cc875a9a4834f836c2c0eba4aa7671d82e';
|
r'6a0998288afc0836a7c1701a983f64c33d318fd6';
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ import 'package:arbiter/features/connection/connection.dart';
|
|||||||
import 'package:arbiter/features/connection/server_info_storage.dart';
|
import 'package:arbiter/features/connection/server_info_storage.dart';
|
||||||
import 'package:arbiter/features/identity/pk_manager.dart';
|
import 'package:arbiter/features/identity/pk_manager.dart';
|
||||||
import 'package:arbiter/proto/arbiter.pbgrpc.dart';
|
import 'package:arbiter/proto/arbiter.pbgrpc.dart';
|
||||||
import 'package:arbiter/proto/user_agent/auth.pb.dart' as ua_auth;
|
|
||||||
import 'package:arbiter/proto/user_agent.pb.dart';
|
import 'package:arbiter/proto/user_agent.pb.dart';
|
||||||
import 'package:grpc/grpc.dart';
|
import 'package:grpc/grpc.dart';
|
||||||
import 'package:mtcore/markettakers.dart';
|
import 'package:mtcore/markettakers.dart';
|
||||||
@@ -13,22 +12,22 @@ import 'package:mtcore/markettakers.dart';
|
|||||||
class AuthorizationException implements Exception {
|
class AuthorizationException implements Exception {
|
||||||
const AuthorizationException(this.result);
|
const AuthorizationException(this.result);
|
||||||
|
|
||||||
final ua_auth.AuthResult result;
|
final AuthResult result;
|
||||||
|
|
||||||
String get message => switch (result) {
|
String get message => switch (result) {
|
||||||
ua_auth.AuthResult.AUTH_RESULT_INVALID_KEY =>
|
AuthResult.AUTH_RESULT_INVALID_KEY =>
|
||||||
'Authentication failed: this device key is not registered on the server.',
|
'Authentication failed: this device key is not registered on the server.',
|
||||||
ua_auth.AuthResult.AUTH_RESULT_INVALID_SIGNATURE =>
|
AuthResult.AUTH_RESULT_INVALID_SIGNATURE =>
|
||||||
'Authentication failed: the server rejected the signature for this device key.',
|
'Authentication failed: the server rejected the signature for this device key.',
|
||||||
ua_auth.AuthResult.AUTH_RESULT_BOOTSTRAP_REQUIRED =>
|
AuthResult.AUTH_RESULT_BOOTSTRAP_REQUIRED =>
|
||||||
'Authentication failed: the server requires bootstrap before this device can connect.',
|
'Authentication failed: the server requires bootstrap before this device can connect.',
|
||||||
ua_auth.AuthResult.AUTH_RESULT_TOKEN_INVALID =>
|
AuthResult.AUTH_RESULT_TOKEN_INVALID =>
|
||||||
'Authentication failed: the bootstrap token is invalid.',
|
'Authentication failed: the bootstrap token is invalid.',
|
||||||
ua_auth.AuthResult.AUTH_RESULT_INTERNAL =>
|
AuthResult.AUTH_RESULT_INTERNAL =>
|
||||||
'Authentication failed: the server hit an internal error.',
|
'Authentication failed: the server hit an internal error.',
|
||||||
ua_auth.AuthResult.AUTH_RESULT_UNSPECIFIED =>
|
AuthResult.AUTH_RESULT_UNSPECIFIED =>
|
||||||
'Authentication failed: the server returned an unspecified auth error.',
|
'Authentication failed: the server returned an unspecified auth error.',
|
||||||
ua_auth.AuthResult.AUTH_RESULT_SUCCESS => 'Authentication succeeded.',
|
AuthResult.AUTH_RESULT_SUCCESS => 'Authentication succeeded.',
|
||||||
_ => 'Authentication failed: ${result.name}.',
|
_ => 'Authentication failed: ${result.name}.',
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -58,76 +57,56 @@ Future<Connection> connectAndAuthorize(
|
|||||||
);
|
);
|
||||||
final pubkey = await key.getPublicKey();
|
final pubkey = await key.getPublicKey();
|
||||||
|
|
||||||
final req = ua_auth.AuthChallengeRequest(
|
final req = AuthChallengeRequest(
|
||||||
pubkey: pubkey,
|
pubkey: pubkey,
|
||||||
bootstrapToken: bootstrapToken,
|
bootstrapToken: bootstrapToken,
|
||||||
keyType: switch (key.alg) {
|
keyType: switch (key.alg) {
|
||||||
KeyAlgorithm.rsa => ua_auth.KeyType.KEY_TYPE_RSA,
|
KeyAlgorithm.rsa => KeyType.KEY_TYPE_RSA,
|
||||||
KeyAlgorithm.ecdsa => ua_auth.KeyType.KEY_TYPE_ECDSA_SECP256K1,
|
KeyAlgorithm.ecdsa => KeyType.KEY_TYPE_ECDSA_SECP256K1,
|
||||||
KeyAlgorithm.ed25519 => ua_auth.KeyType.KEY_TYPE_ED25519,
|
KeyAlgorithm.ed25519 => KeyType.KEY_TYPE_ED25519,
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
final response = await connection.ask(
|
final response = await connection.ask(
|
||||||
UserAgentRequest(auth: ua_auth.Request(challengeRequest: req)),
|
UserAgentRequest(authChallengeRequest: req),
|
||||||
);
|
);
|
||||||
talker.info(
|
talker.info(
|
||||||
"Sent auth challenge request with pubkey ${base64Encode(pubkey)}",
|
"Sent auth challenge request with pubkey ${base64Encode(pubkey)}",
|
||||||
);
|
);
|
||||||
talker.info('Received response from server, checking auth flow...');
|
talker.info('Received response from server, checking auth flow...');
|
||||||
|
|
||||||
if (!response.hasAuth()) {
|
if (response.hasAuthResult()) {
|
||||||
throw ConnectionException(
|
if (response.authResult != AuthResult.AUTH_RESULT_SUCCESS) {
|
||||||
'Expected auth response, got ${response.whichPayload()}',
|
throw AuthorizationException(response.authResult);
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
final authResponse = response.auth;
|
|
||||||
|
|
||||||
if (authResponse.hasResult()) {
|
|
||||||
if (authResponse.result != ua_auth.AuthResult.AUTH_RESULT_SUCCESS) {
|
|
||||||
throw AuthorizationException(authResponse.result);
|
|
||||||
}
|
}
|
||||||
talker.info('Authentication successful, connection established');
|
talker.info('Authentication successful, connection established');
|
||||||
return connection;
|
return connection;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!authResponse.hasChallenge()) {
|
if (!response.hasAuthChallenge()) {
|
||||||
throw ConnectionException(
|
throw ConnectionException(
|
||||||
'Expected auth challenge response, got ${authResponse.whichPayload()}',
|
'Expected AuthChallengeResponse, got ${response.whichPayload()}',
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
final challenge = _formatChallenge(authResponse.challenge, pubkey);
|
final challenge = _formatChallenge(response.authChallenge, pubkey);
|
||||||
talker.info(
|
talker.info(
|
||||||
'Received auth challenge, signing with key ${base64Encode(pubkey)}',
|
'Received auth challenge, signing with key ${base64Encode(pubkey)}',
|
||||||
);
|
);
|
||||||
|
|
||||||
final signature = await key.sign(challenge);
|
final signature = await key.sign(challenge);
|
||||||
final solutionResponse = await connection.ask(
|
final solutionResponse = await connection.ask(
|
||||||
UserAgentRequest(
|
UserAgentRequest(authChallengeSolution: AuthChallengeSolution(signature: signature)),
|
||||||
auth: ua_auth.Request(
|
|
||||||
challengeSolution: ua_auth.AuthChallengeSolution(signature: signature),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
talker.info('Sent auth challenge solution, waiting for server response...');
|
talker.info('Sent auth challenge solution, waiting for server response...');
|
||||||
|
|
||||||
if (!solutionResponse.hasAuth()) {
|
if (!solutionResponse.hasAuthResult()) {
|
||||||
throw ConnectionException(
|
throw ConnectionException(
|
||||||
'Expected auth solution response, got ${solutionResponse.whichPayload()}',
|
'Expected AuthChallengeSolutionResponse, got ${solutionResponse.whichPayload()}',
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
if (solutionResponse.authResult != AuthResult.AUTH_RESULT_SUCCESS) {
|
||||||
final authSolutionResponse = solutionResponse.auth;
|
throw AuthorizationException(solutionResponse.authResult);
|
||||||
|
|
||||||
if (!authSolutionResponse.hasResult()) {
|
|
||||||
throw ConnectionException(
|
|
||||||
'Expected auth solution result, got ${authSolutionResponse.whichPayload()}',
|
|
||||||
);
|
|
||||||
}
|
|
||||||
if (authSolutionResponse.result != ua_auth.AuthResult.AUTH_RESULT_SUCCESS) {
|
|
||||||
throw AuthorizationException(authSolutionResponse.result);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
talker.info('Authentication successful, connection established');
|
talker.info('Authentication successful, connection established');
|
||||||
@@ -168,7 +147,7 @@ Future<Connection> _connect(StoredServerInfo serverInfo) async {
|
|||||||
return Connection(channel: channel, tx: tx, rx: rx);
|
return Connection(channel: channel, tx: tx, rx: rx);
|
||||||
}
|
}
|
||||||
|
|
||||||
List<int> _formatChallenge(ua_auth.AuthChallenge challenge, List<int> pubkey) {
|
List<int> _formatChallenge(AuthChallenge challenge, List<int> pubkey) {
|
||||||
final encodedPubkey = base64Encode(pubkey);
|
final encodedPubkey = base64Encode(pubkey);
|
||||||
final payload = "${challenge.nonce}:$encodedPubkey";
|
final payload = "${challenge.nonce}:$encodedPubkey";
|
||||||
return utf8.encode(payload);
|
return utf8.encode(payload);
|
||||||
|
|||||||
@@ -1,27 +1,19 @@
|
|||||||
import 'package:arbiter/features/connection/connection.dart';
|
import 'package:arbiter/features/connection/connection.dart';
|
||||||
import 'package:arbiter/proto/evm.pb.dart';
|
import 'package:arbiter/proto/evm.pb.dart';
|
||||||
import 'package:arbiter/proto/user_agent/evm.pb.dart' as ua_evm;
|
|
||||||
import 'package:arbiter/proto/user_agent.pb.dart';
|
import 'package:arbiter/proto/user_agent.pb.dart';
|
||||||
import 'package:protobuf/well_known_types/google/protobuf/empty.pb.dart';
|
import 'package:protobuf/well_known_types/google/protobuf/empty.pb.dart';
|
||||||
|
|
||||||
Future<List<WalletEntry>> listEvmWallets(Connection connection) async {
|
Future<List<WalletEntry>> listEvmWallets(Connection connection) async {
|
||||||
final response = await connection.ask(
|
final response = await connection.ask(
|
||||||
UserAgentRequest(evm: ua_evm.Request(walletList: Empty())),
|
UserAgentRequest(evmWalletList: Empty()),
|
||||||
);
|
);
|
||||||
if (!response.hasEvm()) {
|
if (!response.hasEvmWalletList()) {
|
||||||
throw Exception(
|
throw Exception(
|
||||||
'Expected EVM response, got ${response.whichPayload()}',
|
'Expected EVM wallet list response, got ${response.whichPayload()}',
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
final evmResponse = response.evm;
|
final result = response.evmWalletList;
|
||||||
if (!evmResponse.hasWalletList()) {
|
|
||||||
throw Exception(
|
|
||||||
'Expected EVM wallet list response, got ${evmResponse.whichPayload()}',
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
final result = evmResponse.walletList;
|
|
||||||
switch (result.whichResult()) {
|
switch (result.whichResult()) {
|
||||||
case WalletListResponse_Result.wallets:
|
case WalletListResponse_Result.wallets:
|
||||||
return result.wallets.wallets.toList(growable: false);
|
return result.wallets.wallets.toList(growable: false);
|
||||||
@@ -34,22 +26,15 @@ Future<List<WalletEntry>> listEvmWallets(Connection connection) async {
|
|||||||
|
|
||||||
Future<void> createEvmWallet(Connection connection) async {
|
Future<void> createEvmWallet(Connection connection) async {
|
||||||
final response = await connection.ask(
|
final response = await connection.ask(
|
||||||
UserAgentRequest(evm: ua_evm.Request(walletCreate: Empty())),
|
UserAgentRequest(evmWalletCreate: Empty()),
|
||||||
);
|
);
|
||||||
if (!response.hasEvm()) {
|
if (!response.hasEvmWalletCreate()) {
|
||||||
throw Exception(
|
throw Exception(
|
||||||
'Expected EVM response, got ${response.whichPayload()}',
|
'Expected EVM wallet create response, got ${response.whichPayload()}',
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
final evmResponse = response.evm;
|
final result = response.evmWalletCreate;
|
||||||
if (!evmResponse.hasWalletCreate()) {
|
|
||||||
throw Exception(
|
|
||||||
'Expected EVM wallet create response, got ${evmResponse.whichPayload()}',
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
final result = evmResponse.walletCreate;
|
|
||||||
switch (result.whichResult()) {
|
switch (result.whichResult()) {
|
||||||
case WalletCreateResponse_Result.wallet:
|
case WalletCreateResponse_Result.wallet:
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -1,28 +1,22 @@
|
|||||||
import 'package:arbiter/features/connection/connection.dart';
|
import 'package:arbiter/features/connection/connection.dart';
|
||||||
import 'package:arbiter/proto/evm.pb.dart';
|
import 'package:arbiter/proto/evm.pb.dart';
|
||||||
import 'package:arbiter/proto/user_agent/evm.pb.dart' as ua_evm;
|
|
||||||
import 'package:arbiter/proto/user_agent.pb.dart';
|
import 'package:arbiter/proto/user_agent.pb.dart';
|
||||||
|
import 'package:fixnum/fixnum.dart';
|
||||||
|
import 'package:protobuf/well_known_types/google/protobuf/timestamp.pb.dart';
|
||||||
|
|
||||||
Future<List<GrantEntry>> listEvmGrants(Connection connection) async {
|
Future<List<GrantEntry>> listEvmGrants(Connection connection) async {
|
||||||
final request = EvmGrantListRequest();
|
final request = EvmGrantListRequest();
|
||||||
|
|
||||||
final response = await connection.ask(
|
final response = await connection.ask(
|
||||||
UserAgentRequest(evm: ua_evm.Request(grantList: request)),
|
UserAgentRequest(evmGrantList: request),
|
||||||
);
|
);
|
||||||
if (!response.hasEvm()) {
|
if (!response.hasEvmGrantList()) {
|
||||||
throw Exception(
|
throw Exception(
|
||||||
'Expected EVM response, got ${response.whichPayload()}',
|
'Expected EVM grant list response, got ${response.whichPayload()}',
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
final evmResponse = response.evm;
|
final result = response.evmGrantList;
|
||||||
if (!evmResponse.hasGrantList()) {
|
|
||||||
throw Exception(
|
|
||||||
'Expected EVM grant list response, got ${evmResponse.whichPayload()}',
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
final result = evmResponse.grantList;
|
|
||||||
switch (result.whichResult()) {
|
switch (result.whichResult()) {
|
||||||
case EvmGrantListResponse_Result.grants:
|
case EvmGrantListResponse_Result.grants:
|
||||||
return result.grants.grants.toList(growable: false);
|
return result.grants.grants.toList(growable: false);
|
||||||
@@ -39,56 +33,36 @@ Future<int> createEvmGrant(
|
|||||||
required SpecificGrant specific,
|
required SpecificGrant specific,
|
||||||
}) async {
|
}) async {
|
||||||
final request = UserAgentRequest(
|
final request = UserAgentRequest(
|
||||||
evm: ua_evm.Request(
|
evmGrantCreate: EvmGrantCreateRequest(
|
||||||
grantCreate: EvmGrantCreateRequest(
|
|
||||||
shared: sharedSettings,
|
shared: sharedSettings,
|
||||||
specific: specific,
|
specific: specific,
|
||||||
),
|
),
|
||||||
),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
final resp = await connection.ask(request);
|
final resp = await connection.ask(request);
|
||||||
|
|
||||||
if (!resp.hasEvm()) {
|
if (!resp.hasEvmGrantCreate()) {
|
||||||
throw Exception(
|
throw Exception(
|
||||||
'Expected EVM response, got ${resp.whichPayload()}',
|
'Expected EVM grant create response, got ${resp.whichPayload()}',
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
final evmResponse = resp.evm;
|
final result = resp.evmGrantCreate;
|
||||||
if (!evmResponse.hasGrantCreate()) {
|
|
||||||
throw Exception(
|
|
||||||
'Expected EVM grant create response, got ${evmResponse.whichPayload()}',
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
final result = evmResponse.grantCreate;
|
|
||||||
|
|
||||||
return result.grantId;
|
return result.grantId;
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> deleteEvmGrant(Connection connection, int grantId) async {
|
Future<void> deleteEvmGrant(Connection connection, int grantId) async {
|
||||||
final response = await connection.ask(
|
final response = await connection.ask(
|
||||||
UserAgentRequest(
|
UserAgentRequest(evmGrantDelete: EvmGrantDeleteRequest(grantId: grantId)),
|
||||||
evm: ua_evm.Request(
|
|
||||||
grantDelete: EvmGrantDeleteRequest(grantId: grantId),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
);
|
||||||
if (!response.hasEvm()) {
|
if (!response.hasEvmGrantDelete()) {
|
||||||
throw Exception(
|
throw Exception(
|
||||||
'Expected EVM response, got ${response.whichPayload()}',
|
'Expected EVM grant delete response, got ${response.whichPayload()}',
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
final evmResponse = response.evm;
|
final result = response.evmGrantDelete;
|
||||||
if (!evmResponse.hasGrantDelete()) {
|
|
||||||
throw Exception(
|
|
||||||
'Expected EVM grant delete response, got ${evmResponse.whichPayload()}',
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
final result = evmResponse.grantDelete;
|
|
||||||
switch (result.whichResult()) {
|
switch (result.whichResult()) {
|
||||||
case EvmGrantDeleteResponse_Result.ok:
|
case EvmGrantDeleteResponse_Result.ok:
|
||||||
return;
|
return;
|
||||||
@@ -99,6 +73,13 @@ Future<void> deleteEvmGrant(Connection connection, int grantId) async {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Timestamp _toTimestamp(DateTime value) {
|
||||||
|
final utc = value.toUtc();
|
||||||
|
return Timestamp()
|
||||||
|
..seconds = Int64(utc.millisecondsSinceEpoch ~/ 1000)
|
||||||
|
..nanos = (utc.microsecondsSinceEpoch % 1000000) * 1000;
|
||||||
|
}
|
||||||
|
|
||||||
String _describeGrantError(EvmError error) {
|
String _describeGrantError(EvmError error) {
|
||||||
return switch (error) {
|
return switch (error) {
|
||||||
EvmError.EVM_ERROR_VAULT_SEALED =>
|
EvmError.EVM_ERROR_VAULT_SEALED =>
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
import 'package:arbiter/features/connection/connection.dart';
|
import 'package:arbiter/features/connection/connection.dart';
|
||||||
import 'package:arbiter/proto/user_agent/sdk_client.pb.dart' as ua_sdk;
|
|
||||||
import 'package:arbiter/proto/user_agent.pb.dart';
|
import 'package:arbiter/proto/user_agent.pb.dart';
|
||||||
import 'package:protobuf/well_known_types/google/protobuf/empty.pb.dart';
|
import 'package:protobuf/well_known_types/google/protobuf/empty.pb.dart';
|
||||||
|
|
||||||
@@ -8,47 +7,31 @@ Future<Set<int>> readClientWalletAccess(
|
|||||||
required int clientId,
|
required int clientId,
|
||||||
}) async {
|
}) async {
|
||||||
final response = await connection.ask(
|
final response = await connection.ask(
|
||||||
UserAgentRequest(
|
UserAgentRequest(listWalletAccess: Empty()),
|
||||||
sdkClient: ua_sdk.Request(listWalletAccess: Empty()),
|
|
||||||
),
|
|
||||||
);
|
);
|
||||||
if (!response.hasSdkClient()) {
|
if (!response.hasListWalletAccessResponse()) {
|
||||||
throw Exception(
|
throw Exception(
|
||||||
'Expected SDK client response, got ${response.whichPayload()}',
|
'Expected list wallet access response, got ${response.whichPayload()}',
|
||||||
);
|
|
||||||
}
|
|
||||||
final sdkClientResponse = response.sdkClient;
|
|
||||||
if (!sdkClientResponse.hasListWalletAccess()) {
|
|
||||||
throw Exception(
|
|
||||||
'Expected list wallet access response, got ${sdkClientResponse.whichPayload()}',
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
return {
|
return {
|
||||||
for (final entry in sdkClientResponse.listWalletAccess.accesses)
|
for (final entry in response.listWalletAccessResponse.accesses)
|
||||||
if (entry.access.sdkClientId == clientId) entry.access.walletId,
|
if (entry.access.sdkClientId == clientId) entry.access.walletId,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<List<ua_sdk.WalletAccessEntry>> listAllWalletAccesses(
|
Future<List<SdkClientWalletAccess>> listAllWalletAccesses(
|
||||||
Connection connection,
|
Connection connection,
|
||||||
) async {
|
) async {
|
||||||
final response = await connection.ask(
|
final response = await connection.ask(
|
||||||
UserAgentRequest(
|
UserAgentRequest(listWalletAccess: Empty()),
|
||||||
sdkClient: ua_sdk.Request(listWalletAccess: Empty()),
|
|
||||||
),
|
|
||||||
);
|
);
|
||||||
if (!response.hasSdkClient()) {
|
if (!response.hasListWalletAccessResponse()) {
|
||||||
throw Exception(
|
throw Exception(
|
||||||
'Expected SDK client response, got ${response.whichPayload()}',
|
'Expected list wallet access response, got ${response.whichPayload()}',
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
final sdkClientResponse = response.sdkClient;
|
return response.listWalletAccessResponse.accesses.toList(growable: false);
|
||||||
if (!sdkClientResponse.hasListWalletAccess()) {
|
|
||||||
throw Exception(
|
|
||||||
'Expected list wallet access response, got ${sdkClientResponse.whichPayload()}',
|
|
||||||
);
|
|
||||||
}
|
|
||||||
return sdkClientResponse.listWalletAccess.accesses.toList(growable: false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> writeClientWalletAccess(
|
Future<void> writeClientWalletAccess(
|
||||||
@@ -64,29 +47,26 @@ Future<void> writeClientWalletAccess(
|
|||||||
if (toGrant.isNotEmpty) {
|
if (toGrant.isNotEmpty) {
|
||||||
await connection.tell(
|
await connection.tell(
|
||||||
UserAgentRequest(
|
UserAgentRequest(
|
||||||
sdkClient: ua_sdk.Request(
|
grantWalletAccess: SdkClientGrantWalletAccess(
|
||||||
grantWalletAccess: ua_sdk.GrantWalletAccess(
|
|
||||||
accesses: [
|
accesses: [
|
||||||
for (final walletId in toGrant)
|
for (final walletId in toGrant)
|
||||||
ua_sdk.WalletAccess(sdkClientId: clientId, walletId: walletId),
|
WalletAccess(sdkClientId: clientId, walletId: walletId),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (toRevoke.isNotEmpty) {
|
if (toRevoke.isNotEmpty) {
|
||||||
await connection.tell(
|
await connection.tell(
|
||||||
UserAgentRequest(
|
UserAgentRequest(
|
||||||
sdkClient: ua_sdk.Request(
|
revokeWalletAccess: SdkClientRevokeWalletAccess(
|
||||||
revokeWalletAccess: ua_sdk.RevokeWalletAccess(
|
|
||||||
accesses: [
|
accesses: [
|
||||||
for (final walletId in toRevoke) walletId,
|
for (final walletId in toRevoke)
|
||||||
|
walletId
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,13 +1,10 @@
|
|||||||
import 'package:arbiter/features/connection/connection.dart';
|
import 'package:arbiter/features/connection/connection.dart';
|
||||||
import 'package:arbiter/proto/user_agent/vault/bootstrap.pb.dart' as ua_bootstrap;
|
|
||||||
import 'package:arbiter/proto/user_agent/vault/unseal.pb.dart' as ua_unseal;
|
|
||||||
import 'package:arbiter/proto/user_agent/vault/vault.pb.dart' as ua_vault;
|
|
||||||
import 'package:arbiter/proto/user_agent.pb.dart';
|
import 'package:arbiter/proto/user_agent.pb.dart';
|
||||||
import 'package:cryptography/cryptography.dart';
|
import 'package:cryptography/cryptography.dart';
|
||||||
|
|
||||||
const _vaultKeyAssociatedData = 'arbiter.vault.password';
|
const _vaultKeyAssociatedData = 'arbiter.vault.password';
|
||||||
|
|
||||||
Future<ua_bootstrap.BootstrapResult> bootstrapVault(
|
Future<BootstrapResult> bootstrapVault(
|
||||||
Connection connection,
|
Connection connection,
|
||||||
String password,
|
String password,
|
||||||
) async {
|
) async {
|
||||||
@@ -15,76 +12,39 @@ Future<ua_bootstrap.BootstrapResult> bootstrapVault(
|
|||||||
|
|
||||||
final response = await connection.ask(
|
final response = await connection.ask(
|
||||||
UserAgentRequest(
|
UserAgentRequest(
|
||||||
vault: ua_vault.Request(
|
bootstrapEncryptedKey: BootstrapEncryptedKey(
|
||||||
bootstrap: ua_bootstrap.Request(
|
|
||||||
encryptedKey: ua_bootstrap.BootstrapEncryptedKey(
|
|
||||||
nonce: encryptedKey.nonce,
|
nonce: encryptedKey.nonce,
|
||||||
ciphertext: encryptedKey.ciphertext,
|
ciphertext: encryptedKey.ciphertext,
|
||||||
associatedData: encryptedKey.associatedData,
|
associatedData: encryptedKey.associatedData,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
);
|
||||||
if (!response.hasVault()) {
|
if (!response.hasBootstrapResult()) {
|
||||||
throw Exception(
|
throw Exception(
|
||||||
'Expected vault response, got ${response.whichPayload()}',
|
'Expected bootstrap result, got ${response.whichPayload()}',
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
final vaultResponse = response.vault;
|
return response.bootstrapResult;
|
||||||
if (!vaultResponse.hasBootstrap()) {
|
|
||||||
throw Exception(
|
|
||||||
'Expected bootstrap result, got ${vaultResponse.whichPayload()}',
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
final bootstrapResponse = vaultResponse.bootstrap;
|
Future<UnsealResult> unsealVault(Connection connection, String password) async {
|
||||||
if (!bootstrapResponse.hasResult()) {
|
|
||||||
throw Exception('Expected bootstrap result payload.');
|
|
||||||
}
|
|
||||||
|
|
||||||
return bootstrapResponse.result;
|
|
||||||
}
|
|
||||||
|
|
||||||
Future<ua_unseal.UnsealResult> unsealVault(
|
|
||||||
Connection connection,
|
|
||||||
String password,
|
|
||||||
) async {
|
|
||||||
final encryptedKey = await _encryptVaultKeyMaterial(connection, password);
|
final encryptedKey = await _encryptVaultKeyMaterial(connection, password);
|
||||||
|
|
||||||
final response = await connection.ask(
|
final response = await connection.ask(
|
||||||
UserAgentRequest(
|
UserAgentRequest(
|
||||||
vault: ua_vault.Request(
|
unsealEncryptedKey: UnsealEncryptedKey(
|
||||||
unseal: ua_unseal.Request(
|
|
||||||
encryptedKey: ua_unseal.UnsealEncryptedKey(
|
|
||||||
nonce: encryptedKey.nonce,
|
nonce: encryptedKey.nonce,
|
||||||
ciphertext: encryptedKey.ciphertext,
|
ciphertext: encryptedKey.ciphertext,
|
||||||
associatedData: encryptedKey.associatedData,
|
associatedData: encryptedKey.associatedData,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
);
|
||||||
if (!response.hasVault()) {
|
if (!response.hasUnsealResult()) {
|
||||||
throw Exception('Expected vault response, got ${response.whichPayload()}');
|
throw Exception('Expected unseal result, got ${response.whichPayload()}');
|
||||||
}
|
}
|
||||||
|
|
||||||
final vaultResponse = response.vault;
|
return response.unsealResult;
|
||||||
if (!vaultResponse.hasUnseal()) {
|
|
||||||
throw Exception(
|
|
||||||
'Expected unseal result, got ${vaultResponse.whichPayload()}',
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
final unsealResponse = vaultResponse.unseal;
|
|
||||||
if (!unsealResponse.hasResult()) {
|
|
||||||
throw Exception(
|
|
||||||
'Expected unseal result payload, got ${unsealResponse.whichPayload()}',
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
return unsealResponse.result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<_EncryptedVaultKey> _encryptVaultKeyMaterial(
|
Future<_EncryptedVaultKey> _encryptVaultKeyMaterial(
|
||||||
@@ -97,36 +57,16 @@ Future<_EncryptedVaultKey> _encryptVaultKeyMaterial(
|
|||||||
final clientPublicKey = await clientKeyPair.extractPublicKey();
|
final clientPublicKey = await clientKeyPair.extractPublicKey();
|
||||||
|
|
||||||
final handshakeResponse = await connection.ask(
|
final handshakeResponse = await connection.ask(
|
||||||
UserAgentRequest(
|
UserAgentRequest(unsealStart: UnsealStart(clientPubkey: clientPublicKey.bytes)),
|
||||||
vault: ua_vault.Request(
|
|
||||||
unseal: ua_unseal.Request(
|
|
||||||
start: ua_unseal.UnsealStart(clientPubkey: clientPublicKey.bytes),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
);
|
||||||
if (!handshakeResponse.hasVault()) {
|
if (!handshakeResponse.hasUnsealStartResponse()) {
|
||||||
throw Exception(
|
throw Exception(
|
||||||
'Expected vault response, got ${handshakeResponse.whichPayload()}',
|
'Expected unseal handshake response, got ${handshakeResponse.whichPayload()}',
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
final vaultResponse = handshakeResponse.vault;
|
|
||||||
if (!vaultResponse.hasUnseal()) {
|
|
||||||
throw Exception(
|
|
||||||
'Expected unseal handshake response, got ${vaultResponse.whichPayload()}',
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
final unsealResponse = vaultResponse.unseal;
|
|
||||||
if (!unsealResponse.hasStart()) {
|
|
||||||
throw Exception(
|
|
||||||
'Expected unseal handshake payload, got ${unsealResponse.whichPayload()}',
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
final serverPublicKey = SimplePublicKey(
|
final serverPublicKey = SimplePublicKey(
|
||||||
unsealResponse.start.serverPubkey,
|
handshakeResponse.unsealStartResponse.serverPubkey,
|
||||||
type: KeyPairType.x25519,
|
type: KeyPairType.x25519,
|
||||||
);
|
);
|
||||||
final sharedSecret = await keyExchange.sharedSecretKey(
|
final sharedSecret = await keyExchange.sharedSecretKey(
|
||||||
|
|||||||
@@ -13,26 +13,305 @@
|
|||||||
import 'dart:core' as $core;
|
import 'dart:core' as $core;
|
||||||
|
|
||||||
import 'package:protobuf/protobuf.dart' as $pb;
|
import 'package:protobuf/protobuf.dart' as $pb;
|
||||||
|
import 'package:protobuf/well_known_types/google/protobuf/empty.pb.dart' as $0;
|
||||||
|
|
||||||
import 'client/auth.pb.dart' as $0;
|
import 'client.pbenum.dart';
|
||||||
import 'client/evm.pb.dart' as $2;
|
import 'evm.pb.dart' as $1;
|
||||||
import 'client/vault.pb.dart' as $1;
|
|
||||||
|
|
||||||
export 'package:protobuf/protobuf.dart' show GeneratedMessageGenericExtensions;
|
export 'package:protobuf/protobuf.dart' show GeneratedMessageGenericExtensions;
|
||||||
|
|
||||||
enum ClientRequest_Payload { auth, vault, evm, notSet }
|
export 'client.pbenum.dart';
|
||||||
|
|
||||||
|
class ClientInfo extends $pb.GeneratedMessage {
|
||||||
|
factory ClientInfo({
|
||||||
|
$core.String? name,
|
||||||
|
$core.String? description,
|
||||||
|
$core.String? version,
|
||||||
|
}) {
|
||||||
|
final result = create();
|
||||||
|
if (name != null) result.name = name;
|
||||||
|
if (description != null) result.description = description;
|
||||||
|
if (version != null) result.version = version;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
ClientInfo._();
|
||||||
|
|
||||||
|
factory ClientInfo.fromBuffer($core.List<$core.int> data,
|
||||||
|
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
||||||
|
create()..mergeFromBuffer(data, registry);
|
||||||
|
factory ClientInfo.fromJson($core.String json,
|
||||||
|
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
||||||
|
create()..mergeFromJson(json, registry);
|
||||||
|
|
||||||
|
static final $pb.BuilderInfo _i = $pb.BuilderInfo(
|
||||||
|
_omitMessageNames ? '' : 'ClientInfo',
|
||||||
|
package: const $pb.PackageName(_omitMessageNames ? '' : 'arbiter.client'),
|
||||||
|
createEmptyInstance: create)
|
||||||
|
..aOS(1, _omitFieldNames ? '' : 'name')
|
||||||
|
..aOS(2, _omitFieldNames ? '' : 'description')
|
||||||
|
..aOS(3, _omitFieldNames ? '' : 'version')
|
||||||
|
..hasRequiredFields = false;
|
||||||
|
|
||||||
|
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
||||||
|
ClientInfo clone() => deepCopy();
|
||||||
|
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
||||||
|
ClientInfo copyWith(void Function(ClientInfo) updates) =>
|
||||||
|
super.copyWith((message) => updates(message as ClientInfo)) as ClientInfo;
|
||||||
|
|
||||||
|
@$core.override
|
||||||
|
$pb.BuilderInfo get info_ => _i;
|
||||||
|
|
||||||
|
@$core.pragma('dart2js:noInline')
|
||||||
|
static ClientInfo create() => ClientInfo._();
|
||||||
|
@$core.override
|
||||||
|
ClientInfo createEmptyInstance() => create();
|
||||||
|
@$core.pragma('dart2js:noInline')
|
||||||
|
static ClientInfo getDefault() => _defaultInstance ??=
|
||||||
|
$pb.GeneratedMessage.$_defaultFor<ClientInfo>(create);
|
||||||
|
static ClientInfo? _defaultInstance;
|
||||||
|
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
$core.String get name => $_getSZ(0);
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
set name($core.String value) => $_setString(0, value);
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
$core.bool hasName() => $_has(0);
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
void clearName() => $_clearField(1);
|
||||||
|
|
||||||
|
@$pb.TagNumber(2)
|
||||||
|
$core.String get description => $_getSZ(1);
|
||||||
|
@$pb.TagNumber(2)
|
||||||
|
set description($core.String value) => $_setString(1, value);
|
||||||
|
@$pb.TagNumber(2)
|
||||||
|
$core.bool hasDescription() => $_has(1);
|
||||||
|
@$pb.TagNumber(2)
|
||||||
|
void clearDescription() => $_clearField(2);
|
||||||
|
|
||||||
|
@$pb.TagNumber(3)
|
||||||
|
$core.String get version => $_getSZ(2);
|
||||||
|
@$pb.TagNumber(3)
|
||||||
|
set version($core.String value) => $_setString(2, value);
|
||||||
|
@$pb.TagNumber(3)
|
||||||
|
$core.bool hasVersion() => $_has(2);
|
||||||
|
@$pb.TagNumber(3)
|
||||||
|
void clearVersion() => $_clearField(3);
|
||||||
|
}
|
||||||
|
|
||||||
|
class AuthChallengeRequest extends $pb.GeneratedMessage {
|
||||||
|
factory AuthChallengeRequest({
|
||||||
|
$core.List<$core.int>? pubkey,
|
||||||
|
ClientInfo? clientInfo,
|
||||||
|
}) {
|
||||||
|
final result = create();
|
||||||
|
if (pubkey != null) result.pubkey = pubkey;
|
||||||
|
if (clientInfo != null) result.clientInfo = clientInfo;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
AuthChallengeRequest._();
|
||||||
|
|
||||||
|
factory AuthChallengeRequest.fromBuffer($core.List<$core.int> data,
|
||||||
|
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
||||||
|
create()..mergeFromBuffer(data, registry);
|
||||||
|
factory AuthChallengeRequest.fromJson($core.String json,
|
||||||
|
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
||||||
|
create()..mergeFromJson(json, registry);
|
||||||
|
|
||||||
|
static final $pb.BuilderInfo _i = $pb.BuilderInfo(
|
||||||
|
_omitMessageNames ? '' : 'AuthChallengeRequest',
|
||||||
|
package: const $pb.PackageName(_omitMessageNames ? '' : 'arbiter.client'),
|
||||||
|
createEmptyInstance: create)
|
||||||
|
..a<$core.List<$core.int>>(
|
||||||
|
1, _omitFieldNames ? '' : 'pubkey', $pb.PbFieldType.OY)
|
||||||
|
..aOM<ClientInfo>(2, _omitFieldNames ? '' : 'clientInfo',
|
||||||
|
subBuilder: ClientInfo.create)
|
||||||
|
..hasRequiredFields = false;
|
||||||
|
|
||||||
|
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
||||||
|
AuthChallengeRequest clone() => deepCopy();
|
||||||
|
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
||||||
|
AuthChallengeRequest copyWith(void Function(AuthChallengeRequest) updates) =>
|
||||||
|
super.copyWith((message) => updates(message as AuthChallengeRequest))
|
||||||
|
as AuthChallengeRequest;
|
||||||
|
|
||||||
|
@$core.override
|
||||||
|
$pb.BuilderInfo get info_ => _i;
|
||||||
|
|
||||||
|
@$core.pragma('dart2js:noInline')
|
||||||
|
static AuthChallengeRequest create() => AuthChallengeRequest._();
|
||||||
|
@$core.override
|
||||||
|
AuthChallengeRequest createEmptyInstance() => create();
|
||||||
|
@$core.pragma('dart2js:noInline')
|
||||||
|
static AuthChallengeRequest getDefault() => _defaultInstance ??=
|
||||||
|
$pb.GeneratedMessage.$_defaultFor<AuthChallengeRequest>(create);
|
||||||
|
static AuthChallengeRequest? _defaultInstance;
|
||||||
|
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
$core.List<$core.int> get pubkey => $_getN(0);
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
set pubkey($core.List<$core.int> value) => $_setBytes(0, value);
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
$core.bool hasPubkey() => $_has(0);
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
void clearPubkey() => $_clearField(1);
|
||||||
|
|
||||||
|
@$pb.TagNumber(2)
|
||||||
|
ClientInfo get clientInfo => $_getN(1);
|
||||||
|
@$pb.TagNumber(2)
|
||||||
|
set clientInfo(ClientInfo value) => $_setField(2, value);
|
||||||
|
@$pb.TagNumber(2)
|
||||||
|
$core.bool hasClientInfo() => $_has(1);
|
||||||
|
@$pb.TagNumber(2)
|
||||||
|
void clearClientInfo() => $_clearField(2);
|
||||||
|
@$pb.TagNumber(2)
|
||||||
|
ClientInfo ensureClientInfo() => $_ensure(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
class AuthChallenge extends $pb.GeneratedMessage {
|
||||||
|
factory AuthChallenge({
|
||||||
|
$core.List<$core.int>? pubkey,
|
||||||
|
$core.int? nonce,
|
||||||
|
}) {
|
||||||
|
final result = create();
|
||||||
|
if (pubkey != null) result.pubkey = pubkey;
|
||||||
|
if (nonce != null) result.nonce = nonce;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
AuthChallenge._();
|
||||||
|
|
||||||
|
factory AuthChallenge.fromBuffer($core.List<$core.int> data,
|
||||||
|
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
||||||
|
create()..mergeFromBuffer(data, registry);
|
||||||
|
factory AuthChallenge.fromJson($core.String json,
|
||||||
|
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
||||||
|
create()..mergeFromJson(json, registry);
|
||||||
|
|
||||||
|
static final $pb.BuilderInfo _i = $pb.BuilderInfo(
|
||||||
|
_omitMessageNames ? '' : 'AuthChallenge',
|
||||||
|
package: const $pb.PackageName(_omitMessageNames ? '' : 'arbiter.client'),
|
||||||
|
createEmptyInstance: create)
|
||||||
|
..a<$core.List<$core.int>>(
|
||||||
|
1, _omitFieldNames ? '' : 'pubkey', $pb.PbFieldType.OY)
|
||||||
|
..aI(2, _omitFieldNames ? '' : 'nonce')
|
||||||
|
..hasRequiredFields = false;
|
||||||
|
|
||||||
|
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
||||||
|
AuthChallenge clone() => deepCopy();
|
||||||
|
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
||||||
|
AuthChallenge copyWith(void Function(AuthChallenge) updates) =>
|
||||||
|
super.copyWith((message) => updates(message as AuthChallenge))
|
||||||
|
as AuthChallenge;
|
||||||
|
|
||||||
|
@$core.override
|
||||||
|
$pb.BuilderInfo get info_ => _i;
|
||||||
|
|
||||||
|
@$core.pragma('dart2js:noInline')
|
||||||
|
static AuthChallenge create() => AuthChallenge._();
|
||||||
|
@$core.override
|
||||||
|
AuthChallenge createEmptyInstance() => create();
|
||||||
|
@$core.pragma('dart2js:noInline')
|
||||||
|
static AuthChallenge getDefault() => _defaultInstance ??=
|
||||||
|
$pb.GeneratedMessage.$_defaultFor<AuthChallenge>(create);
|
||||||
|
static AuthChallenge? _defaultInstance;
|
||||||
|
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
$core.List<$core.int> get pubkey => $_getN(0);
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
set pubkey($core.List<$core.int> value) => $_setBytes(0, value);
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
$core.bool hasPubkey() => $_has(0);
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
void clearPubkey() => $_clearField(1);
|
||||||
|
|
||||||
|
@$pb.TagNumber(2)
|
||||||
|
$core.int get nonce => $_getIZ(1);
|
||||||
|
@$pb.TagNumber(2)
|
||||||
|
set nonce($core.int value) => $_setSignedInt32(1, value);
|
||||||
|
@$pb.TagNumber(2)
|
||||||
|
$core.bool hasNonce() => $_has(1);
|
||||||
|
@$pb.TagNumber(2)
|
||||||
|
void clearNonce() => $_clearField(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
class AuthChallengeSolution extends $pb.GeneratedMessage {
|
||||||
|
factory AuthChallengeSolution({
|
||||||
|
$core.List<$core.int>? signature,
|
||||||
|
}) {
|
||||||
|
final result = create();
|
||||||
|
if (signature != null) result.signature = signature;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
AuthChallengeSolution._();
|
||||||
|
|
||||||
|
factory AuthChallengeSolution.fromBuffer($core.List<$core.int> data,
|
||||||
|
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
||||||
|
create()..mergeFromBuffer(data, registry);
|
||||||
|
factory AuthChallengeSolution.fromJson($core.String json,
|
||||||
|
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
||||||
|
create()..mergeFromJson(json, registry);
|
||||||
|
|
||||||
|
static final $pb.BuilderInfo _i = $pb.BuilderInfo(
|
||||||
|
_omitMessageNames ? '' : 'AuthChallengeSolution',
|
||||||
|
package: const $pb.PackageName(_omitMessageNames ? '' : 'arbiter.client'),
|
||||||
|
createEmptyInstance: create)
|
||||||
|
..a<$core.List<$core.int>>(
|
||||||
|
1, _omitFieldNames ? '' : 'signature', $pb.PbFieldType.OY)
|
||||||
|
..hasRequiredFields = false;
|
||||||
|
|
||||||
|
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
||||||
|
AuthChallengeSolution clone() => deepCopy();
|
||||||
|
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
||||||
|
AuthChallengeSolution copyWith(
|
||||||
|
void Function(AuthChallengeSolution) updates) =>
|
||||||
|
super.copyWith((message) => updates(message as AuthChallengeSolution))
|
||||||
|
as AuthChallengeSolution;
|
||||||
|
|
||||||
|
@$core.override
|
||||||
|
$pb.BuilderInfo get info_ => _i;
|
||||||
|
|
||||||
|
@$core.pragma('dart2js:noInline')
|
||||||
|
static AuthChallengeSolution create() => AuthChallengeSolution._();
|
||||||
|
@$core.override
|
||||||
|
AuthChallengeSolution createEmptyInstance() => create();
|
||||||
|
@$core.pragma('dart2js:noInline')
|
||||||
|
static AuthChallengeSolution getDefault() => _defaultInstance ??=
|
||||||
|
$pb.GeneratedMessage.$_defaultFor<AuthChallengeSolution>(create);
|
||||||
|
static AuthChallengeSolution? _defaultInstance;
|
||||||
|
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
$core.List<$core.int> get signature => $_getN(0);
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
set signature($core.List<$core.int> value) => $_setBytes(0, value);
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
$core.bool hasSignature() => $_has(0);
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
void clearSignature() => $_clearField(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
enum ClientRequest_Payload {
|
||||||
|
authChallengeRequest,
|
||||||
|
authChallengeSolution,
|
||||||
|
queryVaultState,
|
||||||
|
notSet
|
||||||
|
}
|
||||||
|
|
||||||
class ClientRequest extends $pb.GeneratedMessage {
|
class ClientRequest extends $pb.GeneratedMessage {
|
||||||
factory ClientRequest({
|
factory ClientRequest({
|
||||||
$0.Request? auth,
|
AuthChallengeRequest? authChallengeRequest,
|
||||||
$1.Request? vault,
|
AuthChallengeSolution? authChallengeSolution,
|
||||||
$2.Request? evm,
|
$0.Empty? queryVaultState,
|
||||||
$core.int? requestId,
|
$core.int? requestId,
|
||||||
}) {
|
}) {
|
||||||
final result = create();
|
final result = create();
|
||||||
if (auth != null) result.auth = auth;
|
if (authChallengeRequest != null)
|
||||||
if (vault != null) result.vault = vault;
|
result.authChallengeRequest = authChallengeRequest;
|
||||||
if (evm != null) result.evm = evm;
|
if (authChallengeSolution != null)
|
||||||
|
result.authChallengeSolution = authChallengeSolution;
|
||||||
|
if (queryVaultState != null) result.queryVaultState = queryVaultState;
|
||||||
if (requestId != null) result.requestId = requestId;
|
if (requestId != null) result.requestId = requestId;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@@ -48,9 +327,9 @@ class ClientRequest extends $pb.GeneratedMessage {
|
|||||||
|
|
||||||
static const $core.Map<$core.int, ClientRequest_Payload>
|
static const $core.Map<$core.int, ClientRequest_Payload>
|
||||||
_ClientRequest_PayloadByTag = {
|
_ClientRequest_PayloadByTag = {
|
||||||
1: ClientRequest_Payload.auth,
|
1: ClientRequest_Payload.authChallengeRequest,
|
||||||
2: ClientRequest_Payload.vault,
|
2: ClientRequest_Payload.authChallengeSolution,
|
||||||
3: ClientRequest_Payload.evm,
|
3: ClientRequest_Payload.queryVaultState,
|
||||||
0: ClientRequest_Payload.notSet
|
0: ClientRequest_Payload.notSet
|
||||||
};
|
};
|
||||||
static final $pb.BuilderInfo _i = $pb.BuilderInfo(
|
static final $pb.BuilderInfo _i = $pb.BuilderInfo(
|
||||||
@@ -58,12 +337,14 @@ class ClientRequest extends $pb.GeneratedMessage {
|
|||||||
package: const $pb.PackageName(_omitMessageNames ? '' : 'arbiter.client'),
|
package: const $pb.PackageName(_omitMessageNames ? '' : 'arbiter.client'),
|
||||||
createEmptyInstance: create)
|
createEmptyInstance: create)
|
||||||
..oo(0, [1, 2, 3])
|
..oo(0, [1, 2, 3])
|
||||||
..aOM<$0.Request>(1, _omitFieldNames ? '' : 'auth',
|
..aOM<AuthChallengeRequest>(
|
||||||
subBuilder: $0.Request.create)
|
1, _omitFieldNames ? '' : 'authChallengeRequest',
|
||||||
..aOM<$1.Request>(2, _omitFieldNames ? '' : 'vault',
|
subBuilder: AuthChallengeRequest.create)
|
||||||
subBuilder: $1.Request.create)
|
..aOM<AuthChallengeSolution>(
|
||||||
..aOM<$2.Request>(3, _omitFieldNames ? '' : 'evm',
|
2, _omitFieldNames ? '' : 'authChallengeSolution',
|
||||||
subBuilder: $2.Request.create)
|
subBuilder: AuthChallengeSolution.create)
|
||||||
|
..aOM<$0.Empty>(3, _omitFieldNames ? '' : 'queryVaultState',
|
||||||
|
subBuilder: $0.Empty.create)
|
||||||
..aI(4, _omitFieldNames ? '' : 'requestId')
|
..aI(4, _omitFieldNames ? '' : 'requestId')
|
||||||
..hasRequiredFields = false;
|
..hasRequiredFields = false;
|
||||||
|
|
||||||
@@ -97,37 +378,38 @@ class ClientRequest extends $pb.GeneratedMessage {
|
|||||||
void clearPayload() => $_clearField($_whichOneof(0));
|
void clearPayload() => $_clearField($_whichOneof(0));
|
||||||
|
|
||||||
@$pb.TagNumber(1)
|
@$pb.TagNumber(1)
|
||||||
$0.Request get auth => $_getN(0);
|
AuthChallengeRequest get authChallengeRequest => $_getN(0);
|
||||||
@$pb.TagNumber(1)
|
@$pb.TagNumber(1)
|
||||||
set auth($0.Request value) => $_setField(1, value);
|
set authChallengeRequest(AuthChallengeRequest value) => $_setField(1, value);
|
||||||
@$pb.TagNumber(1)
|
@$pb.TagNumber(1)
|
||||||
$core.bool hasAuth() => $_has(0);
|
$core.bool hasAuthChallengeRequest() => $_has(0);
|
||||||
@$pb.TagNumber(1)
|
@$pb.TagNumber(1)
|
||||||
void clearAuth() => $_clearField(1);
|
void clearAuthChallengeRequest() => $_clearField(1);
|
||||||
@$pb.TagNumber(1)
|
@$pb.TagNumber(1)
|
||||||
$0.Request ensureAuth() => $_ensure(0);
|
AuthChallengeRequest ensureAuthChallengeRequest() => $_ensure(0);
|
||||||
|
|
||||||
@$pb.TagNumber(2)
|
@$pb.TagNumber(2)
|
||||||
$1.Request get vault => $_getN(1);
|
AuthChallengeSolution get authChallengeSolution => $_getN(1);
|
||||||
@$pb.TagNumber(2)
|
@$pb.TagNumber(2)
|
||||||
set vault($1.Request value) => $_setField(2, value);
|
set authChallengeSolution(AuthChallengeSolution value) =>
|
||||||
|
$_setField(2, value);
|
||||||
@$pb.TagNumber(2)
|
@$pb.TagNumber(2)
|
||||||
$core.bool hasVault() => $_has(1);
|
$core.bool hasAuthChallengeSolution() => $_has(1);
|
||||||
@$pb.TagNumber(2)
|
@$pb.TagNumber(2)
|
||||||
void clearVault() => $_clearField(2);
|
void clearAuthChallengeSolution() => $_clearField(2);
|
||||||
@$pb.TagNumber(2)
|
@$pb.TagNumber(2)
|
||||||
$1.Request ensureVault() => $_ensure(1);
|
AuthChallengeSolution ensureAuthChallengeSolution() => $_ensure(1);
|
||||||
|
|
||||||
@$pb.TagNumber(3)
|
@$pb.TagNumber(3)
|
||||||
$2.Request get evm => $_getN(2);
|
$0.Empty get queryVaultState => $_getN(2);
|
||||||
@$pb.TagNumber(3)
|
@$pb.TagNumber(3)
|
||||||
set evm($2.Request value) => $_setField(3, value);
|
set queryVaultState($0.Empty value) => $_setField(3, value);
|
||||||
@$pb.TagNumber(3)
|
@$pb.TagNumber(3)
|
||||||
$core.bool hasEvm() => $_has(2);
|
$core.bool hasQueryVaultState() => $_has(2);
|
||||||
@$pb.TagNumber(3)
|
@$pb.TagNumber(3)
|
||||||
void clearEvm() => $_clearField(3);
|
void clearQueryVaultState() => $_clearField(3);
|
||||||
@$pb.TagNumber(3)
|
@$pb.TagNumber(3)
|
||||||
$2.Request ensureEvm() => $_ensure(2);
|
$0.Empty ensureQueryVaultState() => $_ensure(2);
|
||||||
|
|
||||||
@$pb.TagNumber(4)
|
@$pb.TagNumber(4)
|
||||||
$core.int get requestId => $_getIZ(3);
|
$core.int get requestId => $_getIZ(3);
|
||||||
@@ -139,19 +421,32 @@ class ClientRequest extends $pb.GeneratedMessage {
|
|||||||
void clearRequestId() => $_clearField(4);
|
void clearRequestId() => $_clearField(4);
|
||||||
}
|
}
|
||||||
|
|
||||||
enum ClientResponse_Payload { auth, vault, evm, notSet }
|
enum ClientResponse_Payload {
|
||||||
|
authChallenge,
|
||||||
|
authResult,
|
||||||
|
evmSignTransaction,
|
||||||
|
evmAnalyzeTransaction,
|
||||||
|
vaultState,
|
||||||
|
notSet
|
||||||
|
}
|
||||||
|
|
||||||
class ClientResponse extends $pb.GeneratedMessage {
|
class ClientResponse extends $pb.GeneratedMessage {
|
||||||
factory ClientResponse({
|
factory ClientResponse({
|
||||||
$0.Response? auth,
|
AuthChallenge? authChallenge,
|
||||||
$1.Response? vault,
|
AuthResult? authResult,
|
||||||
$2.Response? evm,
|
$1.EvmSignTransactionResponse? evmSignTransaction,
|
||||||
|
$1.EvmAnalyzeTransactionResponse? evmAnalyzeTransaction,
|
||||||
|
VaultState? vaultState,
|
||||||
$core.int? requestId,
|
$core.int? requestId,
|
||||||
}) {
|
}) {
|
||||||
final result = create();
|
final result = create();
|
||||||
if (auth != null) result.auth = auth;
|
if (authChallenge != null) result.authChallenge = authChallenge;
|
||||||
if (vault != null) result.vault = vault;
|
if (authResult != null) result.authResult = authResult;
|
||||||
if (evm != null) result.evm = evm;
|
if (evmSignTransaction != null)
|
||||||
|
result.evmSignTransaction = evmSignTransaction;
|
||||||
|
if (evmAnalyzeTransaction != null)
|
||||||
|
result.evmAnalyzeTransaction = evmAnalyzeTransaction;
|
||||||
|
if (vaultState != null) result.vaultState = vaultState;
|
||||||
if (requestId != null) result.requestId = requestId;
|
if (requestId != null) result.requestId = requestId;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@@ -167,22 +462,30 @@ class ClientResponse extends $pb.GeneratedMessage {
|
|||||||
|
|
||||||
static const $core.Map<$core.int, ClientResponse_Payload>
|
static const $core.Map<$core.int, ClientResponse_Payload>
|
||||||
_ClientResponse_PayloadByTag = {
|
_ClientResponse_PayloadByTag = {
|
||||||
1: ClientResponse_Payload.auth,
|
1: ClientResponse_Payload.authChallenge,
|
||||||
2: ClientResponse_Payload.vault,
|
2: ClientResponse_Payload.authResult,
|
||||||
3: ClientResponse_Payload.evm,
|
3: ClientResponse_Payload.evmSignTransaction,
|
||||||
|
4: ClientResponse_Payload.evmAnalyzeTransaction,
|
||||||
|
6: ClientResponse_Payload.vaultState,
|
||||||
0: ClientResponse_Payload.notSet
|
0: ClientResponse_Payload.notSet
|
||||||
};
|
};
|
||||||
static final $pb.BuilderInfo _i = $pb.BuilderInfo(
|
static final $pb.BuilderInfo _i = $pb.BuilderInfo(
|
||||||
_omitMessageNames ? '' : 'ClientResponse',
|
_omitMessageNames ? '' : 'ClientResponse',
|
||||||
package: const $pb.PackageName(_omitMessageNames ? '' : 'arbiter.client'),
|
package: const $pb.PackageName(_omitMessageNames ? '' : 'arbiter.client'),
|
||||||
createEmptyInstance: create)
|
createEmptyInstance: create)
|
||||||
..oo(0, [1, 2, 3])
|
..oo(0, [1, 2, 3, 4, 6])
|
||||||
..aOM<$0.Response>(1, _omitFieldNames ? '' : 'auth',
|
..aOM<AuthChallenge>(1, _omitFieldNames ? '' : 'authChallenge',
|
||||||
subBuilder: $0.Response.create)
|
subBuilder: AuthChallenge.create)
|
||||||
..aOM<$1.Response>(2, _omitFieldNames ? '' : 'vault',
|
..aE<AuthResult>(2, _omitFieldNames ? '' : 'authResult',
|
||||||
subBuilder: $1.Response.create)
|
enumValues: AuthResult.values)
|
||||||
..aOM<$2.Response>(3, _omitFieldNames ? '' : 'evm',
|
..aOM<$1.EvmSignTransactionResponse>(
|
||||||
subBuilder: $2.Response.create)
|
3, _omitFieldNames ? '' : 'evmSignTransaction',
|
||||||
|
subBuilder: $1.EvmSignTransactionResponse.create)
|
||||||
|
..aOM<$1.EvmAnalyzeTransactionResponse>(
|
||||||
|
4, _omitFieldNames ? '' : 'evmAnalyzeTransaction',
|
||||||
|
subBuilder: $1.EvmAnalyzeTransactionResponse.create)
|
||||||
|
..aE<VaultState>(6, _omitFieldNames ? '' : 'vaultState',
|
||||||
|
enumValues: VaultState.values)
|
||||||
..aI(7, _omitFieldNames ? '' : 'requestId')
|
..aI(7, _omitFieldNames ? '' : 'requestId')
|
||||||
..hasRequiredFields = false;
|
..hasRequiredFields = false;
|
||||||
|
|
||||||
@@ -208,52 +511,76 @@ class ClientResponse extends $pb.GeneratedMessage {
|
|||||||
@$pb.TagNumber(1)
|
@$pb.TagNumber(1)
|
||||||
@$pb.TagNumber(2)
|
@$pb.TagNumber(2)
|
||||||
@$pb.TagNumber(3)
|
@$pb.TagNumber(3)
|
||||||
|
@$pb.TagNumber(4)
|
||||||
|
@$pb.TagNumber(6)
|
||||||
ClientResponse_Payload whichPayload() =>
|
ClientResponse_Payload whichPayload() =>
|
||||||
_ClientResponse_PayloadByTag[$_whichOneof(0)]!;
|
_ClientResponse_PayloadByTag[$_whichOneof(0)]!;
|
||||||
@$pb.TagNumber(1)
|
@$pb.TagNumber(1)
|
||||||
@$pb.TagNumber(2)
|
@$pb.TagNumber(2)
|
||||||
@$pb.TagNumber(3)
|
@$pb.TagNumber(3)
|
||||||
|
@$pb.TagNumber(4)
|
||||||
|
@$pb.TagNumber(6)
|
||||||
void clearPayload() => $_clearField($_whichOneof(0));
|
void clearPayload() => $_clearField($_whichOneof(0));
|
||||||
|
|
||||||
@$pb.TagNumber(1)
|
@$pb.TagNumber(1)
|
||||||
$0.Response get auth => $_getN(0);
|
AuthChallenge get authChallenge => $_getN(0);
|
||||||
@$pb.TagNumber(1)
|
@$pb.TagNumber(1)
|
||||||
set auth($0.Response value) => $_setField(1, value);
|
set authChallenge(AuthChallenge value) => $_setField(1, value);
|
||||||
@$pb.TagNumber(1)
|
@$pb.TagNumber(1)
|
||||||
$core.bool hasAuth() => $_has(0);
|
$core.bool hasAuthChallenge() => $_has(0);
|
||||||
@$pb.TagNumber(1)
|
@$pb.TagNumber(1)
|
||||||
void clearAuth() => $_clearField(1);
|
void clearAuthChallenge() => $_clearField(1);
|
||||||
@$pb.TagNumber(1)
|
@$pb.TagNumber(1)
|
||||||
$0.Response ensureAuth() => $_ensure(0);
|
AuthChallenge ensureAuthChallenge() => $_ensure(0);
|
||||||
|
|
||||||
@$pb.TagNumber(2)
|
@$pb.TagNumber(2)
|
||||||
$1.Response get vault => $_getN(1);
|
AuthResult get authResult => $_getN(1);
|
||||||
@$pb.TagNumber(2)
|
@$pb.TagNumber(2)
|
||||||
set vault($1.Response value) => $_setField(2, value);
|
set authResult(AuthResult value) => $_setField(2, value);
|
||||||
@$pb.TagNumber(2)
|
@$pb.TagNumber(2)
|
||||||
$core.bool hasVault() => $_has(1);
|
$core.bool hasAuthResult() => $_has(1);
|
||||||
@$pb.TagNumber(2)
|
@$pb.TagNumber(2)
|
||||||
void clearVault() => $_clearField(2);
|
void clearAuthResult() => $_clearField(2);
|
||||||
@$pb.TagNumber(2)
|
|
||||||
$1.Response ensureVault() => $_ensure(1);
|
|
||||||
|
|
||||||
@$pb.TagNumber(3)
|
@$pb.TagNumber(3)
|
||||||
$2.Response get evm => $_getN(2);
|
$1.EvmSignTransactionResponse get evmSignTransaction => $_getN(2);
|
||||||
@$pb.TagNumber(3)
|
@$pb.TagNumber(3)
|
||||||
set evm($2.Response value) => $_setField(3, value);
|
set evmSignTransaction($1.EvmSignTransactionResponse value) =>
|
||||||
|
$_setField(3, value);
|
||||||
@$pb.TagNumber(3)
|
@$pb.TagNumber(3)
|
||||||
$core.bool hasEvm() => $_has(2);
|
$core.bool hasEvmSignTransaction() => $_has(2);
|
||||||
@$pb.TagNumber(3)
|
@$pb.TagNumber(3)
|
||||||
void clearEvm() => $_clearField(3);
|
void clearEvmSignTransaction() => $_clearField(3);
|
||||||
@$pb.TagNumber(3)
|
@$pb.TagNumber(3)
|
||||||
$2.Response ensureEvm() => $_ensure(2);
|
$1.EvmSignTransactionResponse ensureEvmSignTransaction() => $_ensure(2);
|
||||||
|
|
||||||
|
@$pb.TagNumber(4)
|
||||||
|
$1.EvmAnalyzeTransactionResponse get evmAnalyzeTransaction => $_getN(3);
|
||||||
|
@$pb.TagNumber(4)
|
||||||
|
set evmAnalyzeTransaction($1.EvmAnalyzeTransactionResponse value) =>
|
||||||
|
$_setField(4, value);
|
||||||
|
@$pb.TagNumber(4)
|
||||||
|
$core.bool hasEvmAnalyzeTransaction() => $_has(3);
|
||||||
|
@$pb.TagNumber(4)
|
||||||
|
void clearEvmAnalyzeTransaction() => $_clearField(4);
|
||||||
|
@$pb.TagNumber(4)
|
||||||
|
$1.EvmAnalyzeTransactionResponse ensureEvmAnalyzeTransaction() => $_ensure(3);
|
||||||
|
|
||||||
|
@$pb.TagNumber(6)
|
||||||
|
VaultState get vaultState => $_getN(4);
|
||||||
|
@$pb.TagNumber(6)
|
||||||
|
set vaultState(VaultState value) => $_setField(6, value);
|
||||||
|
@$pb.TagNumber(6)
|
||||||
|
$core.bool hasVaultState() => $_has(4);
|
||||||
|
@$pb.TagNumber(6)
|
||||||
|
void clearVaultState() => $_clearField(6);
|
||||||
|
|
||||||
@$pb.TagNumber(7)
|
@$pb.TagNumber(7)
|
||||||
$core.int get requestId => $_getIZ(3);
|
$core.int get requestId => $_getIZ(5);
|
||||||
@$pb.TagNumber(7)
|
@$pb.TagNumber(7)
|
||||||
set requestId($core.int value) => $_setSignedInt32(3, value);
|
set requestId($core.int value) => $_setSignedInt32(5, value);
|
||||||
@$pb.TagNumber(7)
|
@$pb.TagNumber(7)
|
||||||
$core.bool hasRequestId() => $_has(3);
|
$core.bool hasRequestId() => $_has(5);
|
||||||
@$pb.TagNumber(7)
|
@$pb.TagNumber(7)
|
||||||
void clearRequestId() => $_clearField(7);
|
void clearRequestId() => $_clearField(7);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,3 +9,72 @@
|
|||||||
// ignore_for_file: curly_braces_in_flow_control_structures
|
// ignore_for_file: curly_braces_in_flow_control_structures
|
||||||
// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
|
// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
|
||||||
// ignore_for_file: non_constant_identifier_names, prefer_relative_imports
|
// ignore_for_file: non_constant_identifier_names, prefer_relative_imports
|
||||||
|
|
||||||
|
import 'dart:core' as $core;
|
||||||
|
|
||||||
|
import 'package:protobuf/protobuf.dart' as $pb;
|
||||||
|
|
||||||
|
class AuthResult extends $pb.ProtobufEnum {
|
||||||
|
static const AuthResult AUTH_RESULT_UNSPECIFIED =
|
||||||
|
AuthResult._(0, _omitEnumNames ? '' : 'AUTH_RESULT_UNSPECIFIED');
|
||||||
|
static const AuthResult AUTH_RESULT_SUCCESS =
|
||||||
|
AuthResult._(1, _omitEnumNames ? '' : 'AUTH_RESULT_SUCCESS');
|
||||||
|
static const AuthResult AUTH_RESULT_INVALID_KEY =
|
||||||
|
AuthResult._(2, _omitEnumNames ? '' : 'AUTH_RESULT_INVALID_KEY');
|
||||||
|
static const AuthResult AUTH_RESULT_INVALID_SIGNATURE =
|
||||||
|
AuthResult._(3, _omitEnumNames ? '' : 'AUTH_RESULT_INVALID_SIGNATURE');
|
||||||
|
static const AuthResult AUTH_RESULT_APPROVAL_DENIED =
|
||||||
|
AuthResult._(4, _omitEnumNames ? '' : 'AUTH_RESULT_APPROVAL_DENIED');
|
||||||
|
static const AuthResult AUTH_RESULT_NO_USER_AGENTS_ONLINE = AuthResult._(
|
||||||
|
5, _omitEnumNames ? '' : 'AUTH_RESULT_NO_USER_AGENTS_ONLINE');
|
||||||
|
static const AuthResult AUTH_RESULT_INTERNAL =
|
||||||
|
AuthResult._(6, _omitEnumNames ? '' : 'AUTH_RESULT_INTERNAL');
|
||||||
|
|
||||||
|
static const $core.List<AuthResult> values = <AuthResult>[
|
||||||
|
AUTH_RESULT_UNSPECIFIED,
|
||||||
|
AUTH_RESULT_SUCCESS,
|
||||||
|
AUTH_RESULT_INVALID_KEY,
|
||||||
|
AUTH_RESULT_INVALID_SIGNATURE,
|
||||||
|
AUTH_RESULT_APPROVAL_DENIED,
|
||||||
|
AUTH_RESULT_NO_USER_AGENTS_ONLINE,
|
||||||
|
AUTH_RESULT_INTERNAL,
|
||||||
|
];
|
||||||
|
|
||||||
|
static final $core.List<AuthResult?> _byValue =
|
||||||
|
$pb.ProtobufEnum.$_initByValueList(values, 6);
|
||||||
|
static AuthResult? valueOf($core.int value) =>
|
||||||
|
value < 0 || value >= _byValue.length ? null : _byValue[value];
|
||||||
|
|
||||||
|
const AuthResult._(super.value, super.name);
|
||||||
|
}
|
||||||
|
|
||||||
|
class VaultState extends $pb.ProtobufEnum {
|
||||||
|
static const VaultState VAULT_STATE_UNSPECIFIED =
|
||||||
|
VaultState._(0, _omitEnumNames ? '' : 'VAULT_STATE_UNSPECIFIED');
|
||||||
|
static const VaultState VAULT_STATE_UNBOOTSTRAPPED =
|
||||||
|
VaultState._(1, _omitEnumNames ? '' : 'VAULT_STATE_UNBOOTSTRAPPED');
|
||||||
|
static const VaultState VAULT_STATE_SEALED =
|
||||||
|
VaultState._(2, _omitEnumNames ? '' : 'VAULT_STATE_SEALED');
|
||||||
|
static const VaultState VAULT_STATE_UNSEALED =
|
||||||
|
VaultState._(3, _omitEnumNames ? '' : 'VAULT_STATE_UNSEALED');
|
||||||
|
static const VaultState VAULT_STATE_ERROR =
|
||||||
|
VaultState._(4, _omitEnumNames ? '' : 'VAULT_STATE_ERROR');
|
||||||
|
|
||||||
|
static const $core.List<VaultState> values = <VaultState>[
|
||||||
|
VAULT_STATE_UNSPECIFIED,
|
||||||
|
VAULT_STATE_UNBOOTSTRAPPED,
|
||||||
|
VAULT_STATE_SEALED,
|
||||||
|
VAULT_STATE_UNSEALED,
|
||||||
|
VAULT_STATE_ERROR,
|
||||||
|
];
|
||||||
|
|
||||||
|
static final $core.List<VaultState?> _byValue =
|
||||||
|
$pb.ProtobufEnum.$_initByValueList(values, 4);
|
||||||
|
static VaultState? valueOf($core.int value) =>
|
||||||
|
value < 0 || value >= _byValue.length ? null : _byValue[value];
|
||||||
|
|
||||||
|
const VaultState._(super.value, super.name);
|
||||||
|
}
|
||||||
|
|
||||||
|
const $core.bool _omitEnumNames =
|
||||||
|
$core.bool.fromEnvironment('protobuf.omit_enum_names');
|
||||||
|
|||||||
@@ -15,37 +15,160 @@ import 'dart:convert' as $convert;
|
|||||||
import 'dart:core' as $core;
|
import 'dart:core' as $core;
|
||||||
import 'dart:typed_data' as $typed_data;
|
import 'dart:typed_data' as $typed_data;
|
||||||
|
|
||||||
|
@$core.Deprecated('Use authResultDescriptor instead')
|
||||||
|
const AuthResult$json = {
|
||||||
|
'1': 'AuthResult',
|
||||||
|
'2': [
|
||||||
|
{'1': 'AUTH_RESULT_UNSPECIFIED', '2': 0},
|
||||||
|
{'1': 'AUTH_RESULT_SUCCESS', '2': 1},
|
||||||
|
{'1': 'AUTH_RESULT_INVALID_KEY', '2': 2},
|
||||||
|
{'1': 'AUTH_RESULT_INVALID_SIGNATURE', '2': 3},
|
||||||
|
{'1': 'AUTH_RESULT_APPROVAL_DENIED', '2': 4},
|
||||||
|
{'1': 'AUTH_RESULT_NO_USER_AGENTS_ONLINE', '2': 5},
|
||||||
|
{'1': 'AUTH_RESULT_INTERNAL', '2': 6},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Descriptor for `AuthResult`. Decode as a `google.protobuf.EnumDescriptorProto`.
|
||||||
|
final $typed_data.Uint8List authResultDescriptor = $convert.base64Decode(
|
||||||
|
'CgpBdXRoUmVzdWx0EhsKF0FVVEhfUkVTVUxUX1VOU1BFQ0lGSUVEEAASFwoTQVVUSF9SRVNVTF'
|
||||||
|
'RfU1VDQ0VTUxABEhsKF0FVVEhfUkVTVUxUX0lOVkFMSURfS0VZEAISIQodQVVUSF9SRVNVTFRf'
|
||||||
|
'SU5WQUxJRF9TSUdOQVRVUkUQAxIfChtBVVRIX1JFU1VMVF9BUFBST1ZBTF9ERU5JRUQQBBIlCi'
|
||||||
|
'FBVVRIX1JFU1VMVF9OT19VU0VSX0FHRU5UU19PTkxJTkUQBRIYChRBVVRIX1JFU1VMVF9JTlRF'
|
||||||
|
'Uk5BTBAG');
|
||||||
|
|
||||||
|
@$core.Deprecated('Use vaultStateDescriptor instead')
|
||||||
|
const VaultState$json = {
|
||||||
|
'1': 'VaultState',
|
||||||
|
'2': [
|
||||||
|
{'1': 'VAULT_STATE_UNSPECIFIED', '2': 0},
|
||||||
|
{'1': 'VAULT_STATE_UNBOOTSTRAPPED', '2': 1},
|
||||||
|
{'1': 'VAULT_STATE_SEALED', '2': 2},
|
||||||
|
{'1': 'VAULT_STATE_UNSEALED', '2': 3},
|
||||||
|
{'1': 'VAULT_STATE_ERROR', '2': 4},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Descriptor for `VaultState`. Decode as a `google.protobuf.EnumDescriptorProto`.
|
||||||
|
final $typed_data.Uint8List vaultStateDescriptor = $convert.base64Decode(
|
||||||
|
'CgpWYXVsdFN0YXRlEhsKF1ZBVUxUX1NUQVRFX1VOU1BFQ0lGSUVEEAASHgoaVkFVTFRfU1RBVE'
|
||||||
|
'VfVU5CT09UU1RSQVBQRUQQARIWChJWQVVMVF9TVEFURV9TRUFMRUQQAhIYChRWQVVMVF9TVEFU'
|
||||||
|
'RV9VTlNFQUxFRBADEhUKEVZBVUxUX1NUQVRFX0VSUk9SEAQ=');
|
||||||
|
|
||||||
|
@$core.Deprecated('Use clientInfoDescriptor instead')
|
||||||
|
const ClientInfo$json = {
|
||||||
|
'1': 'ClientInfo',
|
||||||
|
'2': [
|
||||||
|
{'1': 'name', '3': 1, '4': 1, '5': 9, '10': 'name'},
|
||||||
|
{
|
||||||
|
'1': 'description',
|
||||||
|
'3': 2,
|
||||||
|
'4': 1,
|
||||||
|
'5': 9,
|
||||||
|
'9': 0,
|
||||||
|
'10': 'description',
|
||||||
|
'17': true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'1': 'version',
|
||||||
|
'3': 3,
|
||||||
|
'4': 1,
|
||||||
|
'5': 9,
|
||||||
|
'9': 1,
|
||||||
|
'10': 'version',
|
||||||
|
'17': true
|
||||||
|
},
|
||||||
|
],
|
||||||
|
'8': [
|
||||||
|
{'1': '_description'},
|
||||||
|
{'1': '_version'},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Descriptor for `ClientInfo`. Decode as a `google.protobuf.DescriptorProto`.
|
||||||
|
final $typed_data.Uint8List clientInfoDescriptor = $convert.base64Decode(
|
||||||
|
'CgpDbGllbnRJbmZvEhIKBG5hbWUYASABKAlSBG5hbWUSJQoLZGVzY3JpcHRpb24YAiABKAlIAF'
|
||||||
|
'ILZGVzY3JpcHRpb26IAQESHQoHdmVyc2lvbhgDIAEoCUgBUgd2ZXJzaW9uiAEBQg4KDF9kZXNj'
|
||||||
|
'cmlwdGlvbkIKCghfdmVyc2lvbg==');
|
||||||
|
|
||||||
|
@$core.Deprecated('Use authChallengeRequestDescriptor instead')
|
||||||
|
const AuthChallengeRequest$json = {
|
||||||
|
'1': 'AuthChallengeRequest',
|
||||||
|
'2': [
|
||||||
|
{'1': 'pubkey', '3': 1, '4': 1, '5': 12, '10': 'pubkey'},
|
||||||
|
{
|
||||||
|
'1': 'client_info',
|
||||||
|
'3': 2,
|
||||||
|
'4': 1,
|
||||||
|
'5': 11,
|
||||||
|
'6': '.arbiter.client.ClientInfo',
|
||||||
|
'10': 'clientInfo'
|
||||||
|
},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Descriptor for `AuthChallengeRequest`. Decode as a `google.protobuf.DescriptorProto`.
|
||||||
|
final $typed_data.Uint8List authChallengeRequestDescriptor = $convert.base64Decode(
|
||||||
|
'ChRBdXRoQ2hhbGxlbmdlUmVxdWVzdBIWCgZwdWJrZXkYASABKAxSBnB1YmtleRI7CgtjbGllbn'
|
||||||
|
'RfaW5mbxgCIAEoCzIaLmFyYml0ZXIuY2xpZW50LkNsaWVudEluZm9SCmNsaWVudEluZm8=');
|
||||||
|
|
||||||
|
@$core.Deprecated('Use authChallengeDescriptor instead')
|
||||||
|
const AuthChallenge$json = {
|
||||||
|
'1': 'AuthChallenge',
|
||||||
|
'2': [
|
||||||
|
{'1': 'pubkey', '3': 1, '4': 1, '5': 12, '10': 'pubkey'},
|
||||||
|
{'1': 'nonce', '3': 2, '4': 1, '5': 5, '10': 'nonce'},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Descriptor for `AuthChallenge`. Decode as a `google.protobuf.DescriptorProto`.
|
||||||
|
final $typed_data.Uint8List authChallengeDescriptor = $convert.base64Decode(
|
||||||
|
'Cg1BdXRoQ2hhbGxlbmdlEhYKBnB1YmtleRgBIAEoDFIGcHVia2V5EhQKBW5vbmNlGAIgASgFUg'
|
||||||
|
'Vub25jZQ==');
|
||||||
|
|
||||||
|
@$core.Deprecated('Use authChallengeSolutionDescriptor instead')
|
||||||
|
const AuthChallengeSolution$json = {
|
||||||
|
'1': 'AuthChallengeSolution',
|
||||||
|
'2': [
|
||||||
|
{'1': 'signature', '3': 1, '4': 1, '5': 12, '10': 'signature'},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Descriptor for `AuthChallengeSolution`. Decode as a `google.protobuf.DescriptorProto`.
|
||||||
|
final $typed_data.Uint8List authChallengeSolutionDescriptor = $convert.base64Decode(
|
||||||
|
'ChVBdXRoQ2hhbGxlbmdlU29sdXRpb24SHAoJc2lnbmF0dXJlGAEgASgMUglzaWduYXR1cmU=');
|
||||||
|
|
||||||
@$core.Deprecated('Use clientRequestDescriptor instead')
|
@$core.Deprecated('Use clientRequestDescriptor instead')
|
||||||
const ClientRequest$json = {
|
const ClientRequest$json = {
|
||||||
'1': 'ClientRequest',
|
'1': 'ClientRequest',
|
||||||
'2': [
|
'2': [
|
||||||
{'1': 'request_id', '3': 4, '4': 1, '5': 5, '10': 'requestId'},
|
{'1': 'request_id', '3': 4, '4': 1, '5': 5, '10': 'requestId'},
|
||||||
{
|
{
|
||||||
'1': 'auth',
|
'1': 'auth_challenge_request',
|
||||||
'3': 1,
|
'3': 1,
|
||||||
'4': 1,
|
'4': 1,
|
||||||
'5': 11,
|
'5': 11,
|
||||||
'6': '.arbiter.client.auth.Request',
|
'6': '.arbiter.client.AuthChallengeRequest',
|
||||||
'9': 0,
|
'9': 0,
|
||||||
'10': 'auth'
|
'10': 'authChallengeRequest'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'1': 'vault',
|
'1': 'auth_challenge_solution',
|
||||||
'3': 2,
|
'3': 2,
|
||||||
'4': 1,
|
'4': 1,
|
||||||
'5': 11,
|
'5': 11,
|
||||||
'6': '.arbiter.client.vault.Request',
|
'6': '.arbiter.client.AuthChallengeSolution',
|
||||||
'9': 0,
|
'9': 0,
|
||||||
'10': 'vault'
|
'10': 'authChallengeSolution'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'1': 'evm',
|
'1': 'query_vault_state',
|
||||||
'3': 3,
|
'3': 3,
|
||||||
'4': 1,
|
'4': 1,
|
||||||
'5': 11,
|
'5': 11,
|
||||||
'6': '.arbiter.client.evm.Request',
|
'6': '.google.protobuf.Empty',
|
||||||
'9': 0,
|
'9': 0,
|
||||||
'10': 'evm'
|
'10': 'queryVaultState'
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
'8': [
|
'8': [
|
||||||
@@ -55,10 +178,12 @@ const ClientRequest$json = {
|
|||||||
|
|
||||||
/// Descriptor for `ClientRequest`. Decode as a `google.protobuf.DescriptorProto`.
|
/// Descriptor for `ClientRequest`. Decode as a `google.protobuf.DescriptorProto`.
|
||||||
final $typed_data.Uint8List clientRequestDescriptor = $convert.base64Decode(
|
final $typed_data.Uint8List clientRequestDescriptor = $convert.base64Decode(
|
||||||
'Cg1DbGllbnRSZXF1ZXN0Eh0KCnJlcXVlc3RfaWQYBCABKAVSCXJlcXVlc3RJZBIyCgRhdXRoGA'
|
'Cg1DbGllbnRSZXF1ZXN0Eh0KCnJlcXVlc3RfaWQYBCABKAVSCXJlcXVlc3RJZBJcChZhdXRoX2'
|
||||||
'EgASgLMhwuYXJiaXRlci5jbGllbnQuYXV0aC5SZXF1ZXN0SABSBGF1dGgSNQoFdmF1bHQYAiAB'
|
'NoYWxsZW5nZV9yZXF1ZXN0GAEgASgLMiQuYXJiaXRlci5jbGllbnQuQXV0aENoYWxsZW5nZVJl'
|
||||||
'KAsyHS5hcmJpdGVyLmNsaWVudC52YXVsdC5SZXF1ZXN0SABSBXZhdWx0Ei8KA2V2bRgDIAEoCz'
|
'cXVlc3RIAFIUYXV0aENoYWxsZW5nZVJlcXVlc3QSXwoXYXV0aF9jaGFsbGVuZ2Vfc29sdXRpb2'
|
||||||
'IbLmFyYml0ZXIuY2xpZW50LmV2bS5SZXF1ZXN0SABSA2V2bUIJCgdwYXlsb2Fk');
|
'4YAiABKAsyJS5hcmJpdGVyLmNsaWVudC5BdXRoQ2hhbGxlbmdlU29sdXRpb25IAFIVYXV0aENo'
|
||||||
|
'YWxsZW5nZVNvbHV0aW9uEkQKEXF1ZXJ5X3ZhdWx0X3N0YXRlGAMgASgLMhYuZ29vZ2xlLnByb3'
|
||||||
|
'RvYnVmLkVtcHR5SABSD3F1ZXJ5VmF1bHRTdGF0ZUIJCgdwYXlsb2Fk');
|
||||||
|
|
||||||
@$core.Deprecated('Use clientResponseDescriptor instead')
|
@$core.Deprecated('Use clientResponseDescriptor instead')
|
||||||
const ClientResponse$json = {
|
const ClientResponse$json = {
|
||||||
@@ -74,31 +199,49 @@ const ClientResponse$json = {
|
|||||||
'17': true
|
'17': true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'1': 'auth',
|
'1': 'auth_challenge',
|
||||||
'3': 1,
|
'3': 1,
|
||||||
'4': 1,
|
'4': 1,
|
||||||
'5': 11,
|
'5': 11,
|
||||||
'6': '.arbiter.client.auth.Response',
|
'6': '.arbiter.client.AuthChallenge',
|
||||||
'9': 0,
|
'9': 0,
|
||||||
'10': 'auth'
|
'10': 'authChallenge'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'1': 'vault',
|
'1': 'auth_result',
|
||||||
'3': 2,
|
'3': 2,
|
||||||
'4': 1,
|
'4': 1,
|
||||||
'5': 11,
|
'5': 14,
|
||||||
'6': '.arbiter.client.vault.Response',
|
'6': '.arbiter.client.AuthResult',
|
||||||
'9': 0,
|
'9': 0,
|
||||||
'10': 'vault'
|
'10': 'authResult'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'1': 'evm',
|
'1': 'evm_sign_transaction',
|
||||||
'3': 3,
|
'3': 3,
|
||||||
'4': 1,
|
'4': 1,
|
||||||
'5': 11,
|
'5': 11,
|
||||||
'6': '.arbiter.client.evm.Response',
|
'6': '.arbiter.evm.EvmSignTransactionResponse',
|
||||||
'9': 0,
|
'9': 0,
|
||||||
'10': 'evm'
|
'10': 'evmSignTransaction'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'1': 'evm_analyze_transaction',
|
||||||
|
'3': 4,
|
||||||
|
'4': 1,
|
||||||
|
'5': 11,
|
||||||
|
'6': '.arbiter.evm.EvmAnalyzeTransactionResponse',
|
||||||
|
'9': 0,
|
||||||
|
'10': 'evmAnalyzeTransaction'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'1': 'vault_state',
|
||||||
|
'3': 6,
|
||||||
|
'4': 1,
|
||||||
|
'5': 14,
|
||||||
|
'6': '.arbiter.client.VaultState',
|
||||||
|
'9': 0,
|
||||||
|
'10': 'vaultState'
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
'8': [
|
'8': [
|
||||||
@@ -109,8 +252,12 @@ const ClientResponse$json = {
|
|||||||
|
|
||||||
/// Descriptor for `ClientResponse`. Decode as a `google.protobuf.DescriptorProto`.
|
/// Descriptor for `ClientResponse`. Decode as a `google.protobuf.DescriptorProto`.
|
||||||
final $typed_data.Uint8List clientResponseDescriptor = $convert.base64Decode(
|
final $typed_data.Uint8List clientResponseDescriptor = $convert.base64Decode(
|
||||||
'Cg5DbGllbnRSZXNwb25zZRIiCgpyZXF1ZXN0X2lkGAcgASgFSAFSCXJlcXVlc3RJZIgBARIzCg'
|
'Cg5DbGllbnRSZXNwb25zZRIiCgpyZXF1ZXN0X2lkGAcgASgFSAFSCXJlcXVlc3RJZIgBARJGCg'
|
||||||
'RhdXRoGAEgASgLMh0uYXJiaXRlci5jbGllbnQuYXV0aC5SZXNwb25zZUgAUgRhdXRoEjYKBXZh'
|
'5hdXRoX2NoYWxsZW5nZRgBIAEoCzIdLmFyYml0ZXIuY2xpZW50LkF1dGhDaGFsbGVuZ2VIAFIN'
|
||||||
'dWx0GAIgASgLMh4uYXJiaXRlci5jbGllbnQudmF1bHQuUmVzcG9uc2VIAFIFdmF1bHQSMAoDZX'
|
'YXV0aENoYWxsZW5nZRI9CgthdXRoX3Jlc3VsdBgCIAEoDjIaLmFyYml0ZXIuY2xpZW50LkF1dG'
|
||||||
'ZtGAMgASgLMhwuYXJiaXRlci5jbGllbnQuZXZtLlJlc3BvbnNlSABSA2V2bUIJCgdwYXlsb2Fk'
|
'hSZXN1bHRIAFIKYXV0aFJlc3VsdBJbChRldm1fc2lnbl90cmFuc2FjdGlvbhgDIAEoCzInLmFy'
|
||||||
'Qg0KC19yZXF1ZXN0X2lk');
|
'Yml0ZXIuZXZtLkV2bVNpZ25UcmFuc2FjdGlvblJlc3BvbnNlSABSEmV2bVNpZ25UcmFuc2FjdG'
|
||||||
|
'lvbhJkChdldm1fYW5hbHl6ZV90cmFuc2FjdGlvbhgEIAEoCzIqLmFyYml0ZXIuZXZtLkV2bUFu'
|
||||||
|
'YWx5emVUcmFuc2FjdGlvblJlc3BvbnNlSABSFWV2bUFuYWx5emVUcmFuc2FjdGlvbhI9Cgt2YX'
|
||||||
|
'VsdF9zdGF0ZRgGIAEoDjIaLmFyYml0ZXIuY2xpZW50LlZhdWx0U3RhdGVIAFIKdmF1bHRTdGF0'
|
||||||
|
'ZUIJCgdwYXlsb2FkQg0KC19yZXF1ZXN0X2lk');
|
||||||
|
|||||||
@@ -1,395 +0,0 @@
|
|||||||
// This is a generated file - do not edit.
|
|
||||||
//
|
|
||||||
// Generated from client/auth.proto.
|
|
||||||
|
|
||||||
// @dart = 3.3
|
|
||||||
|
|
||||||
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
|
|
||||||
// ignore_for_file: constant_identifier_names
|
|
||||||
// ignore_for_file: curly_braces_in_flow_control_structures
|
|
||||||
// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
|
|
||||||
// ignore_for_file: non_constant_identifier_names, prefer_relative_imports
|
|
||||||
|
|
||||||
import 'dart:core' as $core;
|
|
||||||
|
|
||||||
import 'package:protobuf/protobuf.dart' as $pb;
|
|
||||||
|
|
||||||
import '../shared/client.pb.dart' as $0;
|
|
||||||
import 'auth.pbenum.dart';
|
|
||||||
|
|
||||||
export 'package:protobuf/protobuf.dart' show GeneratedMessageGenericExtensions;
|
|
||||||
|
|
||||||
export 'auth.pbenum.dart';
|
|
||||||
|
|
||||||
class AuthChallengeRequest extends $pb.GeneratedMessage {
|
|
||||||
factory AuthChallengeRequest({
|
|
||||||
$core.List<$core.int>? pubkey,
|
|
||||||
$0.ClientInfo? clientInfo,
|
|
||||||
}) {
|
|
||||||
final result = create();
|
|
||||||
if (pubkey != null) result.pubkey = pubkey;
|
|
||||||
if (clientInfo != null) result.clientInfo = clientInfo;
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
AuthChallengeRequest._();
|
|
||||||
|
|
||||||
factory AuthChallengeRequest.fromBuffer($core.List<$core.int> data,
|
|
||||||
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
|
||||||
create()..mergeFromBuffer(data, registry);
|
|
||||||
factory AuthChallengeRequest.fromJson($core.String json,
|
|
||||||
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
|
||||||
create()..mergeFromJson(json, registry);
|
|
||||||
|
|
||||||
static final $pb.BuilderInfo _i = $pb.BuilderInfo(
|
|
||||||
_omitMessageNames ? '' : 'AuthChallengeRequest',
|
|
||||||
package:
|
|
||||||
const $pb.PackageName(_omitMessageNames ? '' : 'arbiter.client.auth'),
|
|
||||||
createEmptyInstance: create)
|
|
||||||
..a<$core.List<$core.int>>(
|
|
||||||
1, _omitFieldNames ? '' : 'pubkey', $pb.PbFieldType.OY)
|
|
||||||
..aOM<$0.ClientInfo>(2, _omitFieldNames ? '' : 'clientInfo',
|
|
||||||
subBuilder: $0.ClientInfo.create)
|
|
||||||
..hasRequiredFields = false;
|
|
||||||
|
|
||||||
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
|
||||||
AuthChallengeRequest clone() => deepCopy();
|
|
||||||
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
|
||||||
AuthChallengeRequest copyWith(void Function(AuthChallengeRequest) updates) =>
|
|
||||||
super.copyWith((message) => updates(message as AuthChallengeRequest))
|
|
||||||
as AuthChallengeRequest;
|
|
||||||
|
|
||||||
@$core.override
|
|
||||||
$pb.BuilderInfo get info_ => _i;
|
|
||||||
|
|
||||||
@$core.pragma('dart2js:noInline')
|
|
||||||
static AuthChallengeRequest create() => AuthChallengeRequest._();
|
|
||||||
@$core.override
|
|
||||||
AuthChallengeRequest createEmptyInstance() => create();
|
|
||||||
@$core.pragma('dart2js:noInline')
|
|
||||||
static AuthChallengeRequest getDefault() => _defaultInstance ??=
|
|
||||||
$pb.GeneratedMessage.$_defaultFor<AuthChallengeRequest>(create);
|
|
||||||
static AuthChallengeRequest? _defaultInstance;
|
|
||||||
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
$core.List<$core.int> get pubkey => $_getN(0);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
set pubkey($core.List<$core.int> value) => $_setBytes(0, value);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
$core.bool hasPubkey() => $_has(0);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
void clearPubkey() => $_clearField(1);
|
|
||||||
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
$0.ClientInfo get clientInfo => $_getN(1);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
set clientInfo($0.ClientInfo value) => $_setField(2, value);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
$core.bool hasClientInfo() => $_has(1);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
void clearClientInfo() => $_clearField(2);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
$0.ClientInfo ensureClientInfo() => $_ensure(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
class AuthChallenge extends $pb.GeneratedMessage {
|
|
||||||
factory AuthChallenge({
|
|
||||||
$core.List<$core.int>? pubkey,
|
|
||||||
$core.int? nonce,
|
|
||||||
}) {
|
|
||||||
final result = create();
|
|
||||||
if (pubkey != null) result.pubkey = pubkey;
|
|
||||||
if (nonce != null) result.nonce = nonce;
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
AuthChallenge._();
|
|
||||||
|
|
||||||
factory AuthChallenge.fromBuffer($core.List<$core.int> data,
|
|
||||||
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
|
||||||
create()..mergeFromBuffer(data, registry);
|
|
||||||
factory AuthChallenge.fromJson($core.String json,
|
|
||||||
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
|
||||||
create()..mergeFromJson(json, registry);
|
|
||||||
|
|
||||||
static final $pb.BuilderInfo _i = $pb.BuilderInfo(
|
|
||||||
_omitMessageNames ? '' : 'AuthChallenge',
|
|
||||||
package:
|
|
||||||
const $pb.PackageName(_omitMessageNames ? '' : 'arbiter.client.auth'),
|
|
||||||
createEmptyInstance: create)
|
|
||||||
..a<$core.List<$core.int>>(
|
|
||||||
1, _omitFieldNames ? '' : 'pubkey', $pb.PbFieldType.OY)
|
|
||||||
..aI(2, _omitFieldNames ? '' : 'nonce')
|
|
||||||
..hasRequiredFields = false;
|
|
||||||
|
|
||||||
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
|
||||||
AuthChallenge clone() => deepCopy();
|
|
||||||
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
|
||||||
AuthChallenge copyWith(void Function(AuthChallenge) updates) =>
|
|
||||||
super.copyWith((message) => updates(message as AuthChallenge))
|
|
||||||
as AuthChallenge;
|
|
||||||
|
|
||||||
@$core.override
|
|
||||||
$pb.BuilderInfo get info_ => _i;
|
|
||||||
|
|
||||||
@$core.pragma('dart2js:noInline')
|
|
||||||
static AuthChallenge create() => AuthChallenge._();
|
|
||||||
@$core.override
|
|
||||||
AuthChallenge createEmptyInstance() => create();
|
|
||||||
@$core.pragma('dart2js:noInline')
|
|
||||||
static AuthChallenge getDefault() => _defaultInstance ??=
|
|
||||||
$pb.GeneratedMessage.$_defaultFor<AuthChallenge>(create);
|
|
||||||
static AuthChallenge? _defaultInstance;
|
|
||||||
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
$core.List<$core.int> get pubkey => $_getN(0);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
set pubkey($core.List<$core.int> value) => $_setBytes(0, value);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
$core.bool hasPubkey() => $_has(0);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
void clearPubkey() => $_clearField(1);
|
|
||||||
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
$core.int get nonce => $_getIZ(1);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
set nonce($core.int value) => $_setSignedInt32(1, value);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
$core.bool hasNonce() => $_has(1);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
void clearNonce() => $_clearField(2);
|
|
||||||
}
|
|
||||||
|
|
||||||
class AuthChallengeSolution extends $pb.GeneratedMessage {
|
|
||||||
factory AuthChallengeSolution({
|
|
||||||
$core.List<$core.int>? signature,
|
|
||||||
}) {
|
|
||||||
final result = create();
|
|
||||||
if (signature != null) result.signature = signature;
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
AuthChallengeSolution._();
|
|
||||||
|
|
||||||
factory AuthChallengeSolution.fromBuffer($core.List<$core.int> data,
|
|
||||||
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
|
||||||
create()..mergeFromBuffer(data, registry);
|
|
||||||
factory AuthChallengeSolution.fromJson($core.String json,
|
|
||||||
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
|
||||||
create()..mergeFromJson(json, registry);
|
|
||||||
|
|
||||||
static final $pb.BuilderInfo _i = $pb.BuilderInfo(
|
|
||||||
_omitMessageNames ? '' : 'AuthChallengeSolution',
|
|
||||||
package:
|
|
||||||
const $pb.PackageName(_omitMessageNames ? '' : 'arbiter.client.auth'),
|
|
||||||
createEmptyInstance: create)
|
|
||||||
..a<$core.List<$core.int>>(
|
|
||||||
1, _omitFieldNames ? '' : 'signature', $pb.PbFieldType.OY)
|
|
||||||
..hasRequiredFields = false;
|
|
||||||
|
|
||||||
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
|
||||||
AuthChallengeSolution clone() => deepCopy();
|
|
||||||
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
|
||||||
AuthChallengeSolution copyWith(
|
|
||||||
void Function(AuthChallengeSolution) updates) =>
|
|
||||||
super.copyWith((message) => updates(message as AuthChallengeSolution))
|
|
||||||
as AuthChallengeSolution;
|
|
||||||
|
|
||||||
@$core.override
|
|
||||||
$pb.BuilderInfo get info_ => _i;
|
|
||||||
|
|
||||||
@$core.pragma('dart2js:noInline')
|
|
||||||
static AuthChallengeSolution create() => AuthChallengeSolution._();
|
|
||||||
@$core.override
|
|
||||||
AuthChallengeSolution createEmptyInstance() => create();
|
|
||||||
@$core.pragma('dart2js:noInline')
|
|
||||||
static AuthChallengeSolution getDefault() => _defaultInstance ??=
|
|
||||||
$pb.GeneratedMessage.$_defaultFor<AuthChallengeSolution>(create);
|
|
||||||
static AuthChallengeSolution? _defaultInstance;
|
|
||||||
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
$core.List<$core.int> get signature => $_getN(0);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
set signature($core.List<$core.int> value) => $_setBytes(0, value);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
$core.bool hasSignature() => $_has(0);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
void clearSignature() => $_clearField(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
enum Request_Payload { challengeRequest, challengeSolution, notSet }
|
|
||||||
|
|
||||||
class Request extends $pb.GeneratedMessage {
|
|
||||||
factory Request({
|
|
||||||
AuthChallengeRequest? challengeRequest,
|
|
||||||
AuthChallengeSolution? challengeSolution,
|
|
||||||
}) {
|
|
||||||
final result = create();
|
|
||||||
if (challengeRequest != null) result.challengeRequest = challengeRequest;
|
|
||||||
if (challengeSolution != null) result.challengeSolution = challengeSolution;
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
Request._();
|
|
||||||
|
|
||||||
factory Request.fromBuffer($core.List<$core.int> data,
|
|
||||||
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
|
||||||
create()..mergeFromBuffer(data, registry);
|
|
||||||
factory Request.fromJson($core.String json,
|
|
||||||
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
|
||||||
create()..mergeFromJson(json, registry);
|
|
||||||
|
|
||||||
static const $core.Map<$core.int, Request_Payload> _Request_PayloadByTag = {
|
|
||||||
1: Request_Payload.challengeRequest,
|
|
||||||
2: Request_Payload.challengeSolution,
|
|
||||||
0: Request_Payload.notSet
|
|
||||||
};
|
|
||||||
static final $pb.BuilderInfo _i = $pb.BuilderInfo(
|
|
||||||
_omitMessageNames ? '' : 'Request',
|
|
||||||
package:
|
|
||||||
const $pb.PackageName(_omitMessageNames ? '' : 'arbiter.client.auth'),
|
|
||||||
createEmptyInstance: create)
|
|
||||||
..oo(0, [1, 2])
|
|
||||||
..aOM<AuthChallengeRequest>(1, _omitFieldNames ? '' : 'challengeRequest',
|
|
||||||
subBuilder: AuthChallengeRequest.create)
|
|
||||||
..aOM<AuthChallengeSolution>(2, _omitFieldNames ? '' : 'challengeSolution',
|
|
||||||
subBuilder: AuthChallengeSolution.create)
|
|
||||||
..hasRequiredFields = false;
|
|
||||||
|
|
||||||
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
|
||||||
Request clone() => deepCopy();
|
|
||||||
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
|
||||||
Request copyWith(void Function(Request) updates) =>
|
|
||||||
super.copyWith((message) => updates(message as Request)) as Request;
|
|
||||||
|
|
||||||
@$core.override
|
|
||||||
$pb.BuilderInfo get info_ => _i;
|
|
||||||
|
|
||||||
@$core.pragma('dart2js:noInline')
|
|
||||||
static Request create() => Request._();
|
|
||||||
@$core.override
|
|
||||||
Request createEmptyInstance() => create();
|
|
||||||
@$core.pragma('dart2js:noInline')
|
|
||||||
static Request getDefault() =>
|
|
||||||
_defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<Request>(create);
|
|
||||||
static Request? _defaultInstance;
|
|
||||||
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
Request_Payload whichPayload() => _Request_PayloadByTag[$_whichOneof(0)]!;
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
void clearPayload() => $_clearField($_whichOneof(0));
|
|
||||||
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
AuthChallengeRequest get challengeRequest => $_getN(0);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
set challengeRequest(AuthChallengeRequest value) => $_setField(1, value);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
$core.bool hasChallengeRequest() => $_has(0);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
void clearChallengeRequest() => $_clearField(1);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
AuthChallengeRequest ensureChallengeRequest() => $_ensure(0);
|
|
||||||
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
AuthChallengeSolution get challengeSolution => $_getN(1);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
set challengeSolution(AuthChallengeSolution value) => $_setField(2, value);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
$core.bool hasChallengeSolution() => $_has(1);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
void clearChallengeSolution() => $_clearField(2);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
AuthChallengeSolution ensureChallengeSolution() => $_ensure(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
enum Response_Payload { challenge, result, notSet }
|
|
||||||
|
|
||||||
class Response extends $pb.GeneratedMessage {
|
|
||||||
factory Response({
|
|
||||||
AuthChallenge? challenge,
|
|
||||||
AuthResult? result,
|
|
||||||
}) {
|
|
||||||
final result$ = create();
|
|
||||||
if (challenge != null) result$.challenge = challenge;
|
|
||||||
if (result != null) result$.result = result;
|
|
||||||
return result$;
|
|
||||||
}
|
|
||||||
|
|
||||||
Response._();
|
|
||||||
|
|
||||||
factory Response.fromBuffer($core.List<$core.int> data,
|
|
||||||
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
|
||||||
create()..mergeFromBuffer(data, registry);
|
|
||||||
factory Response.fromJson($core.String json,
|
|
||||||
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
|
||||||
create()..mergeFromJson(json, registry);
|
|
||||||
|
|
||||||
static const $core.Map<$core.int, Response_Payload> _Response_PayloadByTag = {
|
|
||||||
1: Response_Payload.challenge,
|
|
||||||
2: Response_Payload.result,
|
|
||||||
0: Response_Payload.notSet
|
|
||||||
};
|
|
||||||
static final $pb.BuilderInfo _i = $pb.BuilderInfo(
|
|
||||||
_omitMessageNames ? '' : 'Response',
|
|
||||||
package:
|
|
||||||
const $pb.PackageName(_omitMessageNames ? '' : 'arbiter.client.auth'),
|
|
||||||
createEmptyInstance: create)
|
|
||||||
..oo(0, [1, 2])
|
|
||||||
..aOM<AuthChallenge>(1, _omitFieldNames ? '' : 'challenge',
|
|
||||||
subBuilder: AuthChallenge.create)
|
|
||||||
..aE<AuthResult>(2, _omitFieldNames ? '' : 'result',
|
|
||||||
enumValues: AuthResult.values)
|
|
||||||
..hasRequiredFields = false;
|
|
||||||
|
|
||||||
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
|
||||||
Response clone() => deepCopy();
|
|
||||||
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
|
||||||
Response copyWith(void Function(Response) updates) =>
|
|
||||||
super.copyWith((message) => updates(message as Response)) as Response;
|
|
||||||
|
|
||||||
@$core.override
|
|
||||||
$pb.BuilderInfo get info_ => _i;
|
|
||||||
|
|
||||||
@$core.pragma('dart2js:noInline')
|
|
||||||
static Response create() => Response._();
|
|
||||||
@$core.override
|
|
||||||
Response createEmptyInstance() => create();
|
|
||||||
@$core.pragma('dart2js:noInline')
|
|
||||||
static Response getDefault() =>
|
|
||||||
_defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<Response>(create);
|
|
||||||
static Response? _defaultInstance;
|
|
||||||
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
Response_Payload whichPayload() => _Response_PayloadByTag[$_whichOneof(0)]!;
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
void clearPayload() => $_clearField($_whichOneof(0));
|
|
||||||
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
AuthChallenge get challenge => $_getN(0);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
set challenge(AuthChallenge value) => $_setField(1, value);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
$core.bool hasChallenge() => $_has(0);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
void clearChallenge() => $_clearField(1);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
AuthChallenge ensureChallenge() => $_ensure(0);
|
|
||||||
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
AuthResult get result => $_getN(1);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
set result(AuthResult value) => $_setField(2, value);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
$core.bool hasResult() => $_has(1);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
void clearResult() => $_clearField(2);
|
|
||||||
}
|
|
||||||
|
|
||||||
const $core.bool _omitFieldNames =
|
|
||||||
$core.bool.fromEnvironment('protobuf.omit_field_names');
|
|
||||||
const $core.bool _omitMessageNames =
|
|
||||||
$core.bool.fromEnvironment('protobuf.omit_message_names');
|
|
||||||
@@ -1,52 +0,0 @@
|
|||||||
// This is a generated file - do not edit.
|
|
||||||
//
|
|
||||||
// Generated from client/auth.proto.
|
|
||||||
|
|
||||||
// @dart = 3.3
|
|
||||||
|
|
||||||
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
|
|
||||||
// ignore_for_file: constant_identifier_names
|
|
||||||
// ignore_for_file: curly_braces_in_flow_control_structures
|
|
||||||
// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
|
|
||||||
// ignore_for_file: non_constant_identifier_names, prefer_relative_imports
|
|
||||||
|
|
||||||
import 'dart:core' as $core;
|
|
||||||
|
|
||||||
import 'package:protobuf/protobuf.dart' as $pb;
|
|
||||||
|
|
||||||
class AuthResult extends $pb.ProtobufEnum {
|
|
||||||
static const AuthResult AUTH_RESULT_UNSPECIFIED =
|
|
||||||
AuthResult._(0, _omitEnumNames ? '' : 'AUTH_RESULT_UNSPECIFIED');
|
|
||||||
static const AuthResult AUTH_RESULT_SUCCESS =
|
|
||||||
AuthResult._(1, _omitEnumNames ? '' : 'AUTH_RESULT_SUCCESS');
|
|
||||||
static const AuthResult AUTH_RESULT_INVALID_KEY =
|
|
||||||
AuthResult._(2, _omitEnumNames ? '' : 'AUTH_RESULT_INVALID_KEY');
|
|
||||||
static const AuthResult AUTH_RESULT_INVALID_SIGNATURE =
|
|
||||||
AuthResult._(3, _omitEnumNames ? '' : 'AUTH_RESULT_INVALID_SIGNATURE');
|
|
||||||
static const AuthResult AUTH_RESULT_APPROVAL_DENIED =
|
|
||||||
AuthResult._(4, _omitEnumNames ? '' : 'AUTH_RESULT_APPROVAL_DENIED');
|
|
||||||
static const AuthResult AUTH_RESULT_NO_USER_AGENTS_ONLINE = AuthResult._(
|
|
||||||
5, _omitEnumNames ? '' : 'AUTH_RESULT_NO_USER_AGENTS_ONLINE');
|
|
||||||
static const AuthResult AUTH_RESULT_INTERNAL =
|
|
||||||
AuthResult._(6, _omitEnumNames ? '' : 'AUTH_RESULT_INTERNAL');
|
|
||||||
|
|
||||||
static const $core.List<AuthResult> values = <AuthResult>[
|
|
||||||
AUTH_RESULT_UNSPECIFIED,
|
|
||||||
AUTH_RESULT_SUCCESS,
|
|
||||||
AUTH_RESULT_INVALID_KEY,
|
|
||||||
AUTH_RESULT_INVALID_SIGNATURE,
|
|
||||||
AUTH_RESULT_APPROVAL_DENIED,
|
|
||||||
AUTH_RESULT_NO_USER_AGENTS_ONLINE,
|
|
||||||
AUTH_RESULT_INTERNAL,
|
|
||||||
];
|
|
||||||
|
|
||||||
static final $core.List<AuthResult?> _byValue =
|
|
||||||
$pb.ProtobufEnum.$_initByValueList(values, 6);
|
|
||||||
static AuthResult? valueOf($core.int value) =>
|
|
||||||
value < 0 || value >= _byValue.length ? null : _byValue[value];
|
|
||||||
|
|
||||||
const AuthResult._(super.value, super.name);
|
|
||||||
}
|
|
||||||
|
|
||||||
const $core.bool _omitEnumNames =
|
|
||||||
$core.bool.fromEnvironment('protobuf.omit_enum_names');
|
|
||||||
@@ -1,154 +0,0 @@
|
|||||||
// This is a generated file - do not edit.
|
|
||||||
//
|
|
||||||
// Generated from client/auth.proto.
|
|
||||||
|
|
||||||
// @dart = 3.3
|
|
||||||
|
|
||||||
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
|
|
||||||
// ignore_for_file: constant_identifier_names
|
|
||||||
// ignore_for_file: curly_braces_in_flow_control_structures
|
|
||||||
// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
|
|
||||||
// ignore_for_file: non_constant_identifier_names, prefer_relative_imports
|
|
||||||
// ignore_for_file: unused_import
|
|
||||||
|
|
||||||
import 'dart:convert' as $convert;
|
|
||||||
import 'dart:core' as $core;
|
|
||||||
import 'dart:typed_data' as $typed_data;
|
|
||||||
|
|
||||||
@$core.Deprecated('Use authResultDescriptor instead')
|
|
||||||
const AuthResult$json = {
|
|
||||||
'1': 'AuthResult',
|
|
||||||
'2': [
|
|
||||||
{'1': 'AUTH_RESULT_UNSPECIFIED', '2': 0},
|
|
||||||
{'1': 'AUTH_RESULT_SUCCESS', '2': 1},
|
|
||||||
{'1': 'AUTH_RESULT_INVALID_KEY', '2': 2},
|
|
||||||
{'1': 'AUTH_RESULT_INVALID_SIGNATURE', '2': 3},
|
|
||||||
{'1': 'AUTH_RESULT_APPROVAL_DENIED', '2': 4},
|
|
||||||
{'1': 'AUTH_RESULT_NO_USER_AGENTS_ONLINE', '2': 5},
|
|
||||||
{'1': 'AUTH_RESULT_INTERNAL', '2': 6},
|
|
||||||
],
|
|
||||||
};
|
|
||||||
|
|
||||||
/// Descriptor for `AuthResult`. Decode as a `google.protobuf.EnumDescriptorProto`.
|
|
||||||
final $typed_data.Uint8List authResultDescriptor = $convert.base64Decode(
|
|
||||||
'CgpBdXRoUmVzdWx0EhsKF0FVVEhfUkVTVUxUX1VOU1BFQ0lGSUVEEAASFwoTQVVUSF9SRVNVTF'
|
|
||||||
'RfU1VDQ0VTUxABEhsKF0FVVEhfUkVTVUxUX0lOVkFMSURfS0VZEAISIQodQVVUSF9SRVNVTFRf'
|
|
||||||
'SU5WQUxJRF9TSUdOQVRVUkUQAxIfChtBVVRIX1JFU1VMVF9BUFBST1ZBTF9ERU5JRUQQBBIlCi'
|
|
||||||
'FBVVRIX1JFU1VMVF9OT19VU0VSX0FHRU5UU19PTkxJTkUQBRIYChRBVVRIX1JFU1VMVF9JTlRF'
|
|
||||||
'Uk5BTBAG');
|
|
||||||
|
|
||||||
@$core.Deprecated('Use authChallengeRequestDescriptor instead')
|
|
||||||
const AuthChallengeRequest$json = {
|
|
||||||
'1': 'AuthChallengeRequest',
|
|
||||||
'2': [
|
|
||||||
{'1': 'pubkey', '3': 1, '4': 1, '5': 12, '10': 'pubkey'},
|
|
||||||
{
|
|
||||||
'1': 'client_info',
|
|
||||||
'3': 2,
|
|
||||||
'4': 1,
|
|
||||||
'5': 11,
|
|
||||||
'6': '.arbiter.shared.ClientInfo',
|
|
||||||
'10': 'clientInfo'
|
|
||||||
},
|
|
||||||
],
|
|
||||||
};
|
|
||||||
|
|
||||||
/// Descriptor for `AuthChallengeRequest`. Decode as a `google.protobuf.DescriptorProto`.
|
|
||||||
final $typed_data.Uint8List authChallengeRequestDescriptor = $convert.base64Decode(
|
|
||||||
'ChRBdXRoQ2hhbGxlbmdlUmVxdWVzdBIWCgZwdWJrZXkYASABKAxSBnB1YmtleRI7CgtjbGllbn'
|
|
||||||
'RfaW5mbxgCIAEoCzIaLmFyYml0ZXIuc2hhcmVkLkNsaWVudEluZm9SCmNsaWVudEluZm8=');
|
|
||||||
|
|
||||||
@$core.Deprecated('Use authChallengeDescriptor instead')
|
|
||||||
const AuthChallenge$json = {
|
|
||||||
'1': 'AuthChallenge',
|
|
||||||
'2': [
|
|
||||||
{'1': 'pubkey', '3': 1, '4': 1, '5': 12, '10': 'pubkey'},
|
|
||||||
{'1': 'nonce', '3': 2, '4': 1, '5': 5, '10': 'nonce'},
|
|
||||||
],
|
|
||||||
};
|
|
||||||
|
|
||||||
/// Descriptor for `AuthChallenge`. Decode as a `google.protobuf.DescriptorProto`.
|
|
||||||
final $typed_data.Uint8List authChallengeDescriptor = $convert.base64Decode(
|
|
||||||
'Cg1BdXRoQ2hhbGxlbmdlEhYKBnB1YmtleRgBIAEoDFIGcHVia2V5EhQKBW5vbmNlGAIgASgFUg'
|
|
||||||
'Vub25jZQ==');
|
|
||||||
|
|
||||||
@$core.Deprecated('Use authChallengeSolutionDescriptor instead')
|
|
||||||
const AuthChallengeSolution$json = {
|
|
||||||
'1': 'AuthChallengeSolution',
|
|
||||||
'2': [
|
|
||||||
{'1': 'signature', '3': 1, '4': 1, '5': 12, '10': 'signature'},
|
|
||||||
],
|
|
||||||
};
|
|
||||||
|
|
||||||
/// Descriptor for `AuthChallengeSolution`. Decode as a `google.protobuf.DescriptorProto`.
|
|
||||||
final $typed_data.Uint8List authChallengeSolutionDescriptor = $convert.base64Decode(
|
|
||||||
'ChVBdXRoQ2hhbGxlbmdlU29sdXRpb24SHAoJc2lnbmF0dXJlGAEgASgMUglzaWduYXR1cmU=');
|
|
||||||
|
|
||||||
@$core.Deprecated('Use requestDescriptor instead')
|
|
||||||
const Request$json = {
|
|
||||||
'1': 'Request',
|
|
||||||
'2': [
|
|
||||||
{
|
|
||||||
'1': 'challenge_request',
|
|
||||||
'3': 1,
|
|
||||||
'4': 1,
|
|
||||||
'5': 11,
|
|
||||||
'6': '.arbiter.client.auth.AuthChallengeRequest',
|
|
||||||
'9': 0,
|
|
||||||
'10': 'challengeRequest'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'1': 'challenge_solution',
|
|
||||||
'3': 2,
|
|
||||||
'4': 1,
|
|
||||||
'5': 11,
|
|
||||||
'6': '.arbiter.client.auth.AuthChallengeSolution',
|
|
||||||
'9': 0,
|
|
||||||
'10': 'challengeSolution'
|
|
||||||
},
|
|
||||||
],
|
|
||||||
'8': [
|
|
||||||
{'1': 'payload'},
|
|
||||||
],
|
|
||||||
};
|
|
||||||
|
|
||||||
/// Descriptor for `Request`. Decode as a `google.protobuf.DescriptorProto`.
|
|
||||||
final $typed_data.Uint8List requestDescriptor = $convert.base64Decode(
|
|
||||||
'CgdSZXF1ZXN0ElgKEWNoYWxsZW5nZV9yZXF1ZXN0GAEgASgLMikuYXJiaXRlci5jbGllbnQuYX'
|
|
||||||
'V0aC5BdXRoQ2hhbGxlbmdlUmVxdWVzdEgAUhBjaGFsbGVuZ2VSZXF1ZXN0ElsKEmNoYWxsZW5n'
|
|
||||||
'ZV9zb2x1dGlvbhgCIAEoCzIqLmFyYml0ZXIuY2xpZW50LmF1dGguQXV0aENoYWxsZW5nZVNvbH'
|
|
||||||
'V0aW9uSABSEWNoYWxsZW5nZVNvbHV0aW9uQgkKB3BheWxvYWQ=');
|
|
||||||
|
|
||||||
@$core.Deprecated('Use responseDescriptor instead')
|
|
||||||
const Response$json = {
|
|
||||||
'1': 'Response',
|
|
||||||
'2': [
|
|
||||||
{
|
|
||||||
'1': 'challenge',
|
|
||||||
'3': 1,
|
|
||||||
'4': 1,
|
|
||||||
'5': 11,
|
|
||||||
'6': '.arbiter.client.auth.AuthChallenge',
|
|
||||||
'9': 0,
|
|
||||||
'10': 'challenge'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'1': 'result',
|
|
||||||
'3': 2,
|
|
||||||
'4': 1,
|
|
||||||
'5': 14,
|
|
||||||
'6': '.arbiter.client.auth.AuthResult',
|
|
||||||
'9': 0,
|
|
||||||
'10': 'result'
|
|
||||||
},
|
|
||||||
],
|
|
||||||
'8': [
|
|
||||||
{'1': 'payload'},
|
|
||||||
],
|
|
||||||
};
|
|
||||||
|
|
||||||
/// Descriptor for `Response`. Decode as a `google.protobuf.DescriptorProto`.
|
|
||||||
final $typed_data.Uint8List responseDescriptor = $convert.base64Decode(
|
|
||||||
'CghSZXNwb25zZRJCCgljaGFsbGVuZ2UYASABKAsyIi5hcmJpdGVyLmNsaWVudC5hdXRoLkF1dG'
|
|
||||||
'hDaGFsbGVuZ2VIAFIJY2hhbGxlbmdlEjkKBnJlc3VsdBgCIAEoDjIfLmFyYml0ZXIuY2xpZW50'
|
|
||||||
'LmF1dGguQXV0aFJlc3VsdEgAUgZyZXN1bHRCCQoHcGF5bG9hZA==');
|
|
||||||
@@ -1,208 +0,0 @@
|
|||||||
// This is a generated file - do not edit.
|
|
||||||
//
|
|
||||||
// Generated from client/evm.proto.
|
|
||||||
|
|
||||||
// @dart = 3.3
|
|
||||||
|
|
||||||
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
|
|
||||||
// ignore_for_file: constant_identifier_names
|
|
||||||
// ignore_for_file: curly_braces_in_flow_control_structures
|
|
||||||
// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
|
|
||||||
// ignore_for_file: non_constant_identifier_names, prefer_relative_imports
|
|
||||||
|
|
||||||
import 'dart:core' as $core;
|
|
||||||
|
|
||||||
import 'package:protobuf/protobuf.dart' as $pb;
|
|
||||||
|
|
||||||
import '../evm.pb.dart' as $0;
|
|
||||||
|
|
||||||
export 'package:protobuf/protobuf.dart' show GeneratedMessageGenericExtensions;
|
|
||||||
|
|
||||||
enum Request_Payload { signTransaction, analyzeTransaction, notSet }
|
|
||||||
|
|
||||||
class Request extends $pb.GeneratedMessage {
|
|
||||||
factory Request({
|
|
||||||
$0.EvmSignTransactionRequest? signTransaction,
|
|
||||||
$0.EvmAnalyzeTransactionRequest? analyzeTransaction,
|
|
||||||
}) {
|
|
||||||
final result = create();
|
|
||||||
if (signTransaction != null) result.signTransaction = signTransaction;
|
|
||||||
if (analyzeTransaction != null)
|
|
||||||
result.analyzeTransaction = analyzeTransaction;
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
Request._();
|
|
||||||
|
|
||||||
factory Request.fromBuffer($core.List<$core.int> data,
|
|
||||||
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
|
||||||
create()..mergeFromBuffer(data, registry);
|
|
||||||
factory Request.fromJson($core.String json,
|
|
||||||
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
|
||||||
create()..mergeFromJson(json, registry);
|
|
||||||
|
|
||||||
static const $core.Map<$core.int, Request_Payload> _Request_PayloadByTag = {
|
|
||||||
1: Request_Payload.signTransaction,
|
|
||||||
2: Request_Payload.analyzeTransaction,
|
|
||||||
0: Request_Payload.notSet
|
|
||||||
};
|
|
||||||
static final $pb.BuilderInfo _i = $pb.BuilderInfo(
|
|
||||||
_omitMessageNames ? '' : 'Request',
|
|
||||||
package:
|
|
||||||
const $pb.PackageName(_omitMessageNames ? '' : 'arbiter.client.evm'),
|
|
||||||
createEmptyInstance: create)
|
|
||||||
..oo(0, [1, 2])
|
|
||||||
..aOM<$0.EvmSignTransactionRequest>(
|
|
||||||
1, _omitFieldNames ? '' : 'signTransaction',
|
|
||||||
subBuilder: $0.EvmSignTransactionRequest.create)
|
|
||||||
..aOM<$0.EvmAnalyzeTransactionRequest>(
|
|
||||||
2, _omitFieldNames ? '' : 'analyzeTransaction',
|
|
||||||
subBuilder: $0.EvmAnalyzeTransactionRequest.create)
|
|
||||||
..hasRequiredFields = false;
|
|
||||||
|
|
||||||
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
|
||||||
Request clone() => deepCopy();
|
|
||||||
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
|
||||||
Request copyWith(void Function(Request) updates) =>
|
|
||||||
super.copyWith((message) => updates(message as Request)) as Request;
|
|
||||||
|
|
||||||
@$core.override
|
|
||||||
$pb.BuilderInfo get info_ => _i;
|
|
||||||
|
|
||||||
@$core.pragma('dart2js:noInline')
|
|
||||||
static Request create() => Request._();
|
|
||||||
@$core.override
|
|
||||||
Request createEmptyInstance() => create();
|
|
||||||
@$core.pragma('dart2js:noInline')
|
|
||||||
static Request getDefault() =>
|
|
||||||
_defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<Request>(create);
|
|
||||||
static Request? _defaultInstance;
|
|
||||||
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
Request_Payload whichPayload() => _Request_PayloadByTag[$_whichOneof(0)]!;
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
void clearPayload() => $_clearField($_whichOneof(0));
|
|
||||||
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
$0.EvmSignTransactionRequest get signTransaction => $_getN(0);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
set signTransaction($0.EvmSignTransactionRequest value) =>
|
|
||||||
$_setField(1, value);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
$core.bool hasSignTransaction() => $_has(0);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
void clearSignTransaction() => $_clearField(1);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
$0.EvmSignTransactionRequest ensureSignTransaction() => $_ensure(0);
|
|
||||||
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
$0.EvmAnalyzeTransactionRequest get analyzeTransaction => $_getN(1);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
set analyzeTransaction($0.EvmAnalyzeTransactionRequest value) =>
|
|
||||||
$_setField(2, value);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
$core.bool hasAnalyzeTransaction() => $_has(1);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
void clearAnalyzeTransaction() => $_clearField(2);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
$0.EvmAnalyzeTransactionRequest ensureAnalyzeTransaction() => $_ensure(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
enum Response_Payload { signTransaction, analyzeTransaction, notSet }
|
|
||||||
|
|
||||||
class Response extends $pb.GeneratedMessage {
|
|
||||||
factory Response({
|
|
||||||
$0.EvmSignTransactionResponse? signTransaction,
|
|
||||||
$0.EvmAnalyzeTransactionResponse? analyzeTransaction,
|
|
||||||
}) {
|
|
||||||
final result = create();
|
|
||||||
if (signTransaction != null) result.signTransaction = signTransaction;
|
|
||||||
if (analyzeTransaction != null)
|
|
||||||
result.analyzeTransaction = analyzeTransaction;
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
Response._();
|
|
||||||
|
|
||||||
factory Response.fromBuffer($core.List<$core.int> data,
|
|
||||||
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
|
||||||
create()..mergeFromBuffer(data, registry);
|
|
||||||
factory Response.fromJson($core.String json,
|
|
||||||
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
|
||||||
create()..mergeFromJson(json, registry);
|
|
||||||
|
|
||||||
static const $core.Map<$core.int, Response_Payload> _Response_PayloadByTag = {
|
|
||||||
1: Response_Payload.signTransaction,
|
|
||||||
2: Response_Payload.analyzeTransaction,
|
|
||||||
0: Response_Payload.notSet
|
|
||||||
};
|
|
||||||
static final $pb.BuilderInfo _i = $pb.BuilderInfo(
|
|
||||||
_omitMessageNames ? '' : 'Response',
|
|
||||||
package:
|
|
||||||
const $pb.PackageName(_omitMessageNames ? '' : 'arbiter.client.evm'),
|
|
||||||
createEmptyInstance: create)
|
|
||||||
..oo(0, [1, 2])
|
|
||||||
..aOM<$0.EvmSignTransactionResponse>(
|
|
||||||
1, _omitFieldNames ? '' : 'signTransaction',
|
|
||||||
subBuilder: $0.EvmSignTransactionResponse.create)
|
|
||||||
..aOM<$0.EvmAnalyzeTransactionResponse>(
|
|
||||||
2, _omitFieldNames ? '' : 'analyzeTransaction',
|
|
||||||
subBuilder: $0.EvmAnalyzeTransactionResponse.create)
|
|
||||||
..hasRequiredFields = false;
|
|
||||||
|
|
||||||
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
|
||||||
Response clone() => deepCopy();
|
|
||||||
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
|
||||||
Response copyWith(void Function(Response) updates) =>
|
|
||||||
super.copyWith((message) => updates(message as Response)) as Response;
|
|
||||||
|
|
||||||
@$core.override
|
|
||||||
$pb.BuilderInfo get info_ => _i;
|
|
||||||
|
|
||||||
@$core.pragma('dart2js:noInline')
|
|
||||||
static Response create() => Response._();
|
|
||||||
@$core.override
|
|
||||||
Response createEmptyInstance() => create();
|
|
||||||
@$core.pragma('dart2js:noInline')
|
|
||||||
static Response getDefault() =>
|
|
||||||
_defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<Response>(create);
|
|
||||||
static Response? _defaultInstance;
|
|
||||||
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
Response_Payload whichPayload() => _Response_PayloadByTag[$_whichOneof(0)]!;
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
void clearPayload() => $_clearField($_whichOneof(0));
|
|
||||||
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
$0.EvmSignTransactionResponse get signTransaction => $_getN(0);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
set signTransaction($0.EvmSignTransactionResponse value) =>
|
|
||||||
$_setField(1, value);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
$core.bool hasSignTransaction() => $_has(0);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
void clearSignTransaction() => $_clearField(1);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
$0.EvmSignTransactionResponse ensureSignTransaction() => $_ensure(0);
|
|
||||||
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
$0.EvmAnalyzeTransactionResponse get analyzeTransaction => $_getN(1);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
set analyzeTransaction($0.EvmAnalyzeTransactionResponse value) =>
|
|
||||||
$_setField(2, value);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
$core.bool hasAnalyzeTransaction() => $_has(1);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
void clearAnalyzeTransaction() => $_clearField(2);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
$0.EvmAnalyzeTransactionResponse ensureAnalyzeTransaction() => $_ensure(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
const $core.bool _omitFieldNames =
|
|
||||||
$core.bool.fromEnvironment('protobuf.omit_field_names');
|
|
||||||
const $core.bool _omitMessageNames =
|
|
||||||
$core.bool.fromEnvironment('protobuf.omit_message_names');
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
// This is a generated file - do not edit.
|
|
||||||
//
|
|
||||||
// Generated from client/evm.proto.
|
|
||||||
|
|
||||||
// @dart = 3.3
|
|
||||||
|
|
||||||
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
|
|
||||||
// ignore_for_file: constant_identifier_names
|
|
||||||
// ignore_for_file: curly_braces_in_flow_control_structures
|
|
||||||
// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
|
|
||||||
// ignore_for_file: non_constant_identifier_names, prefer_relative_imports
|
|
||||||
@@ -1,86 +0,0 @@
|
|||||||
// This is a generated file - do not edit.
|
|
||||||
//
|
|
||||||
// Generated from client/evm.proto.
|
|
||||||
|
|
||||||
// @dart = 3.3
|
|
||||||
|
|
||||||
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
|
|
||||||
// ignore_for_file: constant_identifier_names
|
|
||||||
// ignore_for_file: curly_braces_in_flow_control_structures
|
|
||||||
// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
|
|
||||||
// ignore_for_file: non_constant_identifier_names, prefer_relative_imports
|
|
||||||
// ignore_for_file: unused_import
|
|
||||||
|
|
||||||
import 'dart:convert' as $convert;
|
|
||||||
import 'dart:core' as $core;
|
|
||||||
import 'dart:typed_data' as $typed_data;
|
|
||||||
|
|
||||||
@$core.Deprecated('Use requestDescriptor instead')
|
|
||||||
const Request$json = {
|
|
||||||
'1': 'Request',
|
|
||||||
'2': [
|
|
||||||
{
|
|
||||||
'1': 'sign_transaction',
|
|
||||||
'3': 1,
|
|
||||||
'4': 1,
|
|
||||||
'5': 11,
|
|
||||||
'6': '.arbiter.evm.EvmSignTransactionRequest',
|
|
||||||
'9': 0,
|
|
||||||
'10': 'signTransaction'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'1': 'analyze_transaction',
|
|
||||||
'3': 2,
|
|
||||||
'4': 1,
|
|
||||||
'5': 11,
|
|
||||||
'6': '.arbiter.evm.EvmAnalyzeTransactionRequest',
|
|
||||||
'9': 0,
|
|
||||||
'10': 'analyzeTransaction'
|
|
||||||
},
|
|
||||||
],
|
|
||||||
'8': [
|
|
||||||
{'1': 'payload'},
|
|
||||||
],
|
|
||||||
};
|
|
||||||
|
|
||||||
/// Descriptor for `Request`. Decode as a `google.protobuf.DescriptorProto`.
|
|
||||||
final $typed_data.Uint8List requestDescriptor = $convert.base64Decode(
|
|
||||||
'CgdSZXF1ZXN0ElMKEHNpZ25fdHJhbnNhY3Rpb24YASABKAsyJi5hcmJpdGVyLmV2bS5Fdm1TaW'
|
|
||||||
'duVHJhbnNhY3Rpb25SZXF1ZXN0SABSD3NpZ25UcmFuc2FjdGlvbhJcChNhbmFseXplX3RyYW5z'
|
|
||||||
'YWN0aW9uGAIgASgLMikuYXJiaXRlci5ldm0uRXZtQW5hbHl6ZVRyYW5zYWN0aW9uUmVxdWVzdE'
|
|
||||||
'gAUhJhbmFseXplVHJhbnNhY3Rpb25CCQoHcGF5bG9hZA==');
|
|
||||||
|
|
||||||
@$core.Deprecated('Use responseDescriptor instead')
|
|
||||||
const Response$json = {
|
|
||||||
'1': 'Response',
|
|
||||||
'2': [
|
|
||||||
{
|
|
||||||
'1': 'sign_transaction',
|
|
||||||
'3': 1,
|
|
||||||
'4': 1,
|
|
||||||
'5': 11,
|
|
||||||
'6': '.arbiter.evm.EvmSignTransactionResponse',
|
|
||||||
'9': 0,
|
|
||||||
'10': 'signTransaction'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'1': 'analyze_transaction',
|
|
||||||
'3': 2,
|
|
||||||
'4': 1,
|
|
||||||
'5': 11,
|
|
||||||
'6': '.arbiter.evm.EvmAnalyzeTransactionResponse',
|
|
||||||
'9': 0,
|
|
||||||
'10': 'analyzeTransaction'
|
|
||||||
},
|
|
||||||
],
|
|
||||||
'8': [
|
|
||||||
{'1': 'payload'},
|
|
||||||
],
|
|
||||||
};
|
|
||||||
|
|
||||||
/// Descriptor for `Response`. Decode as a `google.protobuf.DescriptorProto`.
|
|
||||||
final $typed_data.Uint8List responseDescriptor = $convert.base64Decode(
|
|
||||||
'CghSZXNwb25zZRJUChBzaWduX3RyYW5zYWN0aW9uGAEgASgLMicuYXJiaXRlci5ldm0uRXZtU2'
|
|
||||||
'lnblRyYW5zYWN0aW9uUmVzcG9uc2VIAFIPc2lnblRyYW5zYWN0aW9uEl0KE2FuYWx5emVfdHJh'
|
|
||||||
'bnNhY3Rpb24YAiABKAsyKi5hcmJpdGVyLmV2bS5Fdm1BbmFseXplVHJhbnNhY3Rpb25SZXNwb2'
|
|
||||||
'5zZUgAUhJhbmFseXplVHJhbnNhY3Rpb25CCQoHcGF5bG9hZA==');
|
|
||||||
@@ -1,161 +0,0 @@
|
|||||||
// This is a generated file - do not edit.
|
|
||||||
//
|
|
||||||
// Generated from client/vault.proto.
|
|
||||||
|
|
||||||
// @dart = 3.3
|
|
||||||
|
|
||||||
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
|
|
||||||
// ignore_for_file: constant_identifier_names
|
|
||||||
// ignore_for_file: curly_braces_in_flow_control_structures
|
|
||||||
// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
|
|
||||||
// ignore_for_file: non_constant_identifier_names, prefer_relative_imports
|
|
||||||
|
|
||||||
import 'dart:core' as $core;
|
|
||||||
|
|
||||||
import 'package:protobuf/protobuf.dart' as $pb;
|
|
||||||
import 'package:protobuf/well_known_types/google/protobuf/empty.pb.dart' as $0;
|
|
||||||
|
|
||||||
import '../shared/vault.pbenum.dart' as $1;
|
|
||||||
|
|
||||||
export 'package:protobuf/protobuf.dart' show GeneratedMessageGenericExtensions;
|
|
||||||
|
|
||||||
enum Request_Payload { queryState, notSet }
|
|
||||||
|
|
||||||
class Request extends $pb.GeneratedMessage {
|
|
||||||
factory Request({
|
|
||||||
$0.Empty? queryState,
|
|
||||||
}) {
|
|
||||||
final result = create();
|
|
||||||
if (queryState != null) result.queryState = queryState;
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
Request._();
|
|
||||||
|
|
||||||
factory Request.fromBuffer($core.List<$core.int> data,
|
|
||||||
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
|
||||||
create()..mergeFromBuffer(data, registry);
|
|
||||||
factory Request.fromJson($core.String json,
|
|
||||||
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
|
||||||
create()..mergeFromJson(json, registry);
|
|
||||||
|
|
||||||
static const $core.Map<$core.int, Request_Payload> _Request_PayloadByTag = {
|
|
||||||
1: Request_Payload.queryState,
|
|
||||||
0: Request_Payload.notSet
|
|
||||||
};
|
|
||||||
static final $pb.BuilderInfo _i = $pb.BuilderInfo(
|
|
||||||
_omitMessageNames ? '' : 'Request',
|
|
||||||
package: const $pb.PackageName(
|
|
||||||
_omitMessageNames ? '' : 'arbiter.client.vault'),
|
|
||||||
createEmptyInstance: create)
|
|
||||||
..oo(0, [1])
|
|
||||||
..aOM<$0.Empty>(1, _omitFieldNames ? '' : 'queryState',
|
|
||||||
subBuilder: $0.Empty.create)
|
|
||||||
..hasRequiredFields = false;
|
|
||||||
|
|
||||||
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
|
||||||
Request clone() => deepCopy();
|
|
||||||
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
|
||||||
Request copyWith(void Function(Request) updates) =>
|
|
||||||
super.copyWith((message) => updates(message as Request)) as Request;
|
|
||||||
|
|
||||||
@$core.override
|
|
||||||
$pb.BuilderInfo get info_ => _i;
|
|
||||||
|
|
||||||
@$core.pragma('dart2js:noInline')
|
|
||||||
static Request create() => Request._();
|
|
||||||
@$core.override
|
|
||||||
Request createEmptyInstance() => create();
|
|
||||||
@$core.pragma('dart2js:noInline')
|
|
||||||
static Request getDefault() =>
|
|
||||||
_defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<Request>(create);
|
|
||||||
static Request? _defaultInstance;
|
|
||||||
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
Request_Payload whichPayload() => _Request_PayloadByTag[$_whichOneof(0)]!;
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
void clearPayload() => $_clearField($_whichOneof(0));
|
|
||||||
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
$0.Empty get queryState => $_getN(0);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
set queryState($0.Empty value) => $_setField(1, value);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
$core.bool hasQueryState() => $_has(0);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
void clearQueryState() => $_clearField(1);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
$0.Empty ensureQueryState() => $_ensure(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
enum Response_Payload { state, notSet }
|
|
||||||
|
|
||||||
class Response extends $pb.GeneratedMessage {
|
|
||||||
factory Response({
|
|
||||||
$1.VaultState? state,
|
|
||||||
}) {
|
|
||||||
final result = create();
|
|
||||||
if (state != null) result.state = state;
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
Response._();
|
|
||||||
|
|
||||||
factory Response.fromBuffer($core.List<$core.int> data,
|
|
||||||
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
|
||||||
create()..mergeFromBuffer(data, registry);
|
|
||||||
factory Response.fromJson($core.String json,
|
|
||||||
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
|
||||||
create()..mergeFromJson(json, registry);
|
|
||||||
|
|
||||||
static const $core.Map<$core.int, Response_Payload> _Response_PayloadByTag = {
|
|
||||||
1: Response_Payload.state,
|
|
||||||
0: Response_Payload.notSet
|
|
||||||
};
|
|
||||||
static final $pb.BuilderInfo _i = $pb.BuilderInfo(
|
|
||||||
_omitMessageNames ? '' : 'Response',
|
|
||||||
package: const $pb.PackageName(
|
|
||||||
_omitMessageNames ? '' : 'arbiter.client.vault'),
|
|
||||||
createEmptyInstance: create)
|
|
||||||
..oo(0, [1])
|
|
||||||
..aE<$1.VaultState>(1, _omitFieldNames ? '' : 'state',
|
|
||||||
enumValues: $1.VaultState.values)
|
|
||||||
..hasRequiredFields = false;
|
|
||||||
|
|
||||||
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
|
||||||
Response clone() => deepCopy();
|
|
||||||
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
|
||||||
Response copyWith(void Function(Response) updates) =>
|
|
||||||
super.copyWith((message) => updates(message as Response)) as Response;
|
|
||||||
|
|
||||||
@$core.override
|
|
||||||
$pb.BuilderInfo get info_ => _i;
|
|
||||||
|
|
||||||
@$core.pragma('dart2js:noInline')
|
|
||||||
static Response create() => Response._();
|
|
||||||
@$core.override
|
|
||||||
Response createEmptyInstance() => create();
|
|
||||||
@$core.pragma('dart2js:noInline')
|
|
||||||
static Response getDefault() =>
|
|
||||||
_defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<Response>(create);
|
|
||||||
static Response? _defaultInstance;
|
|
||||||
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
Response_Payload whichPayload() => _Response_PayloadByTag[$_whichOneof(0)]!;
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
void clearPayload() => $_clearField($_whichOneof(0));
|
|
||||||
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
$1.VaultState get state => $_getN(0);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
set state($1.VaultState value) => $_setField(1, value);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
$core.bool hasState() => $_has(0);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
void clearState() => $_clearField(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
const $core.bool _omitFieldNames =
|
|
||||||
$core.bool.fromEnvironment('protobuf.omit_field_names');
|
|
||||||
const $core.bool _omitMessageNames =
|
|
||||||
$core.bool.fromEnvironment('protobuf.omit_message_names');
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
// This is a generated file - do not edit.
|
|
||||||
//
|
|
||||||
// Generated from client/vault.proto.
|
|
||||||
|
|
||||||
// @dart = 3.3
|
|
||||||
|
|
||||||
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
|
|
||||||
// ignore_for_file: constant_identifier_names
|
|
||||||
// ignore_for_file: curly_braces_in_flow_control_structures
|
|
||||||
// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
|
|
||||||
// ignore_for_file: non_constant_identifier_names, prefer_relative_imports
|
|
||||||
@@ -1,64 +0,0 @@
|
|||||||
// This is a generated file - do not edit.
|
|
||||||
//
|
|
||||||
// Generated from client/vault.proto.
|
|
||||||
|
|
||||||
// @dart = 3.3
|
|
||||||
|
|
||||||
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
|
|
||||||
// ignore_for_file: constant_identifier_names
|
|
||||||
// ignore_for_file: curly_braces_in_flow_control_structures
|
|
||||||
// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
|
|
||||||
// ignore_for_file: non_constant_identifier_names, prefer_relative_imports
|
|
||||||
// ignore_for_file: unused_import
|
|
||||||
|
|
||||||
import 'dart:convert' as $convert;
|
|
||||||
import 'dart:core' as $core;
|
|
||||||
import 'dart:typed_data' as $typed_data;
|
|
||||||
|
|
||||||
@$core.Deprecated('Use requestDescriptor instead')
|
|
||||||
const Request$json = {
|
|
||||||
'1': 'Request',
|
|
||||||
'2': [
|
|
||||||
{
|
|
||||||
'1': 'query_state',
|
|
||||||
'3': 1,
|
|
||||||
'4': 1,
|
|
||||||
'5': 11,
|
|
||||||
'6': '.google.protobuf.Empty',
|
|
||||||
'9': 0,
|
|
||||||
'10': 'queryState'
|
|
||||||
},
|
|
||||||
],
|
|
||||||
'8': [
|
|
||||||
{'1': 'payload'},
|
|
||||||
],
|
|
||||||
};
|
|
||||||
|
|
||||||
/// Descriptor for `Request`. Decode as a `google.protobuf.DescriptorProto`.
|
|
||||||
final $typed_data.Uint8List requestDescriptor = $convert.base64Decode(
|
|
||||||
'CgdSZXF1ZXN0EjkKC3F1ZXJ5X3N0YXRlGAEgASgLMhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5SA'
|
|
||||||
'BSCnF1ZXJ5U3RhdGVCCQoHcGF5bG9hZA==');
|
|
||||||
|
|
||||||
@$core.Deprecated('Use responseDescriptor instead')
|
|
||||||
const Response$json = {
|
|
||||||
'1': 'Response',
|
|
||||||
'2': [
|
|
||||||
{
|
|
||||||
'1': 'state',
|
|
||||||
'3': 1,
|
|
||||||
'4': 1,
|
|
||||||
'5': 14,
|
|
||||||
'6': '.arbiter.shared.VaultState',
|
|
||||||
'9': 0,
|
|
||||||
'10': 'state'
|
|
||||||
},
|
|
||||||
],
|
|
||||||
'8': [
|
|
||||||
{'1': 'payload'},
|
|
||||||
],
|
|
||||||
};
|
|
||||||
|
|
||||||
/// Descriptor for `Response`. Decode as a `google.protobuf.DescriptorProto`.
|
|
||||||
final $typed_data.Uint8List responseDescriptor = $convert.base64Decode(
|
|
||||||
'CghSZXNwb25zZRIyCgVzdGF0ZRgBIAEoDjIaLmFyYml0ZXIuc2hhcmVkLlZhdWx0U3RhdGVIAF'
|
|
||||||
'IFc3RhdGVCCQoHcGF5bG9hZA==');
|
|
||||||
@@ -19,7 +19,6 @@ import 'package:protobuf/well_known_types/google/protobuf/timestamp.pb.dart'
|
|||||||
as $0;
|
as $0;
|
||||||
|
|
||||||
import 'evm.pbenum.dart';
|
import 'evm.pbenum.dart';
|
||||||
import 'shared/evm.pb.dart' as $2;
|
|
||||||
|
|
||||||
export 'package:protobuf/protobuf.dart' show GeneratedMessageGenericExtensions;
|
export 'package:protobuf/protobuf.dart' show GeneratedMessageGenericExtensions;
|
||||||
|
|
||||||
@@ -816,6 +815,825 @@ class SpecificGrant extends $pb.GeneratedMessage {
|
|||||||
TokenTransferSettings ensureTokenTransfer() => $_ensure(1);
|
TokenTransferSettings ensureTokenTransfer() => $_ensure(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class EtherTransferMeaning extends $pb.GeneratedMessage {
|
||||||
|
factory EtherTransferMeaning({
|
||||||
|
$core.List<$core.int>? to,
|
||||||
|
$core.List<$core.int>? value,
|
||||||
|
}) {
|
||||||
|
final result = create();
|
||||||
|
if (to != null) result.to = to;
|
||||||
|
if (value != null) result.value = value;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
EtherTransferMeaning._();
|
||||||
|
|
||||||
|
factory EtherTransferMeaning.fromBuffer($core.List<$core.int> data,
|
||||||
|
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
||||||
|
create()..mergeFromBuffer(data, registry);
|
||||||
|
factory EtherTransferMeaning.fromJson($core.String json,
|
||||||
|
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
||||||
|
create()..mergeFromJson(json, registry);
|
||||||
|
|
||||||
|
static final $pb.BuilderInfo _i = $pb.BuilderInfo(
|
||||||
|
_omitMessageNames ? '' : 'EtherTransferMeaning',
|
||||||
|
package: const $pb.PackageName(_omitMessageNames ? '' : 'arbiter.evm'),
|
||||||
|
createEmptyInstance: create)
|
||||||
|
..a<$core.List<$core.int>>(
|
||||||
|
1, _omitFieldNames ? '' : 'to', $pb.PbFieldType.OY)
|
||||||
|
..a<$core.List<$core.int>>(
|
||||||
|
2, _omitFieldNames ? '' : 'value', $pb.PbFieldType.OY)
|
||||||
|
..hasRequiredFields = false;
|
||||||
|
|
||||||
|
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
||||||
|
EtherTransferMeaning clone() => deepCopy();
|
||||||
|
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
||||||
|
EtherTransferMeaning copyWith(void Function(EtherTransferMeaning) updates) =>
|
||||||
|
super.copyWith((message) => updates(message as EtherTransferMeaning))
|
||||||
|
as EtherTransferMeaning;
|
||||||
|
|
||||||
|
@$core.override
|
||||||
|
$pb.BuilderInfo get info_ => _i;
|
||||||
|
|
||||||
|
@$core.pragma('dart2js:noInline')
|
||||||
|
static EtherTransferMeaning create() => EtherTransferMeaning._();
|
||||||
|
@$core.override
|
||||||
|
EtherTransferMeaning createEmptyInstance() => create();
|
||||||
|
@$core.pragma('dart2js:noInline')
|
||||||
|
static EtherTransferMeaning getDefault() => _defaultInstance ??=
|
||||||
|
$pb.GeneratedMessage.$_defaultFor<EtherTransferMeaning>(create);
|
||||||
|
static EtherTransferMeaning? _defaultInstance;
|
||||||
|
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
$core.List<$core.int> get to => $_getN(0);
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
set to($core.List<$core.int> value) => $_setBytes(0, value);
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
$core.bool hasTo() => $_has(0);
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
void clearTo() => $_clearField(1);
|
||||||
|
|
||||||
|
@$pb.TagNumber(2)
|
||||||
|
$core.List<$core.int> get value => $_getN(1);
|
||||||
|
@$pb.TagNumber(2)
|
||||||
|
set value($core.List<$core.int> value) => $_setBytes(1, value);
|
||||||
|
@$pb.TagNumber(2)
|
||||||
|
$core.bool hasValue() => $_has(1);
|
||||||
|
@$pb.TagNumber(2)
|
||||||
|
void clearValue() => $_clearField(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
class TokenInfo extends $pb.GeneratedMessage {
|
||||||
|
factory TokenInfo({
|
||||||
|
$core.String? symbol,
|
||||||
|
$core.List<$core.int>? address,
|
||||||
|
$fixnum.Int64? chainId,
|
||||||
|
}) {
|
||||||
|
final result = create();
|
||||||
|
if (symbol != null) result.symbol = symbol;
|
||||||
|
if (address != null) result.address = address;
|
||||||
|
if (chainId != null) result.chainId = chainId;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
TokenInfo._();
|
||||||
|
|
||||||
|
factory TokenInfo.fromBuffer($core.List<$core.int> data,
|
||||||
|
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
||||||
|
create()..mergeFromBuffer(data, registry);
|
||||||
|
factory TokenInfo.fromJson($core.String json,
|
||||||
|
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
||||||
|
create()..mergeFromJson(json, registry);
|
||||||
|
|
||||||
|
static final $pb.BuilderInfo _i = $pb.BuilderInfo(
|
||||||
|
_omitMessageNames ? '' : 'TokenInfo',
|
||||||
|
package: const $pb.PackageName(_omitMessageNames ? '' : 'arbiter.evm'),
|
||||||
|
createEmptyInstance: create)
|
||||||
|
..aOS(1, _omitFieldNames ? '' : 'symbol')
|
||||||
|
..a<$core.List<$core.int>>(
|
||||||
|
2, _omitFieldNames ? '' : 'address', $pb.PbFieldType.OY)
|
||||||
|
..a<$fixnum.Int64>(3, _omitFieldNames ? '' : 'chainId', $pb.PbFieldType.OU6,
|
||||||
|
defaultOrMaker: $fixnum.Int64.ZERO)
|
||||||
|
..hasRequiredFields = false;
|
||||||
|
|
||||||
|
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
||||||
|
TokenInfo clone() => deepCopy();
|
||||||
|
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
||||||
|
TokenInfo copyWith(void Function(TokenInfo) updates) =>
|
||||||
|
super.copyWith((message) => updates(message as TokenInfo)) as TokenInfo;
|
||||||
|
|
||||||
|
@$core.override
|
||||||
|
$pb.BuilderInfo get info_ => _i;
|
||||||
|
|
||||||
|
@$core.pragma('dart2js:noInline')
|
||||||
|
static TokenInfo create() => TokenInfo._();
|
||||||
|
@$core.override
|
||||||
|
TokenInfo createEmptyInstance() => create();
|
||||||
|
@$core.pragma('dart2js:noInline')
|
||||||
|
static TokenInfo getDefault() =>
|
||||||
|
_defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<TokenInfo>(create);
|
||||||
|
static TokenInfo? _defaultInstance;
|
||||||
|
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
$core.String get symbol => $_getSZ(0);
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
set symbol($core.String value) => $_setString(0, value);
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
$core.bool hasSymbol() => $_has(0);
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
void clearSymbol() => $_clearField(1);
|
||||||
|
|
||||||
|
@$pb.TagNumber(2)
|
||||||
|
$core.List<$core.int> get address => $_getN(1);
|
||||||
|
@$pb.TagNumber(2)
|
||||||
|
set address($core.List<$core.int> value) => $_setBytes(1, value);
|
||||||
|
@$pb.TagNumber(2)
|
||||||
|
$core.bool hasAddress() => $_has(1);
|
||||||
|
@$pb.TagNumber(2)
|
||||||
|
void clearAddress() => $_clearField(2);
|
||||||
|
|
||||||
|
@$pb.TagNumber(3)
|
||||||
|
$fixnum.Int64 get chainId => $_getI64(2);
|
||||||
|
@$pb.TagNumber(3)
|
||||||
|
set chainId($fixnum.Int64 value) => $_setInt64(2, value);
|
||||||
|
@$pb.TagNumber(3)
|
||||||
|
$core.bool hasChainId() => $_has(2);
|
||||||
|
@$pb.TagNumber(3)
|
||||||
|
void clearChainId() => $_clearField(3);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Mirror of token_transfers::Meaning
|
||||||
|
class TokenTransferMeaning extends $pb.GeneratedMessage {
|
||||||
|
factory TokenTransferMeaning({
|
||||||
|
TokenInfo? token,
|
||||||
|
$core.List<$core.int>? to,
|
||||||
|
$core.List<$core.int>? value,
|
||||||
|
}) {
|
||||||
|
final result = create();
|
||||||
|
if (token != null) result.token = token;
|
||||||
|
if (to != null) result.to = to;
|
||||||
|
if (value != null) result.value = value;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
TokenTransferMeaning._();
|
||||||
|
|
||||||
|
factory TokenTransferMeaning.fromBuffer($core.List<$core.int> data,
|
||||||
|
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
||||||
|
create()..mergeFromBuffer(data, registry);
|
||||||
|
factory TokenTransferMeaning.fromJson($core.String json,
|
||||||
|
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
||||||
|
create()..mergeFromJson(json, registry);
|
||||||
|
|
||||||
|
static final $pb.BuilderInfo _i = $pb.BuilderInfo(
|
||||||
|
_omitMessageNames ? '' : 'TokenTransferMeaning',
|
||||||
|
package: const $pb.PackageName(_omitMessageNames ? '' : 'arbiter.evm'),
|
||||||
|
createEmptyInstance: create)
|
||||||
|
..aOM<TokenInfo>(1, _omitFieldNames ? '' : 'token',
|
||||||
|
subBuilder: TokenInfo.create)
|
||||||
|
..a<$core.List<$core.int>>(
|
||||||
|
2, _omitFieldNames ? '' : 'to', $pb.PbFieldType.OY)
|
||||||
|
..a<$core.List<$core.int>>(
|
||||||
|
3, _omitFieldNames ? '' : 'value', $pb.PbFieldType.OY)
|
||||||
|
..hasRequiredFields = false;
|
||||||
|
|
||||||
|
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
||||||
|
TokenTransferMeaning clone() => deepCopy();
|
||||||
|
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
||||||
|
TokenTransferMeaning copyWith(void Function(TokenTransferMeaning) updates) =>
|
||||||
|
super.copyWith((message) => updates(message as TokenTransferMeaning))
|
||||||
|
as TokenTransferMeaning;
|
||||||
|
|
||||||
|
@$core.override
|
||||||
|
$pb.BuilderInfo get info_ => _i;
|
||||||
|
|
||||||
|
@$core.pragma('dart2js:noInline')
|
||||||
|
static TokenTransferMeaning create() => TokenTransferMeaning._();
|
||||||
|
@$core.override
|
||||||
|
TokenTransferMeaning createEmptyInstance() => create();
|
||||||
|
@$core.pragma('dart2js:noInline')
|
||||||
|
static TokenTransferMeaning getDefault() => _defaultInstance ??=
|
||||||
|
$pb.GeneratedMessage.$_defaultFor<TokenTransferMeaning>(create);
|
||||||
|
static TokenTransferMeaning? _defaultInstance;
|
||||||
|
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
TokenInfo get token => $_getN(0);
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
set token(TokenInfo value) => $_setField(1, value);
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
$core.bool hasToken() => $_has(0);
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
void clearToken() => $_clearField(1);
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
TokenInfo ensureToken() => $_ensure(0);
|
||||||
|
|
||||||
|
@$pb.TagNumber(2)
|
||||||
|
$core.List<$core.int> get to => $_getN(1);
|
||||||
|
@$pb.TagNumber(2)
|
||||||
|
set to($core.List<$core.int> value) => $_setBytes(1, value);
|
||||||
|
@$pb.TagNumber(2)
|
||||||
|
$core.bool hasTo() => $_has(1);
|
||||||
|
@$pb.TagNumber(2)
|
||||||
|
void clearTo() => $_clearField(2);
|
||||||
|
|
||||||
|
@$pb.TagNumber(3)
|
||||||
|
$core.List<$core.int> get value => $_getN(2);
|
||||||
|
@$pb.TagNumber(3)
|
||||||
|
set value($core.List<$core.int> value) => $_setBytes(2, value);
|
||||||
|
@$pb.TagNumber(3)
|
||||||
|
$core.bool hasValue() => $_has(2);
|
||||||
|
@$pb.TagNumber(3)
|
||||||
|
void clearValue() => $_clearField(3);
|
||||||
|
}
|
||||||
|
|
||||||
|
enum SpecificMeaning_Meaning { etherTransfer, tokenTransfer, notSet }
|
||||||
|
|
||||||
|
/// Mirror of policies::SpecificMeaning
|
||||||
|
class SpecificMeaning extends $pb.GeneratedMessage {
|
||||||
|
factory SpecificMeaning({
|
||||||
|
EtherTransferMeaning? etherTransfer,
|
||||||
|
TokenTransferMeaning? tokenTransfer,
|
||||||
|
}) {
|
||||||
|
final result = create();
|
||||||
|
if (etherTransfer != null) result.etherTransfer = etherTransfer;
|
||||||
|
if (tokenTransfer != null) result.tokenTransfer = tokenTransfer;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
SpecificMeaning._();
|
||||||
|
|
||||||
|
factory SpecificMeaning.fromBuffer($core.List<$core.int> data,
|
||||||
|
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
||||||
|
create()..mergeFromBuffer(data, registry);
|
||||||
|
factory SpecificMeaning.fromJson($core.String json,
|
||||||
|
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
||||||
|
create()..mergeFromJson(json, registry);
|
||||||
|
|
||||||
|
static const $core.Map<$core.int, SpecificMeaning_Meaning>
|
||||||
|
_SpecificMeaning_MeaningByTag = {
|
||||||
|
1: SpecificMeaning_Meaning.etherTransfer,
|
||||||
|
2: SpecificMeaning_Meaning.tokenTransfer,
|
||||||
|
0: SpecificMeaning_Meaning.notSet
|
||||||
|
};
|
||||||
|
static final $pb.BuilderInfo _i = $pb.BuilderInfo(
|
||||||
|
_omitMessageNames ? '' : 'SpecificMeaning',
|
||||||
|
package: const $pb.PackageName(_omitMessageNames ? '' : 'arbiter.evm'),
|
||||||
|
createEmptyInstance: create)
|
||||||
|
..oo(0, [1, 2])
|
||||||
|
..aOM<EtherTransferMeaning>(1, _omitFieldNames ? '' : 'etherTransfer',
|
||||||
|
subBuilder: EtherTransferMeaning.create)
|
||||||
|
..aOM<TokenTransferMeaning>(2, _omitFieldNames ? '' : 'tokenTransfer',
|
||||||
|
subBuilder: TokenTransferMeaning.create)
|
||||||
|
..hasRequiredFields = false;
|
||||||
|
|
||||||
|
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
||||||
|
SpecificMeaning clone() => deepCopy();
|
||||||
|
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
||||||
|
SpecificMeaning copyWith(void Function(SpecificMeaning) updates) =>
|
||||||
|
super.copyWith((message) => updates(message as SpecificMeaning))
|
||||||
|
as SpecificMeaning;
|
||||||
|
|
||||||
|
@$core.override
|
||||||
|
$pb.BuilderInfo get info_ => _i;
|
||||||
|
|
||||||
|
@$core.pragma('dart2js:noInline')
|
||||||
|
static SpecificMeaning create() => SpecificMeaning._();
|
||||||
|
@$core.override
|
||||||
|
SpecificMeaning createEmptyInstance() => create();
|
||||||
|
@$core.pragma('dart2js:noInline')
|
||||||
|
static SpecificMeaning getDefault() => _defaultInstance ??=
|
||||||
|
$pb.GeneratedMessage.$_defaultFor<SpecificMeaning>(create);
|
||||||
|
static SpecificMeaning? _defaultInstance;
|
||||||
|
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
@$pb.TagNumber(2)
|
||||||
|
SpecificMeaning_Meaning whichMeaning() =>
|
||||||
|
_SpecificMeaning_MeaningByTag[$_whichOneof(0)]!;
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
@$pb.TagNumber(2)
|
||||||
|
void clearMeaning() => $_clearField($_whichOneof(0));
|
||||||
|
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
EtherTransferMeaning get etherTransfer => $_getN(0);
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
set etherTransfer(EtherTransferMeaning value) => $_setField(1, value);
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
$core.bool hasEtherTransfer() => $_has(0);
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
void clearEtherTransfer() => $_clearField(1);
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
EtherTransferMeaning ensureEtherTransfer() => $_ensure(0);
|
||||||
|
|
||||||
|
@$pb.TagNumber(2)
|
||||||
|
TokenTransferMeaning get tokenTransfer => $_getN(1);
|
||||||
|
@$pb.TagNumber(2)
|
||||||
|
set tokenTransfer(TokenTransferMeaning value) => $_setField(2, value);
|
||||||
|
@$pb.TagNumber(2)
|
||||||
|
$core.bool hasTokenTransfer() => $_has(1);
|
||||||
|
@$pb.TagNumber(2)
|
||||||
|
void clearTokenTransfer() => $_clearField(2);
|
||||||
|
@$pb.TagNumber(2)
|
||||||
|
TokenTransferMeaning ensureTokenTransfer() => $_ensure(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// --- Eval error types ---
|
||||||
|
class GasLimitExceededViolation extends $pb.GeneratedMessage {
|
||||||
|
factory GasLimitExceededViolation({
|
||||||
|
$core.List<$core.int>? maxGasFeePerGas,
|
||||||
|
$core.List<$core.int>? maxPriorityFeePerGas,
|
||||||
|
}) {
|
||||||
|
final result = create();
|
||||||
|
if (maxGasFeePerGas != null) result.maxGasFeePerGas = maxGasFeePerGas;
|
||||||
|
if (maxPriorityFeePerGas != null)
|
||||||
|
result.maxPriorityFeePerGas = maxPriorityFeePerGas;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
GasLimitExceededViolation._();
|
||||||
|
|
||||||
|
factory GasLimitExceededViolation.fromBuffer($core.List<$core.int> data,
|
||||||
|
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
||||||
|
create()..mergeFromBuffer(data, registry);
|
||||||
|
factory GasLimitExceededViolation.fromJson($core.String json,
|
||||||
|
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
||||||
|
create()..mergeFromJson(json, registry);
|
||||||
|
|
||||||
|
static final $pb.BuilderInfo _i = $pb.BuilderInfo(
|
||||||
|
_omitMessageNames ? '' : 'GasLimitExceededViolation',
|
||||||
|
package: const $pb.PackageName(_omitMessageNames ? '' : 'arbiter.evm'),
|
||||||
|
createEmptyInstance: create)
|
||||||
|
..a<$core.List<$core.int>>(
|
||||||
|
1, _omitFieldNames ? '' : 'maxGasFeePerGas', $pb.PbFieldType.OY)
|
||||||
|
..a<$core.List<$core.int>>(
|
||||||
|
2, _omitFieldNames ? '' : 'maxPriorityFeePerGas', $pb.PbFieldType.OY)
|
||||||
|
..hasRequiredFields = false;
|
||||||
|
|
||||||
|
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
||||||
|
GasLimitExceededViolation clone() => deepCopy();
|
||||||
|
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
||||||
|
GasLimitExceededViolation copyWith(
|
||||||
|
void Function(GasLimitExceededViolation) updates) =>
|
||||||
|
super.copyWith((message) => updates(message as GasLimitExceededViolation))
|
||||||
|
as GasLimitExceededViolation;
|
||||||
|
|
||||||
|
@$core.override
|
||||||
|
$pb.BuilderInfo get info_ => _i;
|
||||||
|
|
||||||
|
@$core.pragma('dart2js:noInline')
|
||||||
|
static GasLimitExceededViolation create() => GasLimitExceededViolation._();
|
||||||
|
@$core.override
|
||||||
|
GasLimitExceededViolation createEmptyInstance() => create();
|
||||||
|
@$core.pragma('dart2js:noInline')
|
||||||
|
static GasLimitExceededViolation getDefault() => _defaultInstance ??=
|
||||||
|
$pb.GeneratedMessage.$_defaultFor<GasLimitExceededViolation>(create);
|
||||||
|
static GasLimitExceededViolation? _defaultInstance;
|
||||||
|
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
$core.List<$core.int> get maxGasFeePerGas => $_getN(0);
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
set maxGasFeePerGas($core.List<$core.int> value) => $_setBytes(0, value);
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
$core.bool hasMaxGasFeePerGas() => $_has(0);
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
void clearMaxGasFeePerGas() => $_clearField(1);
|
||||||
|
|
||||||
|
@$pb.TagNumber(2)
|
||||||
|
$core.List<$core.int> get maxPriorityFeePerGas => $_getN(1);
|
||||||
|
@$pb.TagNumber(2)
|
||||||
|
set maxPriorityFeePerGas($core.List<$core.int> value) => $_setBytes(1, value);
|
||||||
|
@$pb.TagNumber(2)
|
||||||
|
$core.bool hasMaxPriorityFeePerGas() => $_has(1);
|
||||||
|
@$pb.TagNumber(2)
|
||||||
|
void clearMaxPriorityFeePerGas() => $_clearField(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
enum EvalViolation_Kind {
|
||||||
|
invalidTarget,
|
||||||
|
gasLimitExceeded,
|
||||||
|
rateLimitExceeded,
|
||||||
|
volumetricLimitExceeded,
|
||||||
|
invalidTime,
|
||||||
|
invalidTransactionType,
|
||||||
|
notSet
|
||||||
|
}
|
||||||
|
|
||||||
|
class EvalViolation extends $pb.GeneratedMessage {
|
||||||
|
factory EvalViolation({
|
||||||
|
$core.List<$core.int>? invalidTarget,
|
||||||
|
GasLimitExceededViolation? gasLimitExceeded,
|
||||||
|
$1.Empty? rateLimitExceeded,
|
||||||
|
$1.Empty? volumetricLimitExceeded,
|
||||||
|
$1.Empty? invalidTime,
|
||||||
|
$1.Empty? invalidTransactionType,
|
||||||
|
}) {
|
||||||
|
final result = create();
|
||||||
|
if (invalidTarget != null) result.invalidTarget = invalidTarget;
|
||||||
|
if (gasLimitExceeded != null) result.gasLimitExceeded = gasLimitExceeded;
|
||||||
|
if (rateLimitExceeded != null) result.rateLimitExceeded = rateLimitExceeded;
|
||||||
|
if (volumetricLimitExceeded != null)
|
||||||
|
result.volumetricLimitExceeded = volumetricLimitExceeded;
|
||||||
|
if (invalidTime != null) result.invalidTime = invalidTime;
|
||||||
|
if (invalidTransactionType != null)
|
||||||
|
result.invalidTransactionType = invalidTransactionType;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
EvalViolation._();
|
||||||
|
|
||||||
|
factory EvalViolation.fromBuffer($core.List<$core.int> data,
|
||||||
|
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
||||||
|
create()..mergeFromBuffer(data, registry);
|
||||||
|
factory EvalViolation.fromJson($core.String json,
|
||||||
|
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
||||||
|
create()..mergeFromJson(json, registry);
|
||||||
|
|
||||||
|
static const $core.Map<$core.int, EvalViolation_Kind>
|
||||||
|
_EvalViolation_KindByTag = {
|
||||||
|
1: EvalViolation_Kind.invalidTarget,
|
||||||
|
2: EvalViolation_Kind.gasLimitExceeded,
|
||||||
|
3: EvalViolation_Kind.rateLimitExceeded,
|
||||||
|
4: EvalViolation_Kind.volumetricLimitExceeded,
|
||||||
|
5: EvalViolation_Kind.invalidTime,
|
||||||
|
6: EvalViolation_Kind.invalidTransactionType,
|
||||||
|
0: EvalViolation_Kind.notSet
|
||||||
|
};
|
||||||
|
static final $pb.BuilderInfo _i = $pb.BuilderInfo(
|
||||||
|
_omitMessageNames ? '' : 'EvalViolation',
|
||||||
|
package: const $pb.PackageName(_omitMessageNames ? '' : 'arbiter.evm'),
|
||||||
|
createEmptyInstance: create)
|
||||||
|
..oo(0, [1, 2, 3, 4, 5, 6])
|
||||||
|
..a<$core.List<$core.int>>(
|
||||||
|
1, _omitFieldNames ? '' : 'invalidTarget', $pb.PbFieldType.OY)
|
||||||
|
..aOM<GasLimitExceededViolation>(
|
||||||
|
2, _omitFieldNames ? '' : 'gasLimitExceeded',
|
||||||
|
subBuilder: GasLimitExceededViolation.create)
|
||||||
|
..aOM<$1.Empty>(3, _omitFieldNames ? '' : 'rateLimitExceeded',
|
||||||
|
subBuilder: $1.Empty.create)
|
||||||
|
..aOM<$1.Empty>(4, _omitFieldNames ? '' : 'volumetricLimitExceeded',
|
||||||
|
subBuilder: $1.Empty.create)
|
||||||
|
..aOM<$1.Empty>(5, _omitFieldNames ? '' : 'invalidTime',
|
||||||
|
subBuilder: $1.Empty.create)
|
||||||
|
..aOM<$1.Empty>(6, _omitFieldNames ? '' : 'invalidTransactionType',
|
||||||
|
subBuilder: $1.Empty.create)
|
||||||
|
..hasRequiredFields = false;
|
||||||
|
|
||||||
|
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
||||||
|
EvalViolation clone() => deepCopy();
|
||||||
|
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
||||||
|
EvalViolation copyWith(void Function(EvalViolation) updates) =>
|
||||||
|
super.copyWith((message) => updates(message as EvalViolation))
|
||||||
|
as EvalViolation;
|
||||||
|
|
||||||
|
@$core.override
|
||||||
|
$pb.BuilderInfo get info_ => _i;
|
||||||
|
|
||||||
|
@$core.pragma('dart2js:noInline')
|
||||||
|
static EvalViolation create() => EvalViolation._();
|
||||||
|
@$core.override
|
||||||
|
EvalViolation createEmptyInstance() => create();
|
||||||
|
@$core.pragma('dart2js:noInline')
|
||||||
|
static EvalViolation getDefault() => _defaultInstance ??=
|
||||||
|
$pb.GeneratedMessage.$_defaultFor<EvalViolation>(create);
|
||||||
|
static EvalViolation? _defaultInstance;
|
||||||
|
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
@$pb.TagNumber(2)
|
||||||
|
@$pb.TagNumber(3)
|
||||||
|
@$pb.TagNumber(4)
|
||||||
|
@$pb.TagNumber(5)
|
||||||
|
@$pb.TagNumber(6)
|
||||||
|
EvalViolation_Kind whichKind() => _EvalViolation_KindByTag[$_whichOneof(0)]!;
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
@$pb.TagNumber(2)
|
||||||
|
@$pb.TagNumber(3)
|
||||||
|
@$pb.TagNumber(4)
|
||||||
|
@$pb.TagNumber(5)
|
||||||
|
@$pb.TagNumber(6)
|
||||||
|
void clearKind() => $_clearField($_whichOneof(0));
|
||||||
|
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
$core.List<$core.int> get invalidTarget => $_getN(0);
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
set invalidTarget($core.List<$core.int> value) => $_setBytes(0, value);
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
$core.bool hasInvalidTarget() => $_has(0);
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
void clearInvalidTarget() => $_clearField(1);
|
||||||
|
|
||||||
|
@$pb.TagNumber(2)
|
||||||
|
GasLimitExceededViolation get gasLimitExceeded => $_getN(1);
|
||||||
|
@$pb.TagNumber(2)
|
||||||
|
set gasLimitExceeded(GasLimitExceededViolation value) => $_setField(2, value);
|
||||||
|
@$pb.TagNumber(2)
|
||||||
|
$core.bool hasGasLimitExceeded() => $_has(1);
|
||||||
|
@$pb.TagNumber(2)
|
||||||
|
void clearGasLimitExceeded() => $_clearField(2);
|
||||||
|
@$pb.TagNumber(2)
|
||||||
|
GasLimitExceededViolation ensureGasLimitExceeded() => $_ensure(1);
|
||||||
|
|
||||||
|
@$pb.TagNumber(3)
|
||||||
|
$1.Empty get rateLimitExceeded => $_getN(2);
|
||||||
|
@$pb.TagNumber(3)
|
||||||
|
set rateLimitExceeded($1.Empty value) => $_setField(3, value);
|
||||||
|
@$pb.TagNumber(3)
|
||||||
|
$core.bool hasRateLimitExceeded() => $_has(2);
|
||||||
|
@$pb.TagNumber(3)
|
||||||
|
void clearRateLimitExceeded() => $_clearField(3);
|
||||||
|
@$pb.TagNumber(3)
|
||||||
|
$1.Empty ensureRateLimitExceeded() => $_ensure(2);
|
||||||
|
|
||||||
|
@$pb.TagNumber(4)
|
||||||
|
$1.Empty get volumetricLimitExceeded => $_getN(3);
|
||||||
|
@$pb.TagNumber(4)
|
||||||
|
set volumetricLimitExceeded($1.Empty value) => $_setField(4, value);
|
||||||
|
@$pb.TagNumber(4)
|
||||||
|
$core.bool hasVolumetricLimitExceeded() => $_has(3);
|
||||||
|
@$pb.TagNumber(4)
|
||||||
|
void clearVolumetricLimitExceeded() => $_clearField(4);
|
||||||
|
@$pb.TagNumber(4)
|
||||||
|
$1.Empty ensureVolumetricLimitExceeded() => $_ensure(3);
|
||||||
|
|
||||||
|
@$pb.TagNumber(5)
|
||||||
|
$1.Empty get invalidTime => $_getN(4);
|
||||||
|
@$pb.TagNumber(5)
|
||||||
|
set invalidTime($1.Empty value) => $_setField(5, value);
|
||||||
|
@$pb.TagNumber(5)
|
||||||
|
$core.bool hasInvalidTime() => $_has(4);
|
||||||
|
@$pb.TagNumber(5)
|
||||||
|
void clearInvalidTime() => $_clearField(5);
|
||||||
|
@$pb.TagNumber(5)
|
||||||
|
$1.Empty ensureInvalidTime() => $_ensure(4);
|
||||||
|
|
||||||
|
@$pb.TagNumber(6)
|
||||||
|
$1.Empty get invalidTransactionType => $_getN(5);
|
||||||
|
@$pb.TagNumber(6)
|
||||||
|
set invalidTransactionType($1.Empty value) => $_setField(6, value);
|
||||||
|
@$pb.TagNumber(6)
|
||||||
|
$core.bool hasInvalidTransactionType() => $_has(5);
|
||||||
|
@$pb.TagNumber(6)
|
||||||
|
void clearInvalidTransactionType() => $_clearField(6);
|
||||||
|
@$pb.TagNumber(6)
|
||||||
|
$1.Empty ensureInvalidTransactionType() => $_ensure(5);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Transaction was classified but no grant covers it
|
||||||
|
class NoMatchingGrantError extends $pb.GeneratedMessage {
|
||||||
|
factory NoMatchingGrantError({
|
||||||
|
SpecificMeaning? meaning,
|
||||||
|
}) {
|
||||||
|
final result = create();
|
||||||
|
if (meaning != null) result.meaning = meaning;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
NoMatchingGrantError._();
|
||||||
|
|
||||||
|
factory NoMatchingGrantError.fromBuffer($core.List<$core.int> data,
|
||||||
|
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
||||||
|
create()..mergeFromBuffer(data, registry);
|
||||||
|
factory NoMatchingGrantError.fromJson($core.String json,
|
||||||
|
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
||||||
|
create()..mergeFromJson(json, registry);
|
||||||
|
|
||||||
|
static final $pb.BuilderInfo _i = $pb.BuilderInfo(
|
||||||
|
_omitMessageNames ? '' : 'NoMatchingGrantError',
|
||||||
|
package: const $pb.PackageName(_omitMessageNames ? '' : 'arbiter.evm'),
|
||||||
|
createEmptyInstance: create)
|
||||||
|
..aOM<SpecificMeaning>(1, _omitFieldNames ? '' : 'meaning',
|
||||||
|
subBuilder: SpecificMeaning.create)
|
||||||
|
..hasRequiredFields = false;
|
||||||
|
|
||||||
|
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
||||||
|
NoMatchingGrantError clone() => deepCopy();
|
||||||
|
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
||||||
|
NoMatchingGrantError copyWith(void Function(NoMatchingGrantError) updates) =>
|
||||||
|
super.copyWith((message) => updates(message as NoMatchingGrantError))
|
||||||
|
as NoMatchingGrantError;
|
||||||
|
|
||||||
|
@$core.override
|
||||||
|
$pb.BuilderInfo get info_ => _i;
|
||||||
|
|
||||||
|
@$core.pragma('dart2js:noInline')
|
||||||
|
static NoMatchingGrantError create() => NoMatchingGrantError._();
|
||||||
|
@$core.override
|
||||||
|
NoMatchingGrantError createEmptyInstance() => create();
|
||||||
|
@$core.pragma('dart2js:noInline')
|
||||||
|
static NoMatchingGrantError getDefault() => _defaultInstance ??=
|
||||||
|
$pb.GeneratedMessage.$_defaultFor<NoMatchingGrantError>(create);
|
||||||
|
static NoMatchingGrantError? _defaultInstance;
|
||||||
|
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
SpecificMeaning get meaning => $_getN(0);
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
set meaning(SpecificMeaning value) => $_setField(1, value);
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
$core.bool hasMeaning() => $_has(0);
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
void clearMeaning() => $_clearField(1);
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
SpecificMeaning ensureMeaning() => $_ensure(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Transaction was classified and a grant was found, but constraints were violated
|
||||||
|
class PolicyViolationsError extends $pb.GeneratedMessage {
|
||||||
|
factory PolicyViolationsError({
|
||||||
|
SpecificMeaning? meaning,
|
||||||
|
$core.Iterable<EvalViolation>? violations,
|
||||||
|
}) {
|
||||||
|
final result = create();
|
||||||
|
if (meaning != null) result.meaning = meaning;
|
||||||
|
if (violations != null) result.violations.addAll(violations);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
PolicyViolationsError._();
|
||||||
|
|
||||||
|
factory PolicyViolationsError.fromBuffer($core.List<$core.int> data,
|
||||||
|
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
||||||
|
create()..mergeFromBuffer(data, registry);
|
||||||
|
factory PolicyViolationsError.fromJson($core.String json,
|
||||||
|
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
||||||
|
create()..mergeFromJson(json, registry);
|
||||||
|
|
||||||
|
static final $pb.BuilderInfo _i = $pb.BuilderInfo(
|
||||||
|
_omitMessageNames ? '' : 'PolicyViolationsError',
|
||||||
|
package: const $pb.PackageName(_omitMessageNames ? '' : 'arbiter.evm'),
|
||||||
|
createEmptyInstance: create)
|
||||||
|
..aOM<SpecificMeaning>(1, _omitFieldNames ? '' : 'meaning',
|
||||||
|
subBuilder: SpecificMeaning.create)
|
||||||
|
..pPM<EvalViolation>(2, _omitFieldNames ? '' : 'violations',
|
||||||
|
subBuilder: EvalViolation.create)
|
||||||
|
..hasRequiredFields = false;
|
||||||
|
|
||||||
|
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
||||||
|
PolicyViolationsError clone() => deepCopy();
|
||||||
|
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
||||||
|
PolicyViolationsError copyWith(
|
||||||
|
void Function(PolicyViolationsError) updates) =>
|
||||||
|
super.copyWith((message) => updates(message as PolicyViolationsError))
|
||||||
|
as PolicyViolationsError;
|
||||||
|
|
||||||
|
@$core.override
|
||||||
|
$pb.BuilderInfo get info_ => _i;
|
||||||
|
|
||||||
|
@$core.pragma('dart2js:noInline')
|
||||||
|
static PolicyViolationsError create() => PolicyViolationsError._();
|
||||||
|
@$core.override
|
||||||
|
PolicyViolationsError createEmptyInstance() => create();
|
||||||
|
@$core.pragma('dart2js:noInline')
|
||||||
|
static PolicyViolationsError getDefault() => _defaultInstance ??=
|
||||||
|
$pb.GeneratedMessage.$_defaultFor<PolicyViolationsError>(create);
|
||||||
|
static PolicyViolationsError? _defaultInstance;
|
||||||
|
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
SpecificMeaning get meaning => $_getN(0);
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
set meaning(SpecificMeaning value) => $_setField(1, value);
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
$core.bool hasMeaning() => $_has(0);
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
void clearMeaning() => $_clearField(1);
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
SpecificMeaning ensureMeaning() => $_ensure(0);
|
||||||
|
|
||||||
|
@$pb.TagNumber(2)
|
||||||
|
$pb.PbList<EvalViolation> get violations => $_getList(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
enum TransactionEvalError_Kind {
|
||||||
|
contractCreationNotSupported,
|
||||||
|
unsupportedTransactionType,
|
||||||
|
noMatchingGrant,
|
||||||
|
policyViolations,
|
||||||
|
notSet
|
||||||
|
}
|
||||||
|
|
||||||
|
/// top-level error returned when transaction evaluation fails
|
||||||
|
class TransactionEvalError extends $pb.GeneratedMessage {
|
||||||
|
factory TransactionEvalError({
|
||||||
|
$1.Empty? contractCreationNotSupported,
|
||||||
|
$1.Empty? unsupportedTransactionType,
|
||||||
|
NoMatchingGrantError? noMatchingGrant,
|
||||||
|
PolicyViolationsError? policyViolations,
|
||||||
|
}) {
|
||||||
|
final result = create();
|
||||||
|
if (contractCreationNotSupported != null)
|
||||||
|
result.contractCreationNotSupported = contractCreationNotSupported;
|
||||||
|
if (unsupportedTransactionType != null)
|
||||||
|
result.unsupportedTransactionType = unsupportedTransactionType;
|
||||||
|
if (noMatchingGrant != null) result.noMatchingGrant = noMatchingGrant;
|
||||||
|
if (policyViolations != null) result.policyViolations = policyViolations;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
TransactionEvalError._();
|
||||||
|
|
||||||
|
factory TransactionEvalError.fromBuffer($core.List<$core.int> data,
|
||||||
|
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
||||||
|
create()..mergeFromBuffer(data, registry);
|
||||||
|
factory TransactionEvalError.fromJson($core.String json,
|
||||||
|
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
||||||
|
create()..mergeFromJson(json, registry);
|
||||||
|
|
||||||
|
static const $core.Map<$core.int, TransactionEvalError_Kind>
|
||||||
|
_TransactionEvalError_KindByTag = {
|
||||||
|
1: TransactionEvalError_Kind.contractCreationNotSupported,
|
||||||
|
2: TransactionEvalError_Kind.unsupportedTransactionType,
|
||||||
|
3: TransactionEvalError_Kind.noMatchingGrant,
|
||||||
|
4: TransactionEvalError_Kind.policyViolations,
|
||||||
|
0: TransactionEvalError_Kind.notSet
|
||||||
|
};
|
||||||
|
static final $pb.BuilderInfo _i = $pb.BuilderInfo(
|
||||||
|
_omitMessageNames ? '' : 'TransactionEvalError',
|
||||||
|
package: const $pb.PackageName(_omitMessageNames ? '' : 'arbiter.evm'),
|
||||||
|
createEmptyInstance: create)
|
||||||
|
..oo(0, [1, 2, 3, 4])
|
||||||
|
..aOM<$1.Empty>(1, _omitFieldNames ? '' : 'contractCreationNotSupported',
|
||||||
|
subBuilder: $1.Empty.create)
|
||||||
|
..aOM<$1.Empty>(2, _omitFieldNames ? '' : 'unsupportedTransactionType',
|
||||||
|
subBuilder: $1.Empty.create)
|
||||||
|
..aOM<NoMatchingGrantError>(3, _omitFieldNames ? '' : 'noMatchingGrant',
|
||||||
|
subBuilder: NoMatchingGrantError.create)
|
||||||
|
..aOM<PolicyViolationsError>(4, _omitFieldNames ? '' : 'policyViolations',
|
||||||
|
subBuilder: PolicyViolationsError.create)
|
||||||
|
..hasRequiredFields = false;
|
||||||
|
|
||||||
|
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
||||||
|
TransactionEvalError clone() => deepCopy();
|
||||||
|
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
||||||
|
TransactionEvalError copyWith(void Function(TransactionEvalError) updates) =>
|
||||||
|
super.copyWith((message) => updates(message as TransactionEvalError))
|
||||||
|
as TransactionEvalError;
|
||||||
|
|
||||||
|
@$core.override
|
||||||
|
$pb.BuilderInfo get info_ => _i;
|
||||||
|
|
||||||
|
@$core.pragma('dart2js:noInline')
|
||||||
|
static TransactionEvalError create() => TransactionEvalError._();
|
||||||
|
@$core.override
|
||||||
|
TransactionEvalError createEmptyInstance() => create();
|
||||||
|
@$core.pragma('dart2js:noInline')
|
||||||
|
static TransactionEvalError getDefault() => _defaultInstance ??=
|
||||||
|
$pb.GeneratedMessage.$_defaultFor<TransactionEvalError>(create);
|
||||||
|
static TransactionEvalError? _defaultInstance;
|
||||||
|
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
@$pb.TagNumber(2)
|
||||||
|
@$pb.TagNumber(3)
|
||||||
|
@$pb.TagNumber(4)
|
||||||
|
TransactionEvalError_Kind whichKind() =>
|
||||||
|
_TransactionEvalError_KindByTag[$_whichOneof(0)]!;
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
@$pb.TagNumber(2)
|
||||||
|
@$pb.TagNumber(3)
|
||||||
|
@$pb.TagNumber(4)
|
||||||
|
void clearKind() => $_clearField($_whichOneof(0));
|
||||||
|
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
$1.Empty get contractCreationNotSupported => $_getN(0);
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
set contractCreationNotSupported($1.Empty value) => $_setField(1, value);
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
$core.bool hasContractCreationNotSupported() => $_has(0);
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
void clearContractCreationNotSupported() => $_clearField(1);
|
||||||
|
@$pb.TagNumber(1)
|
||||||
|
$1.Empty ensureContractCreationNotSupported() => $_ensure(0);
|
||||||
|
|
||||||
|
@$pb.TagNumber(2)
|
||||||
|
$1.Empty get unsupportedTransactionType => $_getN(1);
|
||||||
|
@$pb.TagNumber(2)
|
||||||
|
set unsupportedTransactionType($1.Empty value) => $_setField(2, value);
|
||||||
|
@$pb.TagNumber(2)
|
||||||
|
$core.bool hasUnsupportedTransactionType() => $_has(1);
|
||||||
|
@$pb.TagNumber(2)
|
||||||
|
void clearUnsupportedTransactionType() => $_clearField(2);
|
||||||
|
@$pb.TagNumber(2)
|
||||||
|
$1.Empty ensureUnsupportedTransactionType() => $_ensure(1);
|
||||||
|
|
||||||
|
@$pb.TagNumber(3)
|
||||||
|
NoMatchingGrantError get noMatchingGrant => $_getN(2);
|
||||||
|
@$pb.TagNumber(3)
|
||||||
|
set noMatchingGrant(NoMatchingGrantError value) => $_setField(3, value);
|
||||||
|
@$pb.TagNumber(3)
|
||||||
|
$core.bool hasNoMatchingGrant() => $_has(2);
|
||||||
|
@$pb.TagNumber(3)
|
||||||
|
void clearNoMatchingGrant() => $_clearField(3);
|
||||||
|
@$pb.TagNumber(3)
|
||||||
|
NoMatchingGrantError ensureNoMatchingGrant() => $_ensure(2);
|
||||||
|
|
||||||
|
@$pb.TagNumber(4)
|
||||||
|
PolicyViolationsError get policyViolations => $_getN(3);
|
||||||
|
@$pb.TagNumber(4)
|
||||||
|
set policyViolations(PolicyViolationsError value) => $_setField(4, value);
|
||||||
|
@$pb.TagNumber(4)
|
||||||
|
$core.bool hasPolicyViolations() => $_has(3);
|
||||||
|
@$pb.TagNumber(4)
|
||||||
|
void clearPolicyViolations() => $_clearField(4);
|
||||||
|
@$pb.TagNumber(4)
|
||||||
|
PolicyViolationsError ensurePolicyViolations() => $_ensure(3);
|
||||||
|
}
|
||||||
|
|
||||||
/// --- UserAgent grant management ---
|
/// --- UserAgent grant management ---
|
||||||
class EvmGrantCreateRequest extends $pb.GeneratedMessage {
|
class EvmGrantCreateRequest extends $pb.GeneratedMessage {
|
||||||
factory EvmGrantCreateRequest({
|
factory EvmGrantCreateRequest({
|
||||||
@@ -1479,7 +2297,7 @@ enum EvmSignTransactionResponse_Result { signature, evalError, error, notSet }
|
|||||||
class EvmSignTransactionResponse extends $pb.GeneratedMessage {
|
class EvmSignTransactionResponse extends $pb.GeneratedMessage {
|
||||||
factory EvmSignTransactionResponse({
|
factory EvmSignTransactionResponse({
|
||||||
$core.List<$core.int>? signature,
|
$core.List<$core.int>? signature,
|
||||||
$2.TransactionEvalError? evalError,
|
TransactionEvalError? evalError,
|
||||||
EvmError? error,
|
EvmError? error,
|
||||||
}) {
|
}) {
|
||||||
final result = create();
|
final result = create();
|
||||||
@@ -1512,8 +2330,8 @@ class EvmSignTransactionResponse extends $pb.GeneratedMessage {
|
|||||||
..oo(0, [1, 2, 3])
|
..oo(0, [1, 2, 3])
|
||||||
..a<$core.List<$core.int>>(
|
..a<$core.List<$core.int>>(
|
||||||
1, _omitFieldNames ? '' : 'signature', $pb.PbFieldType.OY)
|
1, _omitFieldNames ? '' : 'signature', $pb.PbFieldType.OY)
|
||||||
..aOM<$2.TransactionEvalError>(2, _omitFieldNames ? '' : 'evalError',
|
..aOM<TransactionEvalError>(2, _omitFieldNames ? '' : 'evalError',
|
||||||
subBuilder: $2.TransactionEvalError.create)
|
subBuilder: TransactionEvalError.create)
|
||||||
..aE<EvmError>(3, _omitFieldNames ? '' : 'error',
|
..aE<EvmError>(3, _omitFieldNames ? '' : 'error',
|
||||||
enumValues: EvmError.values)
|
enumValues: EvmError.values)
|
||||||
..hasRequiredFields = false;
|
..hasRequiredFields = false;
|
||||||
@@ -1559,15 +2377,15 @@ class EvmSignTransactionResponse extends $pb.GeneratedMessage {
|
|||||||
void clearSignature() => $_clearField(1);
|
void clearSignature() => $_clearField(1);
|
||||||
|
|
||||||
@$pb.TagNumber(2)
|
@$pb.TagNumber(2)
|
||||||
$2.TransactionEvalError get evalError => $_getN(1);
|
TransactionEvalError get evalError => $_getN(1);
|
||||||
@$pb.TagNumber(2)
|
@$pb.TagNumber(2)
|
||||||
set evalError($2.TransactionEvalError value) => $_setField(2, value);
|
set evalError(TransactionEvalError value) => $_setField(2, value);
|
||||||
@$pb.TagNumber(2)
|
@$pb.TagNumber(2)
|
||||||
$core.bool hasEvalError() => $_has(1);
|
$core.bool hasEvalError() => $_has(1);
|
||||||
@$pb.TagNumber(2)
|
@$pb.TagNumber(2)
|
||||||
void clearEvalError() => $_clearField(2);
|
void clearEvalError() => $_clearField(2);
|
||||||
@$pb.TagNumber(2)
|
@$pb.TagNumber(2)
|
||||||
$2.TransactionEvalError ensureEvalError() => $_ensure(1);
|
TransactionEvalError ensureEvalError() => $_ensure(1);
|
||||||
|
|
||||||
@$pb.TagNumber(3)
|
@$pb.TagNumber(3)
|
||||||
EvmError get error => $_getN(2);
|
EvmError get error => $_getN(2);
|
||||||
@@ -1654,8 +2472,8 @@ enum EvmAnalyzeTransactionResponse_Result { meaning, evalError, error, notSet }
|
|||||||
|
|
||||||
class EvmAnalyzeTransactionResponse extends $pb.GeneratedMessage {
|
class EvmAnalyzeTransactionResponse extends $pb.GeneratedMessage {
|
||||||
factory EvmAnalyzeTransactionResponse({
|
factory EvmAnalyzeTransactionResponse({
|
||||||
$2.SpecificMeaning? meaning,
|
SpecificMeaning? meaning,
|
||||||
$2.TransactionEvalError? evalError,
|
TransactionEvalError? evalError,
|
||||||
EvmError? error,
|
EvmError? error,
|
||||||
}) {
|
}) {
|
||||||
final result = create();
|
final result = create();
|
||||||
@@ -1686,10 +2504,10 @@ class EvmAnalyzeTransactionResponse extends $pb.GeneratedMessage {
|
|||||||
package: const $pb.PackageName(_omitMessageNames ? '' : 'arbiter.evm'),
|
package: const $pb.PackageName(_omitMessageNames ? '' : 'arbiter.evm'),
|
||||||
createEmptyInstance: create)
|
createEmptyInstance: create)
|
||||||
..oo(0, [1, 2, 3])
|
..oo(0, [1, 2, 3])
|
||||||
..aOM<$2.SpecificMeaning>(1, _omitFieldNames ? '' : 'meaning',
|
..aOM<SpecificMeaning>(1, _omitFieldNames ? '' : 'meaning',
|
||||||
subBuilder: $2.SpecificMeaning.create)
|
subBuilder: SpecificMeaning.create)
|
||||||
..aOM<$2.TransactionEvalError>(2, _omitFieldNames ? '' : 'evalError',
|
..aOM<TransactionEvalError>(2, _omitFieldNames ? '' : 'evalError',
|
||||||
subBuilder: $2.TransactionEvalError.create)
|
subBuilder: TransactionEvalError.create)
|
||||||
..aE<EvmError>(3, _omitFieldNames ? '' : 'error',
|
..aE<EvmError>(3, _omitFieldNames ? '' : 'error',
|
||||||
enumValues: EvmError.values)
|
enumValues: EvmError.values)
|
||||||
..hasRequiredFields = false;
|
..hasRequiredFields = false;
|
||||||
@@ -1727,26 +2545,26 @@ class EvmAnalyzeTransactionResponse extends $pb.GeneratedMessage {
|
|||||||
void clearResult() => $_clearField($_whichOneof(0));
|
void clearResult() => $_clearField($_whichOneof(0));
|
||||||
|
|
||||||
@$pb.TagNumber(1)
|
@$pb.TagNumber(1)
|
||||||
$2.SpecificMeaning get meaning => $_getN(0);
|
SpecificMeaning get meaning => $_getN(0);
|
||||||
@$pb.TagNumber(1)
|
@$pb.TagNumber(1)
|
||||||
set meaning($2.SpecificMeaning value) => $_setField(1, value);
|
set meaning(SpecificMeaning value) => $_setField(1, value);
|
||||||
@$pb.TagNumber(1)
|
@$pb.TagNumber(1)
|
||||||
$core.bool hasMeaning() => $_has(0);
|
$core.bool hasMeaning() => $_has(0);
|
||||||
@$pb.TagNumber(1)
|
@$pb.TagNumber(1)
|
||||||
void clearMeaning() => $_clearField(1);
|
void clearMeaning() => $_clearField(1);
|
||||||
@$pb.TagNumber(1)
|
@$pb.TagNumber(1)
|
||||||
$2.SpecificMeaning ensureMeaning() => $_ensure(0);
|
SpecificMeaning ensureMeaning() => $_ensure(0);
|
||||||
|
|
||||||
@$pb.TagNumber(2)
|
@$pb.TagNumber(2)
|
||||||
$2.TransactionEvalError get evalError => $_getN(1);
|
TransactionEvalError get evalError => $_getN(1);
|
||||||
@$pb.TagNumber(2)
|
@$pb.TagNumber(2)
|
||||||
set evalError($2.TransactionEvalError value) => $_setField(2, value);
|
set evalError(TransactionEvalError value) => $_setField(2, value);
|
||||||
@$pb.TagNumber(2)
|
@$pb.TagNumber(2)
|
||||||
$core.bool hasEvalError() => $_has(1);
|
$core.bool hasEvalError() => $_has(1);
|
||||||
@$pb.TagNumber(2)
|
@$pb.TagNumber(2)
|
||||||
void clearEvalError() => $_clearField(2);
|
void clearEvalError() => $_clearField(2);
|
||||||
@$pb.TagNumber(2)
|
@$pb.TagNumber(2)
|
||||||
$2.TransactionEvalError ensureEvalError() => $_ensure(1);
|
TransactionEvalError ensureEvalError() => $_ensure(1);
|
||||||
|
|
||||||
@$pb.TagNumber(3)
|
@$pb.TagNumber(3)
|
||||||
EvmError get error => $_getN(2);
|
EvmError get error => $_getN(2);
|
||||||
|
|||||||
@@ -327,6 +327,308 @@ final $typed_data.Uint8List specificGrantDescriptor = $convert.base64Decode(
|
|||||||
'AiABKAsyIi5hcmJpdGVyLmV2bS5Ub2tlblRyYW5zZmVyU2V0dGluZ3NIAFINdG9rZW5UcmFuc2'
|
'AiABKAsyIi5hcmJpdGVyLmV2bS5Ub2tlblRyYW5zZmVyU2V0dGluZ3NIAFINdG9rZW5UcmFuc2'
|
||||||
'ZlckIHCgVncmFudA==');
|
'ZlckIHCgVncmFudA==');
|
||||||
|
|
||||||
|
@$core.Deprecated('Use etherTransferMeaningDescriptor instead')
|
||||||
|
const EtherTransferMeaning$json = {
|
||||||
|
'1': 'EtherTransferMeaning',
|
||||||
|
'2': [
|
||||||
|
{'1': 'to', '3': 1, '4': 1, '5': 12, '10': 'to'},
|
||||||
|
{'1': 'value', '3': 2, '4': 1, '5': 12, '10': 'value'},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Descriptor for `EtherTransferMeaning`. Decode as a `google.protobuf.DescriptorProto`.
|
||||||
|
final $typed_data.Uint8List etherTransferMeaningDescriptor = $convert.base64Decode(
|
||||||
|
'ChRFdGhlclRyYW5zZmVyTWVhbmluZxIOCgJ0bxgBIAEoDFICdG8SFAoFdmFsdWUYAiABKAxSBX'
|
||||||
|
'ZhbHVl');
|
||||||
|
|
||||||
|
@$core.Deprecated('Use tokenInfoDescriptor instead')
|
||||||
|
const TokenInfo$json = {
|
||||||
|
'1': 'TokenInfo',
|
||||||
|
'2': [
|
||||||
|
{'1': 'symbol', '3': 1, '4': 1, '5': 9, '10': 'symbol'},
|
||||||
|
{'1': 'address', '3': 2, '4': 1, '5': 12, '10': 'address'},
|
||||||
|
{'1': 'chain_id', '3': 3, '4': 1, '5': 4, '10': 'chainId'},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Descriptor for `TokenInfo`. Decode as a `google.protobuf.DescriptorProto`.
|
||||||
|
final $typed_data.Uint8List tokenInfoDescriptor = $convert.base64Decode(
|
||||||
|
'CglUb2tlbkluZm8SFgoGc3ltYm9sGAEgASgJUgZzeW1ib2wSGAoHYWRkcmVzcxgCIAEoDFIHYW'
|
||||||
|
'RkcmVzcxIZCghjaGFpbl9pZBgDIAEoBFIHY2hhaW5JZA==');
|
||||||
|
|
||||||
|
@$core.Deprecated('Use tokenTransferMeaningDescriptor instead')
|
||||||
|
const TokenTransferMeaning$json = {
|
||||||
|
'1': 'TokenTransferMeaning',
|
||||||
|
'2': [
|
||||||
|
{
|
||||||
|
'1': 'token',
|
||||||
|
'3': 1,
|
||||||
|
'4': 1,
|
||||||
|
'5': 11,
|
||||||
|
'6': '.arbiter.evm.TokenInfo',
|
||||||
|
'10': 'token'
|
||||||
|
},
|
||||||
|
{'1': 'to', '3': 2, '4': 1, '5': 12, '10': 'to'},
|
||||||
|
{'1': 'value', '3': 3, '4': 1, '5': 12, '10': 'value'},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Descriptor for `TokenTransferMeaning`. Decode as a `google.protobuf.DescriptorProto`.
|
||||||
|
final $typed_data.Uint8List tokenTransferMeaningDescriptor = $convert.base64Decode(
|
||||||
|
'ChRUb2tlblRyYW5zZmVyTWVhbmluZxIsCgV0b2tlbhgBIAEoCzIWLmFyYml0ZXIuZXZtLlRva2'
|
||||||
|
'VuSW5mb1IFdG9rZW4SDgoCdG8YAiABKAxSAnRvEhQKBXZhbHVlGAMgASgMUgV2YWx1ZQ==');
|
||||||
|
|
||||||
|
@$core.Deprecated('Use specificMeaningDescriptor instead')
|
||||||
|
const SpecificMeaning$json = {
|
||||||
|
'1': 'SpecificMeaning',
|
||||||
|
'2': [
|
||||||
|
{
|
||||||
|
'1': 'ether_transfer',
|
||||||
|
'3': 1,
|
||||||
|
'4': 1,
|
||||||
|
'5': 11,
|
||||||
|
'6': '.arbiter.evm.EtherTransferMeaning',
|
||||||
|
'9': 0,
|
||||||
|
'10': 'etherTransfer'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'1': 'token_transfer',
|
||||||
|
'3': 2,
|
||||||
|
'4': 1,
|
||||||
|
'5': 11,
|
||||||
|
'6': '.arbiter.evm.TokenTransferMeaning',
|
||||||
|
'9': 0,
|
||||||
|
'10': 'tokenTransfer'
|
||||||
|
},
|
||||||
|
],
|
||||||
|
'8': [
|
||||||
|
{'1': 'meaning'},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Descriptor for `SpecificMeaning`. Decode as a `google.protobuf.DescriptorProto`.
|
||||||
|
final $typed_data.Uint8List specificMeaningDescriptor = $convert.base64Decode(
|
||||||
|
'Cg9TcGVjaWZpY01lYW5pbmcSSgoOZXRoZXJfdHJhbnNmZXIYASABKAsyIS5hcmJpdGVyLmV2bS'
|
||||||
|
'5FdGhlclRyYW5zZmVyTWVhbmluZ0gAUg1ldGhlclRyYW5zZmVyEkoKDnRva2VuX3RyYW5zZmVy'
|
||||||
|
'GAIgASgLMiEuYXJiaXRlci5ldm0uVG9rZW5UcmFuc2Zlck1lYW5pbmdIAFINdG9rZW5UcmFuc2'
|
||||||
|
'ZlckIJCgdtZWFuaW5n');
|
||||||
|
|
||||||
|
@$core.Deprecated('Use gasLimitExceededViolationDescriptor instead')
|
||||||
|
const GasLimitExceededViolation$json = {
|
||||||
|
'1': 'GasLimitExceededViolation',
|
||||||
|
'2': [
|
||||||
|
{
|
||||||
|
'1': 'max_gas_fee_per_gas',
|
||||||
|
'3': 1,
|
||||||
|
'4': 1,
|
||||||
|
'5': 12,
|
||||||
|
'9': 0,
|
||||||
|
'10': 'maxGasFeePerGas',
|
||||||
|
'17': true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'1': 'max_priority_fee_per_gas',
|
||||||
|
'3': 2,
|
||||||
|
'4': 1,
|
||||||
|
'5': 12,
|
||||||
|
'9': 1,
|
||||||
|
'10': 'maxPriorityFeePerGas',
|
||||||
|
'17': true
|
||||||
|
},
|
||||||
|
],
|
||||||
|
'8': [
|
||||||
|
{'1': '_max_gas_fee_per_gas'},
|
||||||
|
{'1': '_max_priority_fee_per_gas'},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Descriptor for `GasLimitExceededViolation`. Decode as a `google.protobuf.DescriptorProto`.
|
||||||
|
final $typed_data.Uint8List gasLimitExceededViolationDescriptor = $convert.base64Decode(
|
||||||
|
'ChlHYXNMaW1pdEV4Y2VlZGVkVmlvbGF0aW9uEjEKE21heF9nYXNfZmVlX3Blcl9nYXMYASABKA'
|
||||||
|
'xIAFIPbWF4R2FzRmVlUGVyR2FziAEBEjsKGG1heF9wcmlvcml0eV9mZWVfcGVyX2dhcxgCIAEo'
|
||||||
|
'DEgBUhRtYXhQcmlvcml0eUZlZVBlckdhc4gBAUIWChRfbWF4X2dhc19mZWVfcGVyX2dhc0IbCh'
|
||||||
|
'lfbWF4X3ByaW9yaXR5X2ZlZV9wZXJfZ2Fz');
|
||||||
|
|
||||||
|
@$core.Deprecated('Use evalViolationDescriptor instead')
|
||||||
|
const EvalViolation$json = {
|
||||||
|
'1': 'EvalViolation',
|
||||||
|
'2': [
|
||||||
|
{
|
||||||
|
'1': 'invalid_target',
|
||||||
|
'3': 1,
|
||||||
|
'4': 1,
|
||||||
|
'5': 12,
|
||||||
|
'9': 0,
|
||||||
|
'10': 'invalidTarget'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'1': 'gas_limit_exceeded',
|
||||||
|
'3': 2,
|
||||||
|
'4': 1,
|
||||||
|
'5': 11,
|
||||||
|
'6': '.arbiter.evm.GasLimitExceededViolation',
|
||||||
|
'9': 0,
|
||||||
|
'10': 'gasLimitExceeded'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'1': 'rate_limit_exceeded',
|
||||||
|
'3': 3,
|
||||||
|
'4': 1,
|
||||||
|
'5': 11,
|
||||||
|
'6': '.google.protobuf.Empty',
|
||||||
|
'9': 0,
|
||||||
|
'10': 'rateLimitExceeded'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'1': 'volumetric_limit_exceeded',
|
||||||
|
'3': 4,
|
||||||
|
'4': 1,
|
||||||
|
'5': 11,
|
||||||
|
'6': '.google.protobuf.Empty',
|
||||||
|
'9': 0,
|
||||||
|
'10': 'volumetricLimitExceeded'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'1': 'invalid_time',
|
||||||
|
'3': 5,
|
||||||
|
'4': 1,
|
||||||
|
'5': 11,
|
||||||
|
'6': '.google.protobuf.Empty',
|
||||||
|
'9': 0,
|
||||||
|
'10': 'invalidTime'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'1': 'invalid_transaction_type',
|
||||||
|
'3': 6,
|
||||||
|
'4': 1,
|
||||||
|
'5': 11,
|
||||||
|
'6': '.google.protobuf.Empty',
|
||||||
|
'9': 0,
|
||||||
|
'10': 'invalidTransactionType'
|
||||||
|
},
|
||||||
|
],
|
||||||
|
'8': [
|
||||||
|
{'1': 'kind'},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Descriptor for `EvalViolation`. Decode as a `google.protobuf.DescriptorProto`.
|
||||||
|
final $typed_data.Uint8List evalViolationDescriptor = $convert.base64Decode(
|
||||||
|
'Cg1FdmFsVmlvbGF0aW9uEicKDmludmFsaWRfdGFyZ2V0GAEgASgMSABSDWludmFsaWRUYXJnZX'
|
||||||
|
'QSVgoSZ2FzX2xpbWl0X2V4Y2VlZGVkGAIgASgLMiYuYXJiaXRlci5ldm0uR2FzTGltaXRFeGNl'
|
||||||
|
'ZWRlZFZpb2xhdGlvbkgAUhBnYXNMaW1pdEV4Y2VlZGVkEkgKE3JhdGVfbGltaXRfZXhjZWVkZW'
|
||||||
|
'QYAyABKAsyFi5nb29nbGUucHJvdG9idWYuRW1wdHlIAFIRcmF0ZUxpbWl0RXhjZWVkZWQSVAoZ'
|
||||||
|
'dm9sdW1ldHJpY19saW1pdF9leGNlZWRlZBgEIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eU'
|
||||||
|
'gAUhd2b2x1bWV0cmljTGltaXRFeGNlZWRlZBI7CgxpbnZhbGlkX3RpbWUYBSABKAsyFi5nb29n'
|
||||||
|
'bGUucHJvdG9idWYuRW1wdHlIAFILaW52YWxpZFRpbWUSUgoYaW52YWxpZF90cmFuc2FjdGlvbl'
|
||||||
|
'90eXBlGAYgASgLMhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5SABSFmludmFsaWRUcmFuc2FjdGlv'
|
||||||
|
'blR5cGVCBgoEa2luZA==');
|
||||||
|
|
||||||
|
@$core.Deprecated('Use noMatchingGrantErrorDescriptor instead')
|
||||||
|
const NoMatchingGrantError$json = {
|
||||||
|
'1': 'NoMatchingGrantError',
|
||||||
|
'2': [
|
||||||
|
{
|
||||||
|
'1': 'meaning',
|
||||||
|
'3': 1,
|
||||||
|
'4': 1,
|
||||||
|
'5': 11,
|
||||||
|
'6': '.arbiter.evm.SpecificMeaning',
|
||||||
|
'10': 'meaning'
|
||||||
|
},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Descriptor for `NoMatchingGrantError`. Decode as a `google.protobuf.DescriptorProto`.
|
||||||
|
final $typed_data.Uint8List noMatchingGrantErrorDescriptor = $convert.base64Decode(
|
||||||
|
'ChROb01hdGNoaW5nR3JhbnRFcnJvchI2CgdtZWFuaW5nGAEgASgLMhwuYXJiaXRlci5ldm0uU3'
|
||||||
|
'BlY2lmaWNNZWFuaW5nUgdtZWFuaW5n');
|
||||||
|
|
||||||
|
@$core.Deprecated('Use policyViolationsErrorDescriptor instead')
|
||||||
|
const PolicyViolationsError$json = {
|
||||||
|
'1': 'PolicyViolationsError',
|
||||||
|
'2': [
|
||||||
|
{
|
||||||
|
'1': 'meaning',
|
||||||
|
'3': 1,
|
||||||
|
'4': 1,
|
||||||
|
'5': 11,
|
||||||
|
'6': '.arbiter.evm.SpecificMeaning',
|
||||||
|
'10': 'meaning'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'1': 'violations',
|
||||||
|
'3': 2,
|
||||||
|
'4': 3,
|
||||||
|
'5': 11,
|
||||||
|
'6': '.arbiter.evm.EvalViolation',
|
||||||
|
'10': 'violations'
|
||||||
|
},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Descriptor for `PolicyViolationsError`. Decode as a `google.protobuf.DescriptorProto`.
|
||||||
|
final $typed_data.Uint8List policyViolationsErrorDescriptor = $convert.base64Decode(
|
||||||
|
'ChVQb2xpY3lWaW9sYXRpb25zRXJyb3ISNgoHbWVhbmluZxgBIAEoCzIcLmFyYml0ZXIuZXZtLl'
|
||||||
|
'NwZWNpZmljTWVhbmluZ1IHbWVhbmluZxI6Cgp2aW9sYXRpb25zGAIgAygLMhouYXJiaXRlci5l'
|
||||||
|
'dm0uRXZhbFZpb2xhdGlvblIKdmlvbGF0aW9ucw==');
|
||||||
|
|
||||||
|
@$core.Deprecated('Use transactionEvalErrorDescriptor instead')
|
||||||
|
const TransactionEvalError$json = {
|
||||||
|
'1': 'TransactionEvalError',
|
||||||
|
'2': [
|
||||||
|
{
|
||||||
|
'1': 'contract_creation_not_supported',
|
||||||
|
'3': 1,
|
||||||
|
'4': 1,
|
||||||
|
'5': 11,
|
||||||
|
'6': '.google.protobuf.Empty',
|
||||||
|
'9': 0,
|
||||||
|
'10': 'contractCreationNotSupported'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'1': 'unsupported_transaction_type',
|
||||||
|
'3': 2,
|
||||||
|
'4': 1,
|
||||||
|
'5': 11,
|
||||||
|
'6': '.google.protobuf.Empty',
|
||||||
|
'9': 0,
|
||||||
|
'10': 'unsupportedTransactionType'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'1': 'no_matching_grant',
|
||||||
|
'3': 3,
|
||||||
|
'4': 1,
|
||||||
|
'5': 11,
|
||||||
|
'6': '.arbiter.evm.NoMatchingGrantError',
|
||||||
|
'9': 0,
|
||||||
|
'10': 'noMatchingGrant'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'1': 'policy_violations',
|
||||||
|
'3': 4,
|
||||||
|
'4': 1,
|
||||||
|
'5': 11,
|
||||||
|
'6': '.arbiter.evm.PolicyViolationsError',
|
||||||
|
'9': 0,
|
||||||
|
'10': 'policyViolations'
|
||||||
|
},
|
||||||
|
],
|
||||||
|
'8': [
|
||||||
|
{'1': 'kind'},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Descriptor for `TransactionEvalError`. Decode as a `google.protobuf.DescriptorProto`.
|
||||||
|
final $typed_data.Uint8List transactionEvalErrorDescriptor = $convert.base64Decode(
|
||||||
|
'ChRUcmFuc2FjdGlvbkV2YWxFcnJvchJfCh9jb250cmFjdF9jcmVhdGlvbl9ub3Rfc3VwcG9ydG'
|
||||||
|
'VkGAEgASgLMhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5SABSHGNvbnRyYWN0Q3JlYXRpb25Ob3RT'
|
||||||
|
'dXBwb3J0ZWQSWgocdW5zdXBwb3J0ZWRfdHJhbnNhY3Rpb25fdHlwZRgCIAEoCzIWLmdvb2dsZS'
|
||||||
|
'5wcm90b2J1Zi5FbXB0eUgAUhp1bnN1cHBvcnRlZFRyYW5zYWN0aW9uVHlwZRJPChFub19tYXRj'
|
||||||
|
'aGluZ19ncmFudBgDIAEoCzIhLmFyYml0ZXIuZXZtLk5vTWF0Y2hpbmdHcmFudEVycm9ySABSD2'
|
||||||
|
'5vTWF0Y2hpbmdHcmFudBJRChFwb2xpY3lfdmlvbGF0aW9ucxgEIAEoCzIiLmFyYml0ZXIuZXZt'
|
||||||
|
'LlBvbGljeVZpb2xhdGlvbnNFcnJvckgAUhBwb2xpY3lWaW9sYXRpb25zQgYKBGtpbmQ=');
|
||||||
|
|
||||||
@$core.Deprecated('Use evmGrantCreateRequestDescriptor instead')
|
@$core.Deprecated('Use evmGrantCreateRequestDescriptor instead')
|
||||||
const EvmGrantCreateRequest$json = {
|
const EvmGrantCreateRequest$json = {
|
||||||
'1': 'EvmGrantCreateRequest',
|
'1': 'EvmGrantCreateRequest',
|
||||||
@@ -563,7 +865,7 @@ const EvmSignTransactionResponse$json = {
|
|||||||
'3': 2,
|
'3': 2,
|
||||||
'4': 1,
|
'4': 1,
|
||||||
'5': 11,
|
'5': 11,
|
||||||
'6': '.arbiter.shared.evm.TransactionEvalError',
|
'6': '.arbiter.evm.TransactionEvalError',
|
||||||
'9': 0,
|
'9': 0,
|
||||||
'10': 'evalError'
|
'10': 'evalError'
|
||||||
},
|
},
|
||||||
@@ -585,9 +887,9 @@ const EvmSignTransactionResponse$json = {
|
|||||||
/// Descriptor for `EvmSignTransactionResponse`. Decode as a `google.protobuf.DescriptorProto`.
|
/// Descriptor for `EvmSignTransactionResponse`. Decode as a `google.protobuf.DescriptorProto`.
|
||||||
final $typed_data.Uint8List evmSignTransactionResponseDescriptor = $convert.base64Decode(
|
final $typed_data.Uint8List evmSignTransactionResponseDescriptor = $convert.base64Decode(
|
||||||
'ChpFdm1TaWduVHJhbnNhY3Rpb25SZXNwb25zZRIeCglzaWduYXR1cmUYASABKAxIAFIJc2lnbm'
|
'ChpFdm1TaWduVHJhbnNhY3Rpb25SZXNwb25zZRIeCglzaWduYXR1cmUYASABKAxIAFIJc2lnbm'
|
||||||
'F0dXJlEkkKCmV2YWxfZXJyb3IYAiABKAsyKC5hcmJpdGVyLnNoYXJlZC5ldm0uVHJhbnNhY3Rp'
|
'F0dXJlEkIKCmV2YWxfZXJyb3IYAiABKAsyIS5hcmJpdGVyLmV2bS5UcmFuc2FjdGlvbkV2YWxF'
|
||||||
'b25FdmFsRXJyb3JIAFIJZXZhbEVycm9yEi0KBWVycm9yGAMgASgOMhUuYXJiaXRlci5ldm0uRX'
|
'cnJvckgAUglldmFsRXJyb3ISLQoFZXJyb3IYAyABKA4yFS5hcmJpdGVyLmV2bS5Fdm1FcnJvck'
|
||||||
'ZtRXJyb3JIAFIFZXJyb3JCCAoGcmVzdWx0');
|
'gAUgVlcnJvckIICgZyZXN1bHQ=');
|
||||||
|
|
||||||
@$core.Deprecated('Use evmAnalyzeTransactionRequestDescriptor instead')
|
@$core.Deprecated('Use evmAnalyzeTransactionRequestDescriptor instead')
|
||||||
const EvmAnalyzeTransactionRequest$json = {
|
const EvmAnalyzeTransactionRequest$json = {
|
||||||
@@ -613,7 +915,7 @@ const EvmAnalyzeTransactionResponse$json = {
|
|||||||
'3': 1,
|
'3': 1,
|
||||||
'4': 1,
|
'4': 1,
|
||||||
'5': 11,
|
'5': 11,
|
||||||
'6': '.arbiter.shared.evm.SpecificMeaning',
|
'6': '.arbiter.evm.SpecificMeaning',
|
||||||
'9': 0,
|
'9': 0,
|
||||||
'10': 'meaning'
|
'10': 'meaning'
|
||||||
},
|
},
|
||||||
@@ -622,7 +924,7 @@ const EvmAnalyzeTransactionResponse$json = {
|
|||||||
'3': 2,
|
'3': 2,
|
||||||
'4': 1,
|
'4': 1,
|
||||||
'5': 11,
|
'5': 11,
|
||||||
'6': '.arbiter.shared.evm.TransactionEvalError',
|
'6': '.arbiter.evm.TransactionEvalError',
|
||||||
'9': 0,
|
'9': 0,
|
||||||
'10': 'evalError'
|
'10': 'evalError'
|
||||||
},
|
},
|
||||||
@@ -643,8 +945,7 @@ const EvmAnalyzeTransactionResponse$json = {
|
|||||||
|
|
||||||
/// Descriptor for `EvmAnalyzeTransactionResponse`. Decode as a `google.protobuf.DescriptorProto`.
|
/// Descriptor for `EvmAnalyzeTransactionResponse`. Decode as a `google.protobuf.DescriptorProto`.
|
||||||
final $typed_data.Uint8List evmAnalyzeTransactionResponseDescriptor = $convert.base64Decode(
|
final $typed_data.Uint8List evmAnalyzeTransactionResponseDescriptor = $convert.base64Decode(
|
||||||
'Ch1Fdm1BbmFseXplVHJhbnNhY3Rpb25SZXNwb25zZRI/CgdtZWFuaW5nGAEgASgLMiMuYXJiaX'
|
'Ch1Fdm1BbmFseXplVHJhbnNhY3Rpb25SZXNwb25zZRI4CgdtZWFuaW5nGAEgASgLMhwuYXJiaX'
|
||||||
'Rlci5zaGFyZWQuZXZtLlNwZWNpZmljTWVhbmluZ0gAUgdtZWFuaW5nEkkKCmV2YWxfZXJyb3IY'
|
'Rlci5ldm0uU3BlY2lmaWNNZWFuaW5nSABSB21lYW5pbmcSQgoKZXZhbF9lcnJvchgCIAEoCzIh'
|
||||||
'AiABKAsyKC5hcmJpdGVyLnNoYXJlZC5ldm0uVHJhbnNhY3Rpb25FdmFsRXJyb3JIAFIJZXZhbE'
|
'LmFyYml0ZXIuZXZtLlRyYW5zYWN0aW9uRXZhbEVycm9ySABSCWV2YWxFcnJvchItCgVlcnJvch'
|
||||||
'Vycm9yEi0KBWVycm9yGAMgASgOMhUuYXJiaXRlci5ldm0uRXZtRXJyb3JIAFIFZXJyb3JCCAoG'
|
'gDIAEoDjIVLmFyYml0ZXIuZXZtLkV2bUVycm9ySABSBWVycm9yQggKBnJlc3VsdA==');
|
||||||
'cmVzdWx0');
|
|
||||||
|
|||||||
@@ -1,99 +0,0 @@
|
|||||||
// This is a generated file - do not edit.
|
|
||||||
//
|
|
||||||
// Generated from shared/client.proto.
|
|
||||||
|
|
||||||
// @dart = 3.3
|
|
||||||
|
|
||||||
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
|
|
||||||
// ignore_for_file: constant_identifier_names
|
|
||||||
// ignore_for_file: curly_braces_in_flow_control_structures
|
|
||||||
// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
|
|
||||||
// ignore_for_file: non_constant_identifier_names, prefer_relative_imports
|
|
||||||
|
|
||||||
import 'dart:core' as $core;
|
|
||||||
|
|
||||||
import 'package:protobuf/protobuf.dart' as $pb;
|
|
||||||
|
|
||||||
export 'package:protobuf/protobuf.dart' show GeneratedMessageGenericExtensions;
|
|
||||||
|
|
||||||
class ClientInfo extends $pb.GeneratedMessage {
|
|
||||||
factory ClientInfo({
|
|
||||||
$core.String? name,
|
|
||||||
$core.String? description,
|
|
||||||
$core.String? version,
|
|
||||||
}) {
|
|
||||||
final result = create();
|
|
||||||
if (name != null) result.name = name;
|
|
||||||
if (description != null) result.description = description;
|
|
||||||
if (version != null) result.version = version;
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
ClientInfo._();
|
|
||||||
|
|
||||||
factory ClientInfo.fromBuffer($core.List<$core.int> data,
|
|
||||||
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
|
||||||
create()..mergeFromBuffer(data, registry);
|
|
||||||
factory ClientInfo.fromJson($core.String json,
|
|
||||||
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
|
||||||
create()..mergeFromJson(json, registry);
|
|
||||||
|
|
||||||
static final $pb.BuilderInfo _i = $pb.BuilderInfo(
|
|
||||||
_omitMessageNames ? '' : 'ClientInfo',
|
|
||||||
package: const $pb.PackageName(_omitMessageNames ? '' : 'arbiter.shared'),
|
|
||||||
createEmptyInstance: create)
|
|
||||||
..aOS(1, _omitFieldNames ? '' : 'name')
|
|
||||||
..aOS(2, _omitFieldNames ? '' : 'description')
|
|
||||||
..aOS(3, _omitFieldNames ? '' : 'version')
|
|
||||||
..hasRequiredFields = false;
|
|
||||||
|
|
||||||
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
|
||||||
ClientInfo clone() => deepCopy();
|
|
||||||
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
|
||||||
ClientInfo copyWith(void Function(ClientInfo) updates) =>
|
|
||||||
super.copyWith((message) => updates(message as ClientInfo)) as ClientInfo;
|
|
||||||
|
|
||||||
@$core.override
|
|
||||||
$pb.BuilderInfo get info_ => _i;
|
|
||||||
|
|
||||||
@$core.pragma('dart2js:noInline')
|
|
||||||
static ClientInfo create() => ClientInfo._();
|
|
||||||
@$core.override
|
|
||||||
ClientInfo createEmptyInstance() => create();
|
|
||||||
@$core.pragma('dart2js:noInline')
|
|
||||||
static ClientInfo getDefault() => _defaultInstance ??=
|
|
||||||
$pb.GeneratedMessage.$_defaultFor<ClientInfo>(create);
|
|
||||||
static ClientInfo? _defaultInstance;
|
|
||||||
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
$core.String get name => $_getSZ(0);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
set name($core.String value) => $_setString(0, value);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
$core.bool hasName() => $_has(0);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
void clearName() => $_clearField(1);
|
|
||||||
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
$core.String get description => $_getSZ(1);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
set description($core.String value) => $_setString(1, value);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
$core.bool hasDescription() => $_has(1);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
void clearDescription() => $_clearField(2);
|
|
||||||
|
|
||||||
@$pb.TagNumber(3)
|
|
||||||
$core.String get version => $_getSZ(2);
|
|
||||||
@$pb.TagNumber(3)
|
|
||||||
set version($core.String value) => $_setString(2, value);
|
|
||||||
@$pb.TagNumber(3)
|
|
||||||
$core.bool hasVersion() => $_has(2);
|
|
||||||
@$pb.TagNumber(3)
|
|
||||||
void clearVersion() => $_clearField(3);
|
|
||||||
}
|
|
||||||
|
|
||||||
const $core.bool _omitFieldNames =
|
|
||||||
$core.bool.fromEnvironment('protobuf.omit_field_names');
|
|
||||||
const $core.bool _omitMessageNames =
|
|
||||||
$core.bool.fromEnvironment('protobuf.omit_message_names');
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
// This is a generated file - do not edit.
|
|
||||||
//
|
|
||||||
// Generated from shared/client.proto.
|
|
||||||
|
|
||||||
// @dart = 3.3
|
|
||||||
|
|
||||||
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
|
|
||||||
// ignore_for_file: constant_identifier_names
|
|
||||||
// ignore_for_file: curly_braces_in_flow_control_structures
|
|
||||||
// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
|
|
||||||
// ignore_for_file: non_constant_identifier_names, prefer_relative_imports
|
|
||||||
@@ -1,52 +0,0 @@
|
|||||||
// This is a generated file - do not edit.
|
|
||||||
//
|
|
||||||
// Generated from shared/client.proto.
|
|
||||||
|
|
||||||
// @dart = 3.3
|
|
||||||
|
|
||||||
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
|
|
||||||
// ignore_for_file: constant_identifier_names
|
|
||||||
// ignore_for_file: curly_braces_in_flow_control_structures
|
|
||||||
// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
|
|
||||||
// ignore_for_file: non_constant_identifier_names, prefer_relative_imports
|
|
||||||
// ignore_for_file: unused_import
|
|
||||||
|
|
||||||
import 'dart:convert' as $convert;
|
|
||||||
import 'dart:core' as $core;
|
|
||||||
import 'dart:typed_data' as $typed_data;
|
|
||||||
|
|
||||||
@$core.Deprecated('Use clientInfoDescriptor instead')
|
|
||||||
const ClientInfo$json = {
|
|
||||||
'1': 'ClientInfo',
|
|
||||||
'2': [
|
|
||||||
{'1': 'name', '3': 1, '4': 1, '5': 9, '10': 'name'},
|
|
||||||
{
|
|
||||||
'1': 'description',
|
|
||||||
'3': 2,
|
|
||||||
'4': 1,
|
|
||||||
'5': 9,
|
|
||||||
'9': 0,
|
|
||||||
'10': 'description',
|
|
||||||
'17': true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'1': 'version',
|
|
||||||
'3': 3,
|
|
||||||
'4': 1,
|
|
||||||
'5': 9,
|
|
||||||
'9': 1,
|
|
||||||
'10': 'version',
|
|
||||||
'17': true
|
|
||||||
},
|
|
||||||
],
|
|
||||||
'8': [
|
|
||||||
{'1': '_description'},
|
|
||||||
{'1': '_version'},
|
|
||||||
],
|
|
||||||
};
|
|
||||||
|
|
||||||
/// Descriptor for `ClientInfo`. Decode as a `google.protobuf.DescriptorProto`.
|
|
||||||
final $typed_data.Uint8List clientInfoDescriptor = $convert.base64Decode(
|
|
||||||
'CgpDbGllbnRJbmZvEhIKBG5hbWUYASABKAlSBG5hbWUSJQoLZGVzY3JpcHRpb24YAiABKAlIAF'
|
|
||||||
'ILZGVzY3JpcHRpb26IAQESHQoHdmVyc2lvbhgDIAEoCUgBUgd2ZXJzaW9uiAEBQg4KDF9kZXNj'
|
|
||||||
'cmlwdGlvbkIKCghfdmVyc2lvbg==');
|
|
||||||
@@ -1,851 +0,0 @@
|
|||||||
// This is a generated file - do not edit.
|
|
||||||
//
|
|
||||||
// Generated from shared/evm.proto.
|
|
||||||
|
|
||||||
// @dart = 3.3
|
|
||||||
|
|
||||||
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
|
|
||||||
// ignore_for_file: constant_identifier_names
|
|
||||||
// ignore_for_file: curly_braces_in_flow_control_structures
|
|
||||||
// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
|
|
||||||
// ignore_for_file: non_constant_identifier_names, prefer_relative_imports
|
|
||||||
|
|
||||||
import 'dart:core' as $core;
|
|
||||||
|
|
||||||
import 'package:fixnum/fixnum.dart' as $fixnum;
|
|
||||||
import 'package:protobuf/protobuf.dart' as $pb;
|
|
||||||
import 'package:protobuf/well_known_types/google/protobuf/empty.pb.dart' as $0;
|
|
||||||
|
|
||||||
export 'package:protobuf/protobuf.dart' show GeneratedMessageGenericExtensions;
|
|
||||||
|
|
||||||
class EtherTransferMeaning extends $pb.GeneratedMessage {
|
|
||||||
factory EtherTransferMeaning({
|
|
||||||
$core.List<$core.int>? to,
|
|
||||||
$core.List<$core.int>? value,
|
|
||||||
}) {
|
|
||||||
final result = create();
|
|
||||||
if (to != null) result.to = to;
|
|
||||||
if (value != null) result.value = value;
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
EtherTransferMeaning._();
|
|
||||||
|
|
||||||
factory EtherTransferMeaning.fromBuffer($core.List<$core.int> data,
|
|
||||||
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
|
||||||
create()..mergeFromBuffer(data, registry);
|
|
||||||
factory EtherTransferMeaning.fromJson($core.String json,
|
|
||||||
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
|
||||||
create()..mergeFromJson(json, registry);
|
|
||||||
|
|
||||||
static final $pb.BuilderInfo _i = $pb.BuilderInfo(
|
|
||||||
_omitMessageNames ? '' : 'EtherTransferMeaning',
|
|
||||||
package:
|
|
||||||
const $pb.PackageName(_omitMessageNames ? '' : 'arbiter.shared.evm'),
|
|
||||||
createEmptyInstance: create)
|
|
||||||
..a<$core.List<$core.int>>(
|
|
||||||
1, _omitFieldNames ? '' : 'to', $pb.PbFieldType.OY)
|
|
||||||
..a<$core.List<$core.int>>(
|
|
||||||
2, _omitFieldNames ? '' : 'value', $pb.PbFieldType.OY)
|
|
||||||
..hasRequiredFields = false;
|
|
||||||
|
|
||||||
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
|
||||||
EtherTransferMeaning clone() => deepCopy();
|
|
||||||
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
|
||||||
EtherTransferMeaning copyWith(void Function(EtherTransferMeaning) updates) =>
|
|
||||||
super.copyWith((message) => updates(message as EtherTransferMeaning))
|
|
||||||
as EtherTransferMeaning;
|
|
||||||
|
|
||||||
@$core.override
|
|
||||||
$pb.BuilderInfo get info_ => _i;
|
|
||||||
|
|
||||||
@$core.pragma('dart2js:noInline')
|
|
||||||
static EtherTransferMeaning create() => EtherTransferMeaning._();
|
|
||||||
@$core.override
|
|
||||||
EtherTransferMeaning createEmptyInstance() => create();
|
|
||||||
@$core.pragma('dart2js:noInline')
|
|
||||||
static EtherTransferMeaning getDefault() => _defaultInstance ??=
|
|
||||||
$pb.GeneratedMessage.$_defaultFor<EtherTransferMeaning>(create);
|
|
||||||
static EtherTransferMeaning? _defaultInstance;
|
|
||||||
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
$core.List<$core.int> get to => $_getN(0);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
set to($core.List<$core.int> value) => $_setBytes(0, value);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
$core.bool hasTo() => $_has(0);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
void clearTo() => $_clearField(1);
|
|
||||||
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
$core.List<$core.int> get value => $_getN(1);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
set value($core.List<$core.int> value) => $_setBytes(1, value);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
$core.bool hasValue() => $_has(1);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
void clearValue() => $_clearField(2);
|
|
||||||
}
|
|
||||||
|
|
||||||
class TokenInfo extends $pb.GeneratedMessage {
|
|
||||||
factory TokenInfo({
|
|
||||||
$core.String? symbol,
|
|
||||||
$core.List<$core.int>? address,
|
|
||||||
$fixnum.Int64? chainId,
|
|
||||||
}) {
|
|
||||||
final result = create();
|
|
||||||
if (symbol != null) result.symbol = symbol;
|
|
||||||
if (address != null) result.address = address;
|
|
||||||
if (chainId != null) result.chainId = chainId;
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
TokenInfo._();
|
|
||||||
|
|
||||||
factory TokenInfo.fromBuffer($core.List<$core.int> data,
|
|
||||||
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
|
||||||
create()..mergeFromBuffer(data, registry);
|
|
||||||
factory TokenInfo.fromJson($core.String json,
|
|
||||||
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
|
||||||
create()..mergeFromJson(json, registry);
|
|
||||||
|
|
||||||
static final $pb.BuilderInfo _i = $pb.BuilderInfo(
|
|
||||||
_omitMessageNames ? '' : 'TokenInfo',
|
|
||||||
package:
|
|
||||||
const $pb.PackageName(_omitMessageNames ? '' : 'arbiter.shared.evm'),
|
|
||||||
createEmptyInstance: create)
|
|
||||||
..aOS(1, _omitFieldNames ? '' : 'symbol')
|
|
||||||
..a<$core.List<$core.int>>(
|
|
||||||
2, _omitFieldNames ? '' : 'address', $pb.PbFieldType.OY)
|
|
||||||
..a<$fixnum.Int64>(3, _omitFieldNames ? '' : 'chainId', $pb.PbFieldType.OU6,
|
|
||||||
defaultOrMaker: $fixnum.Int64.ZERO)
|
|
||||||
..hasRequiredFields = false;
|
|
||||||
|
|
||||||
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
|
||||||
TokenInfo clone() => deepCopy();
|
|
||||||
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
|
||||||
TokenInfo copyWith(void Function(TokenInfo) updates) =>
|
|
||||||
super.copyWith((message) => updates(message as TokenInfo)) as TokenInfo;
|
|
||||||
|
|
||||||
@$core.override
|
|
||||||
$pb.BuilderInfo get info_ => _i;
|
|
||||||
|
|
||||||
@$core.pragma('dart2js:noInline')
|
|
||||||
static TokenInfo create() => TokenInfo._();
|
|
||||||
@$core.override
|
|
||||||
TokenInfo createEmptyInstance() => create();
|
|
||||||
@$core.pragma('dart2js:noInline')
|
|
||||||
static TokenInfo getDefault() =>
|
|
||||||
_defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<TokenInfo>(create);
|
|
||||||
static TokenInfo? _defaultInstance;
|
|
||||||
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
$core.String get symbol => $_getSZ(0);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
set symbol($core.String value) => $_setString(0, value);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
$core.bool hasSymbol() => $_has(0);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
void clearSymbol() => $_clearField(1);
|
|
||||||
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
$core.List<$core.int> get address => $_getN(1);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
set address($core.List<$core.int> value) => $_setBytes(1, value);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
$core.bool hasAddress() => $_has(1);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
void clearAddress() => $_clearField(2);
|
|
||||||
|
|
||||||
@$pb.TagNumber(3)
|
|
||||||
$fixnum.Int64 get chainId => $_getI64(2);
|
|
||||||
@$pb.TagNumber(3)
|
|
||||||
set chainId($fixnum.Int64 value) => $_setInt64(2, value);
|
|
||||||
@$pb.TagNumber(3)
|
|
||||||
$core.bool hasChainId() => $_has(2);
|
|
||||||
@$pb.TagNumber(3)
|
|
||||||
void clearChainId() => $_clearField(3);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Mirror of token_transfers::Meaning
|
|
||||||
class TokenTransferMeaning extends $pb.GeneratedMessage {
|
|
||||||
factory TokenTransferMeaning({
|
|
||||||
TokenInfo? token,
|
|
||||||
$core.List<$core.int>? to,
|
|
||||||
$core.List<$core.int>? value,
|
|
||||||
}) {
|
|
||||||
final result = create();
|
|
||||||
if (token != null) result.token = token;
|
|
||||||
if (to != null) result.to = to;
|
|
||||||
if (value != null) result.value = value;
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
TokenTransferMeaning._();
|
|
||||||
|
|
||||||
factory TokenTransferMeaning.fromBuffer($core.List<$core.int> data,
|
|
||||||
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
|
||||||
create()..mergeFromBuffer(data, registry);
|
|
||||||
factory TokenTransferMeaning.fromJson($core.String json,
|
|
||||||
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
|
||||||
create()..mergeFromJson(json, registry);
|
|
||||||
|
|
||||||
static final $pb.BuilderInfo _i = $pb.BuilderInfo(
|
|
||||||
_omitMessageNames ? '' : 'TokenTransferMeaning',
|
|
||||||
package:
|
|
||||||
const $pb.PackageName(_omitMessageNames ? '' : 'arbiter.shared.evm'),
|
|
||||||
createEmptyInstance: create)
|
|
||||||
..aOM<TokenInfo>(1, _omitFieldNames ? '' : 'token',
|
|
||||||
subBuilder: TokenInfo.create)
|
|
||||||
..a<$core.List<$core.int>>(
|
|
||||||
2, _omitFieldNames ? '' : 'to', $pb.PbFieldType.OY)
|
|
||||||
..a<$core.List<$core.int>>(
|
|
||||||
3, _omitFieldNames ? '' : 'value', $pb.PbFieldType.OY)
|
|
||||||
..hasRequiredFields = false;
|
|
||||||
|
|
||||||
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
|
||||||
TokenTransferMeaning clone() => deepCopy();
|
|
||||||
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
|
||||||
TokenTransferMeaning copyWith(void Function(TokenTransferMeaning) updates) =>
|
|
||||||
super.copyWith((message) => updates(message as TokenTransferMeaning))
|
|
||||||
as TokenTransferMeaning;
|
|
||||||
|
|
||||||
@$core.override
|
|
||||||
$pb.BuilderInfo get info_ => _i;
|
|
||||||
|
|
||||||
@$core.pragma('dart2js:noInline')
|
|
||||||
static TokenTransferMeaning create() => TokenTransferMeaning._();
|
|
||||||
@$core.override
|
|
||||||
TokenTransferMeaning createEmptyInstance() => create();
|
|
||||||
@$core.pragma('dart2js:noInline')
|
|
||||||
static TokenTransferMeaning getDefault() => _defaultInstance ??=
|
|
||||||
$pb.GeneratedMessage.$_defaultFor<TokenTransferMeaning>(create);
|
|
||||||
static TokenTransferMeaning? _defaultInstance;
|
|
||||||
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
TokenInfo get token => $_getN(0);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
set token(TokenInfo value) => $_setField(1, value);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
$core.bool hasToken() => $_has(0);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
void clearToken() => $_clearField(1);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
TokenInfo ensureToken() => $_ensure(0);
|
|
||||||
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
$core.List<$core.int> get to => $_getN(1);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
set to($core.List<$core.int> value) => $_setBytes(1, value);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
$core.bool hasTo() => $_has(1);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
void clearTo() => $_clearField(2);
|
|
||||||
|
|
||||||
@$pb.TagNumber(3)
|
|
||||||
$core.List<$core.int> get value => $_getN(2);
|
|
||||||
@$pb.TagNumber(3)
|
|
||||||
set value($core.List<$core.int> value) => $_setBytes(2, value);
|
|
||||||
@$pb.TagNumber(3)
|
|
||||||
$core.bool hasValue() => $_has(2);
|
|
||||||
@$pb.TagNumber(3)
|
|
||||||
void clearValue() => $_clearField(3);
|
|
||||||
}
|
|
||||||
|
|
||||||
enum SpecificMeaning_Meaning { etherTransfer, tokenTransfer, notSet }
|
|
||||||
|
|
||||||
/// Mirror of policies::SpecificMeaning
|
|
||||||
class SpecificMeaning extends $pb.GeneratedMessage {
|
|
||||||
factory SpecificMeaning({
|
|
||||||
EtherTransferMeaning? etherTransfer,
|
|
||||||
TokenTransferMeaning? tokenTransfer,
|
|
||||||
}) {
|
|
||||||
final result = create();
|
|
||||||
if (etherTransfer != null) result.etherTransfer = etherTransfer;
|
|
||||||
if (tokenTransfer != null) result.tokenTransfer = tokenTransfer;
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
SpecificMeaning._();
|
|
||||||
|
|
||||||
factory SpecificMeaning.fromBuffer($core.List<$core.int> data,
|
|
||||||
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
|
||||||
create()..mergeFromBuffer(data, registry);
|
|
||||||
factory SpecificMeaning.fromJson($core.String json,
|
|
||||||
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
|
||||||
create()..mergeFromJson(json, registry);
|
|
||||||
|
|
||||||
static const $core.Map<$core.int, SpecificMeaning_Meaning>
|
|
||||||
_SpecificMeaning_MeaningByTag = {
|
|
||||||
1: SpecificMeaning_Meaning.etherTransfer,
|
|
||||||
2: SpecificMeaning_Meaning.tokenTransfer,
|
|
||||||
0: SpecificMeaning_Meaning.notSet
|
|
||||||
};
|
|
||||||
static final $pb.BuilderInfo _i = $pb.BuilderInfo(
|
|
||||||
_omitMessageNames ? '' : 'SpecificMeaning',
|
|
||||||
package:
|
|
||||||
const $pb.PackageName(_omitMessageNames ? '' : 'arbiter.shared.evm'),
|
|
||||||
createEmptyInstance: create)
|
|
||||||
..oo(0, [1, 2])
|
|
||||||
..aOM<EtherTransferMeaning>(1, _omitFieldNames ? '' : 'etherTransfer',
|
|
||||||
subBuilder: EtherTransferMeaning.create)
|
|
||||||
..aOM<TokenTransferMeaning>(2, _omitFieldNames ? '' : 'tokenTransfer',
|
|
||||||
subBuilder: TokenTransferMeaning.create)
|
|
||||||
..hasRequiredFields = false;
|
|
||||||
|
|
||||||
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
|
||||||
SpecificMeaning clone() => deepCopy();
|
|
||||||
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
|
||||||
SpecificMeaning copyWith(void Function(SpecificMeaning) updates) =>
|
|
||||||
super.copyWith((message) => updates(message as SpecificMeaning))
|
|
||||||
as SpecificMeaning;
|
|
||||||
|
|
||||||
@$core.override
|
|
||||||
$pb.BuilderInfo get info_ => _i;
|
|
||||||
|
|
||||||
@$core.pragma('dart2js:noInline')
|
|
||||||
static SpecificMeaning create() => SpecificMeaning._();
|
|
||||||
@$core.override
|
|
||||||
SpecificMeaning createEmptyInstance() => create();
|
|
||||||
@$core.pragma('dart2js:noInline')
|
|
||||||
static SpecificMeaning getDefault() => _defaultInstance ??=
|
|
||||||
$pb.GeneratedMessage.$_defaultFor<SpecificMeaning>(create);
|
|
||||||
static SpecificMeaning? _defaultInstance;
|
|
||||||
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
SpecificMeaning_Meaning whichMeaning() =>
|
|
||||||
_SpecificMeaning_MeaningByTag[$_whichOneof(0)]!;
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
void clearMeaning() => $_clearField($_whichOneof(0));
|
|
||||||
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
EtherTransferMeaning get etherTransfer => $_getN(0);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
set etherTransfer(EtherTransferMeaning value) => $_setField(1, value);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
$core.bool hasEtherTransfer() => $_has(0);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
void clearEtherTransfer() => $_clearField(1);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
EtherTransferMeaning ensureEtherTransfer() => $_ensure(0);
|
|
||||||
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
TokenTransferMeaning get tokenTransfer => $_getN(1);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
set tokenTransfer(TokenTransferMeaning value) => $_setField(2, value);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
$core.bool hasTokenTransfer() => $_has(1);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
void clearTokenTransfer() => $_clearField(2);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
TokenTransferMeaning ensureTokenTransfer() => $_ensure(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
class GasLimitExceededViolation extends $pb.GeneratedMessage {
|
|
||||||
factory GasLimitExceededViolation({
|
|
||||||
$core.List<$core.int>? maxGasFeePerGas,
|
|
||||||
$core.List<$core.int>? maxPriorityFeePerGas,
|
|
||||||
}) {
|
|
||||||
final result = create();
|
|
||||||
if (maxGasFeePerGas != null) result.maxGasFeePerGas = maxGasFeePerGas;
|
|
||||||
if (maxPriorityFeePerGas != null)
|
|
||||||
result.maxPriorityFeePerGas = maxPriorityFeePerGas;
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
GasLimitExceededViolation._();
|
|
||||||
|
|
||||||
factory GasLimitExceededViolation.fromBuffer($core.List<$core.int> data,
|
|
||||||
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
|
||||||
create()..mergeFromBuffer(data, registry);
|
|
||||||
factory GasLimitExceededViolation.fromJson($core.String json,
|
|
||||||
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
|
||||||
create()..mergeFromJson(json, registry);
|
|
||||||
|
|
||||||
static final $pb.BuilderInfo _i = $pb.BuilderInfo(
|
|
||||||
_omitMessageNames ? '' : 'GasLimitExceededViolation',
|
|
||||||
package:
|
|
||||||
const $pb.PackageName(_omitMessageNames ? '' : 'arbiter.shared.evm'),
|
|
||||||
createEmptyInstance: create)
|
|
||||||
..a<$core.List<$core.int>>(
|
|
||||||
1, _omitFieldNames ? '' : 'maxGasFeePerGas', $pb.PbFieldType.OY)
|
|
||||||
..a<$core.List<$core.int>>(
|
|
||||||
2, _omitFieldNames ? '' : 'maxPriorityFeePerGas', $pb.PbFieldType.OY)
|
|
||||||
..hasRequiredFields = false;
|
|
||||||
|
|
||||||
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
|
||||||
GasLimitExceededViolation clone() => deepCopy();
|
|
||||||
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
|
||||||
GasLimitExceededViolation copyWith(
|
|
||||||
void Function(GasLimitExceededViolation) updates) =>
|
|
||||||
super.copyWith((message) => updates(message as GasLimitExceededViolation))
|
|
||||||
as GasLimitExceededViolation;
|
|
||||||
|
|
||||||
@$core.override
|
|
||||||
$pb.BuilderInfo get info_ => _i;
|
|
||||||
|
|
||||||
@$core.pragma('dart2js:noInline')
|
|
||||||
static GasLimitExceededViolation create() => GasLimitExceededViolation._();
|
|
||||||
@$core.override
|
|
||||||
GasLimitExceededViolation createEmptyInstance() => create();
|
|
||||||
@$core.pragma('dart2js:noInline')
|
|
||||||
static GasLimitExceededViolation getDefault() => _defaultInstance ??=
|
|
||||||
$pb.GeneratedMessage.$_defaultFor<GasLimitExceededViolation>(create);
|
|
||||||
static GasLimitExceededViolation? _defaultInstance;
|
|
||||||
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
$core.List<$core.int> get maxGasFeePerGas => $_getN(0);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
set maxGasFeePerGas($core.List<$core.int> value) => $_setBytes(0, value);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
$core.bool hasMaxGasFeePerGas() => $_has(0);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
void clearMaxGasFeePerGas() => $_clearField(1);
|
|
||||||
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
$core.List<$core.int> get maxPriorityFeePerGas => $_getN(1);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
set maxPriorityFeePerGas($core.List<$core.int> value) => $_setBytes(1, value);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
$core.bool hasMaxPriorityFeePerGas() => $_has(1);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
void clearMaxPriorityFeePerGas() => $_clearField(2);
|
|
||||||
}
|
|
||||||
|
|
||||||
enum EvalViolation_Kind {
|
|
||||||
invalidTarget,
|
|
||||||
gasLimitExceeded,
|
|
||||||
rateLimitExceeded,
|
|
||||||
volumetricLimitExceeded,
|
|
||||||
invalidTime,
|
|
||||||
invalidTransactionType,
|
|
||||||
notSet
|
|
||||||
}
|
|
||||||
|
|
||||||
class EvalViolation extends $pb.GeneratedMessage {
|
|
||||||
factory EvalViolation({
|
|
||||||
$core.List<$core.int>? invalidTarget,
|
|
||||||
GasLimitExceededViolation? gasLimitExceeded,
|
|
||||||
$0.Empty? rateLimitExceeded,
|
|
||||||
$0.Empty? volumetricLimitExceeded,
|
|
||||||
$0.Empty? invalidTime,
|
|
||||||
$0.Empty? invalidTransactionType,
|
|
||||||
}) {
|
|
||||||
final result = create();
|
|
||||||
if (invalidTarget != null) result.invalidTarget = invalidTarget;
|
|
||||||
if (gasLimitExceeded != null) result.gasLimitExceeded = gasLimitExceeded;
|
|
||||||
if (rateLimitExceeded != null) result.rateLimitExceeded = rateLimitExceeded;
|
|
||||||
if (volumetricLimitExceeded != null)
|
|
||||||
result.volumetricLimitExceeded = volumetricLimitExceeded;
|
|
||||||
if (invalidTime != null) result.invalidTime = invalidTime;
|
|
||||||
if (invalidTransactionType != null)
|
|
||||||
result.invalidTransactionType = invalidTransactionType;
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
EvalViolation._();
|
|
||||||
|
|
||||||
factory EvalViolation.fromBuffer($core.List<$core.int> data,
|
|
||||||
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
|
||||||
create()..mergeFromBuffer(data, registry);
|
|
||||||
factory EvalViolation.fromJson($core.String json,
|
|
||||||
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
|
||||||
create()..mergeFromJson(json, registry);
|
|
||||||
|
|
||||||
static const $core.Map<$core.int, EvalViolation_Kind>
|
|
||||||
_EvalViolation_KindByTag = {
|
|
||||||
1: EvalViolation_Kind.invalidTarget,
|
|
||||||
2: EvalViolation_Kind.gasLimitExceeded,
|
|
||||||
3: EvalViolation_Kind.rateLimitExceeded,
|
|
||||||
4: EvalViolation_Kind.volumetricLimitExceeded,
|
|
||||||
5: EvalViolation_Kind.invalidTime,
|
|
||||||
6: EvalViolation_Kind.invalidTransactionType,
|
|
||||||
0: EvalViolation_Kind.notSet
|
|
||||||
};
|
|
||||||
static final $pb.BuilderInfo _i = $pb.BuilderInfo(
|
|
||||||
_omitMessageNames ? '' : 'EvalViolation',
|
|
||||||
package:
|
|
||||||
const $pb.PackageName(_omitMessageNames ? '' : 'arbiter.shared.evm'),
|
|
||||||
createEmptyInstance: create)
|
|
||||||
..oo(0, [1, 2, 3, 4, 5, 6])
|
|
||||||
..a<$core.List<$core.int>>(
|
|
||||||
1, _omitFieldNames ? '' : 'invalidTarget', $pb.PbFieldType.OY)
|
|
||||||
..aOM<GasLimitExceededViolation>(
|
|
||||||
2, _omitFieldNames ? '' : 'gasLimitExceeded',
|
|
||||||
subBuilder: GasLimitExceededViolation.create)
|
|
||||||
..aOM<$0.Empty>(3, _omitFieldNames ? '' : 'rateLimitExceeded',
|
|
||||||
subBuilder: $0.Empty.create)
|
|
||||||
..aOM<$0.Empty>(4, _omitFieldNames ? '' : 'volumetricLimitExceeded',
|
|
||||||
subBuilder: $0.Empty.create)
|
|
||||||
..aOM<$0.Empty>(5, _omitFieldNames ? '' : 'invalidTime',
|
|
||||||
subBuilder: $0.Empty.create)
|
|
||||||
..aOM<$0.Empty>(6, _omitFieldNames ? '' : 'invalidTransactionType',
|
|
||||||
subBuilder: $0.Empty.create)
|
|
||||||
..hasRequiredFields = false;
|
|
||||||
|
|
||||||
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
|
||||||
EvalViolation clone() => deepCopy();
|
|
||||||
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
|
||||||
EvalViolation copyWith(void Function(EvalViolation) updates) =>
|
|
||||||
super.copyWith((message) => updates(message as EvalViolation))
|
|
||||||
as EvalViolation;
|
|
||||||
|
|
||||||
@$core.override
|
|
||||||
$pb.BuilderInfo get info_ => _i;
|
|
||||||
|
|
||||||
@$core.pragma('dart2js:noInline')
|
|
||||||
static EvalViolation create() => EvalViolation._();
|
|
||||||
@$core.override
|
|
||||||
EvalViolation createEmptyInstance() => create();
|
|
||||||
@$core.pragma('dart2js:noInline')
|
|
||||||
static EvalViolation getDefault() => _defaultInstance ??=
|
|
||||||
$pb.GeneratedMessage.$_defaultFor<EvalViolation>(create);
|
|
||||||
static EvalViolation? _defaultInstance;
|
|
||||||
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
@$pb.TagNumber(3)
|
|
||||||
@$pb.TagNumber(4)
|
|
||||||
@$pb.TagNumber(5)
|
|
||||||
@$pb.TagNumber(6)
|
|
||||||
EvalViolation_Kind whichKind() => _EvalViolation_KindByTag[$_whichOneof(0)]!;
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
@$pb.TagNumber(3)
|
|
||||||
@$pb.TagNumber(4)
|
|
||||||
@$pb.TagNumber(5)
|
|
||||||
@$pb.TagNumber(6)
|
|
||||||
void clearKind() => $_clearField($_whichOneof(0));
|
|
||||||
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
$core.List<$core.int> get invalidTarget => $_getN(0);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
set invalidTarget($core.List<$core.int> value) => $_setBytes(0, value);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
$core.bool hasInvalidTarget() => $_has(0);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
void clearInvalidTarget() => $_clearField(1);
|
|
||||||
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
GasLimitExceededViolation get gasLimitExceeded => $_getN(1);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
set gasLimitExceeded(GasLimitExceededViolation value) => $_setField(2, value);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
$core.bool hasGasLimitExceeded() => $_has(1);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
void clearGasLimitExceeded() => $_clearField(2);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
GasLimitExceededViolation ensureGasLimitExceeded() => $_ensure(1);
|
|
||||||
|
|
||||||
@$pb.TagNumber(3)
|
|
||||||
$0.Empty get rateLimitExceeded => $_getN(2);
|
|
||||||
@$pb.TagNumber(3)
|
|
||||||
set rateLimitExceeded($0.Empty value) => $_setField(3, value);
|
|
||||||
@$pb.TagNumber(3)
|
|
||||||
$core.bool hasRateLimitExceeded() => $_has(2);
|
|
||||||
@$pb.TagNumber(3)
|
|
||||||
void clearRateLimitExceeded() => $_clearField(3);
|
|
||||||
@$pb.TagNumber(3)
|
|
||||||
$0.Empty ensureRateLimitExceeded() => $_ensure(2);
|
|
||||||
|
|
||||||
@$pb.TagNumber(4)
|
|
||||||
$0.Empty get volumetricLimitExceeded => $_getN(3);
|
|
||||||
@$pb.TagNumber(4)
|
|
||||||
set volumetricLimitExceeded($0.Empty value) => $_setField(4, value);
|
|
||||||
@$pb.TagNumber(4)
|
|
||||||
$core.bool hasVolumetricLimitExceeded() => $_has(3);
|
|
||||||
@$pb.TagNumber(4)
|
|
||||||
void clearVolumetricLimitExceeded() => $_clearField(4);
|
|
||||||
@$pb.TagNumber(4)
|
|
||||||
$0.Empty ensureVolumetricLimitExceeded() => $_ensure(3);
|
|
||||||
|
|
||||||
@$pb.TagNumber(5)
|
|
||||||
$0.Empty get invalidTime => $_getN(4);
|
|
||||||
@$pb.TagNumber(5)
|
|
||||||
set invalidTime($0.Empty value) => $_setField(5, value);
|
|
||||||
@$pb.TagNumber(5)
|
|
||||||
$core.bool hasInvalidTime() => $_has(4);
|
|
||||||
@$pb.TagNumber(5)
|
|
||||||
void clearInvalidTime() => $_clearField(5);
|
|
||||||
@$pb.TagNumber(5)
|
|
||||||
$0.Empty ensureInvalidTime() => $_ensure(4);
|
|
||||||
|
|
||||||
@$pb.TagNumber(6)
|
|
||||||
$0.Empty get invalidTransactionType => $_getN(5);
|
|
||||||
@$pb.TagNumber(6)
|
|
||||||
set invalidTransactionType($0.Empty value) => $_setField(6, value);
|
|
||||||
@$pb.TagNumber(6)
|
|
||||||
$core.bool hasInvalidTransactionType() => $_has(5);
|
|
||||||
@$pb.TagNumber(6)
|
|
||||||
void clearInvalidTransactionType() => $_clearField(6);
|
|
||||||
@$pb.TagNumber(6)
|
|
||||||
$0.Empty ensureInvalidTransactionType() => $_ensure(5);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Transaction was classified but no grant covers it
|
|
||||||
class NoMatchingGrantError extends $pb.GeneratedMessage {
|
|
||||||
factory NoMatchingGrantError({
|
|
||||||
SpecificMeaning? meaning,
|
|
||||||
}) {
|
|
||||||
final result = create();
|
|
||||||
if (meaning != null) result.meaning = meaning;
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
NoMatchingGrantError._();
|
|
||||||
|
|
||||||
factory NoMatchingGrantError.fromBuffer($core.List<$core.int> data,
|
|
||||||
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
|
||||||
create()..mergeFromBuffer(data, registry);
|
|
||||||
factory NoMatchingGrantError.fromJson($core.String json,
|
|
||||||
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
|
||||||
create()..mergeFromJson(json, registry);
|
|
||||||
|
|
||||||
static final $pb.BuilderInfo _i = $pb.BuilderInfo(
|
|
||||||
_omitMessageNames ? '' : 'NoMatchingGrantError',
|
|
||||||
package:
|
|
||||||
const $pb.PackageName(_omitMessageNames ? '' : 'arbiter.shared.evm'),
|
|
||||||
createEmptyInstance: create)
|
|
||||||
..aOM<SpecificMeaning>(1, _omitFieldNames ? '' : 'meaning',
|
|
||||||
subBuilder: SpecificMeaning.create)
|
|
||||||
..hasRequiredFields = false;
|
|
||||||
|
|
||||||
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
|
||||||
NoMatchingGrantError clone() => deepCopy();
|
|
||||||
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
|
||||||
NoMatchingGrantError copyWith(void Function(NoMatchingGrantError) updates) =>
|
|
||||||
super.copyWith((message) => updates(message as NoMatchingGrantError))
|
|
||||||
as NoMatchingGrantError;
|
|
||||||
|
|
||||||
@$core.override
|
|
||||||
$pb.BuilderInfo get info_ => _i;
|
|
||||||
|
|
||||||
@$core.pragma('dart2js:noInline')
|
|
||||||
static NoMatchingGrantError create() => NoMatchingGrantError._();
|
|
||||||
@$core.override
|
|
||||||
NoMatchingGrantError createEmptyInstance() => create();
|
|
||||||
@$core.pragma('dart2js:noInline')
|
|
||||||
static NoMatchingGrantError getDefault() => _defaultInstance ??=
|
|
||||||
$pb.GeneratedMessage.$_defaultFor<NoMatchingGrantError>(create);
|
|
||||||
static NoMatchingGrantError? _defaultInstance;
|
|
||||||
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
SpecificMeaning get meaning => $_getN(0);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
set meaning(SpecificMeaning value) => $_setField(1, value);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
$core.bool hasMeaning() => $_has(0);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
void clearMeaning() => $_clearField(1);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
SpecificMeaning ensureMeaning() => $_ensure(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Transaction was classified and a grant was found, but constraints were violated
|
|
||||||
class PolicyViolationsError extends $pb.GeneratedMessage {
|
|
||||||
factory PolicyViolationsError({
|
|
||||||
SpecificMeaning? meaning,
|
|
||||||
$core.Iterable<EvalViolation>? violations,
|
|
||||||
}) {
|
|
||||||
final result = create();
|
|
||||||
if (meaning != null) result.meaning = meaning;
|
|
||||||
if (violations != null) result.violations.addAll(violations);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
PolicyViolationsError._();
|
|
||||||
|
|
||||||
factory PolicyViolationsError.fromBuffer($core.List<$core.int> data,
|
|
||||||
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
|
||||||
create()..mergeFromBuffer(data, registry);
|
|
||||||
factory PolicyViolationsError.fromJson($core.String json,
|
|
||||||
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
|
||||||
create()..mergeFromJson(json, registry);
|
|
||||||
|
|
||||||
static final $pb.BuilderInfo _i = $pb.BuilderInfo(
|
|
||||||
_omitMessageNames ? '' : 'PolicyViolationsError',
|
|
||||||
package:
|
|
||||||
const $pb.PackageName(_omitMessageNames ? '' : 'arbiter.shared.evm'),
|
|
||||||
createEmptyInstance: create)
|
|
||||||
..aOM<SpecificMeaning>(1, _omitFieldNames ? '' : 'meaning',
|
|
||||||
subBuilder: SpecificMeaning.create)
|
|
||||||
..pPM<EvalViolation>(2, _omitFieldNames ? '' : 'violations',
|
|
||||||
subBuilder: EvalViolation.create)
|
|
||||||
..hasRequiredFields = false;
|
|
||||||
|
|
||||||
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
|
||||||
PolicyViolationsError clone() => deepCopy();
|
|
||||||
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
|
||||||
PolicyViolationsError copyWith(
|
|
||||||
void Function(PolicyViolationsError) updates) =>
|
|
||||||
super.copyWith((message) => updates(message as PolicyViolationsError))
|
|
||||||
as PolicyViolationsError;
|
|
||||||
|
|
||||||
@$core.override
|
|
||||||
$pb.BuilderInfo get info_ => _i;
|
|
||||||
|
|
||||||
@$core.pragma('dart2js:noInline')
|
|
||||||
static PolicyViolationsError create() => PolicyViolationsError._();
|
|
||||||
@$core.override
|
|
||||||
PolicyViolationsError createEmptyInstance() => create();
|
|
||||||
@$core.pragma('dart2js:noInline')
|
|
||||||
static PolicyViolationsError getDefault() => _defaultInstance ??=
|
|
||||||
$pb.GeneratedMessage.$_defaultFor<PolicyViolationsError>(create);
|
|
||||||
static PolicyViolationsError? _defaultInstance;
|
|
||||||
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
SpecificMeaning get meaning => $_getN(0);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
set meaning(SpecificMeaning value) => $_setField(1, value);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
$core.bool hasMeaning() => $_has(0);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
void clearMeaning() => $_clearField(1);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
SpecificMeaning ensureMeaning() => $_ensure(0);
|
|
||||||
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
$pb.PbList<EvalViolation> get violations => $_getList(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
enum TransactionEvalError_Kind {
|
|
||||||
contractCreationNotSupported,
|
|
||||||
unsupportedTransactionType,
|
|
||||||
noMatchingGrant,
|
|
||||||
policyViolations,
|
|
||||||
notSet
|
|
||||||
}
|
|
||||||
|
|
||||||
/// top-level error returned when transaction evaluation fails
|
|
||||||
class TransactionEvalError extends $pb.GeneratedMessage {
|
|
||||||
factory TransactionEvalError({
|
|
||||||
$0.Empty? contractCreationNotSupported,
|
|
||||||
$0.Empty? unsupportedTransactionType,
|
|
||||||
NoMatchingGrantError? noMatchingGrant,
|
|
||||||
PolicyViolationsError? policyViolations,
|
|
||||||
}) {
|
|
||||||
final result = create();
|
|
||||||
if (contractCreationNotSupported != null)
|
|
||||||
result.contractCreationNotSupported = contractCreationNotSupported;
|
|
||||||
if (unsupportedTransactionType != null)
|
|
||||||
result.unsupportedTransactionType = unsupportedTransactionType;
|
|
||||||
if (noMatchingGrant != null) result.noMatchingGrant = noMatchingGrant;
|
|
||||||
if (policyViolations != null) result.policyViolations = policyViolations;
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
TransactionEvalError._();
|
|
||||||
|
|
||||||
factory TransactionEvalError.fromBuffer($core.List<$core.int> data,
|
|
||||||
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
|
||||||
create()..mergeFromBuffer(data, registry);
|
|
||||||
factory TransactionEvalError.fromJson($core.String json,
|
|
||||||
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
|
||||||
create()..mergeFromJson(json, registry);
|
|
||||||
|
|
||||||
static const $core.Map<$core.int, TransactionEvalError_Kind>
|
|
||||||
_TransactionEvalError_KindByTag = {
|
|
||||||
1: TransactionEvalError_Kind.contractCreationNotSupported,
|
|
||||||
2: TransactionEvalError_Kind.unsupportedTransactionType,
|
|
||||||
3: TransactionEvalError_Kind.noMatchingGrant,
|
|
||||||
4: TransactionEvalError_Kind.policyViolations,
|
|
||||||
0: TransactionEvalError_Kind.notSet
|
|
||||||
};
|
|
||||||
static final $pb.BuilderInfo _i = $pb.BuilderInfo(
|
|
||||||
_omitMessageNames ? '' : 'TransactionEvalError',
|
|
||||||
package:
|
|
||||||
const $pb.PackageName(_omitMessageNames ? '' : 'arbiter.shared.evm'),
|
|
||||||
createEmptyInstance: create)
|
|
||||||
..oo(0, [1, 2, 3, 4])
|
|
||||||
..aOM<$0.Empty>(1, _omitFieldNames ? '' : 'contractCreationNotSupported',
|
|
||||||
subBuilder: $0.Empty.create)
|
|
||||||
..aOM<$0.Empty>(2, _omitFieldNames ? '' : 'unsupportedTransactionType',
|
|
||||||
subBuilder: $0.Empty.create)
|
|
||||||
..aOM<NoMatchingGrantError>(3, _omitFieldNames ? '' : 'noMatchingGrant',
|
|
||||||
subBuilder: NoMatchingGrantError.create)
|
|
||||||
..aOM<PolicyViolationsError>(4, _omitFieldNames ? '' : 'policyViolations',
|
|
||||||
subBuilder: PolicyViolationsError.create)
|
|
||||||
..hasRequiredFields = false;
|
|
||||||
|
|
||||||
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
|
||||||
TransactionEvalError clone() => deepCopy();
|
|
||||||
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
|
||||||
TransactionEvalError copyWith(void Function(TransactionEvalError) updates) =>
|
|
||||||
super.copyWith((message) => updates(message as TransactionEvalError))
|
|
||||||
as TransactionEvalError;
|
|
||||||
|
|
||||||
@$core.override
|
|
||||||
$pb.BuilderInfo get info_ => _i;
|
|
||||||
|
|
||||||
@$core.pragma('dart2js:noInline')
|
|
||||||
static TransactionEvalError create() => TransactionEvalError._();
|
|
||||||
@$core.override
|
|
||||||
TransactionEvalError createEmptyInstance() => create();
|
|
||||||
@$core.pragma('dart2js:noInline')
|
|
||||||
static TransactionEvalError getDefault() => _defaultInstance ??=
|
|
||||||
$pb.GeneratedMessage.$_defaultFor<TransactionEvalError>(create);
|
|
||||||
static TransactionEvalError? _defaultInstance;
|
|
||||||
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
@$pb.TagNumber(3)
|
|
||||||
@$pb.TagNumber(4)
|
|
||||||
TransactionEvalError_Kind whichKind() =>
|
|
||||||
_TransactionEvalError_KindByTag[$_whichOneof(0)]!;
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
@$pb.TagNumber(3)
|
|
||||||
@$pb.TagNumber(4)
|
|
||||||
void clearKind() => $_clearField($_whichOneof(0));
|
|
||||||
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
$0.Empty get contractCreationNotSupported => $_getN(0);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
set contractCreationNotSupported($0.Empty value) => $_setField(1, value);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
$core.bool hasContractCreationNotSupported() => $_has(0);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
void clearContractCreationNotSupported() => $_clearField(1);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
$0.Empty ensureContractCreationNotSupported() => $_ensure(0);
|
|
||||||
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
$0.Empty get unsupportedTransactionType => $_getN(1);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
set unsupportedTransactionType($0.Empty value) => $_setField(2, value);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
$core.bool hasUnsupportedTransactionType() => $_has(1);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
void clearUnsupportedTransactionType() => $_clearField(2);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
$0.Empty ensureUnsupportedTransactionType() => $_ensure(1);
|
|
||||||
|
|
||||||
@$pb.TagNumber(3)
|
|
||||||
NoMatchingGrantError get noMatchingGrant => $_getN(2);
|
|
||||||
@$pb.TagNumber(3)
|
|
||||||
set noMatchingGrant(NoMatchingGrantError value) => $_setField(3, value);
|
|
||||||
@$pb.TagNumber(3)
|
|
||||||
$core.bool hasNoMatchingGrant() => $_has(2);
|
|
||||||
@$pb.TagNumber(3)
|
|
||||||
void clearNoMatchingGrant() => $_clearField(3);
|
|
||||||
@$pb.TagNumber(3)
|
|
||||||
NoMatchingGrantError ensureNoMatchingGrant() => $_ensure(2);
|
|
||||||
|
|
||||||
@$pb.TagNumber(4)
|
|
||||||
PolicyViolationsError get policyViolations => $_getN(3);
|
|
||||||
@$pb.TagNumber(4)
|
|
||||||
set policyViolations(PolicyViolationsError value) => $_setField(4, value);
|
|
||||||
@$pb.TagNumber(4)
|
|
||||||
$core.bool hasPolicyViolations() => $_has(3);
|
|
||||||
@$pb.TagNumber(4)
|
|
||||||
void clearPolicyViolations() => $_clearField(4);
|
|
||||||
@$pb.TagNumber(4)
|
|
||||||
PolicyViolationsError ensurePolicyViolations() => $_ensure(3);
|
|
||||||
}
|
|
||||||
|
|
||||||
const $core.bool _omitFieldNames =
|
|
||||||
$core.bool.fromEnvironment('protobuf.omit_field_names');
|
|
||||||
const $core.bool _omitMessageNames =
|
|
||||||
$core.bool.fromEnvironment('protobuf.omit_message_names');
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
// This is a generated file - do not edit.
|
|
||||||
//
|
|
||||||
// Generated from shared/evm.proto.
|
|
||||||
|
|
||||||
// @dart = 3.3
|
|
||||||
|
|
||||||
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
|
|
||||||
// ignore_for_file: constant_identifier_names
|
|
||||||
// ignore_for_file: curly_braces_in_flow_control_structures
|
|
||||||
// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
|
|
||||||
// ignore_for_file: non_constant_identifier_names, prefer_relative_imports
|
|
||||||
@@ -1,320 +0,0 @@
|
|||||||
// This is a generated file - do not edit.
|
|
||||||
//
|
|
||||||
// Generated from shared/evm.proto.
|
|
||||||
|
|
||||||
// @dart = 3.3
|
|
||||||
|
|
||||||
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
|
|
||||||
// ignore_for_file: constant_identifier_names
|
|
||||||
// ignore_for_file: curly_braces_in_flow_control_structures
|
|
||||||
// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
|
|
||||||
// ignore_for_file: non_constant_identifier_names, prefer_relative_imports
|
|
||||||
// ignore_for_file: unused_import
|
|
||||||
|
|
||||||
import 'dart:convert' as $convert;
|
|
||||||
import 'dart:core' as $core;
|
|
||||||
import 'dart:typed_data' as $typed_data;
|
|
||||||
|
|
||||||
@$core.Deprecated('Use etherTransferMeaningDescriptor instead')
|
|
||||||
const EtherTransferMeaning$json = {
|
|
||||||
'1': 'EtherTransferMeaning',
|
|
||||||
'2': [
|
|
||||||
{'1': 'to', '3': 1, '4': 1, '5': 12, '10': 'to'},
|
|
||||||
{'1': 'value', '3': 2, '4': 1, '5': 12, '10': 'value'},
|
|
||||||
],
|
|
||||||
};
|
|
||||||
|
|
||||||
/// Descriptor for `EtherTransferMeaning`. Decode as a `google.protobuf.DescriptorProto`.
|
|
||||||
final $typed_data.Uint8List etherTransferMeaningDescriptor = $convert.base64Decode(
|
|
||||||
'ChRFdGhlclRyYW5zZmVyTWVhbmluZxIOCgJ0bxgBIAEoDFICdG8SFAoFdmFsdWUYAiABKAxSBX'
|
|
||||||
'ZhbHVl');
|
|
||||||
|
|
||||||
@$core.Deprecated('Use tokenInfoDescriptor instead')
|
|
||||||
const TokenInfo$json = {
|
|
||||||
'1': 'TokenInfo',
|
|
||||||
'2': [
|
|
||||||
{'1': 'symbol', '3': 1, '4': 1, '5': 9, '10': 'symbol'},
|
|
||||||
{'1': 'address', '3': 2, '4': 1, '5': 12, '10': 'address'},
|
|
||||||
{'1': 'chain_id', '3': 3, '4': 1, '5': 4, '10': 'chainId'},
|
|
||||||
],
|
|
||||||
};
|
|
||||||
|
|
||||||
/// Descriptor for `TokenInfo`. Decode as a `google.protobuf.DescriptorProto`.
|
|
||||||
final $typed_data.Uint8List tokenInfoDescriptor = $convert.base64Decode(
|
|
||||||
'CglUb2tlbkluZm8SFgoGc3ltYm9sGAEgASgJUgZzeW1ib2wSGAoHYWRkcmVzcxgCIAEoDFIHYW'
|
|
||||||
'RkcmVzcxIZCghjaGFpbl9pZBgDIAEoBFIHY2hhaW5JZA==');
|
|
||||||
|
|
||||||
@$core.Deprecated('Use tokenTransferMeaningDescriptor instead')
|
|
||||||
const TokenTransferMeaning$json = {
|
|
||||||
'1': 'TokenTransferMeaning',
|
|
||||||
'2': [
|
|
||||||
{
|
|
||||||
'1': 'token',
|
|
||||||
'3': 1,
|
|
||||||
'4': 1,
|
|
||||||
'5': 11,
|
|
||||||
'6': '.arbiter.shared.evm.TokenInfo',
|
|
||||||
'10': 'token'
|
|
||||||
},
|
|
||||||
{'1': 'to', '3': 2, '4': 1, '5': 12, '10': 'to'},
|
|
||||||
{'1': 'value', '3': 3, '4': 1, '5': 12, '10': 'value'},
|
|
||||||
],
|
|
||||||
};
|
|
||||||
|
|
||||||
/// Descriptor for `TokenTransferMeaning`. Decode as a `google.protobuf.DescriptorProto`.
|
|
||||||
final $typed_data.Uint8List tokenTransferMeaningDescriptor = $convert.base64Decode(
|
|
||||||
'ChRUb2tlblRyYW5zZmVyTWVhbmluZxIzCgV0b2tlbhgBIAEoCzIdLmFyYml0ZXIuc2hhcmVkLm'
|
|
||||||
'V2bS5Ub2tlbkluZm9SBXRva2VuEg4KAnRvGAIgASgMUgJ0bxIUCgV2YWx1ZRgDIAEoDFIFdmFs'
|
|
||||||
'dWU=');
|
|
||||||
|
|
||||||
@$core.Deprecated('Use specificMeaningDescriptor instead')
|
|
||||||
const SpecificMeaning$json = {
|
|
||||||
'1': 'SpecificMeaning',
|
|
||||||
'2': [
|
|
||||||
{
|
|
||||||
'1': 'ether_transfer',
|
|
||||||
'3': 1,
|
|
||||||
'4': 1,
|
|
||||||
'5': 11,
|
|
||||||
'6': '.arbiter.shared.evm.EtherTransferMeaning',
|
|
||||||
'9': 0,
|
|
||||||
'10': 'etherTransfer'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'1': 'token_transfer',
|
|
||||||
'3': 2,
|
|
||||||
'4': 1,
|
|
||||||
'5': 11,
|
|
||||||
'6': '.arbiter.shared.evm.TokenTransferMeaning',
|
|
||||||
'9': 0,
|
|
||||||
'10': 'tokenTransfer'
|
|
||||||
},
|
|
||||||
],
|
|
||||||
'8': [
|
|
||||||
{'1': 'meaning'},
|
|
||||||
],
|
|
||||||
};
|
|
||||||
|
|
||||||
/// Descriptor for `SpecificMeaning`. Decode as a `google.protobuf.DescriptorProto`.
|
|
||||||
final $typed_data.Uint8List specificMeaningDescriptor = $convert.base64Decode(
|
|
||||||
'Cg9TcGVjaWZpY01lYW5pbmcSUQoOZXRoZXJfdHJhbnNmZXIYASABKAsyKC5hcmJpdGVyLnNoYX'
|
|
||||||
'JlZC5ldm0uRXRoZXJUcmFuc2Zlck1lYW5pbmdIAFINZXRoZXJUcmFuc2ZlchJRCg50b2tlbl90'
|
|
||||||
'cmFuc2ZlchgCIAEoCzIoLmFyYml0ZXIuc2hhcmVkLmV2bS5Ub2tlblRyYW5zZmVyTWVhbmluZ0'
|
|
||||||
'gAUg10b2tlblRyYW5zZmVyQgkKB21lYW5pbmc=');
|
|
||||||
|
|
||||||
@$core.Deprecated('Use gasLimitExceededViolationDescriptor instead')
|
|
||||||
const GasLimitExceededViolation$json = {
|
|
||||||
'1': 'GasLimitExceededViolation',
|
|
||||||
'2': [
|
|
||||||
{
|
|
||||||
'1': 'max_gas_fee_per_gas',
|
|
||||||
'3': 1,
|
|
||||||
'4': 1,
|
|
||||||
'5': 12,
|
|
||||||
'9': 0,
|
|
||||||
'10': 'maxGasFeePerGas',
|
|
||||||
'17': true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'1': 'max_priority_fee_per_gas',
|
|
||||||
'3': 2,
|
|
||||||
'4': 1,
|
|
||||||
'5': 12,
|
|
||||||
'9': 1,
|
|
||||||
'10': 'maxPriorityFeePerGas',
|
|
||||||
'17': true
|
|
||||||
},
|
|
||||||
],
|
|
||||||
'8': [
|
|
||||||
{'1': '_max_gas_fee_per_gas'},
|
|
||||||
{'1': '_max_priority_fee_per_gas'},
|
|
||||||
],
|
|
||||||
};
|
|
||||||
|
|
||||||
/// Descriptor for `GasLimitExceededViolation`. Decode as a `google.protobuf.DescriptorProto`.
|
|
||||||
final $typed_data.Uint8List gasLimitExceededViolationDescriptor = $convert.base64Decode(
|
|
||||||
'ChlHYXNMaW1pdEV4Y2VlZGVkVmlvbGF0aW9uEjEKE21heF9nYXNfZmVlX3Blcl9nYXMYASABKA'
|
|
||||||
'xIAFIPbWF4R2FzRmVlUGVyR2FziAEBEjsKGG1heF9wcmlvcml0eV9mZWVfcGVyX2dhcxgCIAEo'
|
|
||||||
'DEgBUhRtYXhQcmlvcml0eUZlZVBlckdhc4gBAUIWChRfbWF4X2dhc19mZWVfcGVyX2dhc0IbCh'
|
|
||||||
'lfbWF4X3ByaW9yaXR5X2ZlZV9wZXJfZ2Fz');
|
|
||||||
|
|
||||||
@$core.Deprecated('Use evalViolationDescriptor instead')
|
|
||||||
const EvalViolation$json = {
|
|
||||||
'1': 'EvalViolation',
|
|
||||||
'2': [
|
|
||||||
{
|
|
||||||
'1': 'invalid_target',
|
|
||||||
'3': 1,
|
|
||||||
'4': 1,
|
|
||||||
'5': 12,
|
|
||||||
'9': 0,
|
|
||||||
'10': 'invalidTarget'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'1': 'gas_limit_exceeded',
|
|
||||||
'3': 2,
|
|
||||||
'4': 1,
|
|
||||||
'5': 11,
|
|
||||||
'6': '.arbiter.shared.evm.GasLimitExceededViolation',
|
|
||||||
'9': 0,
|
|
||||||
'10': 'gasLimitExceeded'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'1': 'rate_limit_exceeded',
|
|
||||||
'3': 3,
|
|
||||||
'4': 1,
|
|
||||||
'5': 11,
|
|
||||||
'6': '.google.protobuf.Empty',
|
|
||||||
'9': 0,
|
|
||||||
'10': 'rateLimitExceeded'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'1': 'volumetric_limit_exceeded',
|
|
||||||
'3': 4,
|
|
||||||
'4': 1,
|
|
||||||
'5': 11,
|
|
||||||
'6': '.google.protobuf.Empty',
|
|
||||||
'9': 0,
|
|
||||||
'10': 'volumetricLimitExceeded'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'1': 'invalid_time',
|
|
||||||
'3': 5,
|
|
||||||
'4': 1,
|
|
||||||
'5': 11,
|
|
||||||
'6': '.google.protobuf.Empty',
|
|
||||||
'9': 0,
|
|
||||||
'10': 'invalidTime'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'1': 'invalid_transaction_type',
|
|
||||||
'3': 6,
|
|
||||||
'4': 1,
|
|
||||||
'5': 11,
|
|
||||||
'6': '.google.protobuf.Empty',
|
|
||||||
'9': 0,
|
|
||||||
'10': 'invalidTransactionType'
|
|
||||||
},
|
|
||||||
],
|
|
||||||
'8': [
|
|
||||||
{'1': 'kind'},
|
|
||||||
],
|
|
||||||
};
|
|
||||||
|
|
||||||
/// Descriptor for `EvalViolation`. Decode as a `google.protobuf.DescriptorProto`.
|
|
||||||
final $typed_data.Uint8List evalViolationDescriptor = $convert.base64Decode(
|
|
||||||
'Cg1FdmFsVmlvbGF0aW9uEicKDmludmFsaWRfdGFyZ2V0GAEgASgMSABSDWludmFsaWRUYXJnZX'
|
|
||||||
'QSXQoSZ2FzX2xpbWl0X2V4Y2VlZGVkGAIgASgLMi0uYXJiaXRlci5zaGFyZWQuZXZtLkdhc0xp'
|
|
||||||
'bWl0RXhjZWVkZWRWaW9sYXRpb25IAFIQZ2FzTGltaXRFeGNlZWRlZBJIChNyYXRlX2xpbWl0X2'
|
|
||||||
'V4Y2VlZGVkGAMgASgLMhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5SABSEXJhdGVMaW1pdEV4Y2Vl'
|
|
||||||
'ZGVkElQKGXZvbHVtZXRyaWNfbGltaXRfZXhjZWVkZWQYBCABKAsyFi5nb29nbGUucHJvdG9idW'
|
|
||||||
'YuRW1wdHlIAFIXdm9sdW1ldHJpY0xpbWl0RXhjZWVkZWQSOwoMaW52YWxpZF90aW1lGAUgASgL'
|
|
||||||
'MhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5SABSC2ludmFsaWRUaW1lElIKGGludmFsaWRfdHJhbn'
|
|
||||||
'NhY3Rpb25fdHlwZRgGIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eUgAUhZpbnZhbGlkVHJh'
|
|
||||||
'bnNhY3Rpb25UeXBlQgYKBGtpbmQ=');
|
|
||||||
|
|
||||||
@$core.Deprecated('Use noMatchingGrantErrorDescriptor instead')
|
|
||||||
const NoMatchingGrantError$json = {
|
|
||||||
'1': 'NoMatchingGrantError',
|
|
||||||
'2': [
|
|
||||||
{
|
|
||||||
'1': 'meaning',
|
|
||||||
'3': 1,
|
|
||||||
'4': 1,
|
|
||||||
'5': 11,
|
|
||||||
'6': '.arbiter.shared.evm.SpecificMeaning',
|
|
||||||
'10': 'meaning'
|
|
||||||
},
|
|
||||||
],
|
|
||||||
};
|
|
||||||
|
|
||||||
/// Descriptor for `NoMatchingGrantError`. Decode as a `google.protobuf.DescriptorProto`.
|
|
||||||
final $typed_data.Uint8List noMatchingGrantErrorDescriptor = $convert.base64Decode(
|
|
||||||
'ChROb01hdGNoaW5nR3JhbnRFcnJvchI9CgdtZWFuaW5nGAEgASgLMiMuYXJiaXRlci5zaGFyZW'
|
|
||||||
'QuZXZtLlNwZWNpZmljTWVhbmluZ1IHbWVhbmluZw==');
|
|
||||||
|
|
||||||
@$core.Deprecated('Use policyViolationsErrorDescriptor instead')
|
|
||||||
const PolicyViolationsError$json = {
|
|
||||||
'1': 'PolicyViolationsError',
|
|
||||||
'2': [
|
|
||||||
{
|
|
||||||
'1': 'meaning',
|
|
||||||
'3': 1,
|
|
||||||
'4': 1,
|
|
||||||
'5': 11,
|
|
||||||
'6': '.arbiter.shared.evm.SpecificMeaning',
|
|
||||||
'10': 'meaning'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'1': 'violations',
|
|
||||||
'3': 2,
|
|
||||||
'4': 3,
|
|
||||||
'5': 11,
|
|
||||||
'6': '.arbiter.shared.evm.EvalViolation',
|
|
||||||
'10': 'violations'
|
|
||||||
},
|
|
||||||
],
|
|
||||||
};
|
|
||||||
|
|
||||||
/// Descriptor for `PolicyViolationsError`. Decode as a `google.protobuf.DescriptorProto`.
|
|
||||||
final $typed_data.Uint8List policyViolationsErrorDescriptor = $convert.base64Decode(
|
|
||||||
'ChVQb2xpY3lWaW9sYXRpb25zRXJyb3ISPQoHbWVhbmluZxgBIAEoCzIjLmFyYml0ZXIuc2hhcm'
|
|
||||||
'VkLmV2bS5TcGVjaWZpY01lYW5pbmdSB21lYW5pbmcSQQoKdmlvbGF0aW9ucxgCIAMoCzIhLmFy'
|
|
||||||
'Yml0ZXIuc2hhcmVkLmV2bS5FdmFsVmlvbGF0aW9uUgp2aW9sYXRpb25z');
|
|
||||||
|
|
||||||
@$core.Deprecated('Use transactionEvalErrorDescriptor instead')
|
|
||||||
const TransactionEvalError$json = {
|
|
||||||
'1': 'TransactionEvalError',
|
|
||||||
'2': [
|
|
||||||
{
|
|
||||||
'1': 'contract_creation_not_supported',
|
|
||||||
'3': 1,
|
|
||||||
'4': 1,
|
|
||||||
'5': 11,
|
|
||||||
'6': '.google.protobuf.Empty',
|
|
||||||
'9': 0,
|
|
||||||
'10': 'contractCreationNotSupported'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'1': 'unsupported_transaction_type',
|
|
||||||
'3': 2,
|
|
||||||
'4': 1,
|
|
||||||
'5': 11,
|
|
||||||
'6': '.google.protobuf.Empty',
|
|
||||||
'9': 0,
|
|
||||||
'10': 'unsupportedTransactionType'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'1': 'no_matching_grant',
|
|
||||||
'3': 3,
|
|
||||||
'4': 1,
|
|
||||||
'5': 11,
|
|
||||||
'6': '.arbiter.shared.evm.NoMatchingGrantError',
|
|
||||||
'9': 0,
|
|
||||||
'10': 'noMatchingGrant'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'1': 'policy_violations',
|
|
||||||
'3': 4,
|
|
||||||
'4': 1,
|
|
||||||
'5': 11,
|
|
||||||
'6': '.arbiter.shared.evm.PolicyViolationsError',
|
|
||||||
'9': 0,
|
|
||||||
'10': 'policyViolations'
|
|
||||||
},
|
|
||||||
],
|
|
||||||
'8': [
|
|
||||||
{'1': 'kind'},
|
|
||||||
],
|
|
||||||
};
|
|
||||||
|
|
||||||
/// Descriptor for `TransactionEvalError`. Decode as a `google.protobuf.DescriptorProto`.
|
|
||||||
final $typed_data.Uint8List transactionEvalErrorDescriptor = $convert.base64Decode(
|
|
||||||
'ChRUcmFuc2FjdGlvbkV2YWxFcnJvchJfCh9jb250cmFjdF9jcmVhdGlvbl9ub3Rfc3VwcG9ydG'
|
|
||||||
'VkGAEgASgLMhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5SABSHGNvbnRyYWN0Q3JlYXRpb25Ob3RT'
|
|
||||||
'dXBwb3J0ZWQSWgocdW5zdXBwb3J0ZWRfdHJhbnNhY3Rpb25fdHlwZRgCIAEoCzIWLmdvb2dsZS'
|
|
||||||
'5wcm90b2J1Zi5FbXB0eUgAUhp1bnN1cHBvcnRlZFRyYW5zYWN0aW9uVHlwZRJWChFub19tYXRj'
|
|
||||||
'aGluZ19ncmFudBgDIAEoCzIoLmFyYml0ZXIuc2hhcmVkLmV2bS5Ob01hdGNoaW5nR3JhbnRFcn'
|
|
||||||
'JvckgAUg9ub01hdGNoaW5nR3JhbnQSWAoRcG9saWN5X3Zpb2xhdGlvbnMYBCABKAsyKS5hcmJp'
|
|
||||||
'dGVyLnNoYXJlZC5ldm0uUG9saWN5VmlvbGF0aW9uc0Vycm9ySABSEHBvbGljeVZpb2xhdGlvbn'
|
|
||||||
'NCBgoEa2luZA==');
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
// This is a generated file - do not edit.
|
|
||||||
//
|
|
||||||
// Generated from shared/vault.proto.
|
|
||||||
|
|
||||||
// @dart = 3.3
|
|
||||||
|
|
||||||
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
|
|
||||||
// ignore_for_file: constant_identifier_names
|
|
||||||
// ignore_for_file: curly_braces_in_flow_control_structures
|
|
||||||
// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
|
|
||||||
// ignore_for_file: non_constant_identifier_names, prefer_relative_imports
|
|
||||||
|
|
||||||
import 'dart:core' as $core;
|
|
||||||
|
|
||||||
export 'package:protobuf/protobuf.dart' show GeneratedMessageGenericExtensions;
|
|
||||||
|
|
||||||
export 'vault.pbenum.dart';
|
|
||||||
@@ -1,46 +0,0 @@
|
|||||||
// This is a generated file - do not edit.
|
|
||||||
//
|
|
||||||
// Generated from shared/vault.proto.
|
|
||||||
|
|
||||||
// @dart = 3.3
|
|
||||||
|
|
||||||
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
|
|
||||||
// ignore_for_file: constant_identifier_names
|
|
||||||
// ignore_for_file: curly_braces_in_flow_control_structures
|
|
||||||
// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
|
|
||||||
// ignore_for_file: non_constant_identifier_names, prefer_relative_imports
|
|
||||||
|
|
||||||
import 'dart:core' as $core;
|
|
||||||
|
|
||||||
import 'package:protobuf/protobuf.dart' as $pb;
|
|
||||||
|
|
||||||
class VaultState extends $pb.ProtobufEnum {
|
|
||||||
static const VaultState VAULT_STATE_UNSPECIFIED =
|
|
||||||
VaultState._(0, _omitEnumNames ? '' : 'VAULT_STATE_UNSPECIFIED');
|
|
||||||
static const VaultState VAULT_STATE_UNBOOTSTRAPPED =
|
|
||||||
VaultState._(1, _omitEnumNames ? '' : 'VAULT_STATE_UNBOOTSTRAPPED');
|
|
||||||
static const VaultState VAULT_STATE_SEALED =
|
|
||||||
VaultState._(2, _omitEnumNames ? '' : 'VAULT_STATE_SEALED');
|
|
||||||
static const VaultState VAULT_STATE_UNSEALED =
|
|
||||||
VaultState._(3, _omitEnumNames ? '' : 'VAULT_STATE_UNSEALED');
|
|
||||||
static const VaultState VAULT_STATE_ERROR =
|
|
||||||
VaultState._(4, _omitEnumNames ? '' : 'VAULT_STATE_ERROR');
|
|
||||||
|
|
||||||
static const $core.List<VaultState> values = <VaultState>[
|
|
||||||
VAULT_STATE_UNSPECIFIED,
|
|
||||||
VAULT_STATE_UNBOOTSTRAPPED,
|
|
||||||
VAULT_STATE_SEALED,
|
|
||||||
VAULT_STATE_UNSEALED,
|
|
||||||
VAULT_STATE_ERROR,
|
|
||||||
];
|
|
||||||
|
|
||||||
static final $core.List<VaultState?> _byValue =
|
|
||||||
$pb.ProtobufEnum.$_initByValueList(values, 4);
|
|
||||||
static VaultState? valueOf($core.int value) =>
|
|
||||||
value < 0 || value >= _byValue.length ? null : _byValue[value];
|
|
||||||
|
|
||||||
const VaultState._(super.value, super.name);
|
|
||||||
}
|
|
||||||
|
|
||||||
const $core.bool _omitEnumNames =
|
|
||||||
$core.bool.fromEnvironment('protobuf.omit_enum_names');
|
|
||||||
@@ -1,34 +0,0 @@
|
|||||||
// This is a generated file - do not edit.
|
|
||||||
//
|
|
||||||
// Generated from shared/vault.proto.
|
|
||||||
|
|
||||||
// @dart = 3.3
|
|
||||||
|
|
||||||
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
|
|
||||||
// ignore_for_file: constant_identifier_names
|
|
||||||
// ignore_for_file: curly_braces_in_flow_control_structures
|
|
||||||
// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
|
|
||||||
// ignore_for_file: non_constant_identifier_names, prefer_relative_imports
|
|
||||||
// ignore_for_file: unused_import
|
|
||||||
|
|
||||||
import 'dart:convert' as $convert;
|
|
||||||
import 'dart:core' as $core;
|
|
||||||
import 'dart:typed_data' as $typed_data;
|
|
||||||
|
|
||||||
@$core.Deprecated('Use vaultStateDescriptor instead')
|
|
||||||
const VaultState$json = {
|
|
||||||
'1': 'VaultState',
|
|
||||||
'2': [
|
|
||||||
{'1': 'VAULT_STATE_UNSPECIFIED', '2': 0},
|
|
||||||
{'1': 'VAULT_STATE_UNBOOTSTRAPPED', '2': 1},
|
|
||||||
{'1': 'VAULT_STATE_SEALED', '2': 2},
|
|
||||||
{'1': 'VAULT_STATE_UNSEALED', '2': 3},
|
|
||||||
{'1': 'VAULT_STATE_ERROR', '2': 4},
|
|
||||||
],
|
|
||||||
};
|
|
||||||
|
|
||||||
/// Descriptor for `VaultState`. Decode as a `google.protobuf.EnumDescriptorProto`.
|
|
||||||
final $typed_data.Uint8List vaultStateDescriptor = $convert.base64Decode(
|
|
||||||
'CgpWYXVsdFN0YXRlEhsKF1ZBVUxUX1NUQVRFX1VOU1BFQ0lGSUVEEAASHgoaVkFVTFRfU1RBVE'
|
|
||||||
'VfVU5CT09UU1RSQVBQRUQQARIWChJWQVVMVF9TVEFURV9TRUFMRUQQAhIYChRWQVVMVF9TVEFU'
|
|
||||||
'RV9VTlNFQUxFRBADEhUKEVZBVUxUX1NUQVRFX0VSUk9SEAQ=');
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -9,3 +9,178 @@
|
|||||||
// ignore_for_file: curly_braces_in_flow_control_structures
|
// ignore_for_file: curly_braces_in_flow_control_structures
|
||||||
// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
|
// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
|
||||||
// ignore_for_file: non_constant_identifier_names, prefer_relative_imports
|
// ignore_for_file: non_constant_identifier_names, prefer_relative_imports
|
||||||
|
|
||||||
|
import 'dart:core' as $core;
|
||||||
|
|
||||||
|
import 'package:protobuf/protobuf.dart' as $pb;
|
||||||
|
|
||||||
|
class KeyType extends $pb.ProtobufEnum {
|
||||||
|
static const KeyType KEY_TYPE_UNSPECIFIED =
|
||||||
|
KeyType._(0, _omitEnumNames ? '' : 'KEY_TYPE_UNSPECIFIED');
|
||||||
|
static const KeyType KEY_TYPE_ED25519 =
|
||||||
|
KeyType._(1, _omitEnumNames ? '' : 'KEY_TYPE_ED25519');
|
||||||
|
static const KeyType KEY_TYPE_ECDSA_SECP256K1 =
|
||||||
|
KeyType._(2, _omitEnumNames ? '' : 'KEY_TYPE_ECDSA_SECP256K1');
|
||||||
|
static const KeyType KEY_TYPE_RSA =
|
||||||
|
KeyType._(3, _omitEnumNames ? '' : 'KEY_TYPE_RSA');
|
||||||
|
|
||||||
|
static const $core.List<KeyType> values = <KeyType>[
|
||||||
|
KEY_TYPE_UNSPECIFIED,
|
||||||
|
KEY_TYPE_ED25519,
|
||||||
|
KEY_TYPE_ECDSA_SECP256K1,
|
||||||
|
KEY_TYPE_RSA,
|
||||||
|
];
|
||||||
|
|
||||||
|
static final $core.List<KeyType?> _byValue =
|
||||||
|
$pb.ProtobufEnum.$_initByValueList(values, 3);
|
||||||
|
static KeyType? valueOf($core.int value) =>
|
||||||
|
value < 0 || value >= _byValue.length ? null : _byValue[value];
|
||||||
|
|
||||||
|
const KeyType._(super.value, super.name);
|
||||||
|
}
|
||||||
|
|
||||||
|
class SdkClientError extends $pb.ProtobufEnum {
|
||||||
|
static const SdkClientError SDK_CLIENT_ERROR_UNSPECIFIED =
|
||||||
|
SdkClientError._(0, _omitEnumNames ? '' : 'SDK_CLIENT_ERROR_UNSPECIFIED');
|
||||||
|
static const SdkClientError SDK_CLIENT_ERROR_ALREADY_EXISTS =
|
||||||
|
SdkClientError._(
|
||||||
|
1, _omitEnumNames ? '' : 'SDK_CLIENT_ERROR_ALREADY_EXISTS');
|
||||||
|
static const SdkClientError SDK_CLIENT_ERROR_NOT_FOUND =
|
||||||
|
SdkClientError._(2, _omitEnumNames ? '' : 'SDK_CLIENT_ERROR_NOT_FOUND');
|
||||||
|
static const SdkClientError SDK_CLIENT_ERROR_HAS_RELATED_DATA =
|
||||||
|
SdkClientError._(
|
||||||
|
3, _omitEnumNames ? '' : 'SDK_CLIENT_ERROR_HAS_RELATED_DATA');
|
||||||
|
static const SdkClientError SDK_CLIENT_ERROR_INTERNAL =
|
||||||
|
SdkClientError._(4, _omitEnumNames ? '' : 'SDK_CLIENT_ERROR_INTERNAL');
|
||||||
|
|
||||||
|
static const $core.List<SdkClientError> values = <SdkClientError>[
|
||||||
|
SDK_CLIENT_ERROR_UNSPECIFIED,
|
||||||
|
SDK_CLIENT_ERROR_ALREADY_EXISTS,
|
||||||
|
SDK_CLIENT_ERROR_NOT_FOUND,
|
||||||
|
SDK_CLIENT_ERROR_HAS_RELATED_DATA,
|
||||||
|
SDK_CLIENT_ERROR_INTERNAL,
|
||||||
|
];
|
||||||
|
|
||||||
|
static final $core.List<SdkClientError?> _byValue =
|
||||||
|
$pb.ProtobufEnum.$_initByValueList(values, 4);
|
||||||
|
static SdkClientError? valueOf($core.int value) =>
|
||||||
|
value < 0 || value >= _byValue.length ? null : _byValue[value];
|
||||||
|
|
||||||
|
const SdkClientError._(super.value, super.name);
|
||||||
|
}
|
||||||
|
|
||||||
|
class AuthResult extends $pb.ProtobufEnum {
|
||||||
|
static const AuthResult AUTH_RESULT_UNSPECIFIED =
|
||||||
|
AuthResult._(0, _omitEnumNames ? '' : 'AUTH_RESULT_UNSPECIFIED');
|
||||||
|
static const AuthResult AUTH_RESULT_SUCCESS =
|
||||||
|
AuthResult._(1, _omitEnumNames ? '' : 'AUTH_RESULT_SUCCESS');
|
||||||
|
static const AuthResult AUTH_RESULT_INVALID_KEY =
|
||||||
|
AuthResult._(2, _omitEnumNames ? '' : 'AUTH_RESULT_INVALID_KEY');
|
||||||
|
static const AuthResult AUTH_RESULT_INVALID_SIGNATURE =
|
||||||
|
AuthResult._(3, _omitEnumNames ? '' : 'AUTH_RESULT_INVALID_SIGNATURE');
|
||||||
|
static const AuthResult AUTH_RESULT_BOOTSTRAP_REQUIRED =
|
||||||
|
AuthResult._(4, _omitEnumNames ? '' : 'AUTH_RESULT_BOOTSTRAP_REQUIRED');
|
||||||
|
static const AuthResult AUTH_RESULT_TOKEN_INVALID =
|
||||||
|
AuthResult._(5, _omitEnumNames ? '' : 'AUTH_RESULT_TOKEN_INVALID');
|
||||||
|
static const AuthResult AUTH_RESULT_INTERNAL =
|
||||||
|
AuthResult._(6, _omitEnumNames ? '' : 'AUTH_RESULT_INTERNAL');
|
||||||
|
|
||||||
|
static const $core.List<AuthResult> values = <AuthResult>[
|
||||||
|
AUTH_RESULT_UNSPECIFIED,
|
||||||
|
AUTH_RESULT_SUCCESS,
|
||||||
|
AUTH_RESULT_INVALID_KEY,
|
||||||
|
AUTH_RESULT_INVALID_SIGNATURE,
|
||||||
|
AUTH_RESULT_BOOTSTRAP_REQUIRED,
|
||||||
|
AUTH_RESULT_TOKEN_INVALID,
|
||||||
|
AUTH_RESULT_INTERNAL,
|
||||||
|
];
|
||||||
|
|
||||||
|
static final $core.List<AuthResult?> _byValue =
|
||||||
|
$pb.ProtobufEnum.$_initByValueList(values, 6);
|
||||||
|
static AuthResult? valueOf($core.int value) =>
|
||||||
|
value < 0 || value >= _byValue.length ? null : _byValue[value];
|
||||||
|
|
||||||
|
const AuthResult._(super.value, super.name);
|
||||||
|
}
|
||||||
|
|
||||||
|
class UnsealResult extends $pb.ProtobufEnum {
|
||||||
|
static const UnsealResult UNSEAL_RESULT_UNSPECIFIED =
|
||||||
|
UnsealResult._(0, _omitEnumNames ? '' : 'UNSEAL_RESULT_UNSPECIFIED');
|
||||||
|
static const UnsealResult UNSEAL_RESULT_SUCCESS =
|
||||||
|
UnsealResult._(1, _omitEnumNames ? '' : 'UNSEAL_RESULT_SUCCESS');
|
||||||
|
static const UnsealResult UNSEAL_RESULT_INVALID_KEY =
|
||||||
|
UnsealResult._(2, _omitEnumNames ? '' : 'UNSEAL_RESULT_INVALID_KEY');
|
||||||
|
static const UnsealResult UNSEAL_RESULT_UNBOOTSTRAPPED =
|
||||||
|
UnsealResult._(3, _omitEnumNames ? '' : 'UNSEAL_RESULT_UNBOOTSTRAPPED');
|
||||||
|
|
||||||
|
static const $core.List<UnsealResult> values = <UnsealResult>[
|
||||||
|
UNSEAL_RESULT_UNSPECIFIED,
|
||||||
|
UNSEAL_RESULT_SUCCESS,
|
||||||
|
UNSEAL_RESULT_INVALID_KEY,
|
||||||
|
UNSEAL_RESULT_UNBOOTSTRAPPED,
|
||||||
|
];
|
||||||
|
|
||||||
|
static final $core.List<UnsealResult?> _byValue =
|
||||||
|
$pb.ProtobufEnum.$_initByValueList(values, 3);
|
||||||
|
static UnsealResult? valueOf($core.int value) =>
|
||||||
|
value < 0 || value >= _byValue.length ? null : _byValue[value];
|
||||||
|
|
||||||
|
const UnsealResult._(super.value, super.name);
|
||||||
|
}
|
||||||
|
|
||||||
|
class BootstrapResult extends $pb.ProtobufEnum {
|
||||||
|
static const BootstrapResult BOOTSTRAP_RESULT_UNSPECIFIED = BootstrapResult._(
|
||||||
|
0, _omitEnumNames ? '' : 'BOOTSTRAP_RESULT_UNSPECIFIED');
|
||||||
|
static const BootstrapResult BOOTSTRAP_RESULT_SUCCESS =
|
||||||
|
BootstrapResult._(1, _omitEnumNames ? '' : 'BOOTSTRAP_RESULT_SUCCESS');
|
||||||
|
static const BootstrapResult BOOTSTRAP_RESULT_ALREADY_BOOTSTRAPPED =
|
||||||
|
BootstrapResult._(
|
||||||
|
2, _omitEnumNames ? '' : 'BOOTSTRAP_RESULT_ALREADY_BOOTSTRAPPED');
|
||||||
|
static const BootstrapResult BOOTSTRAP_RESULT_INVALID_KEY = BootstrapResult._(
|
||||||
|
3, _omitEnumNames ? '' : 'BOOTSTRAP_RESULT_INVALID_KEY');
|
||||||
|
|
||||||
|
static const $core.List<BootstrapResult> values = <BootstrapResult>[
|
||||||
|
BOOTSTRAP_RESULT_UNSPECIFIED,
|
||||||
|
BOOTSTRAP_RESULT_SUCCESS,
|
||||||
|
BOOTSTRAP_RESULT_ALREADY_BOOTSTRAPPED,
|
||||||
|
BOOTSTRAP_RESULT_INVALID_KEY,
|
||||||
|
];
|
||||||
|
|
||||||
|
static final $core.List<BootstrapResult?> _byValue =
|
||||||
|
$pb.ProtobufEnum.$_initByValueList(values, 3);
|
||||||
|
static BootstrapResult? valueOf($core.int value) =>
|
||||||
|
value < 0 || value >= _byValue.length ? null : _byValue[value];
|
||||||
|
|
||||||
|
const BootstrapResult._(super.value, super.name);
|
||||||
|
}
|
||||||
|
|
||||||
|
class VaultState extends $pb.ProtobufEnum {
|
||||||
|
static const VaultState VAULT_STATE_UNSPECIFIED =
|
||||||
|
VaultState._(0, _omitEnumNames ? '' : 'VAULT_STATE_UNSPECIFIED');
|
||||||
|
static const VaultState VAULT_STATE_UNBOOTSTRAPPED =
|
||||||
|
VaultState._(1, _omitEnumNames ? '' : 'VAULT_STATE_UNBOOTSTRAPPED');
|
||||||
|
static const VaultState VAULT_STATE_SEALED =
|
||||||
|
VaultState._(2, _omitEnumNames ? '' : 'VAULT_STATE_SEALED');
|
||||||
|
static const VaultState VAULT_STATE_UNSEALED =
|
||||||
|
VaultState._(3, _omitEnumNames ? '' : 'VAULT_STATE_UNSEALED');
|
||||||
|
static const VaultState VAULT_STATE_ERROR =
|
||||||
|
VaultState._(4, _omitEnumNames ? '' : 'VAULT_STATE_ERROR');
|
||||||
|
|
||||||
|
static const $core.List<VaultState> values = <VaultState>[
|
||||||
|
VAULT_STATE_UNSPECIFIED,
|
||||||
|
VAULT_STATE_UNBOOTSTRAPPED,
|
||||||
|
VAULT_STATE_SEALED,
|
||||||
|
VAULT_STATE_UNSEALED,
|
||||||
|
VAULT_STATE_ERROR,
|
||||||
|
];
|
||||||
|
|
||||||
|
static final $core.List<VaultState?> _byValue =
|
||||||
|
$pb.ProtobufEnum.$_initByValueList(values, 4);
|
||||||
|
static VaultState? valueOf($core.int value) =>
|
||||||
|
value < 0 || value >= _byValue.length ? null : _byValue[value];
|
||||||
|
|
||||||
|
const VaultState._(super.value, super.name);
|
||||||
|
}
|
||||||
|
|
||||||
|
const $core.bool _omitEnumNames =
|
||||||
|
$core.bool.fromEnvironment('protobuf.omit_enum_names');
|
||||||
|
|||||||
@@ -15,46 +15,657 @@ import 'dart:convert' as $convert;
|
|||||||
import 'dart:core' as $core;
|
import 'dart:core' as $core;
|
||||||
import 'dart:typed_data' as $typed_data;
|
import 'dart:typed_data' as $typed_data;
|
||||||
|
|
||||||
|
@$core.Deprecated('Use keyTypeDescriptor instead')
|
||||||
|
const KeyType$json = {
|
||||||
|
'1': 'KeyType',
|
||||||
|
'2': [
|
||||||
|
{'1': 'KEY_TYPE_UNSPECIFIED', '2': 0},
|
||||||
|
{'1': 'KEY_TYPE_ED25519', '2': 1},
|
||||||
|
{'1': 'KEY_TYPE_ECDSA_SECP256K1', '2': 2},
|
||||||
|
{'1': 'KEY_TYPE_RSA', '2': 3},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Descriptor for `KeyType`. Decode as a `google.protobuf.EnumDescriptorProto`.
|
||||||
|
final $typed_data.Uint8List keyTypeDescriptor = $convert.base64Decode(
|
||||||
|
'CgdLZXlUeXBlEhgKFEtFWV9UWVBFX1VOU1BFQ0lGSUVEEAASFAoQS0VZX1RZUEVfRUQyNTUxOR'
|
||||||
|
'ABEhwKGEtFWV9UWVBFX0VDRFNBX1NFQ1AyNTZLMRACEhAKDEtFWV9UWVBFX1JTQRAD');
|
||||||
|
|
||||||
|
@$core.Deprecated('Use sdkClientErrorDescriptor instead')
|
||||||
|
const SdkClientError$json = {
|
||||||
|
'1': 'SdkClientError',
|
||||||
|
'2': [
|
||||||
|
{'1': 'SDK_CLIENT_ERROR_UNSPECIFIED', '2': 0},
|
||||||
|
{'1': 'SDK_CLIENT_ERROR_ALREADY_EXISTS', '2': 1},
|
||||||
|
{'1': 'SDK_CLIENT_ERROR_NOT_FOUND', '2': 2},
|
||||||
|
{'1': 'SDK_CLIENT_ERROR_HAS_RELATED_DATA', '2': 3},
|
||||||
|
{'1': 'SDK_CLIENT_ERROR_INTERNAL', '2': 4},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Descriptor for `SdkClientError`. Decode as a `google.protobuf.EnumDescriptorProto`.
|
||||||
|
final $typed_data.Uint8List sdkClientErrorDescriptor = $convert.base64Decode(
|
||||||
|
'Cg5TZGtDbGllbnRFcnJvchIgChxTREtfQ0xJRU5UX0VSUk9SX1VOU1BFQ0lGSUVEEAASIwofU0'
|
||||||
|
'RLX0NMSUVOVF9FUlJPUl9BTFJFQURZX0VYSVNUUxABEh4KGlNES19DTElFTlRfRVJST1JfTk9U'
|
||||||
|
'X0ZPVU5EEAISJQohU0RLX0NMSUVOVF9FUlJPUl9IQVNfUkVMQVRFRF9EQVRBEAMSHQoZU0RLX0'
|
||||||
|
'NMSUVOVF9FUlJPUl9JTlRFUk5BTBAE');
|
||||||
|
|
||||||
|
@$core.Deprecated('Use authResultDescriptor instead')
|
||||||
|
const AuthResult$json = {
|
||||||
|
'1': 'AuthResult',
|
||||||
|
'2': [
|
||||||
|
{'1': 'AUTH_RESULT_UNSPECIFIED', '2': 0},
|
||||||
|
{'1': 'AUTH_RESULT_SUCCESS', '2': 1},
|
||||||
|
{'1': 'AUTH_RESULT_INVALID_KEY', '2': 2},
|
||||||
|
{'1': 'AUTH_RESULT_INVALID_SIGNATURE', '2': 3},
|
||||||
|
{'1': 'AUTH_RESULT_BOOTSTRAP_REQUIRED', '2': 4},
|
||||||
|
{'1': 'AUTH_RESULT_TOKEN_INVALID', '2': 5},
|
||||||
|
{'1': 'AUTH_RESULT_INTERNAL', '2': 6},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Descriptor for `AuthResult`. Decode as a `google.protobuf.EnumDescriptorProto`.
|
||||||
|
final $typed_data.Uint8List authResultDescriptor = $convert.base64Decode(
|
||||||
|
'CgpBdXRoUmVzdWx0EhsKF0FVVEhfUkVTVUxUX1VOU1BFQ0lGSUVEEAASFwoTQVVUSF9SRVNVTF'
|
||||||
|
'RfU1VDQ0VTUxABEhsKF0FVVEhfUkVTVUxUX0lOVkFMSURfS0VZEAISIQodQVVUSF9SRVNVTFRf'
|
||||||
|
'SU5WQUxJRF9TSUdOQVRVUkUQAxIiCh5BVVRIX1JFU1VMVF9CT09UU1RSQVBfUkVRVUlSRUQQBB'
|
||||||
|
'IdChlBVVRIX1JFU1VMVF9UT0tFTl9JTlZBTElEEAUSGAoUQVVUSF9SRVNVTFRfSU5URVJOQUwQ'
|
||||||
|
'Bg==');
|
||||||
|
|
||||||
|
@$core.Deprecated('Use unsealResultDescriptor instead')
|
||||||
|
const UnsealResult$json = {
|
||||||
|
'1': 'UnsealResult',
|
||||||
|
'2': [
|
||||||
|
{'1': 'UNSEAL_RESULT_UNSPECIFIED', '2': 0},
|
||||||
|
{'1': 'UNSEAL_RESULT_SUCCESS', '2': 1},
|
||||||
|
{'1': 'UNSEAL_RESULT_INVALID_KEY', '2': 2},
|
||||||
|
{'1': 'UNSEAL_RESULT_UNBOOTSTRAPPED', '2': 3},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Descriptor for `UnsealResult`. Decode as a `google.protobuf.EnumDescriptorProto`.
|
||||||
|
final $typed_data.Uint8List unsealResultDescriptor = $convert.base64Decode(
|
||||||
|
'CgxVbnNlYWxSZXN1bHQSHQoZVU5TRUFMX1JFU1VMVF9VTlNQRUNJRklFRBAAEhkKFVVOU0VBTF'
|
||||||
|
'9SRVNVTFRfU1VDQ0VTUxABEh0KGVVOU0VBTF9SRVNVTFRfSU5WQUxJRF9LRVkQAhIgChxVTlNF'
|
||||||
|
'QUxfUkVTVUxUX1VOQk9PVFNUUkFQUEVEEAM=');
|
||||||
|
|
||||||
|
@$core.Deprecated('Use bootstrapResultDescriptor instead')
|
||||||
|
const BootstrapResult$json = {
|
||||||
|
'1': 'BootstrapResult',
|
||||||
|
'2': [
|
||||||
|
{'1': 'BOOTSTRAP_RESULT_UNSPECIFIED', '2': 0},
|
||||||
|
{'1': 'BOOTSTRAP_RESULT_SUCCESS', '2': 1},
|
||||||
|
{'1': 'BOOTSTRAP_RESULT_ALREADY_BOOTSTRAPPED', '2': 2},
|
||||||
|
{'1': 'BOOTSTRAP_RESULT_INVALID_KEY', '2': 3},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Descriptor for `BootstrapResult`. Decode as a `google.protobuf.EnumDescriptorProto`.
|
||||||
|
final $typed_data.Uint8List bootstrapResultDescriptor = $convert.base64Decode(
|
||||||
|
'Cg9Cb290c3RyYXBSZXN1bHQSIAocQk9PVFNUUkFQX1JFU1VMVF9VTlNQRUNJRklFRBAAEhwKGE'
|
||||||
|
'JPT1RTVFJBUF9SRVNVTFRfU1VDQ0VTUxABEikKJUJPT1RTVFJBUF9SRVNVTFRfQUxSRUFEWV9C'
|
||||||
|
'T09UU1RSQVBQRUQQAhIgChxCT09UU1RSQVBfUkVTVUxUX0lOVkFMSURfS0VZEAM=');
|
||||||
|
|
||||||
|
@$core.Deprecated('Use vaultStateDescriptor instead')
|
||||||
|
const VaultState$json = {
|
||||||
|
'1': 'VaultState',
|
||||||
|
'2': [
|
||||||
|
{'1': 'VAULT_STATE_UNSPECIFIED', '2': 0},
|
||||||
|
{'1': 'VAULT_STATE_UNBOOTSTRAPPED', '2': 1},
|
||||||
|
{'1': 'VAULT_STATE_SEALED', '2': 2},
|
||||||
|
{'1': 'VAULT_STATE_UNSEALED', '2': 3},
|
||||||
|
{'1': 'VAULT_STATE_ERROR', '2': 4},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Descriptor for `VaultState`. Decode as a `google.protobuf.EnumDescriptorProto`.
|
||||||
|
final $typed_data.Uint8List vaultStateDescriptor = $convert.base64Decode(
|
||||||
|
'CgpWYXVsdFN0YXRlEhsKF1ZBVUxUX1NUQVRFX1VOU1BFQ0lGSUVEEAASHgoaVkFVTFRfU1RBVE'
|
||||||
|
'VfVU5CT09UU1RSQVBQRUQQARIWChJWQVVMVF9TVEFURV9TRUFMRUQQAhIYChRWQVVMVF9TVEFU'
|
||||||
|
'RV9VTlNFQUxFRBADEhUKEVZBVUxUX1NUQVRFX0VSUk9SEAQ=');
|
||||||
|
|
||||||
|
@$core.Deprecated('Use sdkClientRevokeRequestDescriptor instead')
|
||||||
|
const SdkClientRevokeRequest$json = {
|
||||||
|
'1': 'SdkClientRevokeRequest',
|
||||||
|
'2': [
|
||||||
|
{'1': 'client_id', '3': 1, '4': 1, '5': 5, '10': 'clientId'},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Descriptor for `SdkClientRevokeRequest`. Decode as a `google.protobuf.DescriptorProto`.
|
||||||
|
final $typed_data.Uint8List sdkClientRevokeRequestDescriptor =
|
||||||
|
$convert.base64Decode(
|
||||||
|
'ChZTZGtDbGllbnRSZXZva2VSZXF1ZXN0EhsKCWNsaWVudF9pZBgBIAEoBVIIY2xpZW50SWQ=');
|
||||||
|
|
||||||
|
@$core.Deprecated('Use sdkClientEntryDescriptor instead')
|
||||||
|
const SdkClientEntry$json = {
|
||||||
|
'1': 'SdkClientEntry',
|
||||||
|
'2': [
|
||||||
|
{'1': 'id', '3': 1, '4': 1, '5': 5, '10': 'id'},
|
||||||
|
{'1': 'pubkey', '3': 2, '4': 1, '5': 12, '10': 'pubkey'},
|
||||||
|
{
|
||||||
|
'1': 'info',
|
||||||
|
'3': 3,
|
||||||
|
'4': 1,
|
||||||
|
'5': 11,
|
||||||
|
'6': '.arbiter.client.ClientInfo',
|
||||||
|
'10': 'info'
|
||||||
|
},
|
||||||
|
{'1': 'created_at', '3': 4, '4': 1, '5': 5, '10': 'createdAt'},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Descriptor for `SdkClientEntry`. Decode as a `google.protobuf.DescriptorProto`.
|
||||||
|
final $typed_data.Uint8List sdkClientEntryDescriptor = $convert.base64Decode(
|
||||||
|
'Cg5TZGtDbGllbnRFbnRyeRIOCgJpZBgBIAEoBVICaWQSFgoGcHVia2V5GAIgASgMUgZwdWJrZX'
|
||||||
|
'kSLgoEaW5mbxgDIAEoCzIaLmFyYml0ZXIuY2xpZW50LkNsaWVudEluZm9SBGluZm8SHQoKY3Jl'
|
||||||
|
'YXRlZF9hdBgEIAEoBVIJY3JlYXRlZEF0');
|
||||||
|
|
||||||
|
@$core.Deprecated('Use sdkClientListDescriptor instead')
|
||||||
|
const SdkClientList$json = {
|
||||||
|
'1': 'SdkClientList',
|
||||||
|
'2': [
|
||||||
|
{
|
||||||
|
'1': 'clients',
|
||||||
|
'3': 1,
|
||||||
|
'4': 3,
|
||||||
|
'5': 11,
|
||||||
|
'6': '.arbiter.user_agent.SdkClientEntry',
|
||||||
|
'10': 'clients'
|
||||||
|
},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Descriptor for `SdkClientList`. Decode as a `google.protobuf.DescriptorProto`.
|
||||||
|
final $typed_data.Uint8List sdkClientListDescriptor = $convert.base64Decode(
|
||||||
|
'Cg1TZGtDbGllbnRMaXN0EjwKB2NsaWVudHMYASADKAsyIi5hcmJpdGVyLnVzZXJfYWdlbnQuU2'
|
||||||
|
'RrQ2xpZW50RW50cnlSB2NsaWVudHM=');
|
||||||
|
|
||||||
|
@$core.Deprecated('Use sdkClientRevokeResponseDescriptor instead')
|
||||||
|
const SdkClientRevokeResponse$json = {
|
||||||
|
'1': 'SdkClientRevokeResponse',
|
||||||
|
'2': [
|
||||||
|
{
|
||||||
|
'1': 'ok',
|
||||||
|
'3': 1,
|
||||||
|
'4': 1,
|
||||||
|
'5': 11,
|
||||||
|
'6': '.google.protobuf.Empty',
|
||||||
|
'9': 0,
|
||||||
|
'10': 'ok'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'1': 'error',
|
||||||
|
'3': 2,
|
||||||
|
'4': 1,
|
||||||
|
'5': 14,
|
||||||
|
'6': '.arbiter.user_agent.SdkClientError',
|
||||||
|
'9': 0,
|
||||||
|
'10': 'error'
|
||||||
|
},
|
||||||
|
],
|
||||||
|
'8': [
|
||||||
|
{'1': 'result'},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Descriptor for `SdkClientRevokeResponse`. Decode as a `google.protobuf.DescriptorProto`.
|
||||||
|
final $typed_data.Uint8List sdkClientRevokeResponseDescriptor = $convert.base64Decode(
|
||||||
|
'ChdTZGtDbGllbnRSZXZva2VSZXNwb25zZRIoCgJvaxgBIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi'
|
||||||
|
'5FbXB0eUgAUgJvaxI6CgVlcnJvchgCIAEoDjIiLmFyYml0ZXIudXNlcl9hZ2VudC5TZGtDbGll'
|
||||||
|
'bnRFcnJvckgAUgVlcnJvckIICgZyZXN1bHQ=');
|
||||||
|
|
||||||
|
@$core.Deprecated('Use sdkClientListResponseDescriptor instead')
|
||||||
|
const SdkClientListResponse$json = {
|
||||||
|
'1': 'SdkClientListResponse',
|
||||||
|
'2': [
|
||||||
|
{
|
||||||
|
'1': 'clients',
|
||||||
|
'3': 1,
|
||||||
|
'4': 1,
|
||||||
|
'5': 11,
|
||||||
|
'6': '.arbiter.user_agent.SdkClientList',
|
||||||
|
'9': 0,
|
||||||
|
'10': 'clients'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'1': 'error',
|
||||||
|
'3': 2,
|
||||||
|
'4': 1,
|
||||||
|
'5': 14,
|
||||||
|
'6': '.arbiter.user_agent.SdkClientError',
|
||||||
|
'9': 0,
|
||||||
|
'10': 'error'
|
||||||
|
},
|
||||||
|
],
|
||||||
|
'8': [
|
||||||
|
{'1': 'result'},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Descriptor for `SdkClientListResponse`. Decode as a `google.protobuf.DescriptorProto`.
|
||||||
|
final $typed_data.Uint8List sdkClientListResponseDescriptor = $convert.base64Decode(
|
||||||
|
'ChVTZGtDbGllbnRMaXN0UmVzcG9uc2USPQoHY2xpZW50cxgBIAEoCzIhLmFyYml0ZXIudXNlcl'
|
||||||
|
'9hZ2VudC5TZGtDbGllbnRMaXN0SABSB2NsaWVudHMSOgoFZXJyb3IYAiABKA4yIi5hcmJpdGVy'
|
||||||
|
'LnVzZXJfYWdlbnQuU2RrQ2xpZW50RXJyb3JIAFIFZXJyb3JCCAoGcmVzdWx0');
|
||||||
|
|
||||||
|
@$core.Deprecated('Use authChallengeRequestDescriptor instead')
|
||||||
|
const AuthChallengeRequest$json = {
|
||||||
|
'1': 'AuthChallengeRequest',
|
||||||
|
'2': [
|
||||||
|
{'1': 'pubkey', '3': 1, '4': 1, '5': 12, '10': 'pubkey'},
|
||||||
|
{
|
||||||
|
'1': 'bootstrap_token',
|
||||||
|
'3': 2,
|
||||||
|
'4': 1,
|
||||||
|
'5': 9,
|
||||||
|
'9': 0,
|
||||||
|
'10': 'bootstrapToken',
|
||||||
|
'17': true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'1': 'key_type',
|
||||||
|
'3': 3,
|
||||||
|
'4': 1,
|
||||||
|
'5': 14,
|
||||||
|
'6': '.arbiter.user_agent.KeyType',
|
||||||
|
'10': 'keyType'
|
||||||
|
},
|
||||||
|
],
|
||||||
|
'8': [
|
||||||
|
{'1': '_bootstrap_token'},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Descriptor for `AuthChallengeRequest`. Decode as a `google.protobuf.DescriptorProto`.
|
||||||
|
final $typed_data.Uint8List authChallengeRequestDescriptor = $convert.base64Decode(
|
||||||
|
'ChRBdXRoQ2hhbGxlbmdlUmVxdWVzdBIWCgZwdWJrZXkYASABKAxSBnB1YmtleRIsCg9ib290c3'
|
||||||
|
'RyYXBfdG9rZW4YAiABKAlIAFIOYm9vdHN0cmFwVG9rZW6IAQESNgoIa2V5X3R5cGUYAyABKA4y'
|
||||||
|
'Gy5hcmJpdGVyLnVzZXJfYWdlbnQuS2V5VHlwZVIHa2V5VHlwZUISChBfYm9vdHN0cmFwX3Rva2'
|
||||||
|
'Vu');
|
||||||
|
|
||||||
|
@$core.Deprecated('Use authChallengeDescriptor instead')
|
||||||
|
const AuthChallenge$json = {
|
||||||
|
'1': 'AuthChallenge',
|
||||||
|
'2': [
|
||||||
|
{'1': 'nonce', '3': 2, '4': 1, '5': 5, '10': 'nonce'},
|
||||||
|
],
|
||||||
|
'9': [
|
||||||
|
{'1': 1, '2': 2},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Descriptor for `AuthChallenge`. Decode as a `google.protobuf.DescriptorProto`.
|
||||||
|
final $typed_data.Uint8List authChallengeDescriptor = $convert.base64Decode(
|
||||||
|
'Cg1BdXRoQ2hhbGxlbmdlEhQKBW5vbmNlGAIgASgFUgVub25jZUoECAEQAg==');
|
||||||
|
|
||||||
|
@$core.Deprecated('Use authChallengeSolutionDescriptor instead')
|
||||||
|
const AuthChallengeSolution$json = {
|
||||||
|
'1': 'AuthChallengeSolution',
|
||||||
|
'2': [
|
||||||
|
{'1': 'signature', '3': 1, '4': 1, '5': 12, '10': 'signature'},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Descriptor for `AuthChallengeSolution`. Decode as a `google.protobuf.DescriptorProto`.
|
||||||
|
final $typed_data.Uint8List authChallengeSolutionDescriptor = $convert.base64Decode(
|
||||||
|
'ChVBdXRoQ2hhbGxlbmdlU29sdXRpb24SHAoJc2lnbmF0dXJlGAEgASgMUglzaWduYXR1cmU=');
|
||||||
|
|
||||||
|
@$core.Deprecated('Use unsealStartDescriptor instead')
|
||||||
|
const UnsealStart$json = {
|
||||||
|
'1': 'UnsealStart',
|
||||||
|
'2': [
|
||||||
|
{'1': 'client_pubkey', '3': 1, '4': 1, '5': 12, '10': 'clientPubkey'},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Descriptor for `UnsealStart`. Decode as a `google.protobuf.DescriptorProto`.
|
||||||
|
final $typed_data.Uint8List unsealStartDescriptor = $convert.base64Decode(
|
||||||
|
'CgtVbnNlYWxTdGFydBIjCg1jbGllbnRfcHVia2V5GAEgASgMUgxjbGllbnRQdWJrZXk=');
|
||||||
|
|
||||||
|
@$core.Deprecated('Use unsealStartResponseDescriptor instead')
|
||||||
|
const UnsealStartResponse$json = {
|
||||||
|
'1': 'UnsealStartResponse',
|
||||||
|
'2': [
|
||||||
|
{'1': 'server_pubkey', '3': 1, '4': 1, '5': 12, '10': 'serverPubkey'},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Descriptor for `UnsealStartResponse`. Decode as a `google.protobuf.DescriptorProto`.
|
||||||
|
final $typed_data.Uint8List unsealStartResponseDescriptor = $convert.base64Decode(
|
||||||
|
'ChNVbnNlYWxTdGFydFJlc3BvbnNlEiMKDXNlcnZlcl9wdWJrZXkYASABKAxSDHNlcnZlclB1Ym'
|
||||||
|
'tleQ==');
|
||||||
|
|
||||||
|
@$core.Deprecated('Use unsealEncryptedKeyDescriptor instead')
|
||||||
|
const UnsealEncryptedKey$json = {
|
||||||
|
'1': 'UnsealEncryptedKey',
|
||||||
|
'2': [
|
||||||
|
{'1': 'nonce', '3': 1, '4': 1, '5': 12, '10': 'nonce'},
|
||||||
|
{'1': 'ciphertext', '3': 2, '4': 1, '5': 12, '10': 'ciphertext'},
|
||||||
|
{'1': 'associated_data', '3': 3, '4': 1, '5': 12, '10': 'associatedData'},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Descriptor for `UnsealEncryptedKey`. Decode as a `google.protobuf.DescriptorProto`.
|
||||||
|
final $typed_data.Uint8List unsealEncryptedKeyDescriptor = $convert.base64Decode(
|
||||||
|
'ChJVbnNlYWxFbmNyeXB0ZWRLZXkSFAoFbm9uY2UYASABKAxSBW5vbmNlEh4KCmNpcGhlcnRleH'
|
||||||
|
'QYAiABKAxSCmNpcGhlcnRleHQSJwoPYXNzb2NpYXRlZF9kYXRhGAMgASgMUg5hc3NvY2lhdGVk'
|
||||||
|
'RGF0YQ==');
|
||||||
|
|
||||||
|
@$core.Deprecated('Use bootstrapEncryptedKeyDescriptor instead')
|
||||||
|
const BootstrapEncryptedKey$json = {
|
||||||
|
'1': 'BootstrapEncryptedKey',
|
||||||
|
'2': [
|
||||||
|
{'1': 'nonce', '3': 1, '4': 1, '5': 12, '10': 'nonce'},
|
||||||
|
{'1': 'ciphertext', '3': 2, '4': 1, '5': 12, '10': 'ciphertext'},
|
||||||
|
{'1': 'associated_data', '3': 3, '4': 1, '5': 12, '10': 'associatedData'},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Descriptor for `BootstrapEncryptedKey`. Decode as a `google.protobuf.DescriptorProto`.
|
||||||
|
final $typed_data.Uint8List bootstrapEncryptedKeyDescriptor = $convert.base64Decode(
|
||||||
|
'ChVCb290c3RyYXBFbmNyeXB0ZWRLZXkSFAoFbm9uY2UYASABKAxSBW5vbmNlEh4KCmNpcGhlcn'
|
||||||
|
'RleHQYAiABKAxSCmNpcGhlcnRleHQSJwoPYXNzb2NpYXRlZF9kYXRhGAMgASgMUg5hc3NvY2lh'
|
||||||
|
'dGVkRGF0YQ==');
|
||||||
|
|
||||||
|
@$core.Deprecated('Use sdkClientConnectionRequestDescriptor instead')
|
||||||
|
const SdkClientConnectionRequest$json = {
|
||||||
|
'1': 'SdkClientConnectionRequest',
|
||||||
|
'2': [
|
||||||
|
{'1': 'pubkey', '3': 1, '4': 1, '5': 12, '10': 'pubkey'},
|
||||||
|
{
|
||||||
|
'1': 'info',
|
||||||
|
'3': 2,
|
||||||
|
'4': 1,
|
||||||
|
'5': 11,
|
||||||
|
'6': '.arbiter.client.ClientInfo',
|
||||||
|
'10': 'info'
|
||||||
|
},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Descriptor for `SdkClientConnectionRequest`. Decode as a `google.protobuf.DescriptorProto`.
|
||||||
|
final $typed_data.Uint8List sdkClientConnectionRequestDescriptor =
|
||||||
|
$convert.base64Decode(
|
||||||
|
'ChpTZGtDbGllbnRDb25uZWN0aW9uUmVxdWVzdBIWCgZwdWJrZXkYASABKAxSBnB1YmtleRIuCg'
|
||||||
|
'RpbmZvGAIgASgLMhouYXJiaXRlci5jbGllbnQuQ2xpZW50SW5mb1IEaW5mbw==');
|
||||||
|
|
||||||
|
@$core.Deprecated('Use sdkClientConnectionResponseDescriptor instead')
|
||||||
|
const SdkClientConnectionResponse$json = {
|
||||||
|
'1': 'SdkClientConnectionResponse',
|
||||||
|
'2': [
|
||||||
|
{'1': 'approved', '3': 1, '4': 1, '5': 8, '10': 'approved'},
|
||||||
|
{'1': 'pubkey', '3': 2, '4': 1, '5': 12, '10': 'pubkey'},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Descriptor for `SdkClientConnectionResponse`. Decode as a `google.protobuf.DescriptorProto`.
|
||||||
|
final $typed_data.Uint8List sdkClientConnectionResponseDescriptor =
|
||||||
|
$convert.base64Decode(
|
||||||
|
'ChtTZGtDbGllbnRDb25uZWN0aW9uUmVzcG9uc2USGgoIYXBwcm92ZWQYASABKAhSCGFwcHJvdm'
|
||||||
|
'VkEhYKBnB1YmtleRgCIAEoDFIGcHVia2V5');
|
||||||
|
|
||||||
|
@$core.Deprecated('Use sdkClientConnectionCancelDescriptor instead')
|
||||||
|
const SdkClientConnectionCancel$json = {
|
||||||
|
'1': 'SdkClientConnectionCancel',
|
||||||
|
'2': [
|
||||||
|
{'1': 'pubkey', '3': 1, '4': 1, '5': 12, '10': 'pubkey'},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Descriptor for `SdkClientConnectionCancel`. Decode as a `google.protobuf.DescriptorProto`.
|
||||||
|
final $typed_data.Uint8List sdkClientConnectionCancelDescriptor =
|
||||||
|
$convert.base64Decode(
|
||||||
|
'ChlTZGtDbGllbnRDb25uZWN0aW9uQ2FuY2VsEhYKBnB1YmtleRgBIAEoDFIGcHVia2V5');
|
||||||
|
|
||||||
|
@$core.Deprecated('Use walletAccessDescriptor instead')
|
||||||
|
const WalletAccess$json = {
|
||||||
|
'1': 'WalletAccess',
|
||||||
|
'2': [
|
||||||
|
{'1': 'wallet_id', '3': 1, '4': 1, '5': 5, '10': 'walletId'},
|
||||||
|
{'1': 'sdk_client_id', '3': 2, '4': 1, '5': 5, '10': 'sdkClientId'},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Descriptor for `WalletAccess`. Decode as a `google.protobuf.DescriptorProto`.
|
||||||
|
final $typed_data.Uint8List walletAccessDescriptor = $convert.base64Decode(
|
||||||
|
'CgxXYWxsZXRBY2Nlc3MSGwoJd2FsbGV0X2lkGAEgASgFUgh3YWxsZXRJZBIiCg1zZGtfY2xpZW'
|
||||||
|
'50X2lkGAIgASgFUgtzZGtDbGllbnRJZA==');
|
||||||
|
|
||||||
|
@$core.Deprecated('Use sdkClientWalletAccessDescriptor instead')
|
||||||
|
const SdkClientWalletAccess$json = {
|
||||||
|
'1': 'SdkClientWalletAccess',
|
||||||
|
'2': [
|
||||||
|
{'1': 'id', '3': 1, '4': 1, '5': 5, '10': 'id'},
|
||||||
|
{
|
||||||
|
'1': 'access',
|
||||||
|
'3': 2,
|
||||||
|
'4': 1,
|
||||||
|
'5': 11,
|
||||||
|
'6': '.arbiter.user_agent.WalletAccess',
|
||||||
|
'10': 'access'
|
||||||
|
},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Descriptor for `SdkClientWalletAccess`. Decode as a `google.protobuf.DescriptorProto`.
|
||||||
|
final $typed_data.Uint8List sdkClientWalletAccessDescriptor = $convert.base64Decode(
|
||||||
|
'ChVTZGtDbGllbnRXYWxsZXRBY2Nlc3MSDgoCaWQYASABKAVSAmlkEjgKBmFjY2VzcxgCIAEoCz'
|
||||||
|
'IgLmFyYml0ZXIudXNlcl9hZ2VudC5XYWxsZXRBY2Nlc3NSBmFjY2Vzcw==');
|
||||||
|
|
||||||
|
@$core.Deprecated('Use sdkClientGrantWalletAccessDescriptor instead')
|
||||||
|
const SdkClientGrantWalletAccess$json = {
|
||||||
|
'1': 'SdkClientGrantWalletAccess',
|
||||||
|
'2': [
|
||||||
|
{
|
||||||
|
'1': 'accesses',
|
||||||
|
'3': 1,
|
||||||
|
'4': 3,
|
||||||
|
'5': 11,
|
||||||
|
'6': '.arbiter.user_agent.WalletAccess',
|
||||||
|
'10': 'accesses'
|
||||||
|
},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Descriptor for `SdkClientGrantWalletAccess`. Decode as a `google.protobuf.DescriptorProto`.
|
||||||
|
final $typed_data.Uint8List sdkClientGrantWalletAccessDescriptor =
|
||||||
|
$convert.base64Decode(
|
||||||
|
'ChpTZGtDbGllbnRHcmFudFdhbGxldEFjY2VzcxI8CghhY2Nlc3NlcxgBIAMoCzIgLmFyYml0ZX'
|
||||||
|
'IudXNlcl9hZ2VudC5XYWxsZXRBY2Nlc3NSCGFjY2Vzc2Vz');
|
||||||
|
|
||||||
|
@$core.Deprecated('Use sdkClientRevokeWalletAccessDescriptor instead')
|
||||||
|
const SdkClientRevokeWalletAccess$json = {
|
||||||
|
'1': 'SdkClientRevokeWalletAccess',
|
||||||
|
'2': [
|
||||||
|
{'1': 'accesses', '3': 1, '4': 3, '5': 5, '10': 'accesses'},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Descriptor for `SdkClientRevokeWalletAccess`. Decode as a `google.protobuf.DescriptorProto`.
|
||||||
|
final $typed_data.Uint8List sdkClientRevokeWalletAccessDescriptor =
|
||||||
|
$convert.base64Decode(
|
||||||
|
'ChtTZGtDbGllbnRSZXZva2VXYWxsZXRBY2Nlc3MSGgoIYWNjZXNzZXMYASADKAVSCGFjY2Vzc2'
|
||||||
|
'Vz');
|
||||||
|
|
||||||
|
@$core.Deprecated('Use listWalletAccessResponseDescriptor instead')
|
||||||
|
const ListWalletAccessResponse$json = {
|
||||||
|
'1': 'ListWalletAccessResponse',
|
||||||
|
'2': [
|
||||||
|
{
|
||||||
|
'1': 'accesses',
|
||||||
|
'3': 1,
|
||||||
|
'4': 3,
|
||||||
|
'5': 11,
|
||||||
|
'6': '.arbiter.user_agent.SdkClientWalletAccess',
|
||||||
|
'10': 'accesses'
|
||||||
|
},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Descriptor for `ListWalletAccessResponse`. Decode as a `google.protobuf.DescriptorProto`.
|
||||||
|
final $typed_data.Uint8List listWalletAccessResponseDescriptor =
|
||||||
|
$convert.base64Decode(
|
||||||
|
'ChhMaXN0V2FsbGV0QWNjZXNzUmVzcG9uc2USRQoIYWNjZXNzZXMYASADKAsyKS5hcmJpdGVyLn'
|
||||||
|
'VzZXJfYWdlbnQuU2RrQ2xpZW50V2FsbGV0QWNjZXNzUghhY2Nlc3Nlcw==');
|
||||||
|
|
||||||
@$core.Deprecated('Use userAgentRequestDescriptor instead')
|
@$core.Deprecated('Use userAgentRequestDescriptor instead')
|
||||||
const UserAgentRequest$json = {
|
const UserAgentRequest$json = {
|
||||||
'1': 'UserAgentRequest',
|
'1': 'UserAgentRequest',
|
||||||
'2': [
|
'2': [
|
||||||
{'1': 'id', '3': 16, '4': 1, '5': 5, '10': 'id'},
|
{'1': 'id', '3': 16, '4': 1, '5': 5, '10': 'id'},
|
||||||
{
|
{
|
||||||
'1': 'auth',
|
'1': 'auth_challenge_request',
|
||||||
'3': 1,
|
'3': 1,
|
||||||
'4': 1,
|
'4': 1,
|
||||||
'5': 11,
|
'5': 11,
|
||||||
'6': '.arbiter.user_agent.auth.Request',
|
'6': '.arbiter.user_agent.AuthChallengeRequest',
|
||||||
'9': 0,
|
'9': 0,
|
||||||
'10': 'auth'
|
'10': 'authChallengeRequest'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'1': 'vault',
|
'1': 'auth_challenge_solution',
|
||||||
'3': 2,
|
'3': 2,
|
||||||
'4': 1,
|
'4': 1,
|
||||||
'5': 11,
|
'5': 11,
|
||||||
'6': '.arbiter.user_agent.vault.Request',
|
'6': '.arbiter.user_agent.AuthChallengeSolution',
|
||||||
'9': 0,
|
'9': 0,
|
||||||
'10': 'vault'
|
'10': 'authChallengeSolution'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'1': 'evm',
|
'1': 'unseal_start',
|
||||||
'3': 3,
|
'3': 3,
|
||||||
'4': 1,
|
'4': 1,
|
||||||
'5': 11,
|
'5': 11,
|
||||||
'6': '.arbiter.user_agent.evm.Request',
|
'6': '.arbiter.user_agent.UnsealStart',
|
||||||
'9': 0,
|
'9': 0,
|
||||||
'10': 'evm'
|
'10': 'unsealStart'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'1': 'sdk_client',
|
'1': 'unseal_encrypted_key',
|
||||||
'3': 4,
|
'3': 4,
|
||||||
'4': 1,
|
'4': 1,
|
||||||
'5': 11,
|
'5': 11,
|
||||||
'6': '.arbiter.user_agent.sdk_client.Request',
|
'6': '.arbiter.user_agent.UnsealEncryptedKey',
|
||||||
'9': 0,
|
'9': 0,
|
||||||
'10': 'sdkClient'
|
'10': 'unsealEncryptedKey'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'1': 'query_vault_state',
|
||||||
|
'3': 5,
|
||||||
|
'4': 1,
|
||||||
|
'5': 11,
|
||||||
|
'6': '.google.protobuf.Empty',
|
||||||
|
'9': 0,
|
||||||
|
'10': 'queryVaultState'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'1': 'evm_wallet_create',
|
||||||
|
'3': 6,
|
||||||
|
'4': 1,
|
||||||
|
'5': 11,
|
||||||
|
'6': '.google.protobuf.Empty',
|
||||||
|
'9': 0,
|
||||||
|
'10': 'evmWalletCreate'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'1': 'evm_wallet_list',
|
||||||
|
'3': 7,
|
||||||
|
'4': 1,
|
||||||
|
'5': 11,
|
||||||
|
'6': '.google.protobuf.Empty',
|
||||||
|
'9': 0,
|
||||||
|
'10': 'evmWalletList'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'1': 'evm_grant_create',
|
||||||
|
'3': 8,
|
||||||
|
'4': 1,
|
||||||
|
'5': 11,
|
||||||
|
'6': '.arbiter.evm.EvmGrantCreateRequest',
|
||||||
|
'9': 0,
|
||||||
|
'10': 'evmGrantCreate'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'1': 'evm_grant_delete',
|
||||||
|
'3': 9,
|
||||||
|
'4': 1,
|
||||||
|
'5': 11,
|
||||||
|
'6': '.arbiter.evm.EvmGrantDeleteRequest',
|
||||||
|
'9': 0,
|
||||||
|
'10': 'evmGrantDelete'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'1': 'evm_grant_list',
|
||||||
|
'3': 10,
|
||||||
|
'4': 1,
|
||||||
|
'5': 11,
|
||||||
|
'6': '.arbiter.evm.EvmGrantListRequest',
|
||||||
|
'9': 0,
|
||||||
|
'10': 'evmGrantList'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'1': 'sdk_client_connection_response',
|
||||||
|
'3': 11,
|
||||||
|
'4': 1,
|
||||||
|
'5': 11,
|
||||||
|
'6': '.arbiter.user_agent.SdkClientConnectionResponse',
|
||||||
|
'9': 0,
|
||||||
|
'10': 'sdkClientConnectionResponse'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'1': 'sdk_client_revoke',
|
||||||
|
'3': 12,
|
||||||
|
'4': 1,
|
||||||
|
'5': 11,
|
||||||
|
'6': '.arbiter.user_agent.SdkClientRevokeRequest',
|
||||||
|
'9': 0,
|
||||||
|
'10': 'sdkClientRevoke'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'1': 'sdk_client_list',
|
||||||
|
'3': 13,
|
||||||
|
'4': 1,
|
||||||
|
'5': 11,
|
||||||
|
'6': '.google.protobuf.Empty',
|
||||||
|
'9': 0,
|
||||||
|
'10': 'sdkClientList'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'1': 'bootstrap_encrypted_key',
|
||||||
|
'3': 14,
|
||||||
|
'4': 1,
|
||||||
|
'5': 11,
|
||||||
|
'6': '.arbiter.user_agent.BootstrapEncryptedKey',
|
||||||
|
'9': 0,
|
||||||
|
'10': 'bootstrapEncryptedKey'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'1': 'grant_wallet_access',
|
||||||
|
'3': 15,
|
||||||
|
'4': 1,
|
||||||
|
'5': 11,
|
||||||
|
'6': '.arbiter.user_agent.SdkClientGrantWalletAccess',
|
||||||
|
'9': 0,
|
||||||
|
'10': 'grantWalletAccess'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'1': 'revoke_wallet_access',
|
||||||
|
'3': 17,
|
||||||
|
'4': 1,
|
||||||
|
'5': 11,
|
||||||
|
'6': '.arbiter.user_agent.SdkClientRevokeWalletAccess',
|
||||||
|
'9': 0,
|
||||||
|
'10': 'revokeWalletAccess'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'1': 'list_wallet_access',
|
||||||
|
'3': 18,
|
||||||
|
'4': 1,
|
||||||
|
'5': 11,
|
||||||
|
'6': '.google.protobuf.Empty',
|
||||||
|
'9': 0,
|
||||||
|
'10': 'listWalletAccess'
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
'8': [
|
'8': [
|
||||||
@@ -64,12 +675,33 @@ const UserAgentRequest$json = {
|
|||||||
|
|
||||||
/// Descriptor for `UserAgentRequest`. Decode as a `google.protobuf.DescriptorProto`.
|
/// Descriptor for `UserAgentRequest`. Decode as a `google.protobuf.DescriptorProto`.
|
||||||
final $typed_data.Uint8List userAgentRequestDescriptor = $convert.base64Decode(
|
final $typed_data.Uint8List userAgentRequestDescriptor = $convert.base64Decode(
|
||||||
'ChBVc2VyQWdlbnRSZXF1ZXN0Eg4KAmlkGBAgASgFUgJpZBI2CgRhdXRoGAEgASgLMiAuYXJiaX'
|
'ChBVc2VyQWdlbnRSZXF1ZXN0Eg4KAmlkGBAgASgFUgJpZBJgChZhdXRoX2NoYWxsZW5nZV9yZX'
|
||||||
'Rlci51c2VyX2FnZW50LmF1dGguUmVxdWVzdEgAUgRhdXRoEjkKBXZhdWx0GAIgASgLMiEuYXJi'
|
'F1ZXN0GAEgASgLMiguYXJiaXRlci51c2VyX2FnZW50LkF1dGhDaGFsbGVuZ2VSZXF1ZXN0SABS'
|
||||||
'aXRlci51c2VyX2FnZW50LnZhdWx0LlJlcXVlc3RIAFIFdmF1bHQSMwoDZXZtGAMgASgLMh8uYX'
|
'FGF1dGhDaGFsbGVuZ2VSZXF1ZXN0EmMKF2F1dGhfY2hhbGxlbmdlX3NvbHV0aW9uGAIgASgLMi'
|
||||||
'JiaXRlci51c2VyX2FnZW50LmV2bS5SZXF1ZXN0SABSA2V2bRJHCgpzZGtfY2xpZW50GAQgASgL'
|
'kuYXJiaXRlci51c2VyX2FnZW50LkF1dGhDaGFsbGVuZ2VTb2x1dGlvbkgAUhVhdXRoQ2hhbGxl'
|
||||||
'MiYuYXJiaXRlci51c2VyX2FnZW50LnNka19jbGllbnQuUmVxdWVzdEgAUglzZGtDbGllbnRCCQ'
|
'bmdlU29sdXRpb24SRAoMdW5zZWFsX3N0YXJ0GAMgASgLMh8uYXJiaXRlci51c2VyX2FnZW50Ll'
|
||||||
'oHcGF5bG9hZA==');
|
'Vuc2VhbFN0YXJ0SABSC3Vuc2VhbFN0YXJ0EloKFHVuc2VhbF9lbmNyeXB0ZWRfa2V5GAQgASgL'
|
||||||
|
'MiYuYXJiaXRlci51c2VyX2FnZW50LlVuc2VhbEVuY3J5cHRlZEtleUgAUhJ1bnNlYWxFbmNyeX'
|
||||||
|
'B0ZWRLZXkSRAoRcXVlcnlfdmF1bHRfc3RhdGUYBSABKAsyFi5nb29nbGUucHJvdG9idWYuRW1w'
|
||||||
|
'dHlIAFIPcXVlcnlWYXVsdFN0YXRlEkQKEWV2bV93YWxsZXRfY3JlYXRlGAYgASgLMhYuZ29vZ2'
|
||||||
|
'xlLnByb3RvYnVmLkVtcHR5SABSD2V2bVdhbGxldENyZWF0ZRJACg9ldm1fd2FsbGV0X2xpc3QY'
|
||||||
|
'ByABKAsyFi5nb29nbGUucHJvdG9idWYuRW1wdHlIAFINZXZtV2FsbGV0TGlzdBJOChBldm1fZ3'
|
||||||
|
'JhbnRfY3JlYXRlGAggASgLMiIuYXJiaXRlci5ldm0uRXZtR3JhbnRDcmVhdGVSZXF1ZXN0SABS'
|
||||||
|
'DmV2bUdyYW50Q3JlYXRlEk4KEGV2bV9ncmFudF9kZWxldGUYCSABKAsyIi5hcmJpdGVyLmV2bS'
|
||||||
|
'5Fdm1HcmFudERlbGV0ZVJlcXVlc3RIAFIOZXZtR3JhbnREZWxldGUSSAoOZXZtX2dyYW50X2xp'
|
||||||
|
'c3QYCiABKAsyIC5hcmJpdGVyLmV2bS5Fdm1HcmFudExpc3RSZXF1ZXN0SABSDGV2bUdyYW50TG'
|
||||||
|
'lzdBJ2Ch5zZGtfY2xpZW50X2Nvbm5lY3Rpb25fcmVzcG9uc2UYCyABKAsyLy5hcmJpdGVyLnVz'
|
||||||
|
'ZXJfYWdlbnQuU2RrQ2xpZW50Q29ubmVjdGlvblJlc3BvbnNlSABSG3Nka0NsaWVudENvbm5lY3'
|
||||||
|
'Rpb25SZXNwb25zZRJYChFzZGtfY2xpZW50X3Jldm9rZRgMIAEoCzIqLmFyYml0ZXIudXNlcl9h'
|
||||||
|
'Z2VudC5TZGtDbGllbnRSZXZva2VSZXF1ZXN0SABSD3Nka0NsaWVudFJldm9rZRJACg9zZGtfY2'
|
||||||
|
'xpZW50X2xpc3QYDSABKAsyFi5nb29nbGUucHJvdG9idWYuRW1wdHlIAFINc2RrQ2xpZW50TGlz'
|
||||||
|
'dBJjChdib290c3RyYXBfZW5jcnlwdGVkX2tleRgOIAEoCzIpLmFyYml0ZXIudXNlcl9hZ2VudC'
|
||||||
|
'5Cb290c3RyYXBFbmNyeXB0ZWRLZXlIAFIVYm9vdHN0cmFwRW5jcnlwdGVkS2V5EmAKE2dyYW50'
|
||||||
|
'X3dhbGxldF9hY2Nlc3MYDyABKAsyLi5hcmJpdGVyLnVzZXJfYWdlbnQuU2RrQ2xpZW50R3Jhbn'
|
||||||
|
'RXYWxsZXRBY2Nlc3NIAFIRZ3JhbnRXYWxsZXRBY2Nlc3MSYwoUcmV2b2tlX3dhbGxldF9hY2Nl'
|
||||||
|
'c3MYESABKAsyLy5hcmJpdGVyLnVzZXJfYWdlbnQuU2RrQ2xpZW50UmV2b2tlV2FsbGV0QWNjZX'
|
||||||
|
'NzSABSEnJldm9rZVdhbGxldEFjY2VzcxJGChJsaXN0X3dhbGxldF9hY2Nlc3MYEiABKAsyFi5n'
|
||||||
|
'b29nbGUucHJvdG9idWYuRW1wdHlIAFIQbGlzdFdhbGxldEFjY2Vzc0IJCgdwYXlsb2Fk');
|
||||||
|
|
||||||
@$core.Deprecated('Use userAgentResponseDescriptor instead')
|
@$core.Deprecated('Use userAgentResponseDescriptor instead')
|
||||||
const UserAgentResponse$json = {
|
const UserAgentResponse$json = {
|
||||||
@@ -77,40 +709,148 @@ const UserAgentResponse$json = {
|
|||||||
'2': [
|
'2': [
|
||||||
{'1': 'id', '3': 16, '4': 1, '5': 5, '9': 1, '10': 'id', '17': true},
|
{'1': 'id', '3': 16, '4': 1, '5': 5, '9': 1, '10': 'id', '17': true},
|
||||||
{
|
{
|
||||||
'1': 'auth',
|
'1': 'auth_challenge',
|
||||||
'3': 1,
|
'3': 1,
|
||||||
'4': 1,
|
'4': 1,
|
||||||
'5': 11,
|
'5': 11,
|
||||||
'6': '.arbiter.user_agent.auth.Response',
|
'6': '.arbiter.user_agent.AuthChallenge',
|
||||||
'9': 0,
|
'9': 0,
|
||||||
'10': 'auth'
|
'10': 'authChallenge'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'1': 'vault',
|
'1': 'auth_result',
|
||||||
'3': 2,
|
'3': 2,
|
||||||
'4': 1,
|
'4': 1,
|
||||||
'5': 11,
|
'5': 14,
|
||||||
'6': '.arbiter.user_agent.vault.Response',
|
'6': '.arbiter.user_agent.AuthResult',
|
||||||
'9': 0,
|
'9': 0,
|
||||||
'10': 'vault'
|
'10': 'authResult'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'1': 'evm',
|
'1': 'unseal_start_response',
|
||||||
'3': 3,
|
'3': 3,
|
||||||
'4': 1,
|
'4': 1,
|
||||||
'5': 11,
|
'5': 11,
|
||||||
'6': '.arbiter.user_agent.evm.Response',
|
'6': '.arbiter.user_agent.UnsealStartResponse',
|
||||||
'9': 0,
|
'9': 0,
|
||||||
'10': 'evm'
|
'10': 'unsealStartResponse'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'1': 'sdk_client',
|
'1': 'unseal_result',
|
||||||
'3': 4,
|
'3': 4,
|
||||||
'4': 1,
|
'4': 1,
|
||||||
'5': 11,
|
'5': 14,
|
||||||
'6': '.arbiter.user_agent.sdk_client.Response',
|
'6': '.arbiter.user_agent.UnsealResult',
|
||||||
'9': 0,
|
'9': 0,
|
||||||
'10': 'sdkClient'
|
'10': 'unsealResult'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'1': 'vault_state',
|
||||||
|
'3': 5,
|
||||||
|
'4': 1,
|
||||||
|
'5': 14,
|
||||||
|
'6': '.arbiter.user_agent.VaultState',
|
||||||
|
'9': 0,
|
||||||
|
'10': 'vaultState'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'1': 'evm_wallet_create',
|
||||||
|
'3': 6,
|
||||||
|
'4': 1,
|
||||||
|
'5': 11,
|
||||||
|
'6': '.arbiter.evm.WalletCreateResponse',
|
||||||
|
'9': 0,
|
||||||
|
'10': 'evmWalletCreate'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'1': 'evm_wallet_list',
|
||||||
|
'3': 7,
|
||||||
|
'4': 1,
|
||||||
|
'5': 11,
|
||||||
|
'6': '.arbiter.evm.WalletListResponse',
|
||||||
|
'9': 0,
|
||||||
|
'10': 'evmWalletList'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'1': 'evm_grant_create',
|
||||||
|
'3': 8,
|
||||||
|
'4': 1,
|
||||||
|
'5': 11,
|
||||||
|
'6': '.arbiter.evm.EvmGrantCreateResponse',
|
||||||
|
'9': 0,
|
||||||
|
'10': 'evmGrantCreate'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'1': 'evm_grant_delete',
|
||||||
|
'3': 9,
|
||||||
|
'4': 1,
|
||||||
|
'5': 11,
|
||||||
|
'6': '.arbiter.evm.EvmGrantDeleteResponse',
|
||||||
|
'9': 0,
|
||||||
|
'10': 'evmGrantDelete'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'1': 'evm_grant_list',
|
||||||
|
'3': 10,
|
||||||
|
'4': 1,
|
||||||
|
'5': 11,
|
||||||
|
'6': '.arbiter.evm.EvmGrantListResponse',
|
||||||
|
'9': 0,
|
||||||
|
'10': 'evmGrantList'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'1': 'sdk_client_connection_request',
|
||||||
|
'3': 11,
|
||||||
|
'4': 1,
|
||||||
|
'5': 11,
|
||||||
|
'6': '.arbiter.user_agent.SdkClientConnectionRequest',
|
||||||
|
'9': 0,
|
||||||
|
'10': 'sdkClientConnectionRequest'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'1': 'sdk_client_connection_cancel',
|
||||||
|
'3': 12,
|
||||||
|
'4': 1,
|
||||||
|
'5': 11,
|
||||||
|
'6': '.arbiter.user_agent.SdkClientConnectionCancel',
|
||||||
|
'9': 0,
|
||||||
|
'10': 'sdkClientConnectionCancel'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'1': 'sdk_client_revoke_response',
|
||||||
|
'3': 13,
|
||||||
|
'4': 1,
|
||||||
|
'5': 11,
|
||||||
|
'6': '.arbiter.user_agent.SdkClientRevokeResponse',
|
||||||
|
'9': 0,
|
||||||
|
'10': 'sdkClientRevokeResponse'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'1': 'sdk_client_list_response',
|
||||||
|
'3': 14,
|
||||||
|
'4': 1,
|
||||||
|
'5': 11,
|
||||||
|
'6': '.arbiter.user_agent.SdkClientListResponse',
|
||||||
|
'9': 0,
|
||||||
|
'10': 'sdkClientListResponse'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'1': 'bootstrap_result',
|
||||||
|
'3': 15,
|
||||||
|
'4': 1,
|
||||||
|
'5': 14,
|
||||||
|
'6': '.arbiter.user_agent.BootstrapResult',
|
||||||
|
'9': 0,
|
||||||
|
'10': 'bootstrapResult'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'1': 'list_wallet_access_response',
|
||||||
|
'3': 17,
|
||||||
|
'4': 1,
|
||||||
|
'5': 11,
|
||||||
|
'6': '.arbiter.user_agent.ListWalletAccessResponse',
|
||||||
|
'9': 0,
|
||||||
|
'10': 'listWalletAccessResponse'
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
'8': [
|
'8': [
|
||||||
@@ -121,9 +861,30 @@ const UserAgentResponse$json = {
|
|||||||
|
|
||||||
/// Descriptor for `UserAgentResponse`. Decode as a `google.protobuf.DescriptorProto`.
|
/// Descriptor for `UserAgentResponse`. Decode as a `google.protobuf.DescriptorProto`.
|
||||||
final $typed_data.Uint8List userAgentResponseDescriptor = $convert.base64Decode(
|
final $typed_data.Uint8List userAgentResponseDescriptor = $convert.base64Decode(
|
||||||
'ChFVc2VyQWdlbnRSZXNwb25zZRITCgJpZBgQIAEoBUgBUgJpZIgBARI3CgRhdXRoGAEgASgLMi'
|
'ChFVc2VyQWdlbnRSZXNwb25zZRITCgJpZBgQIAEoBUgBUgJpZIgBARJKCg5hdXRoX2NoYWxsZW'
|
||||||
'EuYXJiaXRlci51c2VyX2FnZW50LmF1dGguUmVzcG9uc2VIAFIEYXV0aBI6CgV2YXVsdBgCIAEo'
|
'5nZRgBIAEoCzIhLmFyYml0ZXIudXNlcl9hZ2VudC5BdXRoQ2hhbGxlbmdlSABSDWF1dGhDaGFs'
|
||||||
'CzIiLmFyYml0ZXIudXNlcl9hZ2VudC52YXVsdC5SZXNwb25zZUgAUgV2YXVsdBI0CgNldm0YAy'
|
'bGVuZ2USQQoLYXV0aF9yZXN1bHQYAiABKA4yHi5hcmJpdGVyLnVzZXJfYWdlbnQuQXV0aFJlc3'
|
||||||
'ABKAsyIC5hcmJpdGVyLnVzZXJfYWdlbnQuZXZtLlJlc3BvbnNlSABSA2V2bRJICgpzZGtfY2xp'
|
'VsdEgAUgphdXRoUmVzdWx0El0KFXVuc2VhbF9zdGFydF9yZXNwb25zZRgDIAEoCzInLmFyYml0'
|
||||||
'ZW50GAQgASgLMicuYXJiaXRlci51c2VyX2FnZW50LnNka19jbGllbnQuUmVzcG9uc2VIAFIJc2'
|
'ZXIudXNlcl9hZ2VudC5VbnNlYWxTdGFydFJlc3BvbnNlSABSE3Vuc2VhbFN0YXJ0UmVzcG9uc2'
|
||||||
'RrQ2xpZW50QgkKB3BheWxvYWRCBQoDX2lk');
|
'USRwoNdW5zZWFsX3Jlc3VsdBgEIAEoDjIgLmFyYml0ZXIudXNlcl9hZ2VudC5VbnNlYWxSZXN1'
|
||||||
|
'bHRIAFIMdW5zZWFsUmVzdWx0EkEKC3ZhdWx0X3N0YXRlGAUgASgOMh4uYXJiaXRlci51c2VyX2'
|
||||||
|
'FnZW50LlZhdWx0U3RhdGVIAFIKdmF1bHRTdGF0ZRJPChFldm1fd2FsbGV0X2NyZWF0ZRgGIAEo'
|
||||||
|
'CzIhLmFyYml0ZXIuZXZtLldhbGxldENyZWF0ZVJlc3BvbnNlSABSD2V2bVdhbGxldENyZWF0ZR'
|
||||||
|
'JJCg9ldm1fd2FsbGV0X2xpc3QYByABKAsyHy5hcmJpdGVyLmV2bS5XYWxsZXRMaXN0UmVzcG9u'
|
||||||
|
'c2VIAFINZXZtV2FsbGV0TGlzdBJPChBldm1fZ3JhbnRfY3JlYXRlGAggASgLMiMuYXJiaXRlci'
|
||||||
|
'5ldm0uRXZtR3JhbnRDcmVhdGVSZXNwb25zZUgAUg5ldm1HcmFudENyZWF0ZRJPChBldm1fZ3Jh'
|
||||||
|
'bnRfZGVsZXRlGAkgASgLMiMuYXJiaXRlci5ldm0uRXZtR3JhbnREZWxldGVSZXNwb25zZUgAUg'
|
||||||
|
'5ldm1HcmFudERlbGV0ZRJJCg5ldm1fZ3JhbnRfbGlzdBgKIAEoCzIhLmFyYml0ZXIuZXZtLkV2'
|
||||||
|
'bUdyYW50TGlzdFJlc3BvbnNlSABSDGV2bUdyYW50TGlzdBJzCh1zZGtfY2xpZW50X2Nvbm5lY3'
|
||||||
|
'Rpb25fcmVxdWVzdBgLIAEoCzIuLmFyYml0ZXIudXNlcl9hZ2VudC5TZGtDbGllbnRDb25uZWN0'
|
||||||
|
'aW9uUmVxdWVzdEgAUhpzZGtDbGllbnRDb25uZWN0aW9uUmVxdWVzdBJwChxzZGtfY2xpZW50X2'
|
||||||
|
'Nvbm5lY3Rpb25fY2FuY2VsGAwgASgLMi0uYXJiaXRlci51c2VyX2FnZW50LlNka0NsaWVudENv'
|
||||||
|
'bm5lY3Rpb25DYW5jZWxIAFIZc2RrQ2xpZW50Q29ubmVjdGlvbkNhbmNlbBJqChpzZGtfY2xpZW'
|
||||||
|
'50X3Jldm9rZV9yZXNwb25zZRgNIAEoCzIrLmFyYml0ZXIudXNlcl9hZ2VudC5TZGtDbGllbnRS'
|
||||||
|
'ZXZva2VSZXNwb25zZUgAUhdzZGtDbGllbnRSZXZva2VSZXNwb25zZRJkChhzZGtfY2xpZW50X2'
|
||||||
|
'xpc3RfcmVzcG9uc2UYDiABKAsyKS5hcmJpdGVyLnVzZXJfYWdlbnQuU2RrQ2xpZW50TGlzdFJl'
|
||||||
|
'c3BvbnNlSABSFXNka0NsaWVudExpc3RSZXNwb25zZRJQChBib290c3RyYXBfcmVzdWx0GA8gAS'
|
||||||
|
'gOMiMuYXJiaXRlci51c2VyX2FnZW50LkJvb3RzdHJhcFJlc3VsdEgAUg9ib290c3RyYXBSZXN1'
|
||||||
|
'bHQSbQobbGlzdF93YWxsZXRfYWNjZXNzX3Jlc3BvbnNlGBEgASgLMiwuYXJiaXRlci51c2VyX2'
|
||||||
|
'FnZW50Lkxpc3RXYWxsZXRBY2Nlc3NSZXNwb25zZUgAUhhsaXN0V2FsbGV0QWNjZXNzUmVzcG9u'
|
||||||
|
'c2VCCQoHcGF5bG9hZEIFCgNfaWQ=');
|
||||||
|
|||||||
@@ -1,391 +0,0 @@
|
|||||||
// This is a generated file - do not edit.
|
|
||||||
//
|
|
||||||
// Generated from user_agent/auth.proto.
|
|
||||||
|
|
||||||
// @dart = 3.3
|
|
||||||
|
|
||||||
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
|
|
||||||
// ignore_for_file: constant_identifier_names
|
|
||||||
// ignore_for_file: curly_braces_in_flow_control_structures
|
|
||||||
// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
|
|
||||||
// ignore_for_file: non_constant_identifier_names, prefer_relative_imports
|
|
||||||
|
|
||||||
import 'dart:core' as $core;
|
|
||||||
|
|
||||||
import 'package:protobuf/protobuf.dart' as $pb;
|
|
||||||
|
|
||||||
import 'auth.pbenum.dart';
|
|
||||||
|
|
||||||
export 'package:protobuf/protobuf.dart' show GeneratedMessageGenericExtensions;
|
|
||||||
|
|
||||||
export 'auth.pbenum.dart';
|
|
||||||
|
|
||||||
class AuthChallengeRequest extends $pb.GeneratedMessage {
|
|
||||||
factory AuthChallengeRequest({
|
|
||||||
$core.List<$core.int>? pubkey,
|
|
||||||
$core.String? bootstrapToken,
|
|
||||||
KeyType? keyType,
|
|
||||||
}) {
|
|
||||||
final result = create();
|
|
||||||
if (pubkey != null) result.pubkey = pubkey;
|
|
||||||
if (bootstrapToken != null) result.bootstrapToken = bootstrapToken;
|
|
||||||
if (keyType != null) result.keyType = keyType;
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
AuthChallengeRequest._();
|
|
||||||
|
|
||||||
factory AuthChallengeRequest.fromBuffer($core.List<$core.int> data,
|
|
||||||
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
|
||||||
create()..mergeFromBuffer(data, registry);
|
|
||||||
factory AuthChallengeRequest.fromJson($core.String json,
|
|
||||||
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
|
||||||
create()..mergeFromJson(json, registry);
|
|
||||||
|
|
||||||
static final $pb.BuilderInfo _i = $pb.BuilderInfo(
|
|
||||||
_omitMessageNames ? '' : 'AuthChallengeRequest',
|
|
||||||
package: const $pb.PackageName(
|
|
||||||
_omitMessageNames ? '' : 'arbiter.user_agent.auth'),
|
|
||||||
createEmptyInstance: create)
|
|
||||||
..a<$core.List<$core.int>>(
|
|
||||||
1, _omitFieldNames ? '' : 'pubkey', $pb.PbFieldType.OY)
|
|
||||||
..aOS(2, _omitFieldNames ? '' : 'bootstrapToken')
|
|
||||||
..aE<KeyType>(3, _omitFieldNames ? '' : 'keyType',
|
|
||||||
enumValues: KeyType.values)
|
|
||||||
..hasRequiredFields = false;
|
|
||||||
|
|
||||||
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
|
||||||
AuthChallengeRequest clone() => deepCopy();
|
|
||||||
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
|
||||||
AuthChallengeRequest copyWith(void Function(AuthChallengeRequest) updates) =>
|
|
||||||
super.copyWith((message) => updates(message as AuthChallengeRequest))
|
|
||||||
as AuthChallengeRequest;
|
|
||||||
|
|
||||||
@$core.override
|
|
||||||
$pb.BuilderInfo get info_ => _i;
|
|
||||||
|
|
||||||
@$core.pragma('dart2js:noInline')
|
|
||||||
static AuthChallengeRequest create() => AuthChallengeRequest._();
|
|
||||||
@$core.override
|
|
||||||
AuthChallengeRequest createEmptyInstance() => create();
|
|
||||||
@$core.pragma('dart2js:noInline')
|
|
||||||
static AuthChallengeRequest getDefault() => _defaultInstance ??=
|
|
||||||
$pb.GeneratedMessage.$_defaultFor<AuthChallengeRequest>(create);
|
|
||||||
static AuthChallengeRequest? _defaultInstance;
|
|
||||||
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
$core.List<$core.int> get pubkey => $_getN(0);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
set pubkey($core.List<$core.int> value) => $_setBytes(0, value);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
$core.bool hasPubkey() => $_has(0);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
void clearPubkey() => $_clearField(1);
|
|
||||||
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
$core.String get bootstrapToken => $_getSZ(1);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
set bootstrapToken($core.String value) => $_setString(1, value);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
$core.bool hasBootstrapToken() => $_has(1);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
void clearBootstrapToken() => $_clearField(2);
|
|
||||||
|
|
||||||
@$pb.TagNumber(3)
|
|
||||||
KeyType get keyType => $_getN(2);
|
|
||||||
@$pb.TagNumber(3)
|
|
||||||
set keyType(KeyType value) => $_setField(3, value);
|
|
||||||
@$pb.TagNumber(3)
|
|
||||||
$core.bool hasKeyType() => $_has(2);
|
|
||||||
@$pb.TagNumber(3)
|
|
||||||
void clearKeyType() => $_clearField(3);
|
|
||||||
}
|
|
||||||
|
|
||||||
class AuthChallenge extends $pb.GeneratedMessage {
|
|
||||||
factory AuthChallenge({
|
|
||||||
$core.int? nonce,
|
|
||||||
}) {
|
|
||||||
final result = create();
|
|
||||||
if (nonce != null) result.nonce = nonce;
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
AuthChallenge._();
|
|
||||||
|
|
||||||
factory AuthChallenge.fromBuffer($core.List<$core.int> data,
|
|
||||||
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
|
||||||
create()..mergeFromBuffer(data, registry);
|
|
||||||
factory AuthChallenge.fromJson($core.String json,
|
|
||||||
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
|
||||||
create()..mergeFromJson(json, registry);
|
|
||||||
|
|
||||||
static final $pb.BuilderInfo _i = $pb.BuilderInfo(
|
|
||||||
_omitMessageNames ? '' : 'AuthChallenge',
|
|
||||||
package: const $pb.PackageName(
|
|
||||||
_omitMessageNames ? '' : 'arbiter.user_agent.auth'),
|
|
||||||
createEmptyInstance: create)
|
|
||||||
..aI(1, _omitFieldNames ? '' : 'nonce')
|
|
||||||
..hasRequiredFields = false;
|
|
||||||
|
|
||||||
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
|
||||||
AuthChallenge clone() => deepCopy();
|
|
||||||
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
|
||||||
AuthChallenge copyWith(void Function(AuthChallenge) updates) =>
|
|
||||||
super.copyWith((message) => updates(message as AuthChallenge))
|
|
||||||
as AuthChallenge;
|
|
||||||
|
|
||||||
@$core.override
|
|
||||||
$pb.BuilderInfo get info_ => _i;
|
|
||||||
|
|
||||||
@$core.pragma('dart2js:noInline')
|
|
||||||
static AuthChallenge create() => AuthChallenge._();
|
|
||||||
@$core.override
|
|
||||||
AuthChallenge createEmptyInstance() => create();
|
|
||||||
@$core.pragma('dart2js:noInline')
|
|
||||||
static AuthChallenge getDefault() => _defaultInstance ??=
|
|
||||||
$pb.GeneratedMessage.$_defaultFor<AuthChallenge>(create);
|
|
||||||
static AuthChallenge? _defaultInstance;
|
|
||||||
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
$core.int get nonce => $_getIZ(0);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
set nonce($core.int value) => $_setSignedInt32(0, value);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
$core.bool hasNonce() => $_has(0);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
void clearNonce() => $_clearField(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
class AuthChallengeSolution extends $pb.GeneratedMessage {
|
|
||||||
factory AuthChallengeSolution({
|
|
||||||
$core.List<$core.int>? signature,
|
|
||||||
}) {
|
|
||||||
final result = create();
|
|
||||||
if (signature != null) result.signature = signature;
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
AuthChallengeSolution._();
|
|
||||||
|
|
||||||
factory AuthChallengeSolution.fromBuffer($core.List<$core.int> data,
|
|
||||||
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
|
||||||
create()..mergeFromBuffer(data, registry);
|
|
||||||
factory AuthChallengeSolution.fromJson($core.String json,
|
|
||||||
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
|
||||||
create()..mergeFromJson(json, registry);
|
|
||||||
|
|
||||||
static final $pb.BuilderInfo _i = $pb.BuilderInfo(
|
|
||||||
_omitMessageNames ? '' : 'AuthChallengeSolution',
|
|
||||||
package: const $pb.PackageName(
|
|
||||||
_omitMessageNames ? '' : 'arbiter.user_agent.auth'),
|
|
||||||
createEmptyInstance: create)
|
|
||||||
..a<$core.List<$core.int>>(
|
|
||||||
1, _omitFieldNames ? '' : 'signature', $pb.PbFieldType.OY)
|
|
||||||
..hasRequiredFields = false;
|
|
||||||
|
|
||||||
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
|
||||||
AuthChallengeSolution clone() => deepCopy();
|
|
||||||
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
|
||||||
AuthChallengeSolution copyWith(
|
|
||||||
void Function(AuthChallengeSolution) updates) =>
|
|
||||||
super.copyWith((message) => updates(message as AuthChallengeSolution))
|
|
||||||
as AuthChallengeSolution;
|
|
||||||
|
|
||||||
@$core.override
|
|
||||||
$pb.BuilderInfo get info_ => _i;
|
|
||||||
|
|
||||||
@$core.pragma('dart2js:noInline')
|
|
||||||
static AuthChallengeSolution create() => AuthChallengeSolution._();
|
|
||||||
@$core.override
|
|
||||||
AuthChallengeSolution createEmptyInstance() => create();
|
|
||||||
@$core.pragma('dart2js:noInline')
|
|
||||||
static AuthChallengeSolution getDefault() => _defaultInstance ??=
|
|
||||||
$pb.GeneratedMessage.$_defaultFor<AuthChallengeSolution>(create);
|
|
||||||
static AuthChallengeSolution? _defaultInstance;
|
|
||||||
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
$core.List<$core.int> get signature => $_getN(0);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
set signature($core.List<$core.int> value) => $_setBytes(0, value);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
$core.bool hasSignature() => $_has(0);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
void clearSignature() => $_clearField(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
enum Request_Payload { challengeRequest, challengeSolution, notSet }
|
|
||||||
|
|
||||||
class Request extends $pb.GeneratedMessage {
|
|
||||||
factory Request({
|
|
||||||
AuthChallengeRequest? challengeRequest,
|
|
||||||
AuthChallengeSolution? challengeSolution,
|
|
||||||
}) {
|
|
||||||
final result = create();
|
|
||||||
if (challengeRequest != null) result.challengeRequest = challengeRequest;
|
|
||||||
if (challengeSolution != null) result.challengeSolution = challengeSolution;
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
Request._();
|
|
||||||
|
|
||||||
factory Request.fromBuffer($core.List<$core.int> data,
|
|
||||||
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
|
||||||
create()..mergeFromBuffer(data, registry);
|
|
||||||
factory Request.fromJson($core.String json,
|
|
||||||
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
|
||||||
create()..mergeFromJson(json, registry);
|
|
||||||
|
|
||||||
static const $core.Map<$core.int, Request_Payload> _Request_PayloadByTag = {
|
|
||||||
1: Request_Payload.challengeRequest,
|
|
||||||
2: Request_Payload.challengeSolution,
|
|
||||||
0: Request_Payload.notSet
|
|
||||||
};
|
|
||||||
static final $pb.BuilderInfo _i = $pb.BuilderInfo(
|
|
||||||
_omitMessageNames ? '' : 'Request',
|
|
||||||
package: const $pb.PackageName(
|
|
||||||
_omitMessageNames ? '' : 'arbiter.user_agent.auth'),
|
|
||||||
createEmptyInstance: create)
|
|
||||||
..oo(0, [1, 2])
|
|
||||||
..aOM<AuthChallengeRequest>(1, _omitFieldNames ? '' : 'challengeRequest',
|
|
||||||
subBuilder: AuthChallengeRequest.create)
|
|
||||||
..aOM<AuthChallengeSolution>(2, _omitFieldNames ? '' : 'challengeSolution',
|
|
||||||
subBuilder: AuthChallengeSolution.create)
|
|
||||||
..hasRequiredFields = false;
|
|
||||||
|
|
||||||
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
|
||||||
Request clone() => deepCopy();
|
|
||||||
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
|
||||||
Request copyWith(void Function(Request) updates) =>
|
|
||||||
super.copyWith((message) => updates(message as Request)) as Request;
|
|
||||||
|
|
||||||
@$core.override
|
|
||||||
$pb.BuilderInfo get info_ => _i;
|
|
||||||
|
|
||||||
@$core.pragma('dart2js:noInline')
|
|
||||||
static Request create() => Request._();
|
|
||||||
@$core.override
|
|
||||||
Request createEmptyInstance() => create();
|
|
||||||
@$core.pragma('dart2js:noInline')
|
|
||||||
static Request getDefault() =>
|
|
||||||
_defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<Request>(create);
|
|
||||||
static Request? _defaultInstance;
|
|
||||||
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
Request_Payload whichPayload() => _Request_PayloadByTag[$_whichOneof(0)]!;
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
void clearPayload() => $_clearField($_whichOneof(0));
|
|
||||||
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
AuthChallengeRequest get challengeRequest => $_getN(0);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
set challengeRequest(AuthChallengeRequest value) => $_setField(1, value);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
$core.bool hasChallengeRequest() => $_has(0);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
void clearChallengeRequest() => $_clearField(1);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
AuthChallengeRequest ensureChallengeRequest() => $_ensure(0);
|
|
||||||
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
AuthChallengeSolution get challengeSolution => $_getN(1);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
set challengeSolution(AuthChallengeSolution value) => $_setField(2, value);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
$core.bool hasChallengeSolution() => $_has(1);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
void clearChallengeSolution() => $_clearField(2);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
AuthChallengeSolution ensureChallengeSolution() => $_ensure(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
enum Response_Payload { challenge, result, notSet }
|
|
||||||
|
|
||||||
class Response extends $pb.GeneratedMessage {
|
|
||||||
factory Response({
|
|
||||||
AuthChallenge? challenge,
|
|
||||||
AuthResult? result,
|
|
||||||
}) {
|
|
||||||
final result$ = create();
|
|
||||||
if (challenge != null) result$.challenge = challenge;
|
|
||||||
if (result != null) result$.result = result;
|
|
||||||
return result$;
|
|
||||||
}
|
|
||||||
|
|
||||||
Response._();
|
|
||||||
|
|
||||||
factory Response.fromBuffer($core.List<$core.int> data,
|
|
||||||
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
|
||||||
create()..mergeFromBuffer(data, registry);
|
|
||||||
factory Response.fromJson($core.String json,
|
|
||||||
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
|
||||||
create()..mergeFromJson(json, registry);
|
|
||||||
|
|
||||||
static const $core.Map<$core.int, Response_Payload> _Response_PayloadByTag = {
|
|
||||||
1: Response_Payload.challenge,
|
|
||||||
2: Response_Payload.result,
|
|
||||||
0: Response_Payload.notSet
|
|
||||||
};
|
|
||||||
static final $pb.BuilderInfo _i = $pb.BuilderInfo(
|
|
||||||
_omitMessageNames ? '' : 'Response',
|
|
||||||
package: const $pb.PackageName(
|
|
||||||
_omitMessageNames ? '' : 'arbiter.user_agent.auth'),
|
|
||||||
createEmptyInstance: create)
|
|
||||||
..oo(0, [1, 2])
|
|
||||||
..aOM<AuthChallenge>(1, _omitFieldNames ? '' : 'challenge',
|
|
||||||
subBuilder: AuthChallenge.create)
|
|
||||||
..aE<AuthResult>(2, _omitFieldNames ? '' : 'result',
|
|
||||||
enumValues: AuthResult.values)
|
|
||||||
..hasRequiredFields = false;
|
|
||||||
|
|
||||||
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
|
||||||
Response clone() => deepCopy();
|
|
||||||
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
|
||||||
Response copyWith(void Function(Response) updates) =>
|
|
||||||
super.copyWith((message) => updates(message as Response)) as Response;
|
|
||||||
|
|
||||||
@$core.override
|
|
||||||
$pb.BuilderInfo get info_ => _i;
|
|
||||||
|
|
||||||
@$core.pragma('dart2js:noInline')
|
|
||||||
static Response create() => Response._();
|
|
||||||
@$core.override
|
|
||||||
Response createEmptyInstance() => create();
|
|
||||||
@$core.pragma('dart2js:noInline')
|
|
||||||
static Response getDefault() =>
|
|
||||||
_defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<Response>(create);
|
|
||||||
static Response? _defaultInstance;
|
|
||||||
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
Response_Payload whichPayload() => _Response_PayloadByTag[$_whichOneof(0)]!;
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
void clearPayload() => $_clearField($_whichOneof(0));
|
|
||||||
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
AuthChallenge get challenge => $_getN(0);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
set challenge(AuthChallenge value) => $_setField(1, value);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
$core.bool hasChallenge() => $_has(0);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
void clearChallenge() => $_clearField(1);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
AuthChallenge ensureChallenge() => $_ensure(0);
|
|
||||||
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
AuthResult get result => $_getN(1);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
set result(AuthResult value) => $_setField(2, value);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
$core.bool hasResult() => $_has(1);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
void clearResult() => $_clearField(2);
|
|
||||||
}
|
|
||||||
|
|
||||||
const $core.bool _omitFieldNames =
|
|
||||||
$core.bool.fromEnvironment('protobuf.omit_field_names');
|
|
||||||
const $core.bool _omitMessageNames =
|
|
||||||
$core.bool.fromEnvironment('protobuf.omit_message_names');
|
|
||||||
@@ -1,77 +0,0 @@
|
|||||||
// This is a generated file - do not edit.
|
|
||||||
//
|
|
||||||
// Generated from user_agent/auth.proto.
|
|
||||||
|
|
||||||
// @dart = 3.3
|
|
||||||
|
|
||||||
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
|
|
||||||
// ignore_for_file: constant_identifier_names
|
|
||||||
// ignore_for_file: curly_braces_in_flow_control_structures
|
|
||||||
// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
|
|
||||||
// ignore_for_file: non_constant_identifier_names, prefer_relative_imports
|
|
||||||
|
|
||||||
import 'dart:core' as $core;
|
|
||||||
|
|
||||||
import 'package:protobuf/protobuf.dart' as $pb;
|
|
||||||
|
|
||||||
class KeyType extends $pb.ProtobufEnum {
|
|
||||||
static const KeyType KEY_TYPE_UNSPECIFIED =
|
|
||||||
KeyType._(0, _omitEnumNames ? '' : 'KEY_TYPE_UNSPECIFIED');
|
|
||||||
static const KeyType KEY_TYPE_ED25519 =
|
|
||||||
KeyType._(1, _omitEnumNames ? '' : 'KEY_TYPE_ED25519');
|
|
||||||
static const KeyType KEY_TYPE_ECDSA_SECP256K1 =
|
|
||||||
KeyType._(2, _omitEnumNames ? '' : 'KEY_TYPE_ECDSA_SECP256K1');
|
|
||||||
static const KeyType KEY_TYPE_RSA =
|
|
||||||
KeyType._(3, _omitEnumNames ? '' : 'KEY_TYPE_RSA');
|
|
||||||
|
|
||||||
static const $core.List<KeyType> values = <KeyType>[
|
|
||||||
KEY_TYPE_UNSPECIFIED,
|
|
||||||
KEY_TYPE_ED25519,
|
|
||||||
KEY_TYPE_ECDSA_SECP256K1,
|
|
||||||
KEY_TYPE_RSA,
|
|
||||||
];
|
|
||||||
|
|
||||||
static final $core.List<KeyType?> _byValue =
|
|
||||||
$pb.ProtobufEnum.$_initByValueList(values, 3);
|
|
||||||
static KeyType? valueOf($core.int value) =>
|
|
||||||
value < 0 || value >= _byValue.length ? null : _byValue[value];
|
|
||||||
|
|
||||||
const KeyType._(super.value, super.name);
|
|
||||||
}
|
|
||||||
|
|
||||||
class AuthResult extends $pb.ProtobufEnum {
|
|
||||||
static const AuthResult AUTH_RESULT_UNSPECIFIED =
|
|
||||||
AuthResult._(0, _omitEnumNames ? '' : 'AUTH_RESULT_UNSPECIFIED');
|
|
||||||
static const AuthResult AUTH_RESULT_SUCCESS =
|
|
||||||
AuthResult._(1, _omitEnumNames ? '' : 'AUTH_RESULT_SUCCESS');
|
|
||||||
static const AuthResult AUTH_RESULT_INVALID_KEY =
|
|
||||||
AuthResult._(2, _omitEnumNames ? '' : 'AUTH_RESULT_INVALID_KEY');
|
|
||||||
static const AuthResult AUTH_RESULT_INVALID_SIGNATURE =
|
|
||||||
AuthResult._(3, _omitEnumNames ? '' : 'AUTH_RESULT_INVALID_SIGNATURE');
|
|
||||||
static const AuthResult AUTH_RESULT_BOOTSTRAP_REQUIRED =
|
|
||||||
AuthResult._(4, _omitEnumNames ? '' : 'AUTH_RESULT_BOOTSTRAP_REQUIRED');
|
|
||||||
static const AuthResult AUTH_RESULT_TOKEN_INVALID =
|
|
||||||
AuthResult._(5, _omitEnumNames ? '' : 'AUTH_RESULT_TOKEN_INVALID');
|
|
||||||
static const AuthResult AUTH_RESULT_INTERNAL =
|
|
||||||
AuthResult._(6, _omitEnumNames ? '' : 'AUTH_RESULT_INTERNAL');
|
|
||||||
|
|
||||||
static const $core.List<AuthResult> values = <AuthResult>[
|
|
||||||
AUTH_RESULT_UNSPECIFIED,
|
|
||||||
AUTH_RESULT_SUCCESS,
|
|
||||||
AUTH_RESULT_INVALID_KEY,
|
|
||||||
AUTH_RESULT_INVALID_SIGNATURE,
|
|
||||||
AUTH_RESULT_BOOTSTRAP_REQUIRED,
|
|
||||||
AUTH_RESULT_TOKEN_INVALID,
|
|
||||||
AUTH_RESULT_INTERNAL,
|
|
||||||
];
|
|
||||||
|
|
||||||
static final $core.List<AuthResult?> _byValue =
|
|
||||||
$pb.ProtobufEnum.$_initByValueList(values, 6);
|
|
||||||
static AuthResult? valueOf($core.int value) =>
|
|
||||||
value < 0 || value >= _byValue.length ? null : _byValue[value];
|
|
||||||
|
|
||||||
const AuthResult._(super.value, super.name);
|
|
||||||
}
|
|
||||||
|
|
||||||
const $core.bool _omitEnumNames =
|
|
||||||
$core.bool.fromEnvironment('protobuf.omit_enum_names');
|
|
||||||
@@ -1,182 +0,0 @@
|
|||||||
// This is a generated file - do not edit.
|
|
||||||
//
|
|
||||||
// Generated from user_agent/auth.proto.
|
|
||||||
|
|
||||||
// @dart = 3.3
|
|
||||||
|
|
||||||
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
|
|
||||||
// ignore_for_file: constant_identifier_names
|
|
||||||
// ignore_for_file: curly_braces_in_flow_control_structures
|
|
||||||
// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
|
|
||||||
// ignore_for_file: non_constant_identifier_names, prefer_relative_imports
|
|
||||||
// ignore_for_file: unused_import
|
|
||||||
|
|
||||||
import 'dart:convert' as $convert;
|
|
||||||
import 'dart:core' as $core;
|
|
||||||
import 'dart:typed_data' as $typed_data;
|
|
||||||
|
|
||||||
@$core.Deprecated('Use keyTypeDescriptor instead')
|
|
||||||
const KeyType$json = {
|
|
||||||
'1': 'KeyType',
|
|
||||||
'2': [
|
|
||||||
{'1': 'KEY_TYPE_UNSPECIFIED', '2': 0},
|
|
||||||
{'1': 'KEY_TYPE_ED25519', '2': 1},
|
|
||||||
{'1': 'KEY_TYPE_ECDSA_SECP256K1', '2': 2},
|
|
||||||
{'1': 'KEY_TYPE_RSA', '2': 3},
|
|
||||||
],
|
|
||||||
};
|
|
||||||
|
|
||||||
/// Descriptor for `KeyType`. Decode as a `google.protobuf.EnumDescriptorProto`.
|
|
||||||
final $typed_data.Uint8List keyTypeDescriptor = $convert.base64Decode(
|
|
||||||
'CgdLZXlUeXBlEhgKFEtFWV9UWVBFX1VOU1BFQ0lGSUVEEAASFAoQS0VZX1RZUEVfRUQyNTUxOR'
|
|
||||||
'ABEhwKGEtFWV9UWVBFX0VDRFNBX1NFQ1AyNTZLMRACEhAKDEtFWV9UWVBFX1JTQRAD');
|
|
||||||
|
|
||||||
@$core.Deprecated('Use authResultDescriptor instead')
|
|
||||||
const AuthResult$json = {
|
|
||||||
'1': 'AuthResult',
|
|
||||||
'2': [
|
|
||||||
{'1': 'AUTH_RESULT_UNSPECIFIED', '2': 0},
|
|
||||||
{'1': 'AUTH_RESULT_SUCCESS', '2': 1},
|
|
||||||
{'1': 'AUTH_RESULT_INVALID_KEY', '2': 2},
|
|
||||||
{'1': 'AUTH_RESULT_INVALID_SIGNATURE', '2': 3},
|
|
||||||
{'1': 'AUTH_RESULT_BOOTSTRAP_REQUIRED', '2': 4},
|
|
||||||
{'1': 'AUTH_RESULT_TOKEN_INVALID', '2': 5},
|
|
||||||
{'1': 'AUTH_RESULT_INTERNAL', '2': 6},
|
|
||||||
],
|
|
||||||
};
|
|
||||||
|
|
||||||
/// Descriptor for `AuthResult`. Decode as a `google.protobuf.EnumDescriptorProto`.
|
|
||||||
final $typed_data.Uint8List authResultDescriptor = $convert.base64Decode(
|
|
||||||
'CgpBdXRoUmVzdWx0EhsKF0FVVEhfUkVTVUxUX1VOU1BFQ0lGSUVEEAASFwoTQVVUSF9SRVNVTF'
|
|
||||||
'RfU1VDQ0VTUxABEhsKF0FVVEhfUkVTVUxUX0lOVkFMSURfS0VZEAISIQodQVVUSF9SRVNVTFRf'
|
|
||||||
'SU5WQUxJRF9TSUdOQVRVUkUQAxIiCh5BVVRIX1JFU1VMVF9CT09UU1RSQVBfUkVRVUlSRUQQBB'
|
|
||||||
'IdChlBVVRIX1JFU1VMVF9UT0tFTl9JTlZBTElEEAUSGAoUQVVUSF9SRVNVTFRfSU5URVJOQUwQ'
|
|
||||||
'Bg==');
|
|
||||||
|
|
||||||
@$core.Deprecated('Use authChallengeRequestDescriptor instead')
|
|
||||||
const AuthChallengeRequest$json = {
|
|
||||||
'1': 'AuthChallengeRequest',
|
|
||||||
'2': [
|
|
||||||
{'1': 'pubkey', '3': 1, '4': 1, '5': 12, '10': 'pubkey'},
|
|
||||||
{
|
|
||||||
'1': 'bootstrap_token',
|
|
||||||
'3': 2,
|
|
||||||
'4': 1,
|
|
||||||
'5': 9,
|
|
||||||
'9': 0,
|
|
||||||
'10': 'bootstrapToken',
|
|
||||||
'17': true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'1': 'key_type',
|
|
||||||
'3': 3,
|
|
||||||
'4': 1,
|
|
||||||
'5': 14,
|
|
||||||
'6': '.arbiter.user_agent.auth.KeyType',
|
|
||||||
'10': 'keyType'
|
|
||||||
},
|
|
||||||
],
|
|
||||||
'8': [
|
|
||||||
{'1': '_bootstrap_token'},
|
|
||||||
],
|
|
||||||
};
|
|
||||||
|
|
||||||
/// Descriptor for `AuthChallengeRequest`. Decode as a `google.protobuf.DescriptorProto`.
|
|
||||||
final $typed_data.Uint8List authChallengeRequestDescriptor = $convert.base64Decode(
|
|
||||||
'ChRBdXRoQ2hhbGxlbmdlUmVxdWVzdBIWCgZwdWJrZXkYASABKAxSBnB1YmtleRIsCg9ib290c3'
|
|
||||||
'RyYXBfdG9rZW4YAiABKAlIAFIOYm9vdHN0cmFwVG9rZW6IAQESOwoIa2V5X3R5cGUYAyABKA4y'
|
|
||||||
'IC5hcmJpdGVyLnVzZXJfYWdlbnQuYXV0aC5LZXlUeXBlUgdrZXlUeXBlQhIKEF9ib290c3RyYX'
|
|
||||||
'BfdG9rZW4=');
|
|
||||||
|
|
||||||
@$core.Deprecated('Use authChallengeDescriptor instead')
|
|
||||||
const AuthChallenge$json = {
|
|
||||||
'1': 'AuthChallenge',
|
|
||||||
'2': [
|
|
||||||
{'1': 'nonce', '3': 1, '4': 1, '5': 5, '10': 'nonce'},
|
|
||||||
],
|
|
||||||
};
|
|
||||||
|
|
||||||
/// Descriptor for `AuthChallenge`. Decode as a `google.protobuf.DescriptorProto`.
|
|
||||||
final $typed_data.Uint8List authChallengeDescriptor = $convert
|
|
||||||
.base64Decode('Cg1BdXRoQ2hhbGxlbmdlEhQKBW5vbmNlGAEgASgFUgVub25jZQ==');
|
|
||||||
|
|
||||||
@$core.Deprecated('Use authChallengeSolutionDescriptor instead')
|
|
||||||
const AuthChallengeSolution$json = {
|
|
||||||
'1': 'AuthChallengeSolution',
|
|
||||||
'2': [
|
|
||||||
{'1': 'signature', '3': 1, '4': 1, '5': 12, '10': 'signature'},
|
|
||||||
],
|
|
||||||
};
|
|
||||||
|
|
||||||
/// Descriptor for `AuthChallengeSolution`. Decode as a `google.protobuf.DescriptorProto`.
|
|
||||||
final $typed_data.Uint8List authChallengeSolutionDescriptor = $convert.base64Decode(
|
|
||||||
'ChVBdXRoQ2hhbGxlbmdlU29sdXRpb24SHAoJc2lnbmF0dXJlGAEgASgMUglzaWduYXR1cmU=');
|
|
||||||
|
|
||||||
@$core.Deprecated('Use requestDescriptor instead')
|
|
||||||
const Request$json = {
|
|
||||||
'1': 'Request',
|
|
||||||
'2': [
|
|
||||||
{
|
|
||||||
'1': 'challenge_request',
|
|
||||||
'3': 1,
|
|
||||||
'4': 1,
|
|
||||||
'5': 11,
|
|
||||||
'6': '.arbiter.user_agent.auth.AuthChallengeRequest',
|
|
||||||
'9': 0,
|
|
||||||
'10': 'challengeRequest'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'1': 'challenge_solution',
|
|
||||||
'3': 2,
|
|
||||||
'4': 1,
|
|
||||||
'5': 11,
|
|
||||||
'6': '.arbiter.user_agent.auth.AuthChallengeSolution',
|
|
||||||
'9': 0,
|
|
||||||
'10': 'challengeSolution'
|
|
||||||
},
|
|
||||||
],
|
|
||||||
'8': [
|
|
||||||
{'1': 'payload'},
|
|
||||||
],
|
|
||||||
};
|
|
||||||
|
|
||||||
/// Descriptor for `Request`. Decode as a `google.protobuf.DescriptorProto`.
|
|
||||||
final $typed_data.Uint8List requestDescriptor = $convert.base64Decode(
|
|
||||||
'CgdSZXF1ZXN0ElwKEWNoYWxsZW5nZV9yZXF1ZXN0GAEgASgLMi0uYXJiaXRlci51c2VyX2FnZW'
|
|
||||||
'50LmF1dGguQXV0aENoYWxsZW5nZVJlcXVlc3RIAFIQY2hhbGxlbmdlUmVxdWVzdBJfChJjaGFs'
|
|
||||||
'bGVuZ2Vfc29sdXRpb24YAiABKAsyLi5hcmJpdGVyLnVzZXJfYWdlbnQuYXV0aC5BdXRoQ2hhbG'
|
|
||||||
'xlbmdlU29sdXRpb25IAFIRY2hhbGxlbmdlU29sdXRpb25CCQoHcGF5bG9hZA==');
|
|
||||||
|
|
||||||
@$core.Deprecated('Use responseDescriptor instead')
|
|
||||||
const Response$json = {
|
|
||||||
'1': 'Response',
|
|
||||||
'2': [
|
|
||||||
{
|
|
||||||
'1': 'challenge',
|
|
||||||
'3': 1,
|
|
||||||
'4': 1,
|
|
||||||
'5': 11,
|
|
||||||
'6': '.arbiter.user_agent.auth.AuthChallenge',
|
|
||||||
'9': 0,
|
|
||||||
'10': 'challenge'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'1': 'result',
|
|
||||||
'3': 2,
|
|
||||||
'4': 1,
|
|
||||||
'5': 14,
|
|
||||||
'6': '.arbiter.user_agent.auth.AuthResult',
|
|
||||||
'9': 0,
|
|
||||||
'10': 'result'
|
|
||||||
},
|
|
||||||
],
|
|
||||||
'8': [
|
|
||||||
{'1': 'payload'},
|
|
||||||
],
|
|
||||||
};
|
|
||||||
|
|
||||||
/// Descriptor for `Response`. Decode as a `google.protobuf.DescriptorProto`.
|
|
||||||
final $typed_data.Uint8List responseDescriptor = $convert.base64Decode(
|
|
||||||
'CghSZXNwb25zZRJGCgljaGFsbGVuZ2UYASABKAsyJi5hcmJpdGVyLnVzZXJfYWdlbnQuYXV0aC'
|
|
||||||
'5BdXRoQ2hhbGxlbmdlSABSCWNoYWxsZW5nZRI9CgZyZXN1bHQYAiABKA4yIy5hcmJpdGVyLnVz'
|
|
||||||
'ZXJfYWdlbnQuYXV0aC5BdXRoUmVzdWx0SABSBnJlc3VsdEIJCgdwYXlsb2Fk');
|
|
||||||
@@ -1,432 +0,0 @@
|
|||||||
// This is a generated file - do not edit.
|
|
||||||
//
|
|
||||||
// Generated from user_agent/evm.proto.
|
|
||||||
|
|
||||||
// @dart = 3.3
|
|
||||||
|
|
||||||
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
|
|
||||||
// ignore_for_file: constant_identifier_names
|
|
||||||
// ignore_for_file: curly_braces_in_flow_control_structures
|
|
||||||
// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
|
|
||||||
// ignore_for_file: non_constant_identifier_names, prefer_relative_imports
|
|
||||||
|
|
||||||
import 'dart:core' as $core;
|
|
||||||
|
|
||||||
import 'package:protobuf/protobuf.dart' as $pb;
|
|
||||||
import 'package:protobuf/well_known_types/google/protobuf/empty.pb.dart' as $1;
|
|
||||||
|
|
||||||
import '../evm.pb.dart' as $0;
|
|
||||||
|
|
||||||
export 'package:protobuf/protobuf.dart' show GeneratedMessageGenericExtensions;
|
|
||||||
|
|
||||||
class SignTransactionRequest extends $pb.GeneratedMessage {
|
|
||||||
factory SignTransactionRequest({
|
|
||||||
$core.int? clientId,
|
|
||||||
$0.EvmSignTransactionRequest? request,
|
|
||||||
}) {
|
|
||||||
final result = create();
|
|
||||||
if (clientId != null) result.clientId = clientId;
|
|
||||||
if (request != null) result.request = request;
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
SignTransactionRequest._();
|
|
||||||
|
|
||||||
factory SignTransactionRequest.fromBuffer($core.List<$core.int> data,
|
|
||||||
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
|
||||||
create()..mergeFromBuffer(data, registry);
|
|
||||||
factory SignTransactionRequest.fromJson($core.String json,
|
|
||||||
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
|
||||||
create()..mergeFromJson(json, registry);
|
|
||||||
|
|
||||||
static final $pb.BuilderInfo _i = $pb.BuilderInfo(
|
|
||||||
_omitMessageNames ? '' : 'SignTransactionRequest',
|
|
||||||
package: const $pb.PackageName(
|
|
||||||
_omitMessageNames ? '' : 'arbiter.user_agent.evm'),
|
|
||||||
createEmptyInstance: create)
|
|
||||||
..aI(1, _omitFieldNames ? '' : 'clientId')
|
|
||||||
..aOM<$0.EvmSignTransactionRequest>(2, _omitFieldNames ? '' : 'request',
|
|
||||||
subBuilder: $0.EvmSignTransactionRequest.create)
|
|
||||||
..hasRequiredFields = false;
|
|
||||||
|
|
||||||
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
|
||||||
SignTransactionRequest clone() => deepCopy();
|
|
||||||
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
|
||||||
SignTransactionRequest copyWith(
|
|
||||||
void Function(SignTransactionRequest) updates) =>
|
|
||||||
super.copyWith((message) => updates(message as SignTransactionRequest))
|
|
||||||
as SignTransactionRequest;
|
|
||||||
|
|
||||||
@$core.override
|
|
||||||
$pb.BuilderInfo get info_ => _i;
|
|
||||||
|
|
||||||
@$core.pragma('dart2js:noInline')
|
|
||||||
static SignTransactionRequest create() => SignTransactionRequest._();
|
|
||||||
@$core.override
|
|
||||||
SignTransactionRequest createEmptyInstance() => create();
|
|
||||||
@$core.pragma('dart2js:noInline')
|
|
||||||
static SignTransactionRequest getDefault() => _defaultInstance ??=
|
|
||||||
$pb.GeneratedMessage.$_defaultFor<SignTransactionRequest>(create);
|
|
||||||
static SignTransactionRequest? _defaultInstance;
|
|
||||||
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
$core.int get clientId => $_getIZ(0);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
set clientId($core.int value) => $_setSignedInt32(0, value);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
$core.bool hasClientId() => $_has(0);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
void clearClientId() => $_clearField(1);
|
|
||||||
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
$0.EvmSignTransactionRequest get request => $_getN(1);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
set request($0.EvmSignTransactionRequest value) => $_setField(2, value);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
$core.bool hasRequest() => $_has(1);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
void clearRequest() => $_clearField(2);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
$0.EvmSignTransactionRequest ensureRequest() => $_ensure(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
enum Request_Payload {
|
|
||||||
walletCreate,
|
|
||||||
walletList,
|
|
||||||
grantCreate,
|
|
||||||
grantDelete,
|
|
||||||
grantList,
|
|
||||||
signTransaction,
|
|
||||||
notSet
|
|
||||||
}
|
|
||||||
|
|
||||||
class Request extends $pb.GeneratedMessage {
|
|
||||||
factory Request({
|
|
||||||
$1.Empty? walletCreate,
|
|
||||||
$1.Empty? walletList,
|
|
||||||
$0.EvmGrantCreateRequest? grantCreate,
|
|
||||||
$0.EvmGrantDeleteRequest? grantDelete,
|
|
||||||
$0.EvmGrantListRequest? grantList,
|
|
||||||
SignTransactionRequest? signTransaction,
|
|
||||||
}) {
|
|
||||||
final result = create();
|
|
||||||
if (walletCreate != null) result.walletCreate = walletCreate;
|
|
||||||
if (walletList != null) result.walletList = walletList;
|
|
||||||
if (grantCreate != null) result.grantCreate = grantCreate;
|
|
||||||
if (grantDelete != null) result.grantDelete = grantDelete;
|
|
||||||
if (grantList != null) result.grantList = grantList;
|
|
||||||
if (signTransaction != null) result.signTransaction = signTransaction;
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
Request._();
|
|
||||||
|
|
||||||
factory Request.fromBuffer($core.List<$core.int> data,
|
|
||||||
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
|
||||||
create()..mergeFromBuffer(data, registry);
|
|
||||||
factory Request.fromJson($core.String json,
|
|
||||||
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
|
||||||
create()..mergeFromJson(json, registry);
|
|
||||||
|
|
||||||
static const $core.Map<$core.int, Request_Payload> _Request_PayloadByTag = {
|
|
||||||
1: Request_Payload.walletCreate,
|
|
||||||
2: Request_Payload.walletList,
|
|
||||||
3: Request_Payload.grantCreate,
|
|
||||||
4: Request_Payload.grantDelete,
|
|
||||||
5: Request_Payload.grantList,
|
|
||||||
6: Request_Payload.signTransaction,
|
|
||||||
0: Request_Payload.notSet
|
|
||||||
};
|
|
||||||
static final $pb.BuilderInfo _i = $pb.BuilderInfo(
|
|
||||||
_omitMessageNames ? '' : 'Request',
|
|
||||||
package: const $pb.PackageName(
|
|
||||||
_omitMessageNames ? '' : 'arbiter.user_agent.evm'),
|
|
||||||
createEmptyInstance: create)
|
|
||||||
..oo(0, [1, 2, 3, 4, 5, 6])
|
|
||||||
..aOM<$1.Empty>(1, _omitFieldNames ? '' : 'walletCreate',
|
|
||||||
subBuilder: $1.Empty.create)
|
|
||||||
..aOM<$1.Empty>(2, _omitFieldNames ? '' : 'walletList',
|
|
||||||
subBuilder: $1.Empty.create)
|
|
||||||
..aOM<$0.EvmGrantCreateRequest>(3, _omitFieldNames ? '' : 'grantCreate',
|
|
||||||
subBuilder: $0.EvmGrantCreateRequest.create)
|
|
||||||
..aOM<$0.EvmGrantDeleteRequest>(4, _omitFieldNames ? '' : 'grantDelete',
|
|
||||||
subBuilder: $0.EvmGrantDeleteRequest.create)
|
|
||||||
..aOM<$0.EvmGrantListRequest>(5, _omitFieldNames ? '' : 'grantList',
|
|
||||||
subBuilder: $0.EvmGrantListRequest.create)
|
|
||||||
..aOM<SignTransactionRequest>(6, _omitFieldNames ? '' : 'signTransaction',
|
|
||||||
subBuilder: SignTransactionRequest.create)
|
|
||||||
..hasRequiredFields = false;
|
|
||||||
|
|
||||||
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
|
||||||
Request clone() => deepCopy();
|
|
||||||
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
|
||||||
Request copyWith(void Function(Request) updates) =>
|
|
||||||
super.copyWith((message) => updates(message as Request)) as Request;
|
|
||||||
|
|
||||||
@$core.override
|
|
||||||
$pb.BuilderInfo get info_ => _i;
|
|
||||||
|
|
||||||
@$core.pragma('dart2js:noInline')
|
|
||||||
static Request create() => Request._();
|
|
||||||
@$core.override
|
|
||||||
Request createEmptyInstance() => create();
|
|
||||||
@$core.pragma('dart2js:noInline')
|
|
||||||
static Request getDefault() =>
|
|
||||||
_defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<Request>(create);
|
|
||||||
static Request? _defaultInstance;
|
|
||||||
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
@$pb.TagNumber(3)
|
|
||||||
@$pb.TagNumber(4)
|
|
||||||
@$pb.TagNumber(5)
|
|
||||||
@$pb.TagNumber(6)
|
|
||||||
Request_Payload whichPayload() => _Request_PayloadByTag[$_whichOneof(0)]!;
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
@$pb.TagNumber(3)
|
|
||||||
@$pb.TagNumber(4)
|
|
||||||
@$pb.TagNumber(5)
|
|
||||||
@$pb.TagNumber(6)
|
|
||||||
void clearPayload() => $_clearField($_whichOneof(0));
|
|
||||||
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
$1.Empty get walletCreate => $_getN(0);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
set walletCreate($1.Empty value) => $_setField(1, value);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
$core.bool hasWalletCreate() => $_has(0);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
void clearWalletCreate() => $_clearField(1);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
$1.Empty ensureWalletCreate() => $_ensure(0);
|
|
||||||
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
$1.Empty get walletList => $_getN(1);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
set walletList($1.Empty value) => $_setField(2, value);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
$core.bool hasWalletList() => $_has(1);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
void clearWalletList() => $_clearField(2);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
$1.Empty ensureWalletList() => $_ensure(1);
|
|
||||||
|
|
||||||
@$pb.TagNumber(3)
|
|
||||||
$0.EvmGrantCreateRequest get grantCreate => $_getN(2);
|
|
||||||
@$pb.TagNumber(3)
|
|
||||||
set grantCreate($0.EvmGrantCreateRequest value) => $_setField(3, value);
|
|
||||||
@$pb.TagNumber(3)
|
|
||||||
$core.bool hasGrantCreate() => $_has(2);
|
|
||||||
@$pb.TagNumber(3)
|
|
||||||
void clearGrantCreate() => $_clearField(3);
|
|
||||||
@$pb.TagNumber(3)
|
|
||||||
$0.EvmGrantCreateRequest ensureGrantCreate() => $_ensure(2);
|
|
||||||
|
|
||||||
@$pb.TagNumber(4)
|
|
||||||
$0.EvmGrantDeleteRequest get grantDelete => $_getN(3);
|
|
||||||
@$pb.TagNumber(4)
|
|
||||||
set grantDelete($0.EvmGrantDeleteRequest value) => $_setField(4, value);
|
|
||||||
@$pb.TagNumber(4)
|
|
||||||
$core.bool hasGrantDelete() => $_has(3);
|
|
||||||
@$pb.TagNumber(4)
|
|
||||||
void clearGrantDelete() => $_clearField(4);
|
|
||||||
@$pb.TagNumber(4)
|
|
||||||
$0.EvmGrantDeleteRequest ensureGrantDelete() => $_ensure(3);
|
|
||||||
|
|
||||||
@$pb.TagNumber(5)
|
|
||||||
$0.EvmGrantListRequest get grantList => $_getN(4);
|
|
||||||
@$pb.TagNumber(5)
|
|
||||||
set grantList($0.EvmGrantListRequest value) => $_setField(5, value);
|
|
||||||
@$pb.TagNumber(5)
|
|
||||||
$core.bool hasGrantList() => $_has(4);
|
|
||||||
@$pb.TagNumber(5)
|
|
||||||
void clearGrantList() => $_clearField(5);
|
|
||||||
@$pb.TagNumber(5)
|
|
||||||
$0.EvmGrantListRequest ensureGrantList() => $_ensure(4);
|
|
||||||
|
|
||||||
@$pb.TagNumber(6)
|
|
||||||
SignTransactionRequest get signTransaction => $_getN(5);
|
|
||||||
@$pb.TagNumber(6)
|
|
||||||
set signTransaction(SignTransactionRequest value) => $_setField(6, value);
|
|
||||||
@$pb.TagNumber(6)
|
|
||||||
$core.bool hasSignTransaction() => $_has(5);
|
|
||||||
@$pb.TagNumber(6)
|
|
||||||
void clearSignTransaction() => $_clearField(6);
|
|
||||||
@$pb.TagNumber(6)
|
|
||||||
SignTransactionRequest ensureSignTransaction() => $_ensure(5);
|
|
||||||
}
|
|
||||||
|
|
||||||
enum Response_Payload {
|
|
||||||
walletCreate,
|
|
||||||
walletList,
|
|
||||||
grantCreate,
|
|
||||||
grantDelete,
|
|
||||||
grantList,
|
|
||||||
signTransaction,
|
|
||||||
notSet
|
|
||||||
}
|
|
||||||
|
|
||||||
class Response extends $pb.GeneratedMessage {
|
|
||||||
factory Response({
|
|
||||||
$0.WalletCreateResponse? walletCreate,
|
|
||||||
$0.WalletListResponse? walletList,
|
|
||||||
$0.EvmGrantCreateResponse? grantCreate,
|
|
||||||
$0.EvmGrantDeleteResponse? grantDelete,
|
|
||||||
$0.EvmGrantListResponse? grantList,
|
|
||||||
$0.EvmSignTransactionResponse? signTransaction,
|
|
||||||
}) {
|
|
||||||
final result = create();
|
|
||||||
if (walletCreate != null) result.walletCreate = walletCreate;
|
|
||||||
if (walletList != null) result.walletList = walletList;
|
|
||||||
if (grantCreate != null) result.grantCreate = grantCreate;
|
|
||||||
if (grantDelete != null) result.grantDelete = grantDelete;
|
|
||||||
if (grantList != null) result.grantList = grantList;
|
|
||||||
if (signTransaction != null) result.signTransaction = signTransaction;
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
Response._();
|
|
||||||
|
|
||||||
factory Response.fromBuffer($core.List<$core.int> data,
|
|
||||||
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
|
||||||
create()..mergeFromBuffer(data, registry);
|
|
||||||
factory Response.fromJson($core.String json,
|
|
||||||
[$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
|
|
||||||
create()..mergeFromJson(json, registry);
|
|
||||||
|
|
||||||
static const $core.Map<$core.int, Response_Payload> _Response_PayloadByTag = {
|
|
||||||
1: Response_Payload.walletCreate,
|
|
||||||
2: Response_Payload.walletList,
|
|
||||||
3: Response_Payload.grantCreate,
|
|
||||||
4: Response_Payload.grantDelete,
|
|
||||||
5: Response_Payload.grantList,
|
|
||||||
6: Response_Payload.signTransaction,
|
|
||||||
0: Response_Payload.notSet
|
|
||||||
};
|
|
||||||
static final $pb.BuilderInfo _i = $pb.BuilderInfo(
|
|
||||||
_omitMessageNames ? '' : 'Response',
|
|
||||||
package: const $pb.PackageName(
|
|
||||||
_omitMessageNames ? '' : 'arbiter.user_agent.evm'),
|
|
||||||
createEmptyInstance: create)
|
|
||||||
..oo(0, [1, 2, 3, 4, 5, 6])
|
|
||||||
..aOM<$0.WalletCreateResponse>(1, _omitFieldNames ? '' : 'walletCreate',
|
|
||||||
subBuilder: $0.WalletCreateResponse.create)
|
|
||||||
..aOM<$0.WalletListResponse>(2, _omitFieldNames ? '' : 'walletList',
|
|
||||||
subBuilder: $0.WalletListResponse.create)
|
|
||||||
..aOM<$0.EvmGrantCreateResponse>(3, _omitFieldNames ? '' : 'grantCreate',
|
|
||||||
subBuilder: $0.EvmGrantCreateResponse.create)
|
|
||||||
..aOM<$0.EvmGrantDeleteResponse>(4, _omitFieldNames ? '' : 'grantDelete',
|
|
||||||
subBuilder: $0.EvmGrantDeleteResponse.create)
|
|
||||||
..aOM<$0.EvmGrantListResponse>(5, _omitFieldNames ? '' : 'grantList',
|
|
||||||
subBuilder: $0.EvmGrantListResponse.create)
|
|
||||||
..aOM<$0.EvmSignTransactionResponse>(
|
|
||||||
6, _omitFieldNames ? '' : 'signTransaction',
|
|
||||||
subBuilder: $0.EvmSignTransactionResponse.create)
|
|
||||||
..hasRequiredFields = false;
|
|
||||||
|
|
||||||
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
|
||||||
Response clone() => deepCopy();
|
|
||||||
@$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
|
|
||||||
Response copyWith(void Function(Response) updates) =>
|
|
||||||
super.copyWith((message) => updates(message as Response)) as Response;
|
|
||||||
|
|
||||||
@$core.override
|
|
||||||
$pb.BuilderInfo get info_ => _i;
|
|
||||||
|
|
||||||
@$core.pragma('dart2js:noInline')
|
|
||||||
static Response create() => Response._();
|
|
||||||
@$core.override
|
|
||||||
Response createEmptyInstance() => create();
|
|
||||||
@$core.pragma('dart2js:noInline')
|
|
||||||
static Response getDefault() =>
|
|
||||||
_defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<Response>(create);
|
|
||||||
static Response? _defaultInstance;
|
|
||||||
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
@$pb.TagNumber(3)
|
|
||||||
@$pb.TagNumber(4)
|
|
||||||
@$pb.TagNumber(5)
|
|
||||||
@$pb.TagNumber(6)
|
|
||||||
Response_Payload whichPayload() => _Response_PayloadByTag[$_whichOneof(0)]!;
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
@$pb.TagNumber(3)
|
|
||||||
@$pb.TagNumber(4)
|
|
||||||
@$pb.TagNumber(5)
|
|
||||||
@$pb.TagNumber(6)
|
|
||||||
void clearPayload() => $_clearField($_whichOneof(0));
|
|
||||||
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
$0.WalletCreateResponse get walletCreate => $_getN(0);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
set walletCreate($0.WalletCreateResponse value) => $_setField(1, value);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
$core.bool hasWalletCreate() => $_has(0);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
void clearWalletCreate() => $_clearField(1);
|
|
||||||
@$pb.TagNumber(1)
|
|
||||||
$0.WalletCreateResponse ensureWalletCreate() => $_ensure(0);
|
|
||||||
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
$0.WalletListResponse get walletList => $_getN(1);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
set walletList($0.WalletListResponse value) => $_setField(2, value);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
$core.bool hasWalletList() => $_has(1);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
void clearWalletList() => $_clearField(2);
|
|
||||||
@$pb.TagNumber(2)
|
|
||||||
$0.WalletListResponse ensureWalletList() => $_ensure(1);
|
|
||||||
|
|
||||||
@$pb.TagNumber(3)
|
|
||||||
$0.EvmGrantCreateResponse get grantCreate => $_getN(2);
|
|
||||||
@$pb.TagNumber(3)
|
|
||||||
set grantCreate($0.EvmGrantCreateResponse value) => $_setField(3, value);
|
|
||||||
@$pb.TagNumber(3)
|
|
||||||
$core.bool hasGrantCreate() => $_has(2);
|
|
||||||
@$pb.TagNumber(3)
|
|
||||||
void clearGrantCreate() => $_clearField(3);
|
|
||||||
@$pb.TagNumber(3)
|
|
||||||
$0.EvmGrantCreateResponse ensureGrantCreate() => $_ensure(2);
|
|
||||||
|
|
||||||
@$pb.TagNumber(4)
|
|
||||||
$0.EvmGrantDeleteResponse get grantDelete => $_getN(3);
|
|
||||||
@$pb.TagNumber(4)
|
|
||||||
set grantDelete($0.EvmGrantDeleteResponse value) => $_setField(4, value);
|
|
||||||
@$pb.TagNumber(4)
|
|
||||||
$core.bool hasGrantDelete() => $_has(3);
|
|
||||||
@$pb.TagNumber(4)
|
|
||||||
void clearGrantDelete() => $_clearField(4);
|
|
||||||
@$pb.TagNumber(4)
|
|
||||||
$0.EvmGrantDeleteResponse ensureGrantDelete() => $_ensure(3);
|
|
||||||
|
|
||||||
@$pb.TagNumber(5)
|
|
||||||
$0.EvmGrantListResponse get grantList => $_getN(4);
|
|
||||||
@$pb.TagNumber(5)
|
|
||||||
set grantList($0.EvmGrantListResponse value) => $_setField(5, value);
|
|
||||||
@$pb.TagNumber(5)
|
|
||||||
$core.bool hasGrantList() => $_has(4);
|
|
||||||
@$pb.TagNumber(5)
|
|
||||||
void clearGrantList() => $_clearField(5);
|
|
||||||
@$pb.TagNumber(5)
|
|
||||||
$0.EvmGrantListResponse ensureGrantList() => $_ensure(4);
|
|
||||||
|
|
||||||
@$pb.TagNumber(6)
|
|
||||||
$0.EvmSignTransactionResponse get signTransaction => $_getN(5);
|
|
||||||
@$pb.TagNumber(6)
|
|
||||||
set signTransaction($0.EvmSignTransactionResponse value) =>
|
|
||||||
$_setField(6, value);
|
|
||||||
@$pb.TagNumber(6)
|
|
||||||
$core.bool hasSignTransaction() => $_has(5);
|
|
||||||
@$pb.TagNumber(6)
|
|
||||||
void clearSignTransaction() => $_clearField(6);
|
|
||||||
@$pb.TagNumber(6)
|
|
||||||
$0.EvmSignTransactionResponse ensureSignTransaction() => $_ensure(5);
|
|
||||||
}
|
|
||||||
|
|
||||||
const $core.bool _omitFieldNames =
|
|
||||||
$core.bool.fromEnvironment('protobuf.omit_field_names');
|
|
||||||
const $core.bool _omitMessageNames =
|
|
||||||
$core.bool.fromEnvironment('protobuf.omit_message_names');
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
// This is a generated file - do not edit.
|
|
||||||
//
|
|
||||||
// Generated from user_agent/evm.proto.
|
|
||||||
|
|
||||||
// @dart = 3.3
|
|
||||||
|
|
||||||
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
|
|
||||||
// ignore_for_file: constant_identifier_names
|
|
||||||
// ignore_for_file: curly_braces_in_flow_control_structures
|
|
||||||
// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
|
|
||||||
// ignore_for_file: non_constant_identifier_names, prefer_relative_imports
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user