@kevisual/cnb 0.0.29 → 0.0.30
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/agent/routes/workspace/keep-file-live.ts +114 -0
- package/agent/routes/workspace/keep.ts +33 -170
- package/dist/opencode.js +479 -3877
- package/dist/routes.js +432 -3830
- package/package.json +2 -1
- package/src/workspace/keep-file-live.ts +136 -0
package/dist/opencode.js
CHANGED
|
@@ -1,333 +1,228 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __export = (target, all) => {
|
|
3
|
+
for (var name in all)
|
|
4
|
+
__defProp(target, name, {
|
|
5
|
+
get: all[name],
|
|
6
|
+
enumerable: true,
|
|
7
|
+
configurable: true,
|
|
8
|
+
set: (newValue) => all[name] = () => newValue
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
// node_modules/.pnpm/@kevisual+router@0.0.84/node_modules/@kevisual/router/dist/router.js
|
|
1
13
|
import { createRequire } from "node:module";
|
|
14
|
+
import { webcrypto as crypto2 } from "node:crypto";
|
|
15
|
+
import url2 from "node:url";
|
|
2
16
|
var __create = Object.create;
|
|
3
17
|
var __getProtoOf = Object.getPrototypeOf;
|
|
4
|
-
var
|
|
18
|
+
var __defProp2 = Object.defineProperty;
|
|
5
19
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
20
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
21
|
var __toESM = (mod, isNodeMode, target) => {
|
|
8
22
|
target = mod != null ? __create(__getProtoOf(mod)) : {};
|
|
9
|
-
const to = isNodeMode || !mod || !mod.__esModule ?
|
|
23
|
+
const to = isNodeMode || !mod || !mod.__esModule ? __defProp2(target, "default", { value: mod, enumerable: true }) : target;
|
|
10
24
|
for (let key of __getOwnPropNames(mod))
|
|
11
25
|
if (!__hasOwnProp.call(to, key))
|
|
12
|
-
|
|
26
|
+
__defProp2(to, key, {
|
|
13
27
|
get: () => mod[key],
|
|
14
28
|
enumerable: true
|
|
15
29
|
});
|
|
16
30
|
return to;
|
|
17
31
|
};
|
|
18
32
|
var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
|
|
19
|
-
var
|
|
33
|
+
var __export2 = (target, all) => {
|
|
20
34
|
for (var name in all)
|
|
21
|
-
|
|
35
|
+
__defProp2(target, name, {
|
|
22
36
|
get: all[name],
|
|
23
37
|
enumerable: true,
|
|
24
38
|
configurable: true,
|
|
25
39
|
set: (newValue) => all[name] = () => newValue
|
|
26
40
|
});
|
|
27
41
|
};
|
|
28
|
-
var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
29
42
|
var __require = /* @__PURE__ */ createRequire(import.meta.url);
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
var
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
}, y2 = this.$W, M3 = this.$M, m3 = this.$D, v2 = "set" + (this.$u ? "UTC" : "");
|
|
134
|
-
switch (f2) {
|
|
135
|
-
case h:
|
|
136
|
-
return r2 ? l2(1, 0) : l2(31, 11);
|
|
137
|
-
case c:
|
|
138
|
-
return r2 ? l2(1, M3) : l2(0, M3 + 1);
|
|
139
|
-
case o:
|
|
140
|
-
var g2 = this.$locale().weekStart || 0, D2 = (y2 < g2 ? y2 + 7 : y2) - g2;
|
|
141
|
-
return l2(r2 ? m3 - D2 : m3 + (6 - D2), M3);
|
|
142
|
-
case a:
|
|
143
|
-
case d:
|
|
144
|
-
return $2(v2 + "Hours", 0);
|
|
145
|
-
case u:
|
|
146
|
-
return $2(v2 + "Minutes", 1);
|
|
147
|
-
case s:
|
|
148
|
-
return $2(v2 + "Seconds", 2);
|
|
149
|
-
case i:
|
|
150
|
-
return $2(v2 + "Milliseconds", 3);
|
|
151
|
-
default:
|
|
152
|
-
return this.clone();
|
|
153
|
-
}
|
|
154
|
-
}, m2.endOf = function(t2) {
|
|
155
|
-
return this.startOf(t2, false);
|
|
156
|
-
}, m2.$set = function(t2, e2) {
|
|
157
|
-
var n2, o2 = b.p(t2), f2 = "set" + (this.$u ? "UTC" : ""), l2 = (n2 = {}, n2[a] = f2 + "Date", n2[d] = f2 + "Date", n2[c] = f2 + "Month", n2[h] = f2 + "FullYear", n2[u] = f2 + "Hours", n2[s] = f2 + "Minutes", n2[i] = f2 + "Seconds", n2[r] = f2 + "Milliseconds", n2)[o2], $2 = o2 === a ? this.$D + (e2 - this.$W) : e2;
|
|
158
|
-
if (o2 === c || o2 === h) {
|
|
159
|
-
var y2 = this.clone().set(d, 1);
|
|
160
|
-
y2.$d[l2]($2), y2.init(), this.$d = y2.set(d, Math.min(this.$D, y2.daysInMonth())).$d;
|
|
161
|
-
} else
|
|
162
|
-
l2 && this.$d[l2]($2);
|
|
163
|
-
return this.init(), this;
|
|
164
|
-
}, m2.set = function(t2, e2) {
|
|
165
|
-
return this.clone().$set(t2, e2);
|
|
166
|
-
}, m2.get = function(t2) {
|
|
167
|
-
return this[b.p(t2)]();
|
|
168
|
-
}, m2.add = function(r2, f2) {
|
|
169
|
-
var d2, l2 = this;
|
|
170
|
-
r2 = Number(r2);
|
|
171
|
-
var $2 = b.p(f2), y2 = function(t2) {
|
|
172
|
-
var e2 = O(l2);
|
|
173
|
-
return b.w(e2.date(e2.date() + Math.round(t2 * r2)), l2);
|
|
174
|
-
};
|
|
175
|
-
if ($2 === c)
|
|
176
|
-
return this.set(c, this.$M + r2);
|
|
177
|
-
if ($2 === h)
|
|
178
|
-
return this.set(h, this.$y + r2);
|
|
179
|
-
if ($2 === a)
|
|
180
|
-
return y2(1);
|
|
181
|
-
if ($2 === o)
|
|
182
|
-
return y2(7);
|
|
183
|
-
var M3 = (d2 = {}, d2[s] = e, d2[u] = n, d2[i] = t, d2)[$2] || 1, m3 = this.$d.getTime() + r2 * M3;
|
|
184
|
-
return b.w(m3, this);
|
|
185
|
-
}, m2.subtract = function(t2, e2) {
|
|
186
|
-
return this.add(-1 * t2, e2);
|
|
187
|
-
}, m2.format = function(t2) {
|
|
188
|
-
var e2 = this, n2 = this.$locale();
|
|
189
|
-
if (!this.isValid())
|
|
190
|
-
return n2.invalidDate || l;
|
|
191
|
-
var r2 = t2 || "YYYY-MM-DDTHH:mm:ssZ", i2 = b.z(this), s2 = this.$H, u2 = this.$m, a2 = this.$M, o2 = n2.weekdays, c2 = n2.months, f2 = n2.meridiem, h2 = function(t3, n3, i3, s3) {
|
|
192
|
-
return t3 && (t3[n3] || t3(e2, r2)) || i3[n3].slice(0, s3);
|
|
193
|
-
}, d2 = function(t3) {
|
|
194
|
-
return b.s(s2 % 12 || 12, t3, "0");
|
|
195
|
-
}, $2 = f2 || function(t3, e3, n3) {
|
|
196
|
-
var r3 = t3 < 12 ? "AM" : "PM";
|
|
197
|
-
return n3 ? r3.toLowerCase() : r3;
|
|
198
|
-
};
|
|
199
|
-
return r2.replace(y, function(t3, r3) {
|
|
200
|
-
return r3 || function(t4) {
|
|
201
|
-
switch (t4) {
|
|
202
|
-
case "YY":
|
|
203
|
-
return String(e2.$y).slice(-2);
|
|
204
|
-
case "YYYY":
|
|
205
|
-
return b.s(e2.$y, 4, "0");
|
|
206
|
-
case "M":
|
|
207
|
-
return a2 + 1;
|
|
208
|
-
case "MM":
|
|
209
|
-
return b.s(a2 + 1, 2, "0");
|
|
210
|
-
case "MMM":
|
|
211
|
-
return h2(n2.monthsShort, a2, c2, 3);
|
|
212
|
-
case "MMMM":
|
|
213
|
-
return h2(c2, a2);
|
|
214
|
-
case "D":
|
|
215
|
-
return e2.$D;
|
|
216
|
-
case "DD":
|
|
217
|
-
return b.s(e2.$D, 2, "0");
|
|
218
|
-
case "d":
|
|
219
|
-
return String(e2.$W);
|
|
220
|
-
case "dd":
|
|
221
|
-
return h2(n2.weekdaysMin, e2.$W, o2, 2);
|
|
222
|
-
case "ddd":
|
|
223
|
-
return h2(n2.weekdaysShort, e2.$W, o2, 3);
|
|
224
|
-
case "dddd":
|
|
225
|
-
return o2[e2.$W];
|
|
226
|
-
case "H":
|
|
227
|
-
return String(s2);
|
|
228
|
-
case "HH":
|
|
229
|
-
return b.s(s2, 2, "0");
|
|
230
|
-
case "h":
|
|
231
|
-
return d2(1);
|
|
232
|
-
case "hh":
|
|
233
|
-
return d2(2);
|
|
234
|
-
case "a":
|
|
235
|
-
return $2(s2, u2, true);
|
|
236
|
-
case "A":
|
|
237
|
-
return $2(s2, u2, false);
|
|
238
|
-
case "m":
|
|
239
|
-
return String(u2);
|
|
240
|
-
case "mm":
|
|
241
|
-
return b.s(u2, 2, "0");
|
|
242
|
-
case "s":
|
|
243
|
-
return String(e2.$s);
|
|
244
|
-
case "ss":
|
|
245
|
-
return b.s(e2.$s, 2, "0");
|
|
246
|
-
case "SSS":
|
|
247
|
-
return b.s(e2.$ms, 3, "0");
|
|
248
|
-
case "Z":
|
|
249
|
-
return i2;
|
|
250
|
-
}
|
|
251
|
-
return null;
|
|
252
|
-
}(t3) || i2.replace(":", "");
|
|
253
|
-
});
|
|
254
|
-
}, m2.utcOffset = function() {
|
|
255
|
-
return 15 * -Math.round(this.$d.getTimezoneOffset() / 15);
|
|
256
|
-
}, m2.diff = function(r2, d2, l2) {
|
|
257
|
-
var $2, y2 = this, M3 = b.p(d2), m3 = O(r2), v2 = (m3.utcOffset() - this.utcOffset()) * e, g2 = this - m3, D2 = function() {
|
|
258
|
-
return b.m(y2, m3);
|
|
259
|
-
};
|
|
260
|
-
switch (M3) {
|
|
261
|
-
case h:
|
|
262
|
-
$2 = D2() / 12;
|
|
263
|
-
break;
|
|
264
|
-
case c:
|
|
265
|
-
$2 = D2();
|
|
266
|
-
break;
|
|
267
|
-
case f:
|
|
268
|
-
$2 = D2() / 3;
|
|
269
|
-
break;
|
|
270
|
-
case o:
|
|
271
|
-
$2 = (g2 - v2) / 604800000;
|
|
272
|
-
break;
|
|
273
|
-
case a:
|
|
274
|
-
$2 = (g2 - v2) / 86400000;
|
|
43
|
+
var require_eventemitter3 = __commonJS((exports, module) => {
|
|
44
|
+
var has = Object.prototype.hasOwnProperty;
|
|
45
|
+
var prefix = "~";
|
|
46
|
+
function Events() {}
|
|
47
|
+
if (Object.create) {
|
|
48
|
+
Events.prototype = Object.create(null);
|
|
49
|
+
if (!new Events().__proto__)
|
|
50
|
+
prefix = false;
|
|
51
|
+
}
|
|
52
|
+
function EE(fn, context, once) {
|
|
53
|
+
this.fn = fn;
|
|
54
|
+
this.context = context;
|
|
55
|
+
this.once = once || false;
|
|
56
|
+
}
|
|
57
|
+
function addListener(emitter, event, fn, context, once) {
|
|
58
|
+
if (typeof fn !== "function") {
|
|
59
|
+
throw new TypeError("The listener must be a function");
|
|
60
|
+
}
|
|
61
|
+
var listener = new EE(fn, context || emitter, once), evt = prefix ? prefix + event : event;
|
|
62
|
+
if (!emitter._events[evt])
|
|
63
|
+
emitter._events[evt] = listener, emitter._eventsCount++;
|
|
64
|
+
else if (!emitter._events[evt].fn)
|
|
65
|
+
emitter._events[evt].push(listener);
|
|
66
|
+
else
|
|
67
|
+
emitter._events[evt] = [emitter._events[evt], listener];
|
|
68
|
+
return emitter;
|
|
69
|
+
}
|
|
70
|
+
function clearEvent(emitter, evt) {
|
|
71
|
+
if (--emitter._eventsCount === 0)
|
|
72
|
+
emitter._events = new Events;
|
|
73
|
+
else
|
|
74
|
+
delete emitter._events[evt];
|
|
75
|
+
}
|
|
76
|
+
function EventEmitter() {
|
|
77
|
+
this._events = new Events;
|
|
78
|
+
this._eventsCount = 0;
|
|
79
|
+
}
|
|
80
|
+
EventEmitter.prototype.eventNames = function eventNames() {
|
|
81
|
+
var names = [], events, name;
|
|
82
|
+
if (this._eventsCount === 0)
|
|
83
|
+
return names;
|
|
84
|
+
for (name in events = this._events) {
|
|
85
|
+
if (has.call(events, name))
|
|
86
|
+
names.push(prefix ? name.slice(1) : name);
|
|
87
|
+
}
|
|
88
|
+
if (Object.getOwnPropertySymbols) {
|
|
89
|
+
return names.concat(Object.getOwnPropertySymbols(events));
|
|
90
|
+
}
|
|
91
|
+
return names;
|
|
92
|
+
};
|
|
93
|
+
EventEmitter.prototype.listeners = function listeners(event) {
|
|
94
|
+
var evt = prefix ? prefix + event : event, handlers = this._events[evt];
|
|
95
|
+
if (!handlers)
|
|
96
|
+
return [];
|
|
97
|
+
if (handlers.fn)
|
|
98
|
+
return [handlers.fn];
|
|
99
|
+
for (var i = 0, l = handlers.length, ee = new Array(l);i < l; i++) {
|
|
100
|
+
ee[i] = handlers[i].fn;
|
|
101
|
+
}
|
|
102
|
+
return ee;
|
|
103
|
+
};
|
|
104
|
+
EventEmitter.prototype.listenerCount = function listenerCount(event) {
|
|
105
|
+
var evt = prefix ? prefix + event : event, listeners = this._events[evt];
|
|
106
|
+
if (!listeners)
|
|
107
|
+
return 0;
|
|
108
|
+
if (listeners.fn)
|
|
109
|
+
return 1;
|
|
110
|
+
return listeners.length;
|
|
111
|
+
};
|
|
112
|
+
EventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {
|
|
113
|
+
var evt = prefix ? prefix + event : event;
|
|
114
|
+
if (!this._events[evt])
|
|
115
|
+
return false;
|
|
116
|
+
var listeners = this._events[evt], len = arguments.length, args, i;
|
|
117
|
+
if (listeners.fn) {
|
|
118
|
+
if (listeners.once)
|
|
119
|
+
this.removeListener(event, listeners.fn, undefined, true);
|
|
120
|
+
switch (len) {
|
|
121
|
+
case 1:
|
|
122
|
+
return listeners.fn.call(listeners.context), true;
|
|
123
|
+
case 2:
|
|
124
|
+
return listeners.fn.call(listeners.context, a1), true;
|
|
125
|
+
case 3:
|
|
126
|
+
return listeners.fn.call(listeners.context, a1, a2), true;
|
|
127
|
+
case 4:
|
|
128
|
+
return listeners.fn.call(listeners.context, a1, a2, a3), true;
|
|
129
|
+
case 5:
|
|
130
|
+
return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;
|
|
131
|
+
case 6:
|
|
132
|
+
return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;
|
|
133
|
+
}
|
|
134
|
+
for (i = 1, args = new Array(len - 1);i < len; i++) {
|
|
135
|
+
args[i - 1] = arguments[i];
|
|
136
|
+
}
|
|
137
|
+
listeners.fn.apply(listeners.context, args);
|
|
138
|
+
} else {
|
|
139
|
+
var length = listeners.length, j;
|
|
140
|
+
for (i = 0;i < length; i++) {
|
|
141
|
+
if (listeners[i].once)
|
|
142
|
+
this.removeListener(event, listeners[i].fn, undefined, true);
|
|
143
|
+
switch (len) {
|
|
144
|
+
case 1:
|
|
145
|
+
listeners[i].fn.call(listeners[i].context);
|
|
275
146
|
break;
|
|
276
|
-
case
|
|
277
|
-
|
|
147
|
+
case 2:
|
|
148
|
+
listeners[i].fn.call(listeners[i].context, a1);
|
|
278
149
|
break;
|
|
279
|
-
case
|
|
280
|
-
|
|
150
|
+
case 3:
|
|
151
|
+
listeners[i].fn.call(listeners[i].context, a1, a2);
|
|
281
152
|
break;
|
|
282
|
-
case
|
|
283
|
-
|
|
153
|
+
case 4:
|
|
154
|
+
listeners[i].fn.call(listeners[i].context, a1, a2, a3);
|
|
284
155
|
break;
|
|
285
156
|
default:
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
}
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
157
|
+
if (!args)
|
|
158
|
+
for (j = 1, args = new Array(len - 1);j < len; j++) {
|
|
159
|
+
args[j - 1] = arguments[j];
|
|
160
|
+
}
|
|
161
|
+
listeners[i].fn.apply(listeners[i].context, args);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
return true;
|
|
166
|
+
};
|
|
167
|
+
EventEmitter.prototype.on = function on(event, fn, context) {
|
|
168
|
+
return addListener(this, event, fn, context, false);
|
|
169
|
+
};
|
|
170
|
+
EventEmitter.prototype.once = function once(event, fn, context) {
|
|
171
|
+
return addListener(this, event, fn, context, true);
|
|
172
|
+
};
|
|
173
|
+
EventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {
|
|
174
|
+
var evt = prefix ? prefix + event : event;
|
|
175
|
+
if (!this._events[evt])
|
|
176
|
+
return this;
|
|
177
|
+
if (!fn) {
|
|
178
|
+
clearEvent(this, evt);
|
|
179
|
+
return this;
|
|
180
|
+
}
|
|
181
|
+
var listeners = this._events[evt];
|
|
182
|
+
if (listeners.fn) {
|
|
183
|
+
if (listeners.fn === fn && (!once || listeners.once) && (!context || listeners.context === context)) {
|
|
184
|
+
clearEvent(this, evt);
|
|
185
|
+
}
|
|
186
|
+
} else {
|
|
187
|
+
for (var i = 0, events = [], length = listeners.length;i < length; i++) {
|
|
188
|
+
if (listeners[i].fn !== fn || once && !listeners[i].once || context && listeners[i].context !== context) {
|
|
189
|
+
events.push(listeners[i]);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
if (events.length)
|
|
193
|
+
this._events[evt] = events.length === 1 ? events[0] : events;
|
|
194
|
+
else
|
|
195
|
+
clearEvent(this, evt);
|
|
196
|
+
}
|
|
197
|
+
return this;
|
|
198
|
+
};
|
|
199
|
+
EventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {
|
|
200
|
+
var evt;
|
|
201
|
+
if (event) {
|
|
202
|
+
evt = prefix ? prefix + event : event;
|
|
203
|
+
if (this._events[evt])
|
|
204
|
+
clearEvent(this, evt);
|
|
205
|
+
} else {
|
|
206
|
+
this._events = new Events;
|
|
207
|
+
this._eventsCount = 0;
|
|
208
|
+
}
|
|
209
|
+
return this;
|
|
210
|
+
};
|
|
211
|
+
EventEmitter.prototype.off = EventEmitter.prototype.removeListener;
|
|
212
|
+
EventEmitter.prototype.addListener = EventEmitter.prototype.on;
|
|
213
|
+
EventEmitter.prefixed = prefix;
|
|
214
|
+
EventEmitter.EventEmitter = EventEmitter;
|
|
215
|
+
if (typeof module !== "undefined") {
|
|
216
|
+
module.exports = EventEmitter;
|
|
217
|
+
}
|
|
320
218
|
});
|
|
321
|
-
|
|
322
|
-
// node_modules/.pnpm/@kevisual+ws@8.19.0/node_modules/@kevisual/ws/lib/constants.js
|
|
323
|
-
var require_constants2 = __commonJS((exports, module) => {
|
|
219
|
+
var require_constants = __commonJS((exports, module) => {
|
|
324
220
|
var BINARY_TYPES = ["nodebuffer", "arraybuffer", "fragments"];
|
|
325
221
|
var hasBlob = typeof Blob !== "undefined";
|
|
326
222
|
if (hasBlob)
|
|
327
223
|
BINARY_TYPES.push("blob");
|
|
328
224
|
module.exports = {
|
|
329
225
|
BINARY_TYPES,
|
|
330
|
-
CLOSE_TIMEOUT: 30000,
|
|
331
226
|
EMPTY_BUFFER: Buffer.alloc(0),
|
|
332
227
|
GUID: "258EAFA5-E914-47DA-95CA-C5AB0DC85B11",
|
|
333
228
|
hasBlob,
|
|
@@ -338,10 +233,8 @@ var require_constants2 = __commonJS((exports, module) => {
|
|
|
338
233
|
NOOP: () => {}
|
|
339
234
|
};
|
|
340
235
|
});
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
var require_buffer_util2 = __commonJS((exports, module) => {
|
|
344
|
-
var { EMPTY_BUFFER } = require_constants2();
|
|
236
|
+
var require_buffer_util = __commonJS((exports, module) => {
|
|
237
|
+
var { EMPTY_BUFFER } = require_constants();
|
|
345
238
|
var FastBuffer = Buffer[Symbol.species];
|
|
346
239
|
function concat(list, totalLength) {
|
|
347
240
|
if (list.length === 0)
|
|
@@ -399,9 +292,7 @@ var require_buffer_util2 = __commonJS((exports, module) => {
|
|
|
399
292
|
unmask: _unmask
|
|
400
293
|
};
|
|
401
294
|
});
|
|
402
|
-
|
|
403
|
-
// node_modules/.pnpm/@kevisual+ws@8.19.0/node_modules/@kevisual/ws/lib/limiter.js
|
|
404
|
-
var require_limiter2 = __commonJS((exports, module) => {
|
|
295
|
+
var require_limiter = __commonJS((exports, module) => {
|
|
405
296
|
var kDone = Symbol("kDone");
|
|
406
297
|
var kRun = Symbol("kRun");
|
|
407
298
|
|
|
@@ -431,13 +322,11 @@ var require_limiter2 = __commonJS((exports, module) => {
|
|
|
431
322
|
}
|
|
432
323
|
module.exports = Limiter;
|
|
433
324
|
});
|
|
434
|
-
|
|
435
|
-
// node_modules/.pnpm/@kevisual+ws@8.19.0/node_modules/@kevisual/ws/lib/permessage-deflate.js
|
|
436
|
-
var require_permessage_deflate2 = __commonJS((exports, module) => {
|
|
325
|
+
var require_permessage_deflate = __commonJS((exports, module) => {
|
|
437
326
|
var zlib = __require("zlib");
|
|
438
|
-
var bufferUtil =
|
|
439
|
-
var Limiter =
|
|
440
|
-
var { kStatusCode } =
|
|
327
|
+
var bufferUtil = require_buffer_util();
|
|
328
|
+
var Limiter = require_limiter();
|
|
329
|
+
var { kStatusCode } = require_constants();
|
|
441
330
|
var FastBuffer = Buffer[Symbol.species];
|
|
442
331
|
var TRAILER = Buffer.from([0, 0, 255, 255]);
|
|
443
332
|
var kPerMessageDeflate = Symbol("permessage-deflate");
|
|
@@ -687,19 +576,13 @@ var require_permessage_deflate2 = __commonJS((exports, module) => {
|
|
|
687
576
|
}
|
|
688
577
|
function inflateOnError(err) {
|
|
689
578
|
this[kPerMessageDeflate]._inflate = null;
|
|
690
|
-
if (this[kError]) {
|
|
691
|
-
this[kCallback](this[kError]);
|
|
692
|
-
return;
|
|
693
|
-
}
|
|
694
579
|
err[kStatusCode] = 1007;
|
|
695
580
|
this[kCallback](err);
|
|
696
581
|
}
|
|
697
582
|
});
|
|
698
|
-
|
|
699
|
-
// node_modules/.pnpm/@kevisual+ws@8.19.0/node_modules/@kevisual/ws/lib/validation.js
|
|
700
|
-
var require_validation2 = __commonJS((exports, module) => {
|
|
583
|
+
var require_validation = __commonJS((exports, module) => {
|
|
701
584
|
var { isUtf8 } = __require("buffer");
|
|
702
|
-
var { hasBlob } =
|
|
585
|
+
var { hasBlob } = require_constants();
|
|
703
586
|
var tokenChars = [
|
|
704
587
|
0,
|
|
705
588
|
0,
|
|
@@ -875,19 +758,17 @@ var require_validation2 = __commonJS((exports, module) => {
|
|
|
875
758
|
};
|
|
876
759
|
}
|
|
877
760
|
});
|
|
878
|
-
|
|
879
|
-
// node_modules/.pnpm/@kevisual+ws@8.19.0/node_modules/@kevisual/ws/lib/receiver.js
|
|
880
|
-
var require_receiver2 = __commonJS((exports, module) => {
|
|
761
|
+
var require_receiver = __commonJS((exports, module) => {
|
|
881
762
|
var { Writable } = __require("stream");
|
|
882
|
-
var PerMessageDeflate =
|
|
763
|
+
var PerMessageDeflate = require_permessage_deflate();
|
|
883
764
|
var {
|
|
884
765
|
BINARY_TYPES,
|
|
885
766
|
EMPTY_BUFFER,
|
|
886
767
|
kStatusCode,
|
|
887
768
|
kWebSocket
|
|
888
|
-
} =
|
|
889
|
-
var { concat, toArrayBuffer, unmask } =
|
|
890
|
-
var { isValidStatusCode, isValidUTF8 } =
|
|
769
|
+
} = require_constants();
|
|
770
|
+
var { concat, toArrayBuffer, unmask } = require_buffer_util();
|
|
771
|
+
var { isValidStatusCode, isValidUTF8 } = require_validation();
|
|
891
772
|
var FastBuffer = Buffer[Symbol.species];
|
|
892
773
|
var GET_INFO = 0;
|
|
893
774
|
var GET_PAYLOAD_LENGTH_16 = 1;
|
|
@@ -988,14 +869,14 @@ var require_receiver2 = __commonJS((exports, module) => {
|
|
|
988
869
|
}
|
|
989
870
|
const buf = this.consume(2);
|
|
990
871
|
if ((buf[0] & 48) !== 0) {
|
|
991
|
-
const
|
|
992
|
-
cb(
|
|
872
|
+
const error48 = this.createError(RangeError, "RSV2 and RSV3 must be clear", true, 1002, "WS_ERR_UNEXPECTED_RSV_2_3");
|
|
873
|
+
cb(error48);
|
|
993
874
|
return;
|
|
994
875
|
}
|
|
995
876
|
const compressed = (buf[0] & 64) === 64;
|
|
996
877
|
if (compressed && !this._extensions[PerMessageDeflate.extensionName]) {
|
|
997
|
-
const
|
|
998
|
-
cb(
|
|
878
|
+
const error48 = this.createError(RangeError, "RSV1 must be clear", true, 1002, "WS_ERR_UNEXPECTED_RSV_1");
|
|
879
|
+
cb(error48);
|
|
999
880
|
return;
|
|
1000
881
|
}
|
|
1001
882
|
this._fin = (buf[0] & 128) === 128;
|
|
@@ -1003,42 +884,42 @@ var require_receiver2 = __commonJS((exports, module) => {
|
|
|
1003
884
|
this._payloadLength = buf[1] & 127;
|
|
1004
885
|
if (this._opcode === 0) {
|
|
1005
886
|
if (compressed) {
|
|
1006
|
-
const
|
|
1007
|
-
cb(
|
|
887
|
+
const error48 = this.createError(RangeError, "RSV1 must be clear", true, 1002, "WS_ERR_UNEXPECTED_RSV_1");
|
|
888
|
+
cb(error48);
|
|
1008
889
|
return;
|
|
1009
890
|
}
|
|
1010
891
|
if (!this._fragmented) {
|
|
1011
|
-
const
|
|
1012
|
-
cb(
|
|
892
|
+
const error48 = this.createError(RangeError, "invalid opcode 0", true, 1002, "WS_ERR_INVALID_OPCODE");
|
|
893
|
+
cb(error48);
|
|
1013
894
|
return;
|
|
1014
895
|
}
|
|
1015
896
|
this._opcode = this._fragmented;
|
|
1016
897
|
} else if (this._opcode === 1 || this._opcode === 2) {
|
|
1017
898
|
if (this._fragmented) {
|
|
1018
|
-
const
|
|
1019
|
-
cb(
|
|
899
|
+
const error48 = this.createError(RangeError, `invalid opcode ${this._opcode}`, true, 1002, "WS_ERR_INVALID_OPCODE");
|
|
900
|
+
cb(error48);
|
|
1020
901
|
return;
|
|
1021
902
|
}
|
|
1022
903
|
this._compressed = compressed;
|
|
1023
904
|
} else if (this._opcode > 7 && this._opcode < 11) {
|
|
1024
905
|
if (!this._fin) {
|
|
1025
|
-
const
|
|
1026
|
-
cb(
|
|
906
|
+
const error48 = this.createError(RangeError, "FIN must be set", true, 1002, "WS_ERR_EXPECTED_FIN");
|
|
907
|
+
cb(error48);
|
|
1027
908
|
return;
|
|
1028
909
|
}
|
|
1029
910
|
if (compressed) {
|
|
1030
|
-
const
|
|
1031
|
-
cb(
|
|
911
|
+
const error48 = this.createError(RangeError, "RSV1 must be clear", true, 1002, "WS_ERR_UNEXPECTED_RSV_1");
|
|
912
|
+
cb(error48);
|
|
1032
913
|
return;
|
|
1033
914
|
}
|
|
1034
915
|
if (this._payloadLength > 125 || this._opcode === 8 && this._payloadLength === 1) {
|
|
1035
|
-
const
|
|
1036
|
-
cb(
|
|
916
|
+
const error48 = this.createError(RangeError, `invalid payload length ${this._payloadLength}`, true, 1002, "WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH");
|
|
917
|
+
cb(error48);
|
|
1037
918
|
return;
|
|
1038
919
|
}
|
|
1039
920
|
} else {
|
|
1040
|
-
const
|
|
1041
|
-
cb(
|
|
921
|
+
const error48 = this.createError(RangeError, `invalid opcode ${this._opcode}`, true, 1002, "WS_ERR_INVALID_OPCODE");
|
|
922
|
+
cb(error48);
|
|
1042
923
|
return;
|
|
1043
924
|
}
|
|
1044
925
|
if (!this._fin && !this._fragmented)
|
|
@@ -1046,13 +927,13 @@ var require_receiver2 = __commonJS((exports, module) => {
|
|
|
1046
927
|
this._masked = (buf[1] & 128) === 128;
|
|
1047
928
|
if (this._isServer) {
|
|
1048
929
|
if (!this._masked) {
|
|
1049
|
-
const
|
|
1050
|
-
cb(
|
|
930
|
+
const error48 = this.createError(RangeError, "MASK must be set", true, 1002, "WS_ERR_EXPECTED_MASK");
|
|
931
|
+
cb(error48);
|
|
1051
932
|
return;
|
|
1052
933
|
}
|
|
1053
934
|
} else if (this._masked) {
|
|
1054
|
-
const
|
|
1055
|
-
cb(
|
|
935
|
+
const error48 = this.createError(RangeError, "MASK must be clear", true, 1002, "WS_ERR_UNEXPECTED_MASK");
|
|
936
|
+
cb(error48);
|
|
1056
937
|
return;
|
|
1057
938
|
}
|
|
1058
939
|
if (this._payloadLength === 126)
|
|
@@ -1078,8 +959,8 @@ var require_receiver2 = __commonJS((exports, module) => {
|
|
|
1078
959
|
const buf = this.consume(8);
|
|
1079
960
|
const num = buf.readUInt32BE(0);
|
|
1080
961
|
if (num > Math.pow(2, 53 - 32) - 1) {
|
|
1081
|
-
const
|
|
1082
|
-
cb(
|
|
962
|
+
const error48 = this.createError(RangeError, "Unsupported WebSocket frame: payload length > 2^53 - 1", false, 1009, "WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH");
|
|
963
|
+
cb(error48);
|
|
1083
964
|
return;
|
|
1084
965
|
}
|
|
1085
966
|
this._payloadLength = num * Math.pow(2, 32) + buf.readUInt32BE(4);
|
|
@@ -1089,8 +970,8 @@ var require_receiver2 = __commonJS((exports, module) => {
|
|
|
1089
970
|
if (this._payloadLength && this._opcode < 8) {
|
|
1090
971
|
this._totalPayloadLength += this._payloadLength;
|
|
1091
972
|
if (this._totalPayloadLength > this._maxPayload && this._maxPayload > 0) {
|
|
1092
|
-
const
|
|
1093
|
-
cb(
|
|
973
|
+
const error48 = this.createError(RangeError, "Max payload size exceeded", false, 1009, "WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");
|
|
974
|
+
cb(error48);
|
|
1094
975
|
return;
|
|
1095
976
|
}
|
|
1096
977
|
}
|
|
@@ -1142,3039 +1023,8 @@ var require_receiver2 = __commonJS((exports, module) => {
|
|
|
1142
1023
|
if (buf.length) {
|
|
1143
1024
|
this._messageLength += buf.length;
|
|
1144
1025
|
if (this._messageLength > this._maxPayload && this._maxPayload > 0) {
|
|
1145
|
-
const
|
|
1146
|
-
cb(
|
|
1147
|
-
return;
|
|
1148
|
-
}
|
|
1149
|
-
this._fragments.push(buf);
|
|
1150
|
-
}
|
|
1151
|
-
this.dataMessage(cb);
|
|
1152
|
-
if (this._state === GET_INFO)
|
|
1153
|
-
this.startLoop(cb);
|
|
1154
|
-
});
|
|
1155
|
-
}
|
|
1156
|
-
dataMessage(cb) {
|
|
1157
|
-
if (!this._fin) {
|
|
1158
|
-
this._state = GET_INFO;
|
|
1159
|
-
return;
|
|
1160
|
-
}
|
|
1161
|
-
const messageLength = this._messageLength;
|
|
1162
|
-
const fragments = this._fragments;
|
|
1163
|
-
this._totalPayloadLength = 0;
|
|
1164
|
-
this._messageLength = 0;
|
|
1165
|
-
this._fragmented = 0;
|
|
1166
|
-
this._fragments = [];
|
|
1167
|
-
if (this._opcode === 2) {
|
|
1168
|
-
let data;
|
|
1169
|
-
if (this._binaryType === "nodebuffer") {
|
|
1170
|
-
data = concat(fragments, messageLength);
|
|
1171
|
-
} else if (this._binaryType === "arraybuffer") {
|
|
1172
|
-
data = toArrayBuffer(concat(fragments, messageLength));
|
|
1173
|
-
} else if (this._binaryType === "blob") {
|
|
1174
|
-
data = new Blob(fragments);
|
|
1175
|
-
} else {
|
|
1176
|
-
data = fragments;
|
|
1177
|
-
}
|
|
1178
|
-
if (this._allowSynchronousEvents) {
|
|
1179
|
-
this.emit("message", data, true);
|
|
1180
|
-
this._state = GET_INFO;
|
|
1181
|
-
} else {
|
|
1182
|
-
this._state = DEFER_EVENT;
|
|
1183
|
-
setImmediate(() => {
|
|
1184
|
-
this.emit("message", data, true);
|
|
1185
|
-
this._state = GET_INFO;
|
|
1186
|
-
this.startLoop(cb);
|
|
1187
|
-
});
|
|
1188
|
-
}
|
|
1189
|
-
} else {
|
|
1190
|
-
const buf = concat(fragments, messageLength);
|
|
1191
|
-
if (!this._skipUTF8Validation && !isValidUTF8(buf)) {
|
|
1192
|
-
const error49 = this.createError(Error, "invalid UTF-8 sequence", true, 1007, "WS_ERR_INVALID_UTF8");
|
|
1193
|
-
cb(error49);
|
|
1194
|
-
return;
|
|
1195
|
-
}
|
|
1196
|
-
if (this._state === INFLATING || this._allowSynchronousEvents) {
|
|
1197
|
-
this.emit("message", buf, false);
|
|
1198
|
-
this._state = GET_INFO;
|
|
1199
|
-
} else {
|
|
1200
|
-
this._state = DEFER_EVENT;
|
|
1201
|
-
setImmediate(() => {
|
|
1202
|
-
this.emit("message", buf, false);
|
|
1203
|
-
this._state = GET_INFO;
|
|
1204
|
-
this.startLoop(cb);
|
|
1205
|
-
});
|
|
1206
|
-
}
|
|
1207
|
-
}
|
|
1208
|
-
}
|
|
1209
|
-
controlMessage(data, cb) {
|
|
1210
|
-
if (this._opcode === 8) {
|
|
1211
|
-
if (data.length === 0) {
|
|
1212
|
-
this._loop = false;
|
|
1213
|
-
this.emit("conclude", 1005, EMPTY_BUFFER);
|
|
1214
|
-
this.end();
|
|
1215
|
-
} else {
|
|
1216
|
-
const code = data.readUInt16BE(0);
|
|
1217
|
-
if (!isValidStatusCode(code)) {
|
|
1218
|
-
const error49 = this.createError(RangeError, `invalid status code ${code}`, true, 1002, "WS_ERR_INVALID_CLOSE_CODE");
|
|
1219
|
-
cb(error49);
|
|
1220
|
-
return;
|
|
1221
|
-
}
|
|
1222
|
-
const buf = new FastBuffer(data.buffer, data.byteOffset + 2, data.length - 2);
|
|
1223
|
-
if (!this._skipUTF8Validation && !isValidUTF8(buf)) {
|
|
1224
|
-
const error49 = this.createError(Error, "invalid UTF-8 sequence", true, 1007, "WS_ERR_INVALID_UTF8");
|
|
1225
|
-
cb(error49);
|
|
1226
|
-
return;
|
|
1227
|
-
}
|
|
1228
|
-
this._loop = false;
|
|
1229
|
-
this.emit("conclude", code, buf);
|
|
1230
|
-
this.end();
|
|
1231
|
-
}
|
|
1232
|
-
this._state = GET_INFO;
|
|
1233
|
-
return;
|
|
1234
|
-
}
|
|
1235
|
-
if (this._allowSynchronousEvents) {
|
|
1236
|
-
this.emit(this._opcode === 9 ? "ping" : "pong", data);
|
|
1237
|
-
this._state = GET_INFO;
|
|
1238
|
-
} else {
|
|
1239
|
-
this._state = DEFER_EVENT;
|
|
1240
|
-
setImmediate(() => {
|
|
1241
|
-
this.emit(this._opcode === 9 ? "ping" : "pong", data);
|
|
1242
|
-
this._state = GET_INFO;
|
|
1243
|
-
this.startLoop(cb);
|
|
1244
|
-
});
|
|
1245
|
-
}
|
|
1246
|
-
}
|
|
1247
|
-
createError(ErrorCtor, message, prefix, statusCode, errorCode) {
|
|
1248
|
-
this._loop = false;
|
|
1249
|
-
this._errored = true;
|
|
1250
|
-
const err = new ErrorCtor(prefix ? `Invalid WebSocket frame: ${message}` : message);
|
|
1251
|
-
Error.captureStackTrace(err, this.createError);
|
|
1252
|
-
err.code = errorCode;
|
|
1253
|
-
err[kStatusCode] = statusCode;
|
|
1254
|
-
return err;
|
|
1255
|
-
}
|
|
1256
|
-
}
|
|
1257
|
-
module.exports = Receiver;
|
|
1258
|
-
});
|
|
1259
|
-
|
|
1260
|
-
// node_modules/.pnpm/@kevisual+ws@8.19.0/node_modules/@kevisual/ws/lib/sender.js
|
|
1261
|
-
var require_sender2 = __commonJS((exports, module) => {
|
|
1262
|
-
var { Duplex } = __require("stream");
|
|
1263
|
-
var { randomFillSync } = __require("crypto");
|
|
1264
|
-
var PerMessageDeflate = require_permessage_deflate2();
|
|
1265
|
-
var { EMPTY_BUFFER, kWebSocket, NOOP } = require_constants2();
|
|
1266
|
-
var { isBlob, isValidStatusCode } = require_validation2();
|
|
1267
|
-
var { mask: applyMask, toBuffer } = require_buffer_util2();
|
|
1268
|
-
var kByteLength = Symbol("kByteLength");
|
|
1269
|
-
var maskBuffer = Buffer.alloc(4);
|
|
1270
|
-
var RANDOM_POOL_SIZE = 8 * 1024;
|
|
1271
|
-
var randomPool;
|
|
1272
|
-
var randomPoolPointer = RANDOM_POOL_SIZE;
|
|
1273
|
-
var DEFAULT = 0;
|
|
1274
|
-
var DEFLATING = 1;
|
|
1275
|
-
var GET_BLOB_DATA = 2;
|
|
1276
|
-
|
|
1277
|
-
class Sender {
|
|
1278
|
-
constructor(socket, extensions, generateMask) {
|
|
1279
|
-
this._extensions = extensions || {};
|
|
1280
|
-
if (generateMask) {
|
|
1281
|
-
this._generateMask = generateMask;
|
|
1282
|
-
this._maskBuffer = Buffer.alloc(4);
|
|
1283
|
-
}
|
|
1284
|
-
this._socket = socket;
|
|
1285
|
-
this._firstFragment = true;
|
|
1286
|
-
this._compress = false;
|
|
1287
|
-
this._bufferedBytes = 0;
|
|
1288
|
-
this._queue = [];
|
|
1289
|
-
this._state = DEFAULT;
|
|
1290
|
-
this.onerror = NOOP;
|
|
1291
|
-
this[kWebSocket] = undefined;
|
|
1292
|
-
}
|
|
1293
|
-
static frame(data, options) {
|
|
1294
|
-
let mask;
|
|
1295
|
-
let merge4 = false;
|
|
1296
|
-
let offset = 2;
|
|
1297
|
-
let skipMasking = false;
|
|
1298
|
-
if (options.mask) {
|
|
1299
|
-
mask = options.maskBuffer || maskBuffer;
|
|
1300
|
-
if (options.generateMask) {
|
|
1301
|
-
options.generateMask(mask);
|
|
1302
|
-
} else {
|
|
1303
|
-
if (randomPoolPointer === RANDOM_POOL_SIZE) {
|
|
1304
|
-
if (randomPool === undefined) {
|
|
1305
|
-
randomPool = Buffer.alloc(RANDOM_POOL_SIZE);
|
|
1306
|
-
}
|
|
1307
|
-
randomFillSync(randomPool, 0, RANDOM_POOL_SIZE);
|
|
1308
|
-
randomPoolPointer = 0;
|
|
1309
|
-
}
|
|
1310
|
-
mask[0] = randomPool[randomPoolPointer++];
|
|
1311
|
-
mask[1] = randomPool[randomPoolPointer++];
|
|
1312
|
-
mask[2] = randomPool[randomPoolPointer++];
|
|
1313
|
-
mask[3] = randomPool[randomPoolPointer++];
|
|
1314
|
-
}
|
|
1315
|
-
skipMasking = (mask[0] | mask[1] | mask[2] | mask[3]) === 0;
|
|
1316
|
-
offset = 6;
|
|
1317
|
-
}
|
|
1318
|
-
let dataLength;
|
|
1319
|
-
if (typeof data === "string") {
|
|
1320
|
-
if ((!options.mask || skipMasking) && options[kByteLength] !== undefined) {
|
|
1321
|
-
dataLength = options[kByteLength];
|
|
1322
|
-
} else {
|
|
1323
|
-
data = Buffer.from(data);
|
|
1324
|
-
dataLength = data.length;
|
|
1325
|
-
}
|
|
1326
|
-
} else {
|
|
1327
|
-
dataLength = data.length;
|
|
1328
|
-
merge4 = options.mask && options.readOnly && !skipMasking;
|
|
1329
|
-
}
|
|
1330
|
-
let payloadLength = dataLength;
|
|
1331
|
-
if (dataLength >= 65536) {
|
|
1332
|
-
offset += 8;
|
|
1333
|
-
payloadLength = 127;
|
|
1334
|
-
} else if (dataLength > 125) {
|
|
1335
|
-
offset += 2;
|
|
1336
|
-
payloadLength = 126;
|
|
1337
|
-
}
|
|
1338
|
-
const target = Buffer.allocUnsafe(merge4 ? dataLength + offset : offset);
|
|
1339
|
-
target[0] = options.fin ? options.opcode | 128 : options.opcode;
|
|
1340
|
-
if (options.rsv1)
|
|
1341
|
-
target[0] |= 64;
|
|
1342
|
-
target[1] = payloadLength;
|
|
1343
|
-
if (payloadLength === 126) {
|
|
1344
|
-
target.writeUInt16BE(dataLength, 2);
|
|
1345
|
-
} else if (payloadLength === 127) {
|
|
1346
|
-
target[2] = target[3] = 0;
|
|
1347
|
-
target.writeUIntBE(dataLength, 4, 6);
|
|
1348
|
-
}
|
|
1349
|
-
if (!options.mask)
|
|
1350
|
-
return [target, data];
|
|
1351
|
-
target[1] |= 128;
|
|
1352
|
-
target[offset - 4] = mask[0];
|
|
1353
|
-
target[offset - 3] = mask[1];
|
|
1354
|
-
target[offset - 2] = mask[2];
|
|
1355
|
-
target[offset - 1] = mask[3];
|
|
1356
|
-
if (skipMasking)
|
|
1357
|
-
return [target, data];
|
|
1358
|
-
if (merge4) {
|
|
1359
|
-
applyMask(data, mask, target, offset, dataLength);
|
|
1360
|
-
return [target];
|
|
1361
|
-
}
|
|
1362
|
-
applyMask(data, mask, data, 0, dataLength);
|
|
1363
|
-
return [target, data];
|
|
1364
|
-
}
|
|
1365
|
-
close(code, data, mask, cb) {
|
|
1366
|
-
let buf;
|
|
1367
|
-
if (code === undefined) {
|
|
1368
|
-
buf = EMPTY_BUFFER;
|
|
1369
|
-
} else if (typeof code !== "number" || !isValidStatusCode(code)) {
|
|
1370
|
-
throw new TypeError("First argument must be a valid error code number");
|
|
1371
|
-
} else if (data === undefined || !data.length) {
|
|
1372
|
-
buf = Buffer.allocUnsafe(2);
|
|
1373
|
-
buf.writeUInt16BE(code, 0);
|
|
1374
|
-
} else {
|
|
1375
|
-
const length = Buffer.byteLength(data);
|
|
1376
|
-
if (length > 123) {
|
|
1377
|
-
throw new RangeError("The message must not be greater than 123 bytes");
|
|
1378
|
-
}
|
|
1379
|
-
buf = Buffer.allocUnsafe(2 + length);
|
|
1380
|
-
buf.writeUInt16BE(code, 0);
|
|
1381
|
-
if (typeof data === "string") {
|
|
1382
|
-
buf.write(data, 2);
|
|
1383
|
-
} else {
|
|
1384
|
-
buf.set(data, 2);
|
|
1385
|
-
}
|
|
1386
|
-
}
|
|
1387
|
-
const options = {
|
|
1388
|
-
[kByteLength]: buf.length,
|
|
1389
|
-
fin: true,
|
|
1390
|
-
generateMask: this._generateMask,
|
|
1391
|
-
mask,
|
|
1392
|
-
maskBuffer: this._maskBuffer,
|
|
1393
|
-
opcode: 8,
|
|
1394
|
-
readOnly: false,
|
|
1395
|
-
rsv1: false
|
|
1396
|
-
};
|
|
1397
|
-
if (this._state !== DEFAULT) {
|
|
1398
|
-
this.enqueue([this.dispatch, buf, false, options, cb]);
|
|
1399
|
-
} else {
|
|
1400
|
-
this.sendFrame(Sender.frame(buf, options), cb);
|
|
1401
|
-
}
|
|
1402
|
-
}
|
|
1403
|
-
ping(data, mask, cb) {
|
|
1404
|
-
let byteLength;
|
|
1405
|
-
let readOnly;
|
|
1406
|
-
if (typeof data === "string") {
|
|
1407
|
-
byteLength = Buffer.byteLength(data);
|
|
1408
|
-
readOnly = false;
|
|
1409
|
-
} else if (isBlob(data)) {
|
|
1410
|
-
byteLength = data.size;
|
|
1411
|
-
readOnly = false;
|
|
1412
|
-
} else {
|
|
1413
|
-
data = toBuffer(data);
|
|
1414
|
-
byteLength = data.length;
|
|
1415
|
-
readOnly = toBuffer.readOnly;
|
|
1416
|
-
}
|
|
1417
|
-
if (byteLength > 125) {
|
|
1418
|
-
throw new RangeError("The data size must not be greater than 125 bytes");
|
|
1419
|
-
}
|
|
1420
|
-
const options = {
|
|
1421
|
-
[kByteLength]: byteLength,
|
|
1422
|
-
fin: true,
|
|
1423
|
-
generateMask: this._generateMask,
|
|
1424
|
-
mask,
|
|
1425
|
-
maskBuffer: this._maskBuffer,
|
|
1426
|
-
opcode: 9,
|
|
1427
|
-
readOnly,
|
|
1428
|
-
rsv1: false
|
|
1429
|
-
};
|
|
1430
|
-
if (isBlob(data)) {
|
|
1431
|
-
if (this._state !== DEFAULT) {
|
|
1432
|
-
this.enqueue([this.getBlobData, data, false, options, cb]);
|
|
1433
|
-
} else {
|
|
1434
|
-
this.getBlobData(data, false, options, cb);
|
|
1435
|
-
}
|
|
1436
|
-
} else if (this._state !== DEFAULT) {
|
|
1437
|
-
this.enqueue([this.dispatch, data, false, options, cb]);
|
|
1438
|
-
} else {
|
|
1439
|
-
this.sendFrame(Sender.frame(data, options), cb);
|
|
1440
|
-
}
|
|
1441
|
-
}
|
|
1442
|
-
pong(data, mask, cb) {
|
|
1443
|
-
let byteLength;
|
|
1444
|
-
let readOnly;
|
|
1445
|
-
if (typeof data === "string") {
|
|
1446
|
-
byteLength = Buffer.byteLength(data);
|
|
1447
|
-
readOnly = false;
|
|
1448
|
-
} else if (isBlob(data)) {
|
|
1449
|
-
byteLength = data.size;
|
|
1450
|
-
readOnly = false;
|
|
1451
|
-
} else {
|
|
1452
|
-
data = toBuffer(data);
|
|
1453
|
-
byteLength = data.length;
|
|
1454
|
-
readOnly = toBuffer.readOnly;
|
|
1455
|
-
}
|
|
1456
|
-
if (byteLength > 125) {
|
|
1457
|
-
throw new RangeError("The data size must not be greater than 125 bytes");
|
|
1458
|
-
}
|
|
1459
|
-
const options = {
|
|
1460
|
-
[kByteLength]: byteLength,
|
|
1461
|
-
fin: true,
|
|
1462
|
-
generateMask: this._generateMask,
|
|
1463
|
-
mask,
|
|
1464
|
-
maskBuffer: this._maskBuffer,
|
|
1465
|
-
opcode: 10,
|
|
1466
|
-
readOnly,
|
|
1467
|
-
rsv1: false
|
|
1468
|
-
};
|
|
1469
|
-
if (isBlob(data)) {
|
|
1470
|
-
if (this._state !== DEFAULT) {
|
|
1471
|
-
this.enqueue([this.getBlobData, data, false, options, cb]);
|
|
1472
|
-
} else {
|
|
1473
|
-
this.getBlobData(data, false, options, cb);
|
|
1474
|
-
}
|
|
1475
|
-
} else if (this._state !== DEFAULT) {
|
|
1476
|
-
this.enqueue([this.dispatch, data, false, options, cb]);
|
|
1477
|
-
} else {
|
|
1478
|
-
this.sendFrame(Sender.frame(data, options), cb);
|
|
1479
|
-
}
|
|
1480
|
-
}
|
|
1481
|
-
send(data, options, cb) {
|
|
1482
|
-
const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];
|
|
1483
|
-
let opcode = options.binary ? 2 : 1;
|
|
1484
|
-
let rsv1 = options.compress;
|
|
1485
|
-
let byteLength;
|
|
1486
|
-
let readOnly;
|
|
1487
|
-
if (typeof data === "string") {
|
|
1488
|
-
byteLength = Buffer.byteLength(data);
|
|
1489
|
-
readOnly = false;
|
|
1490
|
-
} else if (isBlob(data)) {
|
|
1491
|
-
byteLength = data.size;
|
|
1492
|
-
readOnly = false;
|
|
1493
|
-
} else {
|
|
1494
|
-
data = toBuffer(data);
|
|
1495
|
-
byteLength = data.length;
|
|
1496
|
-
readOnly = toBuffer.readOnly;
|
|
1497
|
-
}
|
|
1498
|
-
if (this._firstFragment) {
|
|
1499
|
-
this._firstFragment = false;
|
|
1500
|
-
if (rsv1 && perMessageDeflate && perMessageDeflate.params[perMessageDeflate._isServer ? "server_no_context_takeover" : "client_no_context_takeover"]) {
|
|
1501
|
-
rsv1 = byteLength >= perMessageDeflate._threshold;
|
|
1502
|
-
}
|
|
1503
|
-
this._compress = rsv1;
|
|
1504
|
-
} else {
|
|
1505
|
-
rsv1 = false;
|
|
1506
|
-
opcode = 0;
|
|
1507
|
-
}
|
|
1508
|
-
if (options.fin)
|
|
1509
|
-
this._firstFragment = true;
|
|
1510
|
-
const opts = {
|
|
1511
|
-
[kByteLength]: byteLength,
|
|
1512
|
-
fin: options.fin,
|
|
1513
|
-
generateMask: this._generateMask,
|
|
1514
|
-
mask: options.mask,
|
|
1515
|
-
maskBuffer: this._maskBuffer,
|
|
1516
|
-
opcode,
|
|
1517
|
-
readOnly,
|
|
1518
|
-
rsv1
|
|
1519
|
-
};
|
|
1520
|
-
if (isBlob(data)) {
|
|
1521
|
-
if (this._state !== DEFAULT) {
|
|
1522
|
-
this.enqueue([this.getBlobData, data, this._compress, opts, cb]);
|
|
1523
|
-
} else {
|
|
1524
|
-
this.getBlobData(data, this._compress, opts, cb);
|
|
1525
|
-
}
|
|
1526
|
-
} else if (this._state !== DEFAULT) {
|
|
1527
|
-
this.enqueue([this.dispatch, data, this._compress, opts, cb]);
|
|
1528
|
-
} else {
|
|
1529
|
-
this.dispatch(data, this._compress, opts, cb);
|
|
1530
|
-
}
|
|
1531
|
-
}
|
|
1532
|
-
getBlobData(blob, compress, options, cb) {
|
|
1533
|
-
this._bufferedBytes += options[kByteLength];
|
|
1534
|
-
this._state = GET_BLOB_DATA;
|
|
1535
|
-
blob.arrayBuffer().then((arrayBuffer) => {
|
|
1536
|
-
if (this._socket.destroyed) {
|
|
1537
|
-
const err = new Error("The socket was closed while the blob was being read");
|
|
1538
|
-
process.nextTick(callCallbacks, this, err, cb);
|
|
1539
|
-
return;
|
|
1540
|
-
}
|
|
1541
|
-
this._bufferedBytes -= options[kByteLength];
|
|
1542
|
-
const data = toBuffer(arrayBuffer);
|
|
1543
|
-
if (!compress) {
|
|
1544
|
-
this._state = DEFAULT;
|
|
1545
|
-
this.sendFrame(Sender.frame(data, options), cb);
|
|
1546
|
-
this.dequeue();
|
|
1547
|
-
} else {
|
|
1548
|
-
this.dispatch(data, compress, options, cb);
|
|
1549
|
-
}
|
|
1550
|
-
}).catch((err) => {
|
|
1551
|
-
process.nextTick(onError, this, err, cb);
|
|
1552
|
-
});
|
|
1553
|
-
}
|
|
1554
|
-
dispatch(data, compress, options, cb) {
|
|
1555
|
-
if (!compress) {
|
|
1556
|
-
this.sendFrame(Sender.frame(data, options), cb);
|
|
1557
|
-
return;
|
|
1558
|
-
}
|
|
1559
|
-
const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];
|
|
1560
|
-
this._bufferedBytes += options[kByteLength];
|
|
1561
|
-
this._state = DEFLATING;
|
|
1562
|
-
perMessageDeflate.compress(data, options.fin, (_, buf) => {
|
|
1563
|
-
if (this._socket.destroyed) {
|
|
1564
|
-
const err = new Error("The socket was closed while data was being compressed");
|
|
1565
|
-
callCallbacks(this, err, cb);
|
|
1566
|
-
return;
|
|
1567
|
-
}
|
|
1568
|
-
this._bufferedBytes -= options[kByteLength];
|
|
1569
|
-
this._state = DEFAULT;
|
|
1570
|
-
options.readOnly = false;
|
|
1571
|
-
this.sendFrame(Sender.frame(buf, options), cb);
|
|
1572
|
-
this.dequeue();
|
|
1573
|
-
});
|
|
1574
|
-
}
|
|
1575
|
-
dequeue() {
|
|
1576
|
-
while (this._state === DEFAULT && this._queue.length) {
|
|
1577
|
-
const params = this._queue.shift();
|
|
1578
|
-
this._bufferedBytes -= params[3][kByteLength];
|
|
1579
|
-
Reflect.apply(params[0], this, params.slice(1));
|
|
1580
|
-
}
|
|
1581
|
-
}
|
|
1582
|
-
enqueue(params) {
|
|
1583
|
-
this._bufferedBytes += params[3][kByteLength];
|
|
1584
|
-
this._queue.push(params);
|
|
1585
|
-
}
|
|
1586
|
-
sendFrame(list, cb) {
|
|
1587
|
-
if (list.length === 2) {
|
|
1588
|
-
this._socket.cork();
|
|
1589
|
-
this._socket.write(list[0]);
|
|
1590
|
-
this._socket.write(list[1], cb);
|
|
1591
|
-
this._socket.uncork();
|
|
1592
|
-
} else {
|
|
1593
|
-
this._socket.write(list[0], cb);
|
|
1594
|
-
}
|
|
1595
|
-
}
|
|
1596
|
-
}
|
|
1597
|
-
module.exports = Sender;
|
|
1598
|
-
function callCallbacks(sender, err, cb) {
|
|
1599
|
-
if (typeof cb === "function")
|
|
1600
|
-
cb(err);
|
|
1601
|
-
for (let i = 0;i < sender._queue.length; i++) {
|
|
1602
|
-
const params = sender._queue[i];
|
|
1603
|
-
const callback = params[params.length - 1];
|
|
1604
|
-
if (typeof callback === "function")
|
|
1605
|
-
callback(err);
|
|
1606
|
-
}
|
|
1607
|
-
}
|
|
1608
|
-
function onError(sender, err, cb) {
|
|
1609
|
-
callCallbacks(sender, err, cb);
|
|
1610
|
-
sender.onerror(err);
|
|
1611
|
-
}
|
|
1612
|
-
});
|
|
1613
|
-
|
|
1614
|
-
// node_modules/.pnpm/@kevisual+ws@8.19.0/node_modules/@kevisual/ws/lib/event-target.js
|
|
1615
|
-
var require_event_target2 = __commonJS((exports, module) => {
|
|
1616
|
-
var { kForOnEventAttribute, kListener } = require_constants2();
|
|
1617
|
-
var kCode = Symbol("kCode");
|
|
1618
|
-
var kData = Symbol("kData");
|
|
1619
|
-
var kError = Symbol("kError");
|
|
1620
|
-
var kMessage = Symbol("kMessage");
|
|
1621
|
-
var kReason = Symbol("kReason");
|
|
1622
|
-
var kTarget = Symbol("kTarget");
|
|
1623
|
-
var kType = Symbol("kType");
|
|
1624
|
-
var kWasClean = Symbol("kWasClean");
|
|
1625
|
-
|
|
1626
|
-
class Event {
|
|
1627
|
-
constructor(type) {
|
|
1628
|
-
this[kTarget] = null;
|
|
1629
|
-
this[kType] = type;
|
|
1630
|
-
}
|
|
1631
|
-
get target() {
|
|
1632
|
-
return this[kTarget];
|
|
1633
|
-
}
|
|
1634
|
-
get type() {
|
|
1635
|
-
return this[kType];
|
|
1636
|
-
}
|
|
1637
|
-
}
|
|
1638
|
-
Object.defineProperty(Event.prototype, "target", { enumerable: true });
|
|
1639
|
-
Object.defineProperty(Event.prototype, "type", { enumerable: true });
|
|
1640
|
-
|
|
1641
|
-
class CloseEvent extends Event {
|
|
1642
|
-
constructor(type, options = {}) {
|
|
1643
|
-
super(type);
|
|
1644
|
-
this[kCode] = options.code === undefined ? 0 : options.code;
|
|
1645
|
-
this[kReason] = options.reason === undefined ? "" : options.reason;
|
|
1646
|
-
this[kWasClean] = options.wasClean === undefined ? false : options.wasClean;
|
|
1647
|
-
}
|
|
1648
|
-
get code() {
|
|
1649
|
-
return this[kCode];
|
|
1650
|
-
}
|
|
1651
|
-
get reason() {
|
|
1652
|
-
return this[kReason];
|
|
1653
|
-
}
|
|
1654
|
-
get wasClean() {
|
|
1655
|
-
return this[kWasClean];
|
|
1656
|
-
}
|
|
1657
|
-
}
|
|
1658
|
-
Object.defineProperty(CloseEvent.prototype, "code", { enumerable: true });
|
|
1659
|
-
Object.defineProperty(CloseEvent.prototype, "reason", { enumerable: true });
|
|
1660
|
-
Object.defineProperty(CloseEvent.prototype, "wasClean", { enumerable: true });
|
|
1661
|
-
|
|
1662
|
-
class ErrorEvent extends Event {
|
|
1663
|
-
constructor(type, options = {}) {
|
|
1664
|
-
super(type);
|
|
1665
|
-
this[kError] = options.error === undefined ? null : options.error;
|
|
1666
|
-
this[kMessage] = options.message === undefined ? "" : options.message;
|
|
1667
|
-
}
|
|
1668
|
-
get error() {
|
|
1669
|
-
return this[kError];
|
|
1670
|
-
}
|
|
1671
|
-
get message() {
|
|
1672
|
-
return this[kMessage];
|
|
1673
|
-
}
|
|
1674
|
-
}
|
|
1675
|
-
Object.defineProperty(ErrorEvent.prototype, "error", { enumerable: true });
|
|
1676
|
-
Object.defineProperty(ErrorEvent.prototype, "message", { enumerable: true });
|
|
1677
|
-
|
|
1678
|
-
class MessageEvent extends Event {
|
|
1679
|
-
constructor(type, options = {}) {
|
|
1680
|
-
super(type);
|
|
1681
|
-
this[kData] = options.data === undefined ? null : options.data;
|
|
1682
|
-
}
|
|
1683
|
-
get data() {
|
|
1684
|
-
return this[kData];
|
|
1685
|
-
}
|
|
1686
|
-
}
|
|
1687
|
-
Object.defineProperty(MessageEvent.prototype, "data", { enumerable: true });
|
|
1688
|
-
var EventTarget = {
|
|
1689
|
-
addEventListener(type, handler, options = {}) {
|
|
1690
|
-
for (const listener of this.listeners(type)) {
|
|
1691
|
-
if (!options[kForOnEventAttribute] && listener[kListener] === handler && !listener[kForOnEventAttribute]) {
|
|
1692
|
-
return;
|
|
1693
|
-
}
|
|
1694
|
-
}
|
|
1695
|
-
let wrapper;
|
|
1696
|
-
if (type === "message") {
|
|
1697
|
-
wrapper = function onMessage(data, isBinary) {
|
|
1698
|
-
const event = new MessageEvent("message", {
|
|
1699
|
-
data: isBinary ? data : data.toString()
|
|
1700
|
-
});
|
|
1701
|
-
event[kTarget] = this;
|
|
1702
|
-
callListener(handler, this, event);
|
|
1703
|
-
};
|
|
1704
|
-
} else if (type === "close") {
|
|
1705
|
-
wrapper = function onClose(code, message) {
|
|
1706
|
-
const event = new CloseEvent("close", {
|
|
1707
|
-
code,
|
|
1708
|
-
reason: message.toString(),
|
|
1709
|
-
wasClean: this._closeFrameReceived && this._closeFrameSent
|
|
1710
|
-
});
|
|
1711
|
-
event[kTarget] = this;
|
|
1712
|
-
callListener(handler, this, event);
|
|
1713
|
-
};
|
|
1714
|
-
} else if (type === "error") {
|
|
1715
|
-
wrapper = function onError(error49) {
|
|
1716
|
-
const event = new ErrorEvent("error", {
|
|
1717
|
-
error: error49,
|
|
1718
|
-
message: error49.message
|
|
1719
|
-
});
|
|
1720
|
-
event[kTarget] = this;
|
|
1721
|
-
callListener(handler, this, event);
|
|
1722
|
-
};
|
|
1723
|
-
} else if (type === "open") {
|
|
1724
|
-
wrapper = function onOpen() {
|
|
1725
|
-
const event = new Event("open");
|
|
1726
|
-
event[kTarget] = this;
|
|
1727
|
-
callListener(handler, this, event);
|
|
1728
|
-
};
|
|
1729
|
-
} else {
|
|
1730
|
-
return;
|
|
1731
|
-
}
|
|
1732
|
-
wrapper[kForOnEventAttribute] = !!options[kForOnEventAttribute];
|
|
1733
|
-
wrapper[kListener] = handler;
|
|
1734
|
-
if (options.once) {
|
|
1735
|
-
this.once(type, wrapper);
|
|
1736
|
-
} else {
|
|
1737
|
-
this.on(type, wrapper);
|
|
1738
|
-
}
|
|
1739
|
-
},
|
|
1740
|
-
removeEventListener(type, handler) {
|
|
1741
|
-
for (const listener of this.listeners(type)) {
|
|
1742
|
-
if (listener[kListener] === handler && !listener[kForOnEventAttribute]) {
|
|
1743
|
-
this.removeListener(type, listener);
|
|
1744
|
-
break;
|
|
1745
|
-
}
|
|
1746
|
-
}
|
|
1747
|
-
}
|
|
1748
|
-
};
|
|
1749
|
-
module.exports = {
|
|
1750
|
-
CloseEvent,
|
|
1751
|
-
ErrorEvent,
|
|
1752
|
-
Event,
|
|
1753
|
-
EventTarget,
|
|
1754
|
-
MessageEvent
|
|
1755
|
-
};
|
|
1756
|
-
function callListener(listener, thisArg, event) {
|
|
1757
|
-
if (typeof listener === "object" && listener.handleEvent) {
|
|
1758
|
-
listener.handleEvent.call(listener, event);
|
|
1759
|
-
} else {
|
|
1760
|
-
listener.call(thisArg, event);
|
|
1761
|
-
}
|
|
1762
|
-
}
|
|
1763
|
-
});
|
|
1764
|
-
|
|
1765
|
-
// node_modules/.pnpm/@kevisual+ws@8.19.0/node_modules/@kevisual/ws/lib/extension.js
|
|
1766
|
-
var require_extension2 = __commonJS((exports, module) => {
|
|
1767
|
-
var { tokenChars } = require_validation2();
|
|
1768
|
-
function push(dest, name, elem) {
|
|
1769
|
-
if (dest[name] === undefined)
|
|
1770
|
-
dest[name] = [elem];
|
|
1771
|
-
else
|
|
1772
|
-
dest[name].push(elem);
|
|
1773
|
-
}
|
|
1774
|
-
function parse5(header) {
|
|
1775
|
-
const offers = Object.create(null);
|
|
1776
|
-
let params = Object.create(null);
|
|
1777
|
-
let mustUnescape = false;
|
|
1778
|
-
let isEscaping = false;
|
|
1779
|
-
let inQuotes = false;
|
|
1780
|
-
let extensionName;
|
|
1781
|
-
let paramName;
|
|
1782
|
-
let start = -1;
|
|
1783
|
-
let code = -1;
|
|
1784
|
-
let end = -1;
|
|
1785
|
-
let i = 0;
|
|
1786
|
-
for (;i < header.length; i++) {
|
|
1787
|
-
code = header.charCodeAt(i);
|
|
1788
|
-
if (extensionName === undefined) {
|
|
1789
|
-
if (end === -1 && tokenChars[code] === 1) {
|
|
1790
|
-
if (start === -1)
|
|
1791
|
-
start = i;
|
|
1792
|
-
} else if (i !== 0 && (code === 32 || code === 9)) {
|
|
1793
|
-
if (end === -1 && start !== -1)
|
|
1794
|
-
end = i;
|
|
1795
|
-
} else if (code === 59 || code === 44) {
|
|
1796
|
-
if (start === -1) {
|
|
1797
|
-
throw new SyntaxError(`Unexpected character at index ${i}`);
|
|
1798
|
-
}
|
|
1799
|
-
if (end === -1)
|
|
1800
|
-
end = i;
|
|
1801
|
-
const name = header.slice(start, end);
|
|
1802
|
-
if (code === 44) {
|
|
1803
|
-
push(offers, name, params);
|
|
1804
|
-
params = Object.create(null);
|
|
1805
|
-
} else {
|
|
1806
|
-
extensionName = name;
|
|
1807
|
-
}
|
|
1808
|
-
start = end = -1;
|
|
1809
|
-
} else {
|
|
1810
|
-
throw new SyntaxError(`Unexpected character at index ${i}`);
|
|
1811
|
-
}
|
|
1812
|
-
} else if (paramName === undefined) {
|
|
1813
|
-
if (end === -1 && tokenChars[code] === 1) {
|
|
1814
|
-
if (start === -1)
|
|
1815
|
-
start = i;
|
|
1816
|
-
} else if (code === 32 || code === 9) {
|
|
1817
|
-
if (end === -1 && start !== -1)
|
|
1818
|
-
end = i;
|
|
1819
|
-
} else if (code === 59 || code === 44) {
|
|
1820
|
-
if (start === -1) {
|
|
1821
|
-
throw new SyntaxError(`Unexpected character at index ${i}`);
|
|
1822
|
-
}
|
|
1823
|
-
if (end === -1)
|
|
1824
|
-
end = i;
|
|
1825
|
-
push(params, header.slice(start, end), true);
|
|
1826
|
-
if (code === 44) {
|
|
1827
|
-
push(offers, extensionName, params);
|
|
1828
|
-
params = Object.create(null);
|
|
1829
|
-
extensionName = undefined;
|
|
1830
|
-
}
|
|
1831
|
-
start = end = -1;
|
|
1832
|
-
} else if (code === 61 && start !== -1 && end === -1) {
|
|
1833
|
-
paramName = header.slice(start, i);
|
|
1834
|
-
start = end = -1;
|
|
1835
|
-
} else {
|
|
1836
|
-
throw new SyntaxError(`Unexpected character at index ${i}`);
|
|
1837
|
-
}
|
|
1838
|
-
} else {
|
|
1839
|
-
if (isEscaping) {
|
|
1840
|
-
if (tokenChars[code] !== 1) {
|
|
1841
|
-
throw new SyntaxError(`Unexpected character at index ${i}`);
|
|
1842
|
-
}
|
|
1843
|
-
if (start === -1)
|
|
1844
|
-
start = i;
|
|
1845
|
-
else if (!mustUnescape)
|
|
1846
|
-
mustUnescape = true;
|
|
1847
|
-
isEscaping = false;
|
|
1848
|
-
} else if (inQuotes) {
|
|
1849
|
-
if (tokenChars[code] === 1) {
|
|
1850
|
-
if (start === -1)
|
|
1851
|
-
start = i;
|
|
1852
|
-
} else if (code === 34 && start !== -1) {
|
|
1853
|
-
inQuotes = false;
|
|
1854
|
-
end = i;
|
|
1855
|
-
} else if (code === 92) {
|
|
1856
|
-
isEscaping = true;
|
|
1857
|
-
} else {
|
|
1858
|
-
throw new SyntaxError(`Unexpected character at index ${i}`);
|
|
1859
|
-
}
|
|
1860
|
-
} else if (code === 34 && header.charCodeAt(i - 1) === 61) {
|
|
1861
|
-
inQuotes = true;
|
|
1862
|
-
} else if (end === -1 && tokenChars[code] === 1) {
|
|
1863
|
-
if (start === -1)
|
|
1864
|
-
start = i;
|
|
1865
|
-
} else if (start !== -1 && (code === 32 || code === 9)) {
|
|
1866
|
-
if (end === -1)
|
|
1867
|
-
end = i;
|
|
1868
|
-
} else if (code === 59 || code === 44) {
|
|
1869
|
-
if (start === -1) {
|
|
1870
|
-
throw new SyntaxError(`Unexpected character at index ${i}`);
|
|
1871
|
-
}
|
|
1872
|
-
if (end === -1)
|
|
1873
|
-
end = i;
|
|
1874
|
-
let value = header.slice(start, end);
|
|
1875
|
-
if (mustUnescape) {
|
|
1876
|
-
value = value.replace(/\\/g, "");
|
|
1877
|
-
mustUnescape = false;
|
|
1878
|
-
}
|
|
1879
|
-
push(params, paramName, value);
|
|
1880
|
-
if (code === 44) {
|
|
1881
|
-
push(offers, extensionName, params);
|
|
1882
|
-
params = Object.create(null);
|
|
1883
|
-
extensionName = undefined;
|
|
1884
|
-
}
|
|
1885
|
-
paramName = undefined;
|
|
1886
|
-
start = end = -1;
|
|
1887
|
-
} else {
|
|
1888
|
-
throw new SyntaxError(`Unexpected character at index ${i}`);
|
|
1889
|
-
}
|
|
1890
|
-
}
|
|
1891
|
-
}
|
|
1892
|
-
if (start === -1 || inQuotes || code === 32 || code === 9) {
|
|
1893
|
-
throw new SyntaxError("Unexpected end of input");
|
|
1894
|
-
}
|
|
1895
|
-
if (end === -1)
|
|
1896
|
-
end = i;
|
|
1897
|
-
const token = header.slice(start, end);
|
|
1898
|
-
if (extensionName === undefined) {
|
|
1899
|
-
push(offers, token, params);
|
|
1900
|
-
} else {
|
|
1901
|
-
if (paramName === undefined) {
|
|
1902
|
-
push(params, token, true);
|
|
1903
|
-
} else if (mustUnescape) {
|
|
1904
|
-
push(params, paramName, token.replace(/\\/g, ""));
|
|
1905
|
-
} else {
|
|
1906
|
-
push(params, paramName, token);
|
|
1907
|
-
}
|
|
1908
|
-
push(offers, extensionName, params);
|
|
1909
|
-
}
|
|
1910
|
-
return offers;
|
|
1911
|
-
}
|
|
1912
|
-
function format(extensions) {
|
|
1913
|
-
return Object.keys(extensions).map((extension) => {
|
|
1914
|
-
let configurations = extensions[extension];
|
|
1915
|
-
if (!Array.isArray(configurations))
|
|
1916
|
-
configurations = [configurations];
|
|
1917
|
-
return configurations.map((params) => {
|
|
1918
|
-
return [extension].concat(Object.keys(params).map((k) => {
|
|
1919
|
-
let values = params[k];
|
|
1920
|
-
if (!Array.isArray(values))
|
|
1921
|
-
values = [values];
|
|
1922
|
-
return values.map((v) => v === true ? k : `${k}=${v}`).join("; ");
|
|
1923
|
-
})).join("; ");
|
|
1924
|
-
}).join(", ");
|
|
1925
|
-
}).join(", ");
|
|
1926
|
-
}
|
|
1927
|
-
module.exports = { format, parse: parse5 };
|
|
1928
|
-
});
|
|
1929
|
-
|
|
1930
|
-
// node_modules/.pnpm/@kevisual+ws@8.19.0/node_modules/@kevisual/ws/lib/websocket.js
|
|
1931
|
-
var require_websocket2 = __commonJS((exports, module) => {
|
|
1932
|
-
var EventEmitter3 = __require("events");
|
|
1933
|
-
var https = __require("https");
|
|
1934
|
-
var http = __require("http");
|
|
1935
|
-
var net = __require("net");
|
|
1936
|
-
var tls = __require("tls");
|
|
1937
|
-
var { randomBytes, createHash } = __require("crypto");
|
|
1938
|
-
var { Duplex, Readable } = __require("stream");
|
|
1939
|
-
var { URL: URL2 } = __require("url");
|
|
1940
|
-
var PerMessageDeflate = require_permessage_deflate2();
|
|
1941
|
-
var Receiver = require_receiver2();
|
|
1942
|
-
var Sender = require_sender2();
|
|
1943
|
-
var { isBlob } = require_validation2();
|
|
1944
|
-
var {
|
|
1945
|
-
BINARY_TYPES,
|
|
1946
|
-
CLOSE_TIMEOUT,
|
|
1947
|
-
EMPTY_BUFFER,
|
|
1948
|
-
GUID,
|
|
1949
|
-
kForOnEventAttribute,
|
|
1950
|
-
kListener,
|
|
1951
|
-
kStatusCode,
|
|
1952
|
-
kWebSocket,
|
|
1953
|
-
NOOP
|
|
1954
|
-
} = require_constants2();
|
|
1955
|
-
var {
|
|
1956
|
-
EventTarget: { addEventListener, removeEventListener }
|
|
1957
|
-
} = require_event_target2();
|
|
1958
|
-
var { format, parse: parse5 } = require_extension2();
|
|
1959
|
-
var { toBuffer } = require_buffer_util2();
|
|
1960
|
-
var kAborted = Symbol("kAborted");
|
|
1961
|
-
var protocolVersions = [8, 13];
|
|
1962
|
-
var readyStates = ["CONNECTING", "OPEN", "CLOSING", "CLOSED"];
|
|
1963
|
-
var subprotocolRegex = /^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/;
|
|
1964
|
-
|
|
1965
|
-
class WebSocket extends EventEmitter3 {
|
|
1966
|
-
constructor(address, protocols, options) {
|
|
1967
|
-
super();
|
|
1968
|
-
this._binaryType = BINARY_TYPES[0];
|
|
1969
|
-
this._closeCode = 1006;
|
|
1970
|
-
this._closeFrameReceived = false;
|
|
1971
|
-
this._closeFrameSent = false;
|
|
1972
|
-
this._closeMessage = EMPTY_BUFFER;
|
|
1973
|
-
this._closeTimer = null;
|
|
1974
|
-
this._errorEmitted = false;
|
|
1975
|
-
this._extensions = {};
|
|
1976
|
-
this._paused = false;
|
|
1977
|
-
this._protocol = "";
|
|
1978
|
-
this._readyState = WebSocket.CONNECTING;
|
|
1979
|
-
this._receiver = null;
|
|
1980
|
-
this._sender = null;
|
|
1981
|
-
this._socket = null;
|
|
1982
|
-
if (address !== null) {
|
|
1983
|
-
this._bufferedAmount = 0;
|
|
1984
|
-
this._isServer = false;
|
|
1985
|
-
this._redirects = 0;
|
|
1986
|
-
if (protocols === undefined) {
|
|
1987
|
-
protocols = [];
|
|
1988
|
-
} else if (!Array.isArray(protocols)) {
|
|
1989
|
-
if (typeof protocols === "object" && protocols !== null) {
|
|
1990
|
-
options = protocols;
|
|
1991
|
-
protocols = [];
|
|
1992
|
-
} else {
|
|
1993
|
-
protocols = [protocols];
|
|
1994
|
-
}
|
|
1995
|
-
}
|
|
1996
|
-
initAsClient(this, address, protocols, options);
|
|
1997
|
-
} else {
|
|
1998
|
-
this._autoPong = options.autoPong;
|
|
1999
|
-
this._closeTimeout = options.closeTimeout;
|
|
2000
|
-
this._isServer = true;
|
|
2001
|
-
}
|
|
2002
|
-
}
|
|
2003
|
-
get binaryType() {
|
|
2004
|
-
return this._binaryType;
|
|
2005
|
-
}
|
|
2006
|
-
set binaryType(type) {
|
|
2007
|
-
if (!BINARY_TYPES.includes(type))
|
|
2008
|
-
return;
|
|
2009
|
-
this._binaryType = type;
|
|
2010
|
-
if (this._receiver)
|
|
2011
|
-
this._receiver._binaryType = type;
|
|
2012
|
-
}
|
|
2013
|
-
get bufferedAmount() {
|
|
2014
|
-
if (!this._socket)
|
|
2015
|
-
return this._bufferedAmount;
|
|
2016
|
-
return this._socket._writableState.length + this._sender._bufferedBytes;
|
|
2017
|
-
}
|
|
2018
|
-
get extensions() {
|
|
2019
|
-
return Object.keys(this._extensions).join();
|
|
2020
|
-
}
|
|
2021
|
-
get isPaused() {
|
|
2022
|
-
return this._paused;
|
|
2023
|
-
}
|
|
2024
|
-
get onclose() {
|
|
2025
|
-
return null;
|
|
2026
|
-
}
|
|
2027
|
-
get onerror() {
|
|
2028
|
-
return null;
|
|
2029
|
-
}
|
|
2030
|
-
get onopen() {
|
|
2031
|
-
return null;
|
|
2032
|
-
}
|
|
2033
|
-
get onmessage() {
|
|
2034
|
-
return null;
|
|
2035
|
-
}
|
|
2036
|
-
get protocol() {
|
|
2037
|
-
return this._protocol;
|
|
2038
|
-
}
|
|
2039
|
-
get readyState() {
|
|
2040
|
-
return this._readyState;
|
|
2041
|
-
}
|
|
2042
|
-
get url() {
|
|
2043
|
-
return this._url;
|
|
2044
|
-
}
|
|
2045
|
-
setSocket(socket, head, options) {
|
|
2046
|
-
const receiver = new Receiver({
|
|
2047
|
-
allowSynchronousEvents: options.allowSynchronousEvents,
|
|
2048
|
-
binaryType: this.binaryType,
|
|
2049
|
-
extensions: this._extensions,
|
|
2050
|
-
isServer: this._isServer,
|
|
2051
|
-
maxPayload: options.maxPayload,
|
|
2052
|
-
skipUTF8Validation: options.skipUTF8Validation
|
|
2053
|
-
});
|
|
2054
|
-
const sender = new Sender(socket, this._extensions, options.generateMask);
|
|
2055
|
-
this._receiver = receiver;
|
|
2056
|
-
this._sender = sender;
|
|
2057
|
-
this._socket = socket;
|
|
2058
|
-
receiver[kWebSocket] = this;
|
|
2059
|
-
sender[kWebSocket] = this;
|
|
2060
|
-
socket[kWebSocket] = this;
|
|
2061
|
-
receiver.on("conclude", receiverOnConclude);
|
|
2062
|
-
receiver.on("drain", receiverOnDrain);
|
|
2063
|
-
receiver.on("error", receiverOnError);
|
|
2064
|
-
receiver.on("message", receiverOnMessage);
|
|
2065
|
-
receiver.on("ping", receiverOnPing);
|
|
2066
|
-
receiver.on("pong", receiverOnPong);
|
|
2067
|
-
sender.onerror = senderOnError;
|
|
2068
|
-
if (socket.setTimeout)
|
|
2069
|
-
socket.setTimeout(0);
|
|
2070
|
-
if (socket.setNoDelay)
|
|
2071
|
-
socket.setNoDelay();
|
|
2072
|
-
if (head.length > 0)
|
|
2073
|
-
socket.unshift(head);
|
|
2074
|
-
socket.on("close", socketOnClose);
|
|
2075
|
-
socket.on("data", socketOnData);
|
|
2076
|
-
socket.on("end", socketOnEnd);
|
|
2077
|
-
socket.on("error", socketOnError);
|
|
2078
|
-
this._readyState = WebSocket.OPEN;
|
|
2079
|
-
this.emit("open");
|
|
2080
|
-
}
|
|
2081
|
-
emitClose() {
|
|
2082
|
-
if (!this._socket) {
|
|
2083
|
-
this._readyState = WebSocket.CLOSED;
|
|
2084
|
-
this.emit("close", this._closeCode, this._closeMessage);
|
|
2085
|
-
return;
|
|
2086
|
-
}
|
|
2087
|
-
if (this._extensions[PerMessageDeflate.extensionName]) {
|
|
2088
|
-
this._extensions[PerMessageDeflate.extensionName].cleanup();
|
|
2089
|
-
}
|
|
2090
|
-
this._receiver.removeAllListeners();
|
|
2091
|
-
this._readyState = WebSocket.CLOSED;
|
|
2092
|
-
this.emit("close", this._closeCode, this._closeMessage);
|
|
2093
|
-
}
|
|
2094
|
-
close(code, data) {
|
|
2095
|
-
if (this.readyState === WebSocket.CLOSED)
|
|
2096
|
-
return;
|
|
2097
|
-
if (this.readyState === WebSocket.CONNECTING) {
|
|
2098
|
-
const msg = "WebSocket was closed before the connection was established";
|
|
2099
|
-
abortHandshake(this, this._req, msg);
|
|
2100
|
-
return;
|
|
2101
|
-
}
|
|
2102
|
-
if (this.readyState === WebSocket.CLOSING) {
|
|
2103
|
-
if (this._closeFrameSent && (this._closeFrameReceived || this._receiver._writableState.errorEmitted)) {
|
|
2104
|
-
this._socket.end();
|
|
2105
|
-
}
|
|
2106
|
-
return;
|
|
2107
|
-
}
|
|
2108
|
-
this._readyState = WebSocket.CLOSING;
|
|
2109
|
-
this._sender.close(code, data, !this._isServer, (err) => {
|
|
2110
|
-
if (err)
|
|
2111
|
-
return;
|
|
2112
|
-
this._closeFrameSent = true;
|
|
2113
|
-
if (this._closeFrameReceived || this._receiver._writableState.errorEmitted) {
|
|
2114
|
-
this._socket.end();
|
|
2115
|
-
}
|
|
2116
|
-
});
|
|
2117
|
-
setCloseTimer(this);
|
|
2118
|
-
}
|
|
2119
|
-
pause() {
|
|
2120
|
-
if (this.readyState === WebSocket.CONNECTING || this.readyState === WebSocket.CLOSED) {
|
|
2121
|
-
return;
|
|
2122
|
-
}
|
|
2123
|
-
this._paused = true;
|
|
2124
|
-
this._socket.pause();
|
|
2125
|
-
}
|
|
2126
|
-
ping(data, mask, cb) {
|
|
2127
|
-
if (this.readyState === WebSocket.CONNECTING) {
|
|
2128
|
-
throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");
|
|
2129
|
-
}
|
|
2130
|
-
if (typeof data === "function") {
|
|
2131
|
-
cb = data;
|
|
2132
|
-
data = mask = undefined;
|
|
2133
|
-
} else if (typeof mask === "function") {
|
|
2134
|
-
cb = mask;
|
|
2135
|
-
mask = undefined;
|
|
2136
|
-
}
|
|
2137
|
-
if (typeof data === "number")
|
|
2138
|
-
data = data.toString();
|
|
2139
|
-
if (this.readyState !== WebSocket.OPEN) {
|
|
2140
|
-
sendAfterClose(this, data, cb);
|
|
2141
|
-
return;
|
|
2142
|
-
}
|
|
2143
|
-
if (mask === undefined)
|
|
2144
|
-
mask = !this._isServer;
|
|
2145
|
-
this._sender.ping(data || EMPTY_BUFFER, mask, cb);
|
|
2146
|
-
}
|
|
2147
|
-
pong(data, mask, cb) {
|
|
2148
|
-
if (this.readyState === WebSocket.CONNECTING) {
|
|
2149
|
-
throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");
|
|
2150
|
-
}
|
|
2151
|
-
if (typeof data === "function") {
|
|
2152
|
-
cb = data;
|
|
2153
|
-
data = mask = undefined;
|
|
2154
|
-
} else if (typeof mask === "function") {
|
|
2155
|
-
cb = mask;
|
|
2156
|
-
mask = undefined;
|
|
2157
|
-
}
|
|
2158
|
-
if (typeof data === "number")
|
|
2159
|
-
data = data.toString();
|
|
2160
|
-
if (this.readyState !== WebSocket.OPEN) {
|
|
2161
|
-
sendAfterClose(this, data, cb);
|
|
2162
|
-
return;
|
|
2163
|
-
}
|
|
2164
|
-
if (mask === undefined)
|
|
2165
|
-
mask = !this._isServer;
|
|
2166
|
-
this._sender.pong(data || EMPTY_BUFFER, mask, cb);
|
|
2167
|
-
}
|
|
2168
|
-
resume() {
|
|
2169
|
-
if (this.readyState === WebSocket.CONNECTING || this.readyState === WebSocket.CLOSED) {
|
|
2170
|
-
return;
|
|
2171
|
-
}
|
|
2172
|
-
this._paused = false;
|
|
2173
|
-
if (!this._receiver._writableState.needDrain)
|
|
2174
|
-
this._socket.resume();
|
|
2175
|
-
}
|
|
2176
|
-
send(data, options, cb) {
|
|
2177
|
-
if (this.readyState === WebSocket.CONNECTING) {
|
|
2178
|
-
throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");
|
|
2179
|
-
}
|
|
2180
|
-
if (typeof options === "function") {
|
|
2181
|
-
cb = options;
|
|
2182
|
-
options = {};
|
|
2183
|
-
}
|
|
2184
|
-
if (typeof data === "number")
|
|
2185
|
-
data = data.toString();
|
|
2186
|
-
if (this.readyState !== WebSocket.OPEN) {
|
|
2187
|
-
sendAfterClose(this, data, cb);
|
|
2188
|
-
return;
|
|
2189
|
-
}
|
|
2190
|
-
const opts = {
|
|
2191
|
-
binary: typeof data !== "string",
|
|
2192
|
-
mask: !this._isServer,
|
|
2193
|
-
compress: true,
|
|
2194
|
-
fin: true,
|
|
2195
|
-
...options
|
|
2196
|
-
};
|
|
2197
|
-
if (!this._extensions[PerMessageDeflate.extensionName]) {
|
|
2198
|
-
opts.compress = false;
|
|
2199
|
-
}
|
|
2200
|
-
this._sender.send(data || EMPTY_BUFFER, opts, cb);
|
|
2201
|
-
}
|
|
2202
|
-
terminate() {
|
|
2203
|
-
if (this.readyState === WebSocket.CLOSED)
|
|
2204
|
-
return;
|
|
2205
|
-
if (this.readyState === WebSocket.CONNECTING) {
|
|
2206
|
-
const msg = "WebSocket was closed before the connection was established";
|
|
2207
|
-
abortHandshake(this, this._req, msg);
|
|
2208
|
-
return;
|
|
2209
|
-
}
|
|
2210
|
-
if (this._socket) {
|
|
2211
|
-
this._readyState = WebSocket.CLOSING;
|
|
2212
|
-
this._socket.destroy();
|
|
2213
|
-
}
|
|
2214
|
-
}
|
|
2215
|
-
}
|
|
2216
|
-
Object.defineProperty(WebSocket, "CONNECTING", {
|
|
2217
|
-
enumerable: true,
|
|
2218
|
-
value: readyStates.indexOf("CONNECTING")
|
|
2219
|
-
});
|
|
2220
|
-
Object.defineProperty(WebSocket.prototype, "CONNECTING", {
|
|
2221
|
-
enumerable: true,
|
|
2222
|
-
value: readyStates.indexOf("CONNECTING")
|
|
2223
|
-
});
|
|
2224
|
-
Object.defineProperty(WebSocket, "OPEN", {
|
|
2225
|
-
enumerable: true,
|
|
2226
|
-
value: readyStates.indexOf("OPEN")
|
|
2227
|
-
});
|
|
2228
|
-
Object.defineProperty(WebSocket.prototype, "OPEN", {
|
|
2229
|
-
enumerable: true,
|
|
2230
|
-
value: readyStates.indexOf("OPEN")
|
|
2231
|
-
});
|
|
2232
|
-
Object.defineProperty(WebSocket, "CLOSING", {
|
|
2233
|
-
enumerable: true,
|
|
2234
|
-
value: readyStates.indexOf("CLOSING")
|
|
2235
|
-
});
|
|
2236
|
-
Object.defineProperty(WebSocket.prototype, "CLOSING", {
|
|
2237
|
-
enumerable: true,
|
|
2238
|
-
value: readyStates.indexOf("CLOSING")
|
|
2239
|
-
});
|
|
2240
|
-
Object.defineProperty(WebSocket, "CLOSED", {
|
|
2241
|
-
enumerable: true,
|
|
2242
|
-
value: readyStates.indexOf("CLOSED")
|
|
2243
|
-
});
|
|
2244
|
-
Object.defineProperty(WebSocket.prototype, "CLOSED", {
|
|
2245
|
-
enumerable: true,
|
|
2246
|
-
value: readyStates.indexOf("CLOSED")
|
|
2247
|
-
});
|
|
2248
|
-
[
|
|
2249
|
-
"binaryType",
|
|
2250
|
-
"bufferedAmount",
|
|
2251
|
-
"extensions",
|
|
2252
|
-
"isPaused",
|
|
2253
|
-
"protocol",
|
|
2254
|
-
"readyState",
|
|
2255
|
-
"url"
|
|
2256
|
-
].forEach((property) => {
|
|
2257
|
-
Object.defineProperty(WebSocket.prototype, property, { enumerable: true });
|
|
2258
|
-
});
|
|
2259
|
-
["open", "error", "close", "message"].forEach((method) => {
|
|
2260
|
-
Object.defineProperty(WebSocket.prototype, `on${method}`, {
|
|
2261
|
-
enumerable: true,
|
|
2262
|
-
get() {
|
|
2263
|
-
for (const listener of this.listeners(method)) {
|
|
2264
|
-
if (listener[kForOnEventAttribute])
|
|
2265
|
-
return listener[kListener];
|
|
2266
|
-
}
|
|
2267
|
-
return null;
|
|
2268
|
-
},
|
|
2269
|
-
set(handler) {
|
|
2270
|
-
for (const listener of this.listeners(method)) {
|
|
2271
|
-
if (listener[kForOnEventAttribute]) {
|
|
2272
|
-
this.removeListener(method, listener);
|
|
2273
|
-
break;
|
|
2274
|
-
}
|
|
2275
|
-
}
|
|
2276
|
-
if (typeof handler !== "function")
|
|
2277
|
-
return;
|
|
2278
|
-
this.addEventListener(method, handler, {
|
|
2279
|
-
[kForOnEventAttribute]: true
|
|
2280
|
-
});
|
|
2281
|
-
}
|
|
2282
|
-
});
|
|
2283
|
-
});
|
|
2284
|
-
WebSocket.prototype.addEventListener = addEventListener;
|
|
2285
|
-
WebSocket.prototype.removeEventListener = removeEventListener;
|
|
2286
|
-
module.exports = WebSocket;
|
|
2287
|
-
function initAsClient(websocket, address, protocols, options) {
|
|
2288
|
-
const opts = {
|
|
2289
|
-
allowSynchronousEvents: true,
|
|
2290
|
-
autoPong: true,
|
|
2291
|
-
closeTimeout: CLOSE_TIMEOUT,
|
|
2292
|
-
protocolVersion: protocolVersions[1],
|
|
2293
|
-
maxPayload: 100 * 1024 * 1024,
|
|
2294
|
-
skipUTF8Validation: false,
|
|
2295
|
-
perMessageDeflate: true,
|
|
2296
|
-
followRedirects: false,
|
|
2297
|
-
maxRedirects: 10,
|
|
2298
|
-
...options,
|
|
2299
|
-
socketPath: undefined,
|
|
2300
|
-
hostname: undefined,
|
|
2301
|
-
protocol: undefined,
|
|
2302
|
-
timeout: undefined,
|
|
2303
|
-
method: "GET",
|
|
2304
|
-
host: undefined,
|
|
2305
|
-
path: undefined,
|
|
2306
|
-
port: undefined
|
|
2307
|
-
};
|
|
2308
|
-
websocket._autoPong = opts.autoPong;
|
|
2309
|
-
websocket._closeTimeout = opts.closeTimeout;
|
|
2310
|
-
if (!protocolVersions.includes(opts.protocolVersion)) {
|
|
2311
|
-
throw new RangeError(`Unsupported protocol version: ${opts.protocolVersion} ` + `(supported versions: ${protocolVersions.join(", ")})`);
|
|
2312
|
-
}
|
|
2313
|
-
let parsedUrl;
|
|
2314
|
-
if (address instanceof URL2) {
|
|
2315
|
-
parsedUrl = address;
|
|
2316
|
-
} else {
|
|
2317
|
-
try {
|
|
2318
|
-
parsedUrl = new URL2(address);
|
|
2319
|
-
} catch (e) {
|
|
2320
|
-
throw new SyntaxError(`Invalid URL: ${address}`);
|
|
2321
|
-
}
|
|
2322
|
-
}
|
|
2323
|
-
if (parsedUrl.protocol === "http:") {
|
|
2324
|
-
parsedUrl.protocol = "ws:";
|
|
2325
|
-
} else if (parsedUrl.protocol === "https:") {
|
|
2326
|
-
parsedUrl.protocol = "wss:";
|
|
2327
|
-
}
|
|
2328
|
-
websocket._url = parsedUrl.href;
|
|
2329
|
-
const isSecure = parsedUrl.protocol === "wss:";
|
|
2330
|
-
const isIpcUrl = parsedUrl.protocol === "ws+unix:";
|
|
2331
|
-
let invalidUrlMessage;
|
|
2332
|
-
if (parsedUrl.protocol !== "ws:" && !isSecure && !isIpcUrl) {
|
|
2333
|
-
invalidUrlMessage = `The URL's protocol must be one of "ws:", "wss:", ` + '"http:", "https:", or "ws+unix:"';
|
|
2334
|
-
} else if (isIpcUrl && !parsedUrl.pathname) {
|
|
2335
|
-
invalidUrlMessage = "The URL's pathname is empty";
|
|
2336
|
-
} else if (parsedUrl.hash) {
|
|
2337
|
-
invalidUrlMessage = "The URL contains a fragment identifier";
|
|
2338
|
-
}
|
|
2339
|
-
if (invalidUrlMessage) {
|
|
2340
|
-
const err = new SyntaxError(invalidUrlMessage);
|
|
2341
|
-
if (websocket._redirects === 0) {
|
|
2342
|
-
throw err;
|
|
2343
|
-
} else {
|
|
2344
|
-
emitErrorAndClose(websocket, err);
|
|
2345
|
-
return;
|
|
2346
|
-
}
|
|
2347
|
-
}
|
|
2348
|
-
const defaultPort = isSecure ? 443 : 80;
|
|
2349
|
-
const key = randomBytes(16).toString("base64");
|
|
2350
|
-
const request = isSecure ? https.request : http.request;
|
|
2351
|
-
const protocolSet = new Set;
|
|
2352
|
-
let perMessageDeflate;
|
|
2353
|
-
opts.createConnection = opts.createConnection || (isSecure ? tlsConnect : netConnect);
|
|
2354
|
-
opts.defaultPort = opts.defaultPort || defaultPort;
|
|
2355
|
-
opts.port = parsedUrl.port || defaultPort;
|
|
2356
|
-
opts.host = parsedUrl.hostname.startsWith("[") ? parsedUrl.hostname.slice(1, -1) : parsedUrl.hostname;
|
|
2357
|
-
opts.headers = {
|
|
2358
|
-
...opts.headers,
|
|
2359
|
-
"Sec-WebSocket-Version": opts.protocolVersion,
|
|
2360
|
-
"Sec-WebSocket-Key": key,
|
|
2361
|
-
Connection: "Upgrade",
|
|
2362
|
-
Upgrade: "websocket"
|
|
2363
|
-
};
|
|
2364
|
-
opts.path = parsedUrl.pathname + parsedUrl.search;
|
|
2365
|
-
opts.timeout = opts.handshakeTimeout;
|
|
2366
|
-
if (opts.perMessageDeflate) {
|
|
2367
|
-
perMessageDeflate = new PerMessageDeflate(opts.perMessageDeflate !== true ? opts.perMessageDeflate : {}, false, opts.maxPayload);
|
|
2368
|
-
opts.headers["Sec-WebSocket-Extensions"] = format({
|
|
2369
|
-
[PerMessageDeflate.extensionName]: perMessageDeflate.offer()
|
|
2370
|
-
});
|
|
2371
|
-
}
|
|
2372
|
-
if (protocols.length) {
|
|
2373
|
-
for (const protocol of protocols) {
|
|
2374
|
-
if (typeof protocol !== "string" || !subprotocolRegex.test(protocol) || protocolSet.has(protocol)) {
|
|
2375
|
-
throw new SyntaxError("An invalid or duplicated subprotocol was specified");
|
|
2376
|
-
}
|
|
2377
|
-
protocolSet.add(protocol);
|
|
2378
|
-
}
|
|
2379
|
-
opts.headers["Sec-WebSocket-Protocol"] = protocols.join(",");
|
|
2380
|
-
}
|
|
2381
|
-
if (opts.origin) {
|
|
2382
|
-
if (opts.protocolVersion < 13) {
|
|
2383
|
-
opts.headers["Sec-WebSocket-Origin"] = opts.origin;
|
|
2384
|
-
} else {
|
|
2385
|
-
opts.headers.Origin = opts.origin;
|
|
2386
|
-
}
|
|
2387
|
-
}
|
|
2388
|
-
if (parsedUrl.username || parsedUrl.password) {
|
|
2389
|
-
opts.auth = `${parsedUrl.username}:${parsedUrl.password}`;
|
|
2390
|
-
}
|
|
2391
|
-
if (isIpcUrl) {
|
|
2392
|
-
const parts = opts.path.split(":");
|
|
2393
|
-
opts.socketPath = parts[0];
|
|
2394
|
-
opts.path = parts[1];
|
|
2395
|
-
}
|
|
2396
|
-
let req;
|
|
2397
|
-
if (opts.followRedirects) {
|
|
2398
|
-
if (websocket._redirects === 0) {
|
|
2399
|
-
websocket._originalIpc = isIpcUrl;
|
|
2400
|
-
websocket._originalSecure = isSecure;
|
|
2401
|
-
websocket._originalHostOrSocketPath = isIpcUrl ? opts.socketPath : parsedUrl.host;
|
|
2402
|
-
const headers = options && options.headers;
|
|
2403
|
-
options = { ...options, headers: {} };
|
|
2404
|
-
if (headers) {
|
|
2405
|
-
for (const [key2, value] of Object.entries(headers)) {
|
|
2406
|
-
options.headers[key2.toLowerCase()] = value;
|
|
2407
|
-
}
|
|
2408
|
-
}
|
|
2409
|
-
} else if (websocket.listenerCount("redirect") === 0) {
|
|
2410
|
-
const isSameHost = isIpcUrl ? websocket._originalIpc ? opts.socketPath === websocket._originalHostOrSocketPath : false : websocket._originalIpc ? false : parsedUrl.host === websocket._originalHostOrSocketPath;
|
|
2411
|
-
if (!isSameHost || websocket._originalSecure && !isSecure) {
|
|
2412
|
-
delete opts.headers.authorization;
|
|
2413
|
-
delete opts.headers.cookie;
|
|
2414
|
-
if (!isSameHost)
|
|
2415
|
-
delete opts.headers.host;
|
|
2416
|
-
opts.auth = undefined;
|
|
2417
|
-
}
|
|
2418
|
-
}
|
|
2419
|
-
if (opts.auth && !options.headers.authorization) {
|
|
2420
|
-
options.headers.authorization = "Basic " + Buffer.from(opts.auth).toString("base64");
|
|
2421
|
-
}
|
|
2422
|
-
req = websocket._req = request(opts);
|
|
2423
|
-
if (websocket._redirects) {
|
|
2424
|
-
websocket.emit("redirect", websocket.url, req);
|
|
2425
|
-
}
|
|
2426
|
-
} else {
|
|
2427
|
-
req = websocket._req = request(opts);
|
|
2428
|
-
}
|
|
2429
|
-
if (opts.timeout) {
|
|
2430
|
-
req.on("timeout", () => {
|
|
2431
|
-
abortHandshake(websocket, req, "Opening handshake has timed out");
|
|
2432
|
-
});
|
|
2433
|
-
}
|
|
2434
|
-
req.on("error", (err) => {
|
|
2435
|
-
if (req === null || req[kAborted])
|
|
2436
|
-
return;
|
|
2437
|
-
req = websocket._req = null;
|
|
2438
|
-
emitErrorAndClose(websocket, err);
|
|
2439
|
-
});
|
|
2440
|
-
req.on("response", (res) => {
|
|
2441
|
-
const location2 = res.headers.location;
|
|
2442
|
-
const statusCode = res.statusCode;
|
|
2443
|
-
if (location2 && opts.followRedirects && statusCode >= 300 && statusCode < 400) {
|
|
2444
|
-
if (++websocket._redirects > opts.maxRedirects) {
|
|
2445
|
-
abortHandshake(websocket, req, "Maximum redirects exceeded");
|
|
2446
|
-
return;
|
|
2447
|
-
}
|
|
2448
|
-
req.abort();
|
|
2449
|
-
let addr;
|
|
2450
|
-
try {
|
|
2451
|
-
addr = new URL2(location2, address);
|
|
2452
|
-
} catch (e) {
|
|
2453
|
-
const err = new SyntaxError(`Invalid URL: ${location2}`);
|
|
2454
|
-
emitErrorAndClose(websocket, err);
|
|
2455
|
-
return;
|
|
2456
|
-
}
|
|
2457
|
-
initAsClient(websocket, addr, protocols, options);
|
|
2458
|
-
} else if (!websocket.emit("unexpected-response", req, res)) {
|
|
2459
|
-
abortHandshake(websocket, req, `Unexpected server response: ${res.statusCode}`);
|
|
2460
|
-
}
|
|
2461
|
-
});
|
|
2462
|
-
req.on("upgrade", (res, socket, head) => {
|
|
2463
|
-
websocket.emit("upgrade", res);
|
|
2464
|
-
if (websocket.readyState !== WebSocket.CONNECTING)
|
|
2465
|
-
return;
|
|
2466
|
-
req = websocket._req = null;
|
|
2467
|
-
const upgrade = res.headers.upgrade;
|
|
2468
|
-
if (upgrade === undefined || upgrade.toLowerCase() !== "websocket") {
|
|
2469
|
-
abortHandshake(websocket, socket, "Invalid Upgrade header");
|
|
2470
|
-
return;
|
|
2471
|
-
}
|
|
2472
|
-
const digest = createHash("sha1").update(key + GUID).digest("base64");
|
|
2473
|
-
if (res.headers["sec-websocket-accept"] !== digest) {
|
|
2474
|
-
abortHandshake(websocket, socket, "Invalid Sec-WebSocket-Accept header");
|
|
2475
|
-
return;
|
|
2476
|
-
}
|
|
2477
|
-
const serverProt = res.headers["sec-websocket-protocol"];
|
|
2478
|
-
let protError;
|
|
2479
|
-
if (serverProt !== undefined) {
|
|
2480
|
-
if (!protocolSet.size) {
|
|
2481
|
-
protError = "Server sent a subprotocol but none was requested";
|
|
2482
|
-
} else if (!protocolSet.has(serverProt)) {
|
|
2483
|
-
protError = "Server sent an invalid subprotocol";
|
|
2484
|
-
}
|
|
2485
|
-
} else if (protocolSet.size) {
|
|
2486
|
-
protError = "Server sent no subprotocol";
|
|
2487
|
-
}
|
|
2488
|
-
if (protError) {
|
|
2489
|
-
abortHandshake(websocket, socket, protError);
|
|
2490
|
-
return;
|
|
2491
|
-
}
|
|
2492
|
-
if (serverProt)
|
|
2493
|
-
websocket._protocol = serverProt;
|
|
2494
|
-
const secWebSocketExtensions = res.headers["sec-websocket-extensions"];
|
|
2495
|
-
if (secWebSocketExtensions !== undefined) {
|
|
2496
|
-
if (!perMessageDeflate) {
|
|
2497
|
-
const message = "Server sent a Sec-WebSocket-Extensions header but no extension " + "was requested";
|
|
2498
|
-
abortHandshake(websocket, socket, message);
|
|
2499
|
-
return;
|
|
2500
|
-
}
|
|
2501
|
-
let extensions;
|
|
2502
|
-
try {
|
|
2503
|
-
extensions = parse5(secWebSocketExtensions);
|
|
2504
|
-
} catch (err) {
|
|
2505
|
-
const message = "Invalid Sec-WebSocket-Extensions header";
|
|
2506
|
-
abortHandshake(websocket, socket, message);
|
|
2507
|
-
return;
|
|
2508
|
-
}
|
|
2509
|
-
const extensionNames = Object.keys(extensions);
|
|
2510
|
-
if (extensionNames.length !== 1 || extensionNames[0] !== PerMessageDeflate.extensionName) {
|
|
2511
|
-
const message = "Server indicated an extension that was not requested";
|
|
2512
|
-
abortHandshake(websocket, socket, message);
|
|
2513
|
-
return;
|
|
2514
|
-
}
|
|
2515
|
-
try {
|
|
2516
|
-
perMessageDeflate.accept(extensions[PerMessageDeflate.extensionName]);
|
|
2517
|
-
} catch (err) {
|
|
2518
|
-
const message = "Invalid Sec-WebSocket-Extensions header";
|
|
2519
|
-
abortHandshake(websocket, socket, message);
|
|
2520
|
-
return;
|
|
2521
|
-
}
|
|
2522
|
-
websocket._extensions[PerMessageDeflate.extensionName] = perMessageDeflate;
|
|
2523
|
-
}
|
|
2524
|
-
websocket.setSocket(socket, head, {
|
|
2525
|
-
allowSynchronousEvents: opts.allowSynchronousEvents,
|
|
2526
|
-
generateMask: opts.generateMask,
|
|
2527
|
-
maxPayload: opts.maxPayload,
|
|
2528
|
-
skipUTF8Validation: opts.skipUTF8Validation
|
|
2529
|
-
});
|
|
2530
|
-
});
|
|
2531
|
-
if (opts.finishRequest) {
|
|
2532
|
-
opts.finishRequest(req, websocket);
|
|
2533
|
-
} else {
|
|
2534
|
-
req.end();
|
|
2535
|
-
}
|
|
2536
|
-
}
|
|
2537
|
-
function emitErrorAndClose(websocket, err) {
|
|
2538
|
-
websocket._readyState = WebSocket.CLOSING;
|
|
2539
|
-
websocket._errorEmitted = true;
|
|
2540
|
-
websocket.emit("error", err);
|
|
2541
|
-
websocket.emitClose();
|
|
2542
|
-
}
|
|
2543
|
-
function netConnect(options) {
|
|
2544
|
-
options.path = options.socketPath;
|
|
2545
|
-
return net.connect(options);
|
|
2546
|
-
}
|
|
2547
|
-
function tlsConnect(options) {
|
|
2548
|
-
options.path = undefined;
|
|
2549
|
-
if (!options.servername && options.servername !== "") {
|
|
2550
|
-
options.servername = net.isIP(options.host) ? "" : options.host;
|
|
2551
|
-
}
|
|
2552
|
-
return tls.connect(options);
|
|
2553
|
-
}
|
|
2554
|
-
function abortHandshake(websocket, stream, message) {
|
|
2555
|
-
websocket._readyState = WebSocket.CLOSING;
|
|
2556
|
-
const err = new Error(message);
|
|
2557
|
-
Error.captureStackTrace(err, abortHandshake);
|
|
2558
|
-
if (stream.setHeader) {
|
|
2559
|
-
stream[kAborted] = true;
|
|
2560
|
-
stream.abort();
|
|
2561
|
-
if (stream.socket && !stream.socket.destroyed) {
|
|
2562
|
-
stream.socket.destroy();
|
|
2563
|
-
}
|
|
2564
|
-
process.nextTick(emitErrorAndClose, websocket, err);
|
|
2565
|
-
} else {
|
|
2566
|
-
stream.destroy(err);
|
|
2567
|
-
stream.once("error", websocket.emit.bind(websocket, "error"));
|
|
2568
|
-
stream.once("close", websocket.emitClose.bind(websocket));
|
|
2569
|
-
}
|
|
2570
|
-
}
|
|
2571
|
-
function sendAfterClose(websocket, data, cb) {
|
|
2572
|
-
if (data) {
|
|
2573
|
-
const length = isBlob(data) ? data.size : toBuffer(data).length;
|
|
2574
|
-
if (websocket._socket)
|
|
2575
|
-
websocket._sender._bufferedBytes += length;
|
|
2576
|
-
else
|
|
2577
|
-
websocket._bufferedAmount += length;
|
|
2578
|
-
}
|
|
2579
|
-
if (cb) {
|
|
2580
|
-
const err = new Error(`WebSocket is not open: readyState ${websocket.readyState} ` + `(${readyStates[websocket.readyState]})`);
|
|
2581
|
-
process.nextTick(cb, err);
|
|
2582
|
-
}
|
|
2583
|
-
}
|
|
2584
|
-
function receiverOnConclude(code, reason) {
|
|
2585
|
-
const websocket = this[kWebSocket];
|
|
2586
|
-
websocket._closeFrameReceived = true;
|
|
2587
|
-
websocket._closeMessage = reason;
|
|
2588
|
-
websocket._closeCode = code;
|
|
2589
|
-
if (websocket._socket[kWebSocket] === undefined)
|
|
2590
|
-
return;
|
|
2591
|
-
websocket._socket.removeListener("data", socketOnData);
|
|
2592
|
-
process.nextTick(resume, websocket._socket);
|
|
2593
|
-
if (code === 1005)
|
|
2594
|
-
websocket.close();
|
|
2595
|
-
else
|
|
2596
|
-
websocket.close(code, reason);
|
|
2597
|
-
}
|
|
2598
|
-
function receiverOnDrain() {
|
|
2599
|
-
const websocket = this[kWebSocket];
|
|
2600
|
-
if (!websocket.isPaused)
|
|
2601
|
-
websocket._socket.resume();
|
|
2602
|
-
}
|
|
2603
|
-
function receiverOnError(err) {
|
|
2604
|
-
const websocket = this[kWebSocket];
|
|
2605
|
-
if (websocket._socket[kWebSocket] !== undefined) {
|
|
2606
|
-
websocket._socket.removeListener("data", socketOnData);
|
|
2607
|
-
process.nextTick(resume, websocket._socket);
|
|
2608
|
-
websocket.close(err[kStatusCode]);
|
|
2609
|
-
}
|
|
2610
|
-
if (!websocket._errorEmitted) {
|
|
2611
|
-
websocket._errorEmitted = true;
|
|
2612
|
-
websocket.emit("error", err);
|
|
2613
|
-
}
|
|
2614
|
-
}
|
|
2615
|
-
function receiverOnFinish() {
|
|
2616
|
-
this[kWebSocket].emitClose();
|
|
2617
|
-
}
|
|
2618
|
-
function receiverOnMessage(data, isBinary) {
|
|
2619
|
-
this[kWebSocket].emit("message", data, isBinary);
|
|
2620
|
-
}
|
|
2621
|
-
function receiverOnPing(data) {
|
|
2622
|
-
const websocket = this[kWebSocket];
|
|
2623
|
-
if (websocket._autoPong)
|
|
2624
|
-
websocket.pong(data, !this._isServer, NOOP);
|
|
2625
|
-
websocket.emit("ping", data);
|
|
2626
|
-
}
|
|
2627
|
-
function receiverOnPong(data) {
|
|
2628
|
-
this[kWebSocket].emit("pong", data);
|
|
2629
|
-
}
|
|
2630
|
-
function resume(stream) {
|
|
2631
|
-
stream.resume();
|
|
2632
|
-
}
|
|
2633
|
-
function senderOnError(err) {
|
|
2634
|
-
const websocket = this[kWebSocket];
|
|
2635
|
-
if (websocket.readyState === WebSocket.CLOSED)
|
|
2636
|
-
return;
|
|
2637
|
-
if (websocket.readyState === WebSocket.OPEN) {
|
|
2638
|
-
websocket._readyState = WebSocket.CLOSING;
|
|
2639
|
-
setCloseTimer(websocket);
|
|
2640
|
-
}
|
|
2641
|
-
this._socket.end();
|
|
2642
|
-
if (!websocket._errorEmitted) {
|
|
2643
|
-
websocket._errorEmitted = true;
|
|
2644
|
-
websocket.emit("error", err);
|
|
2645
|
-
}
|
|
2646
|
-
}
|
|
2647
|
-
function setCloseTimer(websocket) {
|
|
2648
|
-
websocket._closeTimer = setTimeout(websocket._socket.destroy.bind(websocket._socket), websocket._closeTimeout);
|
|
2649
|
-
}
|
|
2650
|
-
function socketOnClose() {
|
|
2651
|
-
const websocket = this[kWebSocket];
|
|
2652
|
-
this.removeListener("close", socketOnClose);
|
|
2653
|
-
this.removeListener("data", socketOnData);
|
|
2654
|
-
this.removeListener("end", socketOnEnd);
|
|
2655
|
-
websocket._readyState = WebSocket.CLOSING;
|
|
2656
|
-
if (!this._readableState.endEmitted && !websocket._closeFrameReceived && !websocket._receiver._writableState.errorEmitted && this._readableState.length !== 0) {
|
|
2657
|
-
const chunk = this.read(this._readableState.length);
|
|
2658
|
-
websocket._receiver.write(chunk);
|
|
2659
|
-
}
|
|
2660
|
-
websocket._receiver.end();
|
|
2661
|
-
this[kWebSocket] = undefined;
|
|
2662
|
-
clearTimeout(websocket._closeTimer);
|
|
2663
|
-
if (websocket._receiver._writableState.finished || websocket._receiver._writableState.errorEmitted) {
|
|
2664
|
-
websocket.emitClose();
|
|
2665
|
-
} else {
|
|
2666
|
-
websocket._receiver.on("error", receiverOnFinish);
|
|
2667
|
-
websocket._receiver.on("finish", receiverOnFinish);
|
|
2668
|
-
}
|
|
2669
|
-
}
|
|
2670
|
-
function socketOnData(chunk) {
|
|
2671
|
-
if (!this[kWebSocket]._receiver.write(chunk)) {
|
|
2672
|
-
this.pause();
|
|
2673
|
-
}
|
|
2674
|
-
}
|
|
2675
|
-
function socketOnEnd() {
|
|
2676
|
-
const websocket = this[kWebSocket];
|
|
2677
|
-
websocket._readyState = WebSocket.CLOSING;
|
|
2678
|
-
websocket._receiver.end();
|
|
2679
|
-
this.end();
|
|
2680
|
-
}
|
|
2681
|
-
function socketOnError() {
|
|
2682
|
-
const websocket = this[kWebSocket];
|
|
2683
|
-
this.removeListener("error", socketOnError);
|
|
2684
|
-
this.on("error", NOOP);
|
|
2685
|
-
if (websocket) {
|
|
2686
|
-
websocket._readyState = WebSocket.CLOSING;
|
|
2687
|
-
this.destroy();
|
|
2688
|
-
}
|
|
2689
|
-
}
|
|
2690
|
-
});
|
|
2691
|
-
|
|
2692
|
-
// node_modules/.pnpm/@kevisual+ws@8.19.0/node_modules/@kevisual/ws/lib/stream.js
|
|
2693
|
-
var require_stream2 = __commonJS((exports, module) => {
|
|
2694
|
-
var WebSocket = require_websocket2();
|
|
2695
|
-
var { Duplex } = __require("stream");
|
|
2696
|
-
function emitClose(stream) {
|
|
2697
|
-
stream.emit("close");
|
|
2698
|
-
}
|
|
2699
|
-
function duplexOnEnd() {
|
|
2700
|
-
if (!this.destroyed && this._writableState.finished) {
|
|
2701
|
-
this.destroy();
|
|
2702
|
-
}
|
|
2703
|
-
}
|
|
2704
|
-
function duplexOnError(err) {
|
|
2705
|
-
this.removeListener("error", duplexOnError);
|
|
2706
|
-
this.destroy();
|
|
2707
|
-
if (this.listenerCount("error") === 0) {
|
|
2708
|
-
this.emit("error", err);
|
|
2709
|
-
}
|
|
2710
|
-
}
|
|
2711
|
-
function createWebSocketStream(ws, options) {
|
|
2712
|
-
let terminateOnDestroy = true;
|
|
2713
|
-
const duplex = new Duplex({
|
|
2714
|
-
...options,
|
|
2715
|
-
autoDestroy: false,
|
|
2716
|
-
emitClose: false,
|
|
2717
|
-
objectMode: false,
|
|
2718
|
-
writableObjectMode: false
|
|
2719
|
-
});
|
|
2720
|
-
ws.on("message", function message(msg, isBinary) {
|
|
2721
|
-
const data = !isBinary && duplex._readableState.objectMode ? msg.toString() : msg;
|
|
2722
|
-
if (!duplex.push(data))
|
|
2723
|
-
ws.pause();
|
|
2724
|
-
});
|
|
2725
|
-
ws.once("error", function error49(err) {
|
|
2726
|
-
if (duplex.destroyed)
|
|
2727
|
-
return;
|
|
2728
|
-
terminateOnDestroy = false;
|
|
2729
|
-
duplex.destroy(err);
|
|
2730
|
-
});
|
|
2731
|
-
ws.once("close", function close() {
|
|
2732
|
-
if (duplex.destroyed)
|
|
2733
|
-
return;
|
|
2734
|
-
duplex.push(null);
|
|
2735
|
-
});
|
|
2736
|
-
duplex._destroy = function(err, callback) {
|
|
2737
|
-
if (ws.readyState === ws.CLOSED) {
|
|
2738
|
-
callback(err);
|
|
2739
|
-
process.nextTick(emitClose, duplex);
|
|
2740
|
-
return;
|
|
2741
|
-
}
|
|
2742
|
-
let called = false;
|
|
2743
|
-
ws.once("error", function error49(err2) {
|
|
2744
|
-
called = true;
|
|
2745
|
-
callback(err2);
|
|
2746
|
-
});
|
|
2747
|
-
ws.once("close", function close() {
|
|
2748
|
-
if (!called)
|
|
2749
|
-
callback(err);
|
|
2750
|
-
process.nextTick(emitClose, duplex);
|
|
2751
|
-
});
|
|
2752
|
-
if (terminateOnDestroy)
|
|
2753
|
-
ws.terminate();
|
|
2754
|
-
};
|
|
2755
|
-
duplex._final = function(callback) {
|
|
2756
|
-
if (ws.readyState === ws.CONNECTING) {
|
|
2757
|
-
ws.once("open", function open() {
|
|
2758
|
-
duplex._final(callback);
|
|
2759
|
-
});
|
|
2760
|
-
return;
|
|
2761
|
-
}
|
|
2762
|
-
if (ws._socket === null)
|
|
2763
|
-
return;
|
|
2764
|
-
if (ws._socket._writableState.finished) {
|
|
2765
|
-
callback();
|
|
2766
|
-
if (duplex._readableState.endEmitted)
|
|
2767
|
-
duplex.destroy();
|
|
2768
|
-
} else {
|
|
2769
|
-
ws._socket.once("finish", function finish() {
|
|
2770
|
-
callback();
|
|
2771
|
-
});
|
|
2772
|
-
ws.close();
|
|
2773
|
-
}
|
|
2774
|
-
};
|
|
2775
|
-
duplex._read = function() {
|
|
2776
|
-
if (ws.isPaused)
|
|
2777
|
-
ws.resume();
|
|
2778
|
-
};
|
|
2779
|
-
duplex._write = function(chunk, encoding, callback) {
|
|
2780
|
-
if (ws.readyState === ws.CONNECTING) {
|
|
2781
|
-
ws.once("open", function open() {
|
|
2782
|
-
duplex._write(chunk, encoding, callback);
|
|
2783
|
-
});
|
|
2784
|
-
return;
|
|
2785
|
-
}
|
|
2786
|
-
ws.send(chunk, callback);
|
|
2787
|
-
};
|
|
2788
|
-
duplex.on("end", duplexOnEnd);
|
|
2789
|
-
duplex.on("error", duplexOnError);
|
|
2790
|
-
return duplex;
|
|
2791
|
-
}
|
|
2792
|
-
module.exports = createWebSocketStream;
|
|
2793
|
-
});
|
|
2794
|
-
|
|
2795
|
-
// node_modules/.pnpm/@kevisual+ws@8.19.0/node_modules/@kevisual/ws/lib/subprotocol.js
|
|
2796
|
-
var require_subprotocol2 = __commonJS((exports, module) => {
|
|
2797
|
-
var { tokenChars } = require_validation2();
|
|
2798
|
-
function parse5(header) {
|
|
2799
|
-
const protocols = new Set;
|
|
2800
|
-
let start = -1;
|
|
2801
|
-
let end = -1;
|
|
2802
|
-
let i = 0;
|
|
2803
|
-
for (i;i < header.length; i++) {
|
|
2804
|
-
const code = header.charCodeAt(i);
|
|
2805
|
-
if (end === -1 && tokenChars[code] === 1) {
|
|
2806
|
-
if (start === -1)
|
|
2807
|
-
start = i;
|
|
2808
|
-
} else if (i !== 0 && (code === 32 || code === 9)) {
|
|
2809
|
-
if (end === -1 && start !== -1)
|
|
2810
|
-
end = i;
|
|
2811
|
-
} else if (code === 44) {
|
|
2812
|
-
if (start === -1) {
|
|
2813
|
-
throw new SyntaxError(`Unexpected character at index ${i}`);
|
|
2814
|
-
}
|
|
2815
|
-
if (end === -1)
|
|
2816
|
-
end = i;
|
|
2817
|
-
const protocol2 = header.slice(start, end);
|
|
2818
|
-
if (protocols.has(protocol2)) {
|
|
2819
|
-
throw new SyntaxError(`The "${protocol2}" subprotocol is duplicated`);
|
|
2820
|
-
}
|
|
2821
|
-
protocols.add(protocol2);
|
|
2822
|
-
start = end = -1;
|
|
2823
|
-
} else {
|
|
2824
|
-
throw new SyntaxError(`Unexpected character at index ${i}`);
|
|
2825
|
-
}
|
|
2826
|
-
}
|
|
2827
|
-
if (start === -1 || end !== -1) {
|
|
2828
|
-
throw new SyntaxError("Unexpected end of input");
|
|
2829
|
-
}
|
|
2830
|
-
const protocol = header.slice(start, i);
|
|
2831
|
-
if (protocols.has(protocol)) {
|
|
2832
|
-
throw new SyntaxError(`The "${protocol}" subprotocol is duplicated`);
|
|
2833
|
-
}
|
|
2834
|
-
protocols.add(protocol);
|
|
2835
|
-
return protocols;
|
|
2836
|
-
}
|
|
2837
|
-
module.exports = { parse: parse5 };
|
|
2838
|
-
});
|
|
2839
|
-
|
|
2840
|
-
// node_modules/.pnpm/@kevisual+ws@8.19.0/node_modules/@kevisual/ws/lib/websocket-server.js
|
|
2841
|
-
var require_websocket_server2 = __commonJS((exports, module) => {
|
|
2842
|
-
var EventEmitter3 = __require("events");
|
|
2843
|
-
var http = __require("http");
|
|
2844
|
-
var { Duplex } = __require("stream");
|
|
2845
|
-
var { createHash } = __require("crypto");
|
|
2846
|
-
var extension = require_extension2();
|
|
2847
|
-
var PerMessageDeflate = require_permessage_deflate2();
|
|
2848
|
-
var subprotocol = require_subprotocol2();
|
|
2849
|
-
var WebSocket = require_websocket2();
|
|
2850
|
-
var { CLOSE_TIMEOUT, GUID, kWebSocket } = require_constants2();
|
|
2851
|
-
var keyRegex = /^[+/0-9A-Za-z]{22}==$/;
|
|
2852
|
-
var RUNNING = 0;
|
|
2853
|
-
var CLOSING = 1;
|
|
2854
|
-
var CLOSED = 2;
|
|
2855
|
-
|
|
2856
|
-
class WebSocketServer extends EventEmitter3 {
|
|
2857
|
-
constructor(options, callback) {
|
|
2858
|
-
super();
|
|
2859
|
-
options = {
|
|
2860
|
-
allowSynchronousEvents: true,
|
|
2861
|
-
autoPong: true,
|
|
2862
|
-
maxPayload: 100 * 1024 * 1024,
|
|
2863
|
-
skipUTF8Validation: false,
|
|
2864
|
-
perMessageDeflate: false,
|
|
2865
|
-
handleProtocols: null,
|
|
2866
|
-
clientTracking: true,
|
|
2867
|
-
closeTimeout: CLOSE_TIMEOUT,
|
|
2868
|
-
verifyClient: null,
|
|
2869
|
-
noServer: false,
|
|
2870
|
-
backlog: null,
|
|
2871
|
-
server: null,
|
|
2872
|
-
host: null,
|
|
2873
|
-
path: null,
|
|
2874
|
-
port: null,
|
|
2875
|
-
WebSocket,
|
|
2876
|
-
...options
|
|
2877
|
-
};
|
|
2878
|
-
if (options.port == null && !options.server && !options.noServer || options.port != null && (options.server || options.noServer) || options.server && options.noServer) {
|
|
2879
|
-
throw new TypeError('One and only one of the "port", "server", or "noServer" options ' + "must be specified");
|
|
2880
|
-
}
|
|
2881
|
-
if (options.port != null) {
|
|
2882
|
-
this._server = http.createServer((req, res) => {
|
|
2883
|
-
const body = http.STATUS_CODES[426];
|
|
2884
|
-
res.writeHead(426, {
|
|
2885
|
-
"Content-Length": body.length,
|
|
2886
|
-
"Content-Type": "text/plain"
|
|
2887
|
-
});
|
|
2888
|
-
res.end(body);
|
|
2889
|
-
});
|
|
2890
|
-
this._server.listen(options.port, options.host, options.backlog, callback);
|
|
2891
|
-
} else if (options.server) {
|
|
2892
|
-
this._server = options.server;
|
|
2893
|
-
}
|
|
2894
|
-
if (this._server) {
|
|
2895
|
-
const emitConnection = this.emit.bind(this, "connection");
|
|
2896
|
-
this._removeListeners = addListeners(this._server, {
|
|
2897
|
-
listening: this.emit.bind(this, "listening"),
|
|
2898
|
-
error: this.emit.bind(this, "error"),
|
|
2899
|
-
upgrade: (req, socket, head) => {
|
|
2900
|
-
this.handleUpgrade(req, socket, head, emitConnection);
|
|
2901
|
-
}
|
|
2902
|
-
});
|
|
2903
|
-
}
|
|
2904
|
-
if (options.perMessageDeflate === true)
|
|
2905
|
-
options.perMessageDeflate = {};
|
|
2906
|
-
if (options.clientTracking) {
|
|
2907
|
-
this.clients = new Set;
|
|
2908
|
-
this._shouldEmitClose = false;
|
|
2909
|
-
}
|
|
2910
|
-
this.options = options;
|
|
2911
|
-
this._state = RUNNING;
|
|
2912
|
-
}
|
|
2913
|
-
address() {
|
|
2914
|
-
if (this.options.noServer) {
|
|
2915
|
-
throw new Error('The server is operating in "noServer" mode');
|
|
2916
|
-
}
|
|
2917
|
-
if (!this._server)
|
|
2918
|
-
return null;
|
|
2919
|
-
return this._server.address();
|
|
2920
|
-
}
|
|
2921
|
-
close(cb) {
|
|
2922
|
-
if (this._state === CLOSED) {
|
|
2923
|
-
if (cb) {
|
|
2924
|
-
this.once("close", () => {
|
|
2925
|
-
cb(new Error("The server is not running"));
|
|
2926
|
-
});
|
|
2927
|
-
}
|
|
2928
|
-
process.nextTick(emitClose, this);
|
|
2929
|
-
return;
|
|
2930
|
-
}
|
|
2931
|
-
if (cb)
|
|
2932
|
-
this.once("close", cb);
|
|
2933
|
-
if (this._state === CLOSING)
|
|
2934
|
-
return;
|
|
2935
|
-
this._state = CLOSING;
|
|
2936
|
-
if (this.options.noServer || this.options.server) {
|
|
2937
|
-
if (this._server) {
|
|
2938
|
-
this._removeListeners();
|
|
2939
|
-
this._removeListeners = this._server = null;
|
|
2940
|
-
}
|
|
2941
|
-
if (this.clients) {
|
|
2942
|
-
if (!this.clients.size) {
|
|
2943
|
-
process.nextTick(emitClose, this);
|
|
2944
|
-
} else {
|
|
2945
|
-
this._shouldEmitClose = true;
|
|
2946
|
-
}
|
|
2947
|
-
} else {
|
|
2948
|
-
process.nextTick(emitClose, this);
|
|
2949
|
-
}
|
|
2950
|
-
} else {
|
|
2951
|
-
const server = this._server;
|
|
2952
|
-
this._removeListeners();
|
|
2953
|
-
this._removeListeners = this._server = null;
|
|
2954
|
-
server.close(() => {
|
|
2955
|
-
emitClose(this);
|
|
2956
|
-
});
|
|
2957
|
-
}
|
|
2958
|
-
}
|
|
2959
|
-
shouldHandle(req) {
|
|
2960
|
-
if (this.options.path) {
|
|
2961
|
-
const index = req.url.indexOf("?");
|
|
2962
|
-
const pathname = index !== -1 ? req.url.slice(0, index) : req.url;
|
|
2963
|
-
if (pathname !== this.options.path)
|
|
2964
|
-
return false;
|
|
2965
|
-
}
|
|
2966
|
-
return true;
|
|
2967
|
-
}
|
|
2968
|
-
handleUpgrade(req, socket, head, cb) {
|
|
2969
|
-
socket.on("error", socketOnError);
|
|
2970
|
-
const key = req.headers["sec-websocket-key"];
|
|
2971
|
-
const upgrade = req.headers.upgrade;
|
|
2972
|
-
const version3 = +req.headers["sec-websocket-version"];
|
|
2973
|
-
if (req.method !== "GET") {
|
|
2974
|
-
const message = "Invalid HTTP method";
|
|
2975
|
-
abortHandshakeOrEmitwsClientError(this, req, socket, 405, message);
|
|
2976
|
-
return;
|
|
2977
|
-
}
|
|
2978
|
-
if (upgrade === undefined || upgrade.toLowerCase() !== "websocket") {
|
|
2979
|
-
const message = "Invalid Upgrade header";
|
|
2980
|
-
abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);
|
|
2981
|
-
return;
|
|
2982
|
-
}
|
|
2983
|
-
if (key === undefined || !keyRegex.test(key)) {
|
|
2984
|
-
const message = "Missing or invalid Sec-WebSocket-Key header";
|
|
2985
|
-
abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);
|
|
2986
|
-
return;
|
|
2987
|
-
}
|
|
2988
|
-
if (version3 !== 13 && version3 !== 8) {
|
|
2989
|
-
const message = "Missing or invalid Sec-WebSocket-Version header";
|
|
2990
|
-
abortHandshakeOrEmitwsClientError(this, req, socket, 400, message, {
|
|
2991
|
-
"Sec-WebSocket-Version": "13, 8"
|
|
2992
|
-
});
|
|
2993
|
-
return;
|
|
2994
|
-
}
|
|
2995
|
-
if (!this.shouldHandle(req)) {
|
|
2996
|
-
abortHandshake(socket, 400);
|
|
2997
|
-
return;
|
|
2998
|
-
}
|
|
2999
|
-
const secWebSocketProtocol = req.headers["sec-websocket-protocol"];
|
|
3000
|
-
let protocols = new Set;
|
|
3001
|
-
if (secWebSocketProtocol !== undefined) {
|
|
3002
|
-
try {
|
|
3003
|
-
protocols = subprotocol.parse(secWebSocketProtocol);
|
|
3004
|
-
} catch (err) {
|
|
3005
|
-
const message = "Invalid Sec-WebSocket-Protocol header";
|
|
3006
|
-
abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);
|
|
3007
|
-
return;
|
|
3008
|
-
}
|
|
3009
|
-
}
|
|
3010
|
-
const secWebSocketExtensions = req.headers["sec-websocket-extensions"];
|
|
3011
|
-
const extensions = {};
|
|
3012
|
-
if (this.options.perMessageDeflate && secWebSocketExtensions !== undefined) {
|
|
3013
|
-
const perMessageDeflate = new PerMessageDeflate(this.options.perMessageDeflate, true, this.options.maxPayload);
|
|
3014
|
-
try {
|
|
3015
|
-
const offers = extension.parse(secWebSocketExtensions);
|
|
3016
|
-
if (offers[PerMessageDeflate.extensionName]) {
|
|
3017
|
-
perMessageDeflate.accept(offers[PerMessageDeflate.extensionName]);
|
|
3018
|
-
extensions[PerMessageDeflate.extensionName] = perMessageDeflate;
|
|
3019
|
-
}
|
|
3020
|
-
} catch (err) {
|
|
3021
|
-
const message = "Invalid or unacceptable Sec-WebSocket-Extensions header";
|
|
3022
|
-
abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);
|
|
3023
|
-
return;
|
|
3024
|
-
}
|
|
3025
|
-
}
|
|
3026
|
-
if (this.options.verifyClient) {
|
|
3027
|
-
const info = {
|
|
3028
|
-
origin: req.headers[`${version3 === 8 ? "sec-websocket-origin" : "origin"}`],
|
|
3029
|
-
secure: !!(req.socket.authorized || req.socket.encrypted),
|
|
3030
|
-
req
|
|
3031
|
-
};
|
|
3032
|
-
if (this.options.verifyClient.length === 2) {
|
|
3033
|
-
this.options.verifyClient(info, (verified, code, message, headers) => {
|
|
3034
|
-
if (!verified) {
|
|
3035
|
-
return abortHandshake(socket, code || 401, message, headers);
|
|
3036
|
-
}
|
|
3037
|
-
this.completeUpgrade(extensions, key, protocols, req, socket, head, cb);
|
|
3038
|
-
});
|
|
3039
|
-
return;
|
|
3040
|
-
}
|
|
3041
|
-
if (!this.options.verifyClient(info))
|
|
3042
|
-
return abortHandshake(socket, 401);
|
|
3043
|
-
}
|
|
3044
|
-
this.completeUpgrade(extensions, key, protocols, req, socket, head, cb);
|
|
3045
|
-
}
|
|
3046
|
-
completeUpgrade(extensions, key, protocols, req, socket, head, cb) {
|
|
3047
|
-
if (!socket.readable || !socket.writable)
|
|
3048
|
-
return socket.destroy();
|
|
3049
|
-
if (socket[kWebSocket]) {
|
|
3050
|
-
throw new Error("server.handleUpgrade() was called more than once with the same " + "socket, possibly due to a misconfiguration");
|
|
3051
|
-
}
|
|
3052
|
-
if (this._state > RUNNING)
|
|
3053
|
-
return abortHandshake(socket, 503);
|
|
3054
|
-
const digest = createHash("sha1").update(key + GUID).digest("base64");
|
|
3055
|
-
const headers = [
|
|
3056
|
-
"HTTP/1.1 101 Switching Protocols",
|
|
3057
|
-
"Upgrade: websocket",
|
|
3058
|
-
"Connection: Upgrade",
|
|
3059
|
-
`Sec-WebSocket-Accept: ${digest}`
|
|
3060
|
-
];
|
|
3061
|
-
const ws = new this.options.WebSocket(null, undefined, this.options);
|
|
3062
|
-
if (protocols.size) {
|
|
3063
|
-
const protocol = this.options.handleProtocols ? this.options.handleProtocols(protocols, req) : protocols.values().next().value;
|
|
3064
|
-
if (protocol) {
|
|
3065
|
-
headers.push(`Sec-WebSocket-Protocol: ${protocol}`);
|
|
3066
|
-
ws._protocol = protocol;
|
|
3067
|
-
}
|
|
3068
|
-
}
|
|
3069
|
-
if (extensions[PerMessageDeflate.extensionName]) {
|
|
3070
|
-
const params = extensions[PerMessageDeflate.extensionName].params;
|
|
3071
|
-
const value = extension.format({
|
|
3072
|
-
[PerMessageDeflate.extensionName]: [params]
|
|
3073
|
-
});
|
|
3074
|
-
headers.push(`Sec-WebSocket-Extensions: ${value}`);
|
|
3075
|
-
ws._extensions = extensions;
|
|
3076
|
-
}
|
|
3077
|
-
this.emit("headers", headers, req);
|
|
3078
|
-
socket.write(headers.concat(`\r
|
|
3079
|
-
`).join(`\r
|
|
3080
|
-
`));
|
|
3081
|
-
socket.removeListener("error", socketOnError);
|
|
3082
|
-
ws.setSocket(socket, head, {
|
|
3083
|
-
allowSynchronousEvents: this.options.allowSynchronousEvents,
|
|
3084
|
-
maxPayload: this.options.maxPayload,
|
|
3085
|
-
skipUTF8Validation: this.options.skipUTF8Validation
|
|
3086
|
-
});
|
|
3087
|
-
if (this.clients) {
|
|
3088
|
-
this.clients.add(ws);
|
|
3089
|
-
ws.on("close", () => {
|
|
3090
|
-
this.clients.delete(ws);
|
|
3091
|
-
if (this._shouldEmitClose && !this.clients.size) {
|
|
3092
|
-
process.nextTick(emitClose, this);
|
|
3093
|
-
}
|
|
3094
|
-
});
|
|
3095
|
-
}
|
|
3096
|
-
cb(ws, req);
|
|
3097
|
-
}
|
|
3098
|
-
}
|
|
3099
|
-
module.exports = WebSocketServer;
|
|
3100
|
-
function addListeners(server, map3) {
|
|
3101
|
-
for (const event of Object.keys(map3))
|
|
3102
|
-
server.on(event, map3[event]);
|
|
3103
|
-
return function removeListeners() {
|
|
3104
|
-
for (const event of Object.keys(map3)) {
|
|
3105
|
-
server.removeListener(event, map3[event]);
|
|
3106
|
-
}
|
|
3107
|
-
};
|
|
3108
|
-
}
|
|
3109
|
-
function emitClose(server) {
|
|
3110
|
-
server._state = CLOSED;
|
|
3111
|
-
server.emit("close");
|
|
3112
|
-
}
|
|
3113
|
-
function socketOnError() {
|
|
3114
|
-
this.destroy();
|
|
3115
|
-
}
|
|
3116
|
-
function abortHandshake(socket, code, message, headers) {
|
|
3117
|
-
message = message || http.STATUS_CODES[code];
|
|
3118
|
-
headers = {
|
|
3119
|
-
Connection: "close",
|
|
3120
|
-
"Content-Type": "text/html",
|
|
3121
|
-
"Content-Length": Buffer.byteLength(message),
|
|
3122
|
-
...headers
|
|
3123
|
-
};
|
|
3124
|
-
socket.once("finish", socket.destroy);
|
|
3125
|
-
socket.end(`HTTP/1.1 ${code} ${http.STATUS_CODES[code]}\r
|
|
3126
|
-
` + Object.keys(headers).map((h) => `${h}: ${headers[h]}`).join(`\r
|
|
3127
|
-
`) + `\r
|
|
3128
|
-
\r
|
|
3129
|
-
` + message);
|
|
3130
|
-
}
|
|
3131
|
-
function abortHandshakeOrEmitwsClientError(server, req, socket, code, message, headers) {
|
|
3132
|
-
if (server.listenerCount("wsClientError")) {
|
|
3133
|
-
const err = new Error(message);
|
|
3134
|
-
Error.captureStackTrace(err, abortHandshakeOrEmitwsClientError);
|
|
3135
|
-
server.emit("wsClientError", err, socket, req);
|
|
3136
|
-
} else {
|
|
3137
|
-
abortHandshake(socket, code, message, headers);
|
|
3138
|
-
}
|
|
3139
|
-
}
|
|
3140
|
-
});
|
|
3141
|
-
|
|
3142
|
-
// node_modules/.pnpm/@kevisual+ws@8.19.0/node_modules/@kevisual/ws/wrapper.mjs
|
|
3143
|
-
var exports_wrapper = {};
|
|
3144
|
-
__export(exports_wrapper, {
|
|
3145
|
-
default: () => wrapper_default,
|
|
3146
|
-
createWebSocketStream: () => import_stream2.default,
|
|
3147
|
-
WebSocketServer: () => import_websocket_server2.default,
|
|
3148
|
-
WebSocket: () => import_websocket2.default,
|
|
3149
|
-
Sender: () => import_sender2.default,
|
|
3150
|
-
Receiver: () => import_receiver2.default
|
|
3151
|
-
});
|
|
3152
|
-
var import_stream2, import_receiver2, import_sender2, import_websocket2, import_websocket_server2, wrapper_default;
|
|
3153
|
-
var init_wrapper = __esm(() => {
|
|
3154
|
-
import_stream2 = __toESM(require_stream2(), 1);
|
|
3155
|
-
import_receiver2 = __toESM(require_receiver2(), 1);
|
|
3156
|
-
import_sender2 = __toESM(require_sender2(), 1);
|
|
3157
|
-
import_websocket2 = __toESM(require_websocket2(), 1);
|
|
3158
|
-
import_websocket_server2 = __toESM(require_websocket_server2(), 1);
|
|
3159
|
-
wrapper_default = import_websocket2.default;
|
|
3160
|
-
});
|
|
3161
|
-
|
|
3162
|
-
// node_modules/.pnpm/@kevisual+router@0.0.84/node_modules/@kevisual/router/dist/router.js
|
|
3163
|
-
import { createRequire as createRequire2 } from "node:module";
|
|
3164
|
-
import { webcrypto as crypto2 } from "node:crypto";
|
|
3165
|
-
import url2 from "node:url";
|
|
3166
|
-
var __create2 = Object.create;
|
|
3167
|
-
var __getProtoOf2 = Object.getPrototypeOf;
|
|
3168
|
-
var __defProp2 = Object.defineProperty;
|
|
3169
|
-
var __getOwnPropNames2 = Object.getOwnPropertyNames;
|
|
3170
|
-
var __hasOwnProp2 = Object.prototype.hasOwnProperty;
|
|
3171
|
-
var __toESM2 = (mod, isNodeMode, target) => {
|
|
3172
|
-
target = mod != null ? __create2(__getProtoOf2(mod)) : {};
|
|
3173
|
-
const to = isNodeMode || !mod || !mod.__esModule ? __defProp2(target, "default", { value: mod, enumerable: true }) : target;
|
|
3174
|
-
for (let key of __getOwnPropNames2(mod))
|
|
3175
|
-
if (!__hasOwnProp2.call(to, key))
|
|
3176
|
-
__defProp2(to, key, {
|
|
3177
|
-
get: () => mod[key],
|
|
3178
|
-
enumerable: true
|
|
3179
|
-
});
|
|
3180
|
-
return to;
|
|
3181
|
-
};
|
|
3182
|
-
var __commonJS2 = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
|
|
3183
|
-
var __export2 = (target, all) => {
|
|
3184
|
-
for (var name in all)
|
|
3185
|
-
__defProp2(target, name, {
|
|
3186
|
-
get: all[name],
|
|
3187
|
-
enumerable: true,
|
|
3188
|
-
configurable: true,
|
|
3189
|
-
set: (newValue) => all[name] = () => newValue
|
|
3190
|
-
});
|
|
3191
|
-
};
|
|
3192
|
-
var __require2 = /* @__PURE__ */ createRequire2(import.meta.url);
|
|
3193
|
-
var require_eventemitter3 = __commonJS2((exports, module) => {
|
|
3194
|
-
var has = Object.prototype.hasOwnProperty;
|
|
3195
|
-
var prefix = "~";
|
|
3196
|
-
function Events() {}
|
|
3197
|
-
if (Object.create) {
|
|
3198
|
-
Events.prototype = Object.create(null);
|
|
3199
|
-
if (!new Events().__proto__)
|
|
3200
|
-
prefix = false;
|
|
3201
|
-
}
|
|
3202
|
-
function EE(fn, context, once) {
|
|
3203
|
-
this.fn = fn;
|
|
3204
|
-
this.context = context;
|
|
3205
|
-
this.once = once || false;
|
|
3206
|
-
}
|
|
3207
|
-
function addListener(emitter, event, fn, context, once) {
|
|
3208
|
-
if (typeof fn !== "function") {
|
|
3209
|
-
throw new TypeError("The listener must be a function");
|
|
3210
|
-
}
|
|
3211
|
-
var listener = new EE(fn, context || emitter, once), evt = prefix ? prefix + event : event;
|
|
3212
|
-
if (!emitter._events[evt])
|
|
3213
|
-
emitter._events[evt] = listener, emitter._eventsCount++;
|
|
3214
|
-
else if (!emitter._events[evt].fn)
|
|
3215
|
-
emitter._events[evt].push(listener);
|
|
3216
|
-
else
|
|
3217
|
-
emitter._events[evt] = [emitter._events[evt], listener];
|
|
3218
|
-
return emitter;
|
|
3219
|
-
}
|
|
3220
|
-
function clearEvent(emitter, evt) {
|
|
3221
|
-
if (--emitter._eventsCount === 0)
|
|
3222
|
-
emitter._events = new Events;
|
|
3223
|
-
else
|
|
3224
|
-
delete emitter._events[evt];
|
|
3225
|
-
}
|
|
3226
|
-
function EventEmitter() {
|
|
3227
|
-
this._events = new Events;
|
|
3228
|
-
this._eventsCount = 0;
|
|
3229
|
-
}
|
|
3230
|
-
EventEmitter.prototype.eventNames = function eventNames() {
|
|
3231
|
-
var names = [], events, name;
|
|
3232
|
-
if (this._eventsCount === 0)
|
|
3233
|
-
return names;
|
|
3234
|
-
for (name in events = this._events) {
|
|
3235
|
-
if (has.call(events, name))
|
|
3236
|
-
names.push(prefix ? name.slice(1) : name);
|
|
3237
|
-
}
|
|
3238
|
-
if (Object.getOwnPropertySymbols) {
|
|
3239
|
-
return names.concat(Object.getOwnPropertySymbols(events));
|
|
3240
|
-
}
|
|
3241
|
-
return names;
|
|
3242
|
-
};
|
|
3243
|
-
EventEmitter.prototype.listeners = function listeners(event) {
|
|
3244
|
-
var evt = prefix ? prefix + event : event, handlers = this._events[evt];
|
|
3245
|
-
if (!handlers)
|
|
3246
|
-
return [];
|
|
3247
|
-
if (handlers.fn)
|
|
3248
|
-
return [handlers.fn];
|
|
3249
|
-
for (var i = 0, l = handlers.length, ee = new Array(l);i < l; i++) {
|
|
3250
|
-
ee[i] = handlers[i].fn;
|
|
3251
|
-
}
|
|
3252
|
-
return ee;
|
|
3253
|
-
};
|
|
3254
|
-
EventEmitter.prototype.listenerCount = function listenerCount(event) {
|
|
3255
|
-
var evt = prefix ? prefix + event : event, listeners = this._events[evt];
|
|
3256
|
-
if (!listeners)
|
|
3257
|
-
return 0;
|
|
3258
|
-
if (listeners.fn)
|
|
3259
|
-
return 1;
|
|
3260
|
-
return listeners.length;
|
|
3261
|
-
};
|
|
3262
|
-
EventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {
|
|
3263
|
-
var evt = prefix ? prefix + event : event;
|
|
3264
|
-
if (!this._events[evt])
|
|
3265
|
-
return false;
|
|
3266
|
-
var listeners = this._events[evt], len = arguments.length, args, i;
|
|
3267
|
-
if (listeners.fn) {
|
|
3268
|
-
if (listeners.once)
|
|
3269
|
-
this.removeListener(event, listeners.fn, undefined, true);
|
|
3270
|
-
switch (len) {
|
|
3271
|
-
case 1:
|
|
3272
|
-
return listeners.fn.call(listeners.context), true;
|
|
3273
|
-
case 2:
|
|
3274
|
-
return listeners.fn.call(listeners.context, a1), true;
|
|
3275
|
-
case 3:
|
|
3276
|
-
return listeners.fn.call(listeners.context, a1, a2), true;
|
|
3277
|
-
case 4:
|
|
3278
|
-
return listeners.fn.call(listeners.context, a1, a2, a3), true;
|
|
3279
|
-
case 5:
|
|
3280
|
-
return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;
|
|
3281
|
-
case 6:
|
|
3282
|
-
return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;
|
|
3283
|
-
}
|
|
3284
|
-
for (i = 1, args = new Array(len - 1);i < len; i++) {
|
|
3285
|
-
args[i - 1] = arguments[i];
|
|
3286
|
-
}
|
|
3287
|
-
listeners.fn.apply(listeners.context, args);
|
|
3288
|
-
} else {
|
|
3289
|
-
var length = listeners.length, j;
|
|
3290
|
-
for (i = 0;i < length; i++) {
|
|
3291
|
-
if (listeners[i].once)
|
|
3292
|
-
this.removeListener(event, listeners[i].fn, undefined, true);
|
|
3293
|
-
switch (len) {
|
|
3294
|
-
case 1:
|
|
3295
|
-
listeners[i].fn.call(listeners[i].context);
|
|
3296
|
-
break;
|
|
3297
|
-
case 2:
|
|
3298
|
-
listeners[i].fn.call(listeners[i].context, a1);
|
|
3299
|
-
break;
|
|
3300
|
-
case 3:
|
|
3301
|
-
listeners[i].fn.call(listeners[i].context, a1, a2);
|
|
3302
|
-
break;
|
|
3303
|
-
case 4:
|
|
3304
|
-
listeners[i].fn.call(listeners[i].context, a1, a2, a3);
|
|
3305
|
-
break;
|
|
3306
|
-
default:
|
|
3307
|
-
if (!args)
|
|
3308
|
-
for (j = 1, args = new Array(len - 1);j < len; j++) {
|
|
3309
|
-
args[j - 1] = arguments[j];
|
|
3310
|
-
}
|
|
3311
|
-
listeners[i].fn.apply(listeners[i].context, args);
|
|
3312
|
-
}
|
|
3313
|
-
}
|
|
3314
|
-
}
|
|
3315
|
-
return true;
|
|
3316
|
-
};
|
|
3317
|
-
EventEmitter.prototype.on = function on(event, fn, context) {
|
|
3318
|
-
return addListener(this, event, fn, context, false);
|
|
3319
|
-
};
|
|
3320
|
-
EventEmitter.prototype.once = function once(event, fn, context) {
|
|
3321
|
-
return addListener(this, event, fn, context, true);
|
|
3322
|
-
};
|
|
3323
|
-
EventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {
|
|
3324
|
-
var evt = prefix ? prefix + event : event;
|
|
3325
|
-
if (!this._events[evt])
|
|
3326
|
-
return this;
|
|
3327
|
-
if (!fn) {
|
|
3328
|
-
clearEvent(this, evt);
|
|
3329
|
-
return this;
|
|
3330
|
-
}
|
|
3331
|
-
var listeners = this._events[evt];
|
|
3332
|
-
if (listeners.fn) {
|
|
3333
|
-
if (listeners.fn === fn && (!once || listeners.once) && (!context || listeners.context === context)) {
|
|
3334
|
-
clearEvent(this, evt);
|
|
3335
|
-
}
|
|
3336
|
-
} else {
|
|
3337
|
-
for (var i = 0, events = [], length = listeners.length;i < length; i++) {
|
|
3338
|
-
if (listeners[i].fn !== fn || once && !listeners[i].once || context && listeners[i].context !== context) {
|
|
3339
|
-
events.push(listeners[i]);
|
|
3340
|
-
}
|
|
3341
|
-
}
|
|
3342
|
-
if (events.length)
|
|
3343
|
-
this._events[evt] = events.length === 1 ? events[0] : events;
|
|
3344
|
-
else
|
|
3345
|
-
clearEvent(this, evt);
|
|
3346
|
-
}
|
|
3347
|
-
return this;
|
|
3348
|
-
};
|
|
3349
|
-
EventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {
|
|
3350
|
-
var evt;
|
|
3351
|
-
if (event) {
|
|
3352
|
-
evt = prefix ? prefix + event : event;
|
|
3353
|
-
if (this._events[evt])
|
|
3354
|
-
clearEvent(this, evt);
|
|
3355
|
-
} else {
|
|
3356
|
-
this._events = new Events;
|
|
3357
|
-
this._eventsCount = 0;
|
|
3358
|
-
}
|
|
3359
|
-
return this;
|
|
3360
|
-
};
|
|
3361
|
-
EventEmitter.prototype.off = EventEmitter.prototype.removeListener;
|
|
3362
|
-
EventEmitter.prototype.addListener = EventEmitter.prototype.on;
|
|
3363
|
-
EventEmitter.prefixed = prefix;
|
|
3364
|
-
EventEmitter.EventEmitter = EventEmitter;
|
|
3365
|
-
if (typeof module !== "undefined") {
|
|
3366
|
-
module.exports = EventEmitter;
|
|
3367
|
-
}
|
|
3368
|
-
});
|
|
3369
|
-
var require_constants = __commonJS2((exports, module) => {
|
|
3370
|
-
var BINARY_TYPES = ["nodebuffer", "arraybuffer", "fragments"];
|
|
3371
|
-
var hasBlob = typeof Blob !== "undefined";
|
|
3372
|
-
if (hasBlob)
|
|
3373
|
-
BINARY_TYPES.push("blob");
|
|
3374
|
-
module.exports = {
|
|
3375
|
-
BINARY_TYPES,
|
|
3376
|
-
EMPTY_BUFFER: Buffer.alloc(0),
|
|
3377
|
-
GUID: "258EAFA5-E914-47DA-95CA-C5AB0DC85B11",
|
|
3378
|
-
hasBlob,
|
|
3379
|
-
kForOnEventAttribute: Symbol("kIsForOnEventAttribute"),
|
|
3380
|
-
kListener: Symbol("kListener"),
|
|
3381
|
-
kStatusCode: Symbol("status-code"),
|
|
3382
|
-
kWebSocket: Symbol("websocket"),
|
|
3383
|
-
NOOP: () => {}
|
|
3384
|
-
};
|
|
3385
|
-
});
|
|
3386
|
-
var require_buffer_util = __commonJS2((exports, module) => {
|
|
3387
|
-
var { EMPTY_BUFFER } = require_constants();
|
|
3388
|
-
var FastBuffer = Buffer[Symbol.species];
|
|
3389
|
-
function concat(list, totalLength) {
|
|
3390
|
-
if (list.length === 0)
|
|
3391
|
-
return EMPTY_BUFFER;
|
|
3392
|
-
if (list.length === 1)
|
|
3393
|
-
return list[0];
|
|
3394
|
-
const target = Buffer.allocUnsafe(totalLength);
|
|
3395
|
-
let offset = 0;
|
|
3396
|
-
for (let i = 0;i < list.length; i++) {
|
|
3397
|
-
const buf = list[i];
|
|
3398
|
-
target.set(buf, offset);
|
|
3399
|
-
offset += buf.length;
|
|
3400
|
-
}
|
|
3401
|
-
if (offset < totalLength) {
|
|
3402
|
-
return new FastBuffer(target.buffer, target.byteOffset, offset);
|
|
3403
|
-
}
|
|
3404
|
-
return target;
|
|
3405
|
-
}
|
|
3406
|
-
function _mask(source, mask, output, offset, length) {
|
|
3407
|
-
for (let i = 0;i < length; i++) {
|
|
3408
|
-
output[offset + i] = source[i] ^ mask[i & 3];
|
|
3409
|
-
}
|
|
3410
|
-
}
|
|
3411
|
-
function _unmask(buffer, mask) {
|
|
3412
|
-
for (let i = 0;i < buffer.length; i++) {
|
|
3413
|
-
buffer[i] ^= mask[i & 3];
|
|
3414
|
-
}
|
|
3415
|
-
}
|
|
3416
|
-
function toArrayBuffer(buf) {
|
|
3417
|
-
if (buf.length === buf.buffer.byteLength) {
|
|
3418
|
-
return buf.buffer;
|
|
3419
|
-
}
|
|
3420
|
-
return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.length);
|
|
3421
|
-
}
|
|
3422
|
-
function toBuffer(data) {
|
|
3423
|
-
toBuffer.readOnly = true;
|
|
3424
|
-
if (Buffer.isBuffer(data))
|
|
3425
|
-
return data;
|
|
3426
|
-
let buf;
|
|
3427
|
-
if (data instanceof ArrayBuffer) {
|
|
3428
|
-
buf = new FastBuffer(data);
|
|
3429
|
-
} else if (ArrayBuffer.isView(data)) {
|
|
3430
|
-
buf = new FastBuffer(data.buffer, data.byteOffset, data.byteLength);
|
|
3431
|
-
} else {
|
|
3432
|
-
buf = Buffer.from(data);
|
|
3433
|
-
toBuffer.readOnly = false;
|
|
3434
|
-
}
|
|
3435
|
-
return buf;
|
|
3436
|
-
}
|
|
3437
|
-
module.exports = {
|
|
3438
|
-
concat,
|
|
3439
|
-
mask: _mask,
|
|
3440
|
-
toArrayBuffer,
|
|
3441
|
-
toBuffer,
|
|
3442
|
-
unmask: _unmask
|
|
3443
|
-
};
|
|
3444
|
-
});
|
|
3445
|
-
var require_limiter = __commonJS2((exports, module) => {
|
|
3446
|
-
var kDone = Symbol("kDone");
|
|
3447
|
-
var kRun = Symbol("kRun");
|
|
3448
|
-
|
|
3449
|
-
class Limiter {
|
|
3450
|
-
constructor(concurrency) {
|
|
3451
|
-
this[kDone] = () => {
|
|
3452
|
-
this.pending--;
|
|
3453
|
-
this[kRun]();
|
|
3454
|
-
};
|
|
3455
|
-
this.concurrency = concurrency || Infinity;
|
|
3456
|
-
this.jobs = [];
|
|
3457
|
-
this.pending = 0;
|
|
3458
|
-
}
|
|
3459
|
-
add(job) {
|
|
3460
|
-
this.jobs.push(job);
|
|
3461
|
-
this[kRun]();
|
|
3462
|
-
}
|
|
3463
|
-
[kRun]() {
|
|
3464
|
-
if (this.pending === this.concurrency)
|
|
3465
|
-
return;
|
|
3466
|
-
if (this.jobs.length) {
|
|
3467
|
-
const job = this.jobs.shift();
|
|
3468
|
-
this.pending++;
|
|
3469
|
-
job(this[kDone]);
|
|
3470
|
-
}
|
|
3471
|
-
}
|
|
3472
|
-
}
|
|
3473
|
-
module.exports = Limiter;
|
|
3474
|
-
});
|
|
3475
|
-
var require_permessage_deflate = __commonJS2((exports, module) => {
|
|
3476
|
-
var zlib = __require2("zlib");
|
|
3477
|
-
var bufferUtil = require_buffer_util();
|
|
3478
|
-
var Limiter = require_limiter();
|
|
3479
|
-
var { kStatusCode } = require_constants();
|
|
3480
|
-
var FastBuffer = Buffer[Symbol.species];
|
|
3481
|
-
var TRAILER = Buffer.from([0, 0, 255, 255]);
|
|
3482
|
-
var kPerMessageDeflate = Symbol("permessage-deflate");
|
|
3483
|
-
var kTotalLength = Symbol("total-length");
|
|
3484
|
-
var kCallback = Symbol("callback");
|
|
3485
|
-
var kBuffers = Symbol("buffers");
|
|
3486
|
-
var kError = Symbol("error");
|
|
3487
|
-
var zlibLimiter;
|
|
3488
|
-
|
|
3489
|
-
class PerMessageDeflate {
|
|
3490
|
-
constructor(options, isServer, maxPayload) {
|
|
3491
|
-
this._maxPayload = maxPayload | 0;
|
|
3492
|
-
this._options = options || {};
|
|
3493
|
-
this._threshold = this._options.threshold !== undefined ? this._options.threshold : 1024;
|
|
3494
|
-
this._isServer = !!isServer;
|
|
3495
|
-
this._deflate = null;
|
|
3496
|
-
this._inflate = null;
|
|
3497
|
-
this.params = null;
|
|
3498
|
-
if (!zlibLimiter) {
|
|
3499
|
-
const concurrency = this._options.concurrencyLimit !== undefined ? this._options.concurrencyLimit : 10;
|
|
3500
|
-
zlibLimiter = new Limiter(concurrency);
|
|
3501
|
-
}
|
|
3502
|
-
}
|
|
3503
|
-
static get extensionName() {
|
|
3504
|
-
return "permessage-deflate";
|
|
3505
|
-
}
|
|
3506
|
-
offer() {
|
|
3507
|
-
const params = {};
|
|
3508
|
-
if (this._options.serverNoContextTakeover) {
|
|
3509
|
-
params.server_no_context_takeover = true;
|
|
3510
|
-
}
|
|
3511
|
-
if (this._options.clientNoContextTakeover) {
|
|
3512
|
-
params.client_no_context_takeover = true;
|
|
3513
|
-
}
|
|
3514
|
-
if (this._options.serverMaxWindowBits) {
|
|
3515
|
-
params.server_max_window_bits = this._options.serverMaxWindowBits;
|
|
3516
|
-
}
|
|
3517
|
-
if (this._options.clientMaxWindowBits) {
|
|
3518
|
-
params.client_max_window_bits = this._options.clientMaxWindowBits;
|
|
3519
|
-
} else if (this._options.clientMaxWindowBits == null) {
|
|
3520
|
-
params.client_max_window_bits = true;
|
|
3521
|
-
}
|
|
3522
|
-
return params;
|
|
3523
|
-
}
|
|
3524
|
-
accept(configurations) {
|
|
3525
|
-
configurations = this.normalizeParams(configurations);
|
|
3526
|
-
this.params = this._isServer ? this.acceptAsServer(configurations) : this.acceptAsClient(configurations);
|
|
3527
|
-
return this.params;
|
|
3528
|
-
}
|
|
3529
|
-
cleanup() {
|
|
3530
|
-
if (this._inflate) {
|
|
3531
|
-
this._inflate.close();
|
|
3532
|
-
this._inflate = null;
|
|
3533
|
-
}
|
|
3534
|
-
if (this._deflate) {
|
|
3535
|
-
const callback = this._deflate[kCallback];
|
|
3536
|
-
this._deflate.close();
|
|
3537
|
-
this._deflate = null;
|
|
3538
|
-
if (callback) {
|
|
3539
|
-
callback(new Error("The deflate stream was closed while data was being processed"));
|
|
3540
|
-
}
|
|
3541
|
-
}
|
|
3542
|
-
}
|
|
3543
|
-
acceptAsServer(offers) {
|
|
3544
|
-
const opts = this._options;
|
|
3545
|
-
const accepted = offers.find((params) => {
|
|
3546
|
-
if (opts.serverNoContextTakeover === false && params.server_no_context_takeover || params.server_max_window_bits && (opts.serverMaxWindowBits === false || typeof opts.serverMaxWindowBits === "number" && opts.serverMaxWindowBits > params.server_max_window_bits) || typeof opts.clientMaxWindowBits === "number" && !params.client_max_window_bits) {
|
|
3547
|
-
return false;
|
|
3548
|
-
}
|
|
3549
|
-
return true;
|
|
3550
|
-
});
|
|
3551
|
-
if (!accepted) {
|
|
3552
|
-
throw new Error("None of the extension offers can be accepted");
|
|
3553
|
-
}
|
|
3554
|
-
if (opts.serverNoContextTakeover) {
|
|
3555
|
-
accepted.server_no_context_takeover = true;
|
|
3556
|
-
}
|
|
3557
|
-
if (opts.clientNoContextTakeover) {
|
|
3558
|
-
accepted.client_no_context_takeover = true;
|
|
3559
|
-
}
|
|
3560
|
-
if (typeof opts.serverMaxWindowBits === "number") {
|
|
3561
|
-
accepted.server_max_window_bits = opts.serverMaxWindowBits;
|
|
3562
|
-
}
|
|
3563
|
-
if (typeof opts.clientMaxWindowBits === "number") {
|
|
3564
|
-
accepted.client_max_window_bits = opts.clientMaxWindowBits;
|
|
3565
|
-
} else if (accepted.client_max_window_bits === true || opts.clientMaxWindowBits === false) {
|
|
3566
|
-
delete accepted.client_max_window_bits;
|
|
3567
|
-
}
|
|
3568
|
-
return accepted;
|
|
3569
|
-
}
|
|
3570
|
-
acceptAsClient(response) {
|
|
3571
|
-
const params = response[0];
|
|
3572
|
-
if (this._options.clientNoContextTakeover === false && params.client_no_context_takeover) {
|
|
3573
|
-
throw new Error('Unexpected parameter "client_no_context_takeover"');
|
|
3574
|
-
}
|
|
3575
|
-
if (!params.client_max_window_bits) {
|
|
3576
|
-
if (typeof this._options.clientMaxWindowBits === "number") {
|
|
3577
|
-
params.client_max_window_bits = this._options.clientMaxWindowBits;
|
|
3578
|
-
}
|
|
3579
|
-
} else if (this._options.clientMaxWindowBits === false || typeof this._options.clientMaxWindowBits === "number" && params.client_max_window_bits > this._options.clientMaxWindowBits) {
|
|
3580
|
-
throw new Error('Unexpected or invalid parameter "client_max_window_bits"');
|
|
3581
|
-
}
|
|
3582
|
-
return params;
|
|
3583
|
-
}
|
|
3584
|
-
normalizeParams(configurations) {
|
|
3585
|
-
configurations.forEach((params) => {
|
|
3586
|
-
Object.keys(params).forEach((key) => {
|
|
3587
|
-
let value = params[key];
|
|
3588
|
-
if (value.length > 1) {
|
|
3589
|
-
throw new Error(`Parameter "${key}" must have only a single value`);
|
|
3590
|
-
}
|
|
3591
|
-
value = value[0];
|
|
3592
|
-
if (key === "client_max_window_bits") {
|
|
3593
|
-
if (value !== true) {
|
|
3594
|
-
const num = +value;
|
|
3595
|
-
if (!Number.isInteger(num) || num < 8 || num > 15) {
|
|
3596
|
-
throw new TypeError(`Invalid value for parameter "${key}": ${value}`);
|
|
3597
|
-
}
|
|
3598
|
-
value = num;
|
|
3599
|
-
} else if (!this._isServer) {
|
|
3600
|
-
throw new TypeError(`Invalid value for parameter "${key}": ${value}`);
|
|
3601
|
-
}
|
|
3602
|
-
} else if (key === "server_max_window_bits") {
|
|
3603
|
-
const num = +value;
|
|
3604
|
-
if (!Number.isInteger(num) || num < 8 || num > 15) {
|
|
3605
|
-
throw new TypeError(`Invalid value for parameter "${key}": ${value}`);
|
|
3606
|
-
}
|
|
3607
|
-
value = num;
|
|
3608
|
-
} else if (key === "client_no_context_takeover" || key === "server_no_context_takeover") {
|
|
3609
|
-
if (value !== true) {
|
|
3610
|
-
throw new TypeError(`Invalid value for parameter "${key}": ${value}`);
|
|
3611
|
-
}
|
|
3612
|
-
} else {
|
|
3613
|
-
throw new Error(`Unknown parameter "${key}"`);
|
|
3614
|
-
}
|
|
3615
|
-
params[key] = value;
|
|
3616
|
-
});
|
|
3617
|
-
});
|
|
3618
|
-
return configurations;
|
|
3619
|
-
}
|
|
3620
|
-
decompress(data, fin, callback) {
|
|
3621
|
-
zlibLimiter.add((done) => {
|
|
3622
|
-
this._decompress(data, fin, (err, result) => {
|
|
3623
|
-
done();
|
|
3624
|
-
callback(err, result);
|
|
3625
|
-
});
|
|
3626
|
-
});
|
|
3627
|
-
}
|
|
3628
|
-
compress(data, fin, callback) {
|
|
3629
|
-
zlibLimiter.add((done) => {
|
|
3630
|
-
this._compress(data, fin, (err, result) => {
|
|
3631
|
-
done();
|
|
3632
|
-
callback(err, result);
|
|
3633
|
-
});
|
|
3634
|
-
});
|
|
3635
|
-
}
|
|
3636
|
-
_decompress(data, fin, callback) {
|
|
3637
|
-
const endpoint = this._isServer ? "client" : "server";
|
|
3638
|
-
if (!this._inflate) {
|
|
3639
|
-
const key = `${endpoint}_max_window_bits`;
|
|
3640
|
-
const windowBits = typeof this.params[key] !== "number" ? zlib.Z_DEFAULT_WINDOWBITS : this.params[key];
|
|
3641
|
-
this._inflate = zlib.createInflateRaw({
|
|
3642
|
-
...this._options.zlibInflateOptions,
|
|
3643
|
-
windowBits
|
|
3644
|
-
});
|
|
3645
|
-
this._inflate[kPerMessageDeflate] = this;
|
|
3646
|
-
this._inflate[kTotalLength] = 0;
|
|
3647
|
-
this._inflate[kBuffers] = [];
|
|
3648
|
-
this._inflate.on("error", inflateOnError);
|
|
3649
|
-
this._inflate.on("data", inflateOnData);
|
|
3650
|
-
}
|
|
3651
|
-
this._inflate[kCallback] = callback;
|
|
3652
|
-
this._inflate.write(data);
|
|
3653
|
-
if (fin)
|
|
3654
|
-
this._inflate.write(TRAILER);
|
|
3655
|
-
this._inflate.flush(() => {
|
|
3656
|
-
const err = this._inflate[kError];
|
|
3657
|
-
if (err) {
|
|
3658
|
-
this._inflate.close();
|
|
3659
|
-
this._inflate = null;
|
|
3660
|
-
callback(err);
|
|
3661
|
-
return;
|
|
3662
|
-
}
|
|
3663
|
-
const data2 = bufferUtil.concat(this._inflate[kBuffers], this._inflate[kTotalLength]);
|
|
3664
|
-
if (this._inflate._readableState.endEmitted) {
|
|
3665
|
-
this._inflate.close();
|
|
3666
|
-
this._inflate = null;
|
|
3667
|
-
} else {
|
|
3668
|
-
this._inflate[kTotalLength] = 0;
|
|
3669
|
-
this._inflate[kBuffers] = [];
|
|
3670
|
-
if (fin && this.params[`${endpoint}_no_context_takeover`]) {
|
|
3671
|
-
this._inflate.reset();
|
|
3672
|
-
}
|
|
3673
|
-
}
|
|
3674
|
-
callback(null, data2);
|
|
3675
|
-
});
|
|
3676
|
-
}
|
|
3677
|
-
_compress(data, fin, callback) {
|
|
3678
|
-
const endpoint = this._isServer ? "server" : "client";
|
|
3679
|
-
if (!this._deflate) {
|
|
3680
|
-
const key = `${endpoint}_max_window_bits`;
|
|
3681
|
-
const windowBits = typeof this.params[key] !== "number" ? zlib.Z_DEFAULT_WINDOWBITS : this.params[key];
|
|
3682
|
-
this._deflate = zlib.createDeflateRaw({
|
|
3683
|
-
...this._options.zlibDeflateOptions,
|
|
3684
|
-
windowBits
|
|
3685
|
-
});
|
|
3686
|
-
this._deflate[kTotalLength] = 0;
|
|
3687
|
-
this._deflate[kBuffers] = [];
|
|
3688
|
-
this._deflate.on("data", deflateOnData);
|
|
3689
|
-
}
|
|
3690
|
-
this._deflate[kCallback] = callback;
|
|
3691
|
-
this._deflate.write(data);
|
|
3692
|
-
this._deflate.flush(zlib.Z_SYNC_FLUSH, () => {
|
|
3693
|
-
if (!this._deflate) {
|
|
3694
|
-
return;
|
|
3695
|
-
}
|
|
3696
|
-
let data2 = bufferUtil.concat(this._deflate[kBuffers], this._deflate[kTotalLength]);
|
|
3697
|
-
if (fin) {
|
|
3698
|
-
data2 = new FastBuffer(data2.buffer, data2.byteOffset, data2.length - 4);
|
|
3699
|
-
}
|
|
3700
|
-
this._deflate[kCallback] = null;
|
|
3701
|
-
this._deflate[kTotalLength] = 0;
|
|
3702
|
-
this._deflate[kBuffers] = [];
|
|
3703
|
-
if (fin && this.params[`${endpoint}_no_context_takeover`]) {
|
|
3704
|
-
this._deflate.reset();
|
|
3705
|
-
}
|
|
3706
|
-
callback(null, data2);
|
|
3707
|
-
});
|
|
3708
|
-
}
|
|
3709
|
-
}
|
|
3710
|
-
module.exports = PerMessageDeflate;
|
|
3711
|
-
function deflateOnData(chunk) {
|
|
3712
|
-
this[kBuffers].push(chunk);
|
|
3713
|
-
this[kTotalLength] += chunk.length;
|
|
3714
|
-
}
|
|
3715
|
-
function inflateOnData(chunk) {
|
|
3716
|
-
this[kTotalLength] += chunk.length;
|
|
3717
|
-
if (this[kPerMessageDeflate]._maxPayload < 1 || this[kTotalLength] <= this[kPerMessageDeflate]._maxPayload) {
|
|
3718
|
-
this[kBuffers].push(chunk);
|
|
3719
|
-
return;
|
|
3720
|
-
}
|
|
3721
|
-
this[kError] = new RangeError("Max payload size exceeded");
|
|
3722
|
-
this[kError].code = "WS_ERR_UNSUPPORTED_MESSAGE_LENGTH";
|
|
3723
|
-
this[kError][kStatusCode] = 1009;
|
|
3724
|
-
this.removeListener("data", inflateOnData);
|
|
3725
|
-
this.reset();
|
|
3726
|
-
}
|
|
3727
|
-
function inflateOnError(err) {
|
|
3728
|
-
this[kPerMessageDeflate]._inflate = null;
|
|
3729
|
-
err[kStatusCode] = 1007;
|
|
3730
|
-
this[kCallback](err);
|
|
3731
|
-
}
|
|
3732
|
-
});
|
|
3733
|
-
var require_validation = __commonJS2((exports, module) => {
|
|
3734
|
-
var { isUtf8 } = __require2("buffer");
|
|
3735
|
-
var { hasBlob } = require_constants();
|
|
3736
|
-
var tokenChars = [
|
|
3737
|
-
0,
|
|
3738
|
-
0,
|
|
3739
|
-
0,
|
|
3740
|
-
0,
|
|
3741
|
-
0,
|
|
3742
|
-
0,
|
|
3743
|
-
0,
|
|
3744
|
-
0,
|
|
3745
|
-
0,
|
|
3746
|
-
0,
|
|
3747
|
-
0,
|
|
3748
|
-
0,
|
|
3749
|
-
0,
|
|
3750
|
-
0,
|
|
3751
|
-
0,
|
|
3752
|
-
0,
|
|
3753
|
-
0,
|
|
3754
|
-
0,
|
|
3755
|
-
0,
|
|
3756
|
-
0,
|
|
3757
|
-
0,
|
|
3758
|
-
0,
|
|
3759
|
-
0,
|
|
3760
|
-
0,
|
|
3761
|
-
0,
|
|
3762
|
-
0,
|
|
3763
|
-
0,
|
|
3764
|
-
0,
|
|
3765
|
-
0,
|
|
3766
|
-
0,
|
|
3767
|
-
0,
|
|
3768
|
-
0,
|
|
3769
|
-
0,
|
|
3770
|
-
1,
|
|
3771
|
-
0,
|
|
3772
|
-
1,
|
|
3773
|
-
1,
|
|
3774
|
-
1,
|
|
3775
|
-
1,
|
|
3776
|
-
1,
|
|
3777
|
-
0,
|
|
3778
|
-
0,
|
|
3779
|
-
1,
|
|
3780
|
-
1,
|
|
3781
|
-
0,
|
|
3782
|
-
1,
|
|
3783
|
-
1,
|
|
3784
|
-
0,
|
|
3785
|
-
1,
|
|
3786
|
-
1,
|
|
3787
|
-
1,
|
|
3788
|
-
1,
|
|
3789
|
-
1,
|
|
3790
|
-
1,
|
|
3791
|
-
1,
|
|
3792
|
-
1,
|
|
3793
|
-
1,
|
|
3794
|
-
1,
|
|
3795
|
-
0,
|
|
3796
|
-
0,
|
|
3797
|
-
0,
|
|
3798
|
-
0,
|
|
3799
|
-
0,
|
|
3800
|
-
0,
|
|
3801
|
-
0,
|
|
3802
|
-
1,
|
|
3803
|
-
1,
|
|
3804
|
-
1,
|
|
3805
|
-
1,
|
|
3806
|
-
1,
|
|
3807
|
-
1,
|
|
3808
|
-
1,
|
|
3809
|
-
1,
|
|
3810
|
-
1,
|
|
3811
|
-
1,
|
|
3812
|
-
1,
|
|
3813
|
-
1,
|
|
3814
|
-
1,
|
|
3815
|
-
1,
|
|
3816
|
-
1,
|
|
3817
|
-
1,
|
|
3818
|
-
1,
|
|
3819
|
-
1,
|
|
3820
|
-
1,
|
|
3821
|
-
1,
|
|
3822
|
-
1,
|
|
3823
|
-
1,
|
|
3824
|
-
1,
|
|
3825
|
-
1,
|
|
3826
|
-
1,
|
|
3827
|
-
1,
|
|
3828
|
-
0,
|
|
3829
|
-
0,
|
|
3830
|
-
0,
|
|
3831
|
-
1,
|
|
3832
|
-
1,
|
|
3833
|
-
1,
|
|
3834
|
-
1,
|
|
3835
|
-
1,
|
|
3836
|
-
1,
|
|
3837
|
-
1,
|
|
3838
|
-
1,
|
|
3839
|
-
1,
|
|
3840
|
-
1,
|
|
3841
|
-
1,
|
|
3842
|
-
1,
|
|
3843
|
-
1,
|
|
3844
|
-
1,
|
|
3845
|
-
1,
|
|
3846
|
-
1,
|
|
3847
|
-
1,
|
|
3848
|
-
1,
|
|
3849
|
-
1,
|
|
3850
|
-
1,
|
|
3851
|
-
1,
|
|
3852
|
-
1,
|
|
3853
|
-
1,
|
|
3854
|
-
1,
|
|
3855
|
-
1,
|
|
3856
|
-
1,
|
|
3857
|
-
1,
|
|
3858
|
-
1,
|
|
3859
|
-
1,
|
|
3860
|
-
0,
|
|
3861
|
-
1,
|
|
3862
|
-
0,
|
|
3863
|
-
1,
|
|
3864
|
-
0
|
|
3865
|
-
];
|
|
3866
|
-
function isValidStatusCode(code) {
|
|
3867
|
-
return code >= 1000 && code <= 1014 && code !== 1004 && code !== 1005 && code !== 1006 || code >= 3000 && code <= 4999;
|
|
3868
|
-
}
|
|
3869
|
-
function _isValidUTF8(buf) {
|
|
3870
|
-
const len = buf.length;
|
|
3871
|
-
let i = 0;
|
|
3872
|
-
while (i < len) {
|
|
3873
|
-
if ((buf[i] & 128) === 0) {
|
|
3874
|
-
i++;
|
|
3875
|
-
} else if ((buf[i] & 224) === 192) {
|
|
3876
|
-
if (i + 1 === len || (buf[i + 1] & 192) !== 128 || (buf[i] & 254) === 192) {
|
|
3877
|
-
return false;
|
|
3878
|
-
}
|
|
3879
|
-
i += 2;
|
|
3880
|
-
} else if ((buf[i] & 240) === 224) {
|
|
3881
|
-
if (i + 2 >= len || (buf[i + 1] & 192) !== 128 || (buf[i + 2] & 192) !== 128 || buf[i] === 224 && (buf[i + 1] & 224) === 128 || buf[i] === 237 && (buf[i + 1] & 224) === 160) {
|
|
3882
|
-
return false;
|
|
3883
|
-
}
|
|
3884
|
-
i += 3;
|
|
3885
|
-
} else if ((buf[i] & 248) === 240) {
|
|
3886
|
-
if (i + 3 >= len || (buf[i + 1] & 192) !== 128 || (buf[i + 2] & 192) !== 128 || (buf[i + 3] & 192) !== 128 || buf[i] === 240 && (buf[i + 1] & 240) === 128 || buf[i] === 244 && buf[i + 1] > 143 || buf[i] > 244) {
|
|
3887
|
-
return false;
|
|
3888
|
-
}
|
|
3889
|
-
i += 4;
|
|
3890
|
-
} else {
|
|
3891
|
-
return false;
|
|
3892
|
-
}
|
|
3893
|
-
}
|
|
3894
|
-
return true;
|
|
3895
|
-
}
|
|
3896
|
-
function isBlob(value) {
|
|
3897
|
-
return hasBlob && typeof value === "object" && typeof value.arrayBuffer === "function" && typeof value.type === "string" && typeof value.stream === "function" && (value[Symbol.toStringTag] === "Blob" || value[Symbol.toStringTag] === "File");
|
|
3898
|
-
}
|
|
3899
|
-
module.exports = {
|
|
3900
|
-
isBlob,
|
|
3901
|
-
isValidStatusCode,
|
|
3902
|
-
isValidUTF8: _isValidUTF8,
|
|
3903
|
-
tokenChars
|
|
3904
|
-
};
|
|
3905
|
-
if (isUtf8) {
|
|
3906
|
-
module.exports.isValidUTF8 = function(buf) {
|
|
3907
|
-
return buf.length < 24 ? _isValidUTF8(buf) : isUtf8(buf);
|
|
3908
|
-
};
|
|
3909
|
-
}
|
|
3910
|
-
});
|
|
3911
|
-
var require_receiver = __commonJS2((exports, module) => {
|
|
3912
|
-
var { Writable } = __require2("stream");
|
|
3913
|
-
var PerMessageDeflate = require_permessage_deflate();
|
|
3914
|
-
var {
|
|
3915
|
-
BINARY_TYPES,
|
|
3916
|
-
EMPTY_BUFFER,
|
|
3917
|
-
kStatusCode,
|
|
3918
|
-
kWebSocket
|
|
3919
|
-
} = require_constants();
|
|
3920
|
-
var { concat, toArrayBuffer, unmask } = require_buffer_util();
|
|
3921
|
-
var { isValidStatusCode, isValidUTF8 } = require_validation();
|
|
3922
|
-
var FastBuffer = Buffer[Symbol.species];
|
|
3923
|
-
var GET_INFO = 0;
|
|
3924
|
-
var GET_PAYLOAD_LENGTH_16 = 1;
|
|
3925
|
-
var GET_PAYLOAD_LENGTH_64 = 2;
|
|
3926
|
-
var GET_MASK = 3;
|
|
3927
|
-
var GET_DATA = 4;
|
|
3928
|
-
var INFLATING = 5;
|
|
3929
|
-
var DEFER_EVENT = 6;
|
|
3930
|
-
|
|
3931
|
-
class Receiver extends Writable {
|
|
3932
|
-
constructor(options = {}) {
|
|
3933
|
-
super();
|
|
3934
|
-
this._allowSynchronousEvents = options.allowSynchronousEvents !== undefined ? options.allowSynchronousEvents : true;
|
|
3935
|
-
this._binaryType = options.binaryType || BINARY_TYPES[0];
|
|
3936
|
-
this._extensions = options.extensions || {};
|
|
3937
|
-
this._isServer = !!options.isServer;
|
|
3938
|
-
this._maxPayload = options.maxPayload | 0;
|
|
3939
|
-
this._skipUTF8Validation = !!options.skipUTF8Validation;
|
|
3940
|
-
this[kWebSocket] = undefined;
|
|
3941
|
-
this._bufferedBytes = 0;
|
|
3942
|
-
this._buffers = [];
|
|
3943
|
-
this._compressed = false;
|
|
3944
|
-
this._payloadLength = 0;
|
|
3945
|
-
this._mask = undefined;
|
|
3946
|
-
this._fragmented = 0;
|
|
3947
|
-
this._masked = false;
|
|
3948
|
-
this._fin = false;
|
|
3949
|
-
this._opcode = 0;
|
|
3950
|
-
this._totalPayloadLength = 0;
|
|
3951
|
-
this._messageLength = 0;
|
|
3952
|
-
this._fragments = [];
|
|
3953
|
-
this._errored = false;
|
|
3954
|
-
this._loop = false;
|
|
3955
|
-
this._state = GET_INFO;
|
|
3956
|
-
}
|
|
3957
|
-
_write(chunk, encoding, cb) {
|
|
3958
|
-
if (this._opcode === 8 && this._state == GET_INFO)
|
|
3959
|
-
return cb();
|
|
3960
|
-
this._bufferedBytes += chunk.length;
|
|
3961
|
-
this._buffers.push(chunk);
|
|
3962
|
-
this.startLoop(cb);
|
|
3963
|
-
}
|
|
3964
|
-
consume(n) {
|
|
3965
|
-
this._bufferedBytes -= n;
|
|
3966
|
-
if (n === this._buffers[0].length)
|
|
3967
|
-
return this._buffers.shift();
|
|
3968
|
-
if (n < this._buffers[0].length) {
|
|
3969
|
-
const buf = this._buffers[0];
|
|
3970
|
-
this._buffers[0] = new FastBuffer(buf.buffer, buf.byteOffset + n, buf.length - n);
|
|
3971
|
-
return new FastBuffer(buf.buffer, buf.byteOffset, n);
|
|
3972
|
-
}
|
|
3973
|
-
const dst = Buffer.allocUnsafe(n);
|
|
3974
|
-
do {
|
|
3975
|
-
const buf = this._buffers[0];
|
|
3976
|
-
const offset = dst.length - n;
|
|
3977
|
-
if (n >= buf.length) {
|
|
3978
|
-
dst.set(this._buffers.shift(), offset);
|
|
3979
|
-
} else {
|
|
3980
|
-
dst.set(new Uint8Array(buf.buffer, buf.byteOffset, n), offset);
|
|
3981
|
-
this._buffers[0] = new FastBuffer(buf.buffer, buf.byteOffset + n, buf.length - n);
|
|
3982
|
-
}
|
|
3983
|
-
n -= buf.length;
|
|
3984
|
-
} while (n > 0);
|
|
3985
|
-
return dst;
|
|
3986
|
-
}
|
|
3987
|
-
startLoop(cb) {
|
|
3988
|
-
this._loop = true;
|
|
3989
|
-
do {
|
|
3990
|
-
switch (this._state) {
|
|
3991
|
-
case GET_INFO:
|
|
3992
|
-
this.getInfo(cb);
|
|
3993
|
-
break;
|
|
3994
|
-
case GET_PAYLOAD_LENGTH_16:
|
|
3995
|
-
this.getPayloadLength16(cb);
|
|
3996
|
-
break;
|
|
3997
|
-
case GET_PAYLOAD_LENGTH_64:
|
|
3998
|
-
this.getPayloadLength64(cb);
|
|
3999
|
-
break;
|
|
4000
|
-
case GET_MASK:
|
|
4001
|
-
this.getMask();
|
|
4002
|
-
break;
|
|
4003
|
-
case GET_DATA:
|
|
4004
|
-
this.getData(cb);
|
|
4005
|
-
break;
|
|
4006
|
-
case INFLATING:
|
|
4007
|
-
case DEFER_EVENT:
|
|
4008
|
-
this._loop = false;
|
|
4009
|
-
return;
|
|
4010
|
-
}
|
|
4011
|
-
} while (this._loop);
|
|
4012
|
-
if (!this._errored)
|
|
4013
|
-
cb();
|
|
4014
|
-
}
|
|
4015
|
-
getInfo(cb) {
|
|
4016
|
-
if (this._bufferedBytes < 2) {
|
|
4017
|
-
this._loop = false;
|
|
4018
|
-
return;
|
|
4019
|
-
}
|
|
4020
|
-
const buf = this.consume(2);
|
|
4021
|
-
if ((buf[0] & 48) !== 0) {
|
|
4022
|
-
const error48 = this.createError(RangeError, "RSV2 and RSV3 must be clear", true, 1002, "WS_ERR_UNEXPECTED_RSV_2_3");
|
|
4023
|
-
cb(error48);
|
|
4024
|
-
return;
|
|
4025
|
-
}
|
|
4026
|
-
const compressed = (buf[0] & 64) === 64;
|
|
4027
|
-
if (compressed && !this._extensions[PerMessageDeflate.extensionName]) {
|
|
4028
|
-
const error48 = this.createError(RangeError, "RSV1 must be clear", true, 1002, "WS_ERR_UNEXPECTED_RSV_1");
|
|
4029
|
-
cb(error48);
|
|
4030
|
-
return;
|
|
4031
|
-
}
|
|
4032
|
-
this._fin = (buf[0] & 128) === 128;
|
|
4033
|
-
this._opcode = buf[0] & 15;
|
|
4034
|
-
this._payloadLength = buf[1] & 127;
|
|
4035
|
-
if (this._opcode === 0) {
|
|
4036
|
-
if (compressed) {
|
|
4037
|
-
const error48 = this.createError(RangeError, "RSV1 must be clear", true, 1002, "WS_ERR_UNEXPECTED_RSV_1");
|
|
4038
|
-
cb(error48);
|
|
4039
|
-
return;
|
|
4040
|
-
}
|
|
4041
|
-
if (!this._fragmented) {
|
|
4042
|
-
const error48 = this.createError(RangeError, "invalid opcode 0", true, 1002, "WS_ERR_INVALID_OPCODE");
|
|
4043
|
-
cb(error48);
|
|
4044
|
-
return;
|
|
4045
|
-
}
|
|
4046
|
-
this._opcode = this._fragmented;
|
|
4047
|
-
} else if (this._opcode === 1 || this._opcode === 2) {
|
|
4048
|
-
if (this._fragmented) {
|
|
4049
|
-
const error48 = this.createError(RangeError, `invalid opcode ${this._opcode}`, true, 1002, "WS_ERR_INVALID_OPCODE");
|
|
4050
|
-
cb(error48);
|
|
4051
|
-
return;
|
|
4052
|
-
}
|
|
4053
|
-
this._compressed = compressed;
|
|
4054
|
-
} else if (this._opcode > 7 && this._opcode < 11) {
|
|
4055
|
-
if (!this._fin) {
|
|
4056
|
-
const error48 = this.createError(RangeError, "FIN must be set", true, 1002, "WS_ERR_EXPECTED_FIN");
|
|
4057
|
-
cb(error48);
|
|
4058
|
-
return;
|
|
4059
|
-
}
|
|
4060
|
-
if (compressed) {
|
|
4061
|
-
const error48 = this.createError(RangeError, "RSV1 must be clear", true, 1002, "WS_ERR_UNEXPECTED_RSV_1");
|
|
4062
|
-
cb(error48);
|
|
4063
|
-
return;
|
|
4064
|
-
}
|
|
4065
|
-
if (this._payloadLength > 125 || this._opcode === 8 && this._payloadLength === 1) {
|
|
4066
|
-
const error48 = this.createError(RangeError, `invalid payload length ${this._payloadLength}`, true, 1002, "WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH");
|
|
4067
|
-
cb(error48);
|
|
4068
|
-
return;
|
|
4069
|
-
}
|
|
4070
|
-
} else {
|
|
4071
|
-
const error48 = this.createError(RangeError, `invalid opcode ${this._opcode}`, true, 1002, "WS_ERR_INVALID_OPCODE");
|
|
4072
|
-
cb(error48);
|
|
4073
|
-
return;
|
|
4074
|
-
}
|
|
4075
|
-
if (!this._fin && !this._fragmented)
|
|
4076
|
-
this._fragmented = this._opcode;
|
|
4077
|
-
this._masked = (buf[1] & 128) === 128;
|
|
4078
|
-
if (this._isServer) {
|
|
4079
|
-
if (!this._masked) {
|
|
4080
|
-
const error48 = this.createError(RangeError, "MASK must be set", true, 1002, "WS_ERR_EXPECTED_MASK");
|
|
4081
|
-
cb(error48);
|
|
4082
|
-
return;
|
|
4083
|
-
}
|
|
4084
|
-
} else if (this._masked) {
|
|
4085
|
-
const error48 = this.createError(RangeError, "MASK must be clear", true, 1002, "WS_ERR_UNEXPECTED_MASK");
|
|
4086
|
-
cb(error48);
|
|
4087
|
-
return;
|
|
4088
|
-
}
|
|
4089
|
-
if (this._payloadLength === 126)
|
|
4090
|
-
this._state = GET_PAYLOAD_LENGTH_16;
|
|
4091
|
-
else if (this._payloadLength === 127)
|
|
4092
|
-
this._state = GET_PAYLOAD_LENGTH_64;
|
|
4093
|
-
else
|
|
4094
|
-
this.haveLength(cb);
|
|
4095
|
-
}
|
|
4096
|
-
getPayloadLength16(cb) {
|
|
4097
|
-
if (this._bufferedBytes < 2) {
|
|
4098
|
-
this._loop = false;
|
|
4099
|
-
return;
|
|
4100
|
-
}
|
|
4101
|
-
this._payloadLength = this.consume(2).readUInt16BE(0);
|
|
4102
|
-
this.haveLength(cb);
|
|
4103
|
-
}
|
|
4104
|
-
getPayloadLength64(cb) {
|
|
4105
|
-
if (this._bufferedBytes < 8) {
|
|
4106
|
-
this._loop = false;
|
|
4107
|
-
return;
|
|
4108
|
-
}
|
|
4109
|
-
const buf = this.consume(8);
|
|
4110
|
-
const num = buf.readUInt32BE(0);
|
|
4111
|
-
if (num > Math.pow(2, 53 - 32) - 1) {
|
|
4112
|
-
const error48 = this.createError(RangeError, "Unsupported WebSocket frame: payload length > 2^53 - 1", false, 1009, "WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH");
|
|
4113
|
-
cb(error48);
|
|
4114
|
-
return;
|
|
4115
|
-
}
|
|
4116
|
-
this._payloadLength = num * Math.pow(2, 32) + buf.readUInt32BE(4);
|
|
4117
|
-
this.haveLength(cb);
|
|
4118
|
-
}
|
|
4119
|
-
haveLength(cb) {
|
|
4120
|
-
if (this._payloadLength && this._opcode < 8) {
|
|
4121
|
-
this._totalPayloadLength += this._payloadLength;
|
|
4122
|
-
if (this._totalPayloadLength > this._maxPayload && this._maxPayload > 0) {
|
|
4123
|
-
const error48 = this.createError(RangeError, "Max payload size exceeded", false, 1009, "WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");
|
|
4124
|
-
cb(error48);
|
|
4125
|
-
return;
|
|
4126
|
-
}
|
|
4127
|
-
}
|
|
4128
|
-
if (this._masked)
|
|
4129
|
-
this._state = GET_MASK;
|
|
4130
|
-
else
|
|
4131
|
-
this._state = GET_DATA;
|
|
4132
|
-
}
|
|
4133
|
-
getMask() {
|
|
4134
|
-
if (this._bufferedBytes < 4) {
|
|
4135
|
-
this._loop = false;
|
|
4136
|
-
return;
|
|
4137
|
-
}
|
|
4138
|
-
this._mask = this.consume(4);
|
|
4139
|
-
this._state = GET_DATA;
|
|
4140
|
-
}
|
|
4141
|
-
getData(cb) {
|
|
4142
|
-
let data = EMPTY_BUFFER;
|
|
4143
|
-
if (this._payloadLength) {
|
|
4144
|
-
if (this._bufferedBytes < this._payloadLength) {
|
|
4145
|
-
this._loop = false;
|
|
4146
|
-
return;
|
|
4147
|
-
}
|
|
4148
|
-
data = this.consume(this._payloadLength);
|
|
4149
|
-
if (this._masked && (this._mask[0] | this._mask[1] | this._mask[2] | this._mask[3]) !== 0) {
|
|
4150
|
-
unmask(data, this._mask);
|
|
4151
|
-
}
|
|
4152
|
-
}
|
|
4153
|
-
if (this._opcode > 7) {
|
|
4154
|
-
this.controlMessage(data, cb);
|
|
4155
|
-
return;
|
|
4156
|
-
}
|
|
4157
|
-
if (this._compressed) {
|
|
4158
|
-
this._state = INFLATING;
|
|
4159
|
-
this.decompress(data, cb);
|
|
4160
|
-
return;
|
|
4161
|
-
}
|
|
4162
|
-
if (data.length) {
|
|
4163
|
-
this._messageLength = this._totalPayloadLength;
|
|
4164
|
-
this._fragments.push(data);
|
|
4165
|
-
}
|
|
4166
|
-
this.dataMessage(cb);
|
|
4167
|
-
}
|
|
4168
|
-
decompress(data, cb) {
|
|
4169
|
-
const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];
|
|
4170
|
-
perMessageDeflate.decompress(data, this._fin, (err, buf) => {
|
|
4171
|
-
if (err)
|
|
4172
|
-
return cb(err);
|
|
4173
|
-
if (buf.length) {
|
|
4174
|
-
this._messageLength += buf.length;
|
|
4175
|
-
if (this._messageLength > this._maxPayload && this._maxPayload > 0) {
|
|
4176
|
-
const error48 = this.createError(RangeError, "Max payload size exceeded", false, 1009, "WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");
|
|
4177
|
-
cb(error48);
|
|
1026
|
+
const error48 = this.createError(RangeError, "Max payload size exceeded", false, 1009, "WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");
|
|
1027
|
+
cb(error48);
|
|
4178
1028
|
return;
|
|
4179
1029
|
}
|
|
4180
1030
|
this._fragments.push(buf);
|
|
@@ -4287,9 +1137,9 @@ var require_receiver = __commonJS2((exports, module) => {
|
|
|
4287
1137
|
}
|
|
4288
1138
|
module.exports = Receiver;
|
|
4289
1139
|
});
|
|
4290
|
-
var require_sender =
|
|
4291
|
-
var { Duplex } =
|
|
4292
|
-
var { randomFillSync } =
|
|
1140
|
+
var require_sender = __commonJS((exports, module) => {
|
|
1141
|
+
var { Duplex } = __require("stream");
|
|
1142
|
+
var { randomFillSync } = __require("crypto");
|
|
4293
1143
|
var PerMessageDeflate = require_permessage_deflate();
|
|
4294
1144
|
var { EMPTY_BUFFER, kWebSocket, NOOP } = require_constants();
|
|
4295
1145
|
var { isBlob, isValidStatusCode } = require_validation();
|
|
@@ -4639,7 +1489,7 @@ var require_sender = __commonJS2((exports, module) => {
|
|
|
4639
1489
|
sender.onerror(err);
|
|
4640
1490
|
}
|
|
4641
1491
|
});
|
|
4642
|
-
var require_event_target =
|
|
1492
|
+
var require_event_target = __commonJS((exports, module) => {
|
|
4643
1493
|
var { kForOnEventAttribute, kListener } = require_constants();
|
|
4644
1494
|
var kCode = Symbol("kCode");
|
|
4645
1495
|
var kData = Symbol("kData");
|
|
@@ -4788,7 +1638,7 @@ var require_event_target = __commonJS2((exports, module) => {
|
|
|
4788
1638
|
}
|
|
4789
1639
|
}
|
|
4790
1640
|
});
|
|
4791
|
-
var require_extension =
|
|
1641
|
+
var require_extension = __commonJS((exports, module) => {
|
|
4792
1642
|
var { tokenChars } = require_validation();
|
|
4793
1643
|
function push(dest, name, elem) {
|
|
4794
1644
|
if (dest[name] === undefined)
|
|
@@ -4951,15 +1801,15 @@ var require_extension = __commonJS2((exports, module) => {
|
|
|
4951
1801
|
}
|
|
4952
1802
|
module.exports = { format, parse: parse5 };
|
|
4953
1803
|
});
|
|
4954
|
-
var require_websocket =
|
|
4955
|
-
var EventEmitter2 =
|
|
4956
|
-
var https =
|
|
4957
|
-
var http =
|
|
4958
|
-
var net =
|
|
4959
|
-
var tls =
|
|
4960
|
-
var { randomBytes, createHash } =
|
|
4961
|
-
var { Duplex, Readable } =
|
|
4962
|
-
var { URL: URL2 } =
|
|
1804
|
+
var require_websocket = __commonJS((exports, module) => {
|
|
1805
|
+
var EventEmitter2 = __require("events");
|
|
1806
|
+
var https = __require("https");
|
|
1807
|
+
var http = __require("http");
|
|
1808
|
+
var net = __require("net");
|
|
1809
|
+
var tls = __require("tls");
|
|
1810
|
+
var { randomBytes, createHash } = __require("crypto");
|
|
1811
|
+
var { Duplex, Readable } = __require("stream");
|
|
1812
|
+
var { URL: URL2 } = __require("url");
|
|
4963
1813
|
var PerMessageDeflate = require_permessage_deflate();
|
|
4964
1814
|
var Receiver = require_receiver();
|
|
4965
1815
|
var Sender = require_sender();
|
|
@@ -5708,9 +2558,9 @@ var require_websocket = __commonJS2((exports, module) => {
|
|
|
5708
2558
|
}
|
|
5709
2559
|
}
|
|
5710
2560
|
});
|
|
5711
|
-
var require_stream =
|
|
2561
|
+
var require_stream = __commonJS((exports, module) => {
|
|
5712
2562
|
var WebSocket = require_websocket();
|
|
5713
|
-
var { Duplex } =
|
|
2563
|
+
var { Duplex } = __require("stream");
|
|
5714
2564
|
function emitClose(stream) {
|
|
5715
2565
|
stream.emit("close");
|
|
5716
2566
|
}
|
|
@@ -5809,7 +2659,7 @@ var require_stream = __commonJS2((exports, module) => {
|
|
|
5809
2659
|
}
|
|
5810
2660
|
module.exports = createWebSocketStream;
|
|
5811
2661
|
});
|
|
5812
|
-
var require_subprotocol =
|
|
2662
|
+
var require_subprotocol = __commonJS((exports, module) => {
|
|
5813
2663
|
var { tokenChars } = require_validation();
|
|
5814
2664
|
function parse5(header) {
|
|
5815
2665
|
const protocols = new Set;
|
|
@@ -5852,11 +2702,11 @@ var require_subprotocol = __commonJS2((exports, module) => {
|
|
|
5852
2702
|
}
|
|
5853
2703
|
module.exports = { parse: parse5 };
|
|
5854
2704
|
});
|
|
5855
|
-
var require_websocket_server =
|
|
5856
|
-
var EventEmitter2 =
|
|
5857
|
-
var http =
|
|
5858
|
-
var { Duplex } =
|
|
5859
|
-
var { createHash } =
|
|
2705
|
+
var require_websocket_server = __commonJS((exports, module) => {
|
|
2706
|
+
var EventEmitter2 = __require("events");
|
|
2707
|
+
var http = __require("http");
|
|
2708
|
+
var { Duplex } = __require("stream");
|
|
2709
|
+
var { createHash } = __require("crypto");
|
|
5860
2710
|
var extension = require_extension();
|
|
5861
2711
|
var PerMessageDeflate = require_permessage_deflate();
|
|
5862
2712
|
var subprotocol = require_subprotocol();
|
|
@@ -6220,7 +3070,7 @@ function pick(obj, keys) {
|
|
|
6220
3070
|
});
|
|
6221
3071
|
return result;
|
|
6222
3072
|
}
|
|
6223
|
-
var import__ =
|
|
3073
|
+
var import__ = __toESM(require_eventemitter3(), 1);
|
|
6224
3074
|
function isPlainObject(value) {
|
|
6225
3075
|
if (!value || typeof value !== "object") {
|
|
6226
3076
|
return false;
|
|
@@ -20931,11 +17781,11 @@ class ServerBase {
|
|
|
20931
17781
|
ws.send(JSON.stringify({ type: "connected" }));
|
|
20932
17782
|
}
|
|
20933
17783
|
}
|
|
20934
|
-
var import_stream =
|
|
20935
|
-
var import_receiver =
|
|
20936
|
-
var import_sender =
|
|
20937
|
-
var import_websocket =
|
|
20938
|
-
var import_websocket_server =
|
|
17784
|
+
var import_stream = __toESM(require_stream(), 1);
|
|
17785
|
+
var import_receiver = __toESM(require_receiver(), 1);
|
|
17786
|
+
var import_sender = __toESM(require_sender(), 1);
|
|
17787
|
+
var import_websocket = __toESM(require_websocket(), 1);
|
|
17788
|
+
var import_websocket_server = __toESM(require_websocket_server(), 1);
|
|
20939
17789
|
|
|
20940
17790
|
// node_modules/.pnpm/@kevisual+context@0.0.8/node_modules/@kevisual/context/dist/app.js
|
|
20941
17791
|
var isBrowser2 = typeof window !== "undefined" && typeof window.document !== "undefined";
|
|
@@ -21492,28 +18342,28 @@ class InitEnv {
|
|
|
21492
18342
|
InitEnv.init();
|
|
21493
18343
|
|
|
21494
18344
|
// node_modules/.pnpm/@kevisual+use-config@1.0.30_dotenv@17.3.1/node_modules/@kevisual/use-config/dist/app.js
|
|
21495
|
-
import { createRequire as
|
|
18345
|
+
import { createRequire as createRequire2 } from "node:module";
|
|
21496
18346
|
import fs from "node:fs";
|
|
21497
18347
|
import path from "node:path";
|
|
21498
|
-
var
|
|
21499
|
-
var
|
|
18348
|
+
var __create2 = Object.create;
|
|
18349
|
+
var __getProtoOf2 = Object.getPrototypeOf;
|
|
21500
18350
|
var __defProp3 = Object.defineProperty;
|
|
21501
|
-
var
|
|
21502
|
-
var
|
|
21503
|
-
var
|
|
21504
|
-
target = mod != null ?
|
|
18351
|
+
var __getOwnPropNames2 = Object.getOwnPropertyNames;
|
|
18352
|
+
var __hasOwnProp2 = Object.prototype.hasOwnProperty;
|
|
18353
|
+
var __toESM2 = (mod, isNodeMode, target) => {
|
|
18354
|
+
target = mod != null ? __create2(__getProtoOf2(mod)) : {};
|
|
21505
18355
|
const to = isNodeMode || !mod || !mod.__esModule ? __defProp3(target, "default", { value: mod, enumerable: true }) : target;
|
|
21506
|
-
for (let key of
|
|
21507
|
-
if (!
|
|
18356
|
+
for (let key of __getOwnPropNames2(mod))
|
|
18357
|
+
if (!__hasOwnProp2.call(to, key))
|
|
21508
18358
|
__defProp3(to, key, {
|
|
21509
18359
|
get: () => mod[key],
|
|
21510
18360
|
enumerable: true
|
|
21511
18361
|
});
|
|
21512
18362
|
return to;
|
|
21513
18363
|
};
|
|
21514
|
-
var
|
|
21515
|
-
var
|
|
21516
|
-
var require_package =
|
|
18364
|
+
var __commonJS2 = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
|
|
18365
|
+
var __require2 = /* @__PURE__ */ createRequire2(import.meta.url);
|
|
18366
|
+
var require_package = __commonJS2((exports, module) => {
|
|
21517
18367
|
module.exports = {
|
|
21518
18368
|
name: "dotenv",
|
|
21519
18369
|
version: "17.2.3",
|
|
@@ -21577,11 +18427,11 @@ var require_package = __commonJS3((exports, module) => {
|
|
|
21577
18427
|
}
|
|
21578
18428
|
};
|
|
21579
18429
|
});
|
|
21580
|
-
var require_main =
|
|
21581
|
-
var fs2 =
|
|
21582
|
-
var path2 =
|
|
21583
|
-
var os =
|
|
21584
|
-
var crypto3 =
|
|
18430
|
+
var require_main = __commonJS2((exports, module) => {
|
|
18431
|
+
var fs2 = __require2("fs");
|
|
18432
|
+
var path2 = __require2("path");
|
|
18433
|
+
var os = __require2("os");
|
|
18434
|
+
var crypto3 = __require2("crypto");
|
|
21585
18435
|
var packageJson = require_package();
|
|
21586
18436
|
var version2 = packageJson.version;
|
|
21587
18437
|
var TIPS = [
|
|
@@ -21904,7 +18754,7 @@ var require_main = __commonJS3((exports, module) => {
|
|
|
21904
18754
|
exports.populate = DotenvModule.populate;
|
|
21905
18755
|
module.exports = DotenvModule;
|
|
21906
18756
|
});
|
|
21907
|
-
var import_dotenv =
|
|
18757
|
+
var import_dotenv = __toESM2(require_main(), 1);
|
|
21908
18758
|
var fileIsExist = (path2) => {
|
|
21909
18759
|
try {
|
|
21910
18760
|
fs.accessSync(path2, fs.constants.F_OK);
|
|
@@ -36970,410 +33820,162 @@ app.route({
|
|
|
36970
33820
|
ctx.forward({ code: 200, message: "已关闭的工作空间删除完成", data: results });
|
|
36971
33821
|
}).addTo(app);
|
|
36972
33822
|
|
|
36973
|
-
//
|
|
36974
|
-
import
|
|
36975
|
-
|
|
36976
|
-
|
|
36977
|
-
|
|
36978
|
-
|
|
36979
|
-
|
|
36980
|
-
|
|
36981
|
-
|
|
36982
|
-
|
|
36983
|
-
|
|
36984
|
-
|
|
36985
|
-
|
|
36986
|
-
|
|
36987
|
-
poolOffset2 = 0;
|
|
36988
|
-
} else if (poolOffset2 + bytes > pool2.length) {
|
|
36989
|
-
crypto3.getRandomValues(pool2);
|
|
36990
|
-
poolOffset2 = 0;
|
|
36991
|
-
}
|
|
36992
|
-
poolOffset2 += bytes;
|
|
36993
|
-
}
|
|
36994
|
-
function nanoid7(size = 21) {
|
|
36995
|
-
fillPool2(size |= 0);
|
|
36996
|
-
let id = "";
|
|
36997
|
-
for (let i = poolOffset2 - size;i < poolOffset2; i++) {
|
|
36998
|
-
id += urlAlphabet[pool2[i] & 63];
|
|
36999
|
-
}
|
|
37000
|
-
return id;
|
|
37001
|
-
}
|
|
37002
|
-
|
|
37003
|
-
// agent/routes/workspace/keep.ts
|
|
37004
|
-
var import_dayjs = __toESM(require_dayjs_min(), 1);
|
|
37005
|
-
|
|
37006
|
-
// src/workspace/keep-live.ts
|
|
37007
|
-
var WebSocketModule;
|
|
37008
|
-
if (typeof Bun !== "undefined") {
|
|
37009
|
-
WebSocketModule = { WebSocket: globalThis.WebSocket };
|
|
37010
|
-
} else {
|
|
37011
|
-
WebSocketModule = await Promise.resolve().then(() => (init_wrapper(), exports_wrapper));
|
|
37012
|
-
}
|
|
37013
|
-
var WebSocket2 = WebSocketModule.WebSocket;
|
|
37014
|
-
|
|
37015
|
-
class WSKeepAlive {
|
|
37016
|
-
ws = null;
|
|
37017
|
-
config;
|
|
37018
|
-
reconnectAttempts = 0;
|
|
37019
|
-
pingTimer = null;
|
|
37020
|
-
messageHandlers = new Set;
|
|
37021
|
-
url;
|
|
37022
|
-
isBun;
|
|
37023
|
-
constructor(config4) {
|
|
37024
|
-
this.config = {
|
|
37025
|
-
wsUrl: config4.wsUrl,
|
|
37026
|
-
cookie: config4.cookie,
|
|
37027
|
-
reconnectInterval: config4.reconnectInterval ?? 5000,
|
|
37028
|
-
maxReconnectAttempts: config4.maxReconnectAttempts ?? 3,
|
|
37029
|
-
pingInterval: config4.pingInterval ?? 30000,
|
|
37030
|
-
onMessage: config4.onMessage ?? (() => {}),
|
|
37031
|
-
onConnect: config4.onConnect ?? (() => {}),
|
|
37032
|
-
onDisconnect: config4.onDisconnect ?? (() => {}),
|
|
37033
|
-
onError: config4.onError ?? (() => {}),
|
|
37034
|
-
onSign: config4.onSign ?? (() => {}),
|
|
37035
|
-
onExit: config4.onExit ?? (() => {}),
|
|
37036
|
-
debug: config4.debug ?? false
|
|
37037
|
-
};
|
|
37038
|
-
this.url = new URL(this.config.wsUrl);
|
|
37039
|
-
this.isBun = typeof Bun !== "undefined";
|
|
33823
|
+
// src/workspace/keep-file-live.ts
|
|
33824
|
+
import path2 from "node:path";
|
|
33825
|
+
import fs2 from "node:fs";
|
|
33826
|
+
import os from "node:os";
|
|
33827
|
+
import { execSync } from "node:child_process";
|
|
33828
|
+
var keepAliveFilePath = path2.join(os.homedir(), ".cnb/keepAliveCache.json");
|
|
33829
|
+
var runLive = (filePath, pm2Name) => {
|
|
33830
|
+
const cmdArgs = `cnb live -c ${filePath}`;
|
|
33831
|
+
const stopCmd = `pm2 delete ${pm2Name} 2>/dev/null || true`;
|
|
33832
|
+
console.log("停止已存在的进程:", stopCmd);
|
|
33833
|
+
try {
|
|
33834
|
+
execSync(stopCmd, { stdio: "inherit" });
|
|
33835
|
+
} catch (error49) {
|
|
33836
|
+
console.log("停止进程失败或进程不存在:", error49);
|
|
37040
33837
|
}
|
|
37041
|
-
|
|
37042
|
-
|
|
37043
|
-
|
|
37044
|
-
const
|
|
37045
|
-
|
|
37046
|
-
|
|
37047
|
-
|
|
37048
|
-
|
|
37049
|
-
const result = { type: "unknown", raw: data };
|
|
37050
|
-
if (data.length < 14) {
|
|
37051
|
-
result.type = "raw";
|
|
37052
|
-
return result;
|
|
37053
|
-
}
|
|
37054
|
-
const prefix = data.slice(0, 13);
|
|
37055
|
-
const msgType = prefix[0];
|
|
37056
|
-
const jsonStart = data.indexOf(113);
|
|
37057
|
-
if (jsonStart !== -1) {
|
|
37058
|
-
try {
|
|
37059
|
-
const jsonStr = data.slice(jsonStart + 1).toString();
|
|
37060
|
-
const payload = JSON.parse(jsonStr);
|
|
37061
|
-
result.type = `binary(0x${msgType.toString(16)})`;
|
|
37062
|
-
result.payload = payload;
|
|
37063
|
-
if (payload.type === "sign" && this.config.onSign) {
|
|
37064
|
-
this.config.onSign(payload);
|
|
37065
|
-
}
|
|
37066
|
-
return result;
|
|
37067
|
-
} catch {
|
|
37068
|
-
result.type = "binary(json-parse-error)";
|
|
37069
|
-
return result;
|
|
37070
|
-
}
|
|
37071
|
-
}
|
|
37072
|
-
result.type = "raw";
|
|
37073
|
-
return result;
|
|
33838
|
+
const pm2Cmd = `pm2 start ev --name ${pm2Name} --no-autorestart -- ${cmdArgs}`;
|
|
33839
|
+
console.log("执行命令:", pm2Cmd);
|
|
33840
|
+
try {
|
|
33841
|
+
const result = execSync(pm2Cmd, { stdio: "pipe", encoding: "utf8" });
|
|
33842
|
+
console.log(result);
|
|
33843
|
+
} catch (error49) {
|
|
33844
|
+
console.error("状态码:", error49.status);
|
|
33845
|
+
console.error("错误详情:", error49.stderr.toString());
|
|
37074
33846
|
}
|
|
37075
|
-
|
|
37076
|
-
|
|
37077
|
-
|
|
37078
|
-
|
|
37079
|
-
|
|
37080
|
-
|
|
37081
|
-
|
|
37082
|
-
|
|
37083
|
-
|
|
37084
|
-
|
|
37085
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
|
|
37086
|
-
"Sec-WebSocket-Extensions": "permessage-deflate"
|
|
37087
|
-
}
|
|
37088
|
-
});
|
|
37089
|
-
if (this.isBun) {
|
|
37090
|
-
const ws = this.ws;
|
|
37091
|
-
ws.onopen = () => {
|
|
37092
|
-
debug && this.log("Connected!");
|
|
37093
|
-
this.reconnectAttempts = 0;
|
|
37094
|
-
this.config.onConnect();
|
|
37095
|
-
this.startPing();
|
|
37096
|
-
};
|
|
37097
|
-
ws.onmessage = async (event) => {
|
|
37098
|
-
let data;
|
|
37099
|
-
if (event.data instanceof Blob) {
|
|
37100
|
-
data = Buffer.from(await event.data.arrayBuffer());
|
|
37101
|
-
} else if (event.data instanceof ArrayBuffer) {
|
|
37102
|
-
data = Buffer.from(event.data);
|
|
37103
|
-
} else if (typeof event.data === "string") {
|
|
37104
|
-
data = event.data;
|
|
37105
|
-
} else {
|
|
37106
|
-
data = Buffer.from(event.data);
|
|
37107
|
-
}
|
|
37108
|
-
this.handleMessage(data);
|
|
37109
|
-
};
|
|
37110
|
-
ws.onclose = (event) => {
|
|
37111
|
-
debug && this.log(`Disconnected (code: ${event.code})`);
|
|
37112
|
-
this.stopPing();
|
|
37113
|
-
this.config.onDisconnect(event.code);
|
|
37114
|
-
this.handleReconnect();
|
|
37115
|
-
};
|
|
37116
|
-
ws.onerror = (event) => {
|
|
37117
|
-
debug && this.log(`Error: ${event}`);
|
|
37118
|
-
this.config.onError(new Error("WebSocket error"));
|
|
37119
|
-
};
|
|
37120
|
-
} else {
|
|
37121
|
-
const ws = this.ws;
|
|
37122
|
-
ws.on("open", () => {
|
|
37123
|
-
debug && this.log("Connected!");
|
|
37124
|
-
this.reconnectAttempts = 0;
|
|
37125
|
-
this.config.onConnect();
|
|
37126
|
-
this.startPing();
|
|
37127
|
-
});
|
|
37128
|
-
ws.on("message", (data) => {
|
|
37129
|
-
this.handleMessage(data);
|
|
37130
|
-
});
|
|
37131
|
-
ws.on("close", (code) => {
|
|
37132
|
-
debug && this.log(`Disconnected (code: ${code})`);
|
|
37133
|
-
this.stopPing();
|
|
37134
|
-
this.config.onDisconnect(code);
|
|
37135
|
-
this.handleReconnect();
|
|
37136
|
-
});
|
|
37137
|
-
ws.on("error", (err) => {
|
|
37138
|
-
debug && this.log(`Error: ${err.message}`);
|
|
37139
|
-
this.config.onError(err);
|
|
37140
|
-
});
|
|
37141
|
-
}
|
|
33847
|
+
};
|
|
33848
|
+
var stopLive = (pm2Name) => {
|
|
33849
|
+
const stopCmd = `pm2 delete ${pm2Name} 2>/dev/null || true`;
|
|
33850
|
+
console.log("停止进程:", stopCmd);
|
|
33851
|
+
try {
|
|
33852
|
+
execSync(stopCmd, { stdio: "inherit" });
|
|
33853
|
+
console.log(`已停止 ${pm2Name} 的保持存活任务`);
|
|
33854
|
+
return true;
|
|
33855
|
+
} catch (error49) {
|
|
33856
|
+
console.error("停止进程失败:", error49);
|
|
37142
33857
|
}
|
|
37143
|
-
|
|
37144
|
-
|
|
37145
|
-
|
|
37146
|
-
|
|
37147
|
-
|
|
37148
|
-
|
|
37149
|
-
|
|
37150
|
-
|
|
33858
|
+
return false;
|
|
33859
|
+
};
|
|
33860
|
+
function getKeepAliveCache() {
|
|
33861
|
+
try {
|
|
33862
|
+
if (fs2.existsSync(keepAliveFilePath)) {
|
|
33863
|
+
const data = fs2.readFileSync(keepAliveFilePath, "utf-8");
|
|
33864
|
+
const cache = JSON.parse(data);
|
|
33865
|
+
return cache;
|
|
37151
33866
|
} else {
|
|
37152
|
-
|
|
37153
|
-
}
|
|
37154
|
-
}
|
|
37155
|
-
startPing() {
|
|
37156
|
-
this.stopPing();
|
|
37157
|
-
this.pingTimer = setInterval(() => {
|
|
37158
|
-
if (this.ws && this.ws.readyState === WebSocket2.OPEN) {
|
|
37159
|
-
this.ws.send(JSON.stringify({ type: "ping", timestamp: Date.now() }));
|
|
37160
|
-
this.log("Sent ping");
|
|
37161
|
-
}
|
|
37162
|
-
}, this.config.pingInterval);
|
|
37163
|
-
}
|
|
37164
|
-
stopPing() {
|
|
37165
|
-
if (this.pingTimer) {
|
|
37166
|
-
clearInterval(this.pingTimer);
|
|
37167
|
-
this.pingTimer = null;
|
|
33867
|
+
return { data: [] };
|
|
37168
33868
|
}
|
|
33869
|
+
} catch (error49) {
|
|
33870
|
+
console.error("读取保持存活缓存文件失败:", error49);
|
|
33871
|
+
return { data: [] };
|
|
37169
33872
|
}
|
|
37170
|
-
|
|
37171
|
-
|
|
37172
|
-
|
|
37173
|
-
|
|
37174
|
-
|
|
33873
|
+
}
|
|
33874
|
+
function addKeepAliveData(data) {
|
|
33875
|
+
const cache = getKeepAliveCache();
|
|
33876
|
+
cache.data.push(data);
|
|
33877
|
+
runLive(data.filePath, data.pm2Name);
|
|
33878
|
+
try {
|
|
33879
|
+
if (!fs2.existsSync(path2.dirname(keepAliveFilePath))) {
|
|
33880
|
+
fs2.mkdirSync(path2.dirname(keepAliveFilePath), { recursive: true });
|
|
37175
33881
|
}
|
|
37176
|
-
|
|
37177
|
-
|
|
37178
|
-
|
|
33882
|
+
fs2.writeFileSync(keepAliveFilePath, JSON.stringify(cache, null, 2), "utf-8");
|
|
33883
|
+
return cache;
|
|
33884
|
+
} catch (error49) {
|
|
33885
|
+
console.error("写入保持存活缓存文件失败:", error49);
|
|
33886
|
+
return { data: [] };
|
|
37179
33887
|
}
|
|
37180
|
-
|
|
37181
|
-
|
|
37182
|
-
|
|
33888
|
+
}
|
|
33889
|
+
function removeKeepAliveData(repo2, pipelineId) {
|
|
33890
|
+
const cache = getKeepAliveCache();
|
|
33891
|
+
const item = cache.data.find((item2) => item2.repo === repo2 && item2.pipelineId === pipelineId);
|
|
33892
|
+
if (item) {
|
|
33893
|
+
stopLive(item.pm2Name);
|
|
37183
33894
|
}
|
|
37184
|
-
|
|
37185
|
-
|
|
37186
|
-
|
|
37187
|
-
|
|
37188
|
-
|
|
37189
|
-
|
|
37190
|
-
}
|
|
33895
|
+
cache.data = cache.data.filter((item2) => item2.repo !== repo2 || item2.pipelineId !== pipelineId);
|
|
33896
|
+
try {
|
|
33897
|
+
fs2.writeFileSync(keepAliveFilePath, JSON.stringify(cache, null, 2), "utf-8");
|
|
33898
|
+
return cache;
|
|
33899
|
+
} catch (error49) {
|
|
33900
|
+
console.error("写入保持存活缓存文件失败:", error49);
|
|
33901
|
+
return { data: [] };
|
|
37191
33902
|
}
|
|
37192
33903
|
}
|
|
37193
|
-
|
|
37194
|
-
const
|
|
37195
|
-
|
|
37196
|
-
|
|
37197
|
-
}
|
|
33904
|
+
var createLiveData = (data) => {
|
|
33905
|
+
const { wsUrl, cookie, repo: repo2, pipelineId } = data;
|
|
33906
|
+
const createdTime = Date.now();
|
|
33907
|
+
const pm2Name = `${repo2}__${pipelineId}`.replace(/\//g, "__");
|
|
33908
|
+
const filePath = path2.join(os.homedir(), ".cnb", `${pm2Name}.json`);
|
|
33909
|
+
const _newData = { wss: wsUrl, wsUrl, cookie, repo: repo2, pipelineId, createdTime, filePath, pm2Name };
|
|
33910
|
+
if (!fs2.existsSync(path2.dirname(filePath))) {
|
|
33911
|
+
fs2.mkdirSync(path2.dirname(filePath), { recursive: true });
|
|
33912
|
+
}
|
|
33913
|
+
fs2.writeFileSync(filePath, JSON.stringify(_newData, null, 2), "utf-8");
|
|
33914
|
+
return _newData;
|
|
33915
|
+
};
|
|
33916
|
+
|
|
37198
33917
|
// agent/routes/workspace/keep.ts
|
|
37199
|
-
var keepAliveMap = new Map;
|
|
37200
33918
|
app.route({
|
|
37201
33919
|
path: "cnb",
|
|
37202
33920
|
key: "keep-workspace-alive",
|
|
37203
|
-
description: "
|
|
33921
|
+
description: "保持工作空间存活技能,参数repo:代码仓库路径,例如 user/repo,pipelineId:流水线ID,例如 cnb-708-1ji9sog7o-001",
|
|
37204
33922
|
middleware: ["admin-auth"],
|
|
37205
33923
|
metadata: {
|
|
37206
33924
|
tags: [],
|
|
37207
33925
|
...{
|
|
37208
33926
|
args: {
|
|
37209
|
-
|
|
37210
|
-
|
|
33927
|
+
repo: tool.schema.string().describe("代码仓库路径,例如 user/repo"),
|
|
33928
|
+
pipelineId: tool.schema.string().describe("流水线ID,例如 cnb-708-1ji9sog7o-001")
|
|
37211
33929
|
}
|
|
37212
33930
|
}
|
|
37213
33931
|
}
|
|
37214
33932
|
}).define(async (ctx) => {
|
|
37215
|
-
const
|
|
37216
|
-
const
|
|
37217
|
-
if (!
|
|
37218
|
-
ctx.throw(400, "
|
|
33933
|
+
const repo2 = ctx.query?.repo;
|
|
33934
|
+
const pipelineId = ctx.query?.pipelineId;
|
|
33935
|
+
if (!repo2 || !pipelineId) {
|
|
33936
|
+
ctx.throw(400, "缺少参数 repo 或 pipelineId");
|
|
37219
33937
|
}
|
|
37220
|
-
|
|
37221
|
-
|
|
33938
|
+
const validCookie = await cnb.user.checkCookieValid();
|
|
33939
|
+
if (validCookie.code !== 200) {
|
|
33940
|
+
ctx.throw(401, "CNB_COOKIE 环境变量无效或已过期,请重新登录获取新的cookie");
|
|
37222
33941
|
}
|
|
37223
|
-
const
|
|
37224
|
-
|
|
37225
|
-
|
|
37226
|
-
|
|
33942
|
+
const res = await cnb.workspace.getWorkspaceCookie(repo2, pipelineId);
|
|
33943
|
+
let wsUrl = `wss://${pipelineId}.cnb.space:443?skipWebSocketFrames=false`;
|
|
33944
|
+
let cookie = "";
|
|
33945
|
+
if (res.code === 200) {
|
|
33946
|
+
cookie = res.data.value;
|
|
33947
|
+
console.log(`启动保持工作空间 ${wsUrl} 存活的任务`);
|
|
33948
|
+
} else {
|
|
33949
|
+
ctx.throw(500, `获取工作空间访问cookie失败: ${res.message}`);
|
|
37227
33950
|
}
|
|
37228
33951
|
console.log(`启动保持工作空间 ${wsUrl} 存活的任务`);
|
|
37229
|
-
const
|
|
37230
|
-
|
|
37231
|
-
|
|
37232
|
-
onConnect: () => {
|
|
37233
|
-
console.log(`工作空间 ${wsUrl} 保持存活任务已连接`);
|
|
37234
|
-
},
|
|
37235
|
-
onMessage: (data) => {
|
|
37236
|
-
for (const info of keepAliveMap.values()) {
|
|
37237
|
-
if (info.KeepAlive?.wsUrl === wsUrl) {
|
|
37238
|
-
info.updatedTime = Date.now();
|
|
37239
|
-
break;
|
|
37240
|
-
}
|
|
37241
|
-
}
|
|
37242
|
-
},
|
|
37243
|
-
debug: true,
|
|
37244
|
-
onExit: (code) => {
|
|
37245
|
-
console.log(`工作空间 ${wsUrl} 保持存活任务已退出,退出码: ${code}`);
|
|
37246
|
-
for (const [id2, info] of keepAliveMap.entries()) {
|
|
37247
|
-
if (info.KeepAlive?.wsUrl === wsUrl) {
|
|
37248
|
-
keepAliveMap.delete(id2);
|
|
37249
|
-
break;
|
|
37250
|
-
}
|
|
37251
|
-
}
|
|
37252
|
-
}
|
|
37253
|
-
});
|
|
37254
|
-
const id = nanoid7(6).toLowerCase();
|
|
37255
|
-
keepAliveMap.set(id, { startTime: Date.now(), updatedTime: Date.now(), KeepAlive: keep, id });
|
|
37256
|
-
ctx.body = { content: `已启动保持工作空间 ${wsUrl} 存活的任务`, id };
|
|
37257
|
-
}).addTo(app);
|
|
37258
|
-
app.route({
|
|
37259
|
-
path: "cnb",
|
|
37260
|
-
key: "list-keep-alive-tasks",
|
|
37261
|
-
description: "获取保持工作空间存活任务列表技能",
|
|
37262
|
-
middleware: ["admin-auth"],
|
|
37263
|
-
metadata: {
|
|
37264
|
-
tags: []
|
|
37265
|
-
}
|
|
37266
|
-
}).define(async (ctx) => {
|
|
37267
|
-
const list = Array.from(keepAliveMap.entries()).map(([id, info]) => {
|
|
37268
|
-
const now = Date.now();
|
|
37269
|
-
const duration4 = Math.floor((now - info.startTime) / 60000);
|
|
37270
|
-
return {
|
|
37271
|
-
id,
|
|
37272
|
-
wsUrl: info.KeepAlive?.wsUrl,
|
|
37273
|
-
startTime: info.startTime,
|
|
37274
|
-
startTimeStr: import_dayjs.default(info.startTime).format("YYYY-MM-DD HH:mm"),
|
|
37275
|
-
updatedTime: info.updatedTime,
|
|
37276
|
-
updatedTimeStr: import_dayjs.default(info.updatedTime).format("YYYY-MM-DD HH:mm"),
|
|
37277
|
-
duration: duration4
|
|
37278
|
-
};
|
|
37279
|
-
});
|
|
37280
|
-
ctx.body = { list };
|
|
33952
|
+
const config4 = createLiveData({ wsUrl, cookie, repo: repo2, pipelineId });
|
|
33953
|
+
addKeepAliveData(config4);
|
|
33954
|
+
ctx.body = { content: `已启动保持工作空间 ${wsUrl} 存活的任务`, data: config4 };
|
|
37281
33955
|
}).addTo(app);
|
|
37282
33956
|
app.route({
|
|
37283
33957
|
path: "cnb",
|
|
37284
33958
|
key: "stop-keep-workspace-alive",
|
|
37285
|
-
description: "停止保持工作空间存活技能, 参数
|
|
33959
|
+
description: "停止保持工作空间存活技能, 参数repo:代码仓库路径,例如 user/repo,pipelineId:流水线ID,例如 cnb-708-1ji9sog7o-001",
|
|
37286
33960
|
middleware: ["admin-auth"],
|
|
37287
33961
|
metadata: {
|
|
37288
33962
|
tags: [],
|
|
37289
33963
|
...{
|
|
37290
33964
|
args: {
|
|
37291
|
-
|
|
37292
|
-
|
|
37293
|
-
}
|
|
37294
|
-
}
|
|
37295
|
-
}
|
|
37296
|
-
}).define(async (ctx) => {
|
|
37297
|
-
const wsUrl = ctx.query?.wsUrl;
|
|
37298
|
-
const id = ctx.query?.id;
|
|
37299
|
-
if (!wsUrl && !id) {
|
|
37300
|
-
ctx.throw(400, "缺少工作空间访问URL参数或唯一标识符");
|
|
37301
|
-
}
|
|
37302
|
-
let targetId;
|
|
37303
|
-
let wsUrlFound;
|
|
37304
|
-
if (id) {
|
|
37305
|
-
const info = keepAliveMap.get(id);
|
|
37306
|
-
if (info) {
|
|
37307
|
-
targetId = id;
|
|
37308
|
-
wsUrlFound = info.KeepAlive?.wsUrl;
|
|
37309
|
-
}
|
|
37310
|
-
} else if (wsUrl) {
|
|
37311
|
-
for (const [key, info] of keepAliveMap.entries()) {
|
|
37312
|
-
if (info.KeepAlive?.wsUrl === wsUrl) {
|
|
37313
|
-
targetId = key;
|
|
37314
|
-
wsUrlFound = wsUrl;
|
|
37315
|
-
break;
|
|
33965
|
+
repo: tool.schema.string().describe("代码仓库路径,例如 user/repo"),
|
|
33966
|
+
pipelineId: tool.schema.string().describe("流水线ID,例如 cnb-708-1ji9sog7o-001")
|
|
37316
33967
|
}
|
|
37317
33968
|
}
|
|
37318
33969
|
}
|
|
37319
|
-
if (targetId) {
|
|
37320
|
-
const keepAlive = keepAliveMap.get(targetId);
|
|
37321
|
-
const endTime = Date.now();
|
|
37322
|
-
const duration4 = endTime - keepAlive.startTime;
|
|
37323
|
-
keepAlive?.KeepAlive?.disconnect();
|
|
37324
|
-
keepAliveMap.delete(targetId);
|
|
37325
|
-
ctx.body = { content: `已停止保持工作空间 ${wsUrlFound} 存活的任务,持续时间: ${duration4}ms`, id: targetId };
|
|
37326
|
-
} else {
|
|
37327
|
-
ctx.body = { content: `没有找到对应的工作空间保持存活任务` };
|
|
37328
|
-
}
|
|
37329
|
-
}).addTo(app);
|
|
37330
|
-
app.route({
|
|
37331
|
-
path: "cnb",
|
|
37332
|
-
key: "reset-keep-workspace-alive",
|
|
37333
|
-
description: "对存活的工作空间,startTime进行重置",
|
|
37334
|
-
middleware: ["admin-auth"],
|
|
37335
|
-
metadata: {
|
|
37336
|
-
tags: []
|
|
37337
|
-
}
|
|
37338
33970
|
}).define(async (ctx) => {
|
|
37339
|
-
const
|
|
37340
|
-
|
|
37341
|
-
|
|
37342
|
-
|
|
37343
|
-
ctx.body = { content: `已重置所有存活工作空间的开始时间` };
|
|
37344
|
-
}).addTo(app);
|
|
37345
|
-
app.route({
|
|
37346
|
-
path: "cnb",
|
|
37347
|
-
key: "clear-keep-workspace-alive",
|
|
37348
|
-
description: "对存活的工作空间,超过5小时的进行清理",
|
|
37349
|
-
middleware: ["admin-auth"],
|
|
37350
|
-
metadata: {
|
|
37351
|
-
tags: []
|
|
33971
|
+
const repo2 = ctx.query?.repo;
|
|
33972
|
+
const pipelineId = ctx.query?.pipelineId;
|
|
33973
|
+
if (!repo2 || !pipelineId) {
|
|
33974
|
+
ctx.throw(400, "缺少参数 repo 或 pipelineId");
|
|
37352
33975
|
}
|
|
37353
|
-
|
|
37354
|
-
|
|
37355
|
-
ctx.body = {
|
|
37356
|
-
content: `已清理所有存活工作空间中超过5小时的任务` + (res.length ? `,清理项:${res.map((i) => i.wsUrl).join(", ")}` : ""),
|
|
37357
|
-
list: res
|
|
37358
|
-
};
|
|
33976
|
+
removeKeepAliveData(repo2, pipelineId);
|
|
33977
|
+
ctx.body = { content: `已停止保持工作空间 ${repo2}/${pipelineId} 存活的任务` };
|
|
37359
33978
|
}).addTo(app);
|
|
37360
|
-
var clearKeepAlive = () => {
|
|
37361
|
-
const now = Date.now();
|
|
37362
|
-
let clearedArr = [];
|
|
37363
|
-
for (const [id, info] of keepAliveMap.entries()) {
|
|
37364
|
-
if (now - info.startTime > FIVE_HOURS) {
|
|
37365
|
-
console.log(`工作空间 ${info.KeepAlive?.wsUrl} 超过5小时,自动停止`);
|
|
37366
|
-
info.KeepAlive?.disconnect?.();
|
|
37367
|
-
keepAliveMap.delete(id);
|
|
37368
|
-
clearedArr.push({ id, wsUrl: info.KeepAlive?.wsUrl });
|
|
37369
|
-
}
|
|
37370
|
-
}
|
|
37371
|
-
return clearedArr;
|
|
37372
|
-
};
|
|
37373
|
-
var FIVE_HOURS = 5 * 60 * 60 * 1000;
|
|
37374
|
-
setInterval(() => {
|
|
37375
|
-
clearKeepAlive();
|
|
37376
|
-
}, FIVE_HOURS);
|
|
37377
33979
|
|
|
37378
33980
|
// agent/routes/workspace/index.ts
|
|
37379
33981
|
app.route({
|
|
@@ -37550,12 +34152,12 @@ if (!app.hasRoute("call")) {
|
|
|
37550
34152
|
})
|
|
37551
34153
|
}
|
|
37552
34154
|
}).define(async (ctx) => {
|
|
37553
|
-
const { path:
|
|
34155
|
+
const { path: path3, key } = ctx.query;
|
|
37554
34156
|
console.log("call app", ctx.query);
|
|
37555
|
-
if (!
|
|
34157
|
+
if (!path3) {
|
|
37556
34158
|
ctx.throw("路径path不能为空");
|
|
37557
34159
|
}
|
|
37558
|
-
const res = await ctx.run({ path:
|
|
34160
|
+
const res = await ctx.run({ path: path3, key, payload: ctx.query.payload || {} });
|
|
37559
34161
|
ctx.forward(res);
|
|
37560
34162
|
}).addTo(app);
|
|
37561
34163
|
}
|
|
@@ -37711,17 +34313,17 @@ app.route({
|
|
|
37711
34313
|
}).addTo(app);
|
|
37712
34314
|
|
|
37713
34315
|
// node_modules/.pnpm/@kevisual+ai@0.0.24/node_modules/@kevisual/ai/dist/ai-provider-browser.js
|
|
37714
|
-
var
|
|
37715
|
-
var
|
|
34316
|
+
var __create3 = Object.create;
|
|
34317
|
+
var __getProtoOf3 = Object.getPrototypeOf;
|
|
37716
34318
|
var __defProp4 = Object.defineProperty;
|
|
37717
|
-
var
|
|
34319
|
+
var __getOwnPropNames3 = Object.getOwnPropertyNames;
|
|
37718
34320
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
37719
|
-
var
|
|
37720
|
-
var
|
|
37721
|
-
target = mod != null ?
|
|
34321
|
+
var __hasOwnProp3 = Object.prototype.hasOwnProperty;
|
|
34322
|
+
var __toESM3 = (mod, isNodeMode, target) => {
|
|
34323
|
+
target = mod != null ? __create3(__getProtoOf3(mod)) : {};
|
|
37722
34324
|
const to = isNodeMode || !mod || !mod.__esModule ? __defProp4(target, "default", { value: mod, enumerable: true }) : target;
|
|
37723
|
-
for (let key of
|
|
37724
|
-
if (!
|
|
34325
|
+
for (let key of __getOwnPropNames3(mod))
|
|
34326
|
+
if (!__hasOwnProp3.call(to, key))
|
|
37725
34327
|
__defProp4(to, key, {
|
|
37726
34328
|
get: () => mod[key],
|
|
37727
34329
|
enumerable: true
|
|
@@ -37735,14 +34337,14 @@ var __toCommonJS = (from) => {
|
|
|
37735
34337
|
return entry;
|
|
37736
34338
|
entry = __defProp4({}, "__esModule", { value: true });
|
|
37737
34339
|
if (from && typeof from === "object" || typeof from === "function")
|
|
37738
|
-
|
|
34340
|
+
__getOwnPropNames3(from).map((key) => !__hasOwnProp3.call(entry, key) && __defProp4(entry, key, {
|
|
37739
34341
|
get: () => from[key],
|
|
37740
34342
|
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
37741
34343
|
}));
|
|
37742
34344
|
__moduleCache.set(from, entry);
|
|
37743
34345
|
return entry;
|
|
37744
34346
|
};
|
|
37745
|
-
var
|
|
34347
|
+
var __commonJS3 = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
|
|
37746
34348
|
var __export3 = (target, all) => {
|
|
37747
34349
|
for (var name in all)
|
|
37748
34350
|
__defProp4(target, name, {
|
|
@@ -37752,7 +34354,7 @@ var __export3 = (target, all) => {
|
|
|
37752
34354
|
set: (newValue) => all[name] = () => newValue
|
|
37753
34355
|
});
|
|
37754
34356
|
};
|
|
37755
|
-
var
|
|
34357
|
+
var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
37756
34358
|
var exports_buffer = {};
|
|
37757
34359
|
__export3(exports_buffer, {
|
|
37758
34360
|
transcode: () => transcode,
|
|
@@ -38467,7 +35069,7 @@ var isAscii = (str) => {
|
|
|
38467
35069
|
};
|
|
38468
35070
|
var transcode;
|
|
38469
35071
|
var buffer_default;
|
|
38470
|
-
var init_buffer =
|
|
35072
|
+
var init_buffer = __esm(() => {
|
|
38471
35073
|
lookup = [];
|
|
38472
35074
|
revLookup = [];
|
|
38473
35075
|
for (i = 0, len = code.length;i < len; ++i)
|
|
@@ -39461,7 +36063,7 @@ var promisify;
|
|
|
39461
36063
|
var TextEncoder;
|
|
39462
36064
|
var TextDecoder2;
|
|
39463
36065
|
var util_default;
|
|
39464
|
-
var init_util =
|
|
36066
|
+
var init_util = __esm(() => {
|
|
39465
36067
|
formatRegExp = /%[sdj%]/g;
|
|
39466
36068
|
debuglog = ((debugs = {}, debugEnvRegex = {}, debugEnv) => ((debugEnv = typeof process < "u" && false) && (debugEnv = debugEnv.replace(/[|\\{}()[\]^$+?.]/g, "\\$&").replace(/\*/g, ".*").replace(/,/g, "$|^").toUpperCase()), debugEnvRegex = new RegExp("^" + debugEnv + "$", "i"), (set3) => {
|
|
39467
36069
|
if (set3 = set3.toUpperCase(), !debugs[set3])
|
|
@@ -39761,7 +36363,7 @@ var emitWithRejectionCapture = function(type2, ...args) {
|
|
|
39761
36363
|
};
|
|
39762
36364
|
var AbortError;
|
|
39763
36365
|
var events_default;
|
|
39764
|
-
var init_events =
|
|
36366
|
+
var init_events = __esm(() => {
|
|
39765
36367
|
SymbolFor = Symbol.for;
|
|
39766
36368
|
kCapture = Symbol("kCapture");
|
|
39767
36369
|
kErrorMonitor = SymbolFor("events.errorMonitor");
|
|
@@ -39912,7 +36514,7 @@ var init_events = __esm2(() => {
|
|
|
39912
36514
|
Object.assign(EventEmitter3, { once: once2, getEventListeners, getMaxListeners: getMaxListeners2, setMaxListeners: setMaxListeners2, EventEmitter: EventEmitter3, usingDomains: false, captureRejectionSymbol, errorMonitor: kErrorMonitor, addAbortListener, init: EventEmitter3, listenerCount: listenerCount2 });
|
|
39913
36515
|
events_default = EventEmitter3;
|
|
39914
36516
|
});
|
|
39915
|
-
var
|
|
36517
|
+
var require_stream2 = __commonJS3((exports, module) => {
|
|
39916
36518
|
var __commonJS22 = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
|
|
39917
36519
|
var require_primordials = __commonJS22((exports2, module2) => {
|
|
39918
36520
|
|
|
@@ -43821,7 +40423,7 @@ var require_stream3 = __commonJS4((exports, module) => {
|
|
|
43821
40423
|
};
|
|
43822
40424
|
});
|
|
43823
40425
|
var require_ours = __commonJS22((exports2, module2) => {
|
|
43824
|
-
var Stream =
|
|
40426
|
+
var Stream = require_stream2();
|
|
43825
40427
|
{
|
|
43826
40428
|
let CustomStream = require_stream22(), promises = require_promises(), originalDestroy = CustomStream.Readable.destroy;
|
|
43827
40429
|
module2.exports = CustomStream.Readable, module2.exports._uint8ArrayToBuffer = CustomStream._uint8ArrayToBuffer, module2.exports._isUint8Array = CustomStream._isUint8Array, module2.exports.isDisturbed = CustomStream.isDisturbed, module2.exports.isErrored = CustomStream.isErrored, module2.exports.isReadable = CustomStream.isReadable, module2.exports.Readable = CustomStream.Readable, module2.exports.Writable = CustomStream.Writable, module2.exports.Duplex = CustomStream.Duplex, module2.exports.Transform = CustomStream.Transform, module2.exports.PassThrough = CustomStream.PassThrough, module2.exports.addAbortSignal = CustomStream.addAbortSignal, module2.exports.finished = CustomStream.finished, module2.exports.destroy = CustomStream.destroy, module2.exports.destroy = originalDestroy, module2.exports.pipeline = CustomStream.pipeline, module2.exports.compose = CustomStream.compose, Object.defineProperty(CustomStream, "promises", { configurable: true, enumerable: true, get() {
|
|
@@ -44006,7 +40608,7 @@ var require_buffer;
|
|
|
44006
40608
|
var require_node;
|
|
44007
40609
|
var require_base2;
|
|
44008
40610
|
var require_der;
|
|
44009
|
-
var
|
|
40611
|
+
var require_constants2;
|
|
44010
40612
|
var require_der2;
|
|
44011
40613
|
var require_pem;
|
|
44012
40614
|
var require_decoders;
|
|
@@ -44086,7 +40688,7 @@ var randomUUID = () => {
|
|
|
44086
40688
|
var hardcoded_curves;
|
|
44087
40689
|
var webcrypto;
|
|
44088
40690
|
var crypto_default;
|
|
44089
|
-
var init_crypto =
|
|
40691
|
+
var init_crypto = __esm(() => {
|
|
44090
40692
|
__create22 = Object.create;
|
|
44091
40693
|
({ getPrototypeOf: __getProtoOf22, defineProperty: __defProp22, getOwnPropertyNames: __getOwnPropNames22 } = Object);
|
|
44092
40694
|
__hasOwnProp22 = Object.prototype.hasOwnProperty;
|
|
@@ -51635,8 +48237,8 @@ var init_crypto = __esm2(() => {
|
|
|
51635
48237
|
return result;
|
|
51636
48238
|
return { result: this.isError(result) ? null : result, errors: state.errors };
|
|
51637
48239
|
};
|
|
51638
|
-
function ReporterError(
|
|
51639
|
-
this.path =
|
|
48240
|
+
function ReporterError(path3, msg) {
|
|
48241
|
+
this.path = path3, this.rethrow(msg);
|
|
51640
48242
|
}
|
|
51641
48243
|
inherits2(ReporterError, Error);
|
|
51642
48244
|
ReporterError.prototype.rethrow = function(msg) {
|
|
@@ -52086,13 +48688,13 @@ var init_crypto = __esm2(() => {
|
|
|
52086
48688
|
base.Node = require_node();
|
|
52087
48689
|
});
|
|
52088
48690
|
require_der = __commonJS22((exports) => {
|
|
52089
|
-
var constants22 =
|
|
48691
|
+
var constants22 = require_constants2();
|
|
52090
48692
|
exports.tagClass = { 0: "universal", 1: "application", 2: "context", 3: "private" };
|
|
52091
48693
|
exports.tagClassByName = constants22._reverse(exports.tagClass);
|
|
52092
48694
|
exports.tag = { 0: "end", 1: "bool", 2: "int", 3: "bitstr", 4: "octstr", 5: "null_", 6: "objid", 7: "objDesc", 8: "external", 9: "real", 10: "enum", 11: "embed", 12: "utf8str", 13: "relativeOid", 16: "seq", 17: "set", 18: "numstr", 19: "printstr", 20: "t61str", 21: "videostr", 22: "ia5str", 23: "utctime", 24: "gentime", 25: "graphstr", 26: "iso646str", 27: "genstr", 28: "unistr", 29: "charstr", 30: "bmpstr" };
|
|
52093
48695
|
exports.tagByName = constants22._reverse(exports.tag);
|
|
52094
48696
|
});
|
|
52095
|
-
|
|
48697
|
+
require_constants2 = __commonJS22((exports) => {
|
|
52096
48698
|
var constants22 = exports;
|
|
52097
48699
|
constants22._reverse = function(map3) {
|
|
52098
48700
|
var res = {};
|
|
@@ -52555,7 +49157,7 @@ var init_crypto = __esm2(() => {
|
|
|
52555
49157
|
asn1.bignum = require_bn3();
|
|
52556
49158
|
asn1.define = require_api().define;
|
|
52557
49159
|
asn1.base = require_base2();
|
|
52558
|
-
asn1.constants =
|
|
49160
|
+
asn1.constants = require_constants2();
|
|
52559
49161
|
asn1.decoders = require_decoders();
|
|
52560
49162
|
asn1.encoders = require_encoders();
|
|
52561
49163
|
});
|
|
@@ -52631,7 +49233,7 @@ var init_crypto = __esm2(() => {
|
|
|
52631
49233
|
module.exports = { "2.16.840.1.101.3.4.1.1": "aes-128-ecb", "2.16.840.1.101.3.4.1.2": "aes-128-cbc", "2.16.840.1.101.3.4.1.3": "aes-128-ofb", "2.16.840.1.101.3.4.1.4": "aes-128-cfb", "2.16.840.1.101.3.4.1.21": "aes-192-ecb", "2.16.840.1.101.3.4.1.22": "aes-192-cbc", "2.16.840.1.101.3.4.1.23": "aes-192-ofb", "2.16.840.1.101.3.4.1.24": "aes-192-cfb", "2.16.840.1.101.3.4.1.41": "aes-256-ecb", "2.16.840.1.101.3.4.1.42": "aes-256-cbc", "2.16.840.1.101.3.4.1.43": "aes-256-ofb", "2.16.840.1.101.3.4.1.44": "aes-256-cfb" };
|
|
52632
49234
|
});
|
|
52633
49235
|
require_hash_base = __commonJS22((exports, module) => {
|
|
52634
|
-
var Buffer22 = require_safe_buffer().Buffer, Transform =
|
|
49236
|
+
var Buffer22 = require_safe_buffer().Buffer, Transform = require_stream2().Transform, inherits2 = require_inherits();
|
|
52635
49237
|
function HashBase(blockSize) {
|
|
52636
49238
|
Transform.call(this), this._block = Buffer22.allocUnsafe(blockSize), this._blockSize = blockSize, this._blockOffset = 0, this._length = [0, 0, 0, 0], this._finalized = false;
|
|
52637
49239
|
}
|
|
@@ -56067,7 +52669,7 @@ https://github.com/browserify/crypto-browserify`);
|
|
|
56067
52669
|
webcrypto = crypto;
|
|
56068
52670
|
crypto_default = crypto;
|
|
56069
52671
|
});
|
|
56070
|
-
var require_core =
|
|
52672
|
+
var require_core = __commonJS3((exports, module) => {
|
|
56071
52673
|
(function(root, factory) {
|
|
56072
52674
|
if (typeof exports === "object") {
|
|
56073
52675
|
module.exports = exports = factory();
|
|
@@ -56350,7 +52952,7 @@ var require_core = __commonJS4((exports, module) => {
|
|
|
56350
52952
|
return CryptoJS;
|
|
56351
52953
|
});
|
|
56352
52954
|
});
|
|
56353
|
-
var require_enc_base64 =
|
|
52955
|
+
var require_enc_base64 = __commonJS3((exports, module) => {
|
|
56354
52956
|
(function(root, factory) {
|
|
56355
52957
|
if (typeof exports === "object") {
|
|
56356
52958
|
module.exports = exports = factory(require_core());
|
|
@@ -56428,7 +53030,7 @@ var require_enc_base64 = __commonJS4((exports, module) => {
|
|
|
56428
53030
|
return CryptoJS.enc.Base64;
|
|
56429
53031
|
});
|
|
56430
53032
|
});
|
|
56431
|
-
var require_md52 =
|
|
53033
|
+
var require_md52 = __commonJS3((exports, module) => {
|
|
56432
53034
|
(function(root, factory) {
|
|
56433
53035
|
if (typeof exports === "object") {
|
|
56434
53036
|
module.exports = exports = factory(require_core());
|
|
@@ -56603,7 +53205,7 @@ var require_md52 = __commonJS4((exports, module) => {
|
|
|
56603
53205
|
return CryptoJS.MD5;
|
|
56604
53206
|
});
|
|
56605
53207
|
});
|
|
56606
|
-
var require_sha1 =
|
|
53208
|
+
var require_sha1 = __commonJS3((exports, module) => {
|
|
56607
53209
|
(function(root, factory) {
|
|
56608
53210
|
if (typeof exports === "object") {
|
|
56609
53211
|
module.exports = exports = factory(require_core());
|
|
@@ -56690,7 +53292,7 @@ var require_sha1 = __commonJS4((exports, module) => {
|
|
|
56690
53292
|
return CryptoJS.SHA1;
|
|
56691
53293
|
});
|
|
56692
53294
|
});
|
|
56693
|
-
var require_hmac2 =
|
|
53295
|
+
var require_hmac2 = __commonJS3((exports, module) => {
|
|
56694
53296
|
(function(root, factory) {
|
|
56695
53297
|
if (typeof exports === "object") {
|
|
56696
53298
|
module.exports = exports = factory(require_core());
|
|
@@ -56750,7 +53352,7 @@ var require_hmac2 = __commonJS4((exports, module) => {
|
|
|
56750
53352
|
})();
|
|
56751
53353
|
});
|
|
56752
53354
|
});
|
|
56753
|
-
var require_evpkdf =
|
|
53355
|
+
var require_evpkdf = __commonJS3((exports, module) => {
|
|
56754
53356
|
(function(root, factory, undef) {
|
|
56755
53357
|
if (typeof exports === "object") {
|
|
56756
53358
|
module.exports = exports = factory(require_core(), require_sha1(), require_hmac2());
|
|
@@ -56807,7 +53409,7 @@ var require_evpkdf = __commonJS4((exports, module) => {
|
|
|
56807
53409
|
return CryptoJS.EvpKDF;
|
|
56808
53410
|
});
|
|
56809
53411
|
});
|
|
56810
|
-
var require_cipher_core =
|
|
53412
|
+
var require_cipher_core = __commonJS3((exports, module) => {
|
|
56811
53413
|
(function(root, factory, undef) {
|
|
56812
53414
|
if (typeof exports === "object") {
|
|
56813
53415
|
module.exports = exports = factory(require_core(), require_evpkdf());
|
|
@@ -57103,7 +53705,7 @@ var require_cipher_core = __commonJS4((exports, module) => {
|
|
|
57103
53705
|
}();
|
|
57104
53706
|
});
|
|
57105
53707
|
});
|
|
57106
|
-
var require_aes =
|
|
53708
|
+
var require_aes = __commonJS3((exports, module) => {
|
|
57107
53709
|
(function(root, factory, undef) {
|
|
57108
53710
|
if (typeof exports === "object") {
|
|
57109
53711
|
module.exports = exports = factory(require_core(), require_enc_base64(), require_md52(), require_evpkdf(), require_cipher_core());
|
|
@@ -57253,7 +53855,7 @@ var require_aes = __commonJS4((exports, module) => {
|
|
|
57253
53855
|
return CryptoJS.AES;
|
|
57254
53856
|
});
|
|
57255
53857
|
});
|
|
57256
|
-
var require_enc_utf8 =
|
|
53858
|
+
var require_enc_utf8 = __commonJS3((exports, module) => {
|
|
57257
53859
|
(function(root, factory) {
|
|
57258
53860
|
if (typeof exports === "object") {
|
|
57259
53861
|
module.exports = exports = factory(require_core());
|
|
@@ -57556,8 +54158,8 @@ class CNBChat extends BaseChat {
|
|
|
57556
54158
|
};
|
|
57557
54159
|
}
|
|
57558
54160
|
}
|
|
57559
|
-
var import_aes =
|
|
57560
|
-
var import_enc_utf8 =
|
|
54161
|
+
var import_aes = __toESM3(require_aes(), 1);
|
|
54162
|
+
var import_enc_utf8 = __toESM3(require_enc_utf8(), 1);
|
|
57561
54163
|
var CryptoJS = { AES: import_aes.default, enc: { Utf8: import_enc_utf8.default } };
|
|
57562
54164
|
|
|
57563
54165
|
// agent/routes/knowledge/ai.ts
|
|
@@ -57882,24 +54484,24 @@ if (!app.hasRoute("auth")) {
|
|
|
57882
54484
|
}
|
|
57883
54485
|
|
|
57884
54486
|
// node_modules/.pnpm/@kevisual+router@0.0.84/node_modules/@kevisual/router/dist/opencode.js
|
|
57885
|
-
import { webcrypto as
|
|
57886
|
-
var
|
|
57887
|
-
var
|
|
54487
|
+
import { webcrypto as crypto3 } from "node:crypto";
|
|
54488
|
+
var __create4 = Object.create;
|
|
54489
|
+
var __getProtoOf4 = Object.getPrototypeOf;
|
|
57888
54490
|
var __defProp5 = Object.defineProperty;
|
|
57889
|
-
var
|
|
57890
|
-
var
|
|
57891
|
-
var
|
|
57892
|
-
target = mod != null ?
|
|
54491
|
+
var __getOwnPropNames4 = Object.getOwnPropertyNames;
|
|
54492
|
+
var __hasOwnProp4 = Object.prototype.hasOwnProperty;
|
|
54493
|
+
var __toESM4 = (mod, isNodeMode, target) => {
|
|
54494
|
+
target = mod != null ? __create4(__getProtoOf4(mod)) : {};
|
|
57893
54495
|
const to = isNodeMode || !mod || !mod.__esModule ? __defProp5(target, "default", { value: mod, enumerable: true }) : target;
|
|
57894
|
-
for (let key of
|
|
57895
|
-
if (!
|
|
54496
|
+
for (let key of __getOwnPropNames4(mod))
|
|
54497
|
+
if (!__hasOwnProp4.call(to, key))
|
|
57896
54498
|
__defProp5(to, key, {
|
|
57897
54499
|
get: () => mod[key],
|
|
57898
54500
|
enumerable: true
|
|
57899
54501
|
});
|
|
57900
54502
|
return to;
|
|
57901
54503
|
};
|
|
57902
|
-
var
|
|
54504
|
+
var __commonJS4 = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
|
|
57903
54505
|
var __export4 = (target, all) => {
|
|
57904
54506
|
for (var name in all)
|
|
57905
54507
|
__defProp5(target, name, {
|
|
@@ -57909,7 +54511,7 @@ var __export4 = (target, all) => {
|
|
|
57909
54511
|
set: (newValue) => all[name] = () => newValue
|
|
57910
54512
|
});
|
|
57911
54513
|
};
|
|
57912
|
-
var require_eventemitter32 =
|
|
54514
|
+
var require_eventemitter32 = __commonJS4((exports, module) => {
|
|
57913
54515
|
var has = Object.prototype.hasOwnProperty;
|
|
57914
54516
|
var prefix = "~";
|
|
57915
54517
|
function Events() {}
|
|
@@ -58637,7 +55239,7 @@ class InitEnv3 {
|
|
|
58637
55239
|
}
|
|
58638
55240
|
}
|
|
58639
55241
|
InitEnv3.init();
|
|
58640
|
-
var import__2 =
|
|
55242
|
+
var import__2 = __toESM4(require_eventemitter32(), 1);
|
|
58641
55243
|
var exports_external3 = {};
|
|
58642
55244
|
__export4(exports_external3, {
|
|
58643
55245
|
xor: () => xor3,
|
|
@@ -59397,10 +55999,10 @@ function mergeDefs3(...defs) {
|
|
|
59397
55999
|
function cloneDef3(schema) {
|
|
59398
56000
|
return mergeDefs3(schema._zod.def);
|
|
59399
56001
|
}
|
|
59400
|
-
function getElementAtPath3(obj,
|
|
59401
|
-
if (!
|
|
56002
|
+
function getElementAtPath3(obj, path3) {
|
|
56003
|
+
if (!path3)
|
|
59402
56004
|
return obj;
|
|
59403
|
-
return
|
|
56005
|
+
return path3.reduce((acc, key) => acc?.[key], obj);
|
|
59404
56006
|
}
|
|
59405
56007
|
function promiseAllObject3(promisesObj) {
|
|
59406
56008
|
const keys = Object.keys(promisesObj);
|
|
@@ -59781,11 +56383,11 @@ function aborted3(x, startIndex = 0) {
|
|
|
59781
56383
|
}
|
|
59782
56384
|
return false;
|
|
59783
56385
|
}
|
|
59784
|
-
function prefixIssues3(
|
|
56386
|
+
function prefixIssues3(path3, issues) {
|
|
59785
56387
|
return issues.map((iss) => {
|
|
59786
56388
|
var _a3;
|
|
59787
56389
|
(_a3 = iss).path ?? (_a3.path = []);
|
|
59788
|
-
iss.path.unshift(
|
|
56390
|
+
iss.path.unshift(path3);
|
|
59789
56391
|
return iss;
|
|
59790
56392
|
});
|
|
59791
56393
|
}
|
|
@@ -59966,7 +56568,7 @@ function formatError4(error49, mapper = (issue22) => issue22.message) {
|
|
|
59966
56568
|
}
|
|
59967
56569
|
function treeifyError3(error49, mapper = (issue22) => issue22.message) {
|
|
59968
56570
|
const result = { errors: [] };
|
|
59969
|
-
const processError = (error210,
|
|
56571
|
+
const processError = (error210, path3 = []) => {
|
|
59970
56572
|
var _a3, _b;
|
|
59971
56573
|
for (const issue22 of error210.issues) {
|
|
59972
56574
|
if (issue22.code === "invalid_union" && issue22.errors.length) {
|
|
@@ -59976,7 +56578,7 @@ function treeifyError3(error49, mapper = (issue22) => issue22.message) {
|
|
|
59976
56578
|
} else if (issue22.code === "invalid_element") {
|
|
59977
56579
|
processError({ issues: issue22.issues }, issue22.path);
|
|
59978
56580
|
} else {
|
|
59979
|
-
const fullpath = [...
|
|
56581
|
+
const fullpath = [...path3, ...issue22.path];
|
|
59980
56582
|
if (fullpath.length === 0) {
|
|
59981
56583
|
result.errors.push(mapper(issue22));
|
|
59982
56584
|
continue;
|
|
@@ -60008,8 +56610,8 @@ function treeifyError3(error49, mapper = (issue22) => issue22.message) {
|
|
|
60008
56610
|
}
|
|
60009
56611
|
function toDotPath3(_path) {
|
|
60010
56612
|
const segs = [];
|
|
60011
|
-
const
|
|
60012
|
-
for (const seg of
|
|
56613
|
+
const path3 = _path.map((seg) => typeof seg === "object" ? seg.key : seg);
|
|
56614
|
+
for (const seg of path3) {
|
|
60013
56615
|
if (typeof seg === "number")
|
|
60014
56616
|
segs.push(`[${seg}]`);
|
|
60015
56617
|
else if (typeof seg === "symbol")
|
|
@@ -60149,7 +56751,7 @@ __export4(exports_regexes3, {
|
|
|
60149
56751
|
rfc5322Email: () => rfc5322Email3,
|
|
60150
56752
|
number: () => number8,
|
|
60151
56753
|
null: () => _null8,
|
|
60152
|
-
nanoid: () =>
|
|
56754
|
+
nanoid: () => nanoid7,
|
|
60153
56755
|
md5_hex: () => md5_hex3,
|
|
60154
56756
|
md5_base64url: () => md5_base64url3,
|
|
60155
56757
|
md5_base64: () => md5_base643,
|
|
@@ -60187,7 +56789,7 @@ var cuid26 = /^[0-9a-z]+$/;
|
|
|
60187
56789
|
var ulid6 = /^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/;
|
|
60188
56790
|
var xid6 = /^[0-9a-vA-V]{20}$/;
|
|
60189
56791
|
var ksuid6 = /^[A-Za-z0-9]{27}$/;
|
|
60190
|
-
var
|
|
56792
|
+
var nanoid7 = /^[a-zA-Z0-9_-]{21}$/;
|
|
60191
56793
|
var duration6 = /^P(?:(\d+W)|(?!.*W)(?=\d|T\d)(\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+([.,]\d+)?S)?)?)$/;
|
|
60192
56794
|
var extendedDuration3 = /^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/;
|
|
60193
56795
|
var guid6 = /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/;
|
|
@@ -61079,7 +57681,7 @@ var $ZodEmoji3 = /* @__PURE__ */ $constructor3("$ZodEmoji", (inst, def) => {
|
|
|
61079
57681
|
$ZodStringFormat3.init(inst, def);
|
|
61080
57682
|
});
|
|
61081
57683
|
var $ZodNanoID3 = /* @__PURE__ */ $constructor3("$ZodNanoID", (inst, def) => {
|
|
61082
|
-
def.pattern ?? (def.pattern =
|
|
57684
|
+
def.pattern ?? (def.pattern = nanoid7);
|
|
61083
57685
|
$ZodStringFormat3.init(inst, def);
|
|
61084
57686
|
});
|
|
61085
57687
|
var $ZodCUID5 = /* @__PURE__ */ $constructor3("$ZodCUID", (inst, def) => {
|
|
@@ -71675,13 +68277,13 @@ function resolveRef3(ref, ctx) {
|
|
|
71675
68277
|
if (!ref.startsWith("#")) {
|
|
71676
68278
|
throw new Error("External $ref is not supported, only local refs (#/...) are allowed");
|
|
71677
68279
|
}
|
|
71678
|
-
const
|
|
71679
|
-
if (
|
|
68280
|
+
const path3 = ref.slice(1).split("/").filter(Boolean);
|
|
68281
|
+
if (path3.length === 0) {
|
|
71680
68282
|
return ctx.rootSchema;
|
|
71681
68283
|
}
|
|
71682
68284
|
const defsKey = ctx.version === "draft-2020-12" ? "$defs" : "definitions";
|
|
71683
|
-
if (
|
|
71684
|
-
const key =
|
|
68285
|
+
if (path3[0] === defsKey) {
|
|
68286
|
+
const key = path3[1];
|
|
71685
68287
|
if (!key || !ctx.defs[key]) {
|
|
71686
68288
|
throw new Error(`Reference not found: ${ref}`);
|
|
71687
68289
|
}
|
|
@@ -72078,23 +68680,23 @@ function date42(params) {
|
|
|
72078
68680
|
return _coercedDate3(ZodDate3, params);
|
|
72079
68681
|
}
|
|
72080
68682
|
config4(en_default3());
|
|
72081
|
-
var
|
|
72082
|
-
var
|
|
72083
|
-
var
|
|
72084
|
-
function
|
|
72085
|
-
if (!
|
|
72086
|
-
|
|
72087
|
-
|
|
72088
|
-
|
|
72089
|
-
} else if (
|
|
72090
|
-
|
|
72091
|
-
|
|
72092
|
-
}
|
|
72093
|
-
|
|
68683
|
+
var POOL_SIZE_MULTIPLIER2 = 128;
|
|
68684
|
+
var pool2;
|
|
68685
|
+
var poolOffset2;
|
|
68686
|
+
function fillPool2(bytes) {
|
|
68687
|
+
if (!pool2 || pool2.length < bytes) {
|
|
68688
|
+
pool2 = Buffer.allocUnsafe(bytes * POOL_SIZE_MULTIPLIER2);
|
|
68689
|
+
crypto3.getRandomValues(pool2);
|
|
68690
|
+
poolOffset2 = 0;
|
|
68691
|
+
} else if (poolOffset2 + bytes > pool2.length) {
|
|
68692
|
+
crypto3.getRandomValues(pool2);
|
|
68693
|
+
poolOffset2 = 0;
|
|
68694
|
+
}
|
|
68695
|
+
poolOffset2 += bytes;
|
|
72094
68696
|
}
|
|
72095
68697
|
function random2(bytes) {
|
|
72096
|
-
|
|
72097
|
-
return
|
|
68698
|
+
fillPool2(bytes |= 0);
|
|
68699
|
+
return pool2.subarray(poolOffset2 - bytes, poolOffset2);
|
|
72098
68700
|
}
|
|
72099
68701
|
function customRandom2(alphabet, defaultSize, getRandom) {
|
|
72100
68702
|
let mask = (2 << 31 - Math.clz32(alphabet.length - 1 | 1)) - 1;
|
|
@@ -72121,7 +68723,7 @@ var nanoid32 = customAlphabet2("abcdefghijklmnopqrstuvwxyz", 16);
|
|
|
72121
68723
|
var tool4 = {
|
|
72122
68724
|
schema: exports_external3
|
|
72123
68725
|
};
|
|
72124
|
-
var
|
|
68726
|
+
var createSkill2 = (skill) => {
|
|
72125
68727
|
if (skill.tags) {
|
|
72126
68728
|
const hasOpencode = skill.tags.includes("opencode");
|
|
72127
68729
|
if (!hasOpencode) {
|
|
@@ -72376,8 +68978,8 @@ class Parser {
|
|
|
72376
68978
|
}
|
|
72377
68979
|
|
|
72378
68980
|
class Executor {
|
|
72379
|
-
getValueByPath(obj,
|
|
72380
|
-
return
|
|
68981
|
+
getValueByPath(obj, path3) {
|
|
68982
|
+
return path3.split(".").reduce((acc, part) => acc?.[part], obj);
|
|
72381
68983
|
}
|
|
72382
68984
|
likeToRegex(pattern) {
|
|
72383
68985
|
let regex = "";
|
|
@@ -72483,7 +69085,7 @@ var addCallFn = (app3) => {
|
|
|
72483
69085
|
middleware: ["auth-admin"],
|
|
72484
69086
|
metadata: {
|
|
72485
69087
|
tags: ["opencode"],
|
|
72486
|
-
...
|
|
69088
|
+
...createSkill2({
|
|
72487
69089
|
skill: "call-app",
|
|
72488
69090
|
title: "调用app应用,非技能模块",
|
|
72489
69091
|
summary: `调用router的应用(非技能模块),适用于需要直接调用应用而不是技能的场景
|
|
@@ -72499,11 +69101,11 @@ var addCallFn = (app3) => {
|
|
|
72499
69101
|
})
|
|
72500
69102
|
}
|
|
72501
69103
|
}).define(async (ctx) => {
|
|
72502
|
-
const { path:
|
|
72503
|
-
if (!
|
|
69104
|
+
const { path: path3, key = "" } = ctx.query;
|
|
69105
|
+
if (!path3) {
|
|
72504
69106
|
ctx.throw("路径path不能为空");
|
|
72505
69107
|
}
|
|
72506
|
-
const res = await ctx.run({ path:
|
|
69108
|
+
const res = await ctx.run({ path: path3, key, payload: ctx.query.payload || {} }, {
|
|
72507
69109
|
...ctx
|
|
72508
69110
|
});
|
|
72509
69111
|
ctx.forward(res);
|