Hydrating Aether...
-
Access Denied
-
+
+
Access Denied
+
{:else if browser}
-
+
+
+
{/if}
{#if browser && (!$ae_loc?.iframe || $ae_loc?.trusted_access)}
-
+
{#if $ae_loc.edit_mode || $ae_loc.debug_menu.expand}
-
+
{/if}
{/if}
diff --git a/src/routes/+layout.ts b/src/routes/+layout.ts
index d272d042..abb1d10b 100644
--- a/src/routes/+layout.ts
+++ b/src/routes/+layout.ts
@@ -17,7 +17,7 @@ import {
PUBLIC_AE_API_PATH,
PUBLIC_AE_API_SECRET_KEY,
PUBLIC_AE_API_CRUD_SUPER_KEY,
- PUBLIC_AE_BOOTSTRAP_KEY,
+ PUBLIC_AE_BOOTSTRAP_KEY
// PUBLIC_AE_NO_ACCOUNT_ID,
// PUBLIC_AE_NO_ACCOUNT_ID_TOKEN
} from '$env/static/public';
@@ -130,32 +130,54 @@ export async function load({ fetch, params, parent, route, url }) {
try {
// Use the db_core instance directly for a quick lookup
const { db_core } = await import('$lib/ae_core/db_core');
- const cached = await db_core.site_domain.where('fqdn').equals(fqdn).first();
+ const cached = await db_core.site_domain
+ .where('fqdn')
+ .equals(fqdn)
+ .first();
if (cached) {
- if (log_lvl) console.log('ROOT LOAD: Found cached site domain. Unblocking layout.');
+ if (log_lvl)
+ console.log(
+ 'ROOT LOAD: Found cached site domain. Unblocking layout.'
+ );
result = cached;
}
} catch (e) {
- if (log_lvl) console.warn('ROOT LOAD: Failed to read from Dexie cache.', e);
+ if (log_lvl)
+ console.warn('ROOT LOAD: Failed to read from Dexie cache.', e);
}
}
// Detect Aether Native Bridge (Electron)
if (typeof window !== 'undefined' && (window as any).aetherNative) {
is_native = true;
- if (log_lvl) console.log('ROOT LOAD: Detected Aether Native Bridge. Requesting device config...');
+ if (log_lvl)
+ console.log(
+ 'ROOT LOAD: Detected Aether Native Bridge. Requesting device config...'
+ );
try {
- const native_device_config = await (window as any).aetherNative.get_device_config();
+ const native_device_config = await (
+ window as any
+ ).aetherNative.get_device_config();
if (native_device_config) {
- if (log_lvl) console.log('ROOT LOAD: Native device config received:', native_device_config);
+ if (log_lvl)
+ console.log(
+ 'ROOT LOAD: Native device config received:',
+ native_device_config
+ );
// Map native device config to the expected result structure
// Use native as source of truth if available
result = {
...native_device_config,
// Ensure naming consistency
- account_id: native_device_config.account_id || native_device_config.account_id_random,
- site_id: native_device_config.site_id || native_device_config.site_id_random,
- site_domain_id: native_device_config.site_domain_id || native_device_config.site_domain_id_random,
+ account_id:
+ native_device_config.account_id ||
+ native_device_config.account_id_random,
+ site_id:
+ native_device_config.site_id ||
+ native_device_config.site_id_random,
+ site_domain_id:
+ native_device_config.site_domain_id ||
+ native_device_config.site_domain_id_random
};
// Inject native device metadata into the location state with SAFE MERGE
@@ -163,50 +185,76 @@ export async function load({ fetch, params, parent, route, url }) {
const incoming_dev = native_device_config.native_device;
// String-Only ID Vision: Ensure semantic fields use the random string ID
- if (incoming_dev.event_device_id_random) incoming_dev.event_device_id = incoming_dev.event_device_id_random;
- if (incoming_dev.event_id_random) incoming_dev.event_id = incoming_dev.event_id_random;
- if (incoming_dev.id_random) incoming_dev.id = incoming_dev.id_random;
+ if (incoming_dev.event_device_id_random)
+ incoming_dev.event_device_id =
+ incoming_dev.event_device_id_random;
+ if (incoming_dev.event_id_random)
+ incoming_dev.event_id = incoming_dev.event_id_random;
+ if (incoming_dev.id_random)
+ incoming_dev.id = incoming_dev.id_random;
// 1. Recover existing user overrides from localStorage
let existing_dev = {};
try {
const raw = localStorage.getItem('ae_loc');
- if (raw) existing_dev = JSON.parse(raw).native_device || {};
+ if (raw)
+ existing_dev = JSON.parse(raw).native_device || {};
} catch (e) {}
// 2. Merge: Priority to EXISTING overrides for specific timers
ae_loc_init['native_device'] = {
...incoming_dev,
// Persist these specific user-controlled fields
- check_event_loop_period: (existing_dev as any).check_event_loop_period || incoming_dev.check_event_loop_period,
- check_event_device_loop_period: (existing_dev as any).check_event_device_loop_period || incoming_dev.check_event_device_loop_period,
- check_event_location_loop_period: (existing_dev as any).check_event_location_loop_period || incoming_dev.check_event_location_loop_period,
- check_event_session_loop_period: (existing_dev as any).check_event_session_loop_period || incoming_dev.check_event_session_loop_period,
+ check_event_loop_period:
+ (existing_dev as any).check_event_loop_period ||
+ incoming_dev.check_event_loop_period,
+ check_event_device_loop_period:
+ (existing_dev as any)
+ .check_event_device_loop_period ||
+ incoming_dev.check_event_device_loop_period,
+ check_event_location_loop_period:
+ (existing_dev as any)
+ .check_event_location_loop_period ||
+ incoming_dev.check_event_location_loop_period,
+ check_event_session_loop_period:
+ (existing_dev as any)
+ .check_event_session_loop_period ||
+ incoming_dev.check_event_session_loop_period,
// Use API value if present; default to 2 (never preserve from localStorage — stale values cause orphaned cache dirs)
hash_prefix_length: incoming_dev.hash_prefix_length || 2
};
// Map specific operational paths
- ae_loc_init['local_file_cache_path'] = incoming_dev.local_file_cache_path;
- ae_loc_init['host_file_temp_path'] = incoming_dev.host_file_temp_path;
+ ae_loc_init['local_file_cache_path'] =
+ incoming_dev.local_file_cache_path;
+ ae_loc_init['host_file_temp_path'] =
+ incoming_dev.host_file_temp_path;
ae_loc_init['recording_path'] = incoming_dev.recording_path;
}
// IMPORTANT: Update API settings with the native-authorized key if present
if (native_device_config.aether_api_key) {
- ae_api_init['api_secret_key'] = native_device_config.aether_api_key;
- ae_api_headers['x-aether-api-key'] = native_device_config.aether_api_key;
+ ae_api_init['api_secret_key'] =
+ native_device_config.aether_api_key;
+ ae_api_headers['x-aether-api-key'] =
+ native_device_config.aether_api_key;
}
}
} catch (err) {
- console.error('ROOT LOAD: Failed to fetch native device config.', err);
+ console.error(
+ 'ROOT LOAD: Failed to fetch native device config.',
+ err
+ );
}
}
// 2. SLOW PATH: Wait for API site lookup only if we have no result yet
if (!result) {
try {
- if (log_lvl) console.log(`ROOT LOAD: No cache. Starting site lookup V3 for ${fqdn}...`);
+ if (log_lvl)
+ console.log(
+ `ROOT LOAD: No cache. Starting site lookup V3 for ${fqdn}...`
+ );
// Use dedicated Bootstrap key — limited permissions, no account_id required.
// Key is injected at build time from PUBLIC_AE_BOOTSTRAP_KEY in .env.
@@ -226,14 +274,24 @@ export async function load({ fetch, params, parent, route, url }) {
view: 'base',
log_lvl
});
- if (log_lvl) console.log(`ROOT LOAD: Site lookup result for ${fqdn}:`, result);
+ if (log_lvl)
+ console.log(
+ `ROOT LOAD: Site lookup result for ${fqdn}:`,
+ result
+ );
} catch (err) {
- console.error(`ROOT LOAD: Site lookup critical failure for ${fqdn}.`, err);
+ console.error(
+ `ROOT LOAD: Site lookup critical failure for ${fqdn}.`,
+ err
+ );
api_error = true;
}
} else {
// We have a result (cache or native), fire off the refresh in the background to update Dexie
- if (log_lvl) console.log('ROOT LOAD: Result already obtained. Background refresh triggered.');
+ if (log_lvl)
+ console.log(
+ 'ROOT LOAD: Result already obtained. Background refresh triggered.'
+ );
lookup_site_domain({
api_cfg: ae_api_init,
fqdn,
@@ -243,14 +301,22 @@ export async function load({ fetch, params, parent, route, url }) {
}
// Defensive check: if result is false (common from API helper) or null, use emergency ghost
- if (!result || typeof result !== 'object' || result.account_id === 'ghost') {
- console.warn(`ROOT LOAD: Falsy or Ghost result for ${fqdn}. Forcing fallback message.`);
+ if (
+ !result ||
+ typeof result !== 'object' ||
+ result.account_id === 'ghost'
+ ) {
+ console.warn(
+ `ROOT LOAD: Falsy or Ghost result for ${fqdn}. Forcing fallback message.`
+ );
result = {
id: 'ghost',
id_random: 'ghost',
account_id_random: 'ghost',
account_code: 'ghost',
- account_name: api_error ? 'API Connection Failed' : 'Domain Not Registered',
+ account_name: api_error
+ ? 'API Connection Failed'
+ : 'Domain Not Registered',
site_id_random: 'ghost',
site_domain_id_random: 'ghost',
enable: '1',
@@ -278,7 +344,8 @@ export async function load({ fetch, params, parent, route, url }) {
ae_loc_init['account_name'] = json_data.account_name || 'Ghost Account';
ae_loc_init['site_id'] = json_data.site_id || 'ghost';
- ae_loc_init['site_domain_id'] = json_data.site_domain_id || json_data.site_domain_id || 'ghost';
+ ae_loc_init['site_domain_id'] =
+ json_data.site_domain_id || json_data.site_domain_id || 'ghost';
ae_loc_init['site_enable'] = json_data.enable || '1';
ae_loc_init['site_header_image_path'] = json_data.header_image_path || '';
ae_loc_init['site_style_href'] = json_data.style_href || '';
@@ -286,12 +353,16 @@ export async function load({ fetch, params, parent, route, url }) {
ae_loc_init['site_access_code_kv'] = json_data.access_code_kv_json || {};
ae_loc_init['site_cfg_json'] = json_data.cfg_json || {};
ae_loc_init['site_access_key'] = json_data.access_key || '';
- ae_loc_init['site_domain_access_key'] = json_data.site_domain_access_key || '';
+ ae_loc_init['site_domain_access_key'] =
+ json_data.site_domain_access_key || '';
ae_loc_init['base_url'] = url.origin;
ae_loc_init['hostname'] = url.hostname;
- if (!ae_loc_init['site_access_key'] && !ae_loc_init['site_domain_access_key']) {
+ if (
+ !ae_loc_init['site_access_key'] &&
+ !ae_loc_init['site_domain_access_key']
+ ) {
ae_loc_init['key_checked'] = true;
ae_loc_init['allow_access'] = true;
} else {
@@ -304,10 +375,11 @@ export async function load({ fetch, params, parent, route, url }) {
if (access_key == ae_loc_init['site_access_key']) {
ae_loc_init['key_checked'] = ae_loc_init['site_access_key'];
ae_loc_init['allow_access'] = ae_loc_init['site_access_key'];
- }
- else if (access_key == ae_loc_init['site_domain_access_key']) {
- ae_loc_init['key_checked'] = ae_loc_init['site_domain_access_key'];
- ae_loc_init['allow_access'] = ae_loc_init['site_domain_access_key'];
+ } else if (access_key == ae_loc_init['site_domain_access_key']) {
+ ae_loc_init['key_checked'] =
+ ae_loc_init['site_domain_access_key'];
+ ae_loc_init['allow_access'] =
+ ae_loc_init['site_domain_access_key'];
} else {
ae_loc_init['key_checked'] = true;
ae_loc_init['allow_access'] = false;
@@ -323,7 +395,8 @@ export async function load({ fetch, params, parent, route, url }) {
// });
// }
- ae_loc_init['account_name'] = json_data.account_name || 'Account Name Not Set';
+ ae_loc_init['account_name'] =
+ json_data.account_name || 'Account Name Not Set';
// ae_acct['api'] = ae_api_init; // DO NOT USE: This overwrites our isolated clone from line 65
ae_acct['loc'] = ae_loc_init;
@@ -331,7 +404,7 @@ export async function load({ fetch, params, parent, route, url }) {
ae_acct['slct'] = {
account_id: account_id,
site_domain_id: ae_loc_init.site_domain_id,
- site_id: ae_loc_init.site_id,
+ site_id: ae_loc_init.site_id
// event_id: ae_loc_init.site_cfg_json?.slct__event_id,
// event_badge_template_id: ae_loc_init.site_cfg_json?.slct__event_badge_template_id,
// sponsorship_cfg_id: ae_loc_init.site_cfg_json?.slct__sponsorship_cfg_id
@@ -339,7 +412,11 @@ export async function load({ fetch, params, parent, route, url }) {
data_struct[account_id] = ae_acct;
- if (log_lvl) console.log('ROOT LOAD: Final data_struct structure ready.', Object.keys(data_struct));
+ if (log_lvl)
+ console.log(
+ 'ROOT LOAD: Final data_struct structure ready.',
+ Object.keys(data_struct)
+ );
return data_struct;
-}
\ No newline at end of file
+}
diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte
index 7d7c5f3e..8bb62fca 100644
--- a/src/routes/+page.svelte
+++ b/src/routes/+page.svelte
@@ -1,29 +1,42 @@
@@ -31,23 +44,24 @@
+ class:ae_root--super_access={$ae_loc.super_access}>
+ class_li={!$ae_loc.manager_access &&
+ $ae_sess.ds_loaded.hub__site__root_page_header === false
+ ? 'hidden'
+ : ''}
+ bind:ds_loaded={$ae_sess.ds_loaded.hub__site__root_page_header} />
+ class_li={!$ae_loc.manager_access &&
+ $ae_sess.ds_loaded.hub__site__root_page_content === false
+ ? 'hidden'
+ : 'grow'}
+ bind:ds_loaded={$ae_sess.ds_loaded.hub__site__root_page_content} />
-
+
+ class="flex flex-row flex-wrap items-center justify-center">