zmdms-utils 0.0.80 → 0.0.81

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.
Files changed (165) hide show
  1. package/declarations.d.ts +6 -0
  2. package/dist/es/_virtual/FastBufferList.js +7 -0
  3. package/dist/es/_virtual/_commonjs-dynamic-modules.js +5 -0
  4. package/dist/es/_virtual/browser.js +7 -0
  5. package/dist/es/_virtual/browser2.js +7 -0
  6. package/dist/es/_virtual/debug.js +7 -0
  7. package/dist/es/_virtual/event.js +7 -0
  8. package/dist/es/_virtual/http-parser.js +3 -0
  9. package/dist/es/_virtual/iframe.js +7 -0
  10. package/dist/es/_virtual/index.js +7 -0
  11. package/dist/es/_virtual/index2.js +7 -0
  12. package/dist/es/_virtual/index3.js +7 -0
  13. package/dist/es/_virtual/index4.js +7 -0
  14. package/dist/es/_virtual/index5.js +7 -0
  15. package/dist/es/_virtual/index6.js +7 -0
  16. package/dist/es/_virtual/index7.js +3 -0
  17. package/dist/es/_virtual/index8.js +7 -0
  18. package/dist/es/_virtual/index9.js +7 -0
  19. package/dist/es/_virtual/inherits.js +7 -0
  20. package/dist/es/_virtual/inherits_browser.js +7 -0
  21. package/dist/es/_virtual/json3.js +7 -0
  22. package/dist/es/_virtual/node.js +7 -0
  23. package/dist/es/_virtual/node2.js +7 -0
  24. package/dist/es/_virtual/stomp-node.js +3 -0
  25. package/dist/es/_virtual/stomp.js +3 -0
  26. package/dist/es/_virtual/streams.js +3 -0
  27. package/dist/es/_virtual/utils.js +3 -0
  28. package/dist/es/constants.d.ts +5 -1
  29. package/dist/es/constants.js +5 -1
  30. package/dist/es/node_modules/bufferutil/fallback.js +43 -0
  31. package/dist/es/node_modules/bufferutil/index.js +21 -0
  32. package/dist/es/node_modules/debug/src/browser.js +192 -0
  33. package/dist/es/node_modules/debug/src/common.js +259 -0
  34. package/dist/es/node_modules/debug/src/index.js +25 -0
  35. package/dist/es/node_modules/debug/src/node.js +192 -0
  36. package/dist/es/node_modules/eventsource/lib/eventsource.js +493 -0
  37. package/dist/es/node_modules/faye-websocket/lib/faye/eventsource.js +150 -0
  38. package/dist/es/node_modules/faye-websocket/lib/faye/websocket/api/event.js +31 -0
  39. package/dist/es/node_modules/faye-websocket/lib/faye/websocket/api/event_target.js +41 -0
  40. package/dist/es/node_modules/faye-websocket/lib/faye/websocket/api.js +205 -0
  41. package/dist/es/node_modules/faye-websocket/lib/faye/websocket/client.js +107 -0
  42. package/dist/es/node_modules/faye-websocket/lib/faye/websocket.js +47 -0
  43. package/dist/es/node_modules/has-flag/index.js +17 -0
  44. package/dist/es/node_modules/http-parser-js/http-parser.js +471 -0
  45. package/dist/es/node_modules/inherits/inherits.js +14 -0
  46. package/dist/es/node_modules/inherits/inherits_browser.js +38 -0
  47. package/dist/es/node_modules/is-typedarray/index.js +51 -0
  48. package/dist/es/node_modules/json3/lib/json3.js +937 -0
  49. package/dist/es/node_modules/ms/index.js +172 -0
  50. package/dist/es/node_modules/node-gyp-build/index.js +21 -0
  51. package/dist/es/node_modules/node-gyp-build/node-gyp-build.js +222 -0
  52. package/dist/es/node_modules/querystringify/index.js +120 -0
  53. package/dist/es/node_modules/requires-port/index.js +38 -0
  54. package/dist/es/node_modules/safe-buffer/index.js +71 -0
  55. package/dist/es/node_modules/supports-color/index.js +143 -0
  56. package/dist/es/node_modules/typedarray-to-buffer/index.js +37 -0
  57. package/dist/es/node_modules/url-parse/index.js +594 -0
  58. package/dist/es/node_modules/utf-8-validate/fallback.js +71 -0
  59. package/dist/es/node_modules/utf-8-validate/index.js +21 -0
  60. package/dist/es/node_modules/websocket/index.js +15 -0
  61. package/dist/es/node_modules/websocket/lib/Deprecation.js +42 -0
  62. package/dist/es/node_modules/websocket/lib/W3CWebSocket.js +268 -0
  63. package/dist/es/node_modules/websocket/lib/WebSocketClient.js +380 -0
  64. package/dist/es/node_modules/websocket/lib/WebSocketConnection.js +914 -0
  65. package/dist/es/node_modules/websocket/lib/WebSocketFrame.js +293 -0
  66. package/dist/es/node_modules/websocket/lib/WebSocketRequest.js +543 -0
  67. package/dist/es/node_modules/websocket/lib/WebSocketRouter.js +172 -0
  68. package/dist/es/node_modules/websocket/lib/WebSocketRouterRequest.js +67 -0
  69. package/dist/es/node_modules/websocket/lib/WebSocketServer.js +272 -0
  70. package/dist/es/node_modules/websocket/lib/utils.js +80 -0
  71. package/dist/es/node_modules/websocket/lib/version.js +13 -0
  72. package/dist/es/node_modules/websocket/lib/websocket.js +31 -0
  73. package/dist/es/node_modules/websocket/node_modules/debug/src/browser.js +199 -0
  74. package/dist/es/node_modules/websocket/node_modules/debug/src/debug.js +215 -0
  75. package/dist/es/node_modules/websocket/node_modules/debug/src/index.js +25 -0
  76. package/dist/es/node_modules/websocket/node_modules/debug/src/node.js +266 -0
  77. package/dist/es/node_modules/websocket/node_modules/ms/index.js +162 -0
  78. package/dist/es/node_modules/websocket/package.json.js +77 -0
  79. package/dist/es/node_modules/websocket/vendor/FastBufferList.js +205 -0
  80. package/dist/es/node_modules/websocket-driver/lib/websocket/driver/base.js +202 -0
  81. package/dist/es/node_modules/websocket-driver/lib/websocket/driver/client.js +152 -0
  82. package/dist/es/node_modules/websocket-driver/lib/websocket/driver/draft75.js +128 -0
  83. package/dist/es/node_modules/websocket-driver/lib/websocket/driver/draft76.js +124 -0
  84. package/dist/es/node_modules/websocket-driver/lib/websocket/driver/headers.js +44 -0
  85. package/dist/es/node_modules/websocket-driver/lib/websocket/driver/hybi/frame.js +21 -0
  86. package/dist/es/node_modules/websocket-driver/lib/websocket/driver/hybi/message.js +37 -0
  87. package/dist/es/node_modules/websocket-driver/lib/websocket/driver/hybi.js +492 -0
  88. package/dist/es/node_modules/websocket-driver/lib/websocket/driver/proxy.js +108 -0
  89. package/dist/es/node_modules/websocket-driver/lib/websocket/driver/server.js +119 -0
  90. package/dist/es/node_modules/websocket-driver/lib/websocket/driver/stream_reader.js +72 -0
  91. package/dist/es/node_modules/websocket-driver/lib/websocket/driver.js +47 -0
  92. package/dist/es/node_modules/websocket-driver/lib/websocket/http_parser.js +140 -0
  93. package/dist/es/node_modules/websocket-driver/lib/websocket/streams.js +150 -0
  94. package/dist/es/node_modules/websocket-extensions/lib/parser.js +103 -0
  95. package/dist/es/node_modules/websocket-extensions/lib/pipeline/cell.js +56 -0
  96. package/dist/es/node_modules/websocket-extensions/lib/pipeline/functor.js +74 -0
  97. package/dist/es/node_modules/websocket-extensions/lib/pipeline/index.js +50 -0
  98. package/dist/es/node_modules/websocket-extensions/lib/pipeline/pledge.js +39 -0
  99. package/dist/es/node_modules/websocket-extensions/lib/pipeline/ring_buffer.js +66 -0
  100. package/dist/es/node_modules/websocket-extensions/lib/websocket_extensions.js +165 -0
  101. package/dist/es/node_modules/yaeti/index.js +17 -0
  102. package/dist/es/node_modules/yaeti/lib/Event.js +24 -0
  103. package/dist/es/node_modules/yaeti/lib/EventTarget.js +130 -0
  104. package/dist/es/node_modules/zt-sockjs-client/lib/entry.js +14 -0
  105. package/dist/es/node_modules/zt-sockjs-client/lib/event/close.js +21 -0
  106. package/dist/es/node_modules/zt-sockjs-client/lib/event/event.js +22 -0
  107. package/dist/es/node_modules/zt-sockjs-client/lib/event/eventtarget.js +62 -0
  108. package/dist/es/node_modules/zt-sockjs-client/lib/event/trans-message.js +19 -0
  109. package/dist/es/node_modules/zt-sockjs-client/lib/facade.js +40 -0
  110. package/dist/es/node_modules/zt-sockjs-client/lib/iframe-bootstrap.js +122 -0
  111. package/dist/es/node_modules/zt-sockjs-client/lib/info-ajax.js +57 -0
  112. package/dist/es/node_modules/zt-sockjs-client/lib/info-iframe-receiver.js +50 -0
  113. package/dist/es/node_modules/zt-sockjs-client/lib/info-iframe.js +81 -0
  114. package/dist/es/node_modules/zt-sockjs-client/lib/info-receiver.js +101 -0
  115. package/dist/es/node_modules/zt-sockjs-client/lib/location.js +12 -0
  116. package/dist/es/node_modules/zt-sockjs-client/lib/main.js +413 -0
  117. package/dist/es/node_modules/zt-sockjs-client/lib/shims.js +449 -0
  118. package/dist/es/node_modules/zt-sockjs-client/lib/transport/driver/websocket.js +5 -0
  119. package/dist/es/node_modules/zt-sockjs-client/lib/transport/driver/xhr.js +80 -0
  120. package/dist/es/node_modules/zt-sockjs-client/lib/transport/eventsource.js +34 -0
  121. package/dist/es/node_modules/zt-sockjs-client/lib/transport/htmlfile.js +31 -0
  122. package/dist/es/node_modules/zt-sockjs-client/lib/transport/iframe.js +154 -0
  123. package/dist/es/node_modules/zt-sockjs-client/lib/transport/jsonp-polling.js +41 -0
  124. package/dist/es/node_modules/zt-sockjs-client/lib/transport/lib/ajax-based.js +55 -0
  125. package/dist/es/node_modules/zt-sockjs-client/lib/transport/lib/buffered-sender.js +92 -0
  126. package/dist/es/node_modules/zt-sockjs-client/lib/transport/lib/iframe-wrap.js +39 -0
  127. package/dist/es/node_modules/zt-sockjs-client/lib/transport/lib/polling.js +65 -0
  128. package/dist/es/node_modules/zt-sockjs-client/lib/transport/lib/sender-receiver.js +52 -0
  129. package/dist/es/node_modules/zt-sockjs-client/lib/transport/receiver/eventsource.js +69 -0
  130. package/dist/es/node_modules/zt-sockjs-client/lib/transport/receiver/htmlfile.js +96 -0
  131. package/dist/es/node_modules/zt-sockjs-client/lib/transport/receiver/jsonp.js +193 -0
  132. package/dist/es/node_modules/zt-sockjs-client/lib/transport/receiver/xhr.js +75 -0
  133. package/dist/es/node_modules/zt-sockjs-client/lib/transport/sender/jsonp.js +104 -0
  134. package/dist/es/node_modules/zt-sockjs-client/lib/transport/sender/xdr.js +113 -0
  135. package/dist/es/node_modules/zt-sockjs-client/lib/transport/sender/xhr-cors.js +19 -0
  136. package/dist/es/node_modules/zt-sockjs-client/lib/transport/sender/xhr-fake.js +28 -0
  137. package/dist/es/node_modules/zt-sockjs-client/lib/transport/sender/xhr-local.js +21 -0
  138. package/dist/es/node_modules/zt-sockjs-client/lib/transport/websocket.js +108 -0
  139. package/dist/es/node_modules/zt-sockjs-client/lib/transport/xdr-polling.js +30 -0
  140. package/dist/es/node_modules/zt-sockjs-client/lib/transport/xdr-streaming.js +38 -0
  141. package/dist/es/node_modules/zt-sockjs-client/lib/transport/xhr-polling.js +40 -0
  142. package/dist/es/node_modules/zt-sockjs-client/lib/transport/xhr-streaming.js +50 -0
  143. package/dist/es/node_modules/zt-sockjs-client/lib/transport-list.js +28 -0
  144. package/dist/es/node_modules/zt-sockjs-client/lib/utils/browser.js +29 -0
  145. package/dist/es/node_modules/zt-sockjs-client/lib/utils/escape.js +53 -0
  146. package/dist/es/node_modules/zt-sockjs-client/lib/utils/event.js +78 -0
  147. package/dist/es/node_modules/zt-sockjs-client/lib/utils/iframe.js +205 -0
  148. package/dist/es/node_modules/zt-sockjs-client/lib/utils/log.js +20 -0
  149. package/dist/es/node_modules/zt-sockjs-client/lib/utils/object.js +24 -0
  150. package/dist/es/node_modules/zt-sockjs-client/lib/utils/random.js +30 -0
  151. package/dist/es/node_modules/zt-sockjs-client/lib/utils/transport.js +52 -0
  152. package/dist/es/node_modules/zt-sockjs-client/lib/utils/url.js +54 -0
  153. package/dist/es/node_modules/zt-sockjs-client/lib/version.js +11 -0
  154. package/dist/es/node_modules/zt-stompjs/index.js +23 -0
  155. package/dist/es/node_modules/zt-stompjs/lib/stomp-node.js +117 -0
  156. package/dist/es/node_modules/zt-stompjs/lib/stomp.js +536 -0
  157. package/dist/es/stompClient.d.ts +55 -0
  158. package/dist/es/stompClient.js +379 -0
  159. package/dist/index.d.ts +2 -1
  160. package/dist/index.js +2 -1
  161. package/package.json +6 -2
  162. package/src/constants.ts +5 -0
  163. package/src/index.ts +4 -0
  164. package/src/stompClient.ts +449 -0
  165. package/tsconfig.json +1 -1
