@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.iife.js
CHANGED
|
@@ -867,6 +867,75 @@ var gobjJs = (function(exports) {
|
|
|
867
867
|
var INT64_MIN = -(2n ** 63n);
|
|
868
868
|
var INT64_MAX = 2n ** 63n - 1n;
|
|
869
869
|
var REFUSED_TEXT = "a text that does not read as one";
|
|
870
|
+
var JSON_NUMBER_TOKEN = /-?(0|[1-9][0-9]*)(\.[0-9]+)?([eE][+-]?[0-9]+)?/y;
|
|
871
|
+
function is_surrogate_pair(high, low) {
|
|
872
|
+
return high >= 55296 && high <= 56319 && low >= 56320 && low <= 57343;
|
|
873
|
+
}
|
|
874
|
+
function json_text_refused_by_c(s) {
|
|
875
|
+
const n = s.length;
|
|
876
|
+
let i = 0;
|
|
877
|
+
while (i < n) {
|
|
878
|
+
const c = s.charCodeAt(i);
|
|
879
|
+
if (c === 34) {
|
|
880
|
+
i++;
|
|
881
|
+
while (i < n) {
|
|
882
|
+
const d = s.charCodeAt(i);
|
|
883
|
+
if (d === 34) {
|
|
884
|
+
i++;
|
|
885
|
+
break;
|
|
886
|
+
}
|
|
887
|
+
if (d === 92 && s[i + 1] === "u") {
|
|
888
|
+
const u = parseInt(s.substring(i + 2, i + 6), 16);
|
|
889
|
+
if (u === 0) return true;
|
|
890
|
+
if (u >= 55296 && u <= 57343) {
|
|
891
|
+
if (!is_surrogate_pair(u, s[i + 6] === "\\" && s[i + 7] === "u" ? parseInt(s.substring(i + 8, i + 12), 16) : -1)) return true;
|
|
892
|
+
i += 12;
|
|
893
|
+
continue;
|
|
894
|
+
}
|
|
895
|
+
i += 6;
|
|
896
|
+
continue;
|
|
897
|
+
}
|
|
898
|
+
if (d === 92) {
|
|
899
|
+
i += 2;
|
|
900
|
+
continue;
|
|
901
|
+
}
|
|
902
|
+
if (d >= 55296 && d <= 57343) {
|
|
903
|
+
if (!is_surrogate_pair(d, s.charCodeAt(i + 1))) return true;
|
|
904
|
+
i += 2;
|
|
905
|
+
continue;
|
|
906
|
+
}
|
|
907
|
+
i++;
|
|
908
|
+
}
|
|
909
|
+
continue;
|
|
910
|
+
}
|
|
911
|
+
if (c === 45 || c >= 48 && c <= 57) {
|
|
912
|
+
JSON_NUMBER_TOKEN.lastIndex = i;
|
|
913
|
+
const m = JSON_NUMBER_TOKEN.exec(s);
|
|
914
|
+
if (!m) return true;
|
|
915
|
+
const token = m[0];
|
|
916
|
+
if (/[.eE]/.test(token)) {
|
|
917
|
+
if (!Number.isFinite(Number(token))) return true;
|
|
918
|
+
} else {
|
|
919
|
+
const big = BigInt(token);
|
|
920
|
+
if (big < INT64_MIN || big > INT64_MAX) return true;
|
|
921
|
+
}
|
|
922
|
+
i += token.length;
|
|
923
|
+
continue;
|
|
924
|
+
}
|
|
925
|
+
i++;
|
|
926
|
+
}
|
|
927
|
+
return false;
|
|
928
|
+
}
|
|
929
|
+
function parse_json_text_as_c(s) {
|
|
930
|
+
let jn;
|
|
931
|
+
try {
|
|
932
|
+
jn = JSON.parse(s);
|
|
933
|
+
} catch (e) {
|
|
934
|
+
return;
|
|
935
|
+
}
|
|
936
|
+
if (json_text_refused_by_c(s)) return;
|
|
937
|
+
return jn;
|
|
938
|
+
}
|
|
870
939
|
function value_has_shape(type, value) {
|
|
871
940
|
if (DTP_IS_STRING(type)) return is_string(value);
|
|
872
941
|
if (DTP_IS_DICT(type)) return is_object(value);
|
|
@@ -970,16 +1039,8 @@ var gobjJs = (function(exports) {
|
|
|
970
1039
|
};
|
|
971
1040
|
}
|
|
972
1041
|
if (DTP_IS_DICT(type) || DTP_IS_LIST(type)) {
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
jn = JSON.parse(s);
|
|
976
|
-
} catch (e) {
|
|
977
|
-
return {
|
|
978
|
-
value: void 0,
|
|
979
|
-
refused: REFUSED_TEXT
|
|
980
|
-
};
|
|
981
|
-
}
|
|
982
|
-
if (!value_has_shape(type, jn)) return {
|
|
1042
|
+
const jn = parse_json_text_as_c(s);
|
|
1043
|
+
if (jn === void 0 || !value_has_shape(type, jn)) return {
|
|
983
1044
|
value: void 0,
|
|
984
1045
|
refused: REFUSED_TEXT
|
|
985
1046
|
};
|
|
@@ -988,12 +1049,12 @@ var gobjJs = (function(exports) {
|
|
|
988
1049
|
refused: null
|
|
989
1050
|
};
|
|
990
1051
|
}
|
|
991
|
-
if (DTP_IS_JSON(type))
|
|
992
|
-
|
|
993
|
-
|
|
1052
|
+
if (DTP_IS_JSON(type)) {
|
|
1053
|
+
const jn = parse_json_text_as_c(s);
|
|
1054
|
+
if (jn !== void 0) return {
|
|
1055
|
+
value: jn,
|
|
994
1056
|
refused: null
|
|
995
1057
|
};
|
|
996
|
-
} catch (e) {
|
|
997
1058
|
const t = s.replace(/^[ \t]+/, "");
|
|
998
1059
|
if (t.startsWith("{") || t.startsWith("[") || t.startsWith("\"")) return {
|
|
999
1060
|
value: void 0,
|
|
@@ -1086,8 +1147,18 @@ var gobjJs = (function(exports) {
|
|
|
1086
1147
|
data_type_t.DTP_LIST,
|
|
1087
1148
|
data_type_t.DTP_DICT
|
|
1088
1149
|
];
|
|
1150
|
+
var NO_JSON_TEXT = "a value with no json text";
|
|
1151
|
+
function json_text_of(value) {
|
|
1152
|
+
try {
|
|
1153
|
+
const s = JSON.stringify(value);
|
|
1154
|
+
return is_string(s) ? s : void 0;
|
|
1155
|
+
} catch (e) {
|
|
1156
|
+
return;
|
|
1157
|
+
}
|
|
1158
|
+
}
|
|
1089
1159
|
function log_attr_value_refused(gobj, it, value, refused) {
|
|
1090
1160
|
const types = {
|
|
1161
|
+
[data_type_t.DTP_STRING]: "a string",
|
|
1091
1162
|
[data_type_t.DTP_BOOLEAN]: "a boolean",
|
|
1092
1163
|
[data_type_t.DTP_INTEGER]: "an integer",
|
|
1093
1164
|
[data_type_t.DTP_REAL]: "a real",
|
|
@@ -1097,7 +1168,8 @@ var gobjJs = (function(exports) {
|
|
|
1097
1168
|
let shown;
|
|
1098
1169
|
if (it.flag & sdata_flag_t.SDF_SECRET) shown = "********";
|
|
1099
1170
|
else {
|
|
1100
|
-
shown = is_string(value) ? value :
|
|
1171
|
+
shown = is_string(value) ? value : json_text_of(value === void 0 ? null : value);
|
|
1172
|
+
if (shown === void 0) shown = `<${NO_JSON_TEXT}>`;
|
|
1101
1173
|
const masked = mask_secrets_inline(shown);
|
|
1102
1174
|
if (masked !== null) shown = masked;
|
|
1103
1175
|
if (shown.length > ATTR_VALUE_SHOWN) {
|
|
@@ -1119,8 +1191,11 @@ var gobjJs = (function(exports) {
|
|
|
1119
1191
|
if (jn_value_ === null || jn_value_ === void 0) jn_value2 = "";
|
|
1120
1192
|
else if (is_string(jn_value_)) jn_value2 = String(jn_value_);
|
|
1121
1193
|
else {
|
|
1122
|
-
|
|
1123
|
-
if (
|
|
1194
|
+
jn_value2 = json_text_of(jn_value_);
|
|
1195
|
+
if (jn_value2 === void 0) {
|
|
1196
|
+
log_attr_value_refused(gobj, it, jn_value_, NO_JSON_TEXT);
|
|
1197
|
+
return -1;
|
|
1198
|
+
}
|
|
1124
1199
|
}
|
|
1125
1200
|
break;
|
|
1126
1201
|
case data_type_t.DTP_BOOLEAN:
|
|
@@ -2568,15 +2643,20 @@ var gobjJs = (function(exports) {
|
|
|
2568
2643
|
* The value a typed writer writes, read as ITS type by the grammar of
|
|
2569
2644
|
* json2item() (a C writer takes its C type: a string is never read as a
|
|
2570
2645
|
* number there). Return {value} or {refused} (logged): the attr keeps its
|
|
2571
|
-
* value. A string writer
|
|
2572
|
-
*
|
|
2646
|
+
* value. A string writer takes null and undefined as "", any other json
|
|
2647
|
+
* as its text, as a DTP_STRING attr reads them; it refuses only a value
|
|
2648
|
+
* with no json text (circular, a BigInt).
|
|
2573
2649
|
***************************************************************************/
|
|
2574
2650
|
function typed_writer_value(gobj, name, type, value) {
|
|
2651
|
+
let r;
|
|
2575
2652
|
if (DTP_IS_STRING(type)) {
|
|
2576
2653
|
if (value === null || value === void 0) return { value: "" };
|
|
2577
|
-
|
|
2578
|
-
|
|
2579
|
-
|
|
2654
|
+
if (is_string(value)) return { value };
|
|
2655
|
+
r = {
|
|
2656
|
+
value: json_text_of(value),
|
|
2657
|
+
refused: NO_JSON_TEXT
|
|
2658
|
+
};
|
|
2659
|
+
} else r = command_parameter_from_json(type, value);
|
|
2580
2660
|
if (r.value === void 0) {
|
|
2581
2661
|
let holder = gobj;
|
|
2582
2662
|
while (holder && !gobj_has_attr(holder, name)) holder = holder.bottom_gobj;
|
|
@@ -3021,9 +3101,9 @@ var gobjJs = (function(exports) {
|
|
|
3021
3101
|
}
|
|
3022
3102
|
}
|
|
3023
3103
|
const frame = push_dispatch_frame(dst, event, frame_kind_t.FRAME_ACTION);
|
|
3024
|
-
if (event_action.next_state) gobj_change_state(dst, event_action.next_state);
|
|
3025
3104
|
let ret = -1;
|
|
3026
3105
|
try {
|
|
3106
|
+
if (event_action.next_state) gobj_change_state(dst, event_action.next_state);
|
|
3027
3107
|
if (event_action.action) ret = event_action.action(dst, event, kw, src);
|
|
3028
3108
|
} catch (e) {
|
|
3029
3109
|
__inside__--;
|
|
@@ -3047,18 +3127,23 @@ var gobjJs = (function(exports) {
|
|
|
3047
3127
|
__own_event__: 4
|
|
3048
3128
|
});
|
|
3049
3129
|
/***************************************************************************
|
|
3050
|
-
* The event type of `event_name` in any registered gclass
|
|
3051
|
-
*
|
|
3130
|
+
* The event type of `event_name` in any registered gclass whose flags
|
|
3131
|
+
* hold one of `event_flag` (0: any), null if none. The C kernel's
|
|
3132
|
+
* gobj_find_event_type(): any case, gclasses only. With `verbose` a miss
|
|
3133
|
+
* is logged, with the name as it was given: never verbose for a name
|
|
3134
|
+
* that came from a peer.
|
|
3052
3135
|
***************************************************************************/
|
|
3053
|
-
function
|
|
3136
|
+
function gobj_find_event_type(event_name, event_flag, verbose) {
|
|
3054
3137
|
let lower = String(event_name).toLowerCase();
|
|
3055
3138
|
for (let gclass_name in _gclass_register) {
|
|
3056
3139
|
let dl = _gclass_register[gclass_name].dl_events;
|
|
3057
3140
|
for (let i = 0; i < dl.length; i++) {
|
|
3058
3141
|
let event_type = dl[i];
|
|
3142
|
+
if (event_flag && !(event_type.event_flag & event_flag)) continue;
|
|
3059
3143
|
if (event_type.event_name && event_type.event_name.toLowerCase() === lower) return event_type;
|
|
3060
3144
|
}
|
|
3061
3145
|
}
|
|
3146
|
+
if (verbose) log_error(`EVENT NOT FOUND: ${event_name}`);
|
|
3062
3147
|
return null;
|
|
3063
3148
|
}
|
|
3064
3149
|
var subscription_desc = [
|
|
@@ -3095,7 +3180,7 @@ var gobjJs = (function(exports) {
|
|
|
3095
3180
|
json_object_set_new(subs, "__config__", kw_clone);
|
|
3096
3181
|
let renamed_event = kw_get_str(publisher, kw_clone, "__rename_event_name__", "");
|
|
3097
3182
|
if (!empty_string(renamed_event)) {
|
|
3098
|
-
let event_type =
|
|
3183
|
+
let event_type = gobj_find_event_type(renamed_event, 0, false);
|
|
3099
3184
|
if (event_type) {
|
|
3100
3185
|
json_object_set_new(subs, "renamed_event", event_type.event_name);
|
|
3101
3186
|
delete kw_clone.__rename_event_name__;
|
|
@@ -3156,7 +3241,7 @@ var gobjJs = (function(exports) {
|
|
|
3156
3241
|
kw_match.__config__ = config_match;
|
|
3157
3242
|
let renamed_event = "";
|
|
3158
3243
|
let rename = config_match.__rename_event_name__;
|
|
3159
|
-
let event_type = typeof rename === "string" && !empty_string(rename) ?
|
|
3244
|
+
let event_type = typeof rename === "string" && !empty_string(rename) ? gobj_find_event_type(rename, 0, false) : null;
|
|
3160
3245
|
if (event_type) {
|
|
3161
3246
|
renamed_event = event_type.event_name;
|
|
3162
3247
|
delete config_match.__rename_event_name__;
|
|
@@ -4320,12 +4405,13 @@ var gobjJs = (function(exports) {
|
|
|
4320
4405
|
const name_from = word;
|
|
4321
4406
|
word = p + 1;
|
|
4322
4407
|
const secret = is_secret_name_tail(str, name_from, p, names);
|
|
4323
|
-
if (secret && names === NAMES_NOW && !is_secret_name_tail(str, name_from, p, NAMES_7_26_9)) not_7_26_9 = true;
|
|
4408
|
+
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;
|
|
4324
4409
|
if (!(secret || value_is_secret && p - name_from === 5 && ascii_case_equal(str, name_from, "value"))) {
|
|
4325
|
-
if (judged && query_name_from(str, p) === name_from) judged[p] =
|
|
4410
|
+
if (judged && query_name_from(str, p) === name_from) judged[p] = JUDGED_NOT_SECRET;
|
|
4326
4411
|
p++;
|
|
4327
4412
|
continue;
|
|
4328
4413
|
}
|
|
4414
|
+
if (judged && secret && query_name_from(str, p) === name_from) judged[p] = JUDGED_SECRET;
|
|
4329
4415
|
p++;
|
|
4330
4416
|
let end;
|
|
4331
4417
|
const quote = p < str.length && (str[p] === "\"" || str[p] === "'") ? str[p] : "";
|
|
@@ -4388,23 +4474,99 @@ var gobjJs = (function(exports) {
|
|
|
4388
4474
|
while (n > 0 && eq - n < MASK_MAX_NAME && is_name_char_code(str.charCodeAt(n - 1))) n--;
|
|
4389
4475
|
return n;
|
|
4390
4476
|
}
|
|
4477
|
+
var JUDGED_NOT_SECRET = 1;
|
|
4478
|
+
var JUDGED_SECRET = 2;
|
|
4479
|
+
function hex_digit_value(code) {
|
|
4480
|
+
if (code >= 48 && code <= 57) return code - 48;
|
|
4481
|
+
if (code >= 97 && code <= 102) return code - 87;
|
|
4482
|
+
if (code >= 65 && code <= 70) return code - 55;
|
|
4483
|
+
return -1;
|
|
4484
|
+
}
|
|
4485
|
+
function is_written_name_bracket_code(code) {
|
|
4486
|
+
return code === 91 || code === 93 || code === 39 || code === 34;
|
|
4487
|
+
}
|
|
4488
|
+
function is_written_name_code(code) {
|
|
4489
|
+
return is_name_char_code(code) || code === 37 || is_written_name_bracket_code(code);
|
|
4490
|
+
}
|
|
4491
|
+
function written_name_is_secret(str, eq) {
|
|
4492
|
+
let n = eq;
|
|
4493
|
+
let plain = -1;
|
|
4494
|
+
while (n > 0 && eq - n < MASK_MAX_NAME && is_written_name_code(str.charCodeAt(n - 1))) {
|
|
4495
|
+
n--;
|
|
4496
|
+
if (plain < 0 && !is_name_char_code(str.charCodeAt(n))) plain = n + 1;
|
|
4497
|
+
}
|
|
4498
|
+
if (plain < 0) return false;
|
|
4499
|
+
const to = str.charCodeAt(plain - 1) === 37 ? eq : plain - 1;
|
|
4500
|
+
let encoded = false;
|
|
4501
|
+
for (let s = n; s < to && !encoded; s++) encoded = str.charCodeAt(s) === 37;
|
|
4502
|
+
let name = str;
|
|
4503
|
+
let from = n;
|
|
4504
|
+
let end = to;
|
|
4505
|
+
if (encoded) {
|
|
4506
|
+
name = "";
|
|
4507
|
+
for (let s = n; s < to; s++) {
|
|
4508
|
+
const hi = str.charCodeAt(s) === 37 && to - s > 2 ? hex_digit_value(str.charCodeAt(s + 1)) : -1;
|
|
4509
|
+
const lo = hi >= 0 ? hex_digit_value(str.charCodeAt(s + 2)) : -1;
|
|
4510
|
+
if (lo >= 0) {
|
|
4511
|
+
name += String.fromCharCode(hi * 16 + lo);
|
|
4512
|
+
s += 2;
|
|
4513
|
+
} else name += str[s];
|
|
4514
|
+
}
|
|
4515
|
+
from = 0;
|
|
4516
|
+
end = name.length;
|
|
4517
|
+
}
|
|
4518
|
+
let seg = from;
|
|
4519
|
+
for (let i = from; i <= end; i++) {
|
|
4520
|
+
if (i < end && !is_written_name_bracket_code(name.charCodeAt(i))) continue;
|
|
4521
|
+
if (i - seg >= 3 && secret_name_check(name, seg, i, true, true)) return true;
|
|
4522
|
+
seg = i + 1;
|
|
4523
|
+
}
|
|
4524
|
+
return false;
|
|
4525
|
+
}
|
|
4526
|
+
function mark_query_value(str, eq, marks) {
|
|
4527
|
+
const v = eq + 1;
|
|
4528
|
+
if (v < str.length && (str[v] === "\"" || str[v] === "'")) return mark_run(str, v + 1, QUOTE_STOPS[str[v]], marks);
|
|
4529
|
+
mark_scheme_value(str, v, PARAM_VALUE_STOPS, marks);
|
|
4530
|
+
return mark_run(str, v, PARAM_VALUE_STOPS, marks);
|
|
4531
|
+
}
|
|
4532
|
+
var WRITTEN_NAME_MARKS = /[[\]%'"]/;
|
|
4391
4533
|
function mark_query_params(str, marks, judged) {
|
|
4392
4534
|
let frontier = 0;
|
|
4393
|
-
|
|
4394
|
-
|
|
4395
|
-
|
|
4396
|
-
|
|
4397
|
-
|
|
4398
|
-
|
|
4399
|
-
|
|
4400
|
-
|
|
4401
|
-
|
|
4402
|
-
|
|
4403
|
-
|
|
4404
|
-
|
|
4405
|
-
|
|
4406
|
-
|
|
4535
|
+
let frontier_written = WRITTEN_NAME_MARKS.test(str) ? 0 : str.length;
|
|
4536
|
+
let p = str.indexOf("=", 1);
|
|
4537
|
+
while (p > 0) {
|
|
4538
|
+
if (p >= frontier) {
|
|
4539
|
+
let secret = judged[p] === JUDGED_SECRET;
|
|
4540
|
+
if (!judged[p]) {
|
|
4541
|
+
const n = query_name_from(str, p);
|
|
4542
|
+
secret = n < p && secret_name_check(str, n, p, true, true);
|
|
4543
|
+
}
|
|
4544
|
+
if (secret) frontier = mark_query_value(str, p, marks);
|
|
4545
|
+
}
|
|
4546
|
+
if (p >= frontier_written && written_name_is_secret(str, p)) frontier_written = mark_query_value(str, p, marks);
|
|
4547
|
+
p = str.indexOf("=", p + 1);
|
|
4548
|
+
}
|
|
4549
|
+
}
|
|
4550
|
+
var URL_AUTHORITY_STOPS = stop_table("/?#\"'<> ");
|
|
4551
|
+
function mark_url_passwords(str, marks) {
|
|
4552
|
+
let p = str.indexOf("://", 1);
|
|
4553
|
+
while (p > 0) {
|
|
4554
|
+
let next = p + 1;
|
|
4555
|
+
if (is_ascii_alnum_code(str.charCodeAt(p - 1))) {
|
|
4556
|
+
let colon = -1;
|
|
4557
|
+
let at = -1;
|
|
4558
|
+
let e = p + 3;
|
|
4559
|
+
while (e < str.length) {
|
|
4560
|
+
const code = str.charCodeAt(e);
|
|
4561
|
+
if (code < 128 && URL_AUTHORITY_STOPS[code]) break;
|
|
4562
|
+
if (code === 64) at = e;
|
|
4563
|
+
else if (code === 58 && colon < 0) colon = e;
|
|
4564
|
+
e++;
|
|
4565
|
+
}
|
|
4566
|
+
if (colon >= 0 && at > colon) mark_range(marks, colon + 1, at);
|
|
4567
|
+
next = e - 1;
|
|
4407
4568
|
}
|
|
4569
|
+
p = str.indexOf("://", next);
|
|
4408
4570
|
}
|
|
4409
4571
|
}
|
|
4410
4572
|
function mark_shapes(str, marks) {
|
|
@@ -4465,6 +4627,7 @@ var gobjJs = (function(exports) {
|
|
|
4465
4627
|
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);
|
|
4466
4628
|
if (has_shape_js_7_26_20(str)) mark_params(str, value_is_secret, READ_AS_GOBJ_JS_7_26_20, marks, null);
|
|
4467
4629
|
mark_query_params(str, marks, judged);
|
|
4630
|
+
mark_url_passwords(str, marks);
|
|
4468
4631
|
mark_shapes(str, marks);
|
|
4469
4632
|
mark_labels(str, marks);
|
|
4470
4633
|
}
|
|
@@ -8503,7 +8666,7 @@ var gobjJs = (function(exports) {
|
|
|
8503
8666
|
* show its first characters). As the C kernel shows the name of an
|
|
8504
8667
|
* event that is not public (mask_secrets_inline_capped()).
|
|
8505
8668
|
***************************************************************/
|
|
8506
|
-
var PEER_NAME_SHOWN =
|
|
8669
|
+
var PEER_NAME_SHOWN = 128;
|
|
8507
8670
|
var PEER_FRAME_SHOWN = 256;
|
|
8508
8671
|
function peer_text_shown(text, max) {
|
|
8509
8672
|
let s = String(text);
|
|
@@ -8726,7 +8889,8 @@ var gobjJs = (function(exports) {
|
|
|
8726
8889
|
let url = kw.url;
|
|
8727
8890
|
if (kw.ws_seq !== void 0 && kw.ws_seq !== priv.ws_seq) return 0;
|
|
8728
8891
|
set_remote_log_functions();
|
|
8729
|
-
|
|
8892
|
+
const reason_shown = peer_text_shown(kw.reason === void 0 ? "" : kw.reason, PEER_FRAME_SHOWN);
|
|
8893
|
+
if (is_traffic_tracing(gobj)) trace_msg(`${gobj_short_name(gobj)}: WebSocket closed ${url} (Code: ${kw.code}, Reason: "${reason_shown}", Clean: ${kw.was_clean})`);
|
|
8730
8894
|
if (priv.websocket) {
|
|
8731
8895
|
priv.websocket.onopen = null;
|
|
8732
8896
|
priv.websocket.onmessage = null;
|
|
@@ -8736,21 +8900,25 @@ var gobjJs = (function(exports) {
|
|
|
8736
8900
|
}
|
|
8737
8901
|
if (priv.inform_on_close) {
|
|
8738
8902
|
priv.inform_on_close = false;
|
|
8903
|
+
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})`);
|
|
8739
8904
|
gobj_publish_event(gobj, "EV_ON_CLOSE", {
|
|
8740
8905
|
url,
|
|
8741
8906
|
remote_yuno_name: priv.remote_yuno_name,
|
|
8742
8907
|
remote_yuno_role: priv.remote_yuno_role,
|
|
8743
|
-
remote_yuno_service: priv.remote_yuno_service
|
|
8908
|
+
remote_yuno_service: priv.remote_yuno_service,
|
|
8909
|
+
code: kw.code,
|
|
8910
|
+
reason: reason_shown,
|
|
8911
|
+
was_clean: kw.was_clean
|
|
8744
8912
|
});
|
|
8745
8913
|
} else if (!gobj_is_running(gobj)) {} else {
|
|
8746
|
-
log_warning(`${gobj_short_name(gobj)}: EV_ON_OPEN_ERROR cannot open ${url} (Code: ${kw.code}, Reason: "${
|
|
8914
|
+
log_warning(`${gobj_short_name(gobj)}: EV_ON_OPEN_ERROR cannot open ${url} (Code: ${kw.code}, Reason: "${reason_shown}", Clean: ${kw.was_clean})`);
|
|
8747
8915
|
gobj_publish_event(gobj, "EV_ON_OPEN_ERROR", {
|
|
8748
8916
|
url,
|
|
8749
8917
|
remote_yuno_name: priv.remote_yuno_name,
|
|
8750
8918
|
remote_yuno_role: priv.remote_yuno_role,
|
|
8751
8919
|
remote_yuno_service: priv.remote_yuno_service,
|
|
8752
8920
|
code: kw.code,
|
|
8753
|
-
reason:
|
|
8921
|
+
reason: reason_shown,
|
|
8754
8922
|
was_clean: kw.was_clean
|
|
8755
8923
|
});
|
|
8756
8924
|
}
|
|
@@ -8859,9 +9027,9 @@ var gobjJs = (function(exports) {
|
|
|
8859
9027
|
let iev_event = iev_msg.event;
|
|
8860
9028
|
let iev_kw = iev_msg.kw;
|
|
8861
9029
|
if (gobj_current_state(gobj) !== "ST_SESSION") {
|
|
8862
|
-
if (
|
|
8863
|
-
if (!(gobj_send_event(gobj,
|
|
8864
|
-
} else
|
|
9030
|
+
if (String(iev_event).toLowerCase() === "ev_identity_card_ack") {
|
|
9031
|
+
if (!(gobj_send_event(gobj, "EV_IDENTITY_CARD_ACK", iev_kw, gobj) < 0)) return 0;
|
|
9032
|
+
} else log_warning(`${gobj_short_name(gobj)}: event UNKNOWN in not-session state ${peer_text_shown(iev_event, PEER_NAME_SHOWN)}`);
|
|
8865
9033
|
close_websocket(gobj);
|
|
8866
9034
|
return -1;
|
|
8867
9035
|
}
|
|
@@ -8869,9 +9037,16 @@ var gobjJs = (function(exports) {
|
|
|
8869
9037
|
let msg_type = msg_iev_get_msg_type(gobj, iev_kw);
|
|
8870
9038
|
let event_id = msg_iev_get_stack(gobj, iev_kw, IEVENT_STACK_ID);
|
|
8871
9039
|
let iev_dst_role = kw_get_str(gobj, event_id, "dst_role", "");
|
|
8872
|
-
if (iev_dst_role.toLowerCase() !== gobj_yuno_role().toLowerCase()) {
|
|
8873
|
-
|
|
8874
|
-
|
|
9040
|
+
if (!empty_string(iev_dst_role) && iev_dst_role.toLowerCase() !== String(gobj_yuno_role()).toLowerCase()) {
|
|
9041
|
+
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)}`);
|
|
9042
|
+
close_websocket(gobj);
|
|
9043
|
+
return -1;
|
|
9044
|
+
}
|
|
9045
|
+
let iev_dst_yuno = kw_get_str(gobj, event_id, "dst_yuno", "");
|
|
9046
|
+
if (!empty_string(iev_dst_yuno) && iev_dst_yuno.toLowerCase() !== String(gobj_yuno_name()).toLowerCase()) {
|
|
9047
|
+
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)}`);
|
|
9048
|
+
close_websocket(gobj);
|
|
9049
|
+
return -1;
|
|
8875
9050
|
}
|
|
8876
9051
|
let iev_dst_service = kw_get_str(gobj, event_id, "dst_service", "");
|
|
8877
9052
|
if (msg_type === "__subscribing__") {
|
|
@@ -8893,13 +9068,18 @@ var gobjJs = (function(exports) {
|
|
|
8893
9068
|
return 0;
|
|
8894
9069
|
}
|
|
8895
9070
|
if (!gobj_has_event(gobj_service, iev_event, event_flag_t.EVF_PUBLIC_EVENT)) {
|
|
8896
|
-
|
|
9071
|
+
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)}'`);
|
|
8897
9072
|
return -1;
|
|
8898
9073
|
}
|
|
8899
9074
|
gobj_send_event(gobj_service, iev_event, iev_kw, gobj);
|
|
8900
9075
|
return 0;
|
|
8901
9076
|
}
|
|
8902
|
-
|
|
9077
|
+
let event_type = gobj_find_event_type(iev_event, 0, false);
|
|
9078
|
+
if (!event_type) {
|
|
9079
|
+
log_warning(`${gobj_short_name(gobj)}: event that no gclass declares, DROPPED: ev '${peer_text_shown(iev_event, PEER_NAME_SHOWN)}'`);
|
|
9080
|
+
return -1;
|
|
9081
|
+
}
|
|
9082
|
+
gobj_publish_event(gobj, event_type.event_name, iev_kw);
|
|
8903
9083
|
return 0;
|
|
8904
9084
|
}
|
|
8905
9085
|
/***************************************************************************
|
|
@@ -9114,6 +9294,7 @@ var gobjJs = (function(exports) {
|
|
|
9114
9294
|
exports.gobj_deliver_posted_events = gobj_deliver_posted_events;
|
|
9115
9295
|
exports.gobj_destroy = gobj_destroy;
|
|
9116
9296
|
exports.gobj_find_child = gobj_find_child;
|
|
9297
|
+
exports.gobj_find_event_type = gobj_find_event_type;
|
|
9117
9298
|
exports.gobj_find_gobj = gobj_find_gobj;
|
|
9118
9299
|
exports.gobj_find_service = gobj_find_service;
|
|
9119
9300
|
exports.gobj_find_subscribings = gobj_find_subscribings;
|