Packages

macula

11.0.0
11.3.0 11.2.0 11.1.0 11.0.0 10.25.0 10.24.0 10.23.0 10.22.0 10.21.0 10.20.3 10.20.2 10.20.0 10.19.2 10.19.1 10.19.0 10.18.0 10.17.0 10.16.0 10.15.0 10.14.5 10.14.4 10.14.2 10.14.1 10.14.0 10.13.2 10.13.1 10.11.0 10.10.2 10.10.1 10.10.0 10.9.1 10.9.0 10.8.0 10.7.0 10.5.8 10.5.7 10.5.6 10.5.5 10.5.4 10.5.3 10.5.2 10.5.1 10.5.0 10.4.0 10.2.0 10.1.1 10.1.0 10.0.2 10.0.1 10.0.0 9.13.8 9.8.2 9.8.1 9.8.0 9.5.0 9.4.0 9.3.1 9.3.0 9.2.0 9.1.1 9.1.0 9.0.0 8.7.0 8.6.0 8.5.0 8.4.1 8.4.0 8.3.0 8.2.0 8.1.0 8.0.2 8.0.1 8.0.0 7.1.0 7.0.0 6.0.0 5.2.2 5.2.1 5.2.0 5.1.0 5.0.0 4.8.0 4.7.1 4.7.0 4.6.0 4.5.0 4.4.10 4.4.9 4.4.8 4.4.7 4.4.6 4.4.5 4.4.4 4.4.3 4.4.2 4.4.1 4.4.0 4.3.1 4.3.0 4.2.9 4.2.8 4.2.7 4.2.6 4.2.5 4.2.4 4.2.3 4.2.2 4.2.1 4.2.0 4.1.1 4.1.0 4.0.0 3.16.0 3.15.3 3.15.2 3.15.1 3.14.0 3.13.0 3.12.1 3.12.0 3.11.1 3.11.0 3.10.3 3.10.2 3.10.1 3.9.0 3.8.0 3.7.0 3.5.0 3.4.0 3.3.0 3.2.0 3.1.0 3.0.0 2.1.1 2.1.0 2.0.0 1.5.2 1.5.1 1.4.30 1.4.29 1.4.28 1.4.27 1.4.26 1.4.25 1.4.24 1.4.23 1.4.22 1.4.21 1.4.20 1.4.19 1.4.18 1.4.17 1.4.16 1.4.15 1.4.14 1.4.13 1.4.11 1.4.10 1.4.9 1.4.8 1.4.7 1.4.6 1.4.5 1.4.4 1.4.3 1.4.2 1.4.1 1.4.0 1.3.1 1.3.0 1.2.0 1.1.0 1.0.10 1.0.9 1.0.8 1.0.7 1.0.6 1.0.5 1.0.4 1.0.3 1.0.2 1.0.1 1.0.0 0.48.6 0.48.5 0.48.4 0.48.3 0.48.2 0.48.1 0.48.0 0.47.1 0.47.0 0.46.3 0.46.1 0.46.0 0.45.3 0.45.2 0.45.1 0.45.0 0.44.2 0.44.1 0.44.0 0.43.3 0.43.2 0.43.1 0.43.0 0.42.9 0.42.8 0.42.7 0.42.6 0.42.5 0.42.4 0.42.3 0.42.2 0.42.1 0.42.0 0.41.1 0.41.0 0.40.1 0.40.0 0.39.9 0.39.8 0.39.7 0.39.6 0.39.5 0.39.4 0.39.3 0.39.2 0.39.1 0.39.0 0.38.8 0.38.7 0.38.6 0.38.5 0.38.4 0.38.3 0.38.2 0.38.1 0.38.0 0.37.7 0.37.6 0.37.5 0.37.4 0.37.3 0.37.2 0.37.1 0.37.0 0.36.6 0.36.5 0.36.4 0.36.3 0.36.2 0.36.1 0.36.0 0.35.4 0.35.3 0.35.2 0.35.1 0.35.0 0.34.1 0.34.0 0.33.1 0.33.0 0.32.5 0.32.4 0.32.3 0.32.2 0.32.1 0.32.0 0.31.9 0.31.8 0.31.7 0.31.6 0.31.5 0.31.4 0.31.3 0.31.2 0.31.1 0.31.0 0.30.10 0.30.9 0.30.8 0.30.7 0.30.6 0.30.5 0.30.4 0.30.3 0.30.2 0.30.1 0.30.0 0.29.0 0.28.3 0.28.2 0.28.1 0.28.0 0.27.1 0.27.0 0.26.1 0.26.0 0.25.6 0.25.5 0.25.4 0.25.3 0.25.2 0.25.1 0.25.0 0.24.6 0.24.5 0.24.4 0.24.3 0.24.2 0.24.1 0.24.0 0.23.3 0.23.2 0.23.1 0.23.0 0.22.12 0.22.11 0.22.10 0.22.9 0.22.8 0.22.7 0.22.6 0.22.5 0.22.4 0.22.3 0.22.2 0.22.1 0.22.0 0.21.7 0.21.6 0.21.5 0.21.4 0.21.2 0.21.1 0.21.0 0.20.25 0.20.24 0.20.23 0.20.22 0.20.21 0.20.20 0.20.19 0.20.18 0.20.17 0.20.16 0.20.15 0.20.14 0.20.13 0.20.12 0.20.11 0.20.10 0.20.9 0.20.8 0.20.7 0.20.6 0.20.5 0.20.3 0.20.2 0.20.1 0.20.0 0.19.2 0.19.1 0.19.0 0.18.1 0.18.0 0.17.4 0.17.3 0.17.2 0.17.1 0.17.0 0.16.6 0.16.5 0.16.4 0.16.3 0.16.2 0.16.1 0.16.0 0.15.1 0.15.0 0.14.3 0.14.2 0.14.1 0.14.0 0.12.6 0.12.5 0.12.3 0.11.3 0.10.2 0.10.1 0.10.0 0.9.2 0.9.1 0.9.0 0.8.25 0.8.24 0.8.23 0.8.22 0.8.21 0.8.20 0.8.19 0.8.18 0.8.17 0.8.16 0.8.15 0.8.14 0.8.13 0.8.12 0.8.11 0.8.10 0.8.9 0.8.8 0.8.7 0.8.6 0.8.5 0.8.4 0.8.3 0.8.2 0.8.1 0.8.0 0.7.30 0.7.29 0.7.28 0.7.27 0.7.26 0.7.25 0.7.24 0.7.23 0.7.22 0.7.21 0.7.20 0.7.19 0.7.18 0.7.17 0.7.16 0.7.15 0.7.14 0.7.13 0.7.12 0.7.11 0.7.10 0.7.9 0.7.8 0.7.7 0.7.6 0.7.5 0.7.4 0.7.3 0.7.2 0.7.1 0.7.0 0.6.7 0.6.6 0.6.5 0.6.4 0.6.3 0.6.2 0.6.1 0.6.0 0.5.0 0.4.4 0.4.3 0.4.2 0.4.1 0.4.0 0.3.4 0.3.3 0.3.2 0.3.1