@@ -0,0 +1,492 @@
1
+ import '../../../../safe-buffer/index.js';
2
+ import require$$0 from 'crypto';
3
+ import require$$1 from 'util';
4
+ import websocket_extensions from '../../../../websocket-extensions/lib/websocket_extensions.js';
5
+ import base from './base.js';
6
+ import frame from './hybi/frame.js';
7
+ import message from './hybi/message.js';
8
+ import { exports as safeBufferExports } from '../../../../../_virtual/index9.js';
9
+
10
+ var Buffer = safeBufferExports.Buffer,
11
+ crypto = require$$0,
12
+ util = require$$1,
13
+ Extensions = websocket_extensions,
14
+ Base = base,
15
+ Frame = frame,
16
+ Message = message;
17
+
18
+ var Hybi = function(request, url, options) {
19
+ Base.apply(this, arguments);
20
+
21
+ this._extensions = new Extensions();
22
+ this._stage = 0;
23
+ this._masking = this._options.masking;
24
+ this._protocols = this._options.protocols || [];
25
+ this._requireMasking = this._options.requireMasking;
26
+ this._pingCallbacks = {};
27
+
28
+ if (typeof this._protocols === 'string')
29
+ this._protocols = this._protocols.split(/ *, */);
30
+
31
+ if (!this._request) return;
32
+
33
+ var protos = this._request.headers['sec-websocket-protocol'],
34
+ supported = this._protocols;
35
+
36
+ if (protos !== undefined) {
37
+ if (typeof protos === 'string') protos = protos.split(/ *, */);
38
+ this.protocol = protos.filter(function(p) { return supported.indexOf(p) >= 0 })[0];
39
+ }
40
+
41
+ this.version = 'hybi-' + Hybi.VERSION;
42
+ };
43
+ util.inherits(Hybi, Base);
44
+
45
+ Hybi.VERSION = '13';
46
+
47
+ Hybi.mask = function(payload, mask, offset) {
48
+ if (!mask || mask.length === 0) return payload;
49
+ offset = offset || 0;
50
+
51
+ for (var i = 0, n = payload.length - offset; i < n; i++) {
52
+ payload[offset + i] = payload[offset + i] ^ mask[i % 4];
53
+ }
54
+ return payload;
55
+ };
56
+
57
+ Hybi.generateAccept = function(key) {
58
+ var sha1 = crypto.createHash('sha1');
59
+ sha1.update(key + Hybi.GUID);
60
+ return sha1.digest('base64');
61
+ };
62
+
63
+ Hybi.GUID = '258EAFA5-E914-47DA-95CA-C5AB0DC85B11';
64
+
65
+ var instance = {
66
+ FIN: 0x80,
67
+ MASK: 0x80,
68
+ RSV1: 0x40,
69
+ RSV2: 0x20,
70
+ RSV3: 0x10,
71
+ OPCODE: 0x0F,
72
+ LENGTH: 0x7F,
73
+
74
+ OPCODES: {
75
+ continuation: 0,
76
+ text: 1,
77
+ binary: 2,
78
+ close: 8,
79
+ ping: 9,
80
+ pong: 10
81
+ },
82
+
83
+ OPCODE_CODES: [0, 1, 2, 8, 9, 10],
84
+ MESSAGE_OPCODES: [0, 1, 2],
85
+ OPENING_OPCODES: [1, 2],
86
+
87
+ ERRORS: {
88
+ normal_closure: 1000,
89
+ going_away: 1001,
90
+ protocol_error: 1002,
91
+ unacceptable: 1003,
92
+ encoding_error: 1007,
93
+ policy_violation: 1008,
94
+ too_large: 1009,
95
+ extension_error: 1010,
96
+ unexpected_condition: 1011
97
+ },
98
+
99
+ ERROR_CODES: [1000, 1001, 1002, 1003, 1007, 1008, 1009, 1010, 1011],
100
+ DEFAULT_ERROR_CODE: 1000,
101
+ MIN_RESERVED_ERROR: 3000,
102
+ MAX_RESERVED_ERROR: 4999,
103
+
104
+ // http://www.w3.org/International/questions/qa-forms-utf-8.en.php
105
+ UTF8_MATCH: /^([\x00-\x7F]|[\xC2-\xDF][\x80-\xBF]|\xE0[\xA0-\xBF][\x80-\xBF]|[\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}|\xED[\x80-\x9F][\x80-\xBF]|\xF0[\x90-\xBF][\x80-\xBF]{2}|[\xF1-\xF3][\x80-\xBF]{3}|\xF4[\x80-\x8F][\x80-\xBF]{2})*$/,
106
+
107
+ addExtension: function(extension) {
108
+ this._extensions.add(extension);
109
+ return true;
110
+ },
111
+
112
+ parse: function(chunk) {
113
+ this._reader.put(chunk);
114
+ var buffer = true;
115
+ while (buffer) {
116
+ switch (this._stage) {
117
+ case 0:
118
+ buffer = this._reader.read(1);
119
+ if (buffer) this._parseOpcode(buffer[0]);
120
+ break;
121
+
122
+ case 1:
123
+ buffer = this._reader.read(1);
124
+ if (buffer) this._parseLength(buffer[0]);
125
+ break;
126
+
127
+ case 2:
128
+ buffer = this._reader.read(this._frame.lengthBytes);
129
+ if (buffer) this._parseExtendedLength(buffer);
130
+ break;
131
+
132
+ case 3:
133
+ buffer = this._reader.read(4);
134
+ if (buffer) {
135
+ this._stage = 4;
136
+ this._frame.maskingKey = buffer;
137
+ }
138
+ break;
139
+
140
+ case 4:
141
+ buffer = this._reader.read(this._frame.length);
142
+ if (buffer) {
143
+ this._stage = 0;
144
+ this._emitFrame(buffer);
145
+ }
146
+ break;
147
+
148
+ default:
149
+ buffer = null;
150
+ }
151
+ }
152
+ },
153
+
154
+ text: function(message) {
155
+ if (this.readyState > 1) return false;
156
+ return this.frame(message, 'text');
157
+ },
158
+
159
+ binary: function(message) {
160
+ if (this.readyState > 1) return false;
161
+ return this.frame(message, 'binary');
162
+ },
163
+
164
+ ping: function(message, callback) {
165
+ if (this.readyState > 1) return false;
166
+ message = message || '';
167
+ if (callback) this._pingCallbacks[message] = callback;
168
+ return this.frame(message, 'ping');
169
+ },
170
+
171
+ pong: function(message) {
172
+ if (this.readyState > 1) return false;
173
+ message = message ||'';
174
+ return this.frame(message, 'pong');
175
+ },
176
+
177
+ close: function(reason, code) {
178
+ reason = reason || '';
179
+ code = code || this.ERRORS.normal_closure;
180
+
181
+ if (this.readyState <= 0) {
182
+ this.readyState = 3;
183
+ this.emit('close', new Base.CloseEvent(code, reason));
184
+ return true;
185
+ } else if (this.readyState === 1) {
186
+ this.readyState = 2;
187
+ this._extensions.close(function() { this.frame(reason, 'close', code); }, this);
188
+ return true;
189
+ } else {
190
+ return false;
191
+ }
192
+ },
193
+
194
+ frame: function(buffer, type, code) {
195
+ if (this.readyState <= 0) return this._queue([buffer, type, code]);
196
+ if (this.readyState > 2) return false;
197
+
198
+ if (buffer instanceof Array) buffer = Buffer.from(buffer);
199
+ if (typeof buffer === 'number') buffer = buffer.toString();
200
+
201
+ var message = new Message(),
202
+ isText = (typeof buffer === 'string'),
203
+ payload, copy;
204
+
205
+ message.rsv1 = message.rsv2 = message.rsv3 = false;
206
+ message.opcode = this.OPCODES[type || (isText ? 'text' : 'binary')];
207
+
208
+ payload = isText ? Buffer.from(buffer, 'utf8') : buffer;
209
+
210
+ if (code) {
211
+ copy = payload;
212
+ payload = Buffer.allocUnsafe(2 + copy.length);
213
+ payload.writeUInt16BE(code, 0);
214
+ copy.copy(payload, 2);
215
+ }
216
+ message.data = payload;
217
+
218
+ var onMessageReady = function(message) {
219
+ var frame = new Frame();
220
+
221
+ frame.final = true;
222
+ frame.rsv1 = message.rsv1;
223
+ frame.rsv2 = message.rsv2;
224
+ frame.rsv3 = message.rsv3;
225
+ frame.opcode = message.opcode;
226
+ frame.masked = !!this._masking;
227
+ frame.length = message.data.length;
228
+ frame.payload = message.data;
229
+
230
+ if (frame.masked) frame.maskingKey = crypto.randomBytes(4);
231
+
232
+ this._sendFrame(frame);
233
+ };
234
+
235
+ if (this.MESSAGE_OPCODES.indexOf(message.opcode) >= 0)
236
+ this._extensions.processOutgoingMessage(message, function(error, message) {
237
+ if (error) return this._fail('extension_error', error.message);
238
+ onMessageReady.call(this, message);
239
+ }, this);
240
+ else
241
+ onMessageReady.call(this, message);
242
+
243
+ return true;
244
+ },
245
+
246
+ _sendFrame: function(frame) {
247
+ var length = frame.length,
248
+ header = (length <= 125) ? 2 : (length <= 65535 ? 4 : 10),
249
+ offset = header + (frame.masked ? 4 : 0),
250
+ buffer = Buffer.allocUnsafe(offset + length),
251
+ masked = frame.masked ? this.MASK : 0;
252
+
253
+ buffer[0] = (frame.final ? this.FIN : 0) |
254
+ (frame.rsv1 ? this.RSV1 : 0) |
255
+ (frame.rsv2 ? this.RSV2 : 0) |
256
+ (frame.rsv3 ? this.RSV3 : 0) |
257
+ frame.opcode;
258
+
259
+ if (length <= 125) {
260
+ buffer[1] = masked | length;
261
+ } else if (length <= 65535) {
262
+ buffer[1] = masked | 126;
263
+ buffer.writeUInt16BE(length, 2);
264
+ } else {
265
+ buffer[1] = masked | 127;
266
+ buffer.writeUInt32BE(Math.floor(length / 0x100000000), 2);
267
+ buffer.writeUInt32BE(length % 0x100000000, 6);
268
+ }
269
+
270
+ frame.payload.copy(buffer, offset);
271
+
272
+ if (frame.masked) {
273
+ frame.maskingKey.copy(buffer, header);
274
+ Hybi.mask(buffer, frame.maskingKey, offset);
275
+ }
276
+
277
+ this._write(buffer);
278
+ },
279
+
280
+ _handshakeResponse: function() {
281
+ var secKey = this._request.headers['sec-websocket-key'],
282
+ version = this._request.headers['sec-websocket-version'];
283
+
284
+ if (version !== Hybi.VERSION)
285
+ throw new Error('Unsupported WebSocket version: ' + version);
286
+
287
+ if (typeof secKey !== 'string')
288
+ throw new Error('Missing handshake request header: Sec-WebSocket-Key');
289
+
290
+ this._headers.set('Upgrade', 'websocket');
291
+ this._headers.set('Connection', 'Upgrade');
292
+ this._headers.set('Sec-WebSocket-Accept', Hybi.generateAccept(secKey));
293
+
294
+ if (this.protocol) this._headers.set('Sec-WebSocket-Protocol', this.protocol);
295
+
296
+ var extensions = this._extensions.generateResponse(this._request.headers['sec-websocket-extensions']);
297
+ if (extensions) this._headers.set('Sec-WebSocket-Extensions', extensions);
298
+
299
+ var start = 'HTTP/1.1 101 Switching Protocols',
300
+ headers = [start, this._headers.toString(), ''];
301
+
302
+ return Buffer.from(headers.join('\r\n'), 'utf8');
303
+ },
304
+
305
+ _shutdown: function(code, reason, error) {
306
+ delete this._frame;
307
+ delete this._message;
308
+ this._stage = 5;
309
+
310
+ var sendCloseFrame = (this.readyState === 1);
311
+ this.readyState = 2;
312
+
313
+ this._extensions.close(function() {
314
+ if (sendCloseFrame) this.frame(reason, 'close', code);
315
+ this.readyState = 3;
316
+ if (error) this.emit('error', new Error(reason));
317
+ this.emit('close', new Base.CloseEvent(code, reason));
318
+ }, this);
319
+ },
320
+
321
+ _fail: function(type, message) {
322
+ if (this.readyState > 1) return;
323
+ this._shutdown(this.ERRORS[type], message, true);
324
+ },
325
+
326
+ _parseOpcode: function(octet) {
327
+ var rsvs = [this.RSV1, this.RSV2, this.RSV3].map(function(rsv) {
328
+ return (octet & rsv) === rsv;
329
+ });
330
+
331
+ var frame = this._frame = new Frame();
332
+
333
+ frame.final = (octet & this.FIN) === this.FIN;
334
+ frame.rsv1 = rsvs[0];
335
+ frame.rsv2 = rsvs[1];
336
+ frame.rsv3 = rsvs[2];
337
+ frame.opcode = (octet & this.OPCODE);
338
+
339
+ this._stage = 1;
340
+
341
+ if (!this._extensions.validFrameRsv(frame))
342
+ return this._fail('protocol_error',
343
+ 'One or more reserved bits are on: reserved1 = ' + (frame.rsv1 ? 1 : 0) +
344
+ ', reserved2 = ' + (frame.rsv2 ? 1 : 0) +
345
+ ', reserved3 = ' + (frame.rsv3 ? 1 : 0));
346
+
347
+ if (this.OPCODE_CODES.indexOf(frame.opcode) < 0)
348
+ return this._fail('protocol_error', 'Unrecognized frame opcode: ' + frame.opcode);
349
+
350
+ if (this.MESSAGE_OPCODES.indexOf(frame.opcode) < 0 && !frame.final)
351
+ return this._fail('protocol_error', 'Received fragmented control frame: opcode = ' + frame.opcode);
352
+
353
+ if (this._message && this.OPENING_OPCODES.indexOf(frame.opcode) >= 0)
354
+ return this._fail('protocol_error', 'Received new data frame but previous continuous frame is unfinished');
355
+ },
356
+
357
+ _parseLength: function(octet) {
358
+ var frame = this._frame;
359
+ frame.masked = (octet & this.MASK) === this.MASK;
360
+ frame.length = (octet & this.LENGTH);
361
+
362
+ if (frame.length >= 0 && frame.length <= 125) {
363
+ this._stage = frame.masked ? 3 : 4;
364
+ if (!this._checkFrameLength()) return;
365
+ } else {
366
+ this._stage = 2;
367
+ frame.lengthBytes = (frame.length === 126 ? 2 : 8);
368
+ }
369
+
370
+ if (this._requireMasking && !frame.masked)
371
+ return this._fail('unacceptable', 'Received unmasked frame but masking is required');
372
+ },
373
+
374
+ _parseExtendedLength: function(buffer) {
375
+ var frame = this._frame;
376
+ frame.length = this._readUInt(buffer);
377
+
378
+ this._stage = frame.masked ? 3 : 4;
379
+
380
+ if (this.MESSAGE_OPCODES.indexOf(frame.opcode) < 0 && frame.length > 125)
381
+ return this._fail('protocol_error', 'Received control frame having too long payload: ' + frame.length);
382
+
383
+ if (!this._checkFrameLength()) return;
384
+ },
385
+
386
+ _checkFrameLength: function() {
387
+ var length = this._message ? this._message.length : 0;
388
+
389
+ if (length + this._frame.length > this._maxLength) {
390
+ this._fail('too_large', 'WebSocket frame length too large');
391
+ return false;
392
+ } else {
393
+ return true;
394
+ }
395
+ },
396
+
397
+ _emitFrame: function(buffer) {
398
+ var frame = this._frame,
399
+ payload = frame.payload = Hybi.mask(buffer, frame.maskingKey),
400
+ opcode = frame.opcode,
401
+ message,
402
+ code, reason,
403
+ callbacks, callback;
404
+
405
+ delete this._frame;
406
+
407
+ if (opcode === this.OPCODES.continuation) {
408
+ if (!this._message) return this._fail('protocol_error', 'Received unexpected continuation frame');
409
+ this._message.pushFrame(frame);
410
+ }
411
+
412
+ if (opcode === this.OPCODES.text || opcode === this.OPCODES.binary) {
413
+ this._message = new Message();
414
+ this._message.pushFrame(frame);
415
+ }
416
+
417
+ if (frame.final && this.MESSAGE_OPCODES.indexOf(opcode) >= 0)
418
+ return this._emitMessage(this._message);
419
+
420
+ if (opcode === this.OPCODES.close) {
421
+ code = (payload.length >= 2) ? payload.readUInt16BE(0) : null;
422
+ reason = (payload.length > 2) ? this._encode(payload.slice(2)) : null;
423
+
424
+ if (!(payload.length === 0) &&
425
+ !(code !== null && code >= this.MIN_RESERVED_ERROR && code <= this.MAX_RESERVED_ERROR) &&
426
+ this.ERROR_CODES.indexOf(code) < 0)
427
+ code = this.ERRORS.protocol_error;
428
+
429
+ if (payload.length > 125 || (payload.length > 2 && !reason))
430
+ code = this.ERRORS.protocol_error;
431
+
432
+ this._shutdown(code || this.DEFAULT_ERROR_CODE, reason || '');
433
+ }
434
+
435
+ if (opcode === this.OPCODES.ping) {
436
+ this.frame(payload, 'pong');
437
+ this.emit('ping', new Base.PingEvent(payload.toString()));
438
+ }
439
+
440
+ if (opcode === this.OPCODES.pong) {
441
+ callbacks = this._pingCallbacks;
442
+ message = this._encode(payload);
443
+ callback = callbacks[message];
444
+
445
+ delete callbacks[message];
446
+ if (callback) callback();
447
+
448
+ this.emit('pong', new Base.PongEvent(payload.toString()));
449
+ }
450
+ },
451
+
452
+ _emitMessage: function(message) {
453
+ var message = this._message;
454
+ message.read();
455
+
456
+ delete this._message;
457
+
458
+ this._extensions.processIncomingMessage(message, function(error, message) {
459
+ if (error) return this._fail('extension_error', error.message);
460
+
461
+ var payload = message.data;
462
+ if (message.opcode === this.OPCODES.text) payload = this._encode(payload);
463
+
464
+ if (payload === null)
465
+ return this._fail('encoding_error', 'Could not decode a text frame as UTF-8');
466
+ else
467
+ this.emit('message', new Base.MessageEvent(payload));
468
+ }, this);
469
+ },
470
+
471
+ _encode: function(buffer) {
472
+ try {
473
+ var string = buffer.toString('binary', 0, buffer.length);
474
+ if (!this.UTF8_MATCH.test(string)) return null;
475
+ } catch (e) {}
476
+ return buffer.toString('utf8', 0, buffer.length);
477
+ },
478
+
479
+ _readUInt: function(buffer) {
480
+ if (buffer.length === 2) return buffer.readUInt16BE(0);
481
+
482
+ return buffer.readUInt32BE(0) * 0x100000000 +
483
+ buffer.readUInt32BE(4);
484
+ }
485
+ };
486
+
487
+ for (var key in instance)
488
+ Hybi.prototype[key] = instance[key];
489
+
490
+ var hybi = Hybi;
491
+
492
+ export { hybi as default };
@@ -0,0 +1,108 @@
1
+ import '../../../../safe-buffer/index.js';
2
+ import require$$0 from 'stream';
3
+ import require$$2 from 'url';
4
+ import require$$1 from 'util';
5
+ import base from './base.js';
6
+ import { __require as requireHeaders } from './headers.js';
7
+ import http_parser from '../http_parser.js';
8
+ import { exports as safeBufferExports } from '../../../../../_virtual/index9.js';
9
+
10
+ var Buffer = safeBufferExports.Buffer,
11
+ Stream = require$$0.Stream,
12
+ url = require$$2,
13
+ util = require$$1,
14
+ Base = base,
15
+ Headers = requireHeaders(),
16
+ HttpParser = http_parser;
17
+
18
+ var PORTS = { 'ws:': 80, 'wss:': 443 };
19
+
20
+ var Proxy = function(client, origin, options) {
21
+ this._client = client;
22
+ this._http = new HttpParser('response');
23
+ this._origin = (typeof client.url === 'object') ? client.url : url.parse(client.url);
24
+ this._url = (typeof origin === 'object') ? origin : url.parse(origin);
25
+ this._options = options || {};
26
+ this._state = 0;
27
+
28
+ this.readable = this.writable = true;
29
+ this._paused = false;
30
+
31
+ this._headers = new Headers();
32
+ this._headers.set('Host', this._origin.host);
33
+ this._headers.set('Connection', 'keep-alive');
34
+ this._headers.set('Proxy-Connection', 'keep-alive');
35
+
36
+ var auth = this._url.auth && Buffer.from(this._url.auth, 'utf8').toString('base64');
37
+ if (auth) this._headers.set('Proxy-Authorization', 'Basic ' + auth);
38
+ };
39
+ util.inherits(Proxy, Stream);
40
+
41
+ var instance = {
42
+ setHeader: function(name, value) {
43
+ if (this._state !== 0) return false;
44
+ this._headers.set(name, value);
45
+ return true;
46
+ },
47
+
48
+ start: function() {
49
+ if (this._state !== 0) return false;
50
+ this._state = 1;
51
+
52
+ var origin = this._origin,
53
+ port = origin.port || PORTS[origin.protocol],
54
+ start = 'CONNECT ' + origin.hostname + ':' + port + ' HTTP/1.1';
55
+
56
+ var headers = [start, this._headers.toString(), ''];
57
+
58
+ this.emit('data', Buffer.from(headers.join('\r\n'), 'utf8'));
59
+ return true;
60
+ },
61
+
62
+ pause: function() {
63
+ this._paused = true;
64
+ },
65
+
66
+ resume: function() {
67
+ this._paused = false;
68
+ this.emit('drain');
69
+ },
70
+
71
+ write: function(chunk) {
72
+ if (!this.writable) return false;
73
+
74
+ this._http.parse(chunk);
75
+ if (!this._http.isComplete()) return !this._paused;
76
+
77
+ this.statusCode = this._http.statusCode;
78
+ this.headers = this._http.headers;
79
+
80
+ if (this.statusCode === 200) {
81
+ this.emit('connect', new Base.ConnectEvent());
82
+ } else {
83
+ var message = "Can't establish a connection to the server at " + this._origin.href;
84
+ this.emit('error', new Error(message));
85
+ }
86
+ this.end();
87
+ return !this._paused;
88
+ },
89
+
90
+ end: function(chunk) {
91
+ if (!this.writable) return;
92
+ if (chunk !== undefined) this.write(chunk);
93
+ this.readable = this.writable = false;
94
+ this.emit('close');
95
+ this.emit('end');
96
+ },
97
+
98
+ destroy: function() {
99
+ this.end();
100
+ }
101
+ };
102
+
103
+ for (var key in instance)
104
+ Proxy.prototype[key] = instance[key];
105
+
106
+ var proxy = Proxy;
107
+
108
+ export { proxy as default };