import { persisted } from 'svelte-persisted-store'; import { readable, writable } from 'svelte/store'; import type { Readable, Writable } from 'svelte/store'; import { PUBLIC_TESTING, PUBLIC_AE_API_PROTOCOL, PUBLIC_AE_API_SERVER, PUBLIC_AE_API_BAK_SERVER, PUBLIC_AE_API_PORT, PUBLIC_AE_API_PATH, PUBLIC_AE_API_SECRET_KEY, PUBLIC_AE_API_CRUD_SUPER_KEY, PUBLIC_AE_NO_ACCOUNT_ID, PUBLIC_AE_NO_ACCOUNT_ID_TOKEN, PUBLIC_AE_ACCOUNT_ID, PUBLIC_AE_EVENT_ID, PUBLIC_AE_SPONSORSHIP_CFG_ID } from '$env/static/public'; console.log(`AE Stores - PUBLIC_TESTING:`, PUBLIC_TESTING); const api_server_fqdn = PUBLIC_AE_API_SERVER; // 'api.oneskyit.com' const api_base_url = `${PUBLIC_AE_API_PROTOCOL}://${PUBLIC_AE_API_SERVER}:${PUBLIC_AE_API_PORT}${PUBLIC_AE_API_PATH}`; const api_base_url_bak = `${PUBLIC_AE_API_PROTOCOL}://${PUBLIC_AE_API_BAK_SERVER}:${PUBLIC_AE_API_PORT}${PUBLIC_AE_API_PATH}`; const api_secret_key = PUBLIC_AE_API_SECRET_KEY; const api_crud_super_key = PUBLIC_AE_API_CRUD_SUPER_KEY; // const ae_account_id = PUBLIC_AE_ACCOUNT_ID; const ae_account_id: null | string = null; const ae_no_account_id = PUBLIC_AE_NO_ACCOUNT_ID; const ae_no_account_id_token = PUBLIC_AE_NO_ACCOUNT_ID_TOKEN; const ae_event_id = PUBLIC_AE_EVENT_ID; const ae_sponsorship_cfg_id = PUBLIC_AE_SPONSORSHIP_CFG_ID; // import { getStores, navigating, page, updated } from '$app/stores'; // import { assets, base, resolveRoute } from '$app/paths'; // console.log(page.path); // Everything after the domain name // console.log(import.meta.env.MODE); // console.log(import.meta.env.BASE_URL); // Export the key_val type for use in other files. export type key_val = { [key: string]: any; // variable key // name: string; }; // export type key_val = key_val; // import { html__not_set, classes__events_pres_mgmt_menu } from './ae_string_snippets'; import { string_snippets } from '$lib/utils/ae_string_snippets'; export const ae_snip = string_snippets; // export let ae_snip = // { // 'not_set': html__not_set, // 'classes__events_pres_mgmt_menu': classes__events_pres_mgmt_menu // }; // Set the version for the app data. Changing this should force a notification and ask the user to clear and reload the page. const ver = '2025-05-01_1445'; // KEEP: 2025-05-01_1445 const ver_idb = '2025-05-01_1445'; // Not currently used // *** BEGIN *** Longer-term app data. This should be stored to local storage. const ae_app_local_data_defaults: key_val = { last_page_reload: null, // last_idb_reload: null, // last_cache_refresh: null, // Date.now() last_cache_refresh: Date.now(), cache_expired: false, ver: ver, // ver, // '2025-04-18_1100', ver_idb: ver_idb, // '2025-04-18_1100', name: 'Aether - App Hub (SvelteKit 2.x Svelte 4.x)', theme: 'light', theme_mode: 'light', theme_name: 'nouveau', // wintry iframe: false, // disable_sys_header: false, // disable_sys_nav: false, // disable_sys_footer: false, browser_type: null, // Safari needs help with scrolling correctly in iframes. title: `OSIT's Æ`, // - Dev SvelteKit`, // Æ // debug_menu: false, // Flag show debug menu. debug_mode: false, // Flag to know if we should be in debug mode and show show debug options. edit_mode: false, // Flag to know if we should be in edit mode and show edit options. adv_mode: false, // Flag to know if we should be in advanced mode and show advanced options. // sys_menu: true, // Flag show system menu. sync_local_config: true, // Flag to know if we should sync local config with the remote API server. account_id: ae_account_id, // OSIT Demo _XY7DXtc9MY account_code: 'not_set', account_name: 'Account Name Not Set', allow_access: true, // Set to key site key was used, otherwise set to true. site_domain: null, // https://example.com, https://dev.example.com, etc. site_access_key: null, // This is the general site access key site_domain_access_key: null, // This is specific to a (sub)domain. site_cfg_json: { slct__event_id: null, slct__event_badge_template_id: null, slct__sponsorship_cfg_id: null, header_image_path: null }, // The site access codes can be pulled from the site records for an account. site_access_code_kv: { // 'manager': '10240', administrator: null, trusted: null, public: 'public1980', authenticated: 'auth1980' }, // 'manager_passcode': '10240', // 'administrator_passcode': '11500', // 'trusted_passcode': '19111', // 'authenticated_passcode': 'auth2024', access_type: 'anonymous', administrator_access: false, trusted_access: false, public_access: false, authenticated_access: false, anonymous_access: true, user_email: null, // Currently used with Sponsorships only? user_access_type: null, // Used to revert back to the user's access type after quick access (temporarily escalate permissions) turned off. jwt: null, // JSON Web Token for authenticated API requests // Added 2025-04-04 person_id: null, // The current person_id of the logged-in user (if any) person: { // WARNING: We need to add some logic on sign in to only include needed fields. 2025-08-12 id: null, // The current person_id of the logged-in user // profile_id: null, // The current person_profile_id of the logged-in user // pronouns: null, // informal_name: null, given_name: null, // family_name: null, // professional_title: null, full_name: null, // convenience full_name_override: null, // was called display_name // affiliations: null, primary_email: null, // The primary email of the logged-in person/user user_id: null, // The user ID of the logged-in user qry_limit__people: 150, show_content__person_page_help: false }, // Added 2025-04-04 user_id: null, // The current user_id of the logged-in user (if any) user: { id: null, // The current user_id of the logged-in user username: null, name: null, email: null, // The email of the logged-in user allow_auth_key: null, // For sign in without password super: false, // Is the user a super user manager: false, // Is the user a global manager (can manage accounts and users) administrator: false, // Is the user an account administrator verified: false, // Is the user verified public: false, // Is the user a public user (can view public content) person_id: null, // The person ID of the logged-in user access_type: null, // The access type of the logged-in user qry_limit__users: 100 }, qry__enabled: 'enabled', // all, disabled, enabled qry__hidden: 'not_hidden', // all, hidden, not_hidden qry__limit: 20, qry__offset: 0, qr_scanner_version: 'one', admin: { show_element__sql_qry: false, show_element__sql_qry_results: false }, sys_menu: { hide: false, expand: false, hide_access_type: false, expand_access_type: false, hide_edit_mode: false, expand_edit_mode: false, hide_user: false, expand_user: false, hide_theme: false, expand_theme: false, hide_app_cfg: false, expand_app_cfg: false }, debug_menu: { hide: false, expand: false // hide_quick_info: true }, app_cfg: { show_element__header: false, show_element__footer: false, show_element__menu: false, show_element__menu_btn: true, show_element__access_type: true, show_element__passcode_input: true, show_element__cfg: true, show_element__cfg_detail: false, show_element__sign_in_out: true, // Show the sign-in/out button in the UI show_opt__debug: true, show_opt__permissions: true, show_opt__reset: true, show_opt__sync: true, show_opt__theme: true, show_opt__utilities: true }, files: { processed_file_kv: {}, uploaded_file_kv: {}, video_clip_file_kv: {}, add_to_use_files_method: 'upload' // upload, select }, ds: {}, hub: { show_element__cfg: true, show_element__cfg_detail: false, show_element__access_type: true, theme_mode: 'light', theme_name: 'wintry', // wintry classes__form: 'border border-surface-200 p-4 space-y-4 rounded-container', qr: {} }, mod: { archives: {}, events: { event_id: null, show_edit__event_presenter_obj: false, show_list__event_presenter_obj_li: true, show_view__event_presenter_obj: false, submit_status: null, // 'saving', 'created', 'updated' // Badge Printing // Lead Retrievals // Presentation Management // Speakers Management default_session_id: null // Assign to presenters by default // other }, journals: {}, posts: {}, sponsorships: { cfg_id: ae_sponsorship_cfg_id, for_type: null, for_id: null, level_guest_max_li: { 0: 0, 1: 4, // CHOW 2024 - Friend 2: 8, // CHOW 2024 - Supporter 3: 8, // CHOW 2024 - Advocate 4: 8, // CHOW 2024 - Champion 5: 8, // CHOW 2024 - Presenting Partner 6: 16, // CHOW 2024 - Signature Partner 7: 16 // CHOW 2024 - Premier Partner }, show_edit__sponsorship_obj: false, show_list__sponsorship_obj_li: true, show_view__sponsorship_obj: false, show_question__accommodations: false, submit_status: null // 'saving', 'created', 'updated' } // testing: {}, } // testing: true, // ver_testing: true, }; // let ae_app_local_data_struct: key_val = { // ...ae_app_local_data_defaults, // }; // // { // // // ...ae_app_local_data_defaults, // // }; // // console.log(`AE Stores - App Local Storage Data:`, ae_app_local_data_struct); // if (!ae_app_local_data_defaults?.ver_testing) { // console.log(`TEST: AE Stores - ver_testing missing:`, ae_app_local_data_defaults); // // ae_app_local_data_struct = { // // ...ae_app_local_data_defaults, // // ...ae_app_local_data_struct, // // }; // } else { // console.log(`TEST: AE Stores - ver_testing found`); // } // if (ae_app_local_data_struct?.ver !== ae_app_local_data_defaults?.ver) { // console.log(`TEST: AE Stores - ver not match:`, ae_app_local_data_struct); // ae_app_local_data_struct = { // ...ae_app_local_data_defaults, // }; // } else { // console.log(`TEST: AE Stores - ver match: ${ae_app_local_data_struct.ver} === ${ae_app_local_data_defaults.ver}`); // } // if (!ae_app_local_data_struct?.app_cfg) { // console.log(`TEST: AE Stores - app_cfg missing:`, ae_app_local_data_struct); // ae_app_local_data_struct = { // ...ae_app_local_data_defaults, // ...ae_app_local_data_struct, // }; // } // This works, but does not uses local storage: // export let ae_loc = writable(ae_app_local_data_struct); // This works and uses local storage: export const ae_loc: Writable = persisted('ae_loc', ae_app_local_data_defaults); // console.log(`AE Stores - App Local Storage Data:`, get(ae_loc)); // *** BEGIN *** Temporary app data. This should be stored to session storage. const ae_app_session_data_defaults: key_val = { // ver: '2025-04-18_1335', // ver, // '2025-04-18_1100', ver: ver, ver_idb: ver_idb, log_lvl: 0, disable_sys_header: false, disable_sys_nav: false, disable_sys_footer: false, sys_menu: { expand: false, focus_passcode_input: false }, debug_menu: { hide_quick_info: true }, app_cfg: { show_element__passcode_input: true }, ds: { submit_status: null }, ds_loaded: { hub__site__root_page_header: false, hub__site__root_page_content: false, hub__site__root_page_footer: false }, files: { disable_submit__hosted_file_obj: false, processed_file_kv: {}, uploaded_file_kv: {}, video_clip_file_kv: {}, processed_file_list: [], status__file_list: null, // uploaded_file_list: [], video_clip_file_list: [], submit_status: null, // 'saving', 'created', 'updated', 'saved' clip_complete: null }, hub: { show_xyz: null, account_id_qry_status: null, event_badge_id_status_qry__search: null, event_presenter_id_qry_status: null, site_domain_id_qry_status: null, sponsorship_id_qry_status: null, sponsorship_cfg_id_qry_status: null, qr: {} }, mod: { archives: {}, events: { // Badge Printing // Lead Retrievals // Presentation Management // Speakers Management // other }, journals: {}, posts: {}, sponsorships: { disable_submit__sponsorship_obj: false, slct__level_num: 0, show_question__accommodations: false, submit_status: null // 'saving', 'created', 'updated', 'saved' }, testing: {} }, person: { show_report__person_li: false, qry_limit__people: 100 }, show__modal_change_password: false, download: {}, // For API download and upload progress status per file. api_download_kv: {}, // Example: {example_file_id: {status: 'downloading', endpoint: '/event/file/abc123/download', filename: 'example_file_name.ext', size_total: 0, size_loaded: 0, percent_completed: 0}} api_upload_kv: {}, // {example_temp_id: {status: 'uploading', endpoint: '/event/file/abc123/upload', filename: 'example_file_name.ext', size_total: 0, size_loaded: 0, percent_completed: 0}} test: true }; // console.log(`AE Stores - App Session Storage Data:`, ae_app_session_data_defaults); export const ae_sess = writable(ae_app_session_data_defaults); // *** BEGIN *** Temporary API data. This should be stored to session storage. export const ae_api_data_struct: key_val = { ver: '2024-08-11_11', fqdn: api_server_fqdn, base_url: api_base_url, base_url_bak: api_base_url_bak, api_secret_key: api_secret_key, // 'YOUR_API_SECRET_KEY', api_secret_key_bak: api_secret_key, // 'YOUR_API_SECRET_KEY', api_crud_super_key: api_crud_super_key, // 'YOUR_SUPER_KEY' 'zp5PtX4zUsI' headers: {}, account_id: ae_account_id }; const ae_api_headers: key_val = {}; ae_api_headers['Access-Control-Allow-Origin'] = '*'; ae_api_headers['Content-Yype'] = 'application/json'; ae_api_headers['x-aether-api-key'] = ae_api_data_struct.api_secret_key; ae_api_headers['x-aether-api-token'] = 'fake-temp-token'; ae_api_headers['x-aether-api-expire-on'] = ''; if (ae_account_id) { ae_api_headers['x-account-id'] = ae_account_id; } else { // ae_api_headers['x-account-id'] = ; } if (ae_no_account_id) { ae_api_headers['x-no-account-id'] = ae_no_account_id; } ae_api_data_struct['headers'] = ae_api_headers; // console.log(`AE Stores - API Data:`, ae_api_data_struct); export const ae_api = writable(ae_api_data_struct); // *** BEGIN *** Trigger to update the slct variables and other things. const ae_trig_template: key_val = {}; export const ae_trig = writable(ae_trig_template); /* *** BEGIN *** Initialize slct and slct_trigger */ /* The slct and slct_trigger variable should not be stored in local storage. Only use session storage because browser tabs can be open to different accounts, events, sponsorships, etc. */ // Intended for temporary session storage. // Updated 2024-03-15 const slct_obj_template: key_val = { account_id: ae_account_id, account_obj: {}, event_id: null, event_obj: {}, event_obj_li: [], // 'event_exhibit_id': null, // 'event_exhibit_obj': {}, // 'event_exhibit_obj_li': [], event_presentation_id: null, event_presentation_obj: {}, event_presentation_obj_li: [], event_presenter_id: null, event_presenter_obj: {}, event_presenter_obj_li: [], event_session_id: null, event_session_obj: {}, event_session_obj_li: [], sponsorship_id: null, sponsorship_obj: {}, sponsorship_obj_li: [], sponsorship_cfg_id: ae_sponsorship_cfg_id, sponsorship_cfg_obj: {}, sponsorship_cfg_obj_li: [], post_id: null, post_obj: {}, post_obj_li: [], post_comment_id: null, post_comment_obj: {}, post_comment_obj_li: [] }; // console.log(`AE Stores - Selected Objects:`, slct_obj_template); // This works, and uses *session* (not local) storage: export const slct = writable(slct_obj_template); // This works and uses *local* storage: // export let slct: Writable = persisted('ae_slct', slct_obj_template); /* *** BEGIN *** Initialize slct_trigger */ // Intended for temporary session storage. // Updated 2024-02-27 export const slct_trigger: any = writable(null); // console.log(`AE Stores - Selected Trigger:`, slct_trigger); /* *** BEGIN *** Create time variable */ // Updated 2020 export const time = readable(new Date(), function start(set) { const interval = setInterval(() => { set(new Date()); }, 1000); return function stop() { clearInterval(interval); }; });