@kutrion/cli 1.2.7 → 1.2.9
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 +23 -0
- package/dist/index.js +1447 -134
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -6,6 +6,9 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
|
6
6
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
7
7
|
var __getProtoOf = Object.getPrototypeOf;
|
|
8
8
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
9
|
+
var __esm = (fn, res) => function __init() {
|
|
10
|
+
return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
|
|
11
|
+
};
|
|
9
12
|
var __commonJS = (cb, mod2) => function __require() {
|
|
10
13
|
return mod2 || (0, cb[__getOwnPropNames(cb)[0]])((mod2 = { exports: {} }).exports, mod2), mod2.exports;
|
|
11
14
|
};
|
|
@@ -26,10 +29,564 @@ var __toESM = (mod2, isNodeMode, target) => (target = mod2 != null ? __create(__
|
|
|
26
29
|
mod2
|
|
27
30
|
));
|
|
28
31
|
|
|
32
|
+
// <define:__KT_HUB_FILES__>
|
|
33
|
+
var define_KT_HUB_FILES_default;
|
|
34
|
+
var init_define_KT_HUB_FILES = __esm({
|
|
35
|
+
"<define:__KT_HUB_FILES__>"() {
|
|
36
|
+
define_KT_HUB_FILES_default = { "ensure-hub.sh": `#!/bin/sh
|
|
37
|
+
# Installs the Kutrion Hub on macOS and Linux when it is absent or older than MIN_HUB_VERSION.
|
|
38
|
+
# The Hub is fetched from the update feed, its sha512 is checked against the feed and its platform
|
|
39
|
+
# identity against hub.conf; on any mismatch nothing is installed. Nothing here ever removes the Hub.
|
|
40
|
+
#
|
|
41
|
+
# ensure-hub.sh [--first-run] [--defer] [--force] [--verify-only] [--os mac|deb|rpm]
|
|
42
|
+
# ensure-hub.sh compare A B | verify-file FILE SHA512_B64
|
|
43
|
+
#
|
|
44
|
+
# Exit: 0 present, installed or skipped by policy; 10 refused; 11 cannot install here; 12 fetch failed.
|
|
45
|
+
# Environment: KT_NO_HUB=1 skips; KT_HUB_FEED_BASE (https or file) replaces the feed;
|
|
46
|
+
# KT_HUB_ALLOW_UNSIGNED=1 accepts a build with no publisher identity; KT_HUB_APPS_DIR replaces /Applications.
|
|
47
|
+
set -u
|
|
48
|
+
|
|
49
|
+
SELF_DIR=$(cd "$(dirname "$0")" && pwd)
|
|
50
|
+
CONF=\${KT_HUB_CONF:-$SELF_DIR/hub.conf}
|
|
51
|
+
APP_ID=com.kutrion.desktop
|
|
52
|
+
PKG_NAME=kutrion
|
|
53
|
+
|
|
54
|
+
log() { printf 'ensure-hub: %s\\n' "$*"; }
|
|
55
|
+
refuse() { log "refused, nothing installed: $*"; exit 10; }
|
|
56
|
+
cannot() { log "skipped: $*"; exit 11; }
|
|
57
|
+
|
|
58
|
+
conf_get() { [ -r "$CONF" ] && sed -n "s/^$1=//p" "$CONF" | head -n 1 | tr -d '\\r'; }
|
|
59
|
+
|
|
60
|
+
# Prints -1, 0 or 1 for A against B, or x when either is not a dotted number with an optional suffix.
|
|
61
|
+
ver_cmp() {
|
|
62
|
+
awk -v a="$1" -v b="$2" '
|
|
63
|
+
function split_ver(v, out, i, p) {
|
|
64
|
+
sub(/^v/, "", v); sub(/\\+.*/, "", v)
|
|
65
|
+
i = index(v, "-"); out["pre"] = ""
|
|
66
|
+
if (i > 0) { out["pre"] = substr(v, i + 1); v = substr(v, 1, i - 1) }
|
|
67
|
+
if (v !~ /^[0-9]+(\\.[0-9]+)*$/) return 0
|
|
68
|
+
out["n"] = split(v, p, ".")
|
|
69
|
+
for (i = 1; i <= out["n"]; i++) out[i] = p[i] + 0
|
|
70
|
+
return 1
|
|
71
|
+
}
|
|
72
|
+
BEGIN {
|
|
73
|
+
if (!split_ver(a, A) || !split_ver(b, B)) { print "x"; exit }
|
|
74
|
+
n = (A["n"] > B["n"]) ? A["n"] : B["n"]
|
|
75
|
+
for (i = 1; i <= n; i++) {
|
|
76
|
+
x = (i <= A["n"]) ? A[i] : 0; y = (i <= B["n"]) ? B[i] : 0
|
|
77
|
+
if (x != y) { print (x < y) ? -1 : 1; exit }
|
|
78
|
+
}
|
|
79
|
+
if (A["pre"] == B["pre"]) print 0
|
|
80
|
+
else if (A["pre"] == "") print 1
|
|
81
|
+
else if (B["pre"] == "") print -1
|
|
82
|
+
else print (A["pre"] < B["pre"]) ? -1 : 1
|
|
83
|
+
}'
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
# base64 sha512 of a file, the form the update feed carries.
|
|
87
|
+
sha512_b64() {
|
|
88
|
+
if command -v openssl >/dev/null 2>&1; then openssl dgst -sha512 -binary "$1" | openssl base64 -A
|
|
89
|
+
elif command -v sha512sum >/dev/null 2>&1; then sha512sum "$1" | cut -d' ' -f1 | xxd -r -p | base64 | tr -d '\\n'
|
|
90
|
+
else shasum -a 512 "$1" | cut -d' ' -f1 | xxd -r -p | base64 | tr -d '\\n'; fi
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
verify_file() {
|
|
94
|
+
case "$2" in
|
|
95
|
+
[A-Za-z0-9+/]*==) [ "\${#2}" -eq 88 ] || return 10 ;;
|
|
96
|
+
*) return 10 ;;
|
|
97
|
+
esac
|
|
98
|
+
got=$(sha512_b64 "$1") || return 10
|
|
99
|
+
[ "$got" = "$2" ] || return 10
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
fetch() {
|
|
103
|
+
case "$1" in
|
|
104
|
+
file://*) command cp "\${1#file://}" "$2" 2>/dev/null ;;
|
|
105
|
+
https://*)
|
|
106
|
+
if command -v curl >/dev/null 2>&1; then curl -fsSL --proto '=https' --tlsv1.2 --retry 2 --connect-timeout 15 --max-time 900 -o "$2" "$1"
|
|
107
|
+
elif command -v wget >/dev/null 2>&1; then wget -q --https-only -O "$2" "$1"
|
|
108
|
+
else return 1; fi ;;
|
|
109
|
+
*) return 1 ;;
|
|
110
|
+
esac
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
# A feed file name is a bare name; anything with a path, scheme or whitespace could point off the feed origin.
|
|
114
|
+
bare_name() { case "$1" in ''|*/*|*\\\\*|*:*|*..*|*[[:space:]]*) return 1 ;; *) return 0 ;; esac; }
|
|
115
|
+
|
|
116
|
+
# Prints "url sha512" pairs from an electron-updater channel file.
|
|
117
|
+
feed_files() {
|
|
118
|
+
awk '
|
|
119
|
+
/^files:/ { infiles = 1; next }
|
|
120
|
+
/^[^ -]/ { infiles = 0 }
|
|
121
|
+
infiles && /^[ ]*- url:/ { sub(/^[ ]*- url:[ ]*/, ""); gsub(/["\\047\\r]/, ""); u = $0; next }
|
|
122
|
+
infiles && /^[ ]+sha512:/ { sub(/^[ ]+sha512:[ ]*/, ""); gsub(/["\\047\\r]/, ""); if (u != "") print u, $0; u = "" }
|
|
123
|
+
' "$1"
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
feed_version() { sed -n 's/^version:[ ]*//p' "$1" | head -n 1 | tr -d "\\"'\\r"; }
|
|
127
|
+
|
|
128
|
+
pick_artifact() { # FEEDFILE KIND -> "url sha512"
|
|
129
|
+
m=$(uname -m)
|
|
130
|
+
case "$2" in
|
|
131
|
+
mac) case "$m" in arm64|aarch64) pat='-arm64.*\\.dmg ' ;; *) pat='-x64.*\\.dmg ' ;; esac ;;
|
|
132
|
+
deb) case "$m" in aarch64|arm64) pat='-arm64\\.deb ' ;; *) pat='-amd64\\.deb ' ;; esac ;;
|
|
133
|
+
rpm) case "$m" in aarch64|arm64) pat='-aarch64\\.rpm ' ;; *) pat='-x86_64\\.rpm ' ;; esac ;;
|
|
134
|
+
*) return 1 ;;
|
|
135
|
+
esac
|
|
136
|
+
feed_files "$1" | grep -E -e "$pat" | head -n 1
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
# The installed version; "unknown" when present but unreadable; empty when absent.
|
|
140
|
+
detect_version() {
|
|
141
|
+
case "$OS" in
|
|
142
|
+
mac)
|
|
143
|
+
for d in "\${KT_HUB_APPS_DIR:-/Applications}" "$HOME/Applications"; do
|
|
144
|
+
if [ -d "$d/Kutrion.app" ]; then
|
|
145
|
+
v=$(/usr/libexec/PlistBuddy -c 'Print :CFBundleShortVersionString' "$d/Kutrion.app/Contents/Info.plist" 2>/dev/null)
|
|
146
|
+
echo "\${v:-unknown}"; return
|
|
147
|
+
fi
|
|
148
|
+
done ;;
|
|
149
|
+
*)
|
|
150
|
+
if command -v dpkg-query >/dev/null 2>&1; then
|
|
151
|
+
v=$(dpkg-query -W -f='\${Status}|\${Version}' "$PKG_NAME" 2>/dev/null)
|
|
152
|
+
case "$v" in 'install ok installed|'*) v=\${v#*|}; echo "\${v%%-*}"; return ;; esac
|
|
153
|
+
fi
|
|
154
|
+
if command -v rpm >/dev/null 2>&1; then
|
|
155
|
+
v=$(rpm -q --qf '%{VERSION}' "$PKG_NAME" 2>/dev/null) && { echo "$v"; return; }
|
|
156
|
+
fi
|
|
157
|
+
if [ -d /opt/Kutrion ]; then echo unknown; return; fi ;;
|
|
158
|
+
esac
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
state_dir() { echo "\${XDG_STATE_HOME:-$HOME/.local/state}/kutrion"; }
|
|
162
|
+
stamp_file() { echo "$(state_dir)/ensure-hub.stamp"; }
|
|
163
|
+
|
|
164
|
+
# One install at a time per account: the package postinst and the app's first run can start together.
|
|
165
|
+
take_lock() {
|
|
166
|
+
LOCK=$(state_dir)/ensure-hub.lock
|
|
167
|
+
mkdir -p "$(state_dir)" 2>/dev/null || return 0
|
|
168
|
+
if ! mkdir "$LOCK" 2>/dev/null; then
|
|
169
|
+
p=$(cat "$LOCK/pid" 2>/dev/null)
|
|
170
|
+
if [ -n "$p" ] && kill -0 "$p" 2>/dev/null; then return 1; fi
|
|
171
|
+
rm -r -f "$LOCK"; mkdir "$LOCK" 2>/dev/null || return 0
|
|
172
|
+
fi
|
|
173
|
+
echo $$ > "$LOCK/pid"; LOCK_HELD=1
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
# One attempt a day from the in-app paths, so a refused or offline run is not repeated at every launch.
|
|
177
|
+
first_run_gate() {
|
|
178
|
+
s=$(stamp_file); now=$(date +%s)
|
|
179
|
+
if [ -f "$s" ]; then
|
|
180
|
+
last=$(cat "$s" 2>/dev/null); case "$last" in ''|*[!0-9]*) last=0 ;; esac
|
|
181
|
+
[ $((now - last)) -ge 86400 ] || cannot "last attempt was under a day ago"
|
|
182
|
+
fi
|
|
183
|
+
mkdir -p "$(dirname "$s")" 2>/dev/null && echo "$now" > "$s" 2>/dev/null
|
|
184
|
+
return 0
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
have_privilege() { [ "$(id -u)" -eq 0 ] || { command -v sudo >/dev/null 2>&1 && sudo -n true 2>/dev/null; }; }
|
|
188
|
+
|
|
189
|
+
as_root() { if [ "$(id -u)" -eq 0 ]; then "$@"; else sudo -n "$@"; fi; }
|
|
190
|
+
|
|
191
|
+
# Runs "$@" once, or until it succeeds when --defer asked to wait out the package manager's lock.
|
|
192
|
+
retry() {
|
|
193
|
+
n=0
|
|
194
|
+
while :; do
|
|
195
|
+
"$@" && return 0
|
|
196
|
+
[ "$DEFER" -eq 1 ] && [ "$n" -lt 36 ] || return 1
|
|
197
|
+
n=$((n + 1)); sleep 5
|
|
198
|
+
done
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
install_deb() {
|
|
202
|
+
if command -v apt-get >/dev/null 2>&1; then
|
|
203
|
+
as_root env DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends "$1" && return 0
|
|
204
|
+
as_root apt-get update -qq >/dev/null 2>&1
|
|
205
|
+
as_root env DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends "$1"
|
|
206
|
+
else
|
|
207
|
+
as_root dpkg -i "$1"
|
|
208
|
+
fi
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
install_rpm() {
|
|
212
|
+
if command -v dnf >/dev/null 2>&1; then as_root dnf -y install "$1"
|
|
213
|
+
elif command -v zypper >/dev/null 2>&1; then as_root zypper --non-interactive --no-gpg-checks install --allow-unsigned-rpm "$1"
|
|
214
|
+
elif command -v yum >/dev/null 2>&1; then as_root yum -y install "$1"
|
|
215
|
+
else as_root rpm -U "$1"; fi
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
# DMG -> 0 when the image holds a Hub bundle that meets the identity policy; MOUNT is set for the caller.
|
|
219
|
+
verify_mac_image() {
|
|
220
|
+
mp=$(mktemp -d "\${TMPDIR:-/tmp}/kt-hub-mp.XXXXXX") || return 1
|
|
221
|
+
hdiutil attach -nobrowse -readonly -noautoopen -mountpoint "$mp" "$1" >/dev/null 2>&1 || { rmdir "$mp"; return 1; }
|
|
222
|
+
MOUNT=$mp
|
|
223
|
+
app=$mp/Kutrion.app
|
|
224
|
+
[ -d "$app" ] || return 2
|
|
225
|
+
id=$(/usr/libexec/PlistBuddy -c 'Print :CFBundleIdentifier' "$app/Contents/Info.plist" 2>/dev/null)
|
|
226
|
+
[ "$id" = "$APP_ID" ] || return 3
|
|
227
|
+
bv=$(/usr/libexec/PlistBuddy -c 'Print :CFBundleShortVersionString' "$app/Contents/Info.plist" 2>/dev/null)
|
|
228
|
+
c=$(ver_cmp "\${bv:-0}" "$MIN"); [ "$c" = 0 ] || [ "$c" = 1 ] || return 4
|
|
229
|
+
team=$(conf_get HUB_MAC_TEAM_ID)
|
|
230
|
+
if [ -n "$team" ]; then
|
|
231
|
+
codesign --verify --deep --strict "$app" >/dev/null 2>&1 || return 5
|
|
232
|
+
got=$(codesign -dv --verbose=4 "$app" 2>&1 | sed -n 's/^TeamIdentifier=//p')
|
|
233
|
+
[ "$got" = "$team" ] || return 6
|
|
234
|
+
elif [ "$ALLOW_UNSIGNED" -eq 1 ]; then
|
|
235
|
+
log "warning: no publisher identity is configured; continuing because unsigned builds were allowed"
|
|
236
|
+
else
|
|
237
|
+
return 7
|
|
238
|
+
fi
|
|
239
|
+
return 0
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
mac_reason() {
|
|
243
|
+
case "$1" in
|
|
244
|
+
1) echo "the disk image could not be opened" ;;
|
|
245
|
+
2) echo "the disk image has no Kutrion.app" ;;
|
|
246
|
+
3) echo "the app bundle identifier is not $APP_ID" ;;
|
|
247
|
+
4) echo "the app version is below $MIN" ;;
|
|
248
|
+
5) echo "the app signature does not verify" ;;
|
|
249
|
+
6) echo "the app is not signed by the configured Team ID" ;;
|
|
250
|
+
7) echo "no Team ID is configured and unsigned builds are not allowed" ;;
|
|
251
|
+
esac
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
# KIND FILE -> 0 when the package is the Hub at or above the minimum. A deb revision ("1.2.8-9339") is not a pre-release.
|
|
255
|
+
verify_linux_package() {
|
|
256
|
+
if [ "$1" = deb ]; then
|
|
257
|
+
command -v dpkg-deb >/dev/null 2>&1 || return 1
|
|
258
|
+
pn=$(dpkg-deb -f "$2" Package 2>/dev/null); pv=$(dpkg-deb -f "$2" Version 2>/dev/null); pv=\${pv%%-*}
|
|
259
|
+
else
|
|
260
|
+
command -v rpm >/dev/null 2>&1 || return 1
|
|
261
|
+
pn=$(rpm -qp --qf '%{NAME}' "$2" 2>/dev/null); pv=$(rpm -qp --qf '%{VERSION}' "$2" 2>/dev/null)
|
|
262
|
+
fi
|
|
263
|
+
[ "$pn" = "$PKG_NAME" ] || return 2
|
|
264
|
+
c=$(ver_cmp "\${pv:-0}" "$MIN"); [ "$c" = 0 ] || [ "$c" = 1 ] || return 3
|
|
265
|
+
return 0
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
cleanup() {
|
|
269
|
+
[ "$LOCK_HELD" -eq 1 ] && rm -r -f "$LOCK"
|
|
270
|
+
# A run staged by the app lives in its own temp directory; nothing else is ever removed.
|
|
271
|
+
case "$(basename "$SELF_DIR")" in kt-hub-run-*) rm -r -f "$SELF_DIR" ;; esac
|
|
272
|
+
if [ -n "$MOUNT" ]; then hdiutil detach -quiet "$MOUNT" >/dev/null 2>&1 && rmdir "$MOUNT" 2>/dev/null; fi
|
|
273
|
+
[ -n "$WORK" ] && rm -r -f "$WORK"
|
|
274
|
+
return 0
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
main() {
|
|
278
|
+
FIRST_RUN=0; DEFER=0; FORCE=0; VERIFY_ONLY=0; OS_ARG=""; WORK=""; MOUNT=""; LOCK=""; LOCK_HELD=0
|
|
279
|
+
trap cleanup EXIT
|
|
280
|
+
while [ $# -gt 0 ]; do
|
|
281
|
+
case "$1" in
|
|
282
|
+
compare) ver_cmp "$2" "$3"; exit 0 ;;
|
|
283
|
+
verify-file) verify_file "$2" "$3"; exit $? ;;
|
|
284
|
+
--first-run) FIRST_RUN=1 ;;
|
|
285
|
+
--defer) DEFER=1 ;;
|
|
286
|
+
--force) FORCE=1 ;;
|
|
287
|
+
--verify-only) VERIFY_ONLY=1 ;;
|
|
288
|
+
--os) OS_ARG=\${2:-}; shift ;;
|
|
289
|
+
*) echo "usage: ensure-hub.sh [--first-run] [--defer] [--force] [--verify-only] [--os mac|deb|rpm]" >&2; exit 2 ;;
|
|
290
|
+
esac
|
|
291
|
+
shift
|
|
292
|
+
done
|
|
293
|
+
|
|
294
|
+
[ "\${KT_NO_HUB:-}" = 1 ] && { log "skipped: KT_NO_HUB=1"; exit 0; }
|
|
295
|
+
MIN=$(conf_get MIN_HUB_VERSION)
|
|
296
|
+
[ -n "$MIN" ] || refuse "no MIN_HUB_VERSION in $CONF"
|
|
297
|
+
FEED=\${KT_HUB_FEED_BASE:-$(conf_get FEED_BASE)}
|
|
298
|
+
[ -n "$FEED" ] || refuse "no feed configured"
|
|
299
|
+
ALLOW_UNSIGNED=0
|
|
300
|
+
[ "\${KT_HUB_ALLOW_UNSIGNED:-}" = 1 ] && ALLOW_UNSIGNED=1
|
|
301
|
+
[ "$(conf_get HUB_ALLOW_UNSIGNED)" = 1 ] && ALLOW_UNSIGNED=1
|
|
302
|
+
|
|
303
|
+
KIND=""
|
|
304
|
+
if [ -n "$OS_ARG" ]; then
|
|
305
|
+
case "$OS_ARG" in mac) OS=mac ;; deb|rpm) OS=linux; KIND=$OS_ARG ;; *) echo "--os takes mac, deb or rpm" >&2; exit 2 ;; esac
|
|
306
|
+
else case "$(uname -s)" in Darwin) OS=mac ;; Linux) OS=linux ;; *) cannot "unsupported system $(uname -s)" ;; esac; fi
|
|
307
|
+
|
|
308
|
+
if [ "$FORCE" -eq 0 ]; then
|
|
309
|
+
cur=$(detect_version)
|
|
310
|
+
if [ -n "$cur" ]; then
|
|
311
|
+
[ "$cur" = unknown ] && { log "present, version unreadable, left alone"; exit 0; }
|
|
312
|
+
c=$(ver_cmp "$cur" "$MIN")
|
|
313
|
+
case "$c" in
|
|
314
|
+
0|1) log "present at $cur (minimum $MIN), nothing to do"; exit 0 ;;
|
|
315
|
+
x) log "present, version '$cur' not comparable, left alone"; exit 0 ;;
|
|
316
|
+
esac
|
|
317
|
+
log "present at $cur, below $MIN"
|
|
318
|
+
else
|
|
319
|
+
log "absent"
|
|
320
|
+
fi
|
|
321
|
+
fi
|
|
322
|
+
|
|
323
|
+
[ "$FIRST_RUN" -eq 1 ] && first_run_gate
|
|
324
|
+
|
|
325
|
+
if [ "$OS" = linux ]; then
|
|
326
|
+
if [ -z "$KIND" ]; then
|
|
327
|
+
if command -v dpkg >/dev/null 2>&1; then KIND=deb
|
|
328
|
+
elif command -v rpm >/dev/null 2>&1; then KIND=rpm
|
|
329
|
+
else cannot "no deb or rpm package manager (an AppImage Hub is installed by hand)"; fi
|
|
330
|
+
fi
|
|
331
|
+
[ "$VERIFY_ONLY" -eq 1 ] || have_privilege || cannot "installing a package needs root or passwordless sudo"
|
|
332
|
+
else
|
|
333
|
+
KIND=mac
|
|
334
|
+
fi
|
|
335
|
+
|
|
336
|
+
[ "$VERIFY_ONLY" -eq 1 ] || take_lock || { log "another install is running"; exit 0; }
|
|
337
|
+
WORK=$(mktemp -d "\${TMPDIR:-/tmp}/kt-hub.XXXXXX") || cannot "no temporary directory"
|
|
338
|
+
|
|
339
|
+
case "$OS" in mac) chan=latest-mac.yml ;; *) chan=latest-linux.yml ;; esac
|
|
340
|
+
fetch "$FEED/$chan" "$WORK/feed.yml" || { log "could not fetch $FEED/$chan"; exit 12; }
|
|
341
|
+
fv=$(feed_version "$WORK/feed.yml")
|
|
342
|
+
c=$(ver_cmp "\${fv:-0}" "$MIN"); [ "$c" = 0 ] || [ "$c" = 1 ] || refuse "the feed offers \${fv:-no version}, below the minimum $MIN"
|
|
343
|
+
pair=$(pick_artifact "$WORK/feed.yml" "$KIND")
|
|
344
|
+
[ -n "$pair" ] || refuse "the feed lists no $KIND package for $(uname -m)"
|
|
345
|
+
name=\${pair% *}; want=\${pair##* }
|
|
346
|
+
bare_name "$name" || refuse "the feed names '$name', which is not a plain file name"
|
|
347
|
+
fetch "$FEED/$name" "$WORK/$name" || { log "could not fetch $FEED/$name"; exit 12; }
|
|
348
|
+
verify_file "$WORK/$name" "$want" || refuse "sha512 of $name does not match the feed"
|
|
349
|
+
log "sha512 of $name matches the feed"
|
|
350
|
+
|
|
351
|
+
case "$KIND" in
|
|
352
|
+
mac)
|
|
353
|
+
verify_mac_image "$WORK/$name"; rc=$?
|
|
354
|
+
[ "$rc" -eq 0 ] || refuse "$(mac_reason $rc)"
|
|
355
|
+
[ "$VERIFY_ONLY" -eq 1 ] && { log "verified $name, not installing (--verify-only)"; exit 0; }
|
|
356
|
+
dest=\${KT_HUB_APPS_DIR:-/Applications}
|
|
357
|
+
[ -w "$dest" ] || { dest=$HOME/Applications; mkdir -p "$dest"; }
|
|
358
|
+
pgrep -x Kutrion >/dev/null 2>&1 && cannot "the Hub is running; it updates through its own feed"
|
|
359
|
+
ditto "$MOUNT/Kutrion.app" "$dest/.Kutrion.app.new" || { rm -r -f "$dest/.Kutrion.app.new"; log "copy failed"; exit 12; }
|
|
360
|
+
rm -r -f "$dest/Kutrion.app" && command mv "$dest/.Kutrion.app.new" "$dest/Kutrion.app" || { log "could not place the app in $dest"; exit 12; }
|
|
361
|
+
log "installed Kutrion $fv into $dest" ;;
|
|
362
|
+
deb|rpm)
|
|
363
|
+
verify_linux_package "$KIND" "$WORK/$name"; rc=$?
|
|
364
|
+
case $rc in
|
|
365
|
+
1) refuse "cannot read the $KIND package metadata here" ;;
|
|
366
|
+
2) refuse "the package is not named $PKG_NAME" ;;
|
|
367
|
+
3) refuse "the package version is below $MIN" ;;
|
|
368
|
+
esac
|
|
369
|
+
[ "$VERIFY_ONLY" -eq 1 ] && { log "verified $name, not installing (--verify-only)"; exit 0; }
|
|
370
|
+
# The package manager's sandbox user must be able to read the file.
|
|
371
|
+
chmod 644 "$WORK/$name"; chmod 755 "$WORK"
|
|
372
|
+
if [ "$KIND" = deb ]; then retry install_deb "$WORK/$name"; else retry install_rpm "$WORK/$name"; fi || { log "the package manager failed"; exit 12; }
|
|
373
|
+
log "installed Kutrion $fv" ;;
|
|
374
|
+
esac
|
|
375
|
+
exit 0
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
main "$@"
|
|
379
|
+
`, "ensure-hub.ps1": `# Installs the Kutrion Hub for the current user when it is absent or older than MIN_HUB_VERSION.
|
|
380
|
+
# The installer is fetched from the update feed, its sha512 is checked against the feed and its
|
|
381
|
+
# Authenticode identity against hub.conf; on any mismatch nothing is installed. The Hub is never removed.
|
|
382
|
+
#
|
|
383
|
+
# ensure-hub.ps1 [-FirstRun] [-Force] [-VerifyOnly]
|
|
384
|
+
# Exit: 0 present, installed or skipped by policy; 10 refused; 11 cannot install here; 12 fetch or install failed.
|
|
385
|
+
# Environment: KT_NO_HUB=1 skips; KT_HUB_FEED_BASE (https or file) replaces the feed;
|
|
386
|
+
# KT_HUB_ALLOW_UNSIGNED=1 accepts a build with no publisher identity.
|
|
387
|
+
param(
|
|
388
|
+
[switch]$FirstRun,
|
|
389
|
+
[switch]$Force,
|
|
390
|
+
[switch]$VerifyOnly,
|
|
391
|
+
[string]$Conf = (Join-Path $PSScriptRoot 'hub.conf')
|
|
392
|
+
)
|
|
393
|
+
|
|
394
|
+
$ErrorActionPreference = 'Stop'
|
|
395
|
+
$ProgressPreference = 'SilentlyContinue'
|
|
396
|
+
$AppId = 'com.kutrion.desktop'
|
|
397
|
+
|
|
398
|
+
function Write-Hub([string]$m) { Write-Output "ensure-hub: $m" }
|
|
399
|
+
function Stop-Refused([string]$m) { Write-Hub "refused, nothing installed: $m"; exit 10 }
|
|
400
|
+
function Stop-Cannot([string]$m) { Write-Hub "skipped: $m"; exit 11 }
|
|
401
|
+
|
|
402
|
+
function Get-ConfValue([string]$Name) {
|
|
403
|
+
if (-not (Test-Path -LiteralPath $Conf)) { return '' }
|
|
404
|
+
foreach ($l in Get-Content -LiteralPath $Conf) {
|
|
405
|
+
if ($l -match ('^' + [regex]::Escape($Name) + '=(.*)$')) { return $Matches[1].Trim() }
|
|
406
|
+
}
|
|
407
|
+
return ''
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
# -1, 0 or 1 for A against B; $null when either is not a dotted number with an optional suffix.
|
|
411
|
+
function Compare-HubVersion([string]$A, [string]$B) {
|
|
412
|
+
function Split-Ver([string]$v) {
|
|
413
|
+
$v = $v -replace '^v', '' -replace '\\+.*$', ''
|
|
414
|
+
$pre = ''
|
|
415
|
+
$i = $v.IndexOf('-')
|
|
416
|
+
if ($i -ge 0) { $pre = $v.Substring($i + 1); $v = $v.Substring(0, $i) }
|
|
417
|
+
if ($v -notmatch '^[0-9]+(\\.[0-9]+)*$') { return $null }
|
|
418
|
+
return @{ Parts = @($v.Split('.') | ForEach-Object { [int64]$_ }); Pre = $pre }
|
|
419
|
+
}
|
|
420
|
+
$x = Split-Ver $A; $y = Split-Ver $B
|
|
421
|
+
if ($null -eq $x -or $null -eq $y) { return $null }
|
|
422
|
+
$n = [Math]::Max($x.Parts.Count, $y.Parts.Count)
|
|
423
|
+
for ($i = 0; $i -lt $n; $i++) {
|
|
424
|
+
$p = if ($i -lt $x.Parts.Count) { $x.Parts[$i] } else { 0 }
|
|
425
|
+
$q = if ($i -lt $y.Parts.Count) { $y.Parts[$i] } else { 0 }
|
|
426
|
+
if ($p -ne $q) { if ($p -lt $q) { return -1 } else { return 1 } }
|
|
427
|
+
}
|
|
428
|
+
if ($x.Pre -eq $y.Pre) { return 0 }
|
|
429
|
+
if ($x.Pre -eq '') { return 1 }
|
|
430
|
+
if ($y.Pre -eq '') { return -1 }
|
|
431
|
+
if ([string]::CompareOrdinal($x.Pre, $y.Pre) -lt 0) { return -1 } else { return 1 }
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
function Get-Sha512B64([string]$Path) {
|
|
435
|
+
$sha = [Security.Cryptography.SHA512]::Create()
|
|
436
|
+
$fs = [IO.File]::OpenRead($Path)
|
|
437
|
+
try { return [Convert]::ToBase64String($sha.ComputeHash($fs)) } finally { $fs.Dispose(); $sha.Dispose() }
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
function Test-FileHash([string]$Path, [string]$Want) {
|
|
441
|
+
if ($Want -notmatch '^[A-Za-z0-9+/]{86}==$') { return $false }
|
|
442
|
+
return ((Get-Sha512B64 $Path) -ceq $Want)
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
# A feed file name is a bare name; anything with a path, scheme or whitespace could point off the feed origin.
|
|
446
|
+
function Test-BareName([string]$n) { return ($n -ne '' -and $n -notmatch '[\\\\/:\\s]' -and $n -notmatch '\\.\\.') }
|
|
447
|
+
|
|
448
|
+
function Get-FeedVersion([string]$Text) {
|
|
449
|
+
if ($Text -match '(?m)^version:\\s*["'']?([^\\s"'']+)') { return $Matches[1] }
|
|
450
|
+
return ''
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
function Get-FeedFiles([string]$Text) {
|
|
454
|
+
$out = @()
|
|
455
|
+
$name = $null
|
|
456
|
+
$inFiles = $false
|
|
457
|
+
foreach ($raw in ($Text -split "\`n")) {
|
|
458
|
+
$l = $raw.TrimEnd("\`r")
|
|
459
|
+
if ($l -match '^files:') { $inFiles = $true; continue }
|
|
460
|
+
if ($l -match '^[^ -]') { $inFiles = $false }
|
|
461
|
+
if (-not $inFiles) { continue }
|
|
462
|
+
if ($l -match '^\\s*-\\s*url:\\s*["'']?([^"'']+?)["'']?\\s*$') { $name = $Matches[1]; continue }
|
|
463
|
+
if ($name -and $l -match '^\\s+sha512:\\s*["'']?([^"'']+?)["'']?\\s*$') { $out += [pscustomobject]@{ Name = $name; Sha512 = $Matches[1] }; $name = $null }
|
|
464
|
+
}
|
|
465
|
+
return $out
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
# The installed Hub's version; 'unknown' when present but unreadable; $null when absent.
|
|
469
|
+
function Get-InstalledHub {
|
|
470
|
+
$roots = @('HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall', 'HKLM:\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall',
|
|
471
|
+
'HKLM:\\Software\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall')
|
|
472
|
+
foreach ($r in $roots) {
|
|
473
|
+
if (-not (Test-Path $r)) { continue }
|
|
474
|
+
foreach ($k in Get-ChildItem $r -ErrorAction SilentlyContinue) {
|
|
475
|
+
$p = Get-ItemProperty -LiteralPath $k.PSPath -ErrorAction SilentlyContinue
|
|
476
|
+
# electron-builder registers DisplayName as "<product> <version>"; "Kutrion Terminal 1.2.8" must not match.
|
|
477
|
+
if ($k.PSChildName -eq $AppId -or $p.DisplayName -cmatch '^Kutrion( [0-9][^ ]*)?$') {
|
|
478
|
+
if ($p.DisplayVersion) { return [string]$p.DisplayVersion } else { return 'unknown' }
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
return $null
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
function Get-Fetched([string]$Url, [string]$Dest) {
|
|
486
|
+
if ($Url -like 'file://*') { Copy-Item -LiteralPath ([Uri]$Url).LocalPath -Destination $Dest -Force; return }
|
|
487
|
+
if ($Url -notlike 'https://*') { throw "only https and file feeds are used: $Url" }
|
|
488
|
+
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
|
|
489
|
+
Invoke-WebRequest -UseBasicParsing -Uri $Url -OutFile $Dest -TimeoutSec 900
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
# Dot-sourcing loads the functions above and runs nothing, so the checks can be driven one by one.
|
|
493
|
+
if ($MyInvocation.InvocationName -eq '.') { return }
|
|
494
|
+
|
|
495
|
+
if ($env:KT_NO_HUB -eq '1') { Write-Hub 'skipped: KT_NO_HUB=1'; exit 0 }
|
|
496
|
+
|
|
497
|
+
$min = Get-ConfValue 'MIN_HUB_VERSION'
|
|
498
|
+
if (-not $min) { Stop-Refused "no MIN_HUB_VERSION in $Conf" }
|
|
499
|
+
$feed = if ($env:KT_HUB_FEED_BASE) { $env:KT_HUB_FEED_BASE } else { Get-ConfValue 'FEED_BASE' }
|
|
500
|
+
if (-not $feed) { Stop-Refused 'no feed configured' }
|
|
501
|
+
$publisher = Get-ConfValue 'HUB_WIN_PUBLISHER'
|
|
502
|
+
$allowUnsigned = ($env:KT_HUB_ALLOW_UNSIGNED -eq '1') -or ((Get-ConfValue 'HUB_ALLOW_UNSIGNED') -eq '1')
|
|
503
|
+
|
|
504
|
+
if (-not $Force) {
|
|
505
|
+
$cur = Get-InstalledHub
|
|
506
|
+
if ($null -ne $cur) {
|
|
507
|
+
if ($cur -eq 'unknown') { Write-Hub 'present, version unreadable, left alone'; exit 0 }
|
|
508
|
+
$c = Compare-HubVersion $cur $min
|
|
509
|
+
if ($null -eq $c) { Write-Hub "present, version '$cur' not comparable, left alone"; exit 0 }
|
|
510
|
+
if ($c -ge 0) { Write-Hub "present at $cur (minimum $min), nothing to do"; exit 0 }
|
|
511
|
+
Write-Hub "present at $cur, below $min"
|
|
512
|
+
} else {
|
|
513
|
+
Write-Hub 'absent'
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
if ($FirstRun) {
|
|
518
|
+
$stamp = Join-Path $env:LOCALAPPDATA 'Kutrion\\ensure-hub.stamp'
|
|
519
|
+
$now = [DateTimeOffset]::UtcNow.ToUnixTimeSeconds()
|
|
520
|
+
if (Test-Path -LiteralPath $stamp) {
|
|
521
|
+
$last = 0L
|
|
522
|
+
[void][int64]::TryParse((Get-Content -LiteralPath $stamp -Raw).Trim(), [ref]$last)
|
|
523
|
+
if ($now - $last -lt 86400) { Stop-Cannot 'last attempt was under a day ago' }
|
|
524
|
+
}
|
|
525
|
+
New-Item -ItemType Directory -Force -Path (Split-Path $stamp) | Out-Null
|
|
526
|
+
Set-Content -LiteralPath $stamp -Value $now
|
|
527
|
+
}
|
|
528
|
+
|
|
529
|
+
# One install at a time per account: the installer's own start and the app's first run can overlap.
|
|
530
|
+
$mutex = New-Object Threading.Mutex($false, 'Local\\KutrionEnsureHub')
|
|
531
|
+
$held = $false
|
|
532
|
+
if (-not $VerifyOnly) {
|
|
533
|
+
try { $held = $mutex.WaitOne(0) } catch [Threading.AbandonedMutexException] { $held = $true }
|
|
534
|
+
if (-not $held) { Write-Hub 'another install is running'; exit 0 }
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
$work = Join-Path ([IO.Path]::GetTempPath()) ('kt-hub-' + [guid]::NewGuid().ToString('N'))
|
|
538
|
+
New-Item -ItemType Directory -Force -Path $work | Out-Null
|
|
539
|
+
try {
|
|
540
|
+
try { Get-Fetched "$feed/latest.yml" (Join-Path $work 'feed.yml') } catch { Write-Hub "could not fetch $feed/latest.yml"; exit 12 }
|
|
541
|
+
$text = Get-Content -LiteralPath (Join-Path $work 'feed.yml') -Raw
|
|
542
|
+
$fv = Get-FeedVersion $text
|
|
543
|
+
$c = if ($fv) { Compare-HubVersion $fv $min } else { $null }
|
|
544
|
+
if ($null -eq $c -or $c -lt 0) { Stop-Refused "the feed offers '$fv', below the minimum $min" }
|
|
545
|
+
$entry = Get-FeedFiles $text | Where-Object { $_.Name -like '*.exe' } | Select-Object -First 1
|
|
546
|
+
if (-not $entry) { Stop-Refused 'the feed lists no installer' }
|
|
547
|
+
if (-not (Test-BareName $entry.Name)) { Stop-Refused "the feed names '$($entry.Name)', which is not a plain file name" }
|
|
548
|
+
$exe = Join-Path $work $entry.Name
|
|
549
|
+
try { Get-Fetched "$feed/$($entry.Name)" $exe } catch { Write-Hub "could not fetch $feed/$($entry.Name)"; exit 12 }
|
|
550
|
+
if (-not (Test-FileHash $exe $entry.Sha512)) { Stop-Refused "sha512 of $($entry.Name) does not match the feed" }
|
|
551
|
+
Write-Hub "sha512 of $($entry.Name) matches the feed"
|
|
552
|
+
|
|
553
|
+
$sig = Get-AuthenticodeSignature -LiteralPath $exe
|
|
554
|
+
if ($publisher) {
|
|
555
|
+
if ($sig.Status -ne 'Valid') { Stop-Refused "the installer signature is $($sig.Status)" }
|
|
556
|
+
$subject = $sig.SignerCertificate.Subject
|
|
557
|
+
if ($subject -notmatch ('(^|, )CN=' + [regex]::Escape($publisher) + '(,|$)')) { Stop-Refused "the installer is signed by '$subject', not by $publisher" }
|
|
558
|
+
} elseif ($allowUnsigned) {
|
|
559
|
+
Write-Hub "warning: no publisher identity is configured; continuing because unsigned builds were allowed (signature: $($sig.Status))"
|
|
560
|
+
} else {
|
|
561
|
+
Stop-Refused 'no publisher identity is configured and unsigned builds are not allowed'
|
|
562
|
+
}
|
|
563
|
+
|
|
564
|
+
if ($VerifyOnly) { Write-Hub "verified $($entry.Name), not installing (-VerifyOnly)"; exit 0 }
|
|
565
|
+
|
|
566
|
+
# Waits on this pid only: Start-Process -Wait in Windows PowerShell 5.1 waits on the whole process tree, so an
|
|
567
|
+
# installer that starts the app never returns.
|
|
568
|
+
$p = [Diagnostics.Process]::Start((New-Object Diagnostics.ProcessStartInfo -Property @{ FileName = $exe; Arguments = '/S /currentuser'; UseShellExecute = $false }))
|
|
569
|
+
if (-not $p.WaitForExit(600000)) { & taskkill.exe /PID $p.Id /T /F | Out-Null; Write-Hub 'the installer did not finish in 10 minutes'; exit 12 }
|
|
570
|
+
if ($p.ExitCode -ne 0) { Write-Hub "the installer exited $($p.ExitCode)"; exit 12 }
|
|
571
|
+
$after = Get-InstalledHub
|
|
572
|
+
if ($null -eq $after) { Write-Hub 'the installer finished but no Hub is registered'; exit 12 }
|
|
573
|
+
Write-Hub "installed Kutrion $after"
|
|
574
|
+
exit 0
|
|
575
|
+
} finally {
|
|
576
|
+
Remove-Item -LiteralPath $work -Recurse -Force -ErrorAction SilentlyContinue
|
|
577
|
+
if ($held) { $mutex.ReleaseMutex() }
|
|
578
|
+
# A run staged by the app lives in its own temp directory; nothing else is ever removed.
|
|
579
|
+
if ((Split-Path -Leaf $PSScriptRoot) -like 'kt-hub-run-*') { Remove-Item -LiteralPath $PSScriptRoot -Recurse -Force -ErrorAction SilentlyContinue }
|
|
580
|
+
}
|
|
581
|
+
`, "hub.conf": "# Read by ensure-hub.sh and ensure-hub.ps1, and shipped beside them in every app build.\nMIN_HUB_VERSION=1.2.9\nFEED_BASE=https://kutrion.com/updates\n# Authenticode subject common name the Hub installer must carry. Empty until a certificate exists (#973).\nHUB_WIN_PUBLISHER=\n# Apple Team ID the Hub bundle must be signed with. Empty until the Developer ID exists (#973).\nHUB_MAC_TEAM_ID=\n# 0 installs nothing that cannot be tied to a publisher identity above. 1 until code signing lands (#973, #3295). On Windows this equals the NSIS updater trust: sha512 over TLS from our own HTTPS feed. On macOS and Linux it is sha512 over TLS only, weaker than the macOS updater. Owner accepted this on #3283. KT_HUB_ALLOW_UNSIGNED=1 overrides per run.\nHUB_ALLOW_UNSIGNED=1\n" };
|
|
582
|
+
}
|
|
583
|
+
});
|
|
584
|
+
|
|
29
585
|
// node_modules/ws/lib/constants.js
|
|
30
586
|
var require_constants = __commonJS({
|
|
31
587
|
"node_modules/ws/lib/constants.js"(exports2, module2) {
|
|
32
588
|
"use strict";
|
|
589
|
+
init_define_KT_HUB_FILES();
|
|
33
590
|
var BINARY_TYPES = ["nodebuffer", "arraybuffer", "fragments"];
|
|
34
591
|
var hasBlob = typeof Blob !== "undefined";
|
|
35
592
|
if (hasBlob) BINARY_TYPES.push("blob");
|
|
@@ -53,6 +610,7 @@ var require_constants = __commonJS({
|
|
|
53
610
|
var require_buffer_util = __commonJS({
|
|
54
611
|
"node_modules/ws/lib/buffer-util.js"(exports2, module2) {
|
|
55
612
|
"use strict";
|
|
613
|
+
init_define_KT_HUB_FILES();
|
|
56
614
|
var { EMPTY_BUFFER } = require_constants();
|
|
57
615
|
var FastBuffer = Buffer[Symbol.species];
|
|
58
616
|
function concat(list, totalLength) {
|
|
@@ -128,6 +686,7 @@ var require_buffer_util = __commonJS({
|
|
|
128
686
|
var require_limiter = __commonJS({
|
|
129
687
|
"node_modules/ws/lib/limiter.js"(exports2, module2) {
|
|
130
688
|
"use strict";
|
|
689
|
+
init_define_KT_HUB_FILES();
|
|
131
690
|
var kDone = Symbol("kDone");
|
|
132
691
|
var kRun = Symbol("kRun");
|
|
133
692
|
var Limiter = class {
|
|
@@ -178,6 +737,7 @@ var require_limiter = __commonJS({
|
|
|
178
737
|
var require_permessage_deflate = __commonJS({
|
|
179
738
|
"node_modules/ws/lib/permessage-deflate.js"(exports2, module2) {
|
|
180
739
|
"use strict";
|
|
740
|
+
init_define_KT_HUB_FILES();
|
|
181
741
|
var zlib = require("zlib");
|
|
182
742
|
var bufferUtil = require_buffer_util();
|
|
183
743
|
var Limiter = require_limiter();
|
|
@@ -561,6 +1121,7 @@ var require_permessage_deflate = __commonJS({
|
|
|
561
1121
|
var require_validation = __commonJS({
|
|
562
1122
|
"node_modules/ws/lib/validation.js"(exports2, module2) {
|
|
563
1123
|
"use strict";
|
|
1124
|
+
init_define_KT_HUB_FILES();
|
|
564
1125
|
var { isUtf8 } = require("buffer");
|
|
565
1126
|
var { hasBlob } = require_constants();
|
|
566
1127
|
var tokenChars = [
|
|
@@ -762,6 +1323,7 @@ var require_validation = __commonJS({
|
|
|
762
1323
|
var require_receiver = __commonJS({
|
|
763
1324
|
"node_modules/ws/lib/receiver.js"(exports2, module2) {
|
|
764
1325
|
"use strict";
|
|
1326
|
+
init_define_KT_HUB_FILES();
|
|
765
1327
|
var { Writable } = require("stream");
|
|
766
1328
|
var PerMessageDeflate2 = require_permessage_deflate();
|
|
767
1329
|
var {
|
|
@@ -1394,6 +1956,7 @@ var require_receiver = __commonJS({
|
|
|
1394
1956
|
var require_sender = __commonJS({
|
|
1395
1957
|
"node_modules/ws/lib/sender.js"(exports2, module2) {
|
|
1396
1958
|
"use strict";
|
|
1959
|
+
init_define_KT_HUB_FILES();
|
|
1397
1960
|
var { Duplex } = require("stream");
|
|
1398
1961
|
var { randomFillSync } = require("crypto");
|
|
1399
1962
|
var {
|
|
@@ -1887,6 +2450,7 @@ var require_sender = __commonJS({
|
|
|
1887
2450
|
var require_event_target = __commonJS({
|
|
1888
2451
|
"node_modules/ws/lib/event-target.js"(exports2, module2) {
|
|
1889
2452
|
"use strict";
|
|
2453
|
+
init_define_KT_HUB_FILES();
|
|
1890
2454
|
var { kForOnEventAttribute, kListener } = require_constants();
|
|
1891
2455
|
var kCode = Symbol("kCode");
|
|
1892
2456
|
var kData = Symbol("kData");
|
|
@@ -2116,6 +2680,7 @@ var require_event_target = __commonJS({
|
|
|
2116
2680
|
var require_extension = __commonJS({
|
|
2117
2681
|
"node_modules/ws/lib/extension.js"(exports2, module2) {
|
|
2118
2682
|
"use strict";
|
|
2683
|
+
init_define_KT_HUB_FILES();
|
|
2119
2684
|
var { tokenChars } = require_validation();
|
|
2120
2685
|
function push(dest, name, elem) {
|
|
2121
2686
|
if (dest[name] === void 0) dest[name] = [elem];
|
|
@@ -2269,6 +2834,7 @@ var require_extension = __commonJS({
|
|
|
2269
2834
|
var require_websocket = __commonJS({
|
|
2270
2835
|
"node_modules/ws/lib/websocket.js"(exports2, module2) {
|
|
2271
2836
|
"use strict";
|
|
2837
|
+
init_define_KT_HUB_FILES();
|
|
2272
2838
|
var EventEmitter = require("events");
|
|
2273
2839
|
var https = require("https");
|
|
2274
2840
|
var http = require("http");
|
|
@@ -3165,6 +3731,7 @@ var require_websocket = __commonJS({
|
|
|
3165
3731
|
var require_stream = __commonJS({
|
|
3166
3732
|
"node_modules/ws/lib/stream.js"(exports2, module2) {
|
|
3167
3733
|
"use strict";
|
|
3734
|
+
init_define_KT_HUB_FILES();
|
|
3168
3735
|
var WebSocket2 = require_websocket();
|
|
3169
3736
|
var { Duplex } = require("stream");
|
|
3170
3737
|
function emitClose(stream) {
|
|
@@ -3263,6 +3830,7 @@ var require_stream = __commonJS({
|
|
|
3263
3830
|
var require_subprotocol = __commonJS({
|
|
3264
3831
|
"node_modules/ws/lib/subprotocol.js"(exports2, module2) {
|
|
3265
3832
|
"use strict";
|
|
3833
|
+
init_define_KT_HUB_FILES();
|
|
3266
3834
|
var { tokenChars } = require_validation();
|
|
3267
3835
|
function parse(header) {
|
|
3268
3836
|
const protocols = /* @__PURE__ */ new Set();
|
|
@@ -3308,6 +3876,7 @@ var require_subprotocol = __commonJS({
|
|
|
3308
3876
|
var require_websocket_server = __commonJS({
|
|
3309
3877
|
"node_modules/ws/lib/websocket-server.js"(exports2, module2) {
|
|
3310
3878
|
"use strict";
|
|
3879
|
+
init_define_KT_HUB_FILES();
|
|
3311
3880
|
var EventEmitter = require("events");
|
|
3312
3881
|
var http = require("http");
|
|
3313
3882
|
var { Duplex } = require("stream");
|
|
@@ -3320,7 +3889,7 @@ var require_websocket_server = __commonJS({
|
|
|
3320
3889
|
var keyRegex = /^[+/0-9A-Za-z]{22}==$/;
|
|
3321
3890
|
var RUNNING = 0;
|
|
3322
3891
|
var CLOSING = 1;
|
|
3323
|
-
var
|
|
3892
|
+
var CLOSED2 = 2;
|
|
3324
3893
|
var WebSocketServer2 = class extends EventEmitter {
|
|
3325
3894
|
/**
|
|
3326
3895
|
* Create a `WebSocketServer` instance.
|
|
@@ -3449,7 +4018,7 @@ var require_websocket_server = __commonJS({
|
|
|
3449
4018
|
* @public
|
|
3450
4019
|
*/
|
|
3451
4020
|
close(cb) {
|
|
3452
|
-
if (this._state ===
|
|
4021
|
+
if (this._state === CLOSED2) {
|
|
3453
4022
|
if (cb) {
|
|
3454
4023
|
this.once("close", () => {
|
|
3455
4024
|
cb(new Error("The server is not running"));
|
|
@@ -3673,7 +4242,7 @@ var require_websocket_server = __commonJS({
|
|
|
3673
4242
|
};
|
|
3674
4243
|
}
|
|
3675
4244
|
function emitClose(server) {
|
|
3676
|
-
server._state =
|
|
4245
|
+
server._state = CLOSED2;
|
|
3677
4246
|
server.emit("close");
|
|
3678
4247
|
}
|
|
3679
4248
|
function socketOnError() {
|
|
@@ -3709,6 +4278,7 @@ var require_websocket_server = __commonJS({
|
|
|
3709
4278
|
var require_dispatcher = __commonJS({
|
|
3710
4279
|
"node_modules/undici/lib/dispatcher/dispatcher.js"(exports2, module2) {
|
|
3711
4280
|
"use strict";
|
|
4281
|
+
init_define_KT_HUB_FILES();
|
|
3712
4282
|
var EventEmitter = require("node:events");
|
|
3713
4283
|
var Dispatcher2 = class extends EventEmitter {
|
|
3714
4284
|
dispatch() {
|
|
@@ -3764,6 +4334,7 @@ var require_dispatcher = __commonJS({
|
|
|
3764
4334
|
var require_errors = __commonJS({
|
|
3765
4335
|
"node_modules/undici/lib/core/errors.js"(exports2, module2) {
|
|
3766
4336
|
"use strict";
|
|
4337
|
+
init_define_KT_HUB_FILES();
|
|
3767
4338
|
var UndiciError = class extends Error {
|
|
3768
4339
|
constructor(message) {
|
|
3769
4340
|
super(message);
|
|
@@ -3989,6 +4560,7 @@ var require_errors = __commonJS({
|
|
|
3989
4560
|
// node_modules/undici/lib/core/symbols.js
|
|
3990
4561
|
var require_symbols = __commonJS({
|
|
3991
4562
|
"node_modules/undici/lib/core/symbols.js"(exports2, module2) {
|
|
4563
|
+
init_define_KT_HUB_FILES();
|
|
3992
4564
|
module2.exports = {
|
|
3993
4565
|
kClose: Symbol("close"),
|
|
3994
4566
|
kDestroy: Symbol("destroy"),
|
|
@@ -4063,6 +4635,7 @@ var require_symbols = __commonJS({
|
|
|
4063
4635
|
var require_constants2 = __commonJS({
|
|
4064
4636
|
"node_modules/undici/lib/core/constants.js"(exports2, module2) {
|
|
4065
4637
|
"use strict";
|
|
4638
|
+
init_define_KT_HUB_FILES();
|
|
4066
4639
|
var headerNameLowerCasedRecord = {};
|
|
4067
4640
|
var wellknownHeaderNames = [
|
|
4068
4641
|
"Accept",
|
|
@@ -4178,6 +4751,7 @@ var require_constants2 = __commonJS({
|
|
|
4178
4751
|
var require_tree = __commonJS({
|
|
4179
4752
|
"node_modules/undici/lib/core/tree.js"(exports2, module2) {
|
|
4180
4753
|
"use strict";
|
|
4754
|
+
init_define_KT_HUB_FILES();
|
|
4181
4755
|
var {
|
|
4182
4756
|
wellknownHeaderNames,
|
|
4183
4757
|
headerNameLowerCasedRecord
|
|
@@ -4318,6 +4892,7 @@ var require_tree = __commonJS({
|
|
|
4318
4892
|
var require_util = __commonJS({
|
|
4319
4893
|
"node_modules/undici/lib/core/util.js"(exports2, module2) {
|
|
4320
4894
|
"use strict";
|
|
4895
|
+
init_define_KT_HUB_FILES();
|
|
4321
4896
|
var assert = require("node:assert");
|
|
4322
4897
|
var { kDestroyed, kBodyUsed, kListeners, kBody } = require_symbols();
|
|
4323
4898
|
var { IncomingMessage } = require("node:http");
|
|
@@ -4451,22 +5026,22 @@ var require_util = __commonJS({
|
|
|
4451
5026
|
}
|
|
4452
5027
|
return url;
|
|
4453
5028
|
}
|
|
4454
|
-
function getHostname(
|
|
4455
|
-
if (
|
|
4456
|
-
const idx2 =
|
|
5029
|
+
function getHostname(host2) {
|
|
5030
|
+
if (host2[0] === "[") {
|
|
5031
|
+
const idx2 = host2.indexOf("]");
|
|
4457
5032
|
assert(idx2 !== -1);
|
|
4458
|
-
return
|
|
5033
|
+
return host2.substring(1, idx2);
|
|
4459
5034
|
}
|
|
4460
|
-
const idx =
|
|
4461
|
-
if (idx === -1) return
|
|
4462
|
-
return
|
|
5035
|
+
const idx = host2.indexOf(":");
|
|
5036
|
+
if (idx === -1) return host2;
|
|
5037
|
+
return host2.substring(0, idx);
|
|
4463
5038
|
}
|
|
4464
|
-
function getServerName(
|
|
4465
|
-
if (!
|
|
5039
|
+
function getServerName(host2) {
|
|
5040
|
+
if (!host2) {
|
|
4466
5041
|
return null;
|
|
4467
5042
|
}
|
|
4468
|
-
assert(typeof
|
|
4469
|
-
const servername = getHostname(
|
|
5043
|
+
assert(typeof host2 === "string");
|
|
5044
|
+
const servername = getHostname(host2);
|
|
4470
5045
|
if (net.isIP(servername)) {
|
|
4471
5046
|
return "";
|
|
4472
5047
|
}
|
|
@@ -4824,6 +5399,7 @@ var require_util = __commonJS({
|
|
|
4824
5399
|
var require_readable = __commonJS({
|
|
4825
5400
|
"node_modules/undici/lib/api/readable.js"(exports2, module2) {
|
|
4826
5401
|
"use strict";
|
|
5402
|
+
init_define_KT_HUB_FILES();
|
|
4827
5403
|
var assert = require("node:assert");
|
|
4828
5404
|
var { Readable } = require("node:stream");
|
|
4829
5405
|
var { RequestAbortedError, NotSupportedError, InvalidArgumentError, AbortError } = require_errors();
|
|
@@ -5116,6 +5692,7 @@ var require_readable = __commonJS({
|
|
|
5116
5692
|
// node_modules/undici/lib/api/util.js
|
|
5117
5693
|
var require_util2 = __commonJS({
|
|
5118
5694
|
"node_modules/undici/lib/api/util.js"(exports2, module2) {
|
|
5695
|
+
init_define_KT_HUB_FILES();
|
|
5119
5696
|
var assert = require("node:assert");
|
|
5120
5697
|
var {
|
|
5121
5698
|
ResponseStatusCodeError
|
|
@@ -5178,6 +5755,7 @@ var require_util2 = __commonJS({
|
|
|
5178
5755
|
var require_api_request = __commonJS({
|
|
5179
5756
|
"node_modules/undici/lib/api/api-request.js"(exports2, module2) {
|
|
5180
5757
|
"use strict";
|
|
5758
|
+
init_define_KT_HUB_FILES();
|
|
5181
5759
|
var assert = require("node:assert");
|
|
5182
5760
|
var { Readable } = require_readable();
|
|
5183
5761
|
var { InvalidArgumentError, RequestAbortedError } = require_errors();
|
|
@@ -5363,6 +5941,7 @@ var require_api_request = __commonJS({
|
|
|
5363
5941
|
// node_modules/undici/lib/api/abort-signal.js
|
|
5364
5942
|
var require_abort_signal = __commonJS({
|
|
5365
5943
|
"node_modules/undici/lib/api/abort-signal.js"(exports2, module2) {
|
|
5944
|
+
init_define_KT_HUB_FILES();
|
|
5366
5945
|
var { addAbortListener } = require_util();
|
|
5367
5946
|
var { RequestAbortedError } = require_errors();
|
|
5368
5947
|
var kListener = Symbol("kListener");
|
|
@@ -5415,6 +5994,7 @@ var require_abort_signal = __commonJS({
|
|
|
5415
5994
|
var require_api_stream = __commonJS({
|
|
5416
5995
|
"node_modules/undici/lib/api/api-stream.js"(exports2, module2) {
|
|
5417
5996
|
"use strict";
|
|
5997
|
+
init_define_KT_HUB_FILES();
|
|
5418
5998
|
var assert = require("node:assert");
|
|
5419
5999
|
var { finished, PassThrough } = require("node:stream");
|
|
5420
6000
|
var { InvalidArgumentError, InvalidReturnValueError } = require_errors();
|
|
@@ -5588,6 +6168,7 @@ var require_api_stream = __commonJS({
|
|
|
5588
6168
|
var require_api_pipeline = __commonJS({
|
|
5589
6169
|
"node_modules/undici/lib/api/api-pipeline.js"(exports2, module2) {
|
|
5590
6170
|
"use strict";
|
|
6171
|
+
init_define_KT_HUB_FILES();
|
|
5591
6172
|
var {
|
|
5592
6173
|
Readable,
|
|
5593
6174
|
Duplex,
|
|
@@ -5788,6 +6369,7 @@ var require_api_pipeline = __commonJS({
|
|
|
5788
6369
|
var require_api_upgrade = __commonJS({
|
|
5789
6370
|
"node_modules/undici/lib/api/api-upgrade.js"(exports2, module2) {
|
|
5790
6371
|
"use strict";
|
|
6372
|
+
init_define_KT_HUB_FILES();
|
|
5791
6373
|
var { InvalidArgumentError, SocketError } = require_errors();
|
|
5792
6374
|
var { AsyncResource } = require("node:async_hooks");
|
|
5793
6375
|
var util = require_util();
|
|
@@ -5880,6 +6462,7 @@ var require_api_upgrade = __commonJS({
|
|
|
5880
6462
|
var require_api_connect = __commonJS({
|
|
5881
6463
|
"node_modules/undici/lib/api/api-connect.js"(exports2, module2) {
|
|
5882
6464
|
"use strict";
|
|
6465
|
+
init_define_KT_HUB_FILES();
|
|
5883
6466
|
var assert = require("node:assert");
|
|
5884
6467
|
var { AsyncResource } = require("node:async_hooks");
|
|
5885
6468
|
var { InvalidArgumentError, SocketError } = require_errors();
|
|
@@ -5943,10 +6526,10 @@ var require_api_connect = __commonJS({
|
|
|
5943
6526
|
}
|
|
5944
6527
|
}
|
|
5945
6528
|
};
|
|
5946
|
-
function
|
|
6529
|
+
function connect3(opts2, callback) {
|
|
5947
6530
|
if (callback === void 0) {
|
|
5948
6531
|
return new Promise((resolve2, reject) => {
|
|
5949
|
-
|
|
6532
|
+
connect3.call(this, opts2, (err, data) => {
|
|
5950
6533
|
return err ? reject(err) : resolve2(data);
|
|
5951
6534
|
});
|
|
5952
6535
|
});
|
|
@@ -5962,7 +6545,7 @@ var require_api_connect = __commonJS({
|
|
|
5962
6545
|
queueMicrotask(() => callback(err, { opaque }));
|
|
5963
6546
|
}
|
|
5964
6547
|
}
|
|
5965
|
-
module2.exports =
|
|
6548
|
+
module2.exports = connect3;
|
|
5966
6549
|
}
|
|
5967
6550
|
});
|
|
5968
6551
|
|
|
@@ -5970,6 +6553,7 @@ var require_api_connect = __commonJS({
|
|
|
5970
6553
|
var require_api = __commonJS({
|
|
5971
6554
|
"node_modules/undici/lib/api/index.js"(exports2, module2) {
|
|
5972
6555
|
"use strict";
|
|
6556
|
+
init_define_KT_HUB_FILES();
|
|
5973
6557
|
module2.exports.request = require_api_request();
|
|
5974
6558
|
module2.exports.stream = require_api_stream();
|
|
5975
6559
|
module2.exports.pipeline = require_api_pipeline();
|
|
@@ -5982,6 +6566,7 @@ var require_api = __commonJS({
|
|
|
5982
6566
|
var require_dispatcher_base = __commonJS({
|
|
5983
6567
|
"node_modules/undici/lib/dispatcher/dispatcher-base.js"(exports2, module2) {
|
|
5984
6568
|
"use strict";
|
|
6569
|
+
init_define_KT_HUB_FILES();
|
|
5985
6570
|
var Dispatcher2 = require_dispatcher();
|
|
5986
6571
|
var {
|
|
5987
6572
|
ClientDestroyedError,
|
|
@@ -6143,6 +6728,7 @@ var require_dispatcher_base = __commonJS({
|
|
|
6143
6728
|
var require_fixed_queue = __commonJS({
|
|
6144
6729
|
"node_modules/undici/lib/dispatcher/fixed-queue.js"(exports2, module2) {
|
|
6145
6730
|
"use strict";
|
|
6731
|
+
init_define_KT_HUB_FILES();
|
|
6146
6732
|
var kSize = 2048;
|
|
6147
6733
|
var kMask = kSize - 1;
|
|
6148
6734
|
var FixedCircularBuffer = class {
|
|
@@ -6199,6 +6785,7 @@ var require_fixed_queue = __commonJS({
|
|
|
6199
6785
|
// node_modules/undici/lib/dispatcher/pool-stats.js
|
|
6200
6786
|
var require_pool_stats = __commonJS({
|
|
6201
6787
|
"node_modules/undici/lib/dispatcher/pool-stats.js"(exports2, module2) {
|
|
6788
|
+
init_define_KT_HUB_FILES();
|
|
6202
6789
|
var { kFree, kConnected, kPending, kQueued, kRunning, kSize } = require_symbols();
|
|
6203
6790
|
var kPool = Symbol("pool");
|
|
6204
6791
|
var PoolStats = class {
|
|
@@ -6232,6 +6819,7 @@ var require_pool_stats = __commonJS({
|
|
|
6232
6819
|
var require_pool_base = __commonJS({
|
|
6233
6820
|
"node_modules/undici/lib/dispatcher/pool-base.js"(exports2, module2) {
|
|
6234
6821
|
"use strict";
|
|
6822
|
+
init_define_KT_HUB_FILES();
|
|
6235
6823
|
var DispatcherBase = require_dispatcher_base();
|
|
6236
6824
|
var FixedQueue = require_fixed_queue();
|
|
6237
6825
|
var { kConnected, kSize, kRunning, kPending, kQueued, kBusy, kFree, kUrl, kClose, kDestroy, kDispatch } = require_symbols();
|
|
@@ -6387,6 +6975,7 @@ var require_pool_base = __commonJS({
|
|
|
6387
6975
|
var require_diagnostics = __commonJS({
|
|
6388
6976
|
"node_modules/undici/lib/core/diagnostics.js"(exports2, module2) {
|
|
6389
6977
|
"use strict";
|
|
6978
|
+
init_define_KT_HUB_FILES();
|
|
6390
6979
|
var diagnosticsChannel = require("node:diagnostics_channel");
|
|
6391
6980
|
var util = require("node:util");
|
|
6392
6981
|
var undiciDebugLog = util.debuglog("undici");
|
|
@@ -6416,34 +7005,34 @@ var require_diagnostics = __commonJS({
|
|
|
6416
7005
|
const debuglog = fetchDebuglog.enabled ? fetchDebuglog : undiciDebugLog;
|
|
6417
7006
|
diagnosticsChannel.channel("undici:client:beforeConnect").subscribe((evt) => {
|
|
6418
7007
|
const {
|
|
6419
|
-
connectParams: { version, protocol, port, host }
|
|
7008
|
+
connectParams: { version, protocol, port, host: host2 }
|
|
6420
7009
|
} = evt;
|
|
6421
7010
|
debuglog(
|
|
6422
7011
|
"connecting to %s using %s%s",
|
|
6423
|
-
`${
|
|
7012
|
+
`${host2}${port ? `:${port}` : ""}`,
|
|
6424
7013
|
protocol,
|
|
6425
7014
|
version
|
|
6426
7015
|
);
|
|
6427
7016
|
});
|
|
6428
7017
|
diagnosticsChannel.channel("undici:client:connected").subscribe((evt) => {
|
|
6429
7018
|
const {
|
|
6430
|
-
connectParams: { version, protocol, port, host }
|
|
7019
|
+
connectParams: { version, protocol, port, host: host2 }
|
|
6431
7020
|
} = evt;
|
|
6432
7021
|
debuglog(
|
|
6433
7022
|
"connected to %s using %s%s",
|
|
6434
|
-
`${
|
|
7023
|
+
`${host2}${port ? `:${port}` : ""}`,
|
|
6435
7024
|
protocol,
|
|
6436
7025
|
version
|
|
6437
7026
|
);
|
|
6438
7027
|
});
|
|
6439
7028
|
diagnosticsChannel.channel("undici:client:connectError").subscribe((evt) => {
|
|
6440
7029
|
const {
|
|
6441
|
-
connectParams: { version, protocol, port, host },
|
|
7030
|
+
connectParams: { version, protocol, port, host: host2 },
|
|
6442
7031
|
error
|
|
6443
7032
|
} = evt;
|
|
6444
7033
|
debuglog(
|
|
6445
7034
|
"connection to %s using %s%s errored - %s",
|
|
6446
|
-
`${
|
|
7035
|
+
`${host2}${port ? `:${port}` : ""}`,
|
|
6447
7036
|
protocol,
|
|
6448
7037
|
version,
|
|
6449
7038
|
error.message
|
|
@@ -6494,11 +7083,11 @@ var require_diagnostics = __commonJS({
|
|
|
6494
7083
|
const debuglog = undiciDebugLog.enabled ? undiciDebugLog : websocketDebuglog;
|
|
6495
7084
|
diagnosticsChannel.channel("undici:client:beforeConnect").subscribe((evt) => {
|
|
6496
7085
|
const {
|
|
6497
|
-
connectParams: { version, protocol, port, host }
|
|
7086
|
+
connectParams: { version, protocol, port, host: host2 }
|
|
6498
7087
|
} = evt;
|
|
6499
7088
|
debuglog(
|
|
6500
7089
|
"connecting to %s%s using %s%s",
|
|
6501
|
-
|
|
7090
|
+
host2,
|
|
6502
7091
|
port ? `:${port}` : "",
|
|
6503
7092
|
protocol,
|
|
6504
7093
|
version
|
|
@@ -6506,11 +7095,11 @@ var require_diagnostics = __commonJS({
|
|
|
6506
7095
|
});
|
|
6507
7096
|
diagnosticsChannel.channel("undici:client:connected").subscribe((evt) => {
|
|
6508
7097
|
const {
|
|
6509
|
-
connectParams: { version, protocol, port, host }
|
|
7098
|
+
connectParams: { version, protocol, port, host: host2 }
|
|
6510
7099
|
} = evt;
|
|
6511
7100
|
debuglog(
|
|
6512
7101
|
"connected to %s%s using %s%s",
|
|
6513
|
-
|
|
7102
|
+
host2,
|
|
6514
7103
|
port ? `:${port}` : "",
|
|
6515
7104
|
protocol,
|
|
6516
7105
|
version
|
|
@@ -6518,12 +7107,12 @@ var require_diagnostics = __commonJS({
|
|
|
6518
7107
|
});
|
|
6519
7108
|
diagnosticsChannel.channel("undici:client:connectError").subscribe((evt) => {
|
|
6520
7109
|
const {
|
|
6521
|
-
connectParams: { version, protocol, port, host },
|
|
7110
|
+
connectParams: { version, protocol, port, host: host2 },
|
|
6522
7111
|
error
|
|
6523
7112
|
} = evt;
|
|
6524
7113
|
debuglog(
|
|
6525
7114
|
"connection to %s%s using %s%s errored - %s",
|
|
6526
|
-
|
|
7115
|
+
host2,
|
|
6527
7116
|
port ? `:${port}` : "",
|
|
6528
7117
|
protocol,
|
|
6529
7118
|
version,
|
|
@@ -6572,6 +7161,7 @@ var require_diagnostics = __commonJS({
|
|
|
6572
7161
|
var require_request = __commonJS({
|
|
6573
7162
|
"node_modules/undici/lib/core/request.js"(exports2, module2) {
|
|
6574
7163
|
"use strict";
|
|
7164
|
+
init_define_KT_HUB_FILES();
|
|
6575
7165
|
var {
|
|
6576
7166
|
InvalidArgumentError,
|
|
6577
7167
|
NotSupportedError
|
|
@@ -6896,6 +7486,7 @@ var require_request = __commonJS({
|
|
|
6896
7486
|
var require_timers = __commonJS({
|
|
6897
7487
|
"node_modules/undici/lib/util/timers.js"(exports2, module2) {
|
|
6898
7488
|
"use strict";
|
|
7489
|
+
init_define_KT_HUB_FILES();
|
|
6899
7490
|
var fastNow = 0;
|
|
6900
7491
|
var RESOLUTION_MS = 1e3;
|
|
6901
7492
|
var TICK_MS = (RESOLUTION_MS >> 1) - 1;
|
|
@@ -7127,6 +7718,7 @@ var require_timers = __commonJS({
|
|
|
7127
7718
|
var require_connect = __commonJS({
|
|
7128
7719
|
"node_modules/undici/lib/core/connect.js"(exports2, module2) {
|
|
7129
7720
|
"use strict";
|
|
7721
|
+
init_define_KT_HUB_FILES();
|
|
7130
7722
|
var net = require("node:net");
|
|
7131
7723
|
var assert = require("node:assert");
|
|
7132
7724
|
var util = require_util();
|
|
@@ -7192,14 +7784,14 @@ var require_connect = __commonJS({
|
|
|
7192
7784
|
const sessionCache = new SessionCache(maxCachedSessions == null ? 100 : maxCachedSessions);
|
|
7193
7785
|
timeout = timeout == null ? 1e4 : timeout;
|
|
7194
7786
|
allowH2 = allowH2 != null ? allowH2 : false;
|
|
7195
|
-
return function
|
|
7787
|
+
return function connect3({ hostname: hostname3, host: host2, protocol, port, servername, localAddress, httpSocket }, callback) {
|
|
7196
7788
|
let socket;
|
|
7197
7789
|
if (protocol === "https:") {
|
|
7198
7790
|
if (!tls) {
|
|
7199
7791
|
tls = require("node:tls");
|
|
7200
7792
|
}
|
|
7201
|
-
servername = servername || options.servername || util.getServerName(
|
|
7202
|
-
const sessionKey = servername ||
|
|
7793
|
+
servername = servername || options.servername || util.getServerName(host2) || null;
|
|
7794
|
+
const sessionKey = servername || hostname3;
|
|
7203
7795
|
assert(sessionKey);
|
|
7204
7796
|
const session = customSession || sessionCache.get(sessionKey) || null;
|
|
7205
7797
|
port = port || 443;
|
|
@@ -7215,7 +7807,7 @@ var require_connect = __commonJS({
|
|
|
7215
7807
|
socket: httpSocket,
|
|
7216
7808
|
// upgrade socket connection
|
|
7217
7809
|
port,
|
|
7218
|
-
host:
|
|
7810
|
+
host: hostname3
|
|
7219
7811
|
});
|
|
7220
7812
|
socket.on("session", function(session2) {
|
|
7221
7813
|
sessionCache.set(sessionKey, session2);
|
|
@@ -7229,14 +7821,14 @@ var require_connect = __commonJS({
|
|
|
7229
7821
|
...options,
|
|
7230
7822
|
localAddress,
|
|
7231
7823
|
port,
|
|
7232
|
-
host:
|
|
7824
|
+
host: hostname3
|
|
7233
7825
|
});
|
|
7234
7826
|
}
|
|
7235
7827
|
if (options.keepAlive == null || options.keepAlive) {
|
|
7236
7828
|
const keepAliveInitialDelay = options.keepAliveInitialDelay === void 0 ? 6e4 : options.keepAliveInitialDelay;
|
|
7237
7829
|
socket.setKeepAlive(true, keepAliveInitialDelay);
|
|
7238
7830
|
}
|
|
7239
|
-
const clearConnectTimeout = setupConnectTimeout(new WeakRef(socket), { timeout, hostname:
|
|
7831
|
+
const clearConnectTimeout = setupConnectTimeout(new WeakRef(socket), { timeout, hostname: hostname3, port });
|
|
7240
7832
|
socket.setNoDelay(true).once(protocol === "https:" ? "secureConnect" : "connect", function() {
|
|
7241
7833
|
queueMicrotask(clearConnectTimeout);
|
|
7242
7834
|
if (callback) {
|
|
@@ -7307,6 +7899,7 @@ var require_connect = __commonJS({
|
|
|
7307
7899
|
var require_utils = __commonJS({
|
|
7308
7900
|
"node_modules/undici/lib/llhttp/utils.js"(exports2) {
|
|
7309
7901
|
"use strict";
|
|
7902
|
+
init_define_KT_HUB_FILES();
|
|
7310
7903
|
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
7311
7904
|
exports2.enumToMap = void 0;
|
|
7312
7905
|
function enumToMap(obj) {
|
|
@@ -7327,6 +7920,7 @@ var require_utils = __commonJS({
|
|
|
7327
7920
|
var require_constants3 = __commonJS({
|
|
7328
7921
|
"node_modules/undici/lib/llhttp/constants.js"(exports2) {
|
|
7329
7922
|
"use strict";
|
|
7923
|
+
init_define_KT_HUB_FILES();
|
|
7330
7924
|
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
7331
7925
|
exports2.SPECIAL_HEADERS = exports2.HEADER_STATE = exports2.MINOR = exports2.MAJOR = exports2.CONNECTION_TOKEN_CHARS = exports2.HEADER_CHARS = exports2.TOKEN = exports2.STRICT_TOKEN = exports2.HEX = exports2.URL_CHAR = exports2.STRICT_URL_CHAR = exports2.USERINFO_CHARS = exports2.MARK = exports2.ALPHANUM = exports2.NUM = exports2.HEX_MAP = exports2.NUM_MAP = exports2.ALPHA = exports2.FINISH = exports2.H_METHOD_MAP = exports2.METHOD_MAP = exports2.METHODS_RTSP = exports2.METHODS_ICE = exports2.METHODS_HTTP = exports2.METHODS = exports2.LENIENT_FLAGS = exports2.FLAGS = exports2.TYPE = exports2.ERROR = void 0;
|
|
7332
7926
|
var utils_1 = require_utils();
|
|
@@ -7648,6 +8242,7 @@ var require_constants3 = __commonJS({
|
|
|
7648
8242
|
var require_llhttp_wasm = __commonJS({
|
|
7649
8243
|
"node_modules/undici/lib/llhttp/llhttp-wasm.js"(exports2, module2) {
|
|
7650
8244
|
"use strict";
|
|
8245
|
+
init_define_KT_HUB_FILES();
|
|
7651
8246
|
var { Buffer: Buffer2 } = require("node:buffer");
|
|
7652
8247
|
module2.exports = Buffer2.from("AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAX8AYAJ/fwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAy0sBQYAAAIAAAAAAAACAQIAAgICAAADAAAAAAMDAwMBAQEBAQEBAQEAAAIAAAAEBQFwARISBQMBAAIGCAF/AUGA1AQLB9EFIgZtZW1vcnkCAAtfaW5pdGlhbGl6ZQAIGV9faW5kaXJlY3RfZnVuY3Rpb25fdGFibGUBAAtsbGh0dHBfaW5pdAAJGGxsaHR0cF9zaG91bGRfa2VlcF9hbGl2ZQAvDGxsaHR0cF9hbGxvYwALBm1hbGxvYwAxC2xsaHR0cF9mcmVlAAwEZnJlZQAMD2xsaHR0cF9nZXRfdHlwZQANFWxsaHR0cF9nZXRfaHR0cF9tYWpvcgAOFWxsaHR0cF9nZXRfaHR0cF9taW5vcgAPEWxsaHR0cF9nZXRfbWV0aG9kABAWbGxodHRwX2dldF9zdGF0dXNfY29kZQAREmxsaHR0cF9nZXRfdXBncmFkZQASDGxsaHR0cF9yZXNldAATDmxsaHR0cF9leGVjdXRlABQUbGxodHRwX3NldHRpbmdzX2luaXQAFQ1sbGh0dHBfZmluaXNoABYMbGxodHRwX3BhdXNlABcNbGxodHRwX3Jlc3VtZQAYG2xsaHR0cF9yZXN1bWVfYWZ0ZXJfdXBncmFkZQAZEGxsaHR0cF9nZXRfZXJybm8AGhdsbGh0dHBfZ2V0X2Vycm9yX3JlYXNvbgAbF2xsaHR0cF9zZXRfZXJyb3JfcmVhc29uABwUbGxodHRwX2dldF9lcnJvcl9wb3MAHRFsbGh0dHBfZXJybm9fbmFtZQAeEmxsaHR0cF9tZXRob2RfbmFtZQAfEmxsaHR0cF9zdGF0dXNfbmFtZQAgGmxsaHR0cF9zZXRfbGVu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PgtBhwEMPQtBiAEMPAtBiQEMOwtBigEMOgtBiwEMOQtBjAEMOAtBjQEMNwtBjgEMNgtBjwEMNQtBkAEMNAtBkQEMMwtBkgEMMgtBkwEMMQtBlAEMMAtBlQEMLwtBlgEMLgtBlwEMLQtBmAEMLAtBmQEMKwtBmgEMKgtBmwEMKQtBnAEMKAtBnQEMJwtBngEMJgtBnwEMJQtBoAEMJAtBoQEMIwtBogEMIgtBowEMIQtBpAEMIAtBpQEMHwtBpgEMHgtBpwEMHQtBqAEMHAtBqQEMGwtBqgEMGgtBqwEMGQtBrAEMGAtBrQEMFwtBrgEMFgtBAQwVC0GvAQwUC0GwAQwTC0GxAQwSC0GzAQwRC0GyAQwQC0G0AQwPC0G1AQwOC0G2AQwNC0G3AQwMC0G4AQwLC0G5AQwKC0G6AQwJC0G7AQwIC0HGAQwHC0G8AQwGC0G9AQwFC0G+AQwEC0G/AQwDC0HAAQwCC0HCAQwBC0HBAQshAwNAAkACQAJAAkACQAJAAkACQAJAIAICfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAgJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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iQEhAwykAgtBASABLQAAQd8ARw1nGiABQQFqIQEMXgtBigEhAyABIARGDaICIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgNAIAEtAAAgAEGMzwBqLQAARw1kIABBAUYN+gEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMogILQYsBIQMgASAERg2hAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGOzwBqLQAARw1kIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyiAgsgAkEANgIAIAZBAWohAUECDGULQYwBIQMgASAERg2gAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHwzwBqLQAARw1jIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyhAgsgAkEANgIAIAZBAWohAUEfDGQLQY0BIQMgASAERg2fAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHyzwBqLQAARw1iIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAygAgsgAkEANgIAIAZBAWohAUEJDGMLIAEgBEYEQEGOASEDDJ8CCwJAAkAgAS0AAEHJAGsOBwBiYmJiYgFiCyABQQFqIQFB+AAhAwyGAgsgAUEBaiEBQfkAIQMMhQILQY8BIQMgASAERg2dAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGRzwBqLQAARw1gIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyeAgsgAkEANgIAIAZBAWohAUEYDGELQZABIQMgASAERg2cAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGXzwBqLQAARw1fIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAydAgsgAkEANgIAIAZBAWohAUEXDGALQZEBIQMgASAERg2bAiACKAIAIgAgBCABa2ohBSABIABrQQZqIQYCQANAIAEtAAAgAEGazwBqLQAARw1eIABBBkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAycAgsgAkEANgIAIAZBAWohAUEV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JSIARQ0RIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMtAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0gIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMswELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0iIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMsgELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0OIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMsQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0dIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMsAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0fIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMrwELIABBP0cNASABQQFqCyEBQQUhAwyUAQtBACEDIAJBADYCHCACIAE2AhQgAkH9EjYCECACQQc2AgwMrAELIAJBADYCHCACIAE2AhQgAkHcCDYCECACQQc2AgxBACEDDKsBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNByACQeUANgIcIAIgATYCFCACIAA2AgxBACEDDKoBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNFiACQdMANgIcIAIgATYCFCACIAA2AgxBACEDDKkBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNGCACQdIANgIcIAIgATYCFCACIAA2AgxBACEDDKgBCyACQQA2AhwgAiABNgIUIAJBxgo2AhAgAkEHNgIMQQAhAwynAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQMgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwymAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRIgAkHTADYCHCACIAE2AhQgAiAANgIMQQAhAwylAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRQgAkHSADYCHCACIAE2AhQgAiAANgIMQQAhAwykAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQAgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwyjAQtB1QAhAwyJAQsgAEEVRwRAIAJBADYCHCACIAE2AhQgAkG5DTYCECACQRo2AgxB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AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABB5ABrDvQDY2IAAWFhYWFhYQIDBAVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhBgcICQoLDA0OD2FhYWFhEGFhYWFhYWFhYWFhEWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYRITFBUWFxgZGhthYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2YTc4OTphYWFhYWFhYTthYWE8YWFhYT0+P2FhYWFhYWFhQGFhQWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYUJDREVGR0hJSktMTU5PUFFSU2FhYWFhYWFhVFVWV1hZWlthXF1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFeYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhX2BhC0HhJw8LQaQhDwtByywPC0H+MQ8LQcAkDwtBqyQPC0GNKA8LQeImDwtBgDAPC0G5Lw8LQdckDwtB7x8PC0HhHw8LQfofDwtB8iAPC0GoLw8LQa4yDwtBiDAPC0HsJw8LQYIiDwtBjh0PC0HQLg8LQcojDwtBxTIPC0HfHA8LQdIcDwtBxCAPC0HXIA8LQaIfDwtB7S4PC0GrMA8LQdQlDwtBzC4PC0H6Lg8LQfwrDwtB0jAPC0HxHQ8LQbsgDwtB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CABB3AgLii1JbnZhbGlkIGNoYXIgaW4gdXJsIHF1ZXJ5AFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fYm9keQBDb250ZW50LUxlbmd0aCBvdmVyZmxvdwBDaHVuayBzaXplIG92ZXJmbG93AFJlc3BvbnNlIG92ZXJmbG93AEludmFsaWQgbWV0aG9kIGZvciBIVFRQL3gueCByZXF1ZXN0AEludmFsaWQgbWV0aG9kIGZvciBSVFNQL3gueCByZXF1ZXN0AEV4cGVjdGVkIFNPVVJDRSBtZXRob2QgZm9yIElDRS94LnggcmVxdWVzdABJbnZhbGlkIGNoYXIgaW4gdXJsIGZyYWdtZW50IHN0YXJ0AEV4cGVjdGVkIGRvdABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3N0YXR1cwBJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cwBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zAFVzZXIgY2FsbGJhY2sgZXJyb3IAYG9uX3Jlc2V0YCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfaGVhZGVyYCBjYWxsYmFjayBlcnJvcgBgb25fbWVzc2FnZV9iZWdpbmAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3N0YXR1c19jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3ZlcnNpb25fY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl91cmxfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX2hlYWRlcl92YWx1ZV9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX21lc3NhZ2VfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXRob2RfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfZmllbGRfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19leHRlbnNpb25fbmFtZWAgY2FsbGJhY2sgZXJyb3IAVW5leHBlY3RlZCBjaGFyIGluIHVybCBzZXJ2ZXIASW52YWxpZCBoZWFkZXIgdmFsdWUgY2hhcgBJbnZhbGlkIGhlYWRlciBmaWVsZCBjaGFyAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fdmVyc2lvbgBJbnZhbGlkIG1pbm9yIHZlcnNpb24ASW52YWxpZCBtYWpvciB2ZXJzaW9uAEV4cGVjdGVkIHNwYWNlIGFmdGVyIHZlcnNpb24ARXhwZWN0ZWQgQ1JMRiBhZnRlciB2ZXJzaW9uAEludmFsaWQgSFRUUCB2ZXJzaW9uAEludmFsaWQgaGVhZGVyIHRva2VuAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fdXJsAEludmFsaWQgY2hhcmFjdGVycyBpbiB1cmwAVW5leHBlY3RlZCBzdGFydCBjaGFyIGluIHVybABEb3VibGUgQCBpbiB1cmwARW1wdHkgQ29udGVudC1MZW5ndGgASW52YWxpZCBjaGFyYWN0ZXIgaW4gQ29udGVudC1MZW5ndGgARHVwbGljYXRlIENvbnRlbnQtTGVuZ3RoAEludmFsaWQgY2hhciBpbiB1cmwgcGF0aABDb250ZW50LUxlbmd0aCBjYW4ndCBiZSBwcmVzZW50IHdpdGggVHJhbnNmZXItRW5jb2RpbmcASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgc2l6ZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2hlYWRlcl92YWx1ZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgTEYgYWZ0ZXIgaGVhZGVyIHZhbHVlAEludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYCBoZWFkZXIgdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZSB2YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHF1b3RlZCB2YWx1ZQBQYXVzZWQgYnkgb25faGVhZGVyc19jb21wbGV0ZQBJbnZhbGlkIEVPRiBzdGF0ZQBvbl9yZXNldCBwYXVzZQBvbl9jaHVua19oZWFkZXIgcGF1c2UAb25fbWVzc2FnZV9iZWdpbiBwYXVzZQBvbl9jaHVua19leHRlbnNpb25fdmFsdWUgcGF1c2UAb25fc3RhdHVzX2NvbXBsZXRlIHBhdXNlAG9uX3ZlcnNpb25fY29tcGxldGUgcGF1c2UAb25fdXJsX2NvbXBsZXRlIHBhdXNlAG9uX2NodW5rX2NvbXBsZXRlIHBhdXNlAG9uX2hlYWRlcl92YWx1ZV9jb21wbGV0ZSBwYXVzZQBvbl9tZXNzYWdlX2NvbXBsZXRlIHBhdXNlAG9uX21ldGhvZF9jb21wbGV0ZSBwYXVzZQBvbl9oZWFkZXJfZmllbGRfY29tcGxldGUgcGF1c2UAb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUgcGF1c2UAVW5leHBlY3RlZCBzcGFjZSBhZnRlciBzdGFydCBsaW5lAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBuYW1lAFBhdXNlIG9uIENPTk5FQ1QvVXBncmFkZQBQYXVzZSBvbiBQUkkvVXBncmFkZQBFeHBlY3RlZCBIVFRQLzIgQ29ubmVjdGlvbiBQcmVmYWNlAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fbWV0aG9kAEV4cGVjdGVkIHNwYWNlIGFmdGVyIG1ldGhvZABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2hlYWRlcl9maWVsZABQYXVzZWQASW52YWxpZCB3b3JkIGVuY291bnRlcmVkAEludmFsaWQgbWV0aG9kIGVuY291bnRlcmVkAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2NoZW1hAFJlcXVlc3QgaGFzIGludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYABTV0lUQ0hfUFJPWFkAVVNFX1BST1hZAE1LQUNUSVZJVFkAVU5QUk9DRVNTQUJMRV9FTlRJVFkAQ09QWQBNT1ZFRF9QRVJNQU5FTlRMWQBUT09fRUFSTFkATk9USUZZAEZBSUxFRF9ERVBFTkRFTkNZAEJBRF9HQVRFV0FZAFBMQVkAUFVUAENIRUNLT1VUAEdBVEVXQVlfVElNRU9VVABSRVFVRVNUX1RJTUVPVVQATkVUV09SS19DT05ORUNUX1RJTUVPVVQAQ09OTkVDVElPTl9USU1FT1VUAExPR0lOX1RJTUVPVVQATkVUV09SS19SRUFEX1RJTUVPVVQAUE9TVABNSVNESVJFQ1RFRF9SRVFVRVNUAENMSUVOVF9DTE9TRURfUkVRVUVTVABDTElFTlRfQ0xPU0VEX0xPQURfQkFMQU5DRURfUkVRVUVTVABCQURfUkVRVUVTVABIVFRQX1JFUVVFU1RfU0VOVF9UT19IVFRQU19QT1JUAFJFUE9SVABJTV9BX1RFQVBPVABSRVNFVF9DT05URU5UAE5PX0NPTlRFTlQAUEFSVElBTF9DT05URU5UAEhQRV9JTlZBTElEX0NPTlNUQU5UAEhQRV9DQl9SRVNFVABHRVQASFBFX1NUUklDVABDT05GTElDVABURU1QT1JBUllfUkVESVJFQ1QAUEVSTUFORU5UX1JFRElSRUNUAENPTk5FQ1QATVVMVElfU1RBVFVTAEhQRV9JTlZBTElEX1NUQVRVUwBUT09fTUFOWV9SRVFVRVNUUwBFQVJMWV9ISU5UUwBVTkFWQUlMQUJMRV9GT1JfTEVHQUxfUkVBU09OUwBPUFRJT05TAFNXSVRDSElOR19QUk9UT0NPTFMAVkFSSUFOVF9BTFNPX05FR09USUFURVMATVVMVElQTEVfQ0hPSUNFUwBJTlRFUk5BTF9TRVJWRVJfRVJST1IAV0VCX1NFUlZFUl9VTktOT1dOX0VSUk9SAFJBSUxHVU5fRVJST1IASURFTlRJVFlfUFJPVklERVJfQVVUSEVOVElDQVRJT05fRVJST1IAU1NMX0NFUlRJRklDQVRFX0VSUk9SAElOVkFMSURfWF9GT1JXQVJERURfRk9SAFNFVF9QQVJBTUVURVIAR0VUX1BBUkFNRVRFUgBIUEVfVVNFUgBTRUVfT1RIRVIASFBFX0NCX0NIVU5LX0hFQURFUgBNS0NBTEVOREFSAFNFVFVQAFdFQl9TRVJWRVJfSVNfRE9XTgBURUFSRE9XTgBIUEVfQ0xPU0VEX0NPTk5FQ1RJT04ASEVVUklTVElDX0VYUElSQVRJT04ARElTQ09OTkVDVEVEX09QRVJBVElPTgBOT05fQVVUSE9SSVRBVElWRV9JTkZPUk1BVElPTgBIUEVfSU5WQUxJRF9WRVJTSU9OAEhQRV9DQl9NRVNTQUdFX0JFR0lOAFNJVEVfSVNfRlJPWkVOAEhQRV9JTlZBTElEX0hFQURFUl9UT0tFTgBJTlZBTElEX1RPS0VOAEZPUkJJRERFTgBFTkhBTkNFX1lPVVJfQ0FMTQBIUEVfSU5WQUxJRF9VUkwAQkxPQ0tFRF9CWV9QQVJFTlRBTF9DT05UUk9MAE1LQ09MAEFDTABIUEVfSU5URVJOQUwAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRV9VTk9GRklDSUFMAEhQRV9PSwBVTkxJTksAVU5MT0NLAFBSSQBSRVRSWV9XSVRIAEhQRV9JTlZBTElEX0NPTlRFTlRfTEVOR1RIAEhQRV9VTkVYUEVDVEVEX0NPTlRFTlRfTEVOR1RIAEZMVVNIAFBST1BQQVRDSABNLVNFQVJDSABVUklfVE9PX0xPTkcAUFJPQ0VTU0lORwBNSVNDRUxMQU5FT1VTX1BFUlNJU1RFTlRfV0FSTklORwBNSVNDRUxMQU5FT1VTX1dBUk5JTkcASFBFX0lOVkFMSURfVFJBTlNGRVJfRU5DT0RJTkcARXhwZWN0ZWQgQ1JMRgBIUEVfSU5WQUxJRF9DSFVOS19TSVpFAE1PVkUAQ09OVElOVUUASFBFX0NCX1NUQVRVU19DT01QTEVURQBIUEVfQ0JfSEVBREVSU19DT01QTEVURQBIUEVfQ0JfVkVSU0lPTl9DT01QTEVURQBIUEVfQ0JfVVJMX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19DT01QTEVURQBIUEVfQ0JfSEVBREVSX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fVkFMVUVfQ09NUExFVEUASFBFX0NCX0NIVU5LX0VYVEVOU0lPTl9OQU1FX0NPTVBMRVRFAEhQRV9DQl9NRVNTQUdFX0NPTVBMRVRFAEhQRV9DQl9NRVRIT0RfQ09NUExFVEUASFBFX0NCX0hFQURFUl9GSUVMRF9DT01QTEVURQBERUxFVEUASFBFX0lOVkFMSURfRU9GX1NUQVRFAElOVkFMSURfU1NMX0NFUlRJRklDQVRFAFBBVVNFAE5PX1JFU1BPTlNFAFVOU1VQUE9SVEVEX01FRElBX1RZUEUAR09ORQBOT1RfQUNDRVBUQUJMRQBTRVJWSUNFX1VOQVZBSUxBQkxFAFJBTkdFX05PVF9TQVRJU0ZJQUJMRQBPUklHSU5fSVNfVU5SRUFDSEFCTEUAUkVTUE9OU0VfSVNfU1RBTEUAUFVSR0UATUVSR0UAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRQBSRVFVRVNUX0hFQURFUl9UT09fTEFSR0UAUEFZTE9BRF9UT09fTEFSR0UASU5TVUZGSUNJRU5UX1NUT1JBR0UASFBFX1BBVVNFRF9VUEdSQURFAEhQRV9QQVVTRURfSDJfVVBHUkFERQBTT1VSQ0UAQU5OT1VOQ0UAVFJBQ0UASFBFX1VORVhQRUNURURfU1BBQ0UAREVTQ1JJQkUAVU5TVUJTQ1JJQkUAUkVDT1JEAEhQRV9JTlZBTElEX01FVEhPRABOT1RfRk9VTkQAUFJPUEZJTkQAVU5CSU5EAFJFQklORABVTkFVVEhPUklaRUQATUVUSE9EX05PVF9BTExPV0VEAEhUVFBfVkVSU0lPTl9OT1RfU1VQUE9SVEVEAEFMUkVBRFlfUkVQT1JURUQAQUNDRVBURUQATk9UX0lNUExFTUVOVEVEAExPT1BfREVURUNURUQASFBFX0NSX0VYUEVDVEVEAEhQRV9MRl9FWFBFQ1RFRABDUkVBVEVEAElNX1VTRUQASFBFX1BBVVNFRABUSU1FT1VUX09DQ1VSRUQAUEFZTUVOVF9SRVFVSVJFRABQUkVDT05ESVRJT05fUkVRVUlSRUQAUFJPWFlfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATkVUV09SS19BVVRIRU5USUNBVElPTl9SRVFVSVJFRABMRU5HVEhfUkVRVUlSRUQAU1NMX0NFUlRJRklDQVRFX1JFUVVJUkVEAFVQR1JBREVfUkVRVUlSRUQAUEFHRV9FWFBJUkVEAFBSRUNPTkRJVElPTl9GQUlMRUQARVhQRUNUQVRJT05fRkFJTEVEAFJFVkFMSURBVElPTl9GQUlMRUQAU1NMX0hBTkRTSEFLRV9GQUlMRUQATE9DS0VEAFRSQU5TRk9STUFUSU9OX0FQUExJRUQATk9UX01PRElGSUVEAE5PVF9FWFRFTkRFRABCQU5EV0lEVEhfTElNSVRfRVhDRUVERUQAU0lURV9JU19PVkVSTE9BREVEAEhFQUQARXhwZWN0ZWQgSFRUUC8AAF4TAAAmEwAAMBAAAPAXAACdEwAAFRIAADkXAADwEgAAChAAAHUSAACtEgAAghMAAE8UAAB/EAAAoBUAACMUAACJEgAAixQAAE0VAADUEQAAzxQAABAYAADJFgAA3BYAAMERAADgFwAAuxQAAHQUAAB8FQAA5RQAAAgXAAAfEAAAZRUAAKMUAAAoFQAAAhUAAJkVAAAsEAAAixkAAE8PAADUDgAAahAAAM4QAAACFwAAiQ4AAG4TAAAcEwAAZhQAAFYXAADBEwAAzRMAAGwTAABoFwAAZhcAAF8XAAAiEwAAzg8AAGkOAADYDgAAYxYAAMsTAACqDgAAKBcAACYXAADFEwAAXRYAAOgRAABnEwAAZRMAAPIWAABzEwAAHRcAAPkWAADzEQAAzw4AAM4VAAAMEgAAsxEAAKURAABhEAAAMhcAALsTAEH5NQsBAQBBkDYL4AEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB/TcLAQEAQZE4C14CAwICAgICAAACAgACAgACAgICAgICAgICAAQAAAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgACAEH9OQsBAQBBkToLXgIAAgICAgIAAAICAAICAAICAgICAgICAgIAAwAEAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgIAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgACAAIAQfA7Cw1sb3NlZWVwLWFsaXZlAEGJPAsBAQBBoDwL4AEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBiT4LAQEAQaA+C+cBAQEBAQEBAQEBAQEBAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQFjaHVua2VkAEGwwAALXwEBAAEBAQEBAAABAQABAQABAQEBAQEBAQEBAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAEGQwgALIWVjdGlvbmVudC1sZW5ndGhvbnJveHktY29ubmVjdGlvbgBBwMIACy1yYW5zZmVyLWVuY29kaW5ncGdyYWRlDQoNCg0KU00NCg0KVFRQL0NFL1RTUC8AQfnCAAsFAQIAAQMAQZDDAAvgAQQBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAEH5xAALBQECAAEDAEGQxQAL4AEEAQEFAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+cYACwQBAAABAEGRxwAL3wEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAEH6yAALBAEAAAIAQZDJAAtfAwQAAAQEBAQEBAQEBAQEBQQEBAQEBAQEBAQEBAAEAAYHBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQAQfrKAAsEAQAAAQBBkMsACwEBAEGqywALQQIAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAEH6zAALBAEAAAEAQZDNAAsBAQBBms0ACwYCAAAAAAIAQbHNAAs6AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBB8M4AC5YBTk9VTkNFRUNLT1VUTkVDVEVURUNSSUJFTFVTSEVURUFEU0VBUkNIUkdFQ1RJVklUWUxFTkRBUlZFT1RJRllQVElPTlNDSFNFQVlTVEFUQ0hHRU9SRElSRUNUT1JUUkNIUEFSQU1FVEVSVVJDRUJTQ1JJQkVBUkRPV05BQ0VJTkROS0NLVUJTQ1JJQkVIVFRQL0FEVFAv", "base64");
|
|
7653
8248
|
}
|
|
@@ -7657,6 +8252,7 @@ var require_llhttp_wasm = __commonJS({
|
|
|
7657
8252
|
var require_llhttp_simd_wasm = __commonJS({
|
|
7658
8253
|
"node_modules/undici/lib/llhttp/llhttp_simd-wasm.js"(exports2, module2) {
|
|
7659
8254
|
"use strict";
|
|
8255
|
+
init_define_KT_HUB_FILES();
|
|
7660
8256
|
var { Buffer: Buffer2 } = require("node:buffer");
|
|
7661
8257
|
module2.exports = Buffer2.from("AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAX8AYAJ/fwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAy0sBQYAAAIAAAAAAAACAQIAAgICAAADAAAAAAMDAwMBAQEBAQEBAQEAAAIAAAAEBQFwARISBQMBAAIGCAF/AUGA1AQLB9EFIgZtZW1vcnkCAAtfaW5pdGlhbGl6ZQAIGV9faW5kaXJlY3RfZnVuY3Rpb25fdGFibGUBAAtsbGh0dHBfaW5pdAAJGGxsaHR0cF9zaG91bGRfa2VlcF9hbGl2ZQAvDGxsaHR0cF9hbGxvYwALBm1hbGxvYwAxC2xsaHR0cF9mcmVlAAwEZnJlZQAMD2xsaHR0cF9nZXRfdHlwZQANFWxsaHR0cF9nZXRfaHR0cF9tYWpvcgAOFWxsaHR0cF9nZXRfaHR0cF9taW5vcgAPEWxsaHR0cF9nZXRfbWV0aG9kABAWbGxodHRwX2dldF9zdGF0dXNfY29kZQAREmxsaHR0cF9nZXRfdXBncmFkZQASDGxsaHR0cF9yZXNldAATDmxsaHR0cF9leGVjdXRlABQUbGxodHRwX3NldHRpbmdzX2luaXQAFQ1sbGh0dHBfZmluaXNoABYMbGxodHRwX3BhdXNlABcNbGxodHRwX3Jlc3VtZQAYG2xsaHR0cF9yZXN1bWVfYWZ0ZXJfdXBncmFkZQAZEGxsaHR0cF9nZXRfZXJybm8AGhdsbGh0dHBfZ2V0X2Vycm9yX3JlYXNvbgAbF2xsaHR0cF9zZXRfZXJyb3JfcmVhc29uABwUbGxodHRwX2dldF9lcnJvcl9wb3MAHRFsbGh0dHBfZXJybm9fbmFtZQAeEmxsaHR0cF9tZXRob2RfbmFtZQAfEmxsaHR0cF9zdGF0dXNfbmFtZQAgGmxsaHR0cF9zZXRfbGVu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PgtBhwEMPQtBiAEMPAtBiQEMOwtBigEMOgtBiwEMOQtBjAEMOAtBjQEMNwtBjgEMNgtBjwEMNQtBkAEMNAtBkQEMMwtBkgEMMgtBkwEMMQtBlAEMMAtBlQEMLwtBlgEMLgtBlwEMLQtBmAEMLAtBmQEMKwtBmgEMKgtBmwEMKQtBnAEMKAtBnQEMJwtBngEMJgtBnwEMJQtBoAEMJAtBoQEMIwtBogEMIgtBowEMIQtBpAEMIAtBpQEMHwtBpgEMHgtBpwEMHQtBqAEMHAtBqQEMGwtBqgEMGgtBqwEMGQtBrAEMGAtBrQEMFwtBrgEMFgtBAQwVC0GvAQwUC0GwAQwTC0GxAQwSC0GzAQwRC0GyAQwQC0G0AQwPC0G1AQwOC0G2AQwNC0G3AQwMC0G4AQwLC0G5AQwKC0G6AQwJC0G7AQwIC0HGAQwHC0G8AQwGC0G9AQwFC0G+AQwEC0G/AQwDC0HAAQwCC0HCAQwBC0HBAQshAwNAAkACQAJAAkACQAJAAkACQAJAIAICfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAgJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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iQEhAwykAgtBASABLQAAQd8ARw1nGiABQQFqIQEMXgtBigEhAyABIARGDaICIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgNAIAEtAAAgAEGMzwBqLQAARw1kIABBAUYN+gEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMogILQYsBIQMgASAERg2hAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGOzwBqLQAARw1kIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyiAgsgAkEANgIAIAZBAWohAUECDGULQYwBIQMgASAERg2gAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHwzwBqLQAARw1jIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyhAgsgAkEANgIAIAZBAWohAUEfDGQLQY0BIQMgASAERg2fAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHyzwBqLQAARw1iIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAygAgsgAkEANgIAIAZBAWohAUEJDGMLIAEgBEYEQEGOASEDDJ8CCwJAAkAgAS0AAEHJAGsOBwBiYmJiYgFiCyABQQFqIQFB+AAhAwyGAgsgAUEBaiEBQfkAIQMMhQILQY8BIQMgASAERg2dAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGRzwBqLQAARw1gIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyeAgsgAkEANgIAIAZBAWohAUEYDGELQZABIQMgASAERg2cAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGXzwBqLQAARw1fIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAydAgsgAkEANgIAIAZBAWohAUEXDGALQZEBIQMgASAERg2bAiACKAIAIgAgBCABa2ohBSABIABrQQZqIQYCQANAIAEtAAAgAEGazwBqLQAARw1eIABBBkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAycAgsgAkEANgIAIAZBAWohAUEV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JSIARQ0RIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMtAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0gIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMswELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0iIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMsgELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0OIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMsQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0dIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMsAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0fIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMrwELIABBP0cNASABQQFqCyEBQQUhAwyUAQtBACEDIAJBADYCHCACIAE2AhQgAkH9EjYCECACQQc2AgwMrAELIAJBADYCHCACIAE2AhQgAkHcCDYCECACQQc2AgxBACEDDKsBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNByACQeUANgIcIAIgATYCFCACIAA2AgxBACEDDKoBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNFiACQdMANgIcIAIgATYCFCACIAA2AgxBACEDDKkBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNGCACQdIANgIcIAIgATYCFCACIAA2AgxBACEDDKgBCyACQQA2AhwgAiABNgIUIAJBxgo2AhAgAkEHNgIMQQAhAwynAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQMgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwymAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRIgAkHTADYCHCACIAE2AhQgAiAANgIMQQAhAwylAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRQgAkHSADYCHCACIAE2AhQgAiAANgIMQQAhAwykAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQAgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwyjAQtB1QAhAwyJAQsgAEEVRwRAIAJBADYCHCACIAE2AhQgAkG5DTYCECACQRo2AgxB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AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABB5ABrDvQDY2IAAWFhYWFhYQIDBAVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhBgcICQoLDA0OD2FhYWFhEGFhYWFhYWFhYWFhEWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYRITFBUWFxgZGhthYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2YTc4OTphYWFhYWFhYTthYWE8YWFhYT0+P2FhYWFhYWFhQGFhQWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYUJDREVGR0hJSktMTU5PUFFSU2FhYWFhYWFhVFVWV1hZWlthXF1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFeYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhX2BhC0HhJw8LQaQhDwtByywPC0H+MQ8LQcAkDwtBqyQPC0GNKA8LQeImDwtBgDAPC0G5Lw8LQdckDwtB7x8PC0HhHw8LQfofDwtB8iAPC0GoLw8LQa4yDwtBiDAPC0HsJw8LQYIiDwtBjh0PC0HQLg8LQcojDwtBxTIPC0HfHA8LQdIcDwtBxCAPC0HXIA8LQaIfDwtB7S4PC0GrMA8LQdQlDwtBzC4PC0H6Lg8LQfwrDwtB0jAPC0HxHQ8LQbsgDwtB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AAADAEGUCAsFBAAAAAUAQaQICwkGAAAABwAAAAgAQdwIC4otSW52YWxpZCBjaGFyIGluIHVybCBxdWVyeQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2JvZHkAQ29udGVudC1MZW5ndGggb3ZlcmZsb3cAQ2h1bmsgc2l6ZSBvdmVyZmxvdwBSZXNwb25zZSBvdmVyZmxvdwBJbnZhbGlkIG1ldGhvZCBmb3IgSFRUUC94LnggcmVxdWVzdABJbnZhbGlkIG1ldGhvZCBmb3IgUlRTUC94LnggcmVxdWVzdABFeHBlY3RlZCBTT1VSQ0UgbWV0aG9kIGZvciBJQ0UveC54IHJlcXVlc3QASW52YWxpZCBjaGFyIGluIHVybCBmcmFnbWVudCBzdGFydABFeHBlY3RlZCBkb3QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9zdGF0dXMASW52YWxpZCByZXNwb25zZSBzdGF0dXMASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucwBVc2VyIGNhbGxiYWNrIGVycm9yAGBvbl9yZXNldGAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2hlYWRlcmAgY2FsbGJhY2sgZXJyb3IAYG9uX21lc3NhZ2VfYmVnaW5gIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19leHRlbnNpb25fdmFsdWVgIGNhbGxiYWNrIGVycm9yAGBvbl9zdGF0dXNfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl92ZXJzaW9uX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fdXJsX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fbWV0aG9kX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX25hbWVgIGNhbGxiYWNrIGVycm9yAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2VydmVyAEludmFsaWQgaGVhZGVyIHZhbHVlIGNoYXIASW52YWxpZCBoZWFkZXIgZmllbGQgY2hhcgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3ZlcnNpb24ASW52YWxpZCBtaW5vciB2ZXJzaW9uAEludmFsaWQgbWFqb3IgdmVyc2lvbgBFeHBlY3RlZCBzcGFjZSBhZnRlciB2ZXJzaW9uAEV4cGVjdGVkIENSTEYgYWZ0ZXIgdmVyc2lvbgBJbnZhbGlkIEhUVFAgdmVyc2lvbgBJbnZhbGlkIGhlYWRlciB0b2tlbgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3VybABJbnZhbGlkIGNoYXJhY3RlcnMgaW4gdXJsAFVuZXhwZWN0ZWQgc3RhcnQgY2hhciBpbiB1cmwARG91YmxlIEAgaW4gdXJsAEVtcHR5IENvbnRlbnQtTGVuZ3RoAEludmFsaWQgY2hhcmFjdGVyIGluIENvbnRlbnQtTGVuZ3RoAER1cGxpY2F0ZSBDb250ZW50LUxlbmd0aABJbnZhbGlkIGNoYXIgaW4gdXJsIHBhdGgAQ29udGVudC1MZW5ndGggY2FuJ3QgYmUgcHJlc2VudCB3aXRoIFRyYW5zZmVyLUVuY29kaW5nAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIHNpemUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfdmFsdWUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9jaHVua19leHRlbnNpb25fdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyB2YWx1ZQBNaXNzaW5nIGV4cGVjdGVkIExGIGFmdGVyIGhlYWRlciB2YWx1ZQBJbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AgaGVhZGVyIHZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGUgdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZWQgdmFsdWUAUGF1c2VkIGJ5IG9uX2hlYWRlcnNfY29tcGxldGUASW52YWxpZCBFT0Ygc3RhdGUAb25fcmVzZXQgcGF1c2UAb25fY2h1bmtfaGVhZGVyIHBhdXNlAG9uX21lc3NhZ2VfYmVnaW4gcGF1c2UAb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlIHBhdXNlAG9uX3N0YXR1c19jb21wbGV0ZSBwYXVzZQBvbl92ZXJzaW9uX2NvbXBsZXRlIHBhdXNlAG9uX3VybF9jb21wbGV0ZSBwYXVzZQBvbl9jaHVua19jb21wbGV0ZSBwYXVzZQBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGUgcGF1c2UAb25fbWVzc2FnZV9jb21wbGV0ZSBwYXVzZQBvbl9tZXRob2RfY29tcGxldGUgcGF1c2UAb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlIHBhdXNlAG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lIHBhdXNlAFVuZXhwZWN0ZWQgc3BhY2UgYWZ0ZXIgc3RhcnQgbGluZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgbmFtZQBQYXVzZSBvbiBDT05ORUNUL1VwZ3JhZGUAUGF1c2Ugb24gUFJJL1VwZ3JhZGUARXhwZWN0ZWQgSFRUUC8yIENvbm5lY3Rpb24gUHJlZmFjZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX21ldGhvZABFeHBlY3RlZCBzcGFjZSBhZnRlciBtZXRob2QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfZmllbGQAUGF1c2VkAEludmFsaWQgd29yZCBlbmNvdW50ZXJlZABJbnZhbGlkIG1ldGhvZCBlbmNvdW50ZXJlZABVbmV4cGVjdGVkIGNoYXIgaW4gdXJsIHNjaGVtYQBSZXF1ZXN0IGhhcyBpbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AAU1dJVENIX1BST1hZAFVTRV9QUk9YWQBNS0FDVElWSVRZAFVOUFJPQ0VTU0FCTEVfRU5USVRZAENPUFkATU9WRURfUEVSTUFORU5UTFkAVE9PX0VBUkxZAE5PVElGWQBGQUlMRURfREVQRU5ERU5DWQBCQURfR0FURVdBWQBQTEFZAFBVVABDSEVDS09VVABHQVRFV0FZX1RJTUVPVVQAUkVRVUVTVF9USU1FT1VUAE5FVFdPUktfQ09OTkVDVF9USU1FT1VUAENPTk5FQ1RJT05fVElNRU9VVABMT0dJTl9USU1FT1VUAE5FVFdPUktfUkVBRF9USU1FT1VUAFBPU1QATUlTRElSRUNURURfUkVRVUVTVABDTElFTlRfQ0xPU0VEX1JFUVVFU1QAQ0xJRU5UX0NMT1NFRF9MT0FEX0JBTEFOQ0VEX1JFUVVFU1QAQkFEX1JFUVVFU1QASFRUUF9SRVFVRVNUX1NFTlRfVE9fSFRUUFNfUE9SVABSRVBPUlQASU1fQV9URUFQT1QAUkVTRVRfQ09OVEVOVABOT19DT05URU5UAFBBUlRJQUxfQ09OVEVOVABIUEVfSU5WQUxJRF9DT05TVEFOVABIUEVfQ0JfUkVTRVQAR0VUAEhQRV9TVFJJQ1QAQ09ORkxJQ1QAVEVNUE9SQVJZX1JFRElSRUNUAFBFUk1BTkVOVF9SRURJUkVDVABDT05ORUNUAE1VTFRJX1NUQVRVUwBIUEVfSU5WQUxJRF9TVEFUVVMAVE9PX01BTllfUkVRVUVTVFMARUFSTFlfSElOVFMAVU5BVkFJTEFCTEVfRk9SX0xFR0FMX1JFQVNPTlMAT1BUSU9OUwBTV0lUQ0hJTkdfUFJPVE9DT0xTAFZBUklBTlRfQUxTT19ORUdPVElBVEVTAE1VTFRJUExFX0NIT0lDRVMASU5URVJOQUxfU0VSVkVSX0VSUk9SAFdFQl9TRVJWRVJfVU5LTk9XTl9FUlJPUgBSQUlMR1VOX0VSUk9SAElERU5USVRZX1BST1ZJREVSX0FVVEhFTlRJQ0FUSU9OX0VSUk9SAFNTTF9DRVJUSUZJQ0FURV9FUlJPUgBJTlZBTElEX1hfRk9SV0FSREVEX0ZPUgBTRVRfUEFSQU1FVEVSAEdFVF9QQVJBTUVURVIASFBFX1VTRVIAU0VFX09USEVSAEhQRV9DQl9DSFVOS19IRUFERVIATUtDQUxFTkRBUgBTRVRVUABXRUJfU0VSVkVSX0lTX0RPV04AVEVBUkRPV04ASFBFX0NMT1NFRF9DT05ORUNUSU9OAEhFVVJJU1RJQ19FWFBJUkFUSU9OAERJU0NPTk5FQ1RFRF9PUEVSQVRJT04ATk9OX0FVVEhPUklUQVRJVkVfSU5GT1JNQVRJT04ASFBFX0lOVkFMSURfVkVSU0lPTgBIUEVfQ0JfTUVTU0FHRV9CRUdJTgBTSVRFX0lTX0ZST1pFTgBIUEVfSU5WQUxJRF9IRUFERVJfVE9LRU4ASU5WQUxJRF9UT0tFTgBGT1JCSURERU4ARU5IQU5DRV9ZT1VSX0NBTE0ASFBFX0lOVkFMSURfVVJMAEJMT0NLRURfQllfUEFSRU5UQUxfQ09OVFJPTABNS0NPTABBQ0wASFBFX0lOVEVSTkFMAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0VfVU5PRkZJQ0lBTABIUEVfT0sAVU5MSU5LAFVOTE9DSwBQUkkAUkVUUllfV0lUSABIUEVfSU5WQUxJRF9DT05URU5UX0xFTkdUSABIUEVfVU5FWFBFQ1RFRF9DT05URU5UX0xFTkdUSABGTFVTSABQUk9QUEFUQ0gATS1TRUFSQ0gAVVJJX1RPT19MT05HAFBST0NFU1NJTkcATUlTQ0VMTEFORU9VU19QRVJTSVNURU5UX1dBUk5JTkcATUlTQ0VMTEFORU9VU19XQVJOSU5HAEhQRV9JTlZBTElEX1RSQU5TRkVSX0VOQ09ESU5HAEV4cGVjdGVkIENSTEYASFBFX0lOVkFMSURfQ0hVTktfU0laRQBNT1ZFAENPTlRJTlVFAEhQRV9DQl9TVEFUVVNfQ09NUExFVEUASFBFX0NCX0hFQURFUlNfQ09NUExFVEUASFBFX0NCX1ZFUlNJT05fQ09NUExFVEUASFBFX0NCX1VSTF9DT01QTEVURQBIUEVfQ0JfQ0hVTktfQ09NUExFVEUASFBFX0NCX0hFQURFUl9WQUxVRV9DT01QTEVURQBIUEVfQ0JfQ0hVTktfRVhURU5TSU9OX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fTkFNRV9DT01QTEVURQBIUEVfQ0JfTUVTU0FHRV9DT01QTEVURQBIUEVfQ0JfTUVUSE9EX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJfRklFTERfQ09NUExFVEUAREVMRVRFAEhQRV9JTlZBTElEX0VPRl9TVEFURQBJTlZBTElEX1NTTF9DRVJUSUZJQ0FURQBQQVVTRQBOT19SRVNQT05TRQBVTlNVUFBPUlRFRF9NRURJQV9UWVBFAEdPTkUATk9UX0FDQ0VQVEFCTEUAU0VSVklDRV9VTkFWQUlMQUJMRQBSQU5HRV9OT1RfU0FUSVNGSUFCTEUAT1JJR0lOX0lTX1VOUkVBQ0hBQkxFAFJFU1BPTlNFX0lTX1NUQUxFAFBVUkdFAE1FUkdFAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0UAUkVRVUVTVF9IRUFERVJfVE9PX0xBUkdFAFBBWUxPQURfVE9PX0xBUkdFAElOU1VGRklDSUVOVF9TVE9SQUdFAEhQRV9QQVVTRURfVVBHUkFERQBIUEVfUEFVU0VEX0gyX1VQR1JBREUAU09VUkNFAEFOTk9VTkNFAFRSQUNFAEhQRV9VTkVYUEVDVEVEX1NQQUNFAERFU0NSSUJFAFVOU1VCU0NSSUJFAFJFQ09SRABIUEVfSU5WQUxJRF9NRVRIT0QATk9UX0ZPVU5EAFBST1BGSU5EAFVOQklORABSRUJJTkQAVU5BVVRIT1JJWkVEAE1FVEhPRF9OT1RfQUxMT1dFRABIVFRQX1ZFUlNJT05fTk9UX1NVUFBPUlRFRABBTFJFQURZX1JFUE9SVEVEAEFDQ0VQVEVEAE5PVF9JTVBMRU1FTlRFRABMT09QX0RFVEVDVEVEAEhQRV9DUl9FWFBFQ1RFRABIUEVfTEZfRVhQRUNURUQAQ1JFQVRFRABJTV9VU0VEAEhQRV9QQVVTRUQAVElNRU9VVF9PQ0NVUkVEAFBBWU1FTlRfUkVRVUlSRUQAUFJFQ09ORElUSU9OX1JFUVVJUkVEAFBST1hZX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEAE5FVFdPUktfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATEVOR1RIX1JFUVVJUkVEAFNTTF9DRVJUSUZJQ0FURV9SRVFVSVJFRABVUEdSQURFX1JFUVVJUkVEAFBBR0VfRVhQSVJFRABQUkVDT05ESVRJT05fRkFJTEVEAEVYUEVDVEFUSU9OX0ZBSUxFRABSRVZBTElEQVRJT05fRkFJTEVEAFNTTF9IQU5EU0hBS0VfRkFJTEVEAExPQ0tFRABUUkFOU0ZPUk1BVElPTl9BUFBMSUVEAE5PVF9NT0RJRklFRABOT1RfRVhURU5ERUQAQkFORFdJRFRIX0xJTUlUX0VYQ0VFREVEAFNJVEVfSVNfT1ZFUkxPQURFRABIRUFEAEV4cGVjdGVkIEhUVFAvAABeEwAAJhMAADAQAADwFwAAnRMAABUSAAA5FwAA8BIAAAoQAAB1EgAArRIAAIITAABPFAAAfxAAAKAVAAAjFAAAiRIAAIsUAABNFQAA1BEAAM8UAAAQGAAAyRYAANwWAADBEQAA4BcAALsUAAB0FAAAfBUAAOUUAAAIFwAAHxAAAGUVAACjFAAAKBUAAAIVAACZFQAALBAAAIsZAABPDwAA1A4AAGoQAADOEAAAAhcAAIkOAABuEwAAHBMAAGYUAABWFwAAwRMAAM0TAABsEwAAaBcAAGYXAABfFwAAIhMAAM4PAABpDgAA2A4AAGMWAADLEwAAqg4AACgXAAAmFwAAxRMAAF0WAADoEQAAZxMAAGUTAADyFgAAcxMAAB0XAAD5FgAA8xEAAM8OAADOFQAADBIAALMRAAClEQAAYRAAADIXAAC7EwBB+TULAQEAQZA2C+ABAQECAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQf03CwEBAEGROAteAgMCAgICAgAAAgIAAgIAAgICAgICAgICAgAEAAAAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAIAAgBB/TkLAQEAQZE6C14CAAICAgICAAACAgACAgACAgICAgICAgICAAMABAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgACAEHwOwsNbG9zZWVlcC1hbGl2ZQBBiTwLAQEAQaA8C+ABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQYk+CwEBAEGgPgvnAQEBAQEBAQEBAQEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBY2h1bmtlZABBsMAAC18BAQABAQEBAQAAAQEAAQEAAQEBAQEBAQEBAQAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQBBkMIACyFlY3Rpb25lbnQtbGVuZ3Rob25yb3h5LWNvbm5lY3Rpb24AQcDCAAstcmFuc2Zlci1lbmNvZGluZ3BncmFkZQ0KDQoNClNNDQoNClRUUC9DRS9UU1AvAEH5wgALBQECAAEDAEGQwwAL4AEEAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+cQACwUBAgABAwBBkMUAC+ABBAEBBQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQfnGAAsEAQAAAQBBkccAC98BAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+sgACwQBAAACAEGQyQALXwMEAAAEBAQEBAQEBAQEBAUEBAQEBAQEBAQEBAQABAAGBwQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEAEH6ygALBAEAAAEAQZDLAAsBAQBBqssAC0ECAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBB+swACwQBAAABAEGQzQALAQEAQZrNAAsGAgAAAAACAEGxzQALOgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAQfDOAAuWAU5PVU5DRUVDS09VVE5FQ1RFVEVDUklCRUxVU0hFVEVBRFNFQVJDSFJHRUNUSVZJVFlMRU5EQVJWRU9USUZZUFRJT05TQ0hTRUFZU1RBVENIR0VPUkRJUkVDVE9SVFJDSFBBUkFNRVRFUlVSQ0VCU0NSSUJFQVJET1dOQUNFSU5ETktDS1VCU0NSSUJFSFRUUC9BRFRQLw==", "base64");
|
|
7662
8258
|
}
|
|
@@ -7666,6 +8262,7 @@ var require_llhttp_simd_wasm = __commonJS({
|
|
|
7666
8262
|
var require_constants4 = __commonJS({
|
|
7667
8263
|
"node_modules/undici/lib/web/fetch/constants.js"(exports2, module2) {
|
|
7668
8264
|
"use strict";
|
|
8265
|
+
init_define_KT_HUB_FILES();
|
|
7669
8266
|
var corsSafeListedMethods = (
|
|
7670
8267
|
/** @type {const} */
|
|
7671
8268
|
["GET", "HEAD", "POST"]
|
|
@@ -7884,6 +8481,7 @@ var require_constants4 = __commonJS({
|
|
|
7884
8481
|
var require_global = __commonJS({
|
|
7885
8482
|
"node_modules/undici/lib/web/fetch/global.js"(exports2, module2) {
|
|
7886
8483
|
"use strict";
|
|
8484
|
+
init_define_KT_HUB_FILES();
|
|
7887
8485
|
var globalOrigin = Symbol.for("undici.globalOrigin.1");
|
|
7888
8486
|
function getGlobalOrigin() {
|
|
7889
8487
|
return globalThis[globalOrigin];
|
|
@@ -7920,6 +8518,7 @@ var require_global = __commonJS({
|
|
|
7920
8518
|
var require_data_url = __commonJS({
|
|
7921
8519
|
"node_modules/undici/lib/web/fetch/data-url.js"(exports2, module2) {
|
|
7922
8520
|
"use strict";
|
|
8521
|
+
init_define_KT_HUB_FILES();
|
|
7923
8522
|
var assert = require("node:assert");
|
|
7924
8523
|
var encoder = new TextEncoder();
|
|
7925
8524
|
var HTTP_TOKEN_CODEPOINTS = /^[!#$%&'*+\-.^_|~A-Za-z0-9]+$/;
|
|
@@ -8272,6 +8871,7 @@ var require_data_url = __commonJS({
|
|
|
8272
8871
|
var require_webidl = __commonJS({
|
|
8273
8872
|
"node_modules/undici/lib/web/fetch/webidl.js"(exports2, module2) {
|
|
8274
8873
|
"use strict";
|
|
8874
|
+
init_define_KT_HUB_FILES();
|
|
8275
8875
|
var { types, inspect } = require("node:util");
|
|
8276
8876
|
var { markAsUncloneable } = require("node:worker_threads");
|
|
8277
8877
|
var { toUSVString } = require_util();
|
|
@@ -8691,6 +9291,7 @@ var require_webidl = __commonJS({
|
|
|
8691
9291
|
var require_util3 = __commonJS({
|
|
8692
9292
|
"node_modules/undici/lib/web/fetch/util.js"(exports2, module2) {
|
|
8693
9293
|
"use strict";
|
|
9294
|
+
init_define_KT_HUB_FILES();
|
|
8694
9295
|
var { Transform } = require("node:stream");
|
|
8695
9296
|
var zlib = require("node:zlib");
|
|
8696
9297
|
var { redirectStatusSet, referrerPolicySet: referrerPolicyTokens, badPortsSet } = require_constants4();
|
|
@@ -9561,6 +10162,7 @@ var require_util3 = __commonJS({
|
|
|
9561
10162
|
var require_symbols2 = __commonJS({
|
|
9562
10163
|
"node_modules/undici/lib/web/fetch/symbols.js"(exports2, module2) {
|
|
9563
10164
|
"use strict";
|
|
10165
|
+
init_define_KT_HUB_FILES();
|
|
9564
10166
|
module2.exports = {
|
|
9565
10167
|
kUrl: Symbol("url"),
|
|
9566
10168
|
kHeaders: Symbol("headers"),
|
|
@@ -9575,6 +10177,7 @@ var require_symbols2 = __commonJS({
|
|
|
9575
10177
|
var require_file = __commonJS({
|
|
9576
10178
|
"node_modules/undici/lib/web/fetch/file.js"(exports2, module2) {
|
|
9577
10179
|
"use strict";
|
|
10180
|
+
init_define_KT_HUB_FILES();
|
|
9578
10181
|
var { Blob: Blob2, File } = require("node:buffer");
|
|
9579
10182
|
var { kState } = require_symbols2();
|
|
9580
10183
|
var { webidl } = require_webidl();
|
|
@@ -9638,6 +10241,7 @@ var require_file = __commonJS({
|
|
|
9638
10241
|
var require_formdata = __commonJS({
|
|
9639
10242
|
"node_modules/undici/lib/web/fetch/formdata.js"(exports2, module2) {
|
|
9640
10243
|
"use strict";
|
|
10244
|
+
init_define_KT_HUB_FILES();
|
|
9641
10245
|
var { isBlobLike, iteratorMixin } = require_util3();
|
|
9642
10246
|
var { kState } = require_symbols2();
|
|
9643
10247
|
var { kEnumerableProperty } = require_util();
|
|
@@ -9785,6 +10389,7 @@ var require_formdata = __commonJS({
|
|
|
9785
10389
|
var require_formdata_parser = __commonJS({
|
|
9786
10390
|
"node_modules/undici/lib/web/fetch/formdata-parser.js"(exports2, module2) {
|
|
9787
10391
|
"use strict";
|
|
10392
|
+
init_define_KT_HUB_FILES();
|
|
9788
10393
|
var { isUSVString, bufferToLowerCasedHeaderName } = require_util();
|
|
9789
10394
|
var { utf8DecodeBytes } = require_util3();
|
|
9790
10395
|
var { HTTP_TOKEN_CODEPOINTS, isomorphicDecode } = require_data_url();
|
|
@@ -10036,6 +10641,7 @@ var require_formdata_parser = __commonJS({
|
|
|
10036
10641
|
var require_body = __commonJS({
|
|
10037
10642
|
"node_modules/undici/lib/web/fetch/body.js"(exports2, module2) {
|
|
10038
10643
|
"use strict";
|
|
10644
|
+
init_define_KT_HUB_FILES();
|
|
10039
10645
|
var util = require_util();
|
|
10040
10646
|
var {
|
|
10041
10647
|
ReadableStreamFrom,
|
|
@@ -10345,6 +10951,7 @@ Content-Type: ${value.type || "application/octet-stream"}\r
|
|
|
10345
10951
|
var require_client_h1 = __commonJS({
|
|
10346
10952
|
"node_modules/undici/lib/dispatcher/client-h1.js"(exports2, module2) {
|
|
10347
10953
|
"use strict";
|
|
10954
|
+
init_define_KT_HUB_FILES();
|
|
10348
10955
|
var assert = require("node:assert");
|
|
10349
10956
|
var util = require_util();
|
|
10350
10957
|
var { channels } = require_diagnostics();
|
|
@@ -10971,7 +11578,7 @@ var require_client_h1 = __commonJS({
|
|
|
10971
11578
|
return method !== "GET" && method !== "HEAD" && method !== "OPTIONS" && method !== "TRACE" && method !== "CONNECT";
|
|
10972
11579
|
}
|
|
10973
11580
|
function writeH1(client, request) {
|
|
10974
|
-
const { method, path, host, upgrade, blocking, reset } = request;
|
|
11581
|
+
const { method, path, host: host2, upgrade, blocking, reset } = request;
|
|
10975
11582
|
let { body, headers, contentLength } = request;
|
|
10976
11583
|
const expectsPayload = method === "PUT" || method === "POST" || method === "PATCH" || method === "QUERY" || method === "PROPFIND" || method === "PROPPATCH";
|
|
10977
11584
|
if (util.isFormDataLike(body)) {
|
|
@@ -11039,8 +11646,8 @@ var require_client_h1 = __commonJS({
|
|
|
11039
11646
|
}
|
|
11040
11647
|
let header = `${method} ${path} HTTP/1.1\r
|
|
11041
11648
|
`;
|
|
11042
|
-
if (typeof
|
|
11043
|
-
header += `host: ${
|
|
11649
|
+
if (typeof host2 === "string") {
|
|
11650
|
+
header += `host: ${host2}\r
|
|
11044
11651
|
`;
|
|
11045
11652
|
} else {
|
|
11046
11653
|
header += client[kHostHeader];
|
|
@@ -11365,6 +11972,7 @@ ${len.toString(16)}\r
|
|
|
11365
11972
|
var require_client_h2 = __commonJS({
|
|
11366
11973
|
"node_modules/undici/lib/dispatcher/client-h2.js"(exports2, module2) {
|
|
11367
11974
|
"use strict";
|
|
11975
|
+
init_define_KT_HUB_FILES();
|
|
11368
11976
|
var assert = require("node:assert");
|
|
11369
11977
|
var { pipeline: pipeline2 } = require("node:stream");
|
|
11370
11978
|
var util = require_util();
|
|
@@ -11560,7 +12168,7 @@ var require_client_h2 = __commonJS({
|
|
|
11560
12168
|
}
|
|
11561
12169
|
function writeH2(client, request) {
|
|
11562
12170
|
const session = client[kHTTP2Session];
|
|
11563
|
-
const { body, method, path, host, upgrade, expectContinue, signal, headers: reqHeaders } = request;
|
|
12171
|
+
const { body, method, path, host: host2, upgrade, expectContinue, signal, headers: reqHeaders } = request;
|
|
11564
12172
|
if (upgrade) {
|
|
11565
12173
|
util.errorRequest(client, request, new Error("Upgrade not supported for H2"));
|
|
11566
12174
|
return false;
|
|
@@ -11582,8 +12190,8 @@ var require_client_h2 = __commonJS({
|
|
|
11582
12190
|
}
|
|
11583
12191
|
}
|
|
11584
12192
|
let stream;
|
|
11585
|
-
const { hostname:
|
|
11586
|
-
headers[HTTP2_HEADER_AUTHORITY] =
|
|
12193
|
+
const { hostname: hostname3, port } = client[kUrl];
|
|
12194
|
+
headers[HTTP2_HEADER_AUTHORITY] = host2 || `${hostname3}${port ? `:${port}` : ""}`;
|
|
11587
12195
|
headers[HTTP2_HEADER_METHOD] = method;
|
|
11588
12196
|
const abort = (err) => {
|
|
11589
12197
|
if (request.aborted || request.completed) {
|
|
@@ -11895,6 +12503,7 @@ var require_client_h2 = __commonJS({
|
|
|
11895
12503
|
var require_redirect_handler = __commonJS({
|
|
11896
12504
|
"node_modules/undici/lib/handler/redirect-handler.js"(exports2, module2) {
|
|
11897
12505
|
"use strict";
|
|
12506
|
+
init_define_KT_HUB_FILES();
|
|
11898
12507
|
var util = require_util();
|
|
11899
12508
|
var { kBodyUsed } = require_symbols();
|
|
11900
12509
|
var assert = require("node:assert");
|
|
@@ -12054,6 +12663,7 @@ var require_redirect_handler = __commonJS({
|
|
|
12054
12663
|
var require_redirect_interceptor = __commonJS({
|
|
12055
12664
|
"node_modules/undici/lib/interceptor/redirect-interceptor.js"(exports2, module2) {
|
|
12056
12665
|
"use strict";
|
|
12666
|
+
init_define_KT_HUB_FILES();
|
|
12057
12667
|
var RedirectHandler = require_redirect_handler();
|
|
12058
12668
|
function createRedirectInterceptor({ maxRedirections: defaultMaxRedirections }) {
|
|
12059
12669
|
return (dispatch) => {
|
|
@@ -12076,6 +12686,7 @@ var require_redirect_interceptor = __commonJS({
|
|
|
12076
12686
|
var require_client = __commonJS({
|
|
12077
12687
|
"node_modules/undici/lib/dispatcher/client.js"(exports2, module2) {
|
|
12078
12688
|
"use strict";
|
|
12689
|
+
init_define_KT_HUB_FILES();
|
|
12079
12690
|
var assert = require("node:assert");
|
|
12080
12691
|
var net = require("node:net");
|
|
12081
12692
|
var http = require("node:http");
|
|
@@ -12166,7 +12777,7 @@ var require_client = __commonJS({
|
|
|
12166
12777
|
strictContentLength,
|
|
12167
12778
|
maxCachedSessions,
|
|
12168
12779
|
maxRedirections,
|
|
12169
|
-
connect:
|
|
12780
|
+
connect: connect4,
|
|
12170
12781
|
maxRequestsPerClient,
|
|
12171
12782
|
localAddress,
|
|
12172
12783
|
maxResponseSize,
|
|
@@ -12216,7 +12827,7 @@ var require_client = __commonJS({
|
|
|
12216
12827
|
if (bodyTimeout != null && (!Number.isInteger(bodyTimeout) || bodyTimeout < 0)) {
|
|
12217
12828
|
throw new InvalidArgumentError("bodyTimeout must be a positive integer or zero");
|
|
12218
12829
|
}
|
|
12219
|
-
if (
|
|
12830
|
+
if (connect4 != null && typeof connect4 !== "function" && typeof connect4 !== "object") {
|
|
12220
12831
|
throw new InvalidArgumentError("connect must be a function or an object");
|
|
12221
12832
|
}
|
|
12222
12833
|
if (maxRedirections != null && (!Number.isInteger(maxRedirections) || maxRedirections < 0)) {
|
|
@@ -12240,15 +12851,15 @@ var require_client = __commonJS({
|
|
|
12240
12851
|
if (maxConcurrentStreams != null && (typeof maxConcurrentStreams !== "number" || maxConcurrentStreams < 1)) {
|
|
12241
12852
|
throw new InvalidArgumentError("maxConcurrentStreams must be a positive integer, greater than 0");
|
|
12242
12853
|
}
|
|
12243
|
-
if (typeof
|
|
12244
|
-
|
|
12854
|
+
if (typeof connect4 !== "function") {
|
|
12855
|
+
connect4 = buildConnector({
|
|
12245
12856
|
...tls,
|
|
12246
12857
|
maxCachedSessions,
|
|
12247
12858
|
allowH2,
|
|
12248
12859
|
socketPath,
|
|
12249
12860
|
timeout: connectTimeout,
|
|
12250
12861
|
...autoSelectFamily ? { autoSelectFamily, autoSelectFamilyAttemptTimeout } : void 0,
|
|
12251
|
-
...
|
|
12862
|
+
...connect4
|
|
12252
12863
|
});
|
|
12253
12864
|
}
|
|
12254
12865
|
if (interceptors?.Client && Array.isArray(interceptors.Client)) {
|
|
@@ -12263,7 +12874,7 @@ var require_client = __commonJS({
|
|
|
12263
12874
|
this[kInterceptors] = [createRedirectInterceptor({ maxRedirections })];
|
|
12264
12875
|
}
|
|
12265
12876
|
this[kUrl] = util.parseOrigin(url);
|
|
12266
|
-
this[kConnector] =
|
|
12877
|
+
this[kConnector] = connect4;
|
|
12267
12878
|
this[kPipelining] = pipelining != null ? pipelining : 1;
|
|
12268
12879
|
this[kMaxHeadersSize] = maxHeaderSize || http.maxHeaderSize;
|
|
12269
12880
|
this[kKeepAliveDefaultTimeout] = keepAliveTimeout == null ? 4e3 : keepAliveTimeout;
|
|
@@ -12317,7 +12928,7 @@ var require_client = __commonJS({
|
|
|
12317
12928
|
}
|
|
12318
12929
|
/* istanbul ignore: only used for test */
|
|
12319
12930
|
[kConnect](cb) {
|
|
12320
|
-
|
|
12931
|
+
connect3(this);
|
|
12321
12932
|
this.once("connect", cb);
|
|
12322
12933
|
}
|
|
12323
12934
|
[kDispatch](opts2, handler) {
|
|
@@ -12381,23 +12992,23 @@ var require_client = __commonJS({
|
|
|
12381
12992
|
assert(client[kSize] === 0);
|
|
12382
12993
|
}
|
|
12383
12994
|
}
|
|
12384
|
-
async function
|
|
12995
|
+
async function connect3(client) {
|
|
12385
12996
|
assert(!client[kConnecting]);
|
|
12386
12997
|
assert(!client[kHTTPContext]);
|
|
12387
|
-
let { host, hostname:
|
|
12388
|
-
if (
|
|
12389
|
-
const idx =
|
|
12998
|
+
let { host: host2, hostname: hostname3, protocol, port } = client[kUrl];
|
|
12999
|
+
if (hostname3[0] === "[") {
|
|
13000
|
+
const idx = hostname3.indexOf("]");
|
|
12390
13001
|
assert(idx !== -1);
|
|
12391
|
-
const ip =
|
|
13002
|
+
const ip = hostname3.substring(1, idx);
|
|
12392
13003
|
assert(net.isIP(ip));
|
|
12393
|
-
|
|
13004
|
+
hostname3 = ip;
|
|
12394
13005
|
}
|
|
12395
13006
|
client[kConnecting] = true;
|
|
12396
13007
|
if (channels.beforeConnect.hasSubscribers) {
|
|
12397
13008
|
channels.beforeConnect.publish({
|
|
12398
13009
|
connectParams: {
|
|
12399
|
-
host,
|
|
12400
|
-
hostname:
|
|
13010
|
+
host: host2,
|
|
13011
|
+
hostname: hostname3,
|
|
12401
13012
|
protocol,
|
|
12402
13013
|
port,
|
|
12403
13014
|
version: client[kHTTPContext]?.version,
|
|
@@ -12410,8 +13021,8 @@ var require_client = __commonJS({
|
|
|
12410
13021
|
try {
|
|
12411
13022
|
const socket = await new Promise((resolve2, reject) => {
|
|
12412
13023
|
client[kConnector]({
|
|
12413
|
-
host,
|
|
12414
|
-
hostname:
|
|
13024
|
+
host: host2,
|
|
13025
|
+
hostname: hostname3,
|
|
12415
13026
|
protocol,
|
|
12416
13027
|
port,
|
|
12417
13028
|
servername: client[kServerName],
|
|
@@ -12443,8 +13054,8 @@ var require_client = __commonJS({
|
|
|
12443
13054
|
if (channels.connected.hasSubscribers) {
|
|
12444
13055
|
channels.connected.publish({
|
|
12445
13056
|
connectParams: {
|
|
12446
|
-
host,
|
|
12447
|
-
hostname:
|
|
13057
|
+
host: host2,
|
|
13058
|
+
hostname: hostname3,
|
|
12448
13059
|
protocol,
|
|
12449
13060
|
port,
|
|
12450
13061
|
version: client[kHTTPContext]?.version,
|
|
@@ -12464,8 +13075,8 @@ var require_client = __commonJS({
|
|
|
12464
13075
|
if (channels.connectError.hasSubscribers) {
|
|
12465
13076
|
channels.connectError.publish({
|
|
12466
13077
|
connectParams: {
|
|
12467
|
-
host,
|
|
12468
|
-
hostname:
|
|
13078
|
+
host: host2,
|
|
13079
|
+
hostname: hostname3,
|
|
12469
13080
|
protocol,
|
|
12470
13081
|
port,
|
|
12471
13082
|
version: client[kHTTPContext]?.version,
|
|
@@ -12552,7 +13163,7 @@ var require_client = __commonJS({
|
|
|
12552
13163
|
return;
|
|
12553
13164
|
}
|
|
12554
13165
|
if (!client[kHTTPContext]) {
|
|
12555
|
-
|
|
13166
|
+
connect3(client);
|
|
12556
13167
|
return;
|
|
12557
13168
|
}
|
|
12558
13169
|
if (client[kHTTPContext].destroyed) {
|
|
@@ -12576,6 +13187,7 @@ var require_client = __commonJS({
|
|
|
12576
13187
|
var require_pool = __commonJS({
|
|
12577
13188
|
"node_modules/undici/lib/dispatcher/pool.js"(exports2, module2) {
|
|
12578
13189
|
"use strict";
|
|
13190
|
+
init_define_KT_HUB_FILES();
|
|
12579
13191
|
var {
|
|
12580
13192
|
PoolBase,
|
|
12581
13193
|
kClients,
|
|
@@ -12600,7 +13212,7 @@ var require_pool = __commonJS({
|
|
|
12600
13212
|
constructor(origin, {
|
|
12601
13213
|
connections,
|
|
12602
13214
|
factory = defaultFactory,
|
|
12603
|
-
connect:
|
|
13215
|
+
connect: connect3,
|
|
12604
13216
|
connectTimeout,
|
|
12605
13217
|
tls,
|
|
12606
13218
|
maxCachedSessions,
|
|
@@ -12617,24 +13229,24 @@ var require_pool = __commonJS({
|
|
|
12617
13229
|
if (typeof factory !== "function") {
|
|
12618
13230
|
throw new InvalidArgumentError("factory must be a function.");
|
|
12619
13231
|
}
|
|
12620
|
-
if (
|
|
13232
|
+
if (connect3 != null && typeof connect3 !== "function" && typeof connect3 !== "object") {
|
|
12621
13233
|
throw new InvalidArgumentError("connect must be a function or an object");
|
|
12622
13234
|
}
|
|
12623
|
-
if (typeof
|
|
12624
|
-
|
|
13235
|
+
if (typeof connect3 !== "function") {
|
|
13236
|
+
connect3 = buildConnector({
|
|
12625
13237
|
...tls,
|
|
12626
13238
|
maxCachedSessions,
|
|
12627
13239
|
allowH2,
|
|
12628
13240
|
socketPath,
|
|
12629
13241
|
timeout: connectTimeout,
|
|
12630
13242
|
...autoSelectFamily ? { autoSelectFamily, autoSelectFamilyAttemptTimeout } : void 0,
|
|
12631
|
-
...
|
|
13243
|
+
...connect3
|
|
12632
13244
|
});
|
|
12633
13245
|
}
|
|
12634
13246
|
this[kInterceptors] = options.interceptors?.Pool && Array.isArray(options.interceptors.Pool) ? options.interceptors.Pool : [];
|
|
12635
13247
|
this[kConnections] = connections || null;
|
|
12636
13248
|
this[kUrl] = util.parseOrigin(origin);
|
|
12637
|
-
this[kOptions] = { ...util.deepClone(options), connect:
|
|
13249
|
+
this[kOptions] = { ...util.deepClone(options), connect: connect3, allowH2 };
|
|
12638
13250
|
this[kOptions].interceptors = options.interceptors ? { ...options.interceptors } : void 0;
|
|
12639
13251
|
this[kFactory] = factory;
|
|
12640
13252
|
}
|
|
@@ -12659,6 +13271,7 @@ var require_pool = __commonJS({
|
|
|
12659
13271
|
var require_agent = __commonJS({
|
|
12660
13272
|
"node_modules/undici/lib/dispatcher/agent.js"(exports2, module2) {
|
|
12661
13273
|
"use strict";
|
|
13274
|
+
init_define_KT_HUB_FILES();
|
|
12662
13275
|
var { InvalidArgumentError } = require_errors();
|
|
12663
13276
|
var { kClients, kRunning, kClose, kDestroy, kDispatch, kInterceptors } = require_symbols();
|
|
12664
13277
|
var DispatcherBase = require_dispatcher_base();
|
|
@@ -12677,22 +13290,22 @@ var require_agent = __commonJS({
|
|
|
12677
13290
|
return opts2 && opts2.connections === 1 ? new Client(origin, opts2) : new Pool(origin, opts2);
|
|
12678
13291
|
}
|
|
12679
13292
|
var Agent = class extends DispatcherBase {
|
|
12680
|
-
constructor({ factory = defaultFactory, maxRedirections = 0, connect:
|
|
13293
|
+
constructor({ factory = defaultFactory, maxRedirections = 0, connect: connect3, ...options } = {}) {
|
|
12681
13294
|
super();
|
|
12682
13295
|
if (typeof factory !== "function") {
|
|
12683
13296
|
throw new InvalidArgumentError("factory must be a function.");
|
|
12684
13297
|
}
|
|
12685
|
-
if (
|
|
13298
|
+
if (connect3 != null && typeof connect3 !== "function" && typeof connect3 !== "object") {
|
|
12686
13299
|
throw new InvalidArgumentError("connect must be a function or an object");
|
|
12687
13300
|
}
|
|
12688
13301
|
if (!Number.isInteger(maxRedirections) || maxRedirections < 0) {
|
|
12689
13302
|
throw new InvalidArgumentError("maxRedirections must be a positive number");
|
|
12690
13303
|
}
|
|
12691
|
-
if (
|
|
12692
|
-
|
|
13304
|
+
if (connect3 && typeof connect3 !== "function") {
|
|
13305
|
+
connect3 = { ...connect3 };
|
|
12693
13306
|
}
|
|
12694
13307
|
this[kInterceptors] = options.interceptors?.Agent && Array.isArray(options.interceptors.Agent) ? options.interceptors.Agent : [createRedirectInterceptor({ maxRedirections })];
|
|
12695
|
-
this[kOptions] = { ...util.deepClone(options), connect:
|
|
13308
|
+
this[kOptions] = { ...util.deepClone(options), connect: connect3 };
|
|
12696
13309
|
this[kOptions].interceptors = options.interceptors ? { ...options.interceptors } : void 0;
|
|
12697
13310
|
this[kMaxRedirections] = maxRedirections;
|
|
12698
13311
|
this[kFactory] = factory;
|
|
@@ -12756,6 +13369,7 @@ var require_agent = __commonJS({
|
|
|
12756
13369
|
var require_proxy_agent = __commonJS({
|
|
12757
13370
|
"node_modules/undici/lib/dispatcher/proxy-agent.js"(exports2, module2) {
|
|
12758
13371
|
"use strict";
|
|
13372
|
+
init_define_KT_HUB_FILES();
|
|
12759
13373
|
var { kProxy, kClose, kDestroy, kInterceptors } = require_symbols();
|
|
12760
13374
|
var { URL: URL2 } = require("node:url");
|
|
12761
13375
|
var Agent = require_agent();
|
|
@@ -12803,9 +13417,9 @@ var require_proxy_agent = __commonJS({
|
|
|
12803
13417
|
} else if (username && password) {
|
|
12804
13418
|
this[kProxyHeaders]["proxy-authorization"] = `Basic ${Buffer.from(`${decodeURIComponent(username)}:${decodeURIComponent(password)}`).toString("base64")}`;
|
|
12805
13419
|
}
|
|
12806
|
-
const
|
|
13420
|
+
const connect3 = buildConnector({ ...opts2.proxyTls });
|
|
12807
13421
|
this[kConnectEndpoint] = buildConnector({ ...opts2.requestTls });
|
|
12808
|
-
this[kClient] = clientFactory(url, { connect:
|
|
13422
|
+
this[kClient] = clientFactory(url, { connect: connect3 });
|
|
12809
13423
|
this[kAgent] = new Agent({
|
|
12810
13424
|
...opts2,
|
|
12811
13425
|
connect: async (opts3, callback) => {
|
|
@@ -12854,8 +13468,8 @@ var require_proxy_agent = __commonJS({
|
|
|
12854
13468
|
const headers = buildHeaders(opts2.headers);
|
|
12855
13469
|
throwIfProxyAuthIsSent(headers);
|
|
12856
13470
|
if (headers && !("host" in headers) && !("Host" in headers)) {
|
|
12857
|
-
const { host } = new URL2(opts2.origin);
|
|
12858
|
-
headers.host =
|
|
13471
|
+
const { host: host2 } = new URL2(opts2.origin);
|
|
13472
|
+
headers.host = host2;
|
|
12859
13473
|
}
|
|
12860
13474
|
return this[kAgent].dispatch(
|
|
12861
13475
|
{
|
|
@@ -12911,6 +13525,7 @@ var require_proxy_agent = __commonJS({
|
|
|
12911
13525
|
var require_env_http_proxy_agent = __commonJS({
|
|
12912
13526
|
"node_modules/undici/lib/dispatcher/env-http-proxy-agent.js"(exports2, module2) {
|
|
12913
13527
|
"use strict";
|
|
13528
|
+
init_define_KT_HUB_FILES();
|
|
12914
13529
|
var DispatcherBase = require_dispatcher_base();
|
|
12915
13530
|
var { kClose, kDestroy, kClosed, kDestroyed, kDispatch, kNoProxyAgent, kHttpProxyAgent, kHttpsProxyAgent } = require_symbols();
|
|
12916
13531
|
var ProxyAgent = require_proxy_agent();
|
|
@@ -12973,10 +13588,10 @@ var require_env_http_proxy_agent = __commonJS({
|
|
|
12973
13588
|
}
|
|
12974
13589
|
}
|
|
12975
13590
|
#getProxyAgentForUrl(url) {
|
|
12976
|
-
let { protocol, host:
|
|
12977
|
-
|
|
13591
|
+
let { protocol, host: hostname3, port } = url;
|
|
13592
|
+
hostname3 = hostname3.replace(/:\d*$/, "").toLowerCase();
|
|
12978
13593
|
port = Number.parseInt(port, 10) || DEFAULT_PORTS[protocol] || 0;
|
|
12979
|
-
if (!this.#shouldProxy(
|
|
13594
|
+
if (!this.#shouldProxy(hostname3, port)) {
|
|
12980
13595
|
return this[kNoProxyAgent];
|
|
12981
13596
|
}
|
|
12982
13597
|
if (protocol === "https:") {
|
|
@@ -12984,7 +13599,7 @@ var require_env_http_proxy_agent = __commonJS({
|
|
|
12984
13599
|
}
|
|
12985
13600
|
return this[kHttpProxyAgent];
|
|
12986
13601
|
}
|
|
12987
|
-
#shouldProxy(
|
|
13602
|
+
#shouldProxy(hostname3, port) {
|
|
12988
13603
|
if (this.#noProxyChanged) {
|
|
12989
13604
|
this.#parseNoProxy();
|
|
12990
13605
|
}
|
|
@@ -13000,11 +13615,11 @@ var require_env_http_proxy_agent = __commonJS({
|
|
|
13000
13615
|
continue;
|
|
13001
13616
|
}
|
|
13002
13617
|
if (!/^[.*]/.test(entry.hostname)) {
|
|
13003
|
-
if (
|
|
13618
|
+
if (hostname3 === entry.hostname) {
|
|
13004
13619
|
return false;
|
|
13005
13620
|
}
|
|
13006
13621
|
} else {
|
|
13007
|
-
if (
|
|
13622
|
+
if (hostname3.endsWith(entry.hostname.replace(/^\*/, ""))) {
|
|
13008
13623
|
return false;
|
|
13009
13624
|
}
|
|
13010
13625
|
}
|
|
@@ -13047,6 +13662,7 @@ var require_env_http_proxy_agent = __commonJS({
|
|
|
13047
13662
|
var require_headers = __commonJS({
|
|
13048
13663
|
"node_modules/undici/lib/web/fetch/headers.js"(exports2, module2) {
|
|
13049
13664
|
"use strict";
|
|
13665
|
+
init_define_KT_HUB_FILES();
|
|
13050
13666
|
var { kConstruct } = require_symbols();
|
|
13051
13667
|
var { kEnumerableProperty } = require_util();
|
|
13052
13668
|
var {
|
|
@@ -13491,6 +14107,7 @@ var require_headers = __commonJS({
|
|
|
13491
14107
|
var require_response = __commonJS({
|
|
13492
14108
|
"node_modules/undici/lib/web/fetch/response.js"(exports2, module2) {
|
|
13493
14109
|
"use strict";
|
|
14110
|
+
init_define_KT_HUB_FILES();
|
|
13494
14111
|
var { Headers: Headers2, HeadersList, fill, getHeadersGuard, setHeadersGuard, setHeadersList } = require_headers();
|
|
13495
14112
|
var { extractBody, cloneBody, mixinBody, hasFinalizationRegistry, streamRegistry, bodyUnusable } = require_body();
|
|
13496
14113
|
var util = require_util();
|
|
@@ -13887,6 +14504,7 @@ var require_response = __commonJS({
|
|
|
13887
14504
|
var require_dispatcher_weakref = __commonJS({
|
|
13888
14505
|
"node_modules/undici/lib/web/fetch/dispatcher-weakref.js"(exports2, module2) {
|
|
13889
14506
|
"use strict";
|
|
14507
|
+
init_define_KT_HUB_FILES();
|
|
13890
14508
|
var { kConnected, kSize } = require_symbols();
|
|
13891
14509
|
var CompatWeakRef = class {
|
|
13892
14510
|
constructor(value) {
|
|
@@ -13929,6 +14547,7 @@ var require_dispatcher_weakref = __commonJS({
|
|
|
13929
14547
|
var require_request2 = __commonJS({
|
|
13930
14548
|
"node_modules/undici/lib/web/fetch/request.js"(exports2, module2) {
|
|
13931
14549
|
"use strict";
|
|
14550
|
+
init_define_KT_HUB_FILES();
|
|
13932
14551
|
var { extractBody, mixinBody, cloneBody, bodyUnusable } = require_body();
|
|
13933
14552
|
var { Headers: Headers2, fill: fillHeaders, HeadersList, setHeadersGuard, getHeadersGuard, setHeadersList, getHeadersList } = require_headers();
|
|
13934
14553
|
var { FinalizationRegistry: FinalizationRegistry2 } = require_dispatcher_weakref()();
|
|
@@ -14624,6 +15243,7 @@ var require_request2 = __commonJS({
|
|
|
14624
15243
|
var require_global2 = __commonJS({
|
|
14625
15244
|
"node_modules/undici/lib/global.js"(exports2, module2) {
|
|
14626
15245
|
"use strict";
|
|
15246
|
+
init_define_KT_HUB_FILES();
|
|
14627
15247
|
var globalDispatcher = Symbol.for("undici.globalDispatcher.1");
|
|
14628
15248
|
var { InvalidArgumentError } = require_errors();
|
|
14629
15249
|
var Agent = require_agent();
|
|
@@ -14655,6 +15275,7 @@ var require_global2 = __commonJS({
|
|
|
14655
15275
|
var require_fetch = __commonJS({
|
|
14656
15276
|
"node_modules/undici/lib/web/fetch/index.js"(exports2, module2) {
|
|
14657
15277
|
"use strict";
|
|
15278
|
+
init_define_KT_HUB_FILES();
|
|
14658
15279
|
var {
|
|
14659
15280
|
makeNetworkError,
|
|
14660
15281
|
makeAppropriateNetworkError,
|
|
@@ -15720,6 +16341,7 @@ var require_fetch = __commonJS({
|
|
|
15720
16341
|
var require_identity = __commonJS({
|
|
15721
16342
|
"node_modules/yaml/dist/nodes/identity.js"(exports2) {
|
|
15722
16343
|
"use strict";
|
|
16344
|
+
init_define_KT_HUB_FILES();
|
|
15723
16345
|
var ALIAS = Symbol.for("yaml.alias");
|
|
15724
16346
|
var DOC = Symbol.for("yaml.document");
|
|
15725
16347
|
var MAP = Symbol.for("yaml.map");
|
|
@@ -15777,6 +16399,7 @@ var require_identity = __commonJS({
|
|
|
15777
16399
|
var require_visit = __commonJS({
|
|
15778
16400
|
"node_modules/yaml/dist/visit.js"(exports2) {
|
|
15779
16401
|
"use strict";
|
|
16402
|
+
init_define_KT_HUB_FILES();
|
|
15780
16403
|
var identity = require_identity();
|
|
15781
16404
|
var BREAK = Symbol("break visit");
|
|
15782
16405
|
var SKIP = Symbol("skip children");
|
|
@@ -15935,6 +16558,7 @@ var require_visit = __commonJS({
|
|
|
15935
16558
|
var require_directives = __commonJS({
|
|
15936
16559
|
"node_modules/yaml/dist/doc/directives.js"(exports2) {
|
|
15937
16560
|
"use strict";
|
|
16561
|
+
init_define_KT_HUB_FILES();
|
|
15938
16562
|
var identity = require_identity();
|
|
15939
16563
|
var visit = require_visit();
|
|
15940
16564
|
var escapeChars = {
|
|
@@ -16106,6 +16730,7 @@ var require_directives = __commonJS({
|
|
|
16106
16730
|
var require_anchors = __commonJS({
|
|
16107
16731
|
"node_modules/yaml/dist/doc/anchors.js"(exports2) {
|
|
16108
16732
|
"use strict";
|
|
16733
|
+
init_define_KT_HUB_FILES();
|
|
16109
16734
|
var identity = require_identity();
|
|
16110
16735
|
var visit = require_visit();
|
|
16111
16736
|
function anchorIsValid(anchor) {
|
|
@@ -16176,6 +16801,7 @@ var require_anchors = __commonJS({
|
|
|
16176
16801
|
var require_applyReviver = __commonJS({
|
|
16177
16802
|
"node_modules/yaml/dist/doc/applyReviver.js"(exports2) {
|
|
16178
16803
|
"use strict";
|
|
16804
|
+
init_define_KT_HUB_FILES();
|
|
16179
16805
|
function applyReviver(reviver, obj, key, val) {
|
|
16180
16806
|
if (val && typeof val === "object") {
|
|
16181
16807
|
if (Array.isArray(val)) {
|
|
@@ -16226,6 +16852,7 @@ var require_applyReviver = __commonJS({
|
|
|
16226
16852
|
var require_toJS = __commonJS({
|
|
16227
16853
|
"node_modules/yaml/dist/nodes/toJS.js"(exports2) {
|
|
16228
16854
|
"use strict";
|
|
16855
|
+
init_define_KT_HUB_FILES();
|
|
16229
16856
|
var identity = require_identity();
|
|
16230
16857
|
function toJS(value, arg, ctx) {
|
|
16231
16858
|
if (Array.isArray(value))
|
|
@@ -16256,6 +16883,7 @@ var require_toJS = __commonJS({
|
|
|
16256
16883
|
var require_Node = __commonJS({
|
|
16257
16884
|
"node_modules/yaml/dist/nodes/Node.js"(exports2) {
|
|
16258
16885
|
"use strict";
|
|
16886
|
+
init_define_KT_HUB_FILES();
|
|
16259
16887
|
var applyReviver = require_applyReviver();
|
|
16260
16888
|
var identity = require_identity();
|
|
16261
16889
|
var toJS = require_toJS();
|
|
@@ -16297,6 +16925,7 @@ var require_Node = __commonJS({
|
|
|
16297
16925
|
var require_Alias = __commonJS({
|
|
16298
16926
|
"node_modules/yaml/dist/nodes/Alias.js"(exports2) {
|
|
16299
16927
|
"use strict";
|
|
16928
|
+
init_define_KT_HUB_FILES();
|
|
16300
16929
|
var anchors = require_anchors();
|
|
16301
16930
|
var visit = require_visit();
|
|
16302
16931
|
var identity = require_identity();
|
|
@@ -16413,6 +17042,7 @@ var require_Alias = __commonJS({
|
|
|
16413
17042
|
var require_Scalar = __commonJS({
|
|
16414
17043
|
"node_modules/yaml/dist/nodes/Scalar.js"(exports2) {
|
|
16415
17044
|
"use strict";
|
|
17045
|
+
init_define_KT_HUB_FILES();
|
|
16416
17046
|
var identity = require_identity();
|
|
16417
17047
|
var Node = require_Node();
|
|
16418
17048
|
var toJS = require_toJS();
|
|
@@ -16443,6 +17073,7 @@ var require_Scalar = __commonJS({
|
|
|
16443
17073
|
var require_createNode = __commonJS({
|
|
16444
17074
|
"node_modules/yaml/dist/doc/createNode.js"(exports2) {
|
|
16445
17075
|
"use strict";
|
|
17076
|
+
init_define_KT_HUB_FILES();
|
|
16446
17077
|
var Alias = require_Alias();
|
|
16447
17078
|
var identity = require_identity();
|
|
16448
17079
|
var Scalar = require_Scalar();
|
|
@@ -16518,6 +17149,7 @@ var require_createNode = __commonJS({
|
|
|
16518
17149
|
var require_Collection = __commonJS({
|
|
16519
17150
|
"node_modules/yaml/dist/nodes/Collection.js"(exports2) {
|
|
16520
17151
|
"use strict";
|
|
17152
|
+
init_define_KT_HUB_FILES();
|
|
16521
17153
|
var createNode = require_createNode();
|
|
16522
17154
|
var identity = require_identity();
|
|
16523
17155
|
var Node = require_Node();
|
|
@@ -16661,6 +17293,7 @@ var require_Collection = __commonJS({
|
|
|
16661
17293
|
var require_stringifyComment = __commonJS({
|
|
16662
17294
|
"node_modules/yaml/dist/stringify/stringifyComment.js"(exports2) {
|
|
16663
17295
|
"use strict";
|
|
17296
|
+
init_define_KT_HUB_FILES();
|
|
16664
17297
|
var stringifyComment = (str6) => str6.replace(/^(?!$)(?: $)?/gm, "#");
|
|
16665
17298
|
function indentComment(comment, indent) {
|
|
16666
17299
|
if (/^\n+$/.test(comment))
|
|
@@ -16678,6 +17311,7 @@ var require_stringifyComment = __commonJS({
|
|
|
16678
17311
|
var require_foldFlowLines = __commonJS({
|
|
16679
17312
|
"node_modules/yaml/dist/stringify/foldFlowLines.js"(exports2) {
|
|
16680
17313
|
"use strict";
|
|
17314
|
+
init_define_KT_HUB_FILES();
|
|
16681
17315
|
var FOLD_FLOW = "flow";
|
|
16682
17316
|
var FOLD_BLOCK = "block";
|
|
16683
17317
|
var FOLD_QUOTED = "quoted";
|
|
@@ -16814,6 +17448,7 @@ ${indent}${text2.slice(fold + 1, end2)}`;
|
|
|
16814
17448
|
var require_stringifyString = __commonJS({
|
|
16815
17449
|
"node_modules/yaml/dist/stringify/stringifyString.js"(exports2) {
|
|
16816
17450
|
"use strict";
|
|
17451
|
+
init_define_KT_HUB_FILES();
|
|
16817
17452
|
var Scalar = require_Scalar();
|
|
16818
17453
|
var foldFlowLines = require_foldFlowLines();
|
|
16819
17454
|
var getFoldOptions = (ctx, isBlock) => ({
|
|
@@ -17097,6 +17732,7 @@ ${indent}`);
|
|
|
17097
17732
|
var require_stringify = __commonJS({
|
|
17098
17733
|
"node_modules/yaml/dist/stringify/stringify.js"(exports2) {
|
|
17099
17734
|
"use strict";
|
|
17735
|
+
init_define_KT_HUB_FILES();
|
|
17100
17736
|
var anchors = require_anchors();
|
|
17101
17737
|
var identity = require_identity();
|
|
17102
17738
|
var stringifyComment = require_stringifyComment();
|
|
@@ -17221,6 +17857,7 @@ ${ctx.indent}${str6}`;
|
|
|
17221
17857
|
var require_stringifyPair = __commonJS({
|
|
17222
17858
|
"node_modules/yaml/dist/stringify/stringifyPair.js"(exports2) {
|
|
17223
17859
|
"use strict";
|
|
17860
|
+
init_define_KT_HUB_FILES();
|
|
17224
17861
|
var identity = require_identity();
|
|
17225
17862
|
var Scalar = require_Scalar();
|
|
17226
17863
|
var stringify = require_stringify();
|
|
@@ -17354,6 +17991,7 @@ ${ctx.indent}`;
|
|
|
17354
17991
|
var require_log = __commonJS({
|
|
17355
17992
|
"node_modules/yaml/dist/log.js"(exports2) {
|
|
17356
17993
|
"use strict";
|
|
17994
|
+
init_define_KT_HUB_FILES();
|
|
17357
17995
|
var node_process = require("process");
|
|
17358
17996
|
function debug(logLevel, ...messages) {
|
|
17359
17997
|
if (logLevel === "debug")
|
|
@@ -17376,6 +18014,7 @@ var require_log = __commonJS({
|
|
|
17376
18014
|
var require_merge = __commonJS({
|
|
17377
18015
|
"node_modules/yaml/dist/schema/yaml-1.1/merge.js"(exports2) {
|
|
17378
18016
|
"use strict";
|
|
18017
|
+
init_define_KT_HUB_FILES();
|
|
17379
18018
|
var identity = require_identity();
|
|
17380
18019
|
var Scalar = require_Scalar();
|
|
17381
18020
|
var MERGE_KEY = "<<";
|
|
@@ -17436,6 +18075,7 @@ var require_merge = __commonJS({
|
|
|
17436
18075
|
var require_addPairToJSMap = __commonJS({
|
|
17437
18076
|
"node_modules/yaml/dist/nodes/addPairToJSMap.js"(exports2) {
|
|
17438
18077
|
"use strict";
|
|
18078
|
+
init_define_KT_HUB_FILES();
|
|
17439
18079
|
var log3 = require_log();
|
|
17440
18080
|
var merge = require_merge();
|
|
17441
18081
|
var stringify = require_stringify();
|
|
@@ -17500,6 +18140,7 @@ var require_addPairToJSMap = __commonJS({
|
|
|
17500
18140
|
var require_Pair = __commonJS({
|
|
17501
18141
|
"node_modules/yaml/dist/nodes/Pair.js"(exports2) {
|
|
17502
18142
|
"use strict";
|
|
18143
|
+
init_define_KT_HUB_FILES();
|
|
17503
18144
|
var createNode = require_createNode();
|
|
17504
18145
|
var stringifyPair = require_stringifyPair();
|
|
17505
18146
|
var addPairToJSMap = require_addPairToJSMap();
|
|
@@ -17540,6 +18181,7 @@ var require_Pair = __commonJS({
|
|
|
17540
18181
|
var require_stringifyCollection = __commonJS({
|
|
17541
18182
|
"node_modules/yaml/dist/stringify/stringifyCollection.js"(exports2) {
|
|
17542
18183
|
"use strict";
|
|
18184
|
+
init_define_KT_HUB_FILES();
|
|
17543
18185
|
var identity = require_identity();
|
|
17544
18186
|
var stringify = require_stringify();
|
|
17545
18187
|
var stringifyComment = require_stringifyComment();
|
|
@@ -17691,6 +18333,7 @@ ${indent}${end}`;
|
|
|
17691
18333
|
var require_YAMLMap = __commonJS({
|
|
17692
18334
|
"node_modules/yaml/dist/nodes/YAMLMap.js"(exports2) {
|
|
17693
18335
|
"use strict";
|
|
18336
|
+
init_define_KT_HUB_FILES();
|
|
17694
18337
|
var stringifyCollection = require_stringifyCollection();
|
|
17695
18338
|
var addPairToJSMap = require_addPairToJSMap();
|
|
17696
18339
|
var Collection = require_Collection();
|
|
@@ -17835,6 +18478,7 @@ var require_YAMLMap = __commonJS({
|
|
|
17835
18478
|
var require_map = __commonJS({
|
|
17836
18479
|
"node_modules/yaml/dist/schema/common/map.js"(exports2) {
|
|
17837
18480
|
"use strict";
|
|
18481
|
+
init_define_KT_HUB_FILES();
|
|
17838
18482
|
var identity = require_identity();
|
|
17839
18483
|
var YAMLMap = require_YAMLMap();
|
|
17840
18484
|
var map = {
|
|
@@ -17857,6 +18501,7 @@ var require_map = __commonJS({
|
|
|
17857
18501
|
var require_YAMLSeq = __commonJS({
|
|
17858
18502
|
"node_modules/yaml/dist/nodes/YAMLSeq.js"(exports2) {
|
|
17859
18503
|
"use strict";
|
|
18504
|
+
init_define_KT_HUB_FILES();
|
|
17860
18505
|
var createNode = require_createNode();
|
|
17861
18506
|
var stringifyCollection = require_stringifyCollection();
|
|
17862
18507
|
var Collection = require_Collection();
|
|
@@ -17973,6 +18618,7 @@ var require_YAMLSeq = __commonJS({
|
|
|
17973
18618
|
var require_seq = __commonJS({
|
|
17974
18619
|
"node_modules/yaml/dist/schema/common/seq.js"(exports2) {
|
|
17975
18620
|
"use strict";
|
|
18621
|
+
init_define_KT_HUB_FILES();
|
|
17976
18622
|
var identity = require_identity();
|
|
17977
18623
|
var YAMLSeq = require_YAMLSeq();
|
|
17978
18624
|
var seq = {
|
|
@@ -17995,6 +18641,7 @@ var require_seq = __commonJS({
|
|
|
17995
18641
|
var require_string = __commonJS({
|
|
17996
18642
|
"node_modules/yaml/dist/schema/common/string.js"(exports2) {
|
|
17997
18643
|
"use strict";
|
|
18644
|
+
init_define_KT_HUB_FILES();
|
|
17998
18645
|
var stringifyString = require_stringifyString();
|
|
17999
18646
|
var string = {
|
|
18000
18647
|
identify: (value) => typeof value === "string",
|
|
@@ -18014,6 +18661,7 @@ var require_string = __commonJS({
|
|
|
18014
18661
|
var require_null = __commonJS({
|
|
18015
18662
|
"node_modules/yaml/dist/schema/common/null.js"(exports2) {
|
|
18016
18663
|
"use strict";
|
|
18664
|
+
init_define_KT_HUB_FILES();
|
|
18017
18665
|
var Scalar = require_Scalar();
|
|
18018
18666
|
var nullTag = {
|
|
18019
18667
|
identify: (value) => value == null,
|
|
@@ -18032,6 +18680,7 @@ var require_null = __commonJS({
|
|
|
18032
18680
|
var require_bool = __commonJS({
|
|
18033
18681
|
"node_modules/yaml/dist/schema/core/bool.js"(exports2) {
|
|
18034
18682
|
"use strict";
|
|
18683
|
+
init_define_KT_HUB_FILES();
|
|
18035
18684
|
var Scalar = require_Scalar();
|
|
18036
18685
|
var boolTag = {
|
|
18037
18686
|
identify: (value) => typeof value === "boolean",
|
|
@@ -18056,6 +18705,7 @@ var require_bool = __commonJS({
|
|
|
18056
18705
|
var require_stringifyNumber = __commonJS({
|
|
18057
18706
|
"node_modules/yaml/dist/stringify/stringifyNumber.js"(exports2) {
|
|
18058
18707
|
"use strict";
|
|
18708
|
+
init_define_KT_HUB_FILES();
|
|
18059
18709
|
function stringifyNumber({ format, minFractionDigits, tag, value }) {
|
|
18060
18710
|
if (typeof value === "bigint")
|
|
18061
18711
|
return String(value);
|
|
@@ -18083,6 +18733,7 @@ var require_stringifyNumber = __commonJS({
|
|
|
18083
18733
|
var require_float = __commonJS({
|
|
18084
18734
|
"node_modules/yaml/dist/schema/core/float.js"(exports2) {
|
|
18085
18735
|
"use strict";
|
|
18736
|
+
init_define_KT_HUB_FILES();
|
|
18086
18737
|
var Scalar = require_Scalar();
|
|
18087
18738
|
var stringifyNumber = require_stringifyNumber();
|
|
18088
18739
|
var floatNaN = {
|
|
@@ -18129,6 +18780,7 @@ var require_float = __commonJS({
|
|
|
18129
18780
|
var require_int = __commonJS({
|
|
18130
18781
|
"node_modules/yaml/dist/schema/core/int.js"(exports2) {
|
|
18131
18782
|
"use strict";
|
|
18783
|
+
init_define_KT_HUB_FILES();
|
|
18132
18784
|
var stringifyNumber = require_stringifyNumber();
|
|
18133
18785
|
var intIdentify = (value) => typeof value === "bigint" || Number.isInteger(value);
|
|
18134
18786
|
var intResolve = (str6, offset, radix, { intAsBigInt }) => intAsBigInt ? BigInt(str6) : parseInt(str6.substring(offset), radix);
|
|
@@ -18174,6 +18826,7 @@ var require_int = __commonJS({
|
|
|
18174
18826
|
var require_schema = __commonJS({
|
|
18175
18827
|
"node_modules/yaml/dist/schema/core/schema.js"(exports2) {
|
|
18176
18828
|
"use strict";
|
|
18829
|
+
init_define_KT_HUB_FILES();
|
|
18177
18830
|
var map = require_map();
|
|
18178
18831
|
var _null = require_null();
|
|
18179
18832
|
var seq = require_seq();
|
|
@@ -18202,6 +18855,7 @@ var require_schema = __commonJS({
|
|
|
18202
18855
|
var require_schema2 = __commonJS({
|
|
18203
18856
|
"node_modules/yaml/dist/schema/json/schema.js"(exports2) {
|
|
18204
18857
|
"use strict";
|
|
18858
|
+
init_define_KT_HUB_FILES();
|
|
18205
18859
|
var Scalar = require_Scalar();
|
|
18206
18860
|
var map = require_map();
|
|
18207
18861
|
var seq = require_seq();
|
|
@@ -18269,6 +18923,7 @@ var require_schema2 = __commonJS({
|
|
|
18269
18923
|
var require_binary = __commonJS({
|
|
18270
18924
|
"node_modules/yaml/dist/schema/yaml-1.1/binary.js"(exports2) {
|
|
18271
18925
|
"use strict";
|
|
18926
|
+
init_define_KT_HUB_FILES();
|
|
18272
18927
|
var node_buffer = require("buffer");
|
|
18273
18928
|
var Scalar = require_Scalar();
|
|
18274
18929
|
var stringifyString = require_stringifyString();
|
|
@@ -18335,6 +18990,7 @@ var require_binary = __commonJS({
|
|
|
18335
18990
|
var require_pairs = __commonJS({
|
|
18336
18991
|
"node_modules/yaml/dist/schema/yaml-1.1/pairs.js"(exports2) {
|
|
18337
18992
|
"use strict";
|
|
18993
|
+
init_define_KT_HUB_FILES();
|
|
18338
18994
|
var identity = require_identity();
|
|
18339
18995
|
var Pair = require_Pair();
|
|
18340
18996
|
var Scalar = require_Scalar();
|
|
@@ -18413,6 +19069,7 @@ ${cn.comment}` : item.comment;
|
|
|
18413
19069
|
var require_omap = __commonJS({
|
|
18414
19070
|
"node_modules/yaml/dist/schema/yaml-1.1/omap.js"(exports2) {
|
|
18415
19071
|
"use strict";
|
|
19072
|
+
init_define_KT_HUB_FILES();
|
|
18416
19073
|
var identity = require_identity();
|
|
18417
19074
|
var toJS = require_toJS();
|
|
18418
19075
|
var YAMLMap = require_YAMLMap();
|
|
@@ -18491,6 +19148,7 @@ var require_omap = __commonJS({
|
|
|
18491
19148
|
var require_bool2 = __commonJS({
|
|
18492
19149
|
"node_modules/yaml/dist/schema/yaml-1.1/bool.js"(exports2) {
|
|
18493
19150
|
"use strict";
|
|
19151
|
+
init_define_KT_HUB_FILES();
|
|
18494
19152
|
var Scalar = require_Scalar();
|
|
18495
19153
|
function boolStringify({ value, source }, ctx) {
|
|
18496
19154
|
const boolObj = value ? trueTag : falseTag;
|
|
@@ -18523,6 +19181,7 @@ var require_bool2 = __commonJS({
|
|
|
18523
19181
|
var require_float2 = __commonJS({
|
|
18524
19182
|
"node_modules/yaml/dist/schema/yaml-1.1/float.js"(exports2) {
|
|
18525
19183
|
"use strict";
|
|
19184
|
+
init_define_KT_HUB_FILES();
|
|
18526
19185
|
var Scalar = require_Scalar();
|
|
18527
19186
|
var stringifyNumber = require_stringifyNumber();
|
|
18528
19187
|
var floatNaN = {
|
|
@@ -18572,6 +19231,7 @@ var require_float2 = __commonJS({
|
|
|
18572
19231
|
var require_int2 = __commonJS({
|
|
18573
19232
|
"node_modules/yaml/dist/schema/yaml-1.1/int.js"(exports2) {
|
|
18574
19233
|
"use strict";
|
|
19234
|
+
init_define_KT_HUB_FILES();
|
|
18575
19235
|
var stringifyNumber = require_stringifyNumber();
|
|
18576
19236
|
var intIdentify = (value) => typeof value === "bigint" || Number.isInteger(value);
|
|
18577
19237
|
function intResolve(str6, offset, radix, { intAsBigInt }) {
|
|
@@ -18651,6 +19311,7 @@ var require_int2 = __commonJS({
|
|
|
18651
19311
|
var require_set = __commonJS({
|
|
18652
19312
|
"node_modules/yaml/dist/schema/yaml-1.1/set.js"(exports2) {
|
|
18653
19313
|
"use strict";
|
|
19314
|
+
init_define_KT_HUB_FILES();
|
|
18654
19315
|
var identity = require_identity();
|
|
18655
19316
|
var Pair = require_Pair();
|
|
18656
19317
|
var YAMLMap = require_YAMLMap();
|
|
@@ -18740,6 +19401,7 @@ var require_set = __commonJS({
|
|
|
18740
19401
|
var require_timestamp = __commonJS({
|
|
18741
19402
|
"node_modules/yaml/dist/schema/yaml-1.1/timestamp.js"(exports2) {
|
|
18742
19403
|
"use strict";
|
|
19404
|
+
init_define_KT_HUB_FILES();
|
|
18743
19405
|
var stringifyNumber = require_stringifyNumber();
|
|
18744
19406
|
function parseSexagesimal(str6, asBigInt) {
|
|
18745
19407
|
const sign3 = str6[0];
|
|
@@ -18828,6 +19490,7 @@ var require_timestamp = __commonJS({
|
|
|
18828
19490
|
var require_schema3 = __commonJS({
|
|
18829
19491
|
"node_modules/yaml/dist/schema/yaml-1.1/schema.js"(exports2) {
|
|
18830
19492
|
"use strict";
|
|
19493
|
+
init_define_KT_HUB_FILES();
|
|
18831
19494
|
var map = require_map();
|
|
18832
19495
|
var _null = require_null();
|
|
18833
19496
|
var seq = require_seq();
|
|
@@ -18872,6 +19535,7 @@ var require_schema3 = __commonJS({
|
|
|
18872
19535
|
var require_tags = __commonJS({
|
|
18873
19536
|
"node_modules/yaml/dist/schema/tags.js"(exports2) {
|
|
18874
19537
|
"use strict";
|
|
19538
|
+
init_define_KT_HUB_FILES();
|
|
18875
19539
|
var map = require_map();
|
|
18876
19540
|
var _null = require_null();
|
|
18877
19541
|
var seq = require_seq();
|
|
@@ -18966,6 +19630,7 @@ var require_tags = __commonJS({
|
|
|
18966
19630
|
var require_Schema = __commonJS({
|
|
18967
19631
|
"node_modules/yaml/dist/schema/Schema.js"(exports2) {
|
|
18968
19632
|
"use strict";
|
|
19633
|
+
init_define_KT_HUB_FILES();
|
|
18969
19634
|
var identity = require_identity();
|
|
18970
19635
|
var map = require_map();
|
|
18971
19636
|
var seq = require_seq();
|
|
@@ -18998,6 +19663,7 @@ var require_Schema = __commonJS({
|
|
|
18998
19663
|
var require_stringifyDocument = __commonJS({
|
|
18999
19664
|
"node_modules/yaml/dist/stringify/stringifyDocument.js"(exports2) {
|
|
19000
19665
|
"use strict";
|
|
19666
|
+
init_define_KT_HUB_FILES();
|
|
19001
19667
|
var identity = require_identity();
|
|
19002
19668
|
var stringify = require_stringify();
|
|
19003
19669
|
var stringifyComment = require_stringifyComment();
|
|
@@ -19078,6 +19744,7 @@ var require_stringifyDocument = __commonJS({
|
|
|
19078
19744
|
var require_Document = __commonJS({
|
|
19079
19745
|
"node_modules/yaml/dist/doc/Document.js"(exports2) {
|
|
19080
19746
|
"use strict";
|
|
19747
|
+
init_define_KT_HUB_FILES();
|
|
19081
19748
|
var Alias = require_Alias();
|
|
19082
19749
|
var Collection = require_Collection();
|
|
19083
19750
|
var identity = require_identity();
|
|
@@ -19387,6 +20054,7 @@ var require_Document = __commonJS({
|
|
|
19387
20054
|
var require_errors2 = __commonJS({
|
|
19388
20055
|
"node_modules/yaml/dist/errors.js"(exports2) {
|
|
19389
20056
|
"use strict";
|
|
20057
|
+
init_define_KT_HUB_FILES();
|
|
19390
20058
|
var YAMLError = class extends Error {
|
|
19391
20059
|
constructor(name, pos, code, message) {
|
|
19392
20060
|
super();
|
|
@@ -19452,6 +20120,7 @@ ${pointer}
|
|
|
19452
20120
|
var require_resolve_props = __commonJS({
|
|
19453
20121
|
"node_modules/yaml/dist/compose/resolve-props.js"(exports2) {
|
|
19454
20122
|
"use strict";
|
|
20123
|
+
init_define_KT_HUB_FILES();
|
|
19455
20124
|
function resolveProps(tokens, { flow, indicator, next, offset, onError, parentIndent, startOnNewline }) {
|
|
19456
20125
|
let spaceBefore = false;
|
|
19457
20126
|
let atNewline = startOnNewline;
|
|
@@ -19586,6 +20255,7 @@ var require_resolve_props = __commonJS({
|
|
|
19586
20255
|
var require_util_contains_newline = __commonJS({
|
|
19587
20256
|
"node_modules/yaml/dist/compose/util-contains-newline.js"(exports2) {
|
|
19588
20257
|
"use strict";
|
|
20258
|
+
init_define_KT_HUB_FILES();
|
|
19589
20259
|
function containsNewline(key) {
|
|
19590
20260
|
if (!key)
|
|
19591
20261
|
return null;
|
|
@@ -19628,6 +20298,7 @@ var require_util_contains_newline = __commonJS({
|
|
|
19628
20298
|
var require_util_flow_indent_check = __commonJS({
|
|
19629
20299
|
"node_modules/yaml/dist/compose/util-flow-indent-check.js"(exports2) {
|
|
19630
20300
|
"use strict";
|
|
20301
|
+
init_define_KT_HUB_FILES();
|
|
19631
20302
|
var utilContainsNewline = require_util_contains_newline();
|
|
19632
20303
|
function flowIndentCheck(indent, fc, onError) {
|
|
19633
20304
|
if (fc?.type === "flow-collection") {
|
|
@@ -19646,6 +20317,7 @@ var require_util_flow_indent_check = __commonJS({
|
|
|
19646
20317
|
var require_util_map_includes = __commonJS({
|
|
19647
20318
|
"node_modules/yaml/dist/compose/util-map-includes.js"(exports2) {
|
|
19648
20319
|
"use strict";
|
|
20320
|
+
init_define_KT_HUB_FILES();
|
|
19649
20321
|
var identity = require_identity();
|
|
19650
20322
|
function mapIncludes(ctx, items, search) {
|
|
19651
20323
|
const { uniqueKeys } = ctx.options;
|
|
@@ -19662,6 +20334,7 @@ var require_util_map_includes = __commonJS({
|
|
|
19662
20334
|
var require_resolve_block_map = __commonJS({
|
|
19663
20335
|
"node_modules/yaml/dist/compose/resolve-block-map.js"(exports2) {
|
|
19664
20336
|
"use strict";
|
|
20337
|
+
init_define_KT_HUB_FILES();
|
|
19665
20338
|
var Pair = require_Pair();
|
|
19666
20339
|
var YAMLMap = require_YAMLMap();
|
|
19667
20340
|
var resolveProps = require_resolve_props();
|
|
@@ -19770,6 +20443,7 @@ var require_resolve_block_map = __commonJS({
|
|
|
19770
20443
|
var require_resolve_block_seq = __commonJS({
|
|
19771
20444
|
"node_modules/yaml/dist/compose/resolve-block-seq.js"(exports2) {
|
|
19772
20445
|
"use strict";
|
|
20446
|
+
init_define_KT_HUB_FILES();
|
|
19773
20447
|
var YAMLSeq = require_YAMLSeq();
|
|
19774
20448
|
var resolveProps = require_resolve_props();
|
|
19775
20449
|
var utilFlowIndentCheck = require_util_flow_indent_check();
|
|
@@ -19821,6 +20495,7 @@ var require_resolve_block_seq = __commonJS({
|
|
|
19821
20495
|
var require_resolve_end = __commonJS({
|
|
19822
20496
|
"node_modules/yaml/dist/compose/resolve-end.js"(exports2) {
|
|
19823
20497
|
"use strict";
|
|
20498
|
+
init_define_KT_HUB_FILES();
|
|
19824
20499
|
function resolveEnd(end, offset, reqSpace, onError) {
|
|
19825
20500
|
let comment = "";
|
|
19826
20501
|
if (end) {
|
|
@@ -19864,6 +20539,7 @@ var require_resolve_end = __commonJS({
|
|
|
19864
20539
|
var require_resolve_flow_collection = __commonJS({
|
|
19865
20540
|
"node_modules/yaml/dist/compose/resolve-flow-collection.js"(exports2) {
|
|
19866
20541
|
"use strict";
|
|
20542
|
+
init_define_KT_HUB_FILES();
|
|
19867
20543
|
var identity = require_identity();
|
|
19868
20544
|
var Pair = require_Pair();
|
|
19869
20545
|
var YAMLMap = require_YAMLMap();
|
|
@@ -20058,6 +20734,7 @@ var require_resolve_flow_collection = __commonJS({
|
|
|
20058
20734
|
var require_compose_collection = __commonJS({
|
|
20059
20735
|
"node_modules/yaml/dist/compose/compose-collection.js"(exports2) {
|
|
20060
20736
|
"use strict";
|
|
20737
|
+
init_define_KT_HUB_FILES();
|
|
20061
20738
|
var identity = require_identity();
|
|
20062
20739
|
var Scalar = require_Scalar();
|
|
20063
20740
|
var YAMLMap = require_YAMLMap();
|
|
@@ -20123,6 +20800,7 @@ var require_compose_collection = __commonJS({
|
|
|
20123
20800
|
var require_resolve_block_scalar = __commonJS({
|
|
20124
20801
|
"node_modules/yaml/dist/compose/resolve-block-scalar.js"(exports2) {
|
|
20125
20802
|
"use strict";
|
|
20803
|
+
init_define_KT_HUB_FILES();
|
|
20126
20804
|
var Scalar = require_Scalar();
|
|
20127
20805
|
function resolveBlockScalar(ctx, scalar, onError) {
|
|
20128
20806
|
const start = scalar.offset;
|
|
@@ -20306,6 +20984,7 @@ var require_resolve_block_scalar = __commonJS({
|
|
|
20306
20984
|
var require_resolve_flow_scalar = __commonJS({
|
|
20307
20985
|
"node_modules/yaml/dist/compose/resolve-flow-scalar.js"(exports2) {
|
|
20308
20986
|
"use strict";
|
|
20987
|
+
init_define_KT_HUB_FILES();
|
|
20309
20988
|
var Scalar = require_Scalar();
|
|
20310
20989
|
var resolveEnd = require_resolve_end();
|
|
20311
20990
|
function resolveFlowScalar(scalar, strict, onError) {
|
|
@@ -20526,6 +21205,7 @@ var require_resolve_flow_scalar = __commonJS({
|
|
|
20526
21205
|
var require_compose_scalar = __commonJS({
|
|
20527
21206
|
"node_modules/yaml/dist/compose/compose-scalar.js"(exports2) {
|
|
20528
21207
|
"use strict";
|
|
21208
|
+
init_define_KT_HUB_FILES();
|
|
20529
21209
|
var identity = require_identity();
|
|
20530
21210
|
var Scalar = require_Scalar();
|
|
20531
21211
|
var resolveBlockScalar = require_resolve_block_scalar();
|
|
@@ -20607,6 +21287,7 @@ var require_compose_scalar = __commonJS({
|
|
|
20607
21287
|
var require_util_empty_scalar_position = __commonJS({
|
|
20608
21288
|
"node_modules/yaml/dist/compose/util-empty-scalar-position.js"(exports2) {
|
|
20609
21289
|
"use strict";
|
|
21290
|
+
init_define_KT_HUB_FILES();
|
|
20610
21291
|
function emptyScalarPosition(offset, before, pos) {
|
|
20611
21292
|
if (before) {
|
|
20612
21293
|
pos ?? (pos = before.length);
|
|
@@ -20637,6 +21318,7 @@ var require_util_empty_scalar_position = __commonJS({
|
|
|
20637
21318
|
var require_compose_node = __commonJS({
|
|
20638
21319
|
"node_modules/yaml/dist/compose/compose-node.js"(exports2) {
|
|
20639
21320
|
"use strict";
|
|
21321
|
+
init_define_KT_HUB_FILES();
|
|
20640
21322
|
var Alias = require_Alias();
|
|
20641
21323
|
var identity = require_identity();
|
|
20642
21324
|
var composeCollection = require_compose_collection();
|
|
@@ -20743,6 +21425,7 @@ var require_compose_node = __commonJS({
|
|
|
20743
21425
|
var require_compose_doc = __commonJS({
|
|
20744
21426
|
"node_modules/yaml/dist/compose/compose-doc.js"(exports2) {
|
|
20745
21427
|
"use strict";
|
|
21428
|
+
init_define_KT_HUB_FILES();
|
|
20746
21429
|
var Document = require_Document();
|
|
20747
21430
|
var composeNode = require_compose_node();
|
|
20748
21431
|
var resolveEnd = require_resolve_end();
|
|
@@ -20786,6 +21469,7 @@ var require_compose_doc = __commonJS({
|
|
|
20786
21469
|
var require_composer = __commonJS({
|
|
20787
21470
|
"node_modules/yaml/dist/compose/composer.js"(exports2) {
|
|
20788
21471
|
"use strict";
|
|
21472
|
+
init_define_KT_HUB_FILES();
|
|
20789
21473
|
var node_process = require("process");
|
|
20790
21474
|
var directives = require_directives();
|
|
20791
21475
|
var Document = require_Document();
|
|
@@ -20994,6 +21678,7 @@ ${end.comment}` : end.comment;
|
|
|
20994
21678
|
var require_cst_scalar = __commonJS({
|
|
20995
21679
|
"node_modules/yaml/dist/parse/cst-scalar.js"(exports2) {
|
|
20996
21680
|
"use strict";
|
|
21681
|
+
init_define_KT_HUB_FILES();
|
|
20997
21682
|
var resolveBlockScalar = require_resolve_block_scalar();
|
|
20998
21683
|
var resolveFlowScalar = require_resolve_flow_scalar();
|
|
20999
21684
|
var errors = require_errors2();
|
|
@@ -21179,6 +21864,7 @@ var require_cst_scalar = __commonJS({
|
|
|
21179
21864
|
var require_cst_stringify = __commonJS({
|
|
21180
21865
|
"node_modules/yaml/dist/parse/cst-stringify.js"(exports2) {
|
|
21181
21866
|
"use strict";
|
|
21867
|
+
init_define_KT_HUB_FILES();
|
|
21182
21868
|
var stringify = (cst) => "type" in cst ? stringifyToken(cst) : stringifyItem(cst);
|
|
21183
21869
|
function stringifyToken(token) {
|
|
21184
21870
|
switch (token.type) {
|
|
@@ -21240,6 +21926,7 @@ var require_cst_stringify = __commonJS({
|
|
|
21240
21926
|
var require_cst_visit = __commonJS({
|
|
21241
21927
|
"node_modules/yaml/dist/parse/cst-visit.js"(exports2) {
|
|
21242
21928
|
"use strict";
|
|
21929
|
+
init_define_KT_HUB_FILES();
|
|
21243
21930
|
var BREAK = Symbol("break visit");
|
|
21244
21931
|
var SKIP = Symbol("skip children");
|
|
21245
21932
|
var REMOVE = Symbol("remove item");
|
|
@@ -21302,6 +21989,7 @@ var require_cst_visit = __commonJS({
|
|
|
21302
21989
|
var require_cst = __commonJS({
|
|
21303
21990
|
"node_modules/yaml/dist/parse/cst.js"(exports2) {
|
|
21304
21991
|
"use strict";
|
|
21992
|
+
init_define_KT_HUB_FILES();
|
|
21305
21993
|
var cstScalar = require_cst_scalar();
|
|
21306
21994
|
var cstStringify = require_cst_stringify();
|
|
21307
21995
|
var cstVisit = require_cst_visit();
|
|
@@ -21404,6 +22092,7 @@ var require_cst = __commonJS({
|
|
|
21404
22092
|
var require_lexer = __commonJS({
|
|
21405
22093
|
"node_modules/yaml/dist/parse/lexer.js"(exports2) {
|
|
21406
22094
|
"use strict";
|
|
22095
|
+
init_define_KT_HUB_FILES();
|
|
21407
22096
|
var cst = require_cst();
|
|
21408
22097
|
function isEmpty(ch) {
|
|
21409
22098
|
switch (ch) {
|
|
@@ -21993,6 +22682,7 @@ var require_lexer = __commonJS({
|
|
|
21993
22682
|
var require_line_counter = __commonJS({
|
|
21994
22683
|
"node_modules/yaml/dist/parse/line-counter.js"(exports2) {
|
|
21995
22684
|
"use strict";
|
|
22685
|
+
init_define_KT_HUB_FILES();
|
|
21996
22686
|
var LineCounter = class {
|
|
21997
22687
|
constructor() {
|
|
21998
22688
|
this.lineStarts = [];
|
|
@@ -22024,6 +22714,7 @@ var require_line_counter = __commonJS({
|
|
|
22024
22714
|
var require_parser = __commonJS({
|
|
22025
22715
|
"node_modules/yaml/dist/parse/parser.js"(exports2) {
|
|
22026
22716
|
"use strict";
|
|
22717
|
+
init_define_KT_HUB_FILES();
|
|
22027
22718
|
var node_process = require("process");
|
|
22028
22719
|
var cst = require_cst();
|
|
22029
22720
|
var lexer = require_lexer();
|
|
@@ -22898,6 +23589,7 @@ var require_parser = __commonJS({
|
|
|
22898
23589
|
var require_public_api = __commonJS({
|
|
22899
23590
|
"node_modules/yaml/dist/public-api.js"(exports2) {
|
|
22900
23591
|
"use strict";
|
|
23592
|
+
init_define_KT_HUB_FILES();
|
|
22901
23593
|
var composer = require_composer();
|
|
22902
23594
|
var Document = require_Document();
|
|
22903
23595
|
var errors = require_errors2();
|
|
@@ -22995,6 +23687,7 @@ var require_public_api = __commonJS({
|
|
|
22995
23687
|
var require_dist = __commonJS({
|
|
22996
23688
|
"node_modules/yaml/dist/index.js"(exports2) {
|
|
22997
23689
|
"use strict";
|
|
23690
|
+
init_define_KT_HUB_FILES();
|
|
22998
23691
|
var composer = require_composer();
|
|
22999
23692
|
var Document = require_Document();
|
|
23000
23693
|
var Schema = require_Schema();
|
|
@@ -23043,7 +23736,11 @@ var require_dist = __commonJS({
|
|
|
23043
23736
|
}
|
|
23044
23737
|
});
|
|
23045
23738
|
|
|
23739
|
+
// src/index.ts
|
|
23740
|
+
init_define_KT_HUB_FILES();
|
|
23741
|
+
|
|
23046
23742
|
// src/email-code-login.ts
|
|
23743
|
+
init_define_KT_HUB_FILES();
|
|
23047
23744
|
async function completeEmailCodeLogin(d) {
|
|
23048
23745
|
let challenge = d.first;
|
|
23049
23746
|
for (; ; ) {
|
|
@@ -23063,6 +23760,7 @@ async function completeEmailCodeLogin(d) {
|
|
|
23063
23760
|
var import_fs5 = require("fs");
|
|
23064
23761
|
|
|
23065
23762
|
// src/owner-only.ts
|
|
23763
|
+
init_define_KT_HUB_FILES();
|
|
23066
23764
|
var import_fs = require("fs");
|
|
23067
23765
|
function writeOwnerOnly(path, data) {
|
|
23068
23766
|
const { O_WRONLY, O_CREAT, O_NOFOLLOW } = import_fs.constants;
|
|
@@ -23079,12 +23777,13 @@ function writeOwnerOnly(path, data) {
|
|
|
23079
23777
|
}
|
|
23080
23778
|
|
|
23081
23779
|
// src/index.ts
|
|
23082
|
-
var
|
|
23780
|
+
var import_os5 = require("os");
|
|
23083
23781
|
var import_path6 = require("path");
|
|
23084
23782
|
var import_readline2 = require("readline");
|
|
23085
23783
|
var import_net = require("net");
|
|
23086
23784
|
|
|
23087
23785
|
// node_modules/ws/wrapper.mjs
|
|
23786
|
+
init_define_KT_HUB_FILES();
|
|
23088
23787
|
var import_stream = __toESM(require_stream(), 1);
|
|
23089
23788
|
var import_extension = __toESM(require_extension(), 1);
|
|
23090
23789
|
var import_permessage_deflate = __toESM(require_permessage_deflate(), 1);
|
|
@@ -23096,6 +23795,7 @@ var import_websocket_server = __toESM(require_websocket_server(), 1);
|
|
|
23096
23795
|
var wrapper_default = import_websocket.default;
|
|
23097
23796
|
|
|
23098
23797
|
// ../packages/shared/src/types.ts
|
|
23798
|
+
init_define_KT_HUB_FILES();
|
|
23099
23799
|
var SHARED_HOST_INJECT_ONLY_COPY = "A host shared through a vault must use an injection-only credential, so members can connect without seeing it. Mark the credential injection-only in its vault first, then share the host.";
|
|
23100
23800
|
var SHARED_HOST_REFUSAL_COPY = {
|
|
23101
23801
|
shared_host_requires_inject_only: SHARED_HOST_INJECT_ONLY_COPY,
|
|
@@ -23111,6 +23811,7 @@ var isBrokerNodeKind = (v) => BROKER_NODE_KINDS.includes(v);
|
|
|
23111
23811
|
var CLIENT_HEADER = "x-kutrion-client";
|
|
23112
23812
|
|
|
23113
23813
|
// ../packages/shared/src/labels.ts
|
|
23814
|
+
init_define_KT_HUB_FILES();
|
|
23114
23815
|
var ACTION_WORDS = {
|
|
23115
23816
|
AI: "AI",
|
|
23116
23817
|
API: "API",
|
|
@@ -23210,7 +23911,20 @@ function auditResultLabel(raw) {
|
|
|
23210
23911
|
return humanizeAction(raw);
|
|
23211
23912
|
}
|
|
23212
23913
|
|
|
23914
|
+
// ../packages/shared/src/client.ts
|
|
23915
|
+
init_define_KT_HUB_FILES();
|
|
23916
|
+
|
|
23917
|
+
// ../packages/shared/src/payload-crypto.ts
|
|
23918
|
+
init_define_KT_HUB_FILES();
|
|
23919
|
+
|
|
23920
|
+
// ../packages/shared/node_modules/@noble/post-quantum/hybrid.js
|
|
23921
|
+
init_define_KT_HUB_FILES();
|
|
23922
|
+
|
|
23923
|
+
// ../packages/shared/node_modules/@noble/curves/utils.js
|
|
23924
|
+
init_define_KT_HUB_FILES();
|
|
23925
|
+
|
|
23213
23926
|
// ../packages/shared/node_modules/@noble/hashes/utils.js
|
|
23927
|
+
init_define_KT_HUB_FILES();
|
|
23214
23928
|
function isBytes(a) {
|
|
23215
23929
|
return a instanceof Uint8Array || ArrayBuffer.isView(a) && a.constructor.name === "Uint8Array" && "BYTES_PER_ELEMENT" in a && a.BYTES_PER_ELEMENT === 1;
|
|
23216
23930
|
}
|
|
@@ -23559,7 +24273,11 @@ function validateObject(object, fields = {}, optFields = {}) {
|
|
|
23559
24273
|
iter(optFields, true);
|
|
23560
24274
|
}
|
|
23561
24275
|
|
|
24276
|
+
// ../packages/shared/node_modules/@noble/curves/abstract/curve.js
|
|
24277
|
+
init_define_KT_HUB_FILES();
|
|
24278
|
+
|
|
23562
24279
|
// ../packages/shared/node_modules/@noble/curves/abstract/modular.js
|
|
24280
|
+
init_define_KT_HUB_FILES();
|
|
23563
24281
|
var _0n2 = /* @__PURE__ */ BigInt(0);
|
|
23564
24282
|
var _1n2 = /* @__PURE__ */ BigInt(1);
|
|
23565
24283
|
var _2n = /* @__PURE__ */ BigInt(2);
|
|
@@ -24197,7 +24915,11 @@ function createKeygen(randomSecretKey, getPublicKey) {
|
|
|
24197
24915
|
};
|
|
24198
24916
|
}
|
|
24199
24917
|
|
|
24918
|
+
// ../packages/shared/node_modules/@noble/curves/abstract/weierstrass.js
|
|
24919
|
+
init_define_KT_HUB_FILES();
|
|
24920
|
+
|
|
24200
24921
|
// ../packages/shared/node_modules/@noble/hashes/hmac.js
|
|
24922
|
+
init_define_KT_HUB_FILES();
|
|
24201
24923
|
var _HMAC = class {
|
|
24202
24924
|
oHash;
|
|
24203
24925
|
iHash;
|
|
@@ -25181,7 +25903,11 @@ function ecdsa(Point, hash, ecdsaOpts = {}) {
|
|
|
25181
25903
|
});
|
|
25182
25904
|
}
|
|
25183
25905
|
|
|
25906
|
+
// ../packages/shared/node_modules/@noble/hashes/sha2.js
|
|
25907
|
+
init_define_KT_HUB_FILES();
|
|
25908
|
+
|
|
25184
25909
|
// ../packages/shared/node_modules/@noble/hashes/_md.js
|
|
25910
|
+
init_define_KT_HUB_FILES();
|
|
25185
25911
|
function Chi(a, b, c) {
|
|
25186
25912
|
return a & b ^ ~a & c;
|
|
25187
25913
|
}
|
|
@@ -25296,6 +26022,7 @@ var SHA256_IV = /* @__PURE__ */ Uint32Array.from([
|
|
|
25296
26022
|
]);
|
|
25297
26023
|
|
|
25298
26024
|
// ../packages/shared/node_modules/@noble/hashes/_u64.js
|
|
26025
|
+
init_define_KT_HUB_FILES();
|
|
25299
26026
|
var U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1);
|
|
25300
26027
|
var _32n = /* @__PURE__ */ BigInt(32);
|
|
25301
26028
|
function fromBig(n, le = false) {
|
|
@@ -25482,6 +26209,7 @@ var sha256 = /* @__PURE__ */ createHasher(
|
|
|
25482
26209
|
);
|
|
25483
26210
|
|
|
25484
26211
|
// ../packages/shared/node_modules/@noble/curves/abstract/fft.js
|
|
26212
|
+
init_define_KT_HUB_FILES();
|
|
25485
26213
|
function checkU32(n) {
|
|
25486
26214
|
if (!Number.isSafeInteger(n) || n < 0 || n > 4294967295)
|
|
25487
26215
|
throw new Error("wrong u32 integer:" + n);
|
|
@@ -25567,6 +26295,7 @@ var FFTCore = (F2, coreOpts) => {
|
|
|
25567
26295
|
};
|
|
25568
26296
|
|
|
25569
26297
|
// ../packages/shared/node_modules/@noble/curves/nist.js
|
|
26298
|
+
init_define_KT_HUB_FILES();
|
|
25570
26299
|
var p256_CURVE = /* @__PURE__ */ (() => ({
|
|
25571
26300
|
p: BigInt("0xffffffff00000001000000000000000000000000ffffffffffffffffffffffff"),
|
|
25572
26301
|
n: BigInt("0xffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551"),
|
|
@@ -25580,6 +26309,7 @@ var p256_Point = /* @__PURE__ */ weierstrass(p256_CURVE);
|
|
|
25580
26309
|
var p256 = /* @__PURE__ */ ecdsa(p256_Point, sha256);
|
|
25581
26310
|
|
|
25582
26311
|
// ../packages/shared/node_modules/@noble/hashes/sha3.js
|
|
26312
|
+
init_define_KT_HUB_FILES();
|
|
25583
26313
|
var _0n5 = BigInt(0);
|
|
25584
26314
|
var _1n5 = BigInt(1);
|
|
25585
26315
|
var _2n3 = BigInt(2);
|
|
@@ -25793,7 +26523,14 @@ var genShake = (suffix, blockLen, outputLen, info = {}) => createHasher((opts2 =
|
|
|
25793
26523
|
var shake128 = /* @__PURE__ */ genShake(31, 168, 16, /* @__PURE__ */ oidNist(11));
|
|
25794
26524
|
var shake256 = /* @__PURE__ */ genShake(31, 136, 32, /* @__PURE__ */ oidNist(12));
|
|
25795
26525
|
|
|
26526
|
+
// ../packages/shared/node_modules/@noble/post-quantum/ml-kem.js
|
|
26527
|
+
init_define_KT_HUB_FILES();
|
|
26528
|
+
|
|
26529
|
+
// ../packages/shared/node_modules/@noble/post-quantum/_crystals.js
|
|
26530
|
+
init_define_KT_HUB_FILES();
|
|
26531
|
+
|
|
25796
26532
|
// ../packages/shared/node_modules/@noble/post-quantum/utils.js
|
|
26533
|
+
init_define_KT_HUB_FILES();
|
|
25797
26534
|
var abytesDoc = abytes;
|
|
25798
26535
|
var randomBytes3 = randomBytes;
|
|
25799
26536
|
function equalBytes(a, b) {
|
|
@@ -26517,6 +27254,7 @@ async function decryptEnvelope(sk, enc2) {
|
|
|
26517
27254
|
}
|
|
26518
27255
|
|
|
26519
27256
|
// ../packages/shared/src/transfer-stream.ts
|
|
27257
|
+
init_define_KT_HUB_FILES();
|
|
26520
27258
|
var CONTENT_RANGE = /^bytes (\d+)-(\d+)\/(\d+|\*)$/;
|
|
26521
27259
|
var RangeNotUnderstoodError = class extends Error {
|
|
26522
27260
|
constructor(contentRange) {
|
|
@@ -26662,6 +27400,7 @@ async function prepareUpload(body) {
|
|
|
26662
27400
|
}
|
|
26663
27401
|
|
|
26664
27402
|
// ../packages/shared/src/error-hop.ts
|
|
27403
|
+
init_define_KT_HUB_FILES();
|
|
26665
27404
|
var HOP_OF_SLUG = {
|
|
26666
27405
|
api_unavailable: "edge",
|
|
26667
27406
|
request_timeout: "server",
|
|
@@ -26691,6 +27430,7 @@ function failedHopOf(slug, status) {
|
|
|
26691
27430
|
}
|
|
26692
27431
|
|
|
26693
27432
|
// ../packages/shared/src/refresh-signing.ts
|
|
27433
|
+
init_define_KT_HUB_FILES();
|
|
26694
27434
|
var REFRESH_SIGNATURE_PREFIX = "kutrion-refresh/v1|";
|
|
26695
27435
|
function refreshSigningMessage(refreshToken) {
|
|
26696
27436
|
return REFRESH_SIGNATURE_PREFIX + refreshToken;
|
|
@@ -26854,8 +27594,8 @@ function guardRedirects(inner = fetch) {
|
|
|
26854
27594
|
};
|
|
26855
27595
|
}
|
|
26856
27596
|
var LOOPBACK_IPV4 = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/;
|
|
26857
|
-
function isLoopbackHost(
|
|
26858
|
-
const h =
|
|
27597
|
+
function isLoopbackHost(hostname3) {
|
|
27598
|
+
const h = hostname3.replace(/^\[|\]$/g, "").replace(/\.$/, "").toLowerCase();
|
|
26859
27599
|
if (h === "localhost" || h.endsWith(".localhost") || h === "::1") return true;
|
|
26860
27600
|
const quad = LOOPBACK_IPV4.exec(h);
|
|
26861
27601
|
return !!quad && quad[1] === "127" && quad.slice(1).every((o) => Number(o) <= 255);
|
|
@@ -27840,8 +28580,8 @@ var KutrionClient = class {
|
|
|
27840
28580
|
return this.req("GET", `/vault/changes?${q.toString()}`);
|
|
27841
28581
|
}
|
|
27842
28582
|
// VT-405k: team vaults (in the caller's org) holding a login for `host` that the caller can't access.
|
|
27843
|
-
listRequestableVaults(
|
|
27844
|
-
return this.req("GET", `/vault/host-matches?host=${encodeURIComponent(
|
|
28583
|
+
listRequestableVaults(host2) {
|
|
28584
|
+
return this.req("GET", `/vault/host-matches?host=${encodeURIComponent(host2)}`);
|
|
27845
28585
|
}
|
|
27846
28586
|
getCredential(vaultId, cid) {
|
|
27847
28587
|
return this.req("GET", `/vault/${vaultId}/credentials/${cid}`);
|
|
@@ -28347,8 +29087,8 @@ var KutrionClient = class {
|
|
|
28347
29087
|
startRecoveryCheckout() {
|
|
28348
29088
|
return this.req("POST", "/billing/recovery/checkout");
|
|
28349
29089
|
}
|
|
28350
|
-
changePreview(plan_code) {
|
|
28351
|
-
return this.req("GET", `/billing/change-preview?plan_code=${encodeURIComponent(plan_code)}`);
|
|
29090
|
+
changePreview(plan_code, coupon_code) {
|
|
29091
|
+
return this.req("GET", `/billing/change-preview?plan_code=${encodeURIComponent(plan_code)}${coupon_code ? `&coupon_code=${encodeURIComponent(coupon_code)}` : ""}`);
|
|
28352
29092
|
}
|
|
28353
29093
|
cancelScheduledChange() {
|
|
28354
29094
|
return this.req("POST", "/billing/change/cancel-scheduled");
|
|
@@ -29761,7 +30501,11 @@ var KutrionClient = class {
|
|
|
29761
30501
|
}
|
|
29762
30502
|
};
|
|
29763
30503
|
|
|
30504
|
+
// ../packages/shared/src/billing.ts
|
|
30505
|
+
init_define_KT_HUB_FILES();
|
|
30506
|
+
|
|
29764
30507
|
// ../packages/shared/src/currency.ts
|
|
30508
|
+
init_define_KT_HUB_FILES();
|
|
29765
30509
|
var ISO_4217_EXPONENT = {
|
|
29766
30510
|
BIF: 0,
|
|
29767
30511
|
CLP: 0,
|
|
@@ -29884,6 +30628,7 @@ var SUSPENDED_PAYMENT_FAILURE = "This suspension was caused by a renewal payment
|
|
|
29884
30628
|
var SUSPENDED_PAYMENT_FAILURE_REMEDY = "It's lifted by settling that outstanding payment, not by buying a plan again.";
|
|
29885
30629
|
|
|
29886
30630
|
// ../packages/shared/src/destination-refusal.ts
|
|
30631
|
+
init_define_KT_HUB_FILES();
|
|
29887
30632
|
var DESTINATION_REFUSAL_REASONS = [
|
|
29888
30633
|
"bound",
|
|
29889
30634
|
"not_in_bound_set",
|
|
@@ -29982,6 +30727,7 @@ function destinationRefusalLines(r, indent = " ") {
|
|
|
29982
30727
|
}
|
|
29983
30728
|
|
|
29984
30729
|
// ../packages/shared/src/credential-size-refusal.ts
|
|
30730
|
+
init_define_KT_HUB_FILES();
|
|
29985
30731
|
var str2 = (v) => typeof v === "string" && v.trim() ? v.replace(/\s+/g, " ").trim() : null;
|
|
29986
30732
|
var num = (v) => typeof v === "number" && Number.isFinite(v) ? v : null;
|
|
29987
30733
|
function parseCredentialSizeRefusal(body) {
|
|
@@ -30011,6 +30757,7 @@ function credentialSizeRefusalLines(r) {
|
|
|
30011
30757
|
}
|
|
30012
30758
|
|
|
30013
30759
|
// ../packages/shared/src/recovery-copy.ts
|
|
30760
|
+
init_define_KT_HUB_FILES();
|
|
30014
30761
|
var DUNNED_STATUSES = /* @__PURE__ */ new Set(["past_due", "past_due_expired", "suspended"]);
|
|
30015
30762
|
var SPOKEN_BLOCKS = /* @__PURE__ */ new Set(["subscription_suspended", "managed_subscription", "debt_exceeds_one_period"]);
|
|
30016
30763
|
function recoverySpeaks(r) {
|
|
@@ -30109,6 +30856,7 @@ function recoveryLines(r) {
|
|
|
30109
30856
|
}
|
|
30110
30857
|
|
|
30111
30858
|
// ../packages/shared/src/sign-in-refusal.ts
|
|
30859
|
+
init_define_KT_HUB_FILES();
|
|
30112
30860
|
var SIGN_IN_CODE_COPY = {
|
|
30113
30861
|
email_code_required: {
|
|
30114
30862
|
title: "Sign in with an emailed code",
|
|
@@ -30126,6 +30874,7 @@ var MICROSOFT_EMAIL_UNVERIFIED = `Microsoft did not confirm this email address,
|
|
|
30126
30874
|
var MICROSOFT_EMAIL_EXISTS = `An account already uses this email, and Microsoft did not confirm it. Sign in with your password, then ${MICROSOFT_LINK_STEP}`;
|
|
30127
30875
|
|
|
30128
30876
|
// ../packages/shared/src/platform-flag-refusal.ts
|
|
30877
|
+
init_define_KT_HUB_FILES();
|
|
30129
30878
|
var PLATFORM_FLAG_REFUSAL_COPY = {
|
|
30130
30879
|
ai_assistant_disabled: `AI features are turned off on this deployment. ${PLATFORM_FLAG_OPERATOR}`,
|
|
30131
30880
|
device_clients_disabled: `Sign-in from the desktop, mobile, extension and CLI apps is turned off on this deployment. Use the web app. ${PLATFORM_FLAG_OPERATOR}`,
|
|
@@ -30138,6 +30887,7 @@ function platformFlagRefusalText(code) {
|
|
|
30138
30887
|
}
|
|
30139
30888
|
|
|
30140
30889
|
// ../packages/shared/src/ssh-refusal.ts
|
|
30890
|
+
init_define_KT_HUB_FILES();
|
|
30141
30891
|
var SSH_REFUSAL_CLASSIFICATION = {
|
|
30142
30892
|
// ---- host key: a pin exists and this host did not match it, or could not be checked ----
|
|
30143
30893
|
// The pin must be cleared by an admin first; reconnecting re-earns the identical refusal.
|
|
@@ -30275,6 +31025,7 @@ function refusalFamily(code) {
|
|
|
30275
31025
|
}
|
|
30276
31026
|
|
|
30277
31027
|
// ../packages/shared/src/host-key.ts
|
|
31028
|
+
init_define_KT_HUB_FILES();
|
|
30278
31029
|
var HOST_KEY_CONFIRM_COPY = {
|
|
30279
31030
|
heading: "Confirm this host's identity before connecting",
|
|
30280
31031
|
body: "This host is new to your organization, so Kutrion paused before signing in and did not send your credential. Confirming records this key for the whole organization; every later connection must match it.",
|
|
@@ -30295,12 +31046,14 @@ function isOwnHost(pending, own) {
|
|
|
30295
31046
|
}
|
|
30296
31047
|
|
|
30297
31048
|
// ../packages/shared/src/conn-import-plan.ts
|
|
31049
|
+
init_define_KT_HUB_FILES();
|
|
30298
31050
|
function connImportNeedsCredential(row) {
|
|
30299
31051
|
return !row.username || !row.password && !row.credential_id && !(row.enroll && row.protocol === "SFTP");
|
|
30300
31052
|
}
|
|
30301
31053
|
var CONN_IMPORT_NO_CREDENTIAL_HINT = "Will not import: this export carries no password. Enter a username and password to import it.";
|
|
30302
31054
|
|
|
30303
31055
|
// ../packages/shared/src/jump-refusal.ts
|
|
31056
|
+
init_define_KT_HUB_FILES();
|
|
30304
31057
|
var JUMP_REFUSAL_CODES = [
|
|
30305
31058
|
"jump_not_found",
|
|
30306
31059
|
"jump_forbidden",
|
|
@@ -30395,6 +31148,7 @@ function jumpHostInUseSummary(r, deletingName) {
|
|
|
30395
31148
|
var JUMP_HOST_IN_USE_ACTION = "Point each of these at a different jump host, or clear the jump host to reach it directly, and then delete this connection.";
|
|
30396
31149
|
|
|
30397
31150
|
// ../packages/shared/src/ssh-session-protocol.ts
|
|
31151
|
+
init_define_KT_HUB_FILES();
|
|
30398
31152
|
function wsOrigin(apiBase) {
|
|
30399
31153
|
return apiBase.replace(/\/+$/, "").replace(/^http/, "ws");
|
|
30400
31154
|
}
|
|
@@ -30552,6 +31306,7 @@ window.__vtEndedByAdminCode = ${JSON.stringify(SESSION_ENDED_BY_ADMIN)};
|
|
|
30552
31306
|
`;
|
|
30553
31307
|
|
|
30554
31308
|
// ../packages/shared/src/localname.ts
|
|
31309
|
+
init_define_KT_HUB_FILES();
|
|
30555
31310
|
var WINDOWS_RESERVED = /* @__PURE__ */ new Set([
|
|
30556
31311
|
"CON",
|
|
30557
31312
|
"PRN",
|
|
@@ -30589,9 +31344,20 @@ function safeLocalName(name) {
|
|
|
30589
31344
|
var localName = (name) => safeLocalName(name) || name;
|
|
30590
31345
|
|
|
30591
31346
|
// ../packages/shared/src/asciicast.ts
|
|
31347
|
+
init_define_KT_HUB_FILES();
|
|
30592
31348
|
var SUMMARY_ENGINE_LABEL = { lan: "Self-hosted AI", cloud: "Cloud AI", none: "No model" };
|
|
30593
31349
|
|
|
31350
|
+
// ../packages/shared/src/vault-key.ts
|
|
31351
|
+
init_define_KT_HUB_FILES();
|
|
31352
|
+
|
|
31353
|
+
// ../packages/shared/node_modules/@noble/hashes/argon2.js
|
|
31354
|
+
init_define_KT_HUB_FILES();
|
|
31355
|
+
|
|
31356
|
+
// ../packages/shared/node_modules/@noble/hashes/blake2.js
|
|
31357
|
+
init_define_KT_HUB_FILES();
|
|
31358
|
+
|
|
30594
31359
|
// ../packages/shared/node_modules/@noble/hashes/_blake.js
|
|
31360
|
+
init_define_KT_HUB_FILES();
|
|
30595
31361
|
var BSIGMA = /* @__PURE__ */ Uint8Array.from([
|
|
30596
31362
|
0,
|
|
30597
31363
|
1,
|
|
@@ -31630,6 +32396,7 @@ async function openPrivateItem(item, sealed, vaultKey) {
|
|
|
31630
32396
|
}
|
|
31631
32397
|
|
|
31632
32398
|
// ../packages/shared/src/private-vault-copy.ts
|
|
32399
|
+
init_define_KT_HUB_FILES();
|
|
31633
32400
|
var VAULT_PASSPHRASE_MIN_LENGTH = 12;
|
|
31634
32401
|
var PRIVATE_VAULT_COPY = {
|
|
31635
32402
|
heading: "Private vault key",
|
|
@@ -31710,6 +32477,7 @@ var PRIVATE_VAULT_COPY = {
|
|
|
31710
32477
|
};
|
|
31711
32478
|
|
|
31712
32479
|
// src/args.ts
|
|
32480
|
+
init_define_KT_HUB_FILES();
|
|
31713
32481
|
function parseForwardSpec(spec) {
|
|
31714
32482
|
const m = spec.match(/^(\d{1,5}):(.+):(\d{1,5})$/);
|
|
31715
32483
|
if (!m) return null;
|
|
@@ -31854,6 +32622,7 @@ function parseArgs(argv) {
|
|
|
31854
32622
|
}
|
|
31855
32623
|
|
|
31856
32624
|
// src/history.ts
|
|
32625
|
+
init_define_KT_HUB_FILES();
|
|
31857
32626
|
function historyScopeParams(flags) {
|
|
31858
32627
|
const out = {};
|
|
31859
32628
|
for (const [flag, key] of [["session", "session_id"], ["host", "connection_id"], ["since", "since"], ["until", "until"]]) {
|
|
@@ -31871,6 +32640,7 @@ function historyScanLine(scan) {
|
|
|
31871
32640
|
}
|
|
31872
32641
|
|
|
31873
32642
|
// src/exit-codes.ts
|
|
32643
|
+
init_define_KT_HUB_FILES();
|
|
31874
32644
|
var EXIT_ERROR = 1;
|
|
31875
32645
|
var EXIT_UNAUTHENTICATED = 10;
|
|
31876
32646
|
var EXIT_PAYMENT_REQUIRED = 11;
|
|
@@ -31898,6 +32668,7 @@ function exitForStatus(status) {
|
|
|
31898
32668
|
}
|
|
31899
32669
|
|
|
31900
32670
|
// src/keychain.ts
|
|
32671
|
+
init_define_KT_HUB_FILES();
|
|
31901
32672
|
var import_child_process2 = require("child_process");
|
|
31902
32673
|
var import_crypto = require("crypto");
|
|
31903
32674
|
var import_fs2 = require("fs");
|
|
@@ -31905,12 +32676,14 @@ var import_os = require("os");
|
|
|
31905
32676
|
var import_path2 = require("path");
|
|
31906
32677
|
|
|
31907
32678
|
// src/env.ts
|
|
32679
|
+
init_define_KT_HUB_FILES();
|
|
31908
32680
|
function ktEnv(name, env = process.env) {
|
|
31909
32681
|
const current = env[`KT_${name}`];
|
|
31910
32682
|
return current !== void 0 && current !== "" ? current : env[`VT_${name}`];
|
|
31911
32683
|
}
|
|
31912
32684
|
|
|
31913
32685
|
// src/win-acl.ts
|
|
32686
|
+
init_define_KT_HUB_FILES();
|
|
31914
32687
|
var import_child_process = require("child_process");
|
|
31915
32688
|
var import_path = require("path");
|
|
31916
32689
|
var SPAWN_TIMEOUT_MS = 4e3;
|
|
@@ -32391,11 +33164,13 @@ function osKeychainAvailable() {
|
|
|
32391
33164
|
}
|
|
32392
33165
|
|
|
32393
33166
|
// src/app-signin.ts
|
|
33167
|
+
init_define_KT_HUB_FILES();
|
|
32394
33168
|
var import_node_crypto4 = require("node:crypto");
|
|
32395
33169
|
var import_node_child_process = require("node:child_process");
|
|
32396
33170
|
var import_node_http = require("node:http");
|
|
32397
33171
|
|
|
32398
33172
|
// src/device-identity.ts
|
|
33173
|
+
init_define_KT_HUB_FILES();
|
|
32399
33174
|
var import_node_crypto = require("node:crypto");
|
|
32400
33175
|
function generateDeviceKey() {
|
|
32401
33176
|
const { publicKey, privateKey } = (0, import_node_crypto.generateKeyPairSync)("ed25519");
|
|
@@ -32432,6 +33207,7 @@ async function bindRefreshKey(deviceId, devicePkcs8B64, certMessage, transport)
|
|
|
32432
33207
|
}
|
|
32433
33208
|
|
|
32434
33209
|
// src/hub/borrow-confirm.ts
|
|
33210
|
+
init_define_KT_HUB_FILES();
|
|
32435
33211
|
var import_node_url = require("node:url");
|
|
32436
33212
|
var text = (v) => typeof v === "string" && v.trim() ? v.trim() : null;
|
|
32437
33213
|
var SCRIPTS = [
|
|
@@ -32515,15 +33291,19 @@ function createBorrowConfirm(deps) {
|
|
|
32515
33291
|
}
|
|
32516
33292
|
|
|
32517
33293
|
// src/hub-login.ts
|
|
33294
|
+
init_define_KT_HUB_FILES();
|
|
32518
33295
|
var import_os2 = require("os");
|
|
32519
33296
|
var import_path3 = require("path");
|
|
32520
33297
|
|
|
32521
33298
|
// src/hub/hub-channel.ts
|
|
33299
|
+
init_define_KT_HUB_FILES();
|
|
32522
33300
|
var import_node_crypto2 = require("node:crypto");
|
|
32523
33301
|
var import_node_fs = require("node:fs");
|
|
32524
33302
|
var import_node_os = require("node:os");
|
|
32525
33303
|
var import_node_path = require("node:path");
|
|
32526
|
-
var CHANNEL_VERSION =
|
|
33304
|
+
var CHANNEL_VERSION = 3;
|
|
33305
|
+
var BORROW_VERSION = 2;
|
|
33306
|
+
var supportedVersion = (v) => v === BORROW_VERSION || v === CHANNEL_VERSION;
|
|
32527
33307
|
var DOMAIN = "kutrion-hub-channel/v1";
|
|
32528
33308
|
var NONCE_RE = /^[A-Za-z0-9_-]{43}$/;
|
|
32529
33309
|
var PUBKEY_RE = /^[A-Za-z0-9+/]{40,}={0,2}$/;
|
|
@@ -32562,6 +33342,18 @@ function grantTranscript(p) {
|
|
|
32562
33342
|
(0, import_node_crypto2.createHash)("sha256").update(p.code).digest("hex")
|
|
32563
33343
|
].join("|");
|
|
32564
33344
|
}
|
|
33345
|
+
var seedParts = (p) => [
|
|
33346
|
+
field(p.client),
|
|
33347
|
+
field(p.satPk),
|
|
33348
|
+
field(p.hubPk),
|
|
33349
|
+
field(p.devicePk),
|
|
33350
|
+
field(p.cnonce),
|
|
33351
|
+
field(p.snonce),
|
|
33352
|
+
field(p.origin)
|
|
33353
|
+
];
|
|
33354
|
+
var seedRequestTranscript = (p) => [DOMAIN, "seedreq", ...seedParts(p)].join("|");
|
|
33355
|
+
var seedAcceptTranscript = (p) => [DOMAIN, "seedok", ...seedParts(p)].join("|");
|
|
33356
|
+
var seedTranscript = (p) => [DOMAIN, "seed", ...seedParts(p), (0, import_node_crypto2.createHash)("sha256").update(p.code).digest("hex")].join("|");
|
|
32565
33357
|
function apiOrigin(base) {
|
|
32566
33358
|
try {
|
|
32567
33359
|
const u = new URL(base);
|
|
@@ -32745,37 +33537,63 @@ var REFUSAL_REASONS = [
|
|
|
32745
33537
|
"unavailable",
|
|
32746
33538
|
"origin_mismatch",
|
|
32747
33539
|
"client_key_revoked",
|
|
33540
|
+
"hub_other_account",
|
|
33541
|
+
"hub_private_vault",
|
|
32748
33542
|
"protocol"
|
|
32749
33543
|
];
|
|
32750
33544
|
function parseOffer(raw) {
|
|
32751
33545
|
const o = raw;
|
|
32752
33546
|
if (!o || typeof o !== "object") return null;
|
|
32753
|
-
if (o.v
|
|
33547
|
+
if (!supportedVersion(o.v) || o.t !== "offer") return null;
|
|
32754
33548
|
if (typeof o.hub_pk !== "string" || !isEd25519PublicKey(o.hub_pk)) return null;
|
|
32755
33549
|
if (typeof o.snonce !== "string" || !NONCE_RE.test(o.snonce)) return null;
|
|
32756
|
-
return { v:
|
|
33550
|
+
return { v: o.v, t: "offer", hub_pk: o.hub_pk, snonce: o.snonce };
|
|
32757
33551
|
}
|
|
32758
33552
|
var CODE_RE = /^[A-Za-z0-9_-]{43}$/;
|
|
32759
33553
|
function parseGrant(raw) {
|
|
32760
33554
|
const o = raw;
|
|
32761
33555
|
if (!o || typeof o !== "object") return null;
|
|
32762
|
-
if (o.v
|
|
33556
|
+
if (!supportedVersion(o.v) || o.t !== "grant") return null;
|
|
32763
33557
|
if (typeof o.code !== "string" || !CODE_RE.test(o.code)) return null;
|
|
32764
33558
|
if (typeof o.expires_in !== "number" || !Number.isFinite(o.expires_in) || o.expires_in <= 0) return null;
|
|
32765
33559
|
if (typeof o.sig !== "string" || !SIG_RE.test(o.sig)) return null;
|
|
32766
|
-
return { v:
|
|
33560
|
+
return { v: o.v, t: "grant", code: o.code, expires_in: o.expires_in, sig: o.sig };
|
|
32767
33561
|
}
|
|
32768
33562
|
function parseRefuse(raw) {
|
|
32769
33563
|
const o = raw;
|
|
32770
33564
|
if (!o || typeof o !== "object") return null;
|
|
32771
|
-
if (o.v
|
|
33565
|
+
if (!supportedVersion(o.v) || o.t !== "refuse") return null;
|
|
32772
33566
|
if (typeof o.reason !== "string" || !REFUSAL_REASONS.includes(o.reason)) return null;
|
|
32773
|
-
return { v:
|
|
33567
|
+
return { v: o.v, t: "refuse", reason: o.reason };
|
|
33568
|
+
}
|
|
33569
|
+
function parseOfferSeed(raw) {
|
|
33570
|
+
const o = raw;
|
|
33571
|
+
if (!o || typeof o !== "object") return null;
|
|
33572
|
+
if (o.v !== CHANNEL_VERSION || o.t !== "offer-seed") return null;
|
|
33573
|
+
if (typeof o.hub_pk !== "string" || !isEd25519PublicKey(o.hub_pk)) return null;
|
|
33574
|
+
if (typeof o.device_pk !== "string" || !isEd25519PublicKey(o.device_pk)) return null;
|
|
33575
|
+
if (typeof o.snonce !== "string" || !NONCE_RE.test(o.snonce)) return null;
|
|
33576
|
+
return { v: CHANNEL_VERSION, t: "offer-seed", hub_pk: o.hub_pk, device_pk: o.device_pk, snonce: o.snonce };
|
|
33577
|
+
}
|
|
33578
|
+
function parseAcceptSeed(raw) {
|
|
33579
|
+
const o = raw;
|
|
33580
|
+
if (!o || typeof o !== "object") return null;
|
|
33581
|
+
if (o.v !== CHANNEL_VERSION || o.t !== "accept-seed") return null;
|
|
33582
|
+
if (typeof o.sig !== "string" || !SIG_RE.test(o.sig)) return null;
|
|
33583
|
+
return { v: CHANNEL_VERSION, t: "accept-seed", sig: o.sig };
|
|
33584
|
+
}
|
|
33585
|
+
function parseSeeded(raw) {
|
|
33586
|
+
const o = raw;
|
|
33587
|
+
if (!o || typeof o !== "object") return null;
|
|
33588
|
+
if (o.v !== CHANNEL_VERSION || o.t !== "seeded") return null;
|
|
33589
|
+
if (o.result !== "joined" && o.result !== "already") return null;
|
|
33590
|
+
return { v: CHANNEL_VERSION, t: "seeded", result: o.result };
|
|
32774
33591
|
}
|
|
32775
33592
|
var GRANT_WINDOW_MS = 10 * 60 * 1e3;
|
|
32776
33593
|
var PROMPT_WINDOW_MS = 10 * 60 * 1e3;
|
|
32777
33594
|
|
|
32778
33595
|
// src/hub/hub-borrow.ts
|
|
33596
|
+
init_define_KT_HUB_FILES();
|
|
32779
33597
|
var import_node_net = require("node:net");
|
|
32780
33598
|
var import_node_crypto3 = require("node:crypto");
|
|
32781
33599
|
var REPLY_DEADLINE_MS = 13e4;
|
|
@@ -32807,7 +33625,7 @@ function borrowFromHub(deps) {
|
|
|
32807
33625
|
sock.on("close", () => finish({ ok: false, reason: "hub_not_running" }));
|
|
32808
33626
|
sock.on("connect", () => {
|
|
32809
33627
|
sock.write(`${JSON.stringify({
|
|
32810
|
-
v:
|
|
33628
|
+
v: BORROW_VERSION,
|
|
32811
33629
|
t: "hello",
|
|
32812
33630
|
client: deps.identity.client,
|
|
32813
33631
|
pk: deps.identity.publicSpkiB64,
|
|
@@ -32854,7 +33672,7 @@ function borrowFromHub(deps) {
|
|
|
32854
33672
|
origin
|
|
32855
33673
|
})
|
|
32856
33674
|
);
|
|
32857
|
-
sock.write(`${JSON.stringify({ v:
|
|
33675
|
+
sock.write(`${JSON.stringify({ v: BORROW_VERSION, t: "prove", sig })}
|
|
32858
33676
|
`);
|
|
32859
33677
|
continue;
|
|
32860
33678
|
}
|
|
@@ -32910,7 +33728,7 @@ function forgetAtHub(deps) {
|
|
|
32910
33728
|
sock.on("error", finish);
|
|
32911
33729
|
sock.on("close", finish);
|
|
32912
33730
|
sock.on("connect", () => {
|
|
32913
|
-
sock.write(`${JSON.stringify({ v:
|
|
33731
|
+
sock.write(`${JSON.stringify({ v: BORROW_VERSION, t: "hello", client: deps.client, pk: satPk, cnonce, origin })}
|
|
32914
33732
|
`);
|
|
32915
33733
|
});
|
|
32916
33734
|
sock.on("data", (chunk) => {
|
|
@@ -32930,7 +33748,7 @@ function forgetAtHub(deps) {
|
|
|
32930
33748
|
deps.privatePkcs8B64,
|
|
32931
33749
|
forgetTranscript({ client: deps.client, satPk, hubPk: offer.hub_pk, cnonce, snonce: offer.snonce })
|
|
32932
33750
|
);
|
|
32933
|
-
sock.end(`${JSON.stringify({ v:
|
|
33751
|
+
sock.end(`${JSON.stringify({ v: BORROW_VERSION, t: "forget", sig })}
|
|
32934
33752
|
`);
|
|
32935
33753
|
});
|
|
32936
33754
|
});
|
|
@@ -33090,6 +33908,7 @@ function createBorrowSession(store, client, resolveDeps) {
|
|
|
33090
33908
|
}
|
|
33091
33909
|
|
|
33092
33910
|
// src/hub/last-account.ts
|
|
33911
|
+
init_define_KT_HUB_FILES();
|
|
33093
33912
|
var import_node_fs2 = require("node:fs");
|
|
33094
33913
|
var import_node_path2 = require("node:path");
|
|
33095
33914
|
var LAST_ACCOUNT_DIR = "Kutrion";
|
|
@@ -33222,12 +34041,12 @@ function readDevice(kc, base) {
|
|
|
33222
34041
|
}
|
|
33223
34042
|
}
|
|
33224
34043
|
function cliHubStores(base, kc, keychainAvailable) {
|
|
33225
|
-
let
|
|
34044
|
+
let failed2 = false;
|
|
33226
34045
|
let deviceId = null;
|
|
33227
34046
|
let bearer = null;
|
|
33228
34047
|
const keep = (account, value) => {
|
|
33229
34048
|
const ok = write(kc, account, value);
|
|
33230
|
-
if (!ok)
|
|
34049
|
+
if (!ok) failed2 = true;
|
|
33231
34050
|
return ok;
|
|
33232
34051
|
};
|
|
33233
34052
|
const store = {
|
|
@@ -33266,7 +34085,7 @@ function cliHubStores(base, kc, keychainAvailable) {
|
|
|
33266
34085
|
write(kc, slot.lastAccount(base), userId);
|
|
33267
34086
|
}
|
|
33268
34087
|
};
|
|
33269
|
-
return { store, pin, lastAccount, failedWrite: () =>
|
|
34088
|
+
return { store, pin, lastAccount, failedWrite: () => failed2 ? { deviceId, bearer } : null };
|
|
33270
34089
|
}
|
|
33271
34090
|
function borrowedDeviceKey(base, kc) {
|
|
33272
34091
|
return readDevice(kc, base).key;
|
|
@@ -33719,7 +34538,450 @@ async function browserLogin(deps) {
|
|
|
33719
34538
|
return { kind: "signed_in", user };
|
|
33720
34539
|
}
|
|
33721
34540
|
|
|
34541
|
+
// src/hub-seed-login.ts
|
|
34542
|
+
init_define_KT_HUB_FILES();
|
|
34543
|
+
var import_os3 = require("os");
|
|
34544
|
+
|
|
34545
|
+
// src/hub/hub-seed.ts
|
|
34546
|
+
init_define_KT_HUB_FILES();
|
|
34547
|
+
var import_node_net2 = require("node:net");
|
|
34548
|
+
var import_node_child_process2 = require("node:child_process");
|
|
34549
|
+
var import_node_fs3 = require("node:fs");
|
|
34550
|
+
var import_node_os2 = require("node:os");
|
|
34551
|
+
var import_node_path3 = require("node:path");
|
|
34552
|
+
var REPLY_DEADLINE_MS2 = 13e4;
|
|
34553
|
+
var CODE_RE2 = /^[A-Za-z0-9_-]{43}$/;
|
|
34554
|
+
var CLOSED = Symbol("closed");
|
|
34555
|
+
var BAD = Symbol("bad");
|
|
34556
|
+
function lineReader(sock) {
|
|
34557
|
+
const queue = [];
|
|
34558
|
+
let waiter = null;
|
|
34559
|
+
let buf = "";
|
|
34560
|
+
let ended = false;
|
|
34561
|
+
const push = (v) => {
|
|
34562
|
+
if (waiter) {
|
|
34563
|
+
const w = waiter;
|
|
34564
|
+
waiter = null;
|
|
34565
|
+
w(v);
|
|
34566
|
+
} else queue.push(v);
|
|
34567
|
+
};
|
|
34568
|
+
const end = () => {
|
|
34569
|
+
if (!ended) {
|
|
34570
|
+
ended = true;
|
|
34571
|
+
push(CLOSED);
|
|
34572
|
+
}
|
|
34573
|
+
};
|
|
34574
|
+
sock.setEncoding("utf8");
|
|
34575
|
+
sock.on("error", end);
|
|
34576
|
+
sock.on("close", end);
|
|
34577
|
+
sock.on("data", (chunk) => {
|
|
34578
|
+
buf += chunk;
|
|
34579
|
+
if (buf.length > MAX_FRAME_BYTES) {
|
|
34580
|
+
buf = "";
|
|
34581
|
+
push(BAD);
|
|
34582
|
+
return;
|
|
34583
|
+
}
|
|
34584
|
+
let i;
|
|
34585
|
+
while ((i = buf.indexOf("\n")) >= 0) {
|
|
34586
|
+
const line = buf.slice(0, i);
|
|
34587
|
+
buf = buf.slice(i + 1);
|
|
34588
|
+
try {
|
|
34589
|
+
push(JSON.parse(line));
|
|
34590
|
+
} catch {
|
|
34591
|
+
push(BAD);
|
|
34592
|
+
}
|
|
34593
|
+
}
|
|
34594
|
+
});
|
|
34595
|
+
return {
|
|
34596
|
+
next: () => queue.length ? Promise.resolve(queue.shift()) : new Promise((r) => {
|
|
34597
|
+
waiter = r;
|
|
34598
|
+
})
|
|
34599
|
+
};
|
|
34600
|
+
}
|
|
34601
|
+
var failed = (reason) => ({ ok: false, reason });
|
|
34602
|
+
function seedOnce(deps) {
|
|
34603
|
+
const resolved = resolveEndpoint(deps.location, { platform: deps.platform });
|
|
34604
|
+
if (resolved === null) return Promise.resolve(failed("hub_not_running"));
|
|
34605
|
+
const origin = apiOrigin(deps.apiBase);
|
|
34606
|
+
if (origin === null) return Promise.resolve(failed("protocol"));
|
|
34607
|
+
const { identity } = deps;
|
|
34608
|
+
const sock = (deps.connectTo ?? ((e) => (0, import_node_net2.connect)(e)))(resolved.endpoint);
|
|
34609
|
+
const rd = lineReader(sock);
|
|
34610
|
+
const timer = setTimeout(() => sock.destroy(), REPLY_DEADLINE_MS2);
|
|
34611
|
+
timer.unref?.();
|
|
34612
|
+
const send = (frame) => sock.write(`${JSON.stringify(frame)}
|
|
34613
|
+
`);
|
|
34614
|
+
return (async () => {
|
|
34615
|
+
const cnonce = newNonce();
|
|
34616
|
+
send({ v: CHANNEL_VERSION, t: "hello-seed", client: identity.client, pk: identity.publicSpkiB64, cnonce, origin });
|
|
34617
|
+
const first = await rd.next();
|
|
34618
|
+
if (first === CLOSED) return failed("hub_not_running");
|
|
34619
|
+
if (first === BAD) return failed("protocol");
|
|
34620
|
+
const refusedFirst = parseRefuse(first);
|
|
34621
|
+
if (refusedFirst) return failed(refusedFirst.reason);
|
|
34622
|
+
const offer = parseOfferSeed(first);
|
|
34623
|
+
if (!offer) return failed("protocol");
|
|
34624
|
+
const pinned = deps.pin.hubPublicKey;
|
|
34625
|
+
if (pinned && !sameKey(pinned, offer.hub_pk)) return failed("hub_identity_changed");
|
|
34626
|
+
if (resolved.expectedHubPk && !sameKey(resolved.expectedHubPk, offer.hub_pk)) return failed("hub_identity_changed");
|
|
34627
|
+
if (!pinned) {
|
|
34628
|
+
if (!await deps.confirmHub(keyFingerprint(identity.client, offer.hub_pk))) return failed("hub_unconfirmed");
|
|
34629
|
+
deps.pin.pin(offer.hub_pk);
|
|
34630
|
+
}
|
|
34631
|
+
const parts = {
|
|
34632
|
+
client: identity.client,
|
|
34633
|
+
satPk: identity.publicSpkiB64,
|
|
34634
|
+
hubPk: offer.hub_pk,
|
|
34635
|
+
devicePk: offer.device_pk,
|
|
34636
|
+
cnonce,
|
|
34637
|
+
snonce: offer.snonce,
|
|
34638
|
+
origin
|
|
34639
|
+
};
|
|
34640
|
+
send({ v: CHANNEL_VERSION, t: "prove", sig: signTranscript(identity.privatePkcs8B64, seedRequestTranscript(parts)) });
|
|
34641
|
+
const second = await rd.next();
|
|
34642
|
+
if (second === CLOSED) return failed("hub_not_running");
|
|
34643
|
+
if (second === BAD) return failed("protocol");
|
|
34644
|
+
const refusedSecond = parseRefuse(second);
|
|
34645
|
+
if (refusedSecond) return failed(refusedSecond.reason);
|
|
34646
|
+
const accept = parseAcceptSeed(second);
|
|
34647
|
+
if (!accept) return failed("protocol");
|
|
34648
|
+
if (!verifyTranscript(offer.hub_pk, seedAcceptTranscript(parts), accept.sig)) return failed("hub_not_from_hub");
|
|
34649
|
+
const issued = await deps.issue(offer.device_pk);
|
|
34650
|
+
if (!issued.ok) return failed(issued.reason);
|
|
34651
|
+
send({
|
|
34652
|
+
v: CHANNEL_VERSION,
|
|
34653
|
+
t: "seed",
|
|
34654
|
+
code: issued.code,
|
|
34655
|
+
sig: signTranscript(identity.privatePkcs8B64, seedTranscript({ ...parts, code: issued.code }))
|
|
34656
|
+
});
|
|
34657
|
+
const third = await rd.next();
|
|
34658
|
+
if (third === CLOSED) return failed("hub_not_running");
|
|
34659
|
+
if (third === BAD) return failed("protocol");
|
|
34660
|
+
const refusedThird = parseRefuse(third);
|
|
34661
|
+
if (refusedThird) return failed(refusedThird.reason);
|
|
34662
|
+
const seeded = parseSeeded(third);
|
|
34663
|
+
return seeded ? { ok: true, result: seeded.result, hubPublicKey: offer.hub_pk } : failed("protocol");
|
|
34664
|
+
})().finally(() => {
|
|
34665
|
+
clearTimeout(timer);
|
|
34666
|
+
sock.destroy();
|
|
34667
|
+
});
|
|
34668
|
+
}
|
|
34669
|
+
function hubCodeIssuer(p) {
|
|
34670
|
+
return async (devicePk) => {
|
|
34671
|
+
const bearer = p.bearer();
|
|
34672
|
+
const deviceId = p.deviceId();
|
|
34673
|
+
if (!bearer || !deviceId) return { ok: false, reason: "issue_refused" };
|
|
34674
|
+
const res = await p.post(
|
|
34675
|
+
"/auth/handoff/issue",
|
|
34676
|
+
{ purpose: "enrolment", device_id: deviceId, client: { id: "hub", name: p.hubName, platform: "desktop", public_key: devicePk } },
|
|
34677
|
+
bearer
|
|
34678
|
+
);
|
|
34679
|
+
if (!res.ok) {
|
|
34680
|
+
const err = res.body?.error;
|
|
34681
|
+
return { ok: false, reason: res.status === 403 && err === "step_up_required" ? "step_up_required" : "issue_refused" };
|
|
34682
|
+
}
|
|
34683
|
+
const code = res.data?.code;
|
|
34684
|
+
return typeof code === "string" && CODE_RE2.test(code) ? { ok: true, code } : { ok: false, reason: "issue_refused" };
|
|
34685
|
+
};
|
|
34686
|
+
}
|
|
34687
|
+
var HUB_BUNDLE_ID = "com.kutrion.desktop";
|
|
34688
|
+
var LAUNCH_WAIT_MS = 1e4;
|
|
34689
|
+
var LAUNCH_POLL_MS = 250;
|
|
34690
|
+
var WIN_UNINSTALL = "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall";
|
|
34691
|
+
function installLocationFromRegistry(regOutput) {
|
|
34692
|
+
for (const block2 of regOutput.split(/\r?\n\r?\n/)) {
|
|
34693
|
+
const name = /^\s*DisplayName\s+REG_SZ\s+(.*?)\s*$/m.exec(block2)?.[1];
|
|
34694
|
+
const dir = /^\s*InstallLocation\s+REG_SZ\s+(.*?)\s*$/m.exec(block2)?.[1];
|
|
34695
|
+
if (name === "Kutrion" && dir) return dir;
|
|
34696
|
+
}
|
|
34697
|
+
return null;
|
|
34698
|
+
}
|
|
34699
|
+
function underInstallRoot(dir, roots) {
|
|
34700
|
+
if (!import_node_path3.win32.isAbsolute(dir)) return false;
|
|
34701
|
+
const norm = (p) => import_node_path3.win32.resolve(p).toLowerCase().replace(/[\\/]+$/, "");
|
|
34702
|
+
const d = norm(dir);
|
|
34703
|
+
return roots.some((r) => r && import_node_path3.win32.isAbsolute(r) && d.startsWith(norm(r) + "\\"));
|
|
34704
|
+
}
|
|
34705
|
+
function hubLauncher(env = {}) {
|
|
34706
|
+
const platform3 = env.platform ?? process.platform;
|
|
34707
|
+
const home = env.home ?? (0, import_node_os2.homedir)();
|
|
34708
|
+
const exists = env.exists ?? import_node_fs3.existsSync;
|
|
34709
|
+
const exec2 = env.exec ?? ((file, args) => new Promise((resolve2, reject) => {
|
|
34710
|
+
(0, import_node_child_process2.execFile)(file, args, { timeout: 5e3, windowsHide: true, maxBuffer: 4 * 1024 * 1024 }, (e, out) => e ? reject(e) : resolve2(out));
|
|
34711
|
+
}));
|
|
34712
|
+
const startDetached2 = env.startDetached ?? ((file, args) => {
|
|
34713
|
+
try {
|
|
34714
|
+
const child = (0, import_node_child_process2.spawn)(file, args, { detached: true, stdio: "ignore", windowsHide: true });
|
|
34715
|
+
child.on("error", () => void 0);
|
|
34716
|
+
child.unref();
|
|
34717
|
+
return true;
|
|
34718
|
+
} catch {
|
|
34719
|
+
return false;
|
|
34720
|
+
}
|
|
34721
|
+
});
|
|
34722
|
+
if (platform3 === "darwin") {
|
|
34723
|
+
const bundles = ["/Applications/Kutrion.app", (0, import_node_path3.join)(home, "Applications", "Kutrion.app")];
|
|
34724
|
+
return {
|
|
34725
|
+
installed: () => bundles.some((b) => exists(b)),
|
|
34726
|
+
// -g keeps focus where it is; the Hub is started by bundle id so a renamed bundle still resolves.
|
|
34727
|
+
launch: () => exec2("open", ["-g", "-b", HUB_BUNDLE_ID, "--args", "--background"]).then(() => true, () => false),
|
|
34728
|
+
foreground: () => exec2("open", ["-b", HUB_BUNDLE_ID]).then(() => true, () => false)
|
|
34729
|
+
};
|
|
34730
|
+
}
|
|
34731
|
+
if (platform3 === "win32") {
|
|
34732
|
+
const resolveExe = async () => {
|
|
34733
|
+
const fromRegistry = await exec2("reg", ["query", WIN_UNINSTALL, "/s"]).then(installLocationFromRegistry, () => null);
|
|
34734
|
+
const localAppData = env.localAppData ?? process.env.LOCALAPPDATA;
|
|
34735
|
+
const programFiles = env.programFiles ?? process.env.ProgramFiles;
|
|
34736
|
+
const roots = [localAppData ? import_node_path3.win32.join(localAppData, "Programs") : "", programFiles ?? ""];
|
|
34737
|
+
const dirs = [
|
|
34738
|
+
...fromRegistry && underInstallRoot(fromRegistry, roots) ? [fromRegistry] : [],
|
|
34739
|
+
...localAppData ? [import_node_path3.win32.join(localAppData, "Programs", "Kutrion")] : []
|
|
34740
|
+
];
|
|
34741
|
+
for (const d of dirs) {
|
|
34742
|
+
const exe = import_node_path3.win32.join(d, "Kutrion.exe");
|
|
34743
|
+
if (exists(exe)) return exe;
|
|
34744
|
+
}
|
|
34745
|
+
return null;
|
|
34746
|
+
};
|
|
34747
|
+
return {
|
|
34748
|
+
installed: async () => await resolveExe() !== null,
|
|
34749
|
+
launch: async () => {
|
|
34750
|
+
const exe = await resolveExe();
|
|
34751
|
+
return exe !== null && startDetached2(exe, ["--background"]);
|
|
34752
|
+
},
|
|
34753
|
+
// The running Hub's single-instance handler raises its window.
|
|
34754
|
+
foreground: async () => {
|
|
34755
|
+
const exe = await resolveExe();
|
|
34756
|
+
return exe !== null && startDetached2(exe, []);
|
|
34757
|
+
}
|
|
34758
|
+
};
|
|
34759
|
+
}
|
|
34760
|
+
const bins = ["/opt/Kutrion/kutrion", "/usr/bin/kutrion"];
|
|
34761
|
+
const found = () => bins.find((b) => exists(b)) ?? null;
|
|
34762
|
+
return {
|
|
34763
|
+
installed: () => found() !== null,
|
|
34764
|
+
launch: () => {
|
|
34765
|
+
const b = found();
|
|
34766
|
+
return b !== null && startDetached2(b, ["--background"]);
|
|
34767
|
+
},
|
|
34768
|
+
foreground: () => {
|
|
34769
|
+
const b = found();
|
|
34770
|
+
return b !== null && startDetached2(b, []);
|
|
34771
|
+
}
|
|
34772
|
+
};
|
|
34773
|
+
}
|
|
34774
|
+
async function seedHubAfterSignIn(deps) {
|
|
34775
|
+
if ((deps.env ?? process.env).KT_NO_HUB === "1") return { kind: "stopped", reason: "disabled" };
|
|
34776
|
+
const reachable = () => resolveEndpoint(deps.location, { platform: deps.platform }) !== null;
|
|
34777
|
+
if (!reachable()) {
|
|
34778
|
+
const launcher2 = deps.launcher;
|
|
34779
|
+
if (!launcher2 || !await launcher2.installed()) return { kind: "retry" };
|
|
34780
|
+
if (!await launcher2.launch()) return { kind: "retry" };
|
|
34781
|
+
const sleep = deps.sleep ?? ((ms) => new Promise((r) => setTimeout(r, ms)));
|
|
34782
|
+
const now = deps.now ?? Date.now;
|
|
34783
|
+
const until = now() + LAUNCH_WAIT_MS;
|
|
34784
|
+
while (!reachable() && now() < until) await sleep(LAUNCH_POLL_MS);
|
|
34785
|
+
if (!reachable()) return { kind: "retry" };
|
|
34786
|
+
}
|
|
34787
|
+
const launcher = deps.launcher;
|
|
34788
|
+
const confirmHub = launcher?.foreground ? async (fp) => {
|
|
34789
|
+
await Promise.resolve(launcher.foreground?.()).catch(() => void 0);
|
|
34790
|
+
return deps.confirmHub(fp);
|
|
34791
|
+
} : deps.confirmHub;
|
|
34792
|
+
const out = await seedOnce({ ...deps, confirmHub });
|
|
34793
|
+
if (out.ok) return { kind: "done", result: out.result };
|
|
34794
|
+
if (out.reason === "hub_other_account") return { kind: "other_account" };
|
|
34795
|
+
if (out.reason === "hub_not_running") return { kind: "retry" };
|
|
34796
|
+
return { kind: "stopped", reason: out.reason };
|
|
34797
|
+
}
|
|
34798
|
+
|
|
34799
|
+
// src/hub-seed-login.ts
|
|
34800
|
+
var SEED_COPY = {
|
|
34801
|
+
deviceLimit: "This account has reached its device limit, so this CLI was not registered as a device and the Kutrion app was not signed in. Remove a device you no longer use in the web portal, then run kt login again.",
|
|
34802
|
+
stepUp: "This CLI was not registered as a device because the sign-in needs to be verified again. Run kt login again and enter your second factor.",
|
|
34803
|
+
failed: "This CLI could not register itself as a device, so the Kutrion app was not signed in. You are still logged in.",
|
|
34804
|
+
failedNotRemoved: (name) => `This CLI could not register itself as a device, and the device it created could not be removed. You are still logged in. Remove "${name}" from Active devices in the web portal.`,
|
|
34805
|
+
joined: "The Kutrion app on this computer is now signed in to this account.",
|
|
34806
|
+
otherAccount: "The Kutrion app on this computer is signed in to a different account. Sign it out there first. This CLI keeps its own sign-in.",
|
|
34807
|
+
declined: "Not shared: the Kutrion app was not signed in.",
|
|
34808
|
+
stopped: (reason) => `The Kutrion app was not signed in (${printable(reason)}).`,
|
|
34809
|
+
firstContact: (fp) => [
|
|
34810
|
+
`The Kutrion app on this computer answered. Its code is ${fp}.`,
|
|
34811
|
+
"If you did not just open the Kutrion app yourself, answer no.",
|
|
34812
|
+
"Sharing gives the Kutrion app its own sign-in to your account. Your password is not sent, and you can sign it out again from Active devices."
|
|
34813
|
+
],
|
|
34814
|
+
ask: "\x1B[0mSign the Kutrion app in too? Type yes to share, or anything else to skip: "
|
|
34815
|
+
};
|
|
34816
|
+
function seedSkipReason(env, platform3, tty) {
|
|
34817
|
+
if (env.KT_NO_HUB === "1") return "disabled";
|
|
34818
|
+
if (!tty) return "no_tty";
|
|
34819
|
+
if (env.CI) return "ci";
|
|
34820
|
+
if (env.SSH_CONNECTION || env.SSH_TTY || env.SSH_CLIENT) return "remote";
|
|
34821
|
+
if (platform3 !== "darwin" && platform3 !== "win32" && !env.DISPLAY && !env.WAYLAND_DISPLAY) return "no_display";
|
|
34822
|
+
return null;
|
|
34823
|
+
}
|
|
34824
|
+
function fetchPost(base, fetchImpl) {
|
|
34825
|
+
return async (path, body, bearer) => {
|
|
34826
|
+
try {
|
|
34827
|
+
const res = await fetchImpl(base + path, {
|
|
34828
|
+
method: "POST",
|
|
34829
|
+
headers: { Authorization: `Bearer ${bearer}`, Accept: "application/json", "Content-Type": "application/json" },
|
|
34830
|
+
body: JSON.stringify(body),
|
|
34831
|
+
signal: AbortSignal.timeout(15e3)
|
|
34832
|
+
});
|
|
34833
|
+
const parsed = await res.json().catch(() => null);
|
|
34834
|
+
return res.ok ? { ok: true, data: parsed } : { ok: false, status: res.status, body: parsed };
|
|
34835
|
+
} catch {
|
|
34836
|
+
return { ok: false, status: null, body: null };
|
|
34837
|
+
}
|
|
34838
|
+
};
|
|
34839
|
+
}
|
|
34840
|
+
function withForeground(l, tty) {
|
|
34841
|
+
if (tty) return l;
|
|
34842
|
+
const { foreground: _drop, ...rest } = l;
|
|
34843
|
+
return rest;
|
|
34844
|
+
}
|
|
34845
|
+
var host = () => (0, import_os3.hostname)().trim().replace(/\.local$/, "") || "this computer";
|
|
34846
|
+
var ownDeviceName = () => `Kutrion CLI on ${host()}`.slice(0, 255);
|
|
34847
|
+
async function registerOwnDevice(deps) {
|
|
34848
|
+
const tty = deps.tty ?? Boolean(process.stdin.isTTY && process.stderr.isTTY);
|
|
34849
|
+
if (seedSkipReason(deps.env ?? process.env, deps.platform ?? process.platform, tty)) return { kind: "skipped", note: null };
|
|
34850
|
+
if (!deps.bearer || !deps.keychainAvailable()) return { kind: "skipped", note: null };
|
|
34851
|
+
const { store, failedWrite } = cliHubStores(deps.base, deps.kc, deps.keychainAvailable);
|
|
34852
|
+
const key = resolveDeviceKey(store);
|
|
34853
|
+
const res = await deps.post(
|
|
34854
|
+
"/auth/devices/register",
|
|
34855
|
+
{ name: ownDeviceName(), platform: "desktop", client: "cli", public_key: key.publicSpkiB64 },
|
|
34856
|
+
deps.bearer
|
|
34857
|
+
);
|
|
34858
|
+
if (!res.ok) {
|
|
34859
|
+
const err = res.body?.error;
|
|
34860
|
+
if (res.status === 409 && err === "device_limit") return { kind: "skipped", note: SEED_COPY.deviceLimit };
|
|
34861
|
+
if (res.status === 403 && err === "step_up_required") return { kind: "skipped", note: SEED_COPY.stepUp };
|
|
34862
|
+
return { kind: "skipped", note: SEED_COPY.failed };
|
|
34863
|
+
}
|
|
34864
|
+
const reg = res.data;
|
|
34865
|
+
const id = reg?.device?.id;
|
|
34866
|
+
if (typeof id !== "string" || typeof reg?.access_token !== "string" || typeof reg.refresh_token !== "string") {
|
|
34867
|
+
return { kind: "skipped", note: SEED_COPY.failed };
|
|
34868
|
+
}
|
|
34869
|
+
store.setRefresh(reg.refresh_token);
|
|
34870
|
+
store.setDevice(id, key.privatePkcs8B64);
|
|
34871
|
+
if (!failedWrite()) store.setAccess(reg.access_token);
|
|
34872
|
+
if (failedWrite()) {
|
|
34873
|
+
const removed = await deps.call("DELETE", `/auth/devices/${encodeURIComponent(id)}`, void 0, reg.access_token).then((r) => r.ok, () => false);
|
|
34874
|
+
dropBorrowed(deps.base, deps.kc);
|
|
34875
|
+
try {
|
|
34876
|
+
deps.kc.set(deps.base, deps.bearer);
|
|
34877
|
+
} catch {
|
|
34878
|
+
}
|
|
34879
|
+
return { kind: "skipped", note: removed ? SEED_COPY.failed : SEED_COPY.failedNotRemoved(ownDeviceName()) };
|
|
34880
|
+
}
|
|
34881
|
+
return { kind: "registered", deviceId: id };
|
|
34882
|
+
}
|
|
34883
|
+
async function seedHubFromLogin(deps) {
|
|
34884
|
+
const env = deps.env ?? process.env;
|
|
34885
|
+
const platform3 = deps.platform ?? process.platform;
|
|
34886
|
+
const tty = deps.tty ?? Boolean(process.stdin.isTTY && process.stderr.isTTY);
|
|
34887
|
+
const skip = seedSkipReason(env, platform3, tty);
|
|
34888
|
+
if (skip) return { kind: "skipped", reason: skip };
|
|
34889
|
+
if (!deps.location || !deps.keychainAvailable()) return { kind: "skipped", reason: "no_channel" };
|
|
34890
|
+
try {
|
|
34891
|
+
const { store, pin } = cliHubStores(deps.base, deps.kc, deps.keychainAvailable);
|
|
34892
|
+
const deviceId = store.deviceId();
|
|
34893
|
+
const keyB64 = store.devicePrivateKeyPkcs8();
|
|
34894
|
+
const bearer = () => {
|
|
34895
|
+
try {
|
|
34896
|
+
return deps.kc.get(deps.base) ?? null;
|
|
34897
|
+
} catch {
|
|
34898
|
+
return null;
|
|
34899
|
+
}
|
|
34900
|
+
};
|
|
34901
|
+
const token = bearer();
|
|
34902
|
+
if (!deviceId || !keyB64 || !token) return { kind: "skipped", reason: "no_device" };
|
|
34903
|
+
const mode = await deps.call("GET", "/billing/me", void 0, token).catch(() => null);
|
|
34904
|
+
if (!mode?.ok || mode.data?.vault_mode !== "audited") return { kind: "skipped", reason: "private_vault" };
|
|
34905
|
+
const key = resolveDeviceKey(store);
|
|
34906
|
+
const issuer = hubCodeIssuer({ post: deps.post, bearer, deviceId: () => store.deviceId(), hubName: `Kutrion on ${host()}`.slice(0, 255) });
|
|
34907
|
+
const status = await seedHubAfterSignIn({
|
|
34908
|
+
location: deps.location,
|
|
34909
|
+
identity: { client: "cli", ...key },
|
|
34910
|
+
pin,
|
|
34911
|
+
apiBase: deps.base,
|
|
34912
|
+
confirmHub: async (fingerprint) => {
|
|
34913
|
+
for (const line of SEED_COPY.firstContact(fingerprint)) deps.out(line);
|
|
34914
|
+
return (await deps.ask(SEED_COPY.ask).catch(() => "")).trim().toLowerCase() === "yes";
|
|
34915
|
+
},
|
|
34916
|
+
issue: async (devicePk) => {
|
|
34917
|
+
await deps.touch().catch(() => void 0);
|
|
34918
|
+
return issuer(devicePk);
|
|
34919
|
+
},
|
|
34920
|
+
launcher: withForeground(deps.launcher ?? hubLauncher({ platform: platform3, localAppData: env.LOCALAPPDATA, programFiles: env.ProgramFiles }), tty),
|
|
34921
|
+
env,
|
|
34922
|
+
platform: platform3
|
|
34923
|
+
});
|
|
34924
|
+
if (status.kind === "done" && status.result === "joined") deps.out(SEED_COPY.joined);
|
|
34925
|
+
else if (status.kind === "other_account") deps.out(SEED_COPY.otherAccount);
|
|
34926
|
+
else if (status.kind === "stopped" && status.reason === "hub_unconfirmed") deps.out(SEED_COPY.declined);
|
|
34927
|
+
else if (status.kind === "stopped" && status.reason !== "disabled") deps.out(SEED_COPY.stopped(status.reason));
|
|
34928
|
+
return status;
|
|
34929
|
+
} catch {
|
|
34930
|
+
return { kind: "skipped", reason: "error" };
|
|
34931
|
+
}
|
|
34932
|
+
}
|
|
34933
|
+
|
|
34934
|
+
// src/hub/ensure-hub.ts
|
|
34935
|
+
init_define_KT_HUB_FILES();
|
|
34936
|
+
var import_node_child_process3 = require("node:child_process");
|
|
34937
|
+
var import_node_fs4 = require("node:fs");
|
|
34938
|
+
var import_node_os3 = require("node:os");
|
|
34939
|
+
var import_node_path4 = require("node:path");
|
|
34940
|
+
var HUB_SCRIPT_FILES = ["ensure-hub.sh", "ensure-hub.ps1", "hub.conf"];
|
|
34941
|
+
function hubFirstRunSkip(c) {
|
|
34942
|
+
if (c.env.KT_NO_HUB === "1") return "KT_NO_HUB=1";
|
|
34943
|
+
if (!c.files) return "this build carries no installer script";
|
|
34944
|
+
if (c.platform !== "win32" && c.platform !== "darwin" && c.platform !== "linux") return "unsupported platform";
|
|
34945
|
+
if (c.platform === "linux" && !c.env.DISPLAY && !c.env.WAYLAND_DISPLAY) return "no display";
|
|
34946
|
+
if (c.surface === "cli") {
|
|
34947
|
+
if (!c.tty) return "no terminal";
|
|
34948
|
+
if (c.env.CI) return "CI";
|
|
34949
|
+
if (c.env.SSH_CONNECTION || c.env.SSH_TTY) return "remote session";
|
|
34950
|
+
}
|
|
34951
|
+
return null;
|
|
34952
|
+
}
|
|
34953
|
+
function stageFiles(files) {
|
|
34954
|
+
const dir = (0, import_node_fs4.mkdtempSync)((0, import_node_path4.join)((0, import_node_os3.tmpdir)(), "kt-hub-run-"));
|
|
34955
|
+
for (const f of HUB_SCRIPT_FILES) (0, import_node_fs4.writeFileSync)((0, import_node_path4.join)(dir, f), files[f], { mode: 384 });
|
|
34956
|
+
return dir;
|
|
34957
|
+
}
|
|
34958
|
+
function startDetached(command, args) {
|
|
34959
|
+
const child = (0, import_node_child_process3.spawn)(command, args, { detached: true, stdio: "ignore", windowsHide: true });
|
|
34960
|
+
child.on("error", () => void 0);
|
|
34961
|
+
child.unref();
|
|
34962
|
+
}
|
|
34963
|
+
function startEnsureHub(c, io = {}) {
|
|
34964
|
+
const reason = hubFirstRunSkip(c);
|
|
34965
|
+
if (reason) return { started: false, reason };
|
|
34966
|
+
try {
|
|
34967
|
+
const dir = (io.stage ?? stageFiles)(c.files);
|
|
34968
|
+
const start = io.start ?? startDetached;
|
|
34969
|
+
if (c.platform === "win32") {
|
|
34970
|
+
start("powershell.exe", ["-NoProfile", "-NonInteractive", "-ExecutionPolicy", "Bypass", "-WindowStyle", "Hidden", "-File", (0, import_node_path4.join)(dir, "ensure-hub.ps1"), "-FirstRun"]);
|
|
34971
|
+
} else {
|
|
34972
|
+
start("sh", [(0, import_node_path4.join)(dir, "ensure-hub.sh"), "--first-run"]);
|
|
34973
|
+
}
|
|
34974
|
+
return { started: true };
|
|
34975
|
+
} catch {
|
|
34976
|
+
return { started: false, reason: "could not start the installer script" };
|
|
34977
|
+
}
|
|
34978
|
+
}
|
|
34979
|
+
|
|
34980
|
+
// src/shell.ts
|
|
34981
|
+
init_define_KT_HUB_FILES();
|
|
34982
|
+
|
|
33722
34983
|
// src/proxy.ts
|
|
34984
|
+
init_define_KT_HUB_FILES();
|
|
33723
34985
|
var import_http = require("http");
|
|
33724
34986
|
var import_https = require("https");
|
|
33725
34987
|
var import_tls = require("tls");
|
|
@@ -33742,7 +35004,7 @@ function proxyConfig(env = process.env) {
|
|
|
33742
35004
|
function redactProxyUrls(text2) {
|
|
33743
35005
|
return text2.replace(/([a-z][a-z0-9+.-]*:\/\/)[^\s/@]*@/gi, "$1***@");
|
|
33744
35006
|
}
|
|
33745
|
-
function bypassesProxy(
|
|
35007
|
+
function bypassesProxy(host2, port, no) {
|
|
33746
35008
|
if (!no) return false;
|
|
33747
35009
|
for (const raw of no.split(/[\s,]+/)) {
|
|
33748
35010
|
let entry = raw.trim().toLowerCase();
|
|
@@ -33754,7 +35016,7 @@ function bypassesProxy(host, port, no) {
|
|
|
33754
35016
|
entry = colon[1];
|
|
33755
35017
|
}
|
|
33756
35018
|
entry = entry.replace(/^\*?\./, "");
|
|
33757
|
-
if (
|
|
35019
|
+
if (host2 === entry || host2.endsWith(`.${entry}`)) return true;
|
|
33758
35020
|
}
|
|
33759
35021
|
return false;
|
|
33760
35022
|
}
|
|
@@ -33781,14 +35043,14 @@ function redactError(e) {
|
|
|
33781
35043
|
if (e.cause instanceof Error) e.cause.message = redactProxyUrls(e.cause.message);
|
|
33782
35044
|
return e;
|
|
33783
35045
|
}
|
|
33784
|
-
function tunnel(proxy,
|
|
35046
|
+
function tunnel(proxy, host2, port, tls, cb) {
|
|
33785
35047
|
const auth = proxy.username ? `${decodeURIComponent(proxy.username)}:${decodeURIComponent(proxy.password)}` : void 0;
|
|
33786
35048
|
const req = (0, import_http.request)({
|
|
33787
35049
|
host: proxy.hostname,
|
|
33788
35050
|
port: proxy.port || (proxy.protocol === "https:" ? 443 : 80),
|
|
33789
35051
|
method: "CONNECT",
|
|
33790
|
-
path: `${
|
|
33791
|
-
headers: { Host: `${
|
|
35052
|
+
path: `${host2}:${port}`,
|
|
35053
|
+
headers: { Host: `${host2}:${port}`, ...auth ? { "Proxy-Authorization": `Basic ${Buffer.from(auth).toString("base64")}` } : {} }
|
|
33792
35054
|
});
|
|
33793
35055
|
req.once("connect", (res, socket) => {
|
|
33794
35056
|
if (res.statusCode !== 200) {
|
|
@@ -33796,7 +35058,7 @@ function tunnel(proxy, host, port, tls, cb) {
|
|
|
33796
35058
|
cb(new Error(`proxy refused the tunnel (HTTP ${res.statusCode})`));
|
|
33797
35059
|
return;
|
|
33798
35060
|
}
|
|
33799
|
-
cb(null, tls ? (0, import_tls.connect)({ socket, servername:
|
|
35061
|
+
cb(null, tls ? (0, import_tls.connect)({ socket, servername: host2 }) : socket);
|
|
33800
35062
|
});
|
|
33801
35063
|
req.once("error", (e) => cb(new Error(redactProxyUrls(`proxy connection failed: ${e.message}`))));
|
|
33802
35064
|
req.end();
|
|
@@ -33821,7 +35083,11 @@ function wsAgentFor(url, env = process.env) {
|
|
|
33821
35083
|
return new TunnelAgent();
|
|
33822
35084
|
}
|
|
33823
35085
|
|
|
35086
|
+
// src/refusal.ts
|
|
35087
|
+
init_define_KT_HUB_FILES();
|
|
35088
|
+
|
|
33824
35089
|
// src/destinations.ts
|
|
35090
|
+
init_define_KT_HUB_FILES();
|
|
33825
35091
|
var GROUPS = [
|
|
33826
35092
|
{ key: "SSH", label: "SSH and SFTP", protocols: ["SSH", "SFTP"], defaultPort: 22 },
|
|
33827
35093
|
{ key: "FTP", label: "FTP", protocols: ["FTP"], defaultPort: 21 },
|
|
@@ -33894,11 +35160,11 @@ function destinationListLines(name, data, indent = " ") {
|
|
|
33894
35160
|
}
|
|
33895
35161
|
return lines;
|
|
33896
35162
|
}
|
|
33897
|
-
function firstBindingWarning(name, group,
|
|
35163
|
+
function firstBindingWarning(name, group, host2, port) {
|
|
33898
35164
|
return [
|
|
33899
35165
|
`This is the first destination on "${name}".`,
|
|
33900
35166
|
"",
|
|
33901
|
-
`Right now "${name}" is not restricted \u2014 it can be presented to any host. Authorizing ${
|
|
35167
|
+
`Right now "${name}" is not restricted \u2014 it can be presented to any host. Authorizing ${host2}:${port} restricts`,
|
|
33902
35168
|
"it everywhere: it will then be refused on SSH, SFTP, FTP, FTPS, WebDAV and RDP at every destination",
|
|
33903
35169
|
`except the ones you authorize. Anything using "${name}" elsewhere stops working.`,
|
|
33904
35170
|
...group.protocols.length > 1 ? ["", "Authorizing SSH also authorizes SFTP. They are one destination."] : []
|
|
@@ -33942,6 +35208,7 @@ var DEST_WRITE_REFUSALS = {
|
|
|
33942
35208
|
var DESTINATION_REFUSAL_CLI_ROUTE = "From here: `kt cred dest ls <vaultId> <credId>` to see the list, `kt cred dest add` to authorize a destination.";
|
|
33943
35209
|
|
|
33944
35210
|
// src/host-key.ts
|
|
35211
|
+
init_define_KT_HUB_FILES();
|
|
33945
35212
|
var HOST_KEY_CONFIRM_COPY2 = {
|
|
33946
35213
|
...HOST_KEY_CONFIRM_COPY,
|
|
33947
35214
|
confirm: "Fingerprint verified, trust it with:",
|
|
@@ -34502,7 +35769,7 @@ function jumpRefusalReport(frame, code, head, ctx, indent) {
|
|
|
34502
35769
|
function wsRefusalLines(frame, indent = " ", jumpCtx = {}) {
|
|
34503
35770
|
const code = str4(frame.code);
|
|
34504
35771
|
const d = frame.detail ?? {};
|
|
34505
|
-
const
|
|
35772
|
+
const host2 = str4(d.host);
|
|
34506
35773
|
const port = typeof d.port === "number" ? d.port : null;
|
|
34507
35774
|
const allowed = Array.isArray(d.allowed_destinations) ? d.allowed_destinations.filter((x) => typeof x === "string" && x.trim() !== "") : [];
|
|
34508
35775
|
if (code === "host_key_unconfirmed") {
|
|
@@ -34524,7 +35791,7 @@ function wsRefusalLines(frame, indent = " ", jumpCtx = {}) {
|
|
|
34524
35791
|
if (jump) return jump;
|
|
34525
35792
|
const lines = [code && !ourFault ? `${head} (${code})` : head, ""];
|
|
34526
35793
|
lines.push(str4(frame.error) ?? "The server sent no explanation with this refusal.");
|
|
34527
|
-
if (
|
|
35794
|
+
if (host2) lines.push("", `${indent}endpoint: ${port === null ? host2 : `${host2}:${port}`}`);
|
|
34528
35795
|
if (allowed.length) {
|
|
34529
35796
|
lines.push("", destinationRefusalAllowedLabel(dest));
|
|
34530
35797
|
lines.push(...allowed.map((a) => `${indent}${a}`));
|
|
@@ -34648,6 +35915,7 @@ shell error: ${e.message}\r
|
|
|
34648
35915
|
}
|
|
34649
35916
|
|
|
34650
35917
|
// src/snippets.ts
|
|
35918
|
+
init_define_KT_HUB_FILES();
|
|
34651
35919
|
function pickSnippet(all, ref, vault) {
|
|
34652
35920
|
const inVault = vault ? all.filter((s) => s.vault_id === vault || s.vault_name === vault) : all;
|
|
34653
35921
|
const byId = inVault.find((s) => s.id === ref);
|
|
@@ -34674,15 +35942,18 @@ function snippetPreview(s) {
|
|
|
34674
35942
|
}
|
|
34675
35943
|
|
|
34676
35944
|
// src/mcp.ts
|
|
35945
|
+
init_define_KT_HUB_FILES();
|
|
34677
35946
|
var import_readline = require("readline");
|
|
34678
35947
|
|
|
34679
35948
|
// src/mcp-install.ts
|
|
35949
|
+
init_define_KT_HUB_FILES();
|
|
34680
35950
|
var import_fs3 = require("fs");
|
|
34681
|
-
var
|
|
35951
|
+
var import_os4 = require("os");
|
|
34682
35952
|
var import_path4 = require("path");
|
|
34683
35953
|
var import_child_process3 = require("child_process");
|
|
34684
35954
|
|
|
34685
35955
|
// src/http.ts
|
|
35956
|
+
init_define_KT_HUB_FILES();
|
|
34686
35957
|
async function jsonBody(res) {
|
|
34687
35958
|
const text2 = await res.text();
|
|
34688
35959
|
if (!text2) return null;
|
|
@@ -34708,7 +35979,7 @@ function refuseBodyRedirects(inner = fetch) {
|
|
|
34708
35979
|
}
|
|
34709
35980
|
|
|
34710
35981
|
// src/mcp-install.ts
|
|
34711
|
-
var appData = () => process.env.APPDATA ?? (0, import_path4.join)((0,
|
|
35982
|
+
var appData = () => process.env.APPDATA ?? (0, import_path4.join)((0, import_os4.homedir)(), "AppData", "Roaming");
|
|
34712
35983
|
var CLIENTS = {
|
|
34713
35984
|
"claude-code": {
|
|
34714
35985
|
id: "claude-code",
|
|
@@ -34726,8 +35997,8 @@ var CLIENTS = {
|
|
|
34726
35997
|
key: "mcpServers",
|
|
34727
35998
|
scope: "user",
|
|
34728
35999
|
path: () => {
|
|
34729
|
-
if ((0,
|
|
34730
|
-
if ((0,
|
|
36000
|
+
if ((0, import_os4.platform)() === "darwin") return (0, import_path4.join)((0, import_os4.homedir)(), "Library", "Application Support", "Claude", "claude_desktop_config.json");
|
|
36001
|
+
if ((0, import_os4.platform)() === "win32") return (0, import_path4.join)(appData(), "Claude", "claude_desktop_config.json");
|
|
34731
36002
|
return null;
|
|
34732
36003
|
},
|
|
34733
36004
|
next: "quit Claude Desktop completely and reopen it"
|
|
@@ -34737,7 +36008,7 @@ var CLIENTS = {
|
|
|
34737
36008
|
label: "Cursor",
|
|
34738
36009
|
key: "mcpServers",
|
|
34739
36010
|
scope: "user",
|
|
34740
|
-
path: () => (0, import_path4.join)((0,
|
|
36011
|
+
path: () => (0, import_path4.join)((0, import_os4.homedir)(), ".cursor", "mcp.json"),
|
|
34741
36012
|
next: "reload Cursor"
|
|
34742
36013
|
},
|
|
34743
36014
|
copilot: {
|
|
@@ -34788,7 +36059,7 @@ async function verifyLaunch(entry, timeoutMs = 15e3) {
|
|
|
34788
36059
|
const res = (0, import_child_process3.spawnSync)(entry.command, entry.args, {
|
|
34789
36060
|
input: probe + "\n",
|
|
34790
36061
|
env: { ...inherited, ...entry.env ?? {} },
|
|
34791
|
-
cwd: (0,
|
|
36062
|
+
cwd: (0, import_os4.tmpdir)(),
|
|
34792
36063
|
encoding: "utf8",
|
|
34793
36064
|
timeout: timeoutMs
|
|
34794
36065
|
});
|
|
@@ -34875,7 +36146,7 @@ async function installClient(o) {
|
|
|
34875
36146
|
const target = CLIENTS[o.client];
|
|
34876
36147
|
const configPath = target.path(o.dir);
|
|
34877
36148
|
if (!configPath) {
|
|
34878
|
-
throw new Error(`${target.label} is not available on this platform (${(0,
|
|
36149
|
+
throw new Error(`${target.label} is not available on this platform (${(0, import_os4.platform)()}).`);
|
|
34879
36150
|
}
|
|
34880
36151
|
const entry = resolveLaunch(o.base, o.client);
|
|
34881
36152
|
const mint = () => api2(o.base, "/agents", o.userToken, {
|
|
@@ -35097,6 +36368,7 @@ async function runMcpBridge(opts2) {
|
|
|
35097
36368
|
}
|
|
35098
36369
|
|
|
35099
36370
|
// src/ci.ts
|
|
36371
|
+
init_define_KT_HUB_FILES();
|
|
35100
36372
|
var gitlab = {
|
|
35101
36373
|
name: "gitlab",
|
|
35102
36374
|
async read(env) {
|
|
@@ -35150,6 +36422,7 @@ async function ciLogin(o) {
|
|
|
35150
36422
|
}
|
|
35151
36423
|
|
|
35152
36424
|
// src/jobfile.ts
|
|
36425
|
+
init_define_KT_HUB_FILES();
|
|
35153
36426
|
var import_yaml = __toESM(require_dist());
|
|
35154
36427
|
var JobFileError = class extends Error {
|
|
35155
36428
|
};
|
|
@@ -35336,6 +36609,7 @@ function checkExpectations(want, got) {
|
|
|
35336
36609
|
}
|
|
35337
36610
|
|
|
35338
36611
|
// src/runner.ts
|
|
36612
|
+
init_define_KT_HUB_FILES();
|
|
35339
36613
|
var StepFailure = class extends Error {
|
|
35340
36614
|
};
|
|
35341
36615
|
var Resolver = class {
|
|
@@ -35446,6 +36720,7 @@ async function runJob(job, client, io, opts2 = {}) {
|
|
|
35446
36720
|
}
|
|
35447
36721
|
|
|
35448
36722
|
// src/mcp-runner.ts
|
|
36723
|
+
init_define_KT_HUB_FILES();
|
|
35449
36724
|
var PROTOCOL = "2026-07-28";
|
|
35450
36725
|
var META_VERSION = "io.modelcontextprotocol/protocolVersion";
|
|
35451
36726
|
var META_CLIENT_INFO = "io.modelcontextprotocol/clientInfo";
|
|
@@ -35580,6 +36855,7 @@ var McpRunnerClient = class {
|
|
|
35580
36855
|
};
|
|
35581
36856
|
|
|
35582
36857
|
// src/reporters.ts
|
|
36858
|
+
init_define_KT_HUB_FILES();
|
|
35583
36859
|
var seconds = (ms) => String(ms / 1e3);
|
|
35584
36860
|
function counts(run2) {
|
|
35585
36861
|
const by = (s) => run2.steps.filter((x) => x.status === s).length;
|
|
@@ -35646,6 +36922,7 @@ function report(name, run2) {
|
|
|
35646
36922
|
}
|
|
35647
36923
|
|
|
35648
36924
|
// src/format.ts
|
|
36925
|
+
init_define_KT_HUB_FILES();
|
|
35649
36926
|
function table(rows, columns) {
|
|
35650
36927
|
if (!rows.length) return "(none)";
|
|
35651
36928
|
const cols = columns ?? Object.keys(rows[0]);
|
|
@@ -35755,6 +37032,7 @@ function recoveryText(rec, s) {
|
|
|
35755
37032
|
}
|
|
35756
37033
|
|
|
35757
37034
|
// src/private-vault.ts
|
|
37035
|
+
init_define_KT_HUB_FILES();
|
|
35758
37036
|
var PASSPHRASE_STDIN_FLAG = "vault-passphrase-stdin";
|
|
35759
37037
|
var PrivateVaultError = class extends Error {
|
|
35760
37038
|
};
|
|
@@ -35803,6 +37081,7 @@ async function openSealedItem(client, key, vaultId, credId) {
|
|
|
35803
37081
|
}
|
|
35804
37082
|
|
|
35805
37083
|
// src/enroll.ts
|
|
37084
|
+
init_define_KT_HUB_FILES();
|
|
35806
37085
|
var ENROLL_PURPOSES = ["shell", "exec", "forward", "sftp", "jump"];
|
|
35807
37086
|
var ENROLL_USAGE = `usage: kt enroll <connId...> --purposes shell,exec,... [--confirm <connId|host>=<fingerprint>]...
|
|
35808
37087
|
[--known-hosts <file>] [--key <file>] [--password-stdin] [--fallback [--vault <id>]] [--timeout <sec>] [--json]
|
|
@@ -36010,6 +37289,7 @@ function parseHostsUnconfirmed(body) {
|
|
|
36010
37289
|
}
|
|
36011
37290
|
|
|
36012
37291
|
// src/transfer.ts
|
|
37292
|
+
init_define_KT_HUB_FILES();
|
|
36013
37293
|
var import_fs4 = require("fs");
|
|
36014
37294
|
var import_path5 = require("path");
|
|
36015
37295
|
var import_promises = require("stream/promises");
|
|
@@ -36298,7 +37578,7 @@ function parseDailyAt(v) {
|
|
|
36298
37578
|
}
|
|
36299
37579
|
|
|
36300
37580
|
// src/index.ts
|
|
36301
|
-
var CONFIG = (0, import_path6.join)((0,
|
|
37581
|
+
var CONFIG = (0, import_path6.join)((0, import_os5.homedir)(), ".config", "kutrion", "config.json");
|
|
36302
37582
|
function storedBase() {
|
|
36303
37583
|
let file;
|
|
36304
37584
|
try {
|
|
@@ -36375,8 +37655,8 @@ function storeFailure(e, session) {
|
|
|
36375
37655
|
return lines;
|
|
36376
37656
|
}
|
|
36377
37657
|
var IPV4 = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/;
|
|
36378
|
-
function isLoopback(
|
|
36379
|
-
const h =
|
|
37658
|
+
function isLoopback(hostname3) {
|
|
37659
|
+
const h = hostname3.replace(/^\[|\]$/g, "").toLowerCase();
|
|
36380
37660
|
if (h === "localhost" || h.endsWith(".localhost") || h === "::1") return true;
|
|
36381
37661
|
const quad = IPV4.exec(h);
|
|
36382
37662
|
return !!quad && quad[1] === "127" && quad.slice(1).every((o) => Number(o) <= 255);
|
|
@@ -36537,14 +37817,14 @@ async function credDest(client, args, flags, asJson, die) {
|
|
|
36537
37817
|
if (action === "add") {
|
|
36538
37818
|
const group = groupFor(String(flags.protocol ?? "SSH"));
|
|
36539
37819
|
if (!group) return die(`bad --protocol; one of: ${PROTOCOL_CHOICES}`);
|
|
36540
|
-
const
|
|
36541
|
-
if (!
|
|
37820
|
+
const host2 = String(flags.host ?? "").trim();
|
|
37821
|
+
if (!host2) return die(DEST_USAGE);
|
|
36542
37822
|
const portGiven = flags.port !== void 0 && flags.port !== true;
|
|
36543
37823
|
const port = portGiven ? Number(flags.port) : group.defaultPort;
|
|
36544
37824
|
if (portGiven && (!Number.isInteger(port) || port < 1 || port > 65535)) return die("--port must be a whole number from 1 to 65535");
|
|
36545
37825
|
const before = await list();
|
|
36546
37826
|
if (!before.claimed) {
|
|
36547
|
-
for (const line of firstBindingWarning(name, group,
|
|
37827
|
+
for (const line of firstBindingWarning(name, group, host2, port)) console.error(line);
|
|
36548
37828
|
console.error("");
|
|
36549
37829
|
if (!await confirmTyped("Type yes to restrict this credential and authorize this destination: ")) {
|
|
36550
37830
|
return die("nothing was changed");
|
|
@@ -36555,7 +37835,7 @@ async function credDest(client, args, flags, asJson, die) {
|
|
|
36555
37835
|
try {
|
|
36556
37836
|
added = await client.addCredentialDestination(vaultId, cid, {
|
|
36557
37837
|
protocol: group.key,
|
|
36558
|
-
host,
|
|
37838
|
+
host: host2,
|
|
36559
37839
|
...portGiven ? { port } : {},
|
|
36560
37840
|
secret
|
|
36561
37841
|
});
|
|
@@ -36619,7 +37899,7 @@ var ROLES = ["OWNER", "ADMIN", "EDITOR", "VIEWER"];
|
|
|
36619
37899
|
var TOKEN_SCOPES = ["scim", "events"];
|
|
36620
37900
|
var ORG_ROLES = ["owner", "admin", "member"];
|
|
36621
37901
|
var ROTATION_SERVICES = ["linux_password", "postgres_password", "mysql_password"];
|
|
36622
|
-
var VERSION = true ? "1.2.
|
|
37902
|
+
var VERSION = true ? "1.2.9" : "dev";
|
|
36623
37903
|
var HELP = `kt \u2014 Kutrion CLI
|
|
36624
37904
|
kt login [--email <e>] [--password-stdin] [--code <2fa>] prompts for the password, or reads it from stdin;
|
|
36625
37905
|
at a terminal with no --email, first asks the Kutrion desktop app,
|
|
@@ -37131,6 +38411,9 @@ run \`kt --help\` for the flags each command takes`);
|
|
|
37131
38411
|
};
|
|
37132
38412
|
switch (cmd) {
|
|
37133
38413
|
case "login": {
|
|
38414
|
+
if (typeof define_KT_HUB_FILES_default === "object") {
|
|
38415
|
+
startEnsureHub({ platform: process.platform, env: process.env, surface: "cli", tty: !!(process.stdin.isTTY && process.stdout.isTTY), files: define_KT_HUB_FILES_default });
|
|
38416
|
+
}
|
|
37134
38417
|
if (flags.password !== void 0) refuseSecretFlag("password", "pipe it to --password-stdin, or leave it off to be prompted");
|
|
37135
38418
|
const u = parseBase(cfg.base);
|
|
37136
38419
|
if (!u) die(`error: not a valid server URL: ${cfg.base}`);
|
|
@@ -37161,7 +38444,7 @@ run \`kt --help\` for the flags each command takes`);
|
|
|
37161
38444
|
open: openInBrowser,
|
|
37162
38445
|
out: (l) => console.error(l),
|
|
37163
38446
|
ask: (q) => promptLine(q),
|
|
37164
|
-
deviceName: () => (0,
|
|
38447
|
+
deviceName: () => (0, import_os5.hostname)() || "Kutrion CLI",
|
|
37165
38448
|
allowLoopbackHttp: isLoopback(u.hostname)
|
|
37166
38449
|
});
|
|
37167
38450
|
if (r.kind === "store_failed") die(r.note);
|
|
@@ -37243,9 +38526,39 @@ run \`kt --help\` for the flags each command takes`);
|
|
|
37243
38526
|
}
|
|
37244
38527
|
const staleDevice = dropBorrowed(cfg.base, kc);
|
|
37245
38528
|
if (staleDevice) await client.revokeDevice(staleDevice).catch(() => void 0);
|
|
38529
|
+
const post = fetchPost(cfg.base, refuseBodyRedirects());
|
|
38530
|
+
const registered = await registerOwnDevice({
|
|
38531
|
+
base: cfg.base,
|
|
38532
|
+
kc,
|
|
38533
|
+
keychainAvailable: osKeychainAvailable,
|
|
38534
|
+
post,
|
|
38535
|
+
call: hubCall,
|
|
38536
|
+
tty: !fromStdin && Boolean(process.stdin.isTTY && process.stderr.isTTY),
|
|
38537
|
+
bearer: (() => {
|
|
38538
|
+
try {
|
|
38539
|
+
return getToken(cfg.base) ?? null;
|
|
38540
|
+
} catch {
|
|
38541
|
+
return null;
|
|
38542
|
+
}
|
|
38543
|
+
})()
|
|
38544
|
+
}).catch(() => ({ kind: "skipped", note: null }));
|
|
37246
38545
|
recordSignIn(accountRoot, signedIn);
|
|
37247
38546
|
console.log(`logged in (token stored in ${backendName()})`);
|
|
37248
38547
|
if (rememberBase(cfg.base)) console.log(`server saved: ${cfg.base} (later commands need no --base)`);
|
|
38548
|
+
if (registered.kind === "skipped" && registered.note) console.error(registered.note);
|
|
38549
|
+
if (registered.kind === "registered") {
|
|
38550
|
+
await seedHubFromLogin({
|
|
38551
|
+
base: cfg.base,
|
|
38552
|
+
location: accountRoot ? hubLocation(accountRoot) : null,
|
|
38553
|
+
kc,
|
|
38554
|
+
keychainAvailable: osKeychainAvailable,
|
|
38555
|
+
post,
|
|
38556
|
+
call: hubCall,
|
|
38557
|
+
touch: () => client.me(),
|
|
38558
|
+
out: (l) => console.error(l),
|
|
38559
|
+
ask: (q) => promptLine(q)
|
|
38560
|
+
});
|
|
38561
|
+
}
|
|
37249
38562
|
break;
|
|
37250
38563
|
}
|
|
37251
38564
|
case "logout":
|
|
@@ -38247,15 +39560,15 @@ ${r.url}`);
|
|
|
38247
39560
|
const sub = positionals[0], connId = positionals[1];
|
|
38248
39561
|
if (sub === "add" || sub === "create") {
|
|
38249
39562
|
const name = flags.name !== void 0 ? String(flags.name) : positionals[1];
|
|
38250
|
-
const
|
|
39563
|
+
const host2 = flags.host !== void 0 ? String(flags.host) : void 0;
|
|
38251
39564
|
const username = flags.username !== void 0 ? String(flags.username) : void 0;
|
|
38252
39565
|
const credential_id = flags.cred !== void 0 ? String(flags.cred) : void 0;
|
|
38253
|
-
if (!name || !
|
|
39566
|
+
if (!name || !host2 || !username || !credential_id) {
|
|
38254
39567
|
die("usage: kt conn add --name <n> --host <h> --username <u> --cred <credId> [--port 22] [--agent-forward] [--jump <connId>]\n --cred is a credential id from `kt creds <vaultId>`\n --jump is a connection id from `kt conns` \u2014 this host is reached THROUGH it");
|
|
38255
39568
|
}
|
|
38256
39569
|
show((await client.createConnection({
|
|
38257
39570
|
name,
|
|
38258
|
-
host,
|
|
39571
|
+
host: host2,
|
|
38259
39572
|
username,
|
|
38260
39573
|
credential_id,
|
|
38261
39574
|
port: flags.port !== void 0 ? Number(flags.port) : void 0,
|