@helixlife-ai/xiantao 0.1.22 → 0.1.23

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.
@@ -0,0 +1,4 @@
1
+ import{Args as f,Flags as d}from"@oclif/core";import{XtzCommand as l}from"../../base-command.js";import{getAuthContext as c}from"../../lib/auth.js";import{fetchXiantaoHistoryDownloadButtons as u}from"../../lib/history.js";import{globalFlags as g}from"../../lib/flags.js";class a extends l{static description="View downloadable files for a Xiantao history record";static args={fuid:f.string({description:"History record fuid",required:!0})};static flags={...g,token:d.string({description:"Bearer token for agent.helixlife.cn xiantao APIs; falls back to the stored agent token"})};async run(){const{args:o,flags:t}=await this.parse(a),i=await this.getProfile(t.profile),e=await c(i,t.token),r=await u(e,{fuid:o.fuid}),s={agent:i,downloads:r.downloads,fuid:o.fuid},n=this.formatText(o.fuid,r.downloads);this.print(t,s,n,{command:"history view",profile:i})}formatText(o,t){if(t.length===0)return`fuid: ${o}
2
+
3
+ \u6682\u65E0\u53EF\u4E0B\u8F7D\u6587\u4EF6`;const i=[`fuid: ${o}`,"",`\u53EF\u4E0B\u8F7D\u6587\u4EF6\uFF08\u5171 ${t.length} \u9879\uFF09\uFF1A`];return t.forEach((e,r)=>{i.push(` ${r+1}. ${e.label} (device=${e.device})`)}),i.join(`
4
+ `)}}export{a as default};
@@ -1,4 +1,4 @@
1
- import m from"node:http";import{AUTH_BIND_ENDPOINT as p,PASSPORT_JUMP_ENDPOINT as w}from"./constants.js";import{openUrl as d}from"./open-url.js";import{XtzError as c}from"./errors.js";import{requestJson as E}from"./http.js";import{getXiantaoTokenPath as F,loadXiantaoToken as f,requireXiantaoToken as D,saveXiantaoToken as k}from"./storage.js";async function y(t,e){const a=e?.trim()||process.env.XIANTAO_TOKEN?.trim()||await D(t);return{agent:t,token:a}}async function h(t){const e=await f(t);return e?{agent:t,token:e}:void 0}async function C(t){const e=await g(),a=e.callbackUrl.toString(),u=new URL(w);u.searchParams.set("cb_url",a);const n=await d(u.toString()),i=await e.waitForToken(),l=await k(t,i);return{browserOpened:n,callbackUrl:a,jumpUrl:u.toString(),reused:!1,token:i,tokenPath:l}}async function T(t,e){const a=await h(t);if(a){try{await E(p,{body:JSON.stringify({auth_key:e}),headers:{Authorization:`Bearer ${a.token}`,"Content-Type":"application/json",origin:"https://www.helixlife.net",platform:"pc",referer:"https://www.helixlife.net/",source:"PC"},method:"POST"},{agent:t,tokenKind:"xiantao"})}catch(u){if(u instanceof c&&u.message.includes("\u4ED9\u6843\u7F51\u9875\u6388\u6743\u5DF2\u8FC7\u671F\u6216\u65E0\u6548"))return;throw u}return{browserOpened:!1,reused:!0,token:a.token,tokenPath:F(t)}}}async function g(){let t,e;const a=new Promise((r,o)=>{t=r,e=o}),u=m.createServer((r,o)=>{const s=new URL(r.url??"/","http://127.0.0.1").searchParams.get("t")?.trim();if(o.statusCode=s?200:400,o.setHeader("Content-Type","text/html; charset=utf-8"),o.end(s?B:P),u.close(),s){t(s);return}e(new c("\u672A\u4ECE\u6D4F\u89C8\u5668\u56DE\u8C03\u4E2D\u83B7\u53D6\u5230\u4ED9\u6843\u7F51\u9875 token"))});await new Promise((r,o)=>{u.listen(0,"127.0.0.1",()=>r()),u.once("error",o)});const n=u.address();if(!n||typeof n=="string")throw u.close(),new c("\u65E0\u6CD5\u542F\u52A8\u672C\u5730\u767B\u5F55\u56DE\u8C03\u670D\u52A1");const i=new URL(`http://127.0.0.1:${n.port}/callback`),l=setTimeout(()=>{u.close(),e(new c("\u7B49\u5F85\u4ED9\u6843\u7F51\u9875\u767B\u5F55\u56DE\u8C03\u8D85\u65F6"))},300*1e3);return{callbackUrl:i,waitForToken:async()=>{try{return await a}finally{clearTimeout(l)}}}}const B=`<!doctype html>
1
+ import m from"node:http";import{AUTH_BIND_ENDPOINT as p,PASSPORT_JUMP_ENDPOINT as w}from"./constants.js";import{openUrl as d}from"./open-url.js";import{XtzError as c}from"./errors.js";import{requestJson as E}from"./http.js";import{getXiantaoTokenPath as F,loadXiantaoToken as f,requireXiantaoToken as D,saveXiantaoToken as k}from"./storage.js";async function y(t,e){const a=e?.trim()||process.env.XIANTAO_TOKEN?.trim()||await D(t);return{agent:t,token:a}}async function h(t){const e=await f(t);return e?{agent:t,token:e}:void 0}async function C(t){const e=await g(),a=e.callbackUrl.toString(),u=new URL(w);u.searchParams.set("cb_url",a);const o=await d(u.toString()),i=await e.waitForToken(),l=await k(t,i);return{browserOpened:o,callbackUrl:a,jumpUrl:u.toString(),reused:!1,token:i,tokenPath:l}}async function T(t,e){const a=await h(t);if(a){try{await E(p,{body:JSON.stringify({auth_key:e}),headers:{Authorization:`Bearer ${a.token}`,"Content-Type":"application/json",origin:"https://www.helixlife.net",platform:"pc",referer:"https://www.helixlife.net/",source:"PC"},method:"POST"},{agent:t,tokenKind:"xiantao"})}catch(u){if(u instanceof c&&u.message.includes("\u4ED9\u6843\u7F51\u9875\u6388\u6743\u5DF2\u8FC7\u671F\u6216\u65E0\u6548"))return;throw u}return{browserOpened:!1,reused:!0,token:a.token,tokenPath:F(t)}}}async function g(){let t,e;const a=new Promise((r,n)=>{t=r,e=n}),u=m.createServer((r,n)=>{const s=new URL(r.url??"/","http://127.0.0.1").searchParams.get("t")?.trim();if(n.statusCode=s?200:400,n.setHeader("Content-Type","text/html; charset=utf-8"),n.end(s?B:P),u.close(),s){t(s);return}e(new c("\u672A\u4ECE\u6D4F\u89C8\u5668\u56DE\u8C03\u4E2D\u83B7\u53D6\u5230\u4ED9\u6843\u7F51\u9875 token"))});await new Promise((r,n)=>{u.listen(0,"127.0.0.1",()=>r()),u.once("error",n)});const o=u.address();if(!o||typeof o=="string")throw u.close(),new c("\u65E0\u6CD5\u542F\u52A8\u672C\u5730\u767B\u5F55\u56DE\u8C03\u670D\u52A1");const i=new URL(`http://127.0.0.1:${o.port}/callback`),l=setTimeout(()=>{u.close(),e(new c("\u7B49\u5F85\u4ED9\u6843\u7F51\u9875\u767B\u5F55\u56DE\u8C03\u8D85\u65F6"))},300*1e3);return{callbackUrl:i,waitForToken:async()=>{try{return await a}finally{clearTimeout(l)}}}}const B=`<!doctype html>
2
2
  <html lang="zh-CN">
3
3
  <head><meta charset="utf-8"><title>\u767B\u5F55\u6210\u529F</title></head>
4
4
  <body><p>\u4ED9\u6843\u7F51\u9875\u767B\u5F55\u6210\u529F\uFF0C\u73B0\u5728\u53EF\u4EE5\u5173\u95ED\u6B64\u9875\u9762\u5E76\u56DE\u5230\u7EC8\u7AEF\u3002</p></body>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@helixlife-ai/xiantao",
3
- "version": "0.1.22",
3
+ "version": "0.1.23",
4
4
  "description": "CLI for Xiantao bioinformatics tools",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",