Macula HTTP/3 Mesh SDK — connect, subscribe, publish, call, advertise

Current section

Files

Jump to
macula src macula_root.erl
Raw

src/macula_root.erl

%%%-------------------------------------------------------------------
%% @doc Macula SDK Root Supervisor.
%%
%% Starts the SDK subsystems: MRI (resource identifiers), cert system
%% (identity), and distribution over mesh (optional).
%%
%% Server-side systems (gateway, DHT, RPC routing, PubSub routing,
%% peering, SWIM, etc.) live in macula-relay.
%%
%% @end
%%%-------------------------------------------------------------------
-module(macula_root).
-behaviour(supervisor).
-include_lib("kernel/include/logger.hrl").
-export([start_link/0]).
-export([init/1]).
-define(SERVER, ?MODULE).
start_link() ->
supervisor:start_link({local, ?SERVER}, ?MODULE, []).
init([]) ->
Version = get_app_version(),
?LOG_INFO(""),
?LOG_INFO("═══════════════════════════════════════════════════════════════"),
?LOG_INFO(" Macula SDK ~s", [Version]),
?LOG_INFO("═══════════════════════════════════════════════════════════════"),
?LOG_INFO(""),
SupFlags = #{strategy => one_for_one, intensity => 10, period => 5},
ChildSpecs = [
%% The seq counter every publication a node signs draws from, one per
%% key. First, so it runs before any pool or pubsub server publishes.
#{
id => macula_publication_seq,
start => {macula_publication_seq, start_link, []},
restart => permanent,
shutdown => 5000,
type => worker
},
%% The counts table behind macula_diagnostics:bounded_event/3, which
%% callers update themselves. Before any connection logs through it.
#{
id => macula_diagnostics_bound,
start => {macula_diagnostics_bound, start_link, []},
restart => permanent,
shutdown => 5000,
type => worker
},
%% The last record version this node issued, which callers of
%% macula_record_uuid:v7_monotonic/1 advance themselves. Before any
%% record is signed.
#{
id => macula_record_uuid,
start => {macula_record_uuid, start_link, []},
restart => permanent,
shutdown => 5000,
type => worker
},
%% MRI Type Registry (type validation, custom type registration)
#{
id => macula_mri_registry,
start => {macula_mri_registry, start_link, [[]]},
restart => permanent,
shutdown => 5000,
type => worker
},
%% MRI ETS Storage (in-memory store/graph adapter)
#{
id => macula_mri_ets,
start => {macula_mri_ets, start_link, [[]]},
restart => permanent,
shutdown => 5000,
type => worker
},
%% Correlation-id registry for macula_content_transfer handles
%% (PLAN_PUSH_UPLOAD.md Phase 1) — a caller that only knows a
%% transfer's share_id (from a published sharing.*_started_v1
%% mesh fact) resolves it to a cancellable pid here.
#{
id => macula_content_transfer_registry,
start => {macula_content_transfer_registry, start_link, []},
restart => permanent,
shutdown => 5000,
type => worker
},
%% Local registry + dispatcher for streaming RPC (v1.5.0+).
%% In-process pairing of client/server stream halves; the QUIC-
%% backed cross-node path lands in Phase 2 of
%% PLAN_MACULA_STREAMING.md.
#{
id => macula_stream_local,
start => {macula_stream_local, start_link, []},
restart => permanent,
shutdown => 5000,
type => worker
},
%% Holds the table of served stream sessions, so the sessions kept
%% there outlive a restart of the counter below. Starts first.
#{
id => macula_stream_sessions_keeper,
start => {macula_stream_sessions_keeper, start_link, []},
restart => permanent,
shutdown => 5000,
type => worker
},
%% The node's count of served stream sessions: each station link
%% asks it before serving a session, against the caps per verified
%% caller and node-wide, and a session's place frees when its stream
%% ends.
#{
id => macula_stream_sessions,
start => {macula_stream_sessions, start_link, []},
restart => permanent,
shutdown => 5000,
type => worker
},
%% Distribution-over-mesh bridge supervisor.
%% Started here (under the application supervisor) so it survives
%% shell crashes and other transient process deaths in user code.
#{
id => macula_dist_bridge_sup,
start => {macula_dist_bridge_sup, start_link, []},
restart => permanent,
shutdown => infinity,
type => supervisor,
modules => [macula_dist_bridge_sup]
},
%% The statement issuers of this node's pools, one for each pool,
%% which every connection a pool's links make draws its CONNECT
%% material and status statements from. Before peering.
#{
id => macula_statement_issuer_sup,
start => {macula_statement_issuer_sup, start_link, []},
restart => permanent,
shutdown => infinity,
type => supervisor,
modules => [macula_statement_issuer_sup]
},
%% Peering — per-peer connection state machines (CONNECT/HELLO
%% handshake + frame send/receive). One macula_peering_conn
%% gen_statem per peer, supervised by macula_peering_conn_sup
%% under the macula_peering_sup top supervisor.
#{
id => macula_peering_sup,
start => {macula_peering_sup, start_link, []},
restart => permanent,
shutdown => infinity,
type => supervisor,
modules => [macula_peering_sup]
}
],
{ok, {SupFlags, ChildSpecs}}.
%% @private
get_app_version() ->
case application:get_key(macula, vsn) of
{ok, Vsn} -> "v" ++ Vsn;
undefined -> "v0.0.0"
end.