Skip to content

Commit

Permalink
Set allow schema ids via node config on startup
Browse files Browse the repository at this point in the history
  • Loading branch information
sandreae committed May 30, 2024
1 parent 1bdce46 commit 6a8285e
Show file tree
Hide file tree
Showing 5 changed files with 46 additions and 9 deletions.
11 changes: 7 additions & 4 deletions packages/app/lib/io/p2panda/node.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import 'package:app/io/files.dart';
import 'package:app/io/graphql/queries.dart';
import 'package:app/io/p2panda/key_pair.dart';
import 'package:app/io/p2panda/p2panda.dart';
import 'package:app/models/schema_ids.dart';
import 'package:app/utils/sleep.dart';

const List<String> relayAddresses = bool.hasEnvironment("RELAY_ADDRESS")
Expand All @@ -27,10 +28,12 @@ Future<void> startNode() async {

// Start node in background thread
p2panda.startNode(
keyPair: key,
databaseUrl: databaseUrl,
blobsBasePath: basePath,
relayAddresses: relayAddresses);
keyPair: key,
databaseUrl: databaseUrl,
blobsBasePath: basePath,
relayAddresses: relayAddresses,
allowSchemaIds: ALL_SCHEMA_IDS,
);

// .. since we can't `await` the FFI binding method from Rust we need to
// poll here to find out until the node is ready
Expand Down
4 changes: 4 additions & 0 deletions packages/app/lib/models/schema_ids.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ abstract final class SchemaIds {
/// System schema
static const SchemaId blob_piece = 'blob_piece_v1';
static const SchemaId blob = 'blob_v1';
static const SchemaId schema_definition = 'schema_definition_v1';
static const SchemaId schema_field_definition = 'schema_field_definition_v1';

/// Sighting and species schema.
static const SchemaId bee_sighting =
Expand Down Expand Up @@ -51,6 +53,8 @@ abstract final class SchemaIds {

/// List of all schema ids which are used by the meli app.
const List<SchemaId> ALL_SCHEMA_IDS = [
SchemaIds.blob,
SchemaIds.blob_piece,
SchemaIds.bee_sighting,
SchemaIds.bee_local_name,
SchemaIds.bee_species,
Expand Down
25 changes: 22 additions & 3 deletions packages/p2panda/lib/src/bridge_generated.dart
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ abstract class P2Panda {
required String databaseUrl,
required String blobsBasePath,
required List<String> relayAddresses,
required List<String> allowSchemaIds,
dynamic hint});

FlutterRustBridgeTaskConstMeta get kStartNodeConstMeta;
Expand Down Expand Up @@ -334,26 +335,40 @@ class P2PandaImpl implements P2Panda {
required String databaseUrl,
required String blobsBasePath,
required List<String> relayAddresses,
required List<String> allowSchemaIds,
dynamic hint}) {
var arg0 = _platform.api2wire_box_autoadd_key_pair(keyPair);
var arg1 = _platform.api2wire_String(databaseUrl);
var arg2 = _platform.api2wire_String(blobsBasePath);
var arg3 = _platform.api2wire_StringList(relayAddresses);
var arg4 = _platform.api2wire_StringList(allowSchemaIds);
return _platform.executeNormal(FlutterRustBridgeTask(
callFfi: (port_) =>
_platform.inner.wire_start_node(port_, arg0, arg1, arg2, arg3),
_platform.inner.wire_start_node(port_, arg0, arg1, arg2, arg3, arg4),
parseSuccessData: _wire2api_unit,
parseErrorData: _wire2api_FrbAnyhowException,
constMeta: kStartNodeConstMeta,
argValues: [keyPair, databaseUrl, blobsBasePath, relayAddresses],
argValues: [
keyPair,
databaseUrl,
blobsBasePath,
relayAddresses,
allowSchemaIds
],
hint: hint,
));
}

FlutterRustBridgeTaskConstMeta get kStartNodeConstMeta =>
const FlutterRustBridgeTaskConstMeta(
debugName: "start_node",
argNames: ["keyPair", "databaseUrl", "blobsBasePath", "relayAddresses"],
argNames: [
"keyPair",
"databaseUrl",
"blobsBasePath",
"relayAddresses",
"allowSchemaIds"
],
);

Future<void> shutdownNode({dynamic hint}) {
Expand Down Expand Up @@ -944,13 +959,15 @@ class P2PandaWire implements FlutterRustBridgeWireBase {
ffi.Pointer<wire_uint_8_list> database_url,
ffi.Pointer<wire_uint_8_list> blobs_base_path,
ffi.Pointer<wire_StringList> relay_addresses,
ffi.Pointer<wire_StringList> allow_schema_ids,
) {
return _wire_start_node(
port_,
key_pair,
database_url,
blobs_base_path,
relay_addresses,
allow_schema_ids,
);
}

Expand All @@ -961,13 +978,15 @@ class P2PandaWire implements FlutterRustBridgeWireBase {
ffi.Pointer<wire_KeyPair>,
ffi.Pointer<wire_uint_8_list>,
ffi.Pointer<wire_uint_8_list>,
ffi.Pointer<wire_StringList>,
ffi.Pointer<wire_StringList>)>>('wire_start_node');
late final _wire_start_node = _wire_start_nodePtr.asFunction<
void Function(
int,
ffi.Pointer<wire_KeyPair>,
ffi.Pointer<wire_uint_8_list>,
ffi.Pointer<wire_uint_8_list>,
ffi.Pointer<wire_StringList>,
ffi.Pointer<wire_StringList>)>();

void wire_shutdown_node(
Expand Down
10 changes: 8 additions & 2 deletions packages/p2panda/native/src/api.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

use android_logger::{Config, FilterBuilder};
use anyhow::{anyhow, Result};
use aquadoggo::Configuration;
use aquadoggo::{AllowList, Configuration};
use ed25519_dalek::SecretKey;
use flutter_rust_bridge::RustOpaque;
use log::LevelFilter;
Expand All @@ -14,7 +14,7 @@ pub use p2panda_rs::identity::KeyPair as PandaKeyPair;
use p2panda_rs::operation;
use p2panda_rs::operation::traits::{Actionable, Schematic};
use p2panda_rs::operation::EncodedOperation;
use p2panda_rs::schema::SchemaId;
use p2panda_rs::schema::{Schema, SchemaId};
use tokio::sync::OnceCell;

use crate::node::Manager;
Expand Down Expand Up @@ -215,6 +215,7 @@ pub fn start_node(
database_url: String,
blobs_base_path: String,
relay_addresses: Vec<String>,
allow_schema_ids: Vec<String>,
) -> Result<()> {
// Initialise logging for Android developer console
android_logger::init_once(
Expand All @@ -233,6 +234,11 @@ pub fn start_node(
config.blobs_base_path = blobs_base_path.into();
config.worker_pool_size = 2;
config.database_max_connections = 16;
let allow_schema_ids = allow_schema_ids
.iter()
.map(|id| SchemaId::new(id))
.collect::<Result<Vec<SchemaId>, _>>()?;
config.allow_schema_ids = AllowList::Set(allow_schema_ids);
config.network.mdns = true;
config.network.relay_addresses = relay_addresses
.iter()
Expand Down
5 changes: 5 additions & 0 deletions packages/p2panda/native/src/bridge_generated.rs
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@ fn wire_start_node_impl(
database_url: impl Wire2Api<String> + UnwindSafe,
blobs_base_path: impl Wire2Api<String> + UnwindSafe,
relay_addresses: impl Wire2Api<Vec<String>> + UnwindSafe,
allow_schema_ids: impl Wire2Api<Vec<String>> + UnwindSafe,
) {
FLUTTER_RUST_BRIDGE_HANDLER.wrap::<_, _, _, (), _>(
WrapInfo {
Expand All @@ -126,12 +127,14 @@ fn wire_start_node_impl(
let api_database_url = database_url.wire2api();
let api_blobs_base_path = blobs_base_path.wire2api();
let api_relay_addresses = relay_addresses.wire2api();
let api_allow_schema_ids = allow_schema_ids.wire2api();
move |task_callback| {
start_node(
api_key_pair,
api_database_url,
api_blobs_base_path,
api_relay_addresses,
api_allow_schema_ids,
)
}
},
Expand Down Expand Up @@ -358,13 +361,15 @@ mod io {
database_url: *mut wire_uint_8_list,
blobs_base_path: *mut wire_uint_8_list,
relay_addresses: *mut wire_StringList,
allow_schema_ids: *mut wire_StringList,
) {
wire_start_node_impl(
port_,
key_pair,
database_url,
blobs_base_path,
relay_addresses,
allow_schema_ids,
)
}

Expand Down

0 comments on commit 6a8285e

Please sign in to comment.