@yuneta/gobj-js 7.7.3 → 7.8.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2629,6 +2629,10 @@ var __log_callback__ = null;
2629
2629
  function set_log_callback(fn) {
2630
2630
  __log_callback__ = typeof fn === "function" ? fn : null;
2631
2631
  }
2632
+ var __console_output_enabled__ = true;
2633
+ function set_console_log_enabled(enabled) {
2634
+ __console_output_enabled__ = enabled ? true : false;
2635
+ }
2632
2636
  var __in_log_callback__ = false;
2633
2637
  function emit_log_callback(level, msg, hora) {
2634
2638
  if (__log_callback__ && !__in_log_callback__) {
@@ -2674,9 +2678,10 @@ function format_log(format) {
2674
2678
  function log_error(format) {
2675
2679
  let msg = format_log(format);
2676
2680
  let hora = current_timestamp();
2677
- if (f_error) if (f_error === window.console.error) f_error("%c" + hora + " ERROR: " + String(msg), "color:red");
2678
- else {
2679
- window.console.error("%c" + hora + " ERROR: " + String(msg), "color:red");
2681
+ if (f_error) if (f_error === window.console.error) {
2682
+ if (__console_output_enabled__) f_error("%c" + hora + " ERROR: " + String(msg), "color:red");
2683
+ } else {
2684
+ if (__console_output_enabled__) window.console.error("%c" + hora + " ERROR: " + String(msg), "color:red");
2680
2685
  f_error(`${hora} ERROR: ${String(msg)}`);
2681
2686
  }
2682
2687
  emit_log_callback("error", msg, hora);
@@ -2684,9 +2689,10 @@ function log_error(format) {
2684
2689
  function log_warning(format) {
2685
2690
  let msg = format_log(format);
2686
2691
  let hora = current_timestamp();
2687
- if (f_warning) if (f_warning === window.console.warn) f_warning("%c" + hora + " WARNING: " + String(msg), "color:yellow");
2688
- else {
2689
- window.console.warn("%c" + hora + " WARNING: " + String(msg), "color:yellow");
2692
+ if (f_warning) if (f_warning === window.console.warn) {
2693
+ if (__console_output_enabled__) f_warning("%c" + hora + " WARNING: " + String(msg), "color:yellow");
2694
+ } else {
2695
+ if (__console_output_enabled__) window.console.warn("%c" + hora + " WARNING: " + String(msg), "color:yellow");
2690
2696
  f_warning(`${hora} WARNING: ${String(msg)}`);
2691
2697
  }
2692
2698
  emit_log_callback("warning", msg, hora);
@@ -2694,24 +2700,32 @@ function log_warning(format) {
2694
2700
  function log_info(format) {
2695
2701
  let msg = format_log(format);
2696
2702
  let hora = current_timestamp();
2697
- if (f_info) f_info("%c" + hora + " INFO: " + String(msg), "color:cyan");
2703
+ if (f_info) {
2704
+ if (__console_output_enabled__) f_info("%c" + hora + " INFO: " + String(msg), "color:cyan");
2705
+ }
2698
2706
  emit_log_callback("info", msg, hora);
2699
2707
  }
2700
2708
  function log_debug(format) {
2701
2709
  let msg = format_log(format);
2702
2710
  let hora = current_timestamp();
2703
- if (f_debug) f_debug("%c" + hora + " DEBUG: " + String(msg), "color:silver");
2711
+ if (f_debug) {
2712
+ if (__console_output_enabled__) f_debug("%c" + hora + " DEBUG: " + String(msg), "color:silver");
2713
+ }
2704
2714
  emit_log_callback("debug", msg, hora);
2705
2715
  }
2706
2716
  function trace_msg(format) {
2707
2717
  let msg = format_log(format);
2708
2718
  let hora = current_timestamp();
2709
- if (f_debug) f_debug("%c" + hora + " MSG: " + String(msg), "color:cyan");
2719
+ if (f_debug) {
2720
+ if (__console_output_enabled__) f_debug("%c" + hora + " MSG: " + String(msg), "color:cyan");
2721
+ }
2710
2722
  emit_log_callback("msg", msg, hora);
2711
2723
  }
2712
2724
  function trace_json(jn, msg) {
2713
- if (msg) window.console.warn("=====> " + msg);
2714
- window.console.dir(jn);
2725
+ if (__console_output_enabled__) {
2726
+ if (msg) window.console.warn("=====> " + msg);
2727
+ window.console.dir(jn);
2728
+ }
2715
2729
  emit_log_callback("json", jn, current_timestamp());
2716
2730
  }
2717
2731
  /************************************************************
@@ -3524,17 +3538,26 @@ function kw_get_local_storage_value(key, default_value, create = false) {
3524
3538
  }
3525
3539
  /********************************************
3526
3540
  * Save a local attribute
3541
+ *
3542
+ * Returns 0 on success, -1 when the value did NOT reach the store.
3543
+ * It used to return nothing and only console.warn, so every caller up the
3544
+ * chain (db_save_persistent_attrs -> gobj_save_persistent_attrs -> the app)
3545
+ * reported success on a store that had rejected the write: a full or blocked
3546
+ * localStorage (quota, private mode) silently discarded the change while the
3547
+ * UI showed it as saved.
3527
3548
  ********************************************/
3528
3549
  function kw_set_local_storage_value(key, value) {
3529
- if (typeof window === "undefined" || !window.localStorage) return;
3550
+ if (typeof window === "undefined" || !window.localStorage) return 0;
3530
3551
  if (!key || value === void 0) {
3531
- window.console.warn(`Invalid key or value for localStorage: key=${key}, value=${value}`);
3532
- return;
3552
+ log_error(`kw_set_local_storage_value(): invalid key or value: key=${key}`);
3553
+ return -1;
3533
3554
  }
3534
3555
  try {
3535
3556
  window.localStorage.setItem(key, JSON.stringify(value));
3557
+ return 0;
3536
3558
  } catch (e) {
3537
- window.console.warn(`Error saving localStorage key "${key}":`, e);
3559
+ log_error(`kw_set_local_storage_value(): cannot save "${key}" (storage full or blocked?): ${e && e.message ? e.message : e}`);
3560
+ return -1;
3538
3561
  }
3539
3562
  }
3540
3563
  /********************************************
@@ -4509,6 +4532,10 @@ function refresh_language(element, t) {
4509
4532
  let value = elem.getAttribute("data-i18n-aria-label");
4510
4533
  if (value) elem.setAttribute("aria-label", t(value));
4511
4534
  });
4535
+ element.querySelectorAll("[data-i18n-placeholder]").forEach(function(elem) {
4536
+ let value = elem.getAttribute("data-i18n-placeholder");
4537
+ if (value) elem.setAttribute("placeholder", t(value));
4538
+ });
4512
4539
  }
4513
4540
  /************************************************************
4514
4541
  * Example Usage
@@ -4690,13 +4717,16 @@ function db_load_persistent_attrs(gobj, keys) {
4690
4717
  }
4691
4718
  }
4692
4719
  /************************************************************
4693
- *
4720
+ * Returns 0 on success, -1 when the attrs did NOT reach the store
4721
+ * (quota exceeded, private mode, storage disabled). Callers must check
4722
+ * it: a discarded write with a UI that shows the value as saved is the
4723
+ * worst of both worlds.
4694
4724
  ************************************************************/
4695
4725
  function db_save_persistent_attrs(gobj, keys) {
4696
4726
  let attrs = kw_clone_by_keys(gobj, gobj_read_attrs(gobj, sdata_flag_t.SDF_PERSIST, 0), keys, false);
4697
4727
  let jn_file = kw_get_local_storage_value(_get_persistent_path(gobj), null, false);
4698
4728
  if (jn_file && is_object(jn_file)) json_object_update_missing(attrs, jn_file);
4699
- kw_set_local_storage_value(_get_persistent_path(gobj), attrs);
4729
+ return kw_set_local_storage_value(_get_persistent_path(gobj), attrs);
4700
4730
  }
4701
4731
  /************************************************************
4702
4732
  *
@@ -5445,7 +5475,9 @@ var attrs_table = [
5445
5475
  SDATA(data_type_t.DTP_STRING, "jwt", sdata_flag_t.SDF_PERSIST, "", "JWT"),
5446
5476
  SDATA(data_type_t.DTP_STRING, "cert_pem", sdata_flag_t.SDF_PERSIST, "", "SSL server certification, PEM str format"),
5447
5477
  SDATA(data_type_t.DTP_JSON, "extra_info", sdata_flag_t.SDF_RD, "{}", "dict data set by user, added to the identity card msg."),
5448
- SDATA(data_type_t.DTP_INTEGER, "timeout_retry", sdata_flag_t.SDF_RD, "5000", "timeout waiting idAck"),
5478
+ SDATA(data_type_t.DTP_LIST, "required_services", sdata_flag_t.SDF_RD, "[]", "Services this LINK requires (identity card). Empty = the yuno's `required_services`, as before. A yuno with several links to DIFFERENT backends must set it per link: the yuno-wide list is the union, so every backend is told the service names of all the others."),
5479
+ SDATA(data_type_t.DTP_INTEGER, "timeout_retry", sdata_flag_t.SDF_RD, "5000", "First reconnect delay (ms). It BACKS OFF from here, doubling up to timeout_retry_max, and resets when a session is reached"),
5480
+ SDATA(data_type_t.DTP_INTEGER, "timeout_retry_max", sdata_flag_t.SDF_RD, "60000", "Cap of the reconnect backoff (ms). Set it equal to timeout_retry for the old fixed-interval behaviour"),
5449
5481
  SDATA(data_type_t.DTP_INTEGER, "timeout_idack", sdata_flag_t.SDF_RD, "5000", "timeout waiting idAck"),
5450
5482
  SDATA(data_type_t.DTP_POINTER, "subscriber", 0, 0, "subscriber of output-events. If null then subscriber is the parent"),
5451
5483
  SDATA_END()
@@ -5458,7 +5490,8 @@ var PRIVATE_DATA = {
5458
5490
  gobj_timer: null,
5459
5491
  inform_on_close: false,
5460
5492
  websocket: null,
5461
- inside_on_open: false
5493
+ inside_on_open: false,
5494
+ retry_ms: 0
5462
5495
  };
5463
5496
  var __gclass__ = null;
5464
5497
  /******************************
@@ -5506,6 +5539,7 @@ function mt_writing(gobj, path) {
5506
5539
  function mt_start(gobj) {
5507
5540
  let priv = gobj.priv;
5508
5541
  gobj_start(priv.gobj_timer);
5542
+ priv.retry_ms = 0;
5509
5543
  priv.websocket = setup_websocket(gobj);
5510
5544
  return 0;
5511
5545
  }
@@ -5764,6 +5798,8 @@ function send_identity_card(gobj) {
5764
5798
  let yuno_version = gobj_read_str_attr(gobj_yuno(), "yuno_version");
5765
5799
  let yuno_release = gobj_read_str_attr(gobj_yuno(), "yuno_release");
5766
5800
  let yuno_tag = gobj_read_str_attr(gobj_yuno(), "yuno_tag");
5801
+ let required_services = gobj_read_attr(gobj, "required_services");
5802
+ if (!required_services || !required_services.length) required_services = gobj_read_attr(gobj_yuno(), "required_services");
5767
5803
  let kw = {
5768
5804
  "yuno_role": gobj_yuno_role(),
5769
5805
  "yuno_id": gobj_yuno_id(),
@@ -5782,7 +5818,7 @@ function send_identity_card(gobj) {
5782
5818
  "id": node_uuid(),
5783
5819
  "user_agent": typeof window !== "undefined" ? window.navigator.userAgent : "",
5784
5820
  "language": typeof window !== "undefined" ? window.navigator.language : "",
5785
- "required_services": gobj_read_attr(gobj_yuno(), "required_services")
5821
+ "required_services": required_services
5786
5822
  };
5787
5823
  msg_iev_push_stack(gobj, kw, IEVENT_STACK_ID, build_cli_ievent_request(gobj, gobj_name(gobj_parent(gobj)), null));
5788
5824
  msg_iev_set_msg_type(gobj, kw, "__identity__");
@@ -5911,9 +5947,37 @@ function ac_on_close(gobj, event, kw, src) {
5911
5947
  was_clean: e.wasClean
5912
5948
  });
5913
5949
  }
5914
- if (gobj_is_running(gobj)) set_timeout(priv.gobj_timer, gobj_read_integer_attr(gobj, "timeout_retry"));
5950
+ if (gobj_is_running(gobj)) set_timeout(priv.gobj_timer, next_retry(gobj));
5915
5951
  return 0;
5916
5952
  }
5953
+ /***************************************************************
5954
+ * How long to wait before the next reconnect attempt.
5955
+ *
5956
+ * The delay used to be a constant (`timeout_retry`, 5s), for ever. A
5957
+ * backend that is down — or a URL with a typo, which never comes back —
5958
+ * was therefore hit every 5 seconds for the whole life of the tab, by
5959
+ * EVERY link pointed at it, all in lockstep. It backs off now: from
5960
+ * `timeout_retry`, doubling, capped at `timeout_retry_max`.
5961
+ *
5962
+ * The jitter (±20%) is what breaks the lockstep. Without it, N links that
5963
+ * went down together retry together for ever — a thundering herd against a
5964
+ * backend that is just coming back up. It is the one place a random number
5965
+ * earns its keep.
5966
+ *
5967
+ * Reset to zero when a session is actually reached
5968
+ * (ac_identity_card_ack), so a link that flaps once does not carry a
5969
+ * minute-long penalty into its next real drop.
5970
+ ***************************************************************/
5971
+ function next_retry(gobj) {
5972
+ let priv = gobj.priv;
5973
+ let base = gobj_read_integer_attr(gobj, "timeout_retry");
5974
+ let max = gobj_read_integer_attr(gobj, "timeout_retry_max");
5975
+ if (max < base) max = base;
5976
+ priv.retry_ms = priv.retry_ms ? Math.min(priv.retry_ms * 2, max) : base;
5977
+ let jitter = priv.retry_ms * .2;
5978
+ let ms = priv.retry_ms - jitter + Math.random() * 2 * jitter;
5979
+ return Math.max(1, Math.round(ms));
5980
+ }
5917
5981
  /********************************************
5918
5982
  *
5919
5983
  ********************************************/
@@ -5954,6 +6018,7 @@ function ac_identity_card_ack(gobj, event, kw, src) {
5954
6018
  } else {
5955
6019
  gobj_change_state(gobj, "ST_SESSION");
5956
6020
  priv.inside_on_open = true;
6021
+ priv.retry_ms = 0;
5957
6022
  if (!priv.inform_on_close) {
5958
6023
  priv.inform_on_close = true;
5959
6024
  let kw_on_open = {
@@ -5997,7 +6062,7 @@ function ac_on_message(gobj, event, kw, src) {
5997
6062
  let msg_type = msg_iev_get_msg_type(gobj, iev_kw);
5998
6063
  let event_id = msg_iev_get_stack(gobj, iev_kw, IEVENT_STACK_ID);
5999
6064
  let iev_dst_role = kw_get_str(gobj, event_id, "dst_role", "");
6000
- if (iev_dst_role !== gobj_yuno_role()) {
6065
+ if (iev_dst_role.toLowerCase() !== gobj_yuno_role().toLowerCase()) {
6001
6066
  log_error(`"It's not my role, dst_role: ${iev_dst_role}, my_role: ${gobj_yuno_role()}`);
6002
6067
  return 0;
6003
6068
  }
@@ -6154,6 +6219,6 @@ function register_c_ievent_cli() {
6154
6219
  return create_gclass(GCLASS_NAME);
6155
6220
  }
6156
6221
  //#endregion
6157
- export { GObj, SDATA, SDATAAUTHZ, SDATACM, SDATACM2, SDATADF, SDATAPM, SDATAPM0, SDATA_END, SDataDesc, YUNETA_VERSION, __yuno__, build_command_response, build_path, build_stats_response, clean_name, clear_timeout, cmp_two_simple_json, command_parser, createElement2, createOneHtml, create_json_record, create_template_record, current_timestamp, data_type_t, db_list_persistent_attrs, db_load_persistent_attrs, db_remove_persistent_attrs, db_save_persistent_attrs, debounce, delete_from_list, duplicate_objects, empty_string, escapeHtml, event_flag_t, gclass_add_ev_action, gclass_add_event_type, gclass_add_state, gclass_check_fsm, gclass_create, gclass_event_type, gclass_find_by_name, gclass_flag_t, gclass_unregister, getPositionRelativeToBody, get_function_name, get_now, gobj_bottom_gobj, gobj_change_parent, gobj_change_state, gobj_command, gobj_create, gobj_create2, gobj_create_default_service, gobj_create_pure_child, gobj_create_service, gobj_create_volatil, gobj_create_yuno, gobj_current_state, gobj_default_service, gobj_destroy, gobj_find_child, gobj_find_gobj, gobj_find_service, gobj_find_subscribings, gobj_find_subscriptions, gobj_flag_t, gobj_full_name, gobj_gclass_name, gobj_has_attr, gobj_has_event, gobj_has_output_event, gobj_hsdata, gobj_is_destroying, gobj_is_playing, gobj_is_pure_child, gobj_is_running, gobj_is_service, gobj_is_volatil, gobj_list_persistent_attrs, gobj_list_subscriptions, gobj_load_persistent_attrs, gobj_match_children, gobj_match_children_tree, gobj_match_gobj, gobj_name, gobj_parent, gobj_pause, gobj_play, gobj_post_event, gobj_publish_event, gobj_read_attr, gobj_read_attrs, gobj_read_bool_attr, gobj_read_integer_attr, gobj_read_pointer_attr, gobj_read_str_attr, gobj_remove_persistent_attrs, gobj_reset_volatil_attrs, gobj_save_persistent_attrs, gobj_search_path, gobj_send_event, gobj_services, gobj_set_bottom_gobj, gobj_set_trace_machine_format, gobj_short_name, gobj_start, gobj_start_children, gobj_start_tree, gobj_start_up, gobj_stats, gobj_stop, gobj_stop_children, gobj_stop_tree, gobj_subscribe_event, gobj_trace_machine_format, gobj_unsubscribe_event, gobj_unsubscribe_list, gobj_walk_gobj_children, gobj_walk_gobj_children_tree, gobj_write_attr, gobj_write_attrs, gobj_write_bool_attr, gobj_write_integer_attr, gobj_write_str_attr, gobj_yuno, gobj_yuno_id, gobj_yuno_name, gobj_yuno_role, id_index_in_obj_list, index_in_list, is_array, is_boolean, is_date, is_function, is_gobj, is_metadata_key, is_null, is_number, is_object, is_private_key, is_pure_number, is_string, jdb_delete, jdb_get, jdb_get_by_idx, jdb_get_topic, jdb_init, jdb_update, json_array_append, json_array_append_new, json_array_extend, json_array_remove, json_array_size, json_deep_copy, json_is_identical, json_object_del, json_object_get, json_object_set, json_object_set_new, json_object_size, json_object_update, json_object_update_existing, json_object_update_missing, json_size, jwt2json, jwtDecode, kw_clone_by_keys, kw_clone_by_not_keys, kw_collect, kw_delete, kw_find_json_in_list, kw_find_path, kw_flag_t, kw_get_bool, kw_get_dict, kw_get_dict_value, kw_get_int, kw_get_list, kw_get_local_storage_value, kw_get_pointer, kw_get_real, kw_get_str, kw_has_key, kw_match_simple, kw_pop, kw_remove_local_storage_value, kw_select, kw_set_dict_value, kw_set_local_storage_value, kw_set_subdict_value, kwid_collect, kwid_find_one_record, kwid_get_ids, kwid_match_id, kwid_new_dict, list2options, load_json_file, log_debug, log_error, log_info, log_warning, msg_iev_get_msg_type, msg_iev_get_stack, msg_iev_push_stack, msg_iev_read_key, msg_iev_set_msg_type, msg_iev_write_key, node_uuid, parseBoolean, parseSVG, refresh_language, register_c_ievent_cli, register_c_timer, register_c_yuno, safeSrc, sdata_flag_t, send_http_json_post, set_log_callback, set_remote_log_functions, set_timeout, set_timeout_periodic, sprintf, stats_parser, str_in_list, strcasecmp, strcmp, strncmp, strs_in_list, strstr, template_get_field_desc, timeTracker, trace_json, trace_msg, treedb_decoder_fkey, treedb_decoder_hook, treedb_encoder_fkey, treedb_get_field_desc, treedb_hook_data_size, vsprintf };
6222
+ export { GObj, SDATA, SDATAAUTHZ, SDATACM, SDATACM2, SDATADF, SDATAPM, SDATAPM0, SDATA_END, SDataDesc, YUNETA_VERSION, __yuno__, build_command_response, build_path, build_stats_response, clean_name, clear_timeout, cmp_two_simple_json, command_parser, createElement2, createOneHtml, create_json_record, create_template_record, current_timestamp, data_type_t, db_list_persistent_attrs, db_load_persistent_attrs, db_remove_persistent_attrs, db_save_persistent_attrs, debounce, delete_from_list, duplicate_objects, empty_string, escapeHtml, event_flag_t, gclass_add_ev_action, gclass_add_event_type, gclass_add_state, gclass_check_fsm, gclass_create, gclass_event_type, gclass_find_by_name, gclass_flag_t, gclass_unregister, getPositionRelativeToBody, get_function_name, get_now, gobj_bottom_gobj, gobj_change_parent, gobj_change_state, gobj_command, gobj_create, gobj_create2, gobj_create_default_service, gobj_create_pure_child, gobj_create_service, gobj_create_volatil, gobj_create_yuno, gobj_current_state, gobj_default_service, gobj_destroy, gobj_find_child, gobj_find_gobj, gobj_find_service, gobj_find_subscribings, gobj_find_subscriptions, gobj_flag_t, gobj_full_name, gobj_gclass_name, gobj_has_attr, gobj_has_event, gobj_has_output_event, gobj_hsdata, gobj_is_destroying, gobj_is_playing, gobj_is_pure_child, gobj_is_running, gobj_is_service, gobj_is_volatil, gobj_list_persistent_attrs, gobj_list_subscriptions, gobj_load_persistent_attrs, gobj_match_children, gobj_match_children_tree, gobj_match_gobj, gobj_name, gobj_parent, gobj_pause, gobj_play, gobj_post_event, gobj_publish_event, gobj_read_attr, gobj_read_attrs, gobj_read_bool_attr, gobj_read_integer_attr, gobj_read_pointer_attr, gobj_read_str_attr, gobj_remove_persistent_attrs, gobj_reset_volatil_attrs, gobj_save_persistent_attrs, gobj_search_path, gobj_send_event, gobj_services, gobj_set_bottom_gobj, gobj_set_trace_machine_format, gobj_short_name, gobj_start, gobj_start_children, gobj_start_tree, gobj_start_up, gobj_stats, gobj_stop, gobj_stop_children, gobj_stop_tree, gobj_subscribe_event, gobj_trace_machine_format, gobj_unsubscribe_event, gobj_unsubscribe_list, gobj_walk_gobj_children, gobj_walk_gobj_children_tree, gobj_write_attr, gobj_write_attrs, gobj_write_bool_attr, gobj_write_integer_attr, gobj_write_str_attr, gobj_yuno, gobj_yuno_id, gobj_yuno_name, gobj_yuno_role, id_index_in_obj_list, index_in_list, is_array, is_boolean, is_date, is_function, is_gobj, is_metadata_key, is_null, is_number, is_object, is_private_key, is_pure_number, is_string, jdb_delete, jdb_get, jdb_get_by_idx, jdb_get_topic, jdb_init, jdb_update, json_array_append, json_array_append_new, json_array_extend, json_array_remove, json_array_size, json_deep_copy, json_is_identical, json_object_del, json_object_get, json_object_set, json_object_set_new, json_object_size, json_object_update, json_object_update_existing, json_object_update_missing, json_size, jwt2json, jwtDecode, kw_clone_by_keys, kw_clone_by_not_keys, kw_collect, kw_delete, kw_find_json_in_list, kw_find_path, kw_flag_t, kw_get_bool, kw_get_dict, kw_get_dict_value, kw_get_int, kw_get_list, kw_get_local_storage_value, kw_get_pointer, kw_get_real, kw_get_str, kw_has_key, kw_match_simple, kw_pop, kw_remove_local_storage_value, kw_select, kw_set_dict_value, kw_set_local_storage_value, kw_set_subdict_value, kwid_collect, kwid_find_one_record, kwid_get_ids, kwid_match_id, kwid_new_dict, list2options, load_json_file, log_debug, log_error, log_info, log_warning, msg_iev_get_msg_type, msg_iev_get_stack, msg_iev_push_stack, msg_iev_read_key, msg_iev_set_msg_type, msg_iev_write_key, node_uuid, parseBoolean, parseSVG, refresh_language, register_c_ievent_cli, register_c_timer, register_c_yuno, safeSrc, sdata_flag_t, send_http_json_post, set_console_log_enabled, set_log_callback, set_remote_log_functions, set_timeout, set_timeout_periodic, sprintf, stats_parser, str_in_list, strcasecmp, strcmp, strncmp, strs_in_list, strstr, template_get_field_desc, timeTracker, trace_json, trace_msg, treedb_decoder_fkey, treedb_decoder_hook, treedb_encoder_fkey, treedb_get_field_desc, treedb_hook_data_size, vsprintf };
6158
6223
 
6159
6224
  //# sourceMappingURL=gobj-js.es.js.map