@yuneta/gobj-js 7.26.22 → 7.26.24
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.
- package/README.md +43 -2
- package/dist/gobj-js.cjs.js +238 -57
- package/dist/gobj-js.cjs.js.map +1 -1
- package/dist/gobj-js.cjs.min.js +1650 -1527
- package/dist/gobj-js.cjs.min.js.map +1 -1
- package/dist/gobj-js.es.js +238 -58
- package/dist/gobj-js.es.js.map +1 -1
- package/dist/gobj-js.es.min.js +1630 -1507
- package/dist/gobj-js.es.min.js.map +1 -1
- package/dist/gobj-js.iife.js +238 -57
- package/dist/gobj-js.iife.js.map +1 -1
- package/dist/gobj-js.iife.min.js +2046 -1923
- package/dist/gobj-js.iife.min.js.map +1 -1
- package/dist/gobj-js.umd.js +238 -57
- package/dist/gobj-js.umd.js.map +1 -1
- package/dist/gobj-js.umd.min.js +2046 -1923
- package/dist/gobj-js.umd.min.js.map +1 -1
- package/package.json +1 -1
package/dist/gobj-js.es.js
CHANGED
|
@@ -865,6 +865,75 @@ var JSON_NUMBER_TEXT = /^-?(0|[1-9][0-9]*)(\.[0-9]+)?([eE][+-]?[0-9]+)?$/;
|
|
|
865
865
|
var INT64_MIN = -(2n ** 63n);
|
|
866
866
|
var INT64_MAX = 2n ** 63n - 1n;
|
|
867
867
|
var REFUSED_TEXT = "a text that does not read as one";
|
|
868
|
+
var JSON_NUMBER_TOKEN = /-?(0|[1-9][0-9]*)(\.[0-9]+)?([eE][+-]?[0-9]+)?/y;
|
|
869
|
+
function is_surrogate_pair(high, low) {
|
|
870
|
+
return high >= 55296 && high <= 56319 && low >= 56320 && low <= 57343;
|
|
871
|
+
}
|
|
872
|
+
function json_text_refused_by_c(s) {
|
|
873
|
+
const n = s.length;
|
|
874
|
+
let i = 0;
|
|
875
|
+
while (i < n) {
|
|
876
|
+
const c = s.charCodeAt(i);
|
|
877
|
+
if (c === 34) {
|
|
878
|
+
i++;
|
|
879
|
+
while (i < n) {
|
|
880
|
+
const d = s.charCodeAt(i);
|
|
881
|
+
if (d === 34) {
|
|
882
|
+
i++;
|
|
883
|
+
break;
|
|
884
|
+
}
|
|
885
|
+
if (d === 92 && s[i + 1] === "u") {
|
|
886
|
+
const u = parseInt(s.substring(i + 2, i + 6), 16);
|
|
887
|
+
if (u === 0) return true;
|
|
888
|
+
if (u >= 55296 && u <= 57343) {
|
|
889
|
+
if (!is_surrogate_pair(u, s[i + 6] === "\\" && s[i + 7] === "u" ? parseInt(s.substring(i + 8, i + 12), 16) : -1)) return true;
|
|
890
|
+
i += 12;
|
|
891
|
+
continue;
|
|
892
|
+
}
|
|
893
|
+
i += 6;
|
|
894
|
+
continue;
|
|
895
|
+
}
|
|
896
|
+
if (d === 92) {
|
|
897
|
+
i += 2;
|
|
898
|
+
continue;
|
|
899
|
+
}
|
|
900
|
+
if (d >= 55296 && d <= 57343) {
|
|
901
|
+
if (!is_surrogate_pair(d, s.charCodeAt(i + 1))) return true;
|
|
902
|
+
i += 2;
|
|
903
|
+
continue;
|
|
904
|
+
}
|
|
905
|
+
i++;
|
|
906
|
+
}
|
|
907
|
+
continue;
|
|
908
|
+
}
|
|
909
|
+
if (c === 45 || c >= 48 && c <= 57) {
|
|
910
|
+
JSON_NUMBER_TOKEN.lastIndex = i;
|
|
911
|
+
const m = JSON_NUMBER_TOKEN.exec(s);
|
|
912
|
+
if (!m) return true;
|
|
913
|
+
const token = m[0];
|
|
914
|
+
if (/[.eE]/.test(token)) {
|
|
915
|
+
if (!Number.isFinite(Number(token))) return true;
|
|
916
|
+
} else {
|
|
917
|
+
const big = BigInt(token);
|
|
918
|
+
if (big < INT64_MIN || big > INT64_MAX) return true;
|
|
919
|
+
}
|
|
920
|
+
i += token.length;
|
|
921
|
+
continue;
|
|
922
|
+
}
|
|
923
|
+
i++;
|
|
924
|
+
}
|
|
925
|
+
return false;
|
|
926
|
+
}
|
|
927
|
+
function parse_json_text_as_c(s) {
|
|
928
|
+
let jn;
|
|
929
|
+
try {
|
|
930
|
+
jn = JSON.parse(s);
|
|
931
|
+
} catch (e) {
|
|
932
|
+
return;
|
|
933
|
+
}
|
|
934
|
+
if (json_text_refused_by_c(s)) return;
|
|
935
|
+
return jn;
|
|
936
|
+
}
|
|
868
937
|
function value_has_shape(type, value) {
|
|
869
938
|
if (DTP_IS_STRING(type)) return is_string(value);
|
|
870
939
|
if (DTP_IS_DICT(type)) return is_object(value);
|
|
@@ -968,16 +1037,8 @@ function text2parameter(type, s, from_kw) {
|
|
|
968
1037
|
};
|
|
969
1038
|
}
|
|
970
1039
|
if (DTP_IS_DICT(type) || DTP_IS_LIST(type)) {
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
jn = JSON.parse(s);
|
|
974
|
-
} catch (e) {
|
|
975
|
-
return {
|
|
976
|
-
value: void 0,
|
|
977
|
-
refused: REFUSED_TEXT
|
|
978
|
-
};
|
|
979
|
-
}
|
|
980
|
-
if (!value_has_shape(type, jn)) return {
|
|
1040
|
+
const jn = parse_json_text_as_c(s);
|
|
1041
|
+
if (jn === void 0 || !value_has_shape(type, jn)) return {
|
|
981
1042
|
value: void 0,
|
|
982
1043
|
refused: REFUSED_TEXT
|
|
983
1044
|
};
|
|
@@ -986,12 +1047,12 @@ function text2parameter(type, s, from_kw) {
|
|
|
986
1047
|
refused: null
|
|
987
1048
|
};
|
|
988
1049
|
}
|
|
989
|
-
if (DTP_IS_JSON(type))
|
|
990
|
-
|
|
991
|
-
|
|
1050
|
+
if (DTP_IS_JSON(type)) {
|
|
1051
|
+
const jn = parse_json_text_as_c(s);
|
|
1052
|
+
if (jn !== void 0) return {
|
|
1053
|
+
value: jn,
|
|
992
1054
|
refused: null
|
|
993
1055
|
};
|
|
994
|
-
} catch (e) {
|
|
995
1056
|
const t = s.replace(/^[ \t]+/, "");
|
|
996
1057
|
if (t.startsWith("{") || t.startsWith("[") || t.startsWith("\"")) return {
|
|
997
1058
|
value: void 0,
|
|
@@ -1084,8 +1145,18 @@ var TYPES_READ = [
|
|
|
1084
1145
|
data_type_t.DTP_LIST,
|
|
1085
1146
|
data_type_t.DTP_DICT
|
|
1086
1147
|
];
|
|
1148
|
+
var NO_JSON_TEXT = "a value with no json text";
|
|
1149
|
+
function json_text_of(value) {
|
|
1150
|
+
try {
|
|
1151
|
+
const s = JSON.stringify(value);
|
|
1152
|
+
return is_string(s) ? s : void 0;
|
|
1153
|
+
} catch (e) {
|
|
1154
|
+
return;
|
|
1155
|
+
}
|
|
1156
|
+
}
|
|
1087
1157
|
function log_attr_value_refused(gobj, it, value, refused) {
|
|
1088
1158
|
const types = {
|
|
1159
|
+
[data_type_t.DTP_STRING]: "a string",
|
|
1089
1160
|
[data_type_t.DTP_BOOLEAN]: "a boolean",
|
|
1090
1161
|
[data_type_t.DTP_INTEGER]: "an integer",
|
|
1091
1162
|
[data_type_t.DTP_REAL]: "a real",
|
|
@@ -1095,7 +1166,8 @@ function log_attr_value_refused(gobj, it, value, refused) {
|
|
|
1095
1166
|
let shown;
|
|
1096
1167
|
if (it.flag & sdata_flag_t.SDF_SECRET) shown = "********";
|
|
1097
1168
|
else {
|
|
1098
|
-
shown = is_string(value) ? value :
|
|
1169
|
+
shown = is_string(value) ? value : json_text_of(value === void 0 ? null : value);
|
|
1170
|
+
if (shown === void 0) shown = `<${NO_JSON_TEXT}>`;
|
|
1099
1171
|
const masked = mask_secrets_inline(shown);
|
|
1100
1172
|
if (masked !== null) shown = masked;
|
|
1101
1173
|
if (shown.length > ATTR_VALUE_SHOWN) {
|
|
@@ -1117,8 +1189,11 @@ function json2item(gobj, sdata, it, jn_value_) {
|
|
|
1117
1189
|
if (jn_value_ === null || jn_value_ === void 0) jn_value2 = "";
|
|
1118
1190
|
else if (is_string(jn_value_)) jn_value2 = String(jn_value_);
|
|
1119
1191
|
else {
|
|
1120
|
-
|
|
1121
|
-
if (
|
|
1192
|
+
jn_value2 = json_text_of(jn_value_);
|
|
1193
|
+
if (jn_value2 === void 0) {
|
|
1194
|
+
log_attr_value_refused(gobj, it, jn_value_, NO_JSON_TEXT);
|
|
1195
|
+
return -1;
|
|
1196
|
+
}
|
|
1122
1197
|
}
|
|
1123
1198
|
break;
|
|
1124
1199
|
case data_type_t.DTP_BOOLEAN:
|
|
@@ -2566,15 +2641,20 @@ function write_attr_value(gobj, key, value) {
|
|
|
2566
2641
|
* The value a typed writer writes, read as ITS type by the grammar of
|
|
2567
2642
|
* json2item() (a C writer takes its C type: a string is never read as a
|
|
2568
2643
|
* number there). Return {value} or {refused} (logged): the attr keeps its
|
|
2569
|
-
* value. A string writer
|
|
2570
|
-
*
|
|
2644
|
+
* value. A string writer takes null and undefined as "", any other json
|
|
2645
|
+
* as its text, as a DTP_STRING attr reads them; it refuses only a value
|
|
2646
|
+
* with no json text (circular, a BigInt).
|
|
2571
2647
|
***************************************************************************/
|
|
2572
2648
|
function typed_writer_value(gobj, name, type, value) {
|
|
2649
|
+
let r;
|
|
2573
2650
|
if (DTP_IS_STRING(type)) {
|
|
2574
2651
|
if (value === null || value === void 0) return { value: "" };
|
|
2575
|
-
|
|
2576
|
-
|
|
2577
|
-
|
|
2652
|
+
if (is_string(value)) return { value };
|
|
2653
|
+
r = {
|
|
2654
|
+
value: json_text_of(value),
|
|
2655
|
+
refused: NO_JSON_TEXT
|
|
2656
|
+
};
|
|
2657
|
+
} else r = command_parameter_from_json(type, value);
|
|
2578
2658
|
if (r.value === void 0) {
|
|
2579
2659
|
let holder = gobj;
|
|
2580
2660
|
while (holder && !gobj_has_attr(holder, name)) holder = holder.bottom_gobj;
|
|
@@ -3019,9 +3099,9 @@ function gobj_send_event(dst, event, kw, src) {
|
|
|
3019
3099
|
}
|
|
3020
3100
|
}
|
|
3021
3101
|
const frame = push_dispatch_frame(dst, event, frame_kind_t.FRAME_ACTION);
|
|
3022
|
-
if (event_action.next_state) gobj_change_state(dst, event_action.next_state);
|
|
3023
3102
|
let ret = -1;
|
|
3024
3103
|
try {
|
|
3104
|
+
if (event_action.next_state) gobj_change_state(dst, event_action.next_state);
|
|
3025
3105
|
if (event_action.action) ret = event_action.action(dst, event, kw, src);
|
|
3026
3106
|
} catch (e) {
|
|
3027
3107
|
__inside__--;
|
|
@@ -3045,18 +3125,23 @@ var subs_flag_t = Object.freeze({
|
|
|
3045
3125
|
__own_event__: 4
|
|
3046
3126
|
});
|
|
3047
3127
|
/***************************************************************************
|
|
3048
|
-
* The event type of `event_name` in any registered gclass
|
|
3049
|
-
*
|
|
3128
|
+
* The event type of `event_name` in any registered gclass whose flags
|
|
3129
|
+
* hold one of `event_flag` (0: any), null if none. The C kernel's
|
|
3130
|
+
* gobj_find_event_type(): any case, gclasses only. With `verbose` a miss
|
|
3131
|
+
* is logged, with the name as it was given: never verbose for a name
|
|
3132
|
+
* that came from a peer.
|
|
3050
3133
|
***************************************************************************/
|
|
3051
|
-
function
|
|
3134
|
+
function gobj_find_event_type(event_name, event_flag, verbose) {
|
|
3052
3135
|
let lower = String(event_name).toLowerCase();
|
|
3053
3136
|
for (let gclass_name in _gclass_register) {
|
|
3054
3137
|
let dl = _gclass_register[gclass_name].dl_events;
|
|
3055
3138
|
for (let i = 0; i < dl.length; i++) {
|
|
3056
3139
|
let event_type = dl[i];
|
|
3140
|
+
if (event_flag && !(event_type.event_flag & event_flag)) continue;
|
|
3057
3141
|
if (event_type.event_name && event_type.event_name.toLowerCase() === lower) return event_type;
|
|
3058
3142
|
}
|
|
3059
3143
|
}
|
|
3144
|
+
if (verbose) log_error(`EVENT NOT FOUND: ${event_name}`);
|
|
3060
3145
|
return null;
|
|
3061
3146
|
}
|
|
3062
3147
|
var subscription_desc = [
|
|
@@ -3093,7 +3178,7 @@ function _create_subscription(publisher, event, kw, subscriber) {
|
|
|
3093
3178
|
json_object_set_new(subs, "__config__", kw_clone);
|
|
3094
3179
|
let renamed_event = kw_get_str(publisher, kw_clone, "__rename_event_name__", "");
|
|
3095
3180
|
if (!empty_string(renamed_event)) {
|
|
3096
|
-
let event_type =
|
|
3181
|
+
let event_type = gobj_find_event_type(renamed_event, 0, false);
|
|
3097
3182
|
if (event_type) {
|
|
3098
3183
|
json_object_set_new(subs, "renamed_event", event_type.event_name);
|
|
3099
3184
|
delete kw_clone.__rename_event_name__;
|
|
@@ -3154,7 +3239,7 @@ function _subscription_match_kw(kw, event) {
|
|
|
3154
3239
|
kw_match.__config__ = config_match;
|
|
3155
3240
|
let renamed_event = "";
|
|
3156
3241
|
let rename = config_match.__rename_event_name__;
|
|
3157
|
-
let event_type = typeof rename === "string" && !empty_string(rename) ?
|
|
3242
|
+
let event_type = typeof rename === "string" && !empty_string(rename) ? gobj_find_event_type(rename, 0, false) : null;
|
|
3158
3243
|
if (event_type) {
|
|
3159
3244
|
renamed_event = event_type.event_name;
|
|
3160
3245
|
delete config_match.__rename_event_name__;
|
|
@@ -4318,12 +4403,13 @@ function mark_params(str, value_is_secret, reading, marks, judged) {
|
|
|
4318
4403
|
const name_from = word;
|
|
4319
4404
|
word = p + 1;
|
|
4320
4405
|
const secret = is_secret_name_tail(str, name_from, p, names);
|
|
4321
|
-
if (secret && names === NAMES_NOW && !is_secret_name_tail(str, name_from, p, NAMES_7_26_9)) not_7_26_9 = true;
|
|
4406
|
+
if (secret && names === NAMES_NOW && !not_7_26_9 && !is_secret_name_tail(str, name_from, p, NAMES_7_26_9)) not_7_26_9 = true;
|
|
4322
4407
|
if (!(secret || value_is_secret && p - name_from === 5 && ascii_case_equal(str, name_from, "value"))) {
|
|
4323
|
-
if (judged && query_name_from(str, p) === name_from) judged[p] =
|
|
4408
|
+
if (judged && query_name_from(str, p) === name_from) judged[p] = JUDGED_NOT_SECRET;
|
|
4324
4409
|
p++;
|
|
4325
4410
|
continue;
|
|
4326
4411
|
}
|
|
4412
|
+
if (judged && secret && query_name_from(str, p) === name_from) judged[p] = JUDGED_SECRET;
|
|
4327
4413
|
p++;
|
|
4328
4414
|
let end;
|
|
4329
4415
|
const quote = p < str.length && (str[p] === "\"" || str[p] === "'") ? str[p] : "";
|
|
@@ -4386,23 +4472,99 @@ function query_name_from(str, eq) {
|
|
|
4386
4472
|
while (n > 0 && eq - n < MASK_MAX_NAME && is_name_char_code(str.charCodeAt(n - 1))) n--;
|
|
4387
4473
|
return n;
|
|
4388
4474
|
}
|
|
4475
|
+
var JUDGED_NOT_SECRET = 1;
|
|
4476
|
+
var JUDGED_SECRET = 2;
|
|
4477
|
+
function hex_digit_value(code) {
|
|
4478
|
+
if (code >= 48 && code <= 57) return code - 48;
|
|
4479
|
+
if (code >= 97 && code <= 102) return code - 87;
|
|
4480
|
+
if (code >= 65 && code <= 70) return code - 55;
|
|
4481
|
+
return -1;
|
|
4482
|
+
}
|
|
4483
|
+
function is_written_name_bracket_code(code) {
|
|
4484
|
+
return code === 91 || code === 93 || code === 39 || code === 34;
|
|
4485
|
+
}
|
|
4486
|
+
function is_written_name_code(code) {
|
|
4487
|
+
return is_name_char_code(code) || code === 37 || is_written_name_bracket_code(code);
|
|
4488
|
+
}
|
|
4489
|
+
function written_name_is_secret(str, eq) {
|
|
4490
|
+
let n = eq;
|
|
4491
|
+
let plain = -1;
|
|
4492
|
+
while (n > 0 && eq - n < MASK_MAX_NAME && is_written_name_code(str.charCodeAt(n - 1))) {
|
|
4493
|
+
n--;
|
|
4494
|
+
if (plain < 0 && !is_name_char_code(str.charCodeAt(n))) plain = n + 1;
|
|
4495
|
+
}
|
|
4496
|
+
if (plain < 0) return false;
|
|
4497
|
+
const to = str.charCodeAt(plain - 1) === 37 ? eq : plain - 1;
|
|
4498
|
+
let encoded = false;
|
|
4499
|
+
for (let s = n; s < to && !encoded; s++) encoded = str.charCodeAt(s) === 37;
|
|
4500
|
+
let name = str;
|
|
4501
|
+
let from = n;
|
|
4502
|
+
let end = to;
|
|
4503
|
+
if (encoded) {
|
|
4504
|
+
name = "";
|
|
4505
|
+
for (let s = n; s < to; s++) {
|
|
4506
|
+
const hi = str.charCodeAt(s) === 37 && to - s > 2 ? hex_digit_value(str.charCodeAt(s + 1)) : -1;
|
|
4507
|
+
const lo = hi >= 0 ? hex_digit_value(str.charCodeAt(s + 2)) : -1;
|
|
4508
|
+
if (lo >= 0) {
|
|
4509
|
+
name += String.fromCharCode(hi * 16 + lo);
|
|
4510
|
+
s += 2;
|
|
4511
|
+
} else name += str[s];
|
|
4512
|
+
}
|
|
4513
|
+
from = 0;
|
|
4514
|
+
end = name.length;
|
|
4515
|
+
}
|
|
4516
|
+
let seg = from;
|
|
4517
|
+
for (let i = from; i <= end; i++) {
|
|
4518
|
+
if (i < end && !is_written_name_bracket_code(name.charCodeAt(i))) continue;
|
|
4519
|
+
if (i - seg >= 3 && secret_name_check(name, seg, i, true, true)) return true;
|
|
4520
|
+
seg = i + 1;
|
|
4521
|
+
}
|
|
4522
|
+
return false;
|
|
4523
|
+
}
|
|
4524
|
+
function mark_query_value(str, eq, marks) {
|
|
4525
|
+
const v = eq + 1;
|
|
4526
|
+
if (v < str.length && (str[v] === "\"" || str[v] === "'")) return mark_run(str, v + 1, QUOTE_STOPS[str[v]], marks);
|
|
4527
|
+
mark_scheme_value(str, v, PARAM_VALUE_STOPS, marks);
|
|
4528
|
+
return mark_run(str, v, PARAM_VALUE_STOPS, marks);
|
|
4529
|
+
}
|
|
4530
|
+
var WRITTEN_NAME_MARKS = /[[\]%'"]/;
|
|
4389
4531
|
function mark_query_params(str, marks, judged) {
|
|
4390
4532
|
let frontier = 0;
|
|
4391
|
-
|
|
4392
|
-
|
|
4393
|
-
|
|
4394
|
-
|
|
4395
|
-
|
|
4396
|
-
|
|
4397
|
-
|
|
4398
|
-
|
|
4399
|
-
|
|
4400
|
-
|
|
4401
|
-
|
|
4402
|
-
|
|
4403
|
-
|
|
4404
|
-
|
|
4533
|
+
let frontier_written = WRITTEN_NAME_MARKS.test(str) ? 0 : str.length;
|
|
4534
|
+
let p = str.indexOf("=", 1);
|
|
4535
|
+
while (p > 0) {
|
|
4536
|
+
if (p >= frontier) {
|
|
4537
|
+
let secret = judged[p] === JUDGED_SECRET;
|
|
4538
|
+
if (!judged[p]) {
|
|
4539
|
+
const n = query_name_from(str, p);
|
|
4540
|
+
secret = n < p && secret_name_check(str, n, p, true, true);
|
|
4541
|
+
}
|
|
4542
|
+
if (secret) frontier = mark_query_value(str, p, marks);
|
|
4543
|
+
}
|
|
4544
|
+
if (p >= frontier_written && written_name_is_secret(str, p)) frontier_written = mark_query_value(str, p, marks);
|
|
4545
|
+
p = str.indexOf("=", p + 1);
|
|
4546
|
+
}
|
|
4547
|
+
}
|
|
4548
|
+
var URL_AUTHORITY_STOPS = stop_table("/?#\"'<> ");
|
|
4549
|
+
function mark_url_passwords(str, marks) {
|
|
4550
|
+
let p = str.indexOf("://", 1);
|
|
4551
|
+
while (p > 0) {
|
|
4552
|
+
let next = p + 1;
|
|
4553
|
+
if (is_ascii_alnum_code(str.charCodeAt(p - 1))) {
|
|
4554
|
+
let colon = -1;
|
|
4555
|
+
let at = -1;
|
|
4556
|
+
let e = p + 3;
|
|
4557
|
+
while (e < str.length) {
|
|
4558
|
+
const code = str.charCodeAt(e);
|
|
4559
|
+
if (code < 128 && URL_AUTHORITY_STOPS[code]) break;
|
|
4560
|
+
if (code === 64) at = e;
|
|
4561
|
+
else if (code === 58 && colon < 0) colon = e;
|
|
4562
|
+
e++;
|
|
4563
|
+
}
|
|
4564
|
+
if (colon >= 0 && at > colon) mark_range(marks, colon + 1, at);
|
|
4565
|
+
next = e - 1;
|
|
4405
4566
|
}
|
|
4567
|
+
p = str.indexOf("://", next);
|
|
4406
4568
|
}
|
|
4407
4569
|
}
|
|
4408
4570
|
function mark_shapes(str, marks) {
|
|
@@ -4463,6 +4625,7 @@ function mark_inline_secrets(str, marks) {
|
|
|
4463
4625
|
if (mark_params(str, value_is_secret, READ_NOW, marks, judged) || value_is_secret !== value_is_secret_7_26_9) mark_params(str, value_is_secret_7_26_9, READ_AS_7_26_9, marks, null);
|
|
4464
4626
|
if (has_shape_js_7_26_20(str)) mark_params(str, value_is_secret, READ_AS_GOBJ_JS_7_26_20, marks, null);
|
|
4465
4627
|
mark_query_params(str, marks, judged);
|
|
4628
|
+
mark_url_passwords(str, marks);
|
|
4466
4629
|
mark_shapes(str, marks);
|
|
4467
4630
|
mark_labels(str, marks);
|
|
4468
4631
|
}
|
|
@@ -8501,7 +8664,7 @@ function close_websocket(gobj, code = 1e3, reason = "") {
|
|
|
8501
8664
|
* show its first characters). As the C kernel shows the name of an
|
|
8502
8665
|
* event that is not public (mask_secrets_inline_capped()).
|
|
8503
8666
|
***************************************************************/
|
|
8504
|
-
var PEER_NAME_SHOWN =
|
|
8667
|
+
var PEER_NAME_SHOWN = 128;
|
|
8505
8668
|
var PEER_FRAME_SHOWN = 256;
|
|
8506
8669
|
function peer_text_shown(text, max) {
|
|
8507
8670
|
let s = String(text);
|
|
@@ -8724,7 +8887,8 @@ function ac_on_close(gobj, event, kw, src) {
|
|
|
8724
8887
|
let url = kw.url;
|
|
8725
8888
|
if (kw.ws_seq !== void 0 && kw.ws_seq !== priv.ws_seq) return 0;
|
|
8726
8889
|
set_remote_log_functions();
|
|
8727
|
-
|
|
8890
|
+
const reason_shown = peer_text_shown(kw.reason === void 0 ? "" : kw.reason, PEER_FRAME_SHOWN);
|
|
8891
|
+
if (is_traffic_tracing(gobj)) trace_msg(`${gobj_short_name(gobj)}: WebSocket closed ${url} (Code: ${kw.code}, Reason: "${reason_shown}", Clean: ${kw.was_clean})`);
|
|
8728
8892
|
if (priv.websocket) {
|
|
8729
8893
|
priv.websocket.onopen = null;
|
|
8730
8894
|
priv.websocket.onmessage = null;
|
|
@@ -8734,21 +8898,25 @@ function ac_on_close(gobj, event, kw, src) {
|
|
|
8734
8898
|
}
|
|
8735
8899
|
if (priv.inform_on_close) {
|
|
8736
8900
|
priv.inform_on_close = false;
|
|
8901
|
+
if ((!kw.was_clean || kw.code !== 1e3 && kw.code !== 1001) && gobj_is_running(gobj)) log_warning(`${gobj_short_name(gobj)}: session closed ${url} (Code: ${kw.code}, Reason: "${reason_shown}", Clean: ${kw.was_clean})`);
|
|
8737
8902
|
gobj_publish_event(gobj, "EV_ON_CLOSE", {
|
|
8738
8903
|
url,
|
|
8739
8904
|
remote_yuno_name: priv.remote_yuno_name,
|
|
8740
8905
|
remote_yuno_role: priv.remote_yuno_role,
|
|
8741
|
-
remote_yuno_service: priv.remote_yuno_service
|
|
8906
|
+
remote_yuno_service: priv.remote_yuno_service,
|
|
8907
|
+
code: kw.code,
|
|
8908
|
+
reason: reason_shown,
|
|
8909
|
+
was_clean: kw.was_clean
|
|
8742
8910
|
});
|
|
8743
8911
|
} else if (!gobj_is_running(gobj)) {} else {
|
|
8744
|
-
log_warning(`${gobj_short_name(gobj)}: EV_ON_OPEN_ERROR cannot open ${url} (Code: ${kw.code}, Reason: "${
|
|
8912
|
+
log_warning(`${gobj_short_name(gobj)}: EV_ON_OPEN_ERROR cannot open ${url} (Code: ${kw.code}, Reason: "${reason_shown}", Clean: ${kw.was_clean})`);
|
|
8745
8913
|
gobj_publish_event(gobj, "EV_ON_OPEN_ERROR", {
|
|
8746
8914
|
url,
|
|
8747
8915
|
remote_yuno_name: priv.remote_yuno_name,
|
|
8748
8916
|
remote_yuno_role: priv.remote_yuno_role,
|
|
8749
8917
|
remote_yuno_service: priv.remote_yuno_service,
|
|
8750
8918
|
code: kw.code,
|
|
8751
|
-
reason:
|
|
8919
|
+
reason: reason_shown,
|
|
8752
8920
|
was_clean: kw.was_clean
|
|
8753
8921
|
});
|
|
8754
8922
|
}
|
|
@@ -8857,9 +9025,9 @@ function ac_on_message(gobj, event, kw, src) {
|
|
|
8857
9025
|
let iev_event = iev_msg.event;
|
|
8858
9026
|
let iev_kw = iev_msg.kw;
|
|
8859
9027
|
if (gobj_current_state(gobj) !== "ST_SESSION") {
|
|
8860
|
-
if (
|
|
8861
|
-
if (!(gobj_send_event(gobj,
|
|
8862
|
-
} else
|
|
9028
|
+
if (String(iev_event).toLowerCase() === "ev_identity_card_ack") {
|
|
9029
|
+
if (!(gobj_send_event(gobj, "EV_IDENTITY_CARD_ACK", iev_kw, gobj) < 0)) return 0;
|
|
9030
|
+
} else log_warning(`${gobj_short_name(gobj)}: event UNKNOWN in not-session state ${peer_text_shown(iev_event, PEER_NAME_SHOWN)}`);
|
|
8863
9031
|
close_websocket(gobj);
|
|
8864
9032
|
return -1;
|
|
8865
9033
|
}
|
|
@@ -8867,9 +9035,16 @@ function ac_on_message(gobj, event, kw, src) {
|
|
|
8867
9035
|
let msg_type = msg_iev_get_msg_type(gobj, iev_kw);
|
|
8868
9036
|
let event_id = msg_iev_get_stack(gobj, iev_kw, IEVENT_STACK_ID);
|
|
8869
9037
|
let iev_dst_role = kw_get_str(gobj, event_id, "dst_role", "");
|
|
8870
|
-
if (iev_dst_role.toLowerCase() !== gobj_yuno_role().toLowerCase()) {
|
|
8871
|
-
|
|
8872
|
-
|
|
9038
|
+
if (!empty_string(iev_dst_role) && iev_dst_role.toLowerCase() !== String(gobj_yuno_role()).toLowerCase()) {
|
|
9039
|
+
log_warning(`${gobj_short_name(gobj)}: It's not my role, dst_role: ${peer_text_shown(iev_dst_role, PEER_NAME_SHOWN)}, my_role: ${gobj_yuno_role()}, event: ${peer_text_shown(iev_event, PEER_NAME_SHOWN)}`);
|
|
9040
|
+
close_websocket(gobj);
|
|
9041
|
+
return -1;
|
|
9042
|
+
}
|
|
9043
|
+
let iev_dst_yuno = kw_get_str(gobj, event_id, "dst_yuno", "");
|
|
9044
|
+
if (!empty_string(iev_dst_yuno) && iev_dst_yuno.toLowerCase() !== String(gobj_yuno_name()).toLowerCase()) {
|
|
9045
|
+
log_warning(`${gobj_short_name(gobj)}: It's not my name, dst_yuno: ${peer_text_shown(iev_dst_yuno, PEER_NAME_SHOWN)}, my_name: ${gobj_yuno_name()}, event: ${peer_text_shown(iev_event, PEER_NAME_SHOWN)}`);
|
|
9046
|
+
close_websocket(gobj);
|
|
9047
|
+
return -1;
|
|
8873
9048
|
}
|
|
8874
9049
|
let iev_dst_service = kw_get_str(gobj, event_id, "dst_service", "");
|
|
8875
9050
|
if (msg_type === "__subscribing__") {
|
|
@@ -8891,13 +9066,18 @@ function ac_on_message(gobj, event, kw, src) {
|
|
|
8891
9066
|
return 0;
|
|
8892
9067
|
}
|
|
8893
9068
|
if (!gobj_has_event(gobj_service, iev_event, event_flag_t.EVF_PUBLIC_EVENT)) {
|
|
8894
|
-
|
|
9069
|
+
log_warning(`${gobj_short_name(gobj)}: Service found but no event or not public, DROPPED: service '${gobj_short_name(gobj_service)}', ev '${peer_text_shown(iev_event, PEER_NAME_SHOWN)}'`);
|
|
8895
9070
|
return -1;
|
|
8896
9071
|
}
|
|
8897
9072
|
gobj_send_event(gobj_service, iev_event, iev_kw, gobj);
|
|
8898
9073
|
return 0;
|
|
8899
9074
|
}
|
|
8900
|
-
|
|
9075
|
+
let event_type = gobj_find_event_type(iev_event, 0, false);
|
|
9076
|
+
if (!event_type) {
|
|
9077
|
+
log_warning(`${gobj_short_name(gobj)}: event that no gclass declares, DROPPED: ev '${peer_text_shown(iev_event, PEER_NAME_SHOWN)}'`);
|
|
9078
|
+
return -1;
|
|
9079
|
+
}
|
|
9080
|
+
gobj_publish_event(gobj, event_type.event_name, iev_kw);
|
|
8901
9081
|
return 0;
|
|
8902
9082
|
}
|
|
8903
9083
|
/***************************************************************************
|
|
@@ -9036,6 +9216,6 @@ function register_c_ievent_cli() {
|
|
|
9036
9216
|
return create_gclass(GCLASS_NAME);
|
|
9037
9217
|
}
|
|
9038
9218
|
//#endregion
|
|
9039
|
-
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_parameter_from_json, command_parameter_from_text, 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_json, empty_string, escapeHtml, event_flag_t, flat2json, flat_apply, flat_diff, flat_key_join, flat_key_split, 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_deliver_posted_events, 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_get_gclass_trace_level, gobj_get_gclass_trace_level2, gobj_get_gclass_trace_no_level, gobj_get_global_trace_level, gobj_get_global_trace_no_level, gobj_global_trace_level, gobj_global_trace_no_level, 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_posted_events_size, 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_repr_global_trace_levels, gobj_reset_volatil_attrs, gobj_save_persistent_attrs, gobj_search_path, gobj_send_event, gobj_services, gobj_set_bottom_gobj, gobj_set_deep_trace, gobj_set_gclass_no_trace, gobj_set_gclass_trace, gobj_set_global_no_trace, gobj_set_global_no_trace2, gobj_set_global_trace, gobj_set_global_trace2, gobj_set_gobj_no_trace, gobj_set_gobj_trace, 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_level, gobj_trace_machine_format, gobj_trace_no_level, 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, html_markup, id_index_in_obj_list, index_in_list, is_array, is_boolean, is_date, is_function, is_gobj, is_html_markup, is_metadata_key, is_null, is_number, is_object, is_private_key, is_pure_number, is_secret_name, is_string, jdb_delete, jdb_get, jdb_get_by_idx, jdb_get_topic, jdb_init, jdb_update, json2flat, json_array_append, json_array_append_new, json_array_extend, json_array_remove, json_array_size, json_deep_copy, json_is_identical, json_mask_secrets, 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, kwid_new_list, list2options, load_json_file, log_debug, log_error, log_info, log_warning, mask_secrets_inline, 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_console_log_filter, set_log_callback, set_remote_log_functions, set_strings_are_text, set_timeout, set_timeout_periodic, sprintf, stats_parser, str_in_list, strcasecmp, strcmp, strings_are_text, strncmp, strs_in_list, strstr, template_get_field_desc, timeTracker, trace_json, trace_json_masked, trace_level_t, trace_msg, treedb_decoder_fkey, treedb_decoder_hook, treedb_encoder_fkey, treedb_get_field_desc, treedb_hook_data_size, vsprintf, walk_type_t };
|
|
9219
|
+
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_parameter_from_json, command_parameter_from_text, 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_json, empty_string, escapeHtml, event_flag_t, flat2json, flat_apply, flat_diff, flat_key_join, flat_key_split, 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_deliver_posted_events, gobj_destroy, gobj_find_child, gobj_find_event_type, gobj_find_gobj, gobj_find_service, gobj_find_subscribings, gobj_find_subscriptions, gobj_flag_t, gobj_full_name, gobj_gclass_name, gobj_get_gclass_trace_level, gobj_get_gclass_trace_level2, gobj_get_gclass_trace_no_level, gobj_get_global_trace_level, gobj_get_global_trace_no_level, gobj_global_trace_level, gobj_global_trace_no_level, 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_posted_events_size, 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_repr_global_trace_levels, gobj_reset_volatil_attrs, gobj_save_persistent_attrs, gobj_search_path, gobj_send_event, gobj_services, gobj_set_bottom_gobj, gobj_set_deep_trace, gobj_set_gclass_no_trace, gobj_set_gclass_trace, gobj_set_global_no_trace, gobj_set_global_no_trace2, gobj_set_global_trace, gobj_set_global_trace2, gobj_set_gobj_no_trace, gobj_set_gobj_trace, 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_level, gobj_trace_machine_format, gobj_trace_no_level, 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, html_markup, id_index_in_obj_list, index_in_list, is_array, is_boolean, is_date, is_function, is_gobj, is_html_markup, is_metadata_key, is_null, is_number, is_object, is_private_key, is_pure_number, is_secret_name, is_string, jdb_delete, jdb_get, jdb_get_by_idx, jdb_get_topic, jdb_init, jdb_update, json2flat, json_array_append, json_array_append_new, json_array_extend, json_array_remove, json_array_size, json_deep_copy, json_is_identical, json_mask_secrets, 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, kwid_new_list, list2options, load_json_file, log_debug, log_error, log_info, log_warning, mask_secrets_inline, 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_console_log_filter, set_log_callback, set_remote_log_functions, set_strings_are_text, set_timeout, set_timeout_periodic, sprintf, stats_parser, str_in_list, strcasecmp, strcmp, strings_are_text, strncmp, strs_in_list, strstr, template_get_field_desc, timeTracker, trace_json, trace_json_masked, trace_level_t, trace_msg, treedb_decoder_fkey, treedb_decoder_hook, treedb_encoder_fkey, treedb_get_field_desc, treedb_hook_data_size, vsprintf, walk_type_t };
|
|
9040
9220
|
|
|
9041
9221
|
//# sourceMappingURL=gobj-js.es.js.map
|