UNPKG

ipink-util

Version:

util.js

2 lines (1 loc) 1.22 kB
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./config.js"),t=require("./request.js");function handleSSEData(e){try{return JSON.parse(e)}catch(t){return{t:"",event:"message"}}}exports.createSSEConnection=function createSSEConnection(n){const{o:o,url:s,data:c={},headers:r,prefix:a=e.S.u,i:u,l:S,complete:i}=n||{},l=t.p(s||e.S.h,o,a),f=new XMLHttpRequest;f.open("POST",l,!0),f.setRequestHeader("Accept","text/event-stream"),f.setRequestHeader("Cache-Control","no-cache"),Object.keys(r||{}).forEach((e=>{f.setRequestHeader(e,r[e])})),f.responseType="text";let d="";return f.onprogress=function(e){const t=f.responseText.substring(d.length);if(t){d+=t;const e=t.split("\n");for(const t of e)if(t.startsWith("data:")){const e=handleSSEData(t.substring(5).trim());"message_end"!=e.event?u&&u(e):(u&&u(e),i&&i(d),f&&f.abort&&f.abort())}}else u&&u({}),i&&i(d)},f.onerror=function(e){console.error("SSE连接错误:"),S&&S(e),i&&i()},f.onreadystatechange=function(){4===f.readyState&&(200===f.status?console.log("SSE连接完成"):(console.log("SSE连接失败",f.status),S&&S({statusCode:f.status,m:f.responseXML||f.responseText}),i&&i()))},f.send(JSON.stringify(c)),f};