Skip to content

Commit cbbd79f

Browse files
czarteBertFinsaasGHdnwiebe
authored
Gh v2 580b czarte (#629)
* test for exit location in large patch * implementing exit_location * ExitLocation struct and its members to messages.rs, set_exit_location_command to masq, implemented From(String, usize) for CountryCodes * Gh 784 review four (#521) * continue of code review changes * test for panic in handle_retrieve_transactions * fixing more comments from review * removing TODO * implementing review, added two new tests for ip_country * removing unnecesary country_code from node_descriptor * added cfg(test) and cfg(not(test)) for static ref COUNTRY_CODE_FINDER, created test_dbip_country.rs * change country_code member of NodeRecordInner_0v1 to country_code_opt * simplifying tests in node_record.rs and neighborhood_database.rs * resolving review comments * final changes in gossip_acceptor from review * continue of implementing review comments * fix test return value * added ip_country to ci/all.sh * cherry-pick from GH-784-fix-for-Vojta and implementing iterator for deserializer * try to create test for fmt * tests for print ip v4 and v6 vec[u8] in country_block_serde.rs * ci for ip_country + resolved conflicts of clippy * masq_lib dependencies solved * dependency masq_lib for ip_country in node workspace * remove commented out code + fix condition for non empty bit_queue * formatting * 5 seconds for wait_for_log in requested_chain_meets_different_db_chain_and_panics_integration * fixing impl for AGR in multinode tests * formatting * fix nonexistent NodeAddr in multinode tests for AGR * change single match to if * try to fix build in actions for MacOS * try to find out disk space on MacOS container in Actions * add diagnostics commands on failure * check diskspace before ci/all.sh workflow runs * diagnose mounted disks * analyze /var/ diskspace * remove advanced diagnosticst for disk space * switch macos to version 13 * diagnostics for /Users/runner/work/Node/Node/node/target/release * fasten diagnostics * fasten diagnostics fix * fasten diagnostics back * GH-784-review-two-state: fixes that could work on Actions, appeasing it * fixing review * implementing CountryBlock count in generated rs file, and infrastructure * fixing ip_country tests * fix import of ip_country to multinode_integration_tests * formatting * fix the reference for COUNTRY_CODE_FINDER * implemenitng initalization checker for COUNTRY_CODE_FINDER * CountryCodeFinder initializer * fixed comments from review * removed custom PartialEq for NodeLocation * get back with COUNTRY_CODE_FINDER --------- Co-authored-by: Bert <Bert@Bert.com> * implemented country-codes and fallback-routing into MessageBody for Node from the UI * completed test for c ommand for exit location, add test for neighborhood actor to test recieved message * implemented handler for exit_location_opt, rename exit_loctation to exit_location_opt, cleanup persistent configuration, test finished for set_exit_location message handler * fmt for HashSet<ExitLocation>, finished the assertions in test exit_location_can_be_changed_using_exit_location_msg * cleanup, test for fallback-routing: false, logger for fallback-routing and implementation for handle from message in Neighborhood * change exit_locations_opt from HashSet to HashMap * clearing bootstrapper config * country_undesidability to NodeRecordMetadata * added member for NodeRecordMetadata and processing for country_undesirability in message handler for exit location * added assertion message for assert on db change in actor * refacotring neighborhood_test_utils: extracted make_segmented_ip, and make_segments for usage in tests, add comments to assertions in handle_exit_location test, test for nodes_mut * added unset exit_location logic with test * change name of test * fiixing tests for set_exit_location_command, fixing log assertion for exit_location handler in Neighborhood * added assertion on neighborhood to exit_location tests * pull request branch changed to GH-784 * formatting * fixing comments from review * polishing helps * addressing comments from review * polishing helps for exit-location * add use super::*; to tests use * add cfg(test) for tests in set_exit_location_command * fixing clippy complains * fix multinode neighborhood constructor * rename set_exit_location_command.rs to exit_location_command.rs * add protection for empty Neighborhood DB * change protection for empty Neighborhood * fixed shared schema, added exit location to --help of masq * set version for sccache * add lifetime for daemon_shared_app fn return * fixing log assertion in tests, add db to exit location test, fix app lifetime for daemon help * introduce test utilities * remove unused import - localhost linux compile and passes all ip_country tests * addressing comments from review * addressing comments from review, refactoring Neighborhood for exit-location, introduce enum for ExitPreference, fixed Display for ExitLocationSet * fix tests for separate_u64_values * add Eq to ExitPreference * rearranged test_utilities, fix to exit_location_handler and its tests * fixing ByteArrayWriter and Reader for masq * added more nodes to exit_location test with fallback to test UNREACHABLE_COUNTRY_PENALTY * move test_utilities to dev-dependencies * test_utilities from dev to production dependencies in masq_lib * formatting help * formatting help * review 3 - refactoring message handler for exit location, and few minor changes * country codes for NodeRecords in tests Neighborhood DBs, constants for assertion and better error messages, other minor changes * formatting * fix todo comment, and formatting * exit-loaction data structures moved into the ExitTools, cloned into NeighborhoodMetadata and sent to handler, modified test for gossip handler to ensure new node has modified undesirability * implemented adding country_undesirability for introducer and debutant * formatting and remove unnecesary let * fallback routing assertion change * formatting * rename ExitTools * fix request for neverssl.com to impersonate user-agent * changes in test for country_code_route, remove country_code_opt from routing engine, replaced by UserExitPreferences, implemented filtr for country_code in routing * working exit country selection wihtout fallback, introduces new structure db_countries and find_exit_location fn from GH-469 * start of implementing find_exit_location * changes to create db_countries * completed process for db_countries and routign_engine for fallback_routing * handling missing locations in NeighborhoodDB * introduced Error responose for ExitLocation handler, adjusted tests, investigate find_exit_location function and routng_engine * modified routing engine to harvest more exit nodes from Neihgborhood DB * implemented recursion for research neighborhood, adjusted tests, missing_countries moved to extract_exit_locations_from_message * fix research_neighborhood in routing_engine, new recursion call for research_neighborhood, recursion guts moved to outbound function * formatting and compiler complains resolved * test for db_countries setting on handle gossip * completed test for newly introduced exit node, added assertions, works * test for removing exit location of last node with particular country code from db_countries, TODO created * formatting * removing comments, introducing TODOs * unit test for init_db_countries(), removed duplicit test for handle gossip * added --show-countries for exit-location subcommand for testing purposes * first cherry pick from amoy commit b2a3ebf * added amoy network * formatting * amoy fixing * fixing routing engine for direction back in route, and fallback-routing condition * create prefix with capacity * back to previous version of routing_engine * fix dotgraph * allow dead code for unused service functions for new multinode integration test of exit_location * fix tilde for windows - cherry pick from master * formatting * remove unused imports * fix tilde in config-file path from master * replace neverssl.com for testingmcafeesites.com in multiple_streans_zero_hop * formatting * remove slash from url in test to pass * multinode test with processing functions * remove unused imports and questionmark * connect last node to germany network * interconnect_world_network public * remove networks before creation * add creation of integration_net to test * remove world network from last node * fix first node * network into docker run * add clone, debug, partialeq to NetworkPack * fix arguments count to do_docker_run * fix do_prepared_docker_run * solving temporary issue * solving dereference * solving free while use issue * resolve lifetime issues * resolve lifetime issues do_docker_run * remove network connect duplication * fix ip start index for nodes in loop * fix ip start index for nodes in loop cz * fix ip start in loop * fix ip start in loop de * multinode integration test with multiple real networks, selecting exit-location country, and retrieving web result * country_code_exit_location_routing - final stage with multiple networks * multinode test http_end_to_end_routing_test_with_exit_locationL * rebuilding exit-location command response * introduced UiSetExitLocationResponse and processing it in masq CLI, fixed exit-location handler and messages * multinode test and refactoring masq command request and response * resolving self-review: updated copyright to right year, removing obsolete TODOs, added test for constants, corrected output to stdout in exit_location_command * added assertions Response and udated Response processing exit-location-command tests * remove unnecessary Docker components for exit_location test, fixing self review commnets, new TODO in neighborhood/mod.rs * resolved handle_new_public_ip test, and half way to resolve handle_gossip test and update db_countries on DB change * test for init_db_countries in handle_agrs, condition for one-hop in handle_agrs Reply, remove target_country_opt * formatting * fix exit-location cmd assertion * multinode test from master * make_node_record do not add country if show_ip is false * ok_responose partialy from master for MockBlockchainClientServer * resolved last comments * remove data from dbip_country.rs - prepared for actions build * working on exit_location_command * addressing issues from review * continue addressing review comments * Added DBIP file generation * ci: improve GitHub Actions workflow - Replace s3-sync-action with AWS CLI, update credentials handling, improve cache invalidation * refactor: improve path resolution and code quality in generate_dbip * ci: remove unnecessary dependencies and update generate dbip step * chore: remove unused generate_dbip_country.sh script * docs: update download script message to reference cargo command * refactor: Improve generate_dbip.rs organization and efficiency * fix: Update dbip_country.rs paths in CI workflow to use temp directory * fix: Update verification pattern for generated dbip file * ci: revert platform changes to legacy * ci: update windows specific file move to use bash * ci: corrected verification step * more addressed comments from review * test for min_hops_change affects exit_countries and enrich_exit_countries in extract_exit_locations_from_message to be implemented in handle_config_change_msg * new machinery for min-hop affects exit location settings * handle_config_change_msg debugging * finalize min_hops_change_affects_db_countries test * rename test * refactoring neighborhood/mod.rs, moving AccessibleGossipRecord to gossip.rs, formatting * Room for an MMDB parser * Generating countries, rudimentary * parse() should produce a Countries object, instead of Vec<(String, String)>. Gonna do that. * fix db to dot grap test * Interim commit * addressing more comments from review * addressing minor changes from review * addressing review comments * resolving comments from review * Must make tests self-adapting * No MMDB yet, but tests pass * addressing comments from review * UI README updated (uncompleted), comment explaining country_undesirability in Metadata, addressing gomments from review * About to try bringing in an actual DBIP file * Happy-path test passing * formatting for ExitLovationSet * setup_reporter_shared_app and wait_for_masq_node_ends * CountryCodes to CountryBlocks, fix formatting of ExitLocationSet in tests, remove reference from supporting functions, already reference comming in * resolving unimplemented Copy trait in Process * new clap test providing_show_countries_with_other_argument_fails * format * MMDB parser seems to be finished * fallback routing test change * country codes to nodes names in tests * description to exit-location response * removing comments, adding country codes to node names in tests * Now MMDB parser isn't as wasteful * Removed dead data * Tests all pass * Merge mostly complete; lots of tests pass. Maybe all of them? * One test failing. Can't figure why. * All masq tests passing now * Multinode tests pass; one bit of code cleanup remains * All tests should be passing * Removed dead code * Little surgery on modules and imls * Updated the CSV country list from MMDB * Started GitHub Actions file for monthly downloads * conditions for failing download and gargo run, to not continue, file names in generate and commit * Going to try out the dbip_download workflow * Temporary on: * addressing review 2 comments * addressing comments from review2 * fixing line length in user interface interface md * tests to remove unexistent countries from user_exit_preferences.locations_opt * remove tests and commnet of filtering out unexistent country_codes * comment about the locations_opt * make_node_record_cc and adjusting tests, get rid of free world bit * fixes country_code on tests, introduced make_node_record_cc * addressing commnets from review3 * remove pub from CountryCodeFinder member, and remove commented out code * utilization of strings in clap test for show-countries * last review with master merged in * forgotten change * generate dbip_country.rs workflow and checkout dbip_country.rs from separate branch in ci-matric workflow * resolved most failing tests, now failing debut_with_node_addr_not_accepting_connections_is_rejected for no reason, wierd behaviour of qualifies * fixing failing tests * comment out fetch dbip, and remove unwanted action build dbip * try to fix actions * all countries in test dbip_country.rs * removing misstake * added checkout of read dbip_country.rs from DBIP-Experiment * new workflow: in local we work with reduced dbip, but on ci/all.sh we checking out full version from git, same in actions, remove PARENT_DIR variable for Jenkins * testing git pre-commit hook * update pre-commit hook * remove checkout of dbip_country.rs from ci-matrix, it will be handled by ci/all.sh * testing pre-commit hooks changes * testing commit hook * testing pre commit hook * testing pre commit hook * final polishing of pre-commit hook * addressed comments from Review * formatting * addressing review comments, plus fix double entry of ip_country in modules.xml * Enabled IDE tests in ip_country * Fixed module-definition problem, addressed two review comments * Weird stuff with TryFrom and From * addressing review comments * fix ci.all condition for chekout dbip * remove comments and exit in ci/all.sh * generated-source from Node repo * dbip download workflow for master * adjust cron shedule for dbip download * final touch for dbip workflow * git pull before ci/all.sh --------- Co-authored-by: Bert <Bert@Bert.com> Co-authored-by: FinsaasGH <89403560+FinsaasGH@users.noreply.github.com> Co-authored-by: FinsaasGH <finsaas@protonmail.com> Co-authored-by: Dan Wiebe <dnwiebe@gmail.com>
1 parent 5535b1e commit cbbd79f

File tree

94 files changed

+9319
-714
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

94 files changed

+9319
-714
lines changed

.githooks/pre-commit

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
#!/bin/bash
2+
3+
# File to check (relative to repo root)
4+
FILENAME="ip_country/src/dbip_country.rs"
5+
6+
if ! git diff --cached --name-only | grep -q "^$FILENAME$"; then
7+
exit 0
8+
fi
9+
10+
# find 'Nonexistents' country in dbip_country.rs
11+
@cat "$FILENAME" | grep '("NOEX", "Nonexistent")'
12+
NONEXISTENT=$?
13+
14+
# Get local file size (staged version, not working copy)
15+
LOCAL_SIZE=$(git ls-files --stage | grep "$FILENAME" | awk '{print $2}' | xargs git cat-file -s)
16+
17+
if [[ $LOCAL_SIZE -gt 1000000 || NONEXISTENT -gt 0 ]]; then
18+
if [[ $LOCAL_SIZE -gt 1000000 ]]; then
19+
echo "❌ Commit blocked: $FILENAME size it not dev version, we want to keep dev version under 1 MB."
20+
echo " Local file size: $LOCAL_SIZE bytes"
21+
fi
22+
if [[ $NONEXISTENT -gt 0 ]]; then
23+
echo "❌ Commit blocked: Dev file must contain '(\"NOEX\", \"Nonexistents\")' country"
24+
fi
25+
echo ""
26+
echo " ⚡ Please sync the file with the remote before committing using:"
27+
echo " git checkout HEAD -- ip_country/src/dbip_country.rs"
28+
exit 1
29+
fi
30+
31+
# All good
32+
exit 0

.github/workflows/ci-matrix.yml

Lines changed: 41 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ jobs:
2020
name: Build node on ${{ matrix.target.os }}
2121
runs-on: ${{ matrix.target.os }}
2222
steps:
23-
- uses: actions/checkout@v3
23+
- uses: actions/checkout@v4
2424
with:
2525
ref: ${{ github.event.pull_request.head.sha }}
2626

@@ -36,7 +36,8 @@ jobs:
3636
toolchain: 1.63.0
3737
components: rustfmt, clippy
3838
override: true
39-
- uses: actions/cache@v3
39+
40+
- uses: actions/cache@v4
4041
with:
4142
path: |
4243
~/.cargo/bin/
@@ -45,10 +46,13 @@ jobs:
4546
~/.cargo/registry/cache/
4647
~/.cargo/git/db/
4748
target/
48-
key: ${{ runner.os }}-cargo
49+
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
50+
restore-keys: |
51+
${{ runner.os }}-cargo-
4952
5053
- name: Build ${{ matrix.target.os }}
5154
run: |
55+
git fetch
5256
./ci/all.sh
5357
./ci/multinode_integration_test.sh
5458
./ci/collect_results.sh
@@ -59,49 +63,59 @@ jobs:
5963
with:
6064
name: Node-${{ matrix.target.name }}
6165
path: results
62-
66+
- name: diagnostics
67+
if: failure()
68+
run: |
69+
echo "final disc diagnostics ------>"
70+
df -h /Users/runner/work/Node/Node/node/target/release
6371
deploy_to_s3:
6472
needs: build
73+
if: success() && (startsWith(github.head_ref, 'GH') || startsWith(github.head_ref, 'v'))
6574
strategy:
6675
matrix:
67-
os: [linux, macos, windows]
68-
runs-on: ubuntu-22.04
76+
os: [linux, macos, windows]
77+
runs-on: ubuntu-latest
6978
steps:
70-
- uses: actions/checkout@v3
79+
- uses: actions/checkout@v4
7180
with:
7281
ref: ${{ github.event.pull_request.head.sha }}
82+
fetch-depth: 1
7383

7484
- name: Download artifacts
7585
uses: actions/download-artifact@v4
7686

7787
- name: Display structure of downloaded files
7888
run: ls -R
7989

90+
- name: Check artifacts exist
91+
run: |
92+
if [ ! -d "Node-${{ matrix.os }}/generated/bin/" ]; then
93+
echo "Error: Build artifacts not found"
94+
exit 1
95+
fi
96+
97+
- name: Configure AWS Credentials
98+
uses: aws-actions/configure-aws-credentials@v4
99+
with:
100+
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
101+
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
102+
aws-region: us-west-2
103+
80104
- if: startsWith(github.head_ref, 'GH')
81105
name: Versioned S3 Sync
82-
uses: jakejarvis/s3-sync-action@v0.5.1
83-
with:
84-
args: --acl private --follow-symlinks --delete
85-
env:
86-
AWS_S3_BUCKET: ${{ secrets.AWS_S3_BUCKET }}
87-
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
88-
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
89-
AWS_REGION: 'us-west-2'
90-
DEST_DIR: 'Node/${{ github.head_ref }}/Node-${{ matrix.os }}'
91-
SOURCE_DIR: 'Node-${{ matrix.os }}/generated/bin/'
106+
run: |
107+
aws s3 sync "Node-${{ matrix.os }}/generated/bin/" "s3://${{ secrets.AWS_S3_BUCKET }}/Node/${{ github.head_ref }}/Node-${{ matrix.os }}" \
108+
--delete \
109+
--no-progress \
110+
--acl private
92111
93112
- if: startsWith(github.head_ref, 'v')
94113
name: Latest S3 Sync
95-
uses: jakejarvis/s3-sync-action@v0.5.1
96-
with:
97-
args: --acl private --follow-symlinks --delete
98-
env:
99-
AWS_S3_BUCKET: ${{ secrets.AWS_S3_BUCKET }}
100-
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
101-
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
102-
AWS_REGION: 'us-west-2'
103-
DEST_DIR: 'Node/latest/Node-${{ matrix.os }}'
104-
SOURCE_DIR: 'Node-${{ matrix.os }}/generated/bin/'
114+
run: |
115+
aws s3 sync "Node-${{ matrix.os }}/generated/bin/" "s3://${{ secrets.AWS_S3_BUCKET }}/Node/latest/Node-${{ matrix.os }}" \
116+
--delete \
117+
--no-progress \
118+
--acl private
105119
106120
- name: Invalidate Binaries CloudFront
107121
uses: chetan/invalidate-cloudfront-action@v2.4

.github/workflows/dbip_download.yml

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
name: Download DBIP data and generate dbip_country.rs
22

33
on:
4-
workflow_dispatch:
5-
# schedule:
6-
# - cron: "0 0 * * *" # Runs at midnight on the 3rd of every month
4+
schedule:
5+
- cron: "0 0 3 * *" # Runs at midnight on the 3rd of every month
76

87
env:
98
TEMP_DIR: '/tmp'
@@ -26,26 +25,22 @@ jobs:
2625

2726
- name: Download DBIP data in MMDB format
2827
run: |
29-
set -xv
3028
export YEAR_MONTH=$(date +%Y-%m)
3129
echo "TEMP_DIR=$(mktemp -d)" >> $GITHUB_ENV
3230
echo "YEAR_MONTH=$YEAR_MONTH" >> $GITHUB_ENV
33-
git clone https://github.com/MASQ-Project/DBIP-Experiment.git dbipexperiment
34-
cd dbipexperiment/ip_country
31+
cd ip_country
3532
mkdir -p dbip-data
3633
curl -L -o dbip-data/dbip-country-lite.mmdb.gz "https://download.db-ip.com/free/dbip-country-lite-$YEAR_MONTH.mmdb.gz"
3734
gunzip dbip-data/dbip-country-lite.mmdb.gz
3835
3936
- name: Generate Rust source file
4037
run: |
41-
set -xv
42-
cd dbipexperiment/ip_country
38+
cd ip_country
4339
cargo run < "dbip-data/dbip-country-lite.mmdb" > "$TEMP_DIR"/dbip_country.rs
4440
ls "$TEMP_DIR"
4541
4642
- name: Commit and push generated file
4743
run: |
48-
set -xv
4944
git config user.name "github-actions[bot]"
5045
git config user.email "github-actions[bot]@users.noreply.github.com"
5146
git fetch

.idea/modules.xml

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

USER-INTERFACE-INTERFACE.md

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -590,6 +590,75 @@ descriptor (for example, if it's still waiting on the router to get a public IP
590590
Node descriptor (for example, if its neighborhood mode is not Standard), the `nodeDescriptorOpt`
591591
field will be null or absent.
592592

593+
#### `exit-location`
594+
##### Direction: Request
595+
##### Correspondent: Node
596+
##### Layout:
597+
```
598+
"payload": {
599+
"fallbackRouting": <boolean>,
600+
"exitLocations": [
601+
{
602+
"countryCodes": [string, ..],
603+
"priority": <positive integer>
604+
},
605+
],
606+
"showCountries": <boolean>
607+
}
608+
```
609+
##### Description:
610+
This command requests information about the countries available for exit in our neighborhood and allows us to set up the
611+
desired locations with their priority. The priority provides the node's perspective on how important a particular country
612+
is for our preferences.
613+
614+
This command can be used in two ways which can't be combined:
615+
1. If we use the command with showCountries set to true.
616+
2. If we want to set an exit location.
617+
618+
In case 1. it retrieves information about the available countries in our neighborhood. Other parameters are
619+
ignored.
620+
621+
In case 2. we must set showCountries to false and then configure fallbackRouting and exitLocations with our preferences.
622+
623+
The `fallbackRouting` parameter is defaulted as `false`, if not provided. Determines whether we want to block exit for a particular
624+
country. If parameter is `false` and requested country is no longer available, the route to exit will fail during construction.
625+
If is set to `true`, we can exit through any available country if none of our specified exitLocations are accessible.
626+
627+
Priorities are used to determine the preferred exit countries. Priority 1 is the highest, while higher numbers indicate
628+
lower priority. For example, if we specify DE with priority 1 and FR with priority 2, then an exit through France will
629+
only be used if a German exit is unavailable or significantly more expensive.
630+
631+
#### `exit-location`
632+
##### Direction: Response
633+
##### Correspondent: UI
634+
##### Layout:
635+
636+
```
637+
"payload": {
638+
"fallbackRouting": <boolean>,
639+
"exitCountrySelection": <[
640+
{
641+
"countryCodes": [string, ..],
642+
"priority": <positive integer>
643+
},
644+
]>,
645+
"missingCountries": <[string, ..]>
646+
"exitCountries": <optional[string, ..]>
647+
}
648+
```
649+
##### Description:
650+
In response, the Node sends a payload to the UI that contains either the Exit Location settings (which may include missing
651+
countries) or a list of exit countries.
652+
653+
Exit Location settings consist of fallbackRouting, exitCountrySelection, and missingCountries, where:
654+
1. fallbackRouting is a boolean representing the user's choice to enable or disable fallback routing within the neighborhood.
655+
2. exitCountrySelection is an array of objects, where each object represents a set of country codes along with their assigned priority.
656+
3. missingCountries is an array of strings representing a list of countries that are currently unavailable in the Node's Neighborhood Database.
657+
658+
Exit Countries (or exitCountries) is an optional array containing ISO country code strings. These represent the countries
659+
currently available in the Node's Neighborhood Database. The user can select from these countries to configure the Exit
660+
Location settings.
661+
593662
#### `financials`
594663
##### Direction: Request
595664
##### Correspondent: Node

0 commit comments

Comments
 (0)