Advertisement
Guest User

Untitled

a guest
Feb 21st, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 20.03 KB | None | 0 0
  1.  
  2. var AFTER, BEFORE, COMMON_EVENTS, EventEmitter, FETCH, FIRE, FormData, NativeFetch, NativeFormData, NativeXMLHttp, OFF, ON, READY_STATE, UPLOAD_EVENTS, WINDOW, XHookFetchRequest, XHookFormData, XHookHttpRequest, XMLHTTP, base, convertHeaders, depricatedProp, document, fakeEvent, mergeObjects, msie, nullify, proxyEvents, slice, useragent, xhook,
  3. indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
  4.  
  5. WINDOW = null;
  6.  
  7. if (typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope) {
  8. WINDOW = self;
  9. } else if (typeof global !== 'undefined') {
  10. WINDOW = global;
  11. } else {
  12. WINDOW = window;
  13. }
  14.  
  15. document = WINDOW.document;
  16.  
  17. BEFORE = 'before';
  18.  
  19. AFTER = 'after';
  20.  
  21. READY_STATE = 'readyState';
  22.  
  23. ON = 'addEventListener';
  24.  
  25. OFF = 'removeEventListener';
  26.  
  27. FIRE = 'dispatchEvent';
  28.  
  29. XMLHTTP = 'XMLHttpRequest';
  30.  
  31. FETCH = 'fetch';
  32.  
  33. FormData = 'FormData';
  34.  
  35. UPLOAD_EVENTS = ['load', 'loadend', 'loadstart'];
  36.  
  37. COMMON_EVENTS = ['progress', 'abort', 'error', 'timeout'];
  38.  
  39. useragent = typeof navigator !== 'undefined' && navigator['useragent'] ? navigator.userAgent : '';
  40.  
  41. msie = parseInt((/msie (\d+)/.exec(useragent.toLowerCase()) || [])[1]);
  42.  
  43. if (isNaN(msie)) {
  44. msie = parseInt((/trident\/.*; rv:(\d+)/.exec(useragent.toLowerCase()) || [])[1]);
  45. }
  46.  
  47. (base = Array.prototype).indexOf || (base.indexOf = function(item) {
  48. var i, j, len, x;
  49. for (i = j = 0, len = this.length; j < len; i = ++j) {
  50. x = this[i];
  51. if (x === item) {
  52. return i;
  53. }
  54. }
  55. return -1;
  56. });
  57.  
  58. slice = function(o, n) {
  59. return Array.prototype.slice.call(o, n);
  60. };
  61.  
  62. depricatedProp = function(p) {
  63. return p === "returnValue" || p === "totalSize" || p === "position";
  64. };
  65.  
  66. mergeObjects = function(src, dst) {
  67. var k, v;
  68. for (k in src) {
  69. v = src[k];
  70. if (depricatedProp(k)) {
  71. continue;
  72. }
  73. try {
  74. dst[k] = src[k];
  75. } catch (_error) {}
  76. }
  77. return dst;
  78. };
  79.  
  80. nullify = function(res) {
  81. if (res === void 0) {
  82. return null;
  83. }
  84. return res;
  85. };
  86.  
  87. proxyEvents = function(events, src, dst) {
  88. var event, j, len, p;
  89. p = function(event) {
  90. return function(e) {
  91. var clone, k, val;
  92. clone = {};
  93. for (k in e) {
  94. if (depricatedProp(k)) {
  95. continue;
  96. }
  97. val = e[k];
  98. clone[k] = val === src ? dst : val;
  99. }
  100. return dst[FIRE](event, clone);
  101. };
  102. };
  103. for (j = 0, len = events.length; j < len; j++) {
  104. event = events[j];
  105. if (dst._has(event)) {
  106. src["on" + event] = p(event);
  107. }
  108. }
  109. };
  110.  
  111. fakeEvent = function(type) {
  112. var msieEventObject;
  113. if (document && (document.createEventObject != null)) {
  114. msieEventObject = document.createEventObject();
  115. msieEventObject.type = type;
  116. return msieEventObject;
  117. } else {
  118. try {
  119. return new Event(type);
  120. } catch (_error) {
  121. return {
  122. type: type
  123. };
  124. }
  125. }
  126. };
  127.  
  128. EventEmitter = function(nodeStyle) {
  129. var emitter, events, listeners;
  130. events = {};
  131. listeners = function(event) {
  132. return events[event] || [];
  133. };
  134. emitter = {};
  135. emitter[ON] = function(event, callback, i) {
  136. events[event] = listeners(event);
  137. if (events[event].indexOf(callback) >= 0) {
  138. return;
  139. }
  140. i = i === undefined ? events[event].length : i;
  141. events[event].splice(i, 0, callback);
  142. };
  143. emitter[OFF] = function(event, callback) {
  144. var i;
  145. if (event === undefined) {
  146. events = {};
  147. return;
  148. }
  149. if (callback === undefined) {
  150. events[event] = [];
  151. }
  152. i = listeners(event).indexOf(callback);
  153. if (i === -1) {
  154. return;
  155. }
  156. listeners(event).splice(i, 1);
  157. };
  158. emitter[FIRE] = function() {
  159. var args, event, i, j, legacylistener, len, listener, ref;
  160. args = slice(arguments);
  161. event = args.shift();
  162. if (!nodeStyle) {
  163. args[0] = mergeObjects(args[0], fakeEvent(event));
  164. }
  165. legacylistener = emitter["on" + event];
  166. if (legacylistener) {
  167. legacylistener.apply(emitter, args);
  168. }
  169. ref = listeners(event).concat(listeners("*"));
  170. for (i = j = 0, len = ref.length; j < len; i = ++j) {
  171. listener = ref[i];
  172. listener.apply(emitter, args);
  173. }
  174. };
  175. emitter._has = function(event) {
  176. return !!(events[event] || emitter["on" + event]);
  177. };
  178. if (nodeStyle) {
  179. emitter.listeners = function(event) {
  180. return slice(listeners(event));
  181. };
  182. emitter.on = emitter[ON];
  183. emitter.off = emitter[OFF];
  184. emitter.fire = emitter[FIRE];
  185. emitter.once = function(e, fn) {
  186. var fire;
  187. fire = function() {
  188. emitter.off(e, fire);
  189. return fn.apply(null, arguments);
  190. };
  191. return emitter.on(e, fire);
  192. };
  193. emitter.destroy = function() {
  194. return events = {};
  195. };
  196. }
  197. return emitter;
  198. };
  199.  
  200. xhook = EventEmitter(true);
  201.  
  202. xhook.EventEmitter = EventEmitter;
  203.  
  204. xhook[BEFORE] = function(handler, i) {
  205. if (handler.length < 1 || handler.length > 2) {
  206. throw "invalid hook";
  207. }
  208. return xhook[ON](BEFORE, handler, i);
  209. };
  210.  
  211. xhook[AFTER] = function(handler, i) {
  212. if (handler.length < 2 || handler.length > 3) {
  213. throw "invalid hook";
  214. }
  215. return xhook[ON](AFTER, handler, i);
  216. };
  217.  
  218. xhook.enable = function() {
  219. WINDOW[XMLHTTP] = XHookHttpRequest;
  220. if (typeof XHookFetchRequest === "function") {
  221. WINDOW[FETCH] = XHookFetchRequest;
  222. }
  223. if (NativeFormData) {
  224. WINDOW[FormData] = XHookFormData;
  225. }
  226. };
  227.  
  228. xhook.disable = function() {
  229. WINDOW[XMLHTTP] = xhook[XMLHTTP];
  230. WINDOW[FETCH] = xhook[FETCH];
  231. if (NativeFormData) {
  232. WINDOW[FormData] = NativeFormData;
  233. }
  234. };
  235.  
  236. convertHeaders = xhook.headers = function(h, dest) {
  237. var header, headers, j, k, len, name, ref, v, value;
  238. if (dest == null) {
  239. dest = {};
  240. }
  241. switch (typeof h) {
  242. case "object":
  243. headers = [];
  244. for (k in h) {
  245. v = h[k];
  246. name = k.toLowerCase();
  247. headers.push(name + ":\t" + v);
  248. }
  249. return headers.join('\n') + '\n';
  250. case "string":
  251. headers = h.split('\n');
  252. for (j = 0, len = headers.length; j < len; j++) {
  253. header = headers[j];
  254. if (/([^:]+):\s*(.+)/.test(header)) {
  255. name = (ref = RegExp.$1) != null ? ref.toLowerCase() : void 0;
  256. value = RegExp.$2;
  257. if (dest[name] == null) {
  258. dest[name] = value;
  259. }
  260. }
  261. }
  262. return dest;
  263. }
  264. };
  265.  
  266. NativeFormData = WINDOW[FormData];
  267.  
  268. XHookFormData = function(form) {
  269. var entries;
  270. this.fd = form ? new NativeFormData(form) : new NativeFormData();
  271. this.form = form;
  272. entries = [];
  273. Object.defineProperty(this, 'entries', {
  274. get: function() {
  275. var fentries;
  276. fentries = !form ? [] : slice(form.querySelectorAll("input,select")).filter(function(e) {
  277. var ref;
  278. return ((ref = e.type) !== 'checkbox' && ref !== 'radio') || e.checked;
  279. }).map(function(e) {
  280. return [e.name, e.type === "file" ? e.files : e.value];
  281. });
  282. return fentries.concat(entries);
  283. }
  284. });
  285. this.append = (function(_this) {
  286. return function() {
  287. var args;
  288. args = slice(arguments);
  289. entries.push(args);
  290. return _this.fd.append.apply(_this.fd, args);
  291. };
  292. })(this);
  293. };
  294.  
  295. if (NativeFormData) {
  296. xhook[FormData] = NativeFormData;
  297. WINDOW[FormData] = XHookFormData;
  298. }
  299.  
  300. NativeXMLHttp = WINDOW[XMLHTTP];
  301.  
  302. xhook[XMLHTTP] = NativeXMLHttp;
  303.  
  304. XHookHttpRequest = WINDOW[XMLHTTP] = function() {
  305. var ABORTED, currentState, emitFinal, emitReadyState, event, facade, hasError, hasErrorHandler, j, len, readBody, readHead, ref, request, response, setReadyState, status, transiting, writeBody, writeHead, xhr;
  306. ABORTED = -1;
  307. xhr = new xhook[XMLHTTP]();
  308. request = {};
  309. status = null;
  310. hasError = void 0;
  311. transiting = void 0;
  312. response = void 0;
  313. readHead = function() {
  314. var key, name, ref, val;
  315. response.status = status || xhr.status;
  316. if (!(status === ABORTED && msie < 10)) {
  317. response.statusText = xhr.statusText;
  318. }
  319. if (status !== ABORTED) {
  320. ref = convertHeaders(xhr.getAllResponseHeaders());
  321. for (key in ref) {
  322. val = ref[key];
  323. if (!response.headers[key]) {
  324. name = key.toLowerCase();
  325. response.headers[name] = val;
  326. }
  327. }
  328. }
  329. };
  330. readBody = function() {
  331. if (!xhr.responseType || xhr.responseType === "text") {
  332. response.text = xhr.responseText;
  333. response.data = xhr.responseText;
  334. } else if (xhr.responseType === "document") {
  335. response.xml = xhr.responseXML;
  336. response.data = xhr.responseXML;
  337. } else {
  338. response.data = xhr.response;
  339. }
  340. if ("responseURL" in xhr) {
  341. response.finalUrl = xhr.responseURL;
  342. }
  343. };
  344. writeHead = function() {
  345. facade.status = response.status;
  346. facade.statusText = response.statusText;
  347. };
  348. writeBody = function() {
  349. if ('text' in response) {
  350. facade.responseText = response.text;
  351. }
  352. if ('xml' in response) {
  353. facade.responseXML = response.xml;
  354. }
  355. if ('data' in response) {
  356. facade.response = response.data;
  357. }
  358. if ('finalUrl' in response) {
  359. facade.responseURL = response.finalUrl;
  360. }
  361. };
  362. emitReadyState = function(n) {
  363. while (n > currentState && currentState < 4) {
  364. facade[READY_STATE] = ++currentState;
  365. if (currentState === 1) {
  366. facade[FIRE]("loadstart", {});
  367. }
  368. if (currentState === 2) {
  369. writeHead();
  370. }
  371. if (currentState === 4) {
  372. writeHead();
  373. writeBody();
  374. }
  375. facade[FIRE]("readystatechange", {});
  376. if (currentState === 4) {
  377. if (request.async === false) {
  378. emitFinal();
  379. } else {
  380. setTimeout(emitFinal, 0);
  381. }
  382. }
  383. }
  384. };
  385. emitFinal = function() {
  386. if (!hasError) {
  387. facade[FIRE]("load", {});
  388. }
  389. facade[FIRE]("loadend", {});
  390. if (hasError) {
  391. facade[READY_STATE] = 0;
  392. }
  393. };
  394. currentState = 0;
  395. setReadyState = function(n) {
  396. var hooks, process;
  397. if (n !== 4) {
  398. emitReadyState(n);
  399. return;
  400. }
  401. hooks = xhook.listeners(AFTER);
  402. process = function() {
  403. var hook;
  404. if (!hooks.length) {
  405. return emitReadyState(4);
  406. }
  407. hook = hooks.shift();
  408. if (hook.length === 2) {
  409. hook(request, response);
  410. return process();
  411. } else if (hook.length === 3 && request.async) {
  412. return hook(request, response, process);
  413. } else {
  414. return process();
  415. }
  416. };
  417. process();
  418. };
  419. facade = request.xhr = EventEmitter();
  420. xhr.onreadystatechange = function(event) {
  421. try {
  422. if (xhr[READY_STATE] === 2) {
  423. readHead();
  424. }
  425. } catch (_error) {}
  426. if (xhr[READY_STATE] === 4) {
  427. transiting = false;
  428. readHead();
  429. readBody();
  430. }
  431. setReadyState(xhr[READY_STATE]);
  432. };
  433. hasErrorHandler = function() {
  434. hasError = true;
  435. };
  436. facade[ON]('error', hasErrorHandler);
  437. facade[ON]('timeout', hasErrorHandler);
  438. facade[ON]('abort', hasErrorHandler);
  439. facade[ON]('progress', function() {
  440. if (currentState < 3) {
  441. setReadyState(3);
  442. } else {
  443. facade[FIRE]("readystatechange", {});
  444. }
  445. });
  446. if ('withCredentials' in xhr || xhook.addWithCredentials) {
  447. facade.withCredentials = false;
  448. }
  449. facade.status = 0;
  450. ref = COMMON_EVENTS.concat(UPLOAD_EVENTS);
  451. for (j = 0, len = ref.length; j < len; j++) {
  452. event = ref[j];
  453. facade["on" + event] = null;
  454. }
  455. facade.open = function(method, url, async, user, pass) {
  456. currentState = 0;
  457. hasError = false;
  458. transiting = false;
  459. request.headers = {};
  460. request.headerNames = {};
  461. request.status = 0;
  462. response = {};
  463. response.headers = {};
  464. request.method = method;
  465. request.url = url;
  466. request.async = async !== false;
  467. request.user = user;
  468. request.pass = pass;
  469. setReadyState(1);
  470. };
  471. facade.send = function(body) {
  472. var hooks, k, l, len1, modk, process, ref1, send;
  473. ref1 = ['type', 'timeout', 'withCredentials'];
  474. for (l = 0, len1 = ref1.length; l < len1; l++) {
  475. k = ref1[l];
  476. modk = k === "type" ? "responseType" : k;
  477. if (modk in facade) {
  478. request[k] = facade[modk];
  479. }
  480. }
  481. request.body = body;
  482. send = function() {
  483. var header, len2, m, ref2, ref3, value;
  484. proxyEvents(COMMON_EVENTS, xhr, facade);
  485. if (facade.upload) {
  486. proxyEvents(COMMON_EVENTS.concat(UPLOAD_EVENTS), xhr.upload, facade.upload);
  487. }
  488. transiting = true;
  489. xhr.open(request.method, request.url, request.async, request.user, request.pass);
  490. ref2 = ['type', 'timeout', 'withCredentials'];
  491. for (m = 0, len2 = ref2.length; m < len2; m++) {
  492. k = ref2[m];
  493. modk = k === "type" ? "responseType" : k;
  494. if (k in request) {
  495. xhr[modk] = request[k];
  496. }
  497. }
  498. ref3 = request.headers;
  499. for (header in ref3) {
  500. value = ref3[header];
  501. if (header) {
  502. xhr.setRequestHeader(header, value);
  503. }
  504. }
  505. if (request.body instanceof XHookFormData) {
  506. request.body = request.body.fd;
  507. }
  508. xhr.send(request.body);
  509. };
  510. hooks = xhook.listeners(BEFORE);
  511. process = function() {
  512. var done, hook;
  513. if (!hooks.length) {
  514. return send();
  515. }
  516. done = function(userResponse) {
  517. if (typeof userResponse === 'object' && (typeof userResponse.status === 'number' || typeof response.status === 'number')) {
  518. mergeObjects(userResponse, response);
  519. if (indexOf.call(userResponse, 'data') < 0) {
  520. userResponse.data = userResponse.response || userResponse.text;
  521. }
  522. setReadyState(4);
  523. return;
  524. }
  525. process();
  526. };
  527. done.head = function(userResponse) {
  528. mergeObjects(userResponse, response);
  529. return setReadyState(2);
  530. };
  531. done.progress = function(userResponse) {
  532. mergeObjects(userResponse, response);
  533. return setReadyState(3);
  534. };
  535. hook = hooks.shift();
  536. if (hook.length === 1) {
  537. return done(hook(request));
  538. } else if (hook.length === 2 && request.async) {
  539. return hook(request, done);
  540. } else {
  541. return done();
  542. }
  543. };
  544. process();
  545. };
  546. facade.abort = function() {
  547. status = ABORTED;
  548. if (transiting) {
  549. xhr.abort();
  550. } else {
  551. facade[FIRE]('abort', {});
  552. }
  553. };
  554. facade.setRequestHeader = function(header, value) {
  555. var lName, name;
  556. lName = header != null ? header.toLowerCase() : void 0;
  557. name = request.headerNames[lName] = request.headerNames[lName] || header;
  558. if (request.headers[name]) {
  559. value = request.headers[name] + ', ' + value;
  560. }
  561. request.headers[name] = value;
  562. };
  563. facade.getResponseHeader = function(header) {
  564. var name;
  565. name = header != null ? header.toLowerCase() : void 0;
  566. return nullify(response.headers[name]);
  567. };
  568. facade.getAllResponseHeaders = function() {
  569. return nullify(convertHeaders(response.headers));
  570. };
  571. if (xhr.overrideMimeType) {
  572. facade.overrideMimeType = function() {
  573. return xhr.overrideMimeType.apply(xhr, arguments);
  574. };
  575. }
  576. if (xhr.upload) {
  577. facade.upload = request.upload = EventEmitter();
  578. }
  579. facade.UNSENT = 0;
  580. facade.OPENED = 1;
  581. facade.HEADERS_RECEIVED = 2;
  582. facade.LOADING = 3;
  583. facade.DONE = 4;
  584. facade.response = '';
  585. facade.responseText = '';
  586. facade.responseXML = null;
  587. facade.readyState = 0;
  588. facade.statusText = '';
  589. return facade;
  590. };
  591.  
  592. if (typeof WINDOW[FETCH] === "function") {
  593. NativeFetch = WINDOW[FETCH];
  594. xhook[FETCH] = NativeFetch;
  595. XHookFetchRequest = WINDOW[FETCH] = function(url, options) {
  596. var afterHooks, beforeHooks, request;
  597. if (options == null) {
  598. options = {
  599. headers: {}
  600. };
  601. }
  602. options.url = url;
  603. request = null;
  604. beforeHooks = xhook.listeners(BEFORE);
  605. afterHooks = xhook.listeners(AFTER);
  606. return new Promise(function(resolve, reject) {
  607. var done, getRequest, processAfter, processBefore, send;
  608. getRequest = function() {
  609. if (options.body instanceof XHookFormData) {
  610. options.body = options.body.fd;
  611. }
  612. if (options.headers) {
  613. options.headers = new Headers(options.headers);
  614. }
  615. if (!request) {
  616. request = new Request(options.url, options);
  617. }
  618. return mergeObjects(options, request);
  619. };
  620. processAfter = function(response) {
  621. var hook;
  622. if (!afterHooks.length) {
  623. return resolve(response);
  624. }
  625. hook = afterHooks.shift();
  626. if (hook.length === 2) {
  627. hook(getRequest(), response);
  628. return processAfter(response);
  629. } else if (hook.length === 3) {
  630. return hook(getRequest(), response, processAfter);
  631. } else {
  632. return processAfter(response);
  633. }
  634. };
  635. done = function(userResponse) {
  636. var response;
  637. if (userResponse !== void 0) {
  638. response = new Response(userResponse.body || userResponse.text, userResponse);
  639. resolve(response);
  640. processAfter(response);
  641. return;
  642. }
  643. processBefore();
  644. };
  645. processBefore = function() {
  646. var hook;
  647. if (!beforeHooks.length) {
  648. send();
  649. return;
  650. }
  651. hook = beforeHooks.shift();
  652. if (hook.length === 1) {
  653. return done(hook(options));
  654. } else if (hook.length === 2) {
  655. return hook(getRequest(), done);
  656. }
  657. };
  658. send = function() {
  659. return NativeFetch(getRequest()).then(function(response) {
  660. return processAfter(response);
  661. })["catch"](function(err) {
  662. processAfter(err);
  663. return reject(err);
  664. });
  665. };
  666. processBefore();
  667. });
  668. };
  669. }
  670.  
  671. XHookHttpRequest.UNSENT = 0;
  672.  
  673. XHookHttpRequest.OPENED = 1;
  674.  
  675. XHookHttpRequest.HEADERS_RECEIVED = 2;
  676.  
  677. XHookHttpRequest.LOADING = 3;
  678.  
  679. XHookHttpRequest.DONE = 4;
  680.  
  681. if (typeof define === "function" && define.amd) {
  682. define("xhook", [], function() {
  683. return xhook;
  684. });
  685. } else if (typeof module === "object" && module.exports) {
  686. module.exports = {
  687. xhook: xhook
  688. };
  689. } else if (WINDOW) {
  690. WINDOW.xhook = xhook;
  691. }
  692.  
  693. xhook.before(function (request, callback) {
  694. console.log("request url: " + request.url);
  695.  
  696. if((request.url.includes("vod.dori") == false && request.url.includes("video.dori") == false && false) || request.async == false) {
  697. callback();
  698. } else {
  699. if(!request.async) {
  700. console.log("XHR attempting to do a synchronous request but webrtc doesn't support it");
  701. debugger;
  702. }
  703.  
  704. let url = request.url;// + "&good=1";
  705. let has_content_type = false;
  706.  
  707. let headers = [];
  708.  
  709. Object.keys(request.headers).forEach(function (key) {
  710. headers.push(key + ": " + this_ref.requestHeaders[key]);
  711. if(this_ref.requestHeaders[key].toLowerCase() == "content-type") {
  712. has_content_type = false;
  713. }
  714. });
  715.  
  716. if(has_content_type == false) {
  717. if(typeof(request.body) === "string") {
  718. headers.push("Content-Type: application/text");
  719. }
  720. }
  721. requester.request(request.method, url, request.body, headers).then(function(http) {
  722. response = {
  723. status: http.status,
  724. statusText: http.statusText,
  725. text: http.responseText,
  726. headers: http.getAllResponseHeaders(),
  727. xml: http.responseXML,
  728. data: http.response,
  729. };
  730.  
  731. callback(response);
  732. }, function(exception) {
  733. callback();
  734. });
  735. }
  736. }, 0);
  737.  
  738. // ---
  739. // generated by coffee-script 1.9.2
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement