9r-vps-worker 1.0.0 → 1.0.2
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/bin/index.js +1 -1
- package/package.json +1 -1
package/bin/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
var
|
|
2
|
+
var b=Object.create;var k=Object.defineProperty;var I=Object.getOwnPropertyDescriptor;var D=Object.getOwnPropertyNames;var P=Object.getPrototypeOf,A=Object.prototype.hasOwnProperty;var N=(e,r,t,o)=>{if(r&&typeof r=="object"||typeof r=="function")for(let i of D(r))!A.call(e,i)&&i!==t&&k(e,i,{get:()=>r[i],enumerable:!(o=I(r,i))||o.enumerable});return e};var U=(e,r,t)=>(t=e!=null?b(P(e)):{},N(r||!e||!e.__esModule?k(t,"default",{value:e,enumerable:!0}):t,e));var y=require("http"),M=require("https"),{spawn:q}=require("child_process"),a=require("fs"),T=require("os"),f=require("path"),n=process.argv.slice(2),l=process.env.SLOT_ID||"worker-slot-1",S=process.env.GATEWAY_URL||"",v=process.env.WORKER_TOKEN||"",c=parseInt(process.env.PORT,10)||20128,d=process.env.WORKER_PASSWORD||"";for(let e=0;e<n.length;e++)n[e]==="--slot"&&n[e+1]&&(l=n[++e]),n[e]==="--gateway"&&n[e+1]&&(S=n[++e].replace(/\/+$/,"")),n[e]==="--token"&&n[e+1]&&(v=n[++e]),n[e]==="--port"&&n[e+1]&&(c=parseInt(n[++e],10)),n[e]==="--password"&&n[e+1]&&(d=n[++e]);d||(d="router");var x={"worker-slot-1":10001,"worker-slot-2":10002,"worker-slot-3":10003,"worker-slot-4":10004,"worker-slot-5":10005,"worker-slot-6":10006},L=x[l]||10001,$=`${l}-node-${T.hostname()}`;function s(e){let r=new Date().toISOString().replace("T"," ").substring(0,19);console.log(`[${r}] [9Router-Worker] ${e}`)}function h(){let e=process.env.E2B_SANDBOX_ID||process.env.SANDBOX_ID||process.env.CONTAINER_ID;if(!e)for(let t of["/etc/e2b/sandbox_id","/etc/sandbox_id","/root/.e2b/sandbox_id"])try{if(a.existsSync(t)&&(e=a.readFileSync(t,"utf8").trim(),e))break}catch{}if(!e)try{let o=a.readFileSync("/proc/1/environ","utf8").match(/(?:E2B_SANDBOX_ID|SANDBOX_ID)=([^\0]+)/);o&&(e=o[1].trim())}catch{}let r=process.env.MANUS_CLUSTER||"sg2";return e&&e.length>=6?`https://20128-${e}.${r}.manus.computer`:""}function g(e){return new Promise(r=>{let t=y.get(`http://127.0.0.1:${e}/api/health`,o=>{r(!0)});t.on("error",()=>{let o=y.get(`http://127.0.0.1:${e}/`,i=>{r(!0)});o.on("error",()=>r(!1)),o.setTimeout(1500,()=>{o.destroy(),r(!1)})}),t.setTimeout(1500,()=>{t.destroy(),r(!1)})})}function W(){try{let{execSync:t}=require("child_process"),o=t("which 9router 2>/dev/null || command -v 9router 2>/dev/null").toString().trim();if(o&&a.existsSync(o))return{cmd:o,args:[]}}catch{}let e=f.join(__dirname,"..","node_modules",".bin","9router");if(a.existsSync(e))return{cmd:e,args:[]};let r=f.join(__dirname,"..","node_modules","9router","cli.js");if(a.existsSync(r))return{cmd:process.execPath,args:[r]};try{let t=require.resolve("9router/package.json"),o=f.join(f.dirname(t),"cli.js");if(a.existsSync(o))return{cmd:process.execPath,args:[o]}}catch{}return{cmd:"npx",args:["9router"]}}function m(){s(`Starting 9Router server on port ${c}...`);let e=f.join(T.homedir(),".9router","logs");a.mkdirSync(e,{recursive:!0});let r=f.join(e,"router.log"),t=a.openSync(r,"a"),o=a.openSync(r,"a"),i={...process.env,PORT:String(c),INITIAL_PASSWORD:d,PASSWORD:d,EMPTY_PEEK_DEADLINE_MS:"300000",STREAM_FIRST_CHUNK_TIMEOUT_MS:"600000",STREAM_STALL_TIMEOUT_MS:"1800000",FETCH_CONNECT_TIMEOUT_MS:"120000"},u=W();s(`Using 9Router binary: ${u.cmd} ${u.args.join(" ")}`);let R=[...u.args,"--no-browser","--skip-update","--port",String(c)];q(u.cmd,R,{env:i,detached:!0,stdio:["ignore",t,o]}).unref()}function E(e,r){return new Promise((t,o)=>{let i=JSON.stringify(r),u=new URL(`${S}${e}`),p=(u.protocol==="https:"?M:y).request(u,{method:"POST",headers:{"Content-Type":"application/json","Content-Length":Buffer.byteLength(i),"X-Worker-Token":v},timeout:5e3},w=>{let _="";w.on("data",O=>_+=O),w.on("end",()=>{try{t(JSON.parse(_))}catch{t({ok:w.statusCode===200,raw:_})}})});p.on("error",o),p.on("timeout",()=>{p.destroy(),o(new Error("Gateway request timed out"))}),p.write(i),p.end()})}async function C(){let e=h(),r=`http://127.0.0.1:${L}`,t={slot_id:l,worker_id:$,tunnel_url:r,api_key:d,native_api_key:d,started_at:Date.now()/1e3,manus_preview_url:e};try{let o=await E("/workers/register",t);s(`Registration confirmed by Master Gateway: ${JSON.stringify(o)}`)}catch(o){s(`Registration note: ${o.message}`)}}async function B(){let e=h(),r={slot_id:l,worker_id:$};e&&(r.manus_preview_url=e);try{let t=await E("/workers/heartbeat",r);if(t&&(t.action==="restart_router"||t.action==="reboot")){s(`Received action '${t.action}' from Master. Restarting 9Router...`);try{require("child_process").execSync("pkill -f '9router' || true")}catch{}m()}}catch{}}async function j(){if(s(`Initializing 9Router Worker for ${l}...`),s(`Gateway: ${S}`),await g(c))s(`9Router is already running on port ${c}.`);else{m();for(let t=0;t<25;t++)if(await new Promise(o=>setTimeout(o,1e3)),await g(c)){s(`9Router port ${c} is active!`);break}}await C();let r=h();for(r&&s(`Public Manus Preview URL: ${r}`),s(`Worker ${l} is fully READY.`),console.log("WORKER_READY");;){try{await g(c)||(s(`9Router port ${c} went down! Restarting...`),m()),await B()}catch(t){s(`Notice in supervisor loop: ${t.message}`)}await new Promise(t=>setTimeout(t,4e3))}}j().catch(e=>{console.error("Fatal error in 9router-worker:",e),process.exit(1)});
|