@round2ai/r2-cli 1.0.16 → 1.0.17

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/dist/r2-cli.js CHANGED
@@ -1,46 +1,78 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- var zo=Object.defineProperty;var A=(e,t)=>()=>(e&&(t=e(e=0)),t);var at=(e,t)=>{for(var o in t)zo(e,o,{get:t[o],enumerable:!0})};function z(e){return e instanceof q?e.errorType:e instanceof DOMException&&e.name==="AbortError"?"timeout":e instanceof TypeError?"network":"unknown"}var q,b,G,C,j,D=A(()=>{"use strict";q=class e extends Error{constructor(o,r,n,i="unknown"){super(o);this.code=r;this.details=n;this.errorType=i;this.name="R2Error",Error.captureStackTrace&&Error.captureStackTrace(this,e)}code;details;errorType},b=class extends q{constructor(o,r,n,i){super(o,"API_ERROR",n,i??(r===401?"auth_expired":"business"));this.status=r;this.response=n;this.name="ApiError"}status;response},G=class extends q{constructor(o,r,n){super(o,"STORAGE_ERROR",{path:r,code:n},"storage");this.path=r;this.code=n;this.name="StorageError"}path;code},C=class extends q{constructor(t){super(t,"AUTH_ERROR",void 0,"auth_expired"),this.name="AuthError"}},j=class extends q{constructor(o,r,n){super(o,"POLLING_ERROR",{attempts:r,timeout:n},"polling");this.attempts=r;this.timeout=n;this.name="PollingError"}attempts;timeout}});function E(e){let t=new URLSearchParams;for(let[o,r]of Object.entries(e))r!=null&&r!==""&&t.append(o,String(r));return t}function H(e,t){let o=null;return()=>(o||(o=e(),t?.(o)),o)}var _=A(()=>{"use strict"});import{promises as V}from"node:fs";import Mt from"node:path";import ar from"node:os";var cr,ct,It,Qt=A(()=>{"use strict";D();_();cr=".r2-cli",ct=class{configPath;config;configLoaded=!1;dirEnsured=!1;constructor(){let t=ar.homedir(),o=Mt.join(t,cr);this.configPath=Mt.join(o,"config.json"),this.config={credentials:null}}getConfigPath(){return this.configPath}async loadConfig(){if(this.configLoaded)return this.config;try{let t=await V.readFile(this.configPath,"utf-8");return this.config=JSON.parse(t),this.configLoaded=!0,this.config}catch{return this.config={credentials:null},this.configLoaded=!0,this.config}}async ensureDir(){if(this.dirEnsured)return;let t=Mt.dirname(this.configPath);try{await V.stat(t)}catch(o){if(o.code==="ENOENT")await V.mkdir(t,{recursive:!0});else throw new G("Failed to create directory",t,o.code)}this.dirEnsured=!0}async saveConfig(t){this.config=t,await this.ensureDir();let o=JSON.stringify(t,null,2),r=this.configPath+".tmp";try{await V.writeFile(r,o,"utf-8"),await V.rename(r,this.configPath),this.configLoaded=!0}catch(n){throw await V.unlink(r).catch(i=>{typeof process.env.DEBUG<"u"&&console.error("[config] cleanup tmp failed:",i)}),new G("Failed to save config",this.configPath,n.code)}}},It=H(()=>new ct)});var Ft,lt,Y,zt=A(()=>{"use strict";Qt();_();Ft=300*1e3,lt=class{store=It();isTokenExpired(t){return t.expire?Date.now()>=t.expire-Ft:!1}async saveCredentials(t,o){let r=Date.now(),n=o.expire?Number.parseInt(o.expire,10):0,i={token:t,userInfo:o,timestamp:r,...n>0&&{expire:r+n}},s=await this.store.loadConfig();s.credentials=i,await this.store.saveConfig(s)}async getCredentials(){let t=await this.store.loadConfig();return!t.credentials||this.isTokenExpired(t.credentials)?null:t.credentials}async clearCredentials(){let t=await this.store.loadConfig();t.credentials=null,await this.store.saveConfig(t)}async getToken(){return(await this.getCredentials())?.token??null}async getUserInfo(){return(await this.getCredentials())?.userInfo??null}async isLoggedIn(){return await this.getCredentials()!==null}},Y=H(()=>new lt)});var Wt={};at(Wt,{AuthStorage:()=>lt,ConfigStore:()=>ct,getAuthStorage:()=>Y,getConfigStore:()=>It});var dt=A(()=>{"use strict";Qt();zt()});var ze={};at(ze,{UserInfoCard:()=>mr});import{Box as K,Text as J}from"ink";import{jsx as M,jsxs as Z}from"react/jsx-runtime";function mr({userInfo:e,lastLogin:t,daysSinceLogin:o}){let r=e.mobile?e.mobile.replace(/(\d{3})\d{4}(\d{4})/,"$1****$2"):"-";return Z(K,{flexDirection:"column",marginTop:1,borderStyle:"round",borderColor:"gray",paddingX:1,alignSelf:"flex-start",children:[M(J,{bold:!0,color:"cyan",children:"\u7528\u6237\u4FE1\u606F"}),Z(K,{flexDirection:"row",marginTop:1,children:[M(K,{width:10,children:M(J,{color:"gray",children:"\u6635\u79F0"})}),M(J,{color:"yellow",children:e.nickname})]}),Z(K,{flexDirection:"row",children:[M(K,{width:10,children:M(J,{color:"gray",children:"\u624B\u673A\u53F7"})}),M(J,{color:"yellow",children:r})]}),t&&Z(K,{flexDirection:"column",marginTop:1,children:[Z(J,{color:"gray",children:["\u6700\u540E\u767B\u5F55: ",t.toLocaleString()]}),o!==void 0&&Z(J,{color:"gray",children:[" \u8DDD\u4ECA: ",o," \u5929"]})]})]})}var We=A(()=>{"use strict"});var St={};at(St,{renderComponent:()=>Vt,renderOnce:()=>He});import ur from"react";import Ht from"chalk";import{render as pr}from"ink";import{Writable as gr}from"node:stream";function He(e){let t=Ht.level;process.env.NO_COLOR||(Ht.level=3);try{let o=[],r=new gr({write(d,w,P){o.push(Buffer.from(d)),P()}});r.isTTY=!0,r.columns=process.stdout.columns||80,r.rows=process.stdout.rows||24,pr(e,{stdout:r,patchConsole:!1}).unmount();let i=Buffer.concat(o).toString("utf8"),a=(i.split(/\x1B\[2J\x1B\[3J\x1B\[H/).at(-1)||i).replace(/\x1B\[\?[\d;]+[hl]/g,"").trimEnd()+`
4
- `;process.stdout.write(a)}finally{Ht.level=t}}function Vt(e,t){He(ur.createElement(e,t))}var ut=A(()=>{"use strict"});import{Box as we,Text as xe}from"ink";import{jsx as po,jsxs as Ot}from"react/jsx-runtime";function tt(e,t){return e.length>t?e.slice(0,t-1)+"\u2026":e}function et(e){let t=process.stdout.columns||80,r=Math.max(t-4-e,20),n=e+r;return{fillWidth:r,totalWidth:n}}function ot({title:e,count:t,countLabel:o="\u6761",fillWidth:r,totalWidth:n,header:i,children:s}){return Ot(we,{flexDirection:"column",marginTop:1,borderStyle:"round",borderColor:"gray",paddingX:1,children:[Ot(we,{flexDirection:"row",children:[po(xe,{bold:!0,color:"cyan",children:e}),Ot(xe,{color:"gray",children:[" \xB7 ",t," ",o]})]}),Ot(we,{flexDirection:"column",marginTop:1,children:[i,po(xe,{color:"gray",children:"\u2500".repeat(n)}),s]})]})}var Ut=A(()=>{"use strict"});var fo={};at(fo,{ShopsTable:()=>Xr});import{Box as N,Text as B}from"ink";import{jsx as f,jsxs as ho}from"react/jsx-runtime";function qr(e){return e.map(t=>"shopName"in t?{id:t.shopId,name:t.shopName,platform:t.platform,expiresIn:t.expiresIn}:{id:t.id,name:t.name,platform:t.thirdUserId,expiresIn:t.expiresIn})}function Gr({hasPlatform:e,fillWidth:t}){return ho(N,{flexDirection:"row",paddingBottom:0,children:[e&&f(N,{width:Ie,children:f(B,{bold:!0,color:"white",children:"\u5E73\u53F0"})}),f(N,{width:t,children:f(B,{bold:!0,color:"white",children:"\u5E97\u94FA\u540D"})}),f(N,{width:Se,children:f(B,{bold:!0,color:"white",children:"ID"})}),f(N,{width:Ce,children:f(B,{bold:!0,color:"white",children:"\u72B6\u6001"})})]})}function _r({shop:e,hasPlatform:t,fillWidth:o}){let r=go[e.platform]??e.platform;return ho(N,{flexDirection:"row",children:[t&&f(N,{width:Ie,children:f(B,{color:"cyan",children:r})}),f(N,{width:o,children:f(B,{bold:!0,children:e.name})}),f(N,{width:Se,children:f(B,{color:"gray",children:e.id})}),f(N,{width:Ce,children:f(B,{color:"green",children:"\u25CF \u6388\u6743\u4E2D"})})]})}function Xr({shops:e,platform:t}){let o=qr(e),r=t==="all",n=t==="all"?"\u6240\u6709\u6388\u6743\u5E97\u94FA":`${go[t]??t}\u6388\u6743\u5E97\u94FA`,i=Se+Ce+(r?Ie:0),{fillWidth:s,totalWidth:a}=et(i);return f(ot,{title:n,count:o.length,countLabel:"\u5BB6",fillWidth:s,totalWidth:a,header:f(Gr,{hasPlatform:r,fillWidth:s}),children:o.map(d=>f(_r,{shop:d,hasPlatform:r,fillWidth:s},d.id))})}var go,Ie,Se,Ce,yo=A(()=>{"use strict";Ut();go={xianyu:"\u95F2\u9C7C",douyin:"\u6296\u97F3"},Ie=8,Se=16,Ce=10});var Io={};at(Io,{StocksTable:()=>Fr});import{Box as T,Text as O}from"ink";import{jsx as u,jsxs as So}from"react/jsx-runtime";function Mr({fillWidth:e}){return So(T,{flexDirection:"row",paddingBottom:0,children:[u(T,{width:Te,children:u(O,{bold:!0,color:"white",children:"ID"})}),u(T,{width:be,children:u(O,{bold:!0,color:"white",children:"\u7528\u6237ID"})}),u(T,{width:Pe,children:u(O,{bold:!0,color:"white",children:"\u4ED3\u5E93ID"})}),u(T,{width:e,children:u(O,{bold:!0,color:"white",children:"\u4ED3\u5E93\u540D\u79F0"})}),u(T,{width:Ae,children:u(O,{bold:!0,color:"white",children:"\u521B\u5EFA\u65F6\u95F4"})})]})}function Qr({stock:e,fillWidth:t}){let o=new Date(e.gmtCreate).toLocaleString("zh-CN");return So(T,{flexDirection:"row",children:[u(T,{width:Te,children:u(O,{color:"gray",children:e.id})}),u(T,{width:be,children:u(O,{color:"gray",children:e.userId})}),u(T,{width:Pe,children:u(O,{color:"gray",children:e.stockId})}),u(T,{width:t,children:u(O,{bold:!0,children:e.stockName})}),u(T,{width:Ae,children:u(O,{color:"gray",children:o})})]})}function Fr({stocks:e}){let t=Te+be+Pe+Ae,{fillWidth:o,totalWidth:r}=et(t);return u(ot,{title:"\u4ED3\u5E93\u5217\u8868",count:e.length,countLabel:"\u4E2A",fillWidth:o,totalWidth:r,header:u(Mr,{fillWidth:o}),children:e.map(n=>u(Qr,{stock:n,fillWidth:o},n.id))})}var Te,be,Pe,Ae,Co=A(()=>{"use strict";Ut();Te=6,be=10,Pe=10,Ae=22});import{Command as On}from"commander";import it from"chalk";import"commander";import{Command as io}from"commander";import I from"chalk";D();async function Wo(e,t,o){let r=new AbortController,n=()=>r.abort();o?.addEventListener("abort",n,{once:!0});let i=setTimeout(()=>r.abort(),t);try{return await e()}catch(s){throw r.signal.aborted&&!o?.aborted?new j("\u5355\u6B21\u8F6E\u8BE2\u8BF7\u6C42\u8D85\u65F6"):s}finally{clearTimeout(i),o?.removeEventListener("abort",n)}}async function W(e,t,o){let{interval:r,timeout:n,condition:i}=t,s=Date.now(),a=0;for(;Date.now()-s<n;){if(o?.aborted)throw new j("\u8F6E\u8BE2\u88AB\u4E2D\u6B62");a++;let d=n-(Date.now()-s),w=await Wo(e,d,o);if(i(w,a))return w;await Ho(r,o)}throw new j(`\u8F6E\u8BE2\u8D85\u65F6 (\u5DF2\u7B49\u5F85 ${Date.now()-s}ms, \u5171 ${a} \u6B21)`)}function Ho(e,t){return new Promise((o,r)=>{if(t?.aborted){r(new j("\u8F6E\u8BE2\u88AB\u4E2D\u6B62"));return}let n=()=>{clearTimeout(i),r(new j("\u8F6E\u8BE2\u88AB\u4E2D\u6B62"))},i=setTimeout(()=>{t?.removeEventListener("abort",n),o()},e);t?.addEventListener("abort",n,{once:!0})})}import Ko from"node:fs";import{fileURLToPath as Zo}from"node:url";import{createRequire as tr}from"node:module";import Xe from"node:path";import{exec as er}from"node:child_process";_();import Vo from"node:http";var Gt=class e{server=null;pages=new Map;port=0;idleTimer=null;static IDLE_TIMEOUT_MS=1e4;async start(){return this.server?this.port:new Promise((t,o)=>{this.server=Vo.createServer((r,n)=>this.handleRequest(r,n)),this.server.listen(0,"127.0.0.1",()=>{let r=this.server.address();typeof r=="object"&&r?(this.port=r.port,t(this.port)):o(new Error("Failed to get server address"))}),this.server.on("error",o)})}registerPage(t,o,r,n){let i=this.pages.get(t);if(i){i.qrBuffer=r,i.status="waiting",i.config=n;let s=`data: ${JSON.stringify({status:"waiting"})}
5
-
6
- `;for(let a of i.sseClients)a.write(s)}else this.pages.set(t,{html:o,qrBuffer:r,status:"waiting",sseClients:[],config:n});this.resetIdleTimer()}unregisterPage(t){let o=this.pages.get(t);if(o){for(let r of o.sseClients)r.end();o.sseClients.length=0,this.pages.delete(t),this.pages.size===0&&this.close()}}setStatus(t,o){let r=this.pages.get(t);if(!r)return;r.status=o;let n=`data: ${JSON.stringify({status:o})}
7
-
8
- `;for(let i of r.sseClients)i.write(n)}close(){if(this.server){this.idleTimer&&(clearTimeout(this.idleTimer),this.idleTimer=null);for(let t of this.pages.values()){for(let o of t.sseClients)o.end();t.sseClients.length=0}this.pages.clear(),this.server.close(),this.server=null,this.port=0}}resetIdleTimer(){this.idleTimer&&clearTimeout(this.idleTimer),this.idleTimer=setTimeout(()=>{[...this.pages.values()].some(o=>o.sseClients.length>0)||this.close()},e.IDLE_TIMEOUT_MS)}handleRequest(t,o){let r=t.url??"/";for(let[n,i]of this.pages){if(r===n){o.writeHead(302,{Location:n+"/"}),o.end();return}if(r===n+"/"){o.writeHead(200,{"Content-Type":"text/html; charset=utf-8"}),o.end(i.html);return}if(r===n+"/qr.png"){o.writeHead(200,{"Content-Type":"image/png","Content-Length":i.qrBuffer.length}),o.end(i.qrBuffer);return}if(r===n+"/events"){o.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"}),o.write(`data: ${JSON.stringify({status:i.status})}
9
-
10
- `),i.sseClients.push(o),t.on("close",()=>{let s=i.sseClients.indexOf(o);s>=0&&i.sseClients.splice(s,1)});return}if(r===n+"/config"){o.writeHead(200,{"Content-Type":"application/json"}),o.end(JSON.stringify(i.config??{}));return}}o.writeHead(404,{"Content-Type":"text/plain"}),o.end("Not Found")}},Ge=!1;function xt(e){e.close()}function Yo(e){Ge||(Ge=!0,process.on("exit",()=>xt(e)),process.on("SIGINT",()=>xt(e)),process.on("SIGTERM",()=>xt(e)),setInterval(()=>{process.stdin?.destroyed&&xt(e)},3e3).unref())}var _e=H(()=>new Gt,Yo);var or=Xe.dirname(Zo(import.meta.url)),rr="/login",nr="/login-xianyu",_t=null;async function ir(e){return Ko.promises.readFile(Xe.join(or,"pages",e),"utf-8")}async function sr(e){return _t||(_t=tr(import.meta.url)),_t("qrcode").toBuffer(e,{width:300,margin:2})}function X(e){let t=process.platform==="win32"?`start "" "${e}"`:process.platform==="darwin"?`open "${e}"`:`xdg-open "${e}"`;er(t)}async function Je(e,t,o,r){let[n,i]=await Promise.all([ir(t),sr(o)]),s=_e(),a=await s.start();s.registerPage(e,n,i,r);let d=`http://127.0.0.1:${a}${e}/`;return{url:o,qrUrl:d,setStatus:w=>s.setStatus(e,w),closeServer:()=>s.unregisterPage(e)}}function Xt(e){return Je(rr,"login.html",e)}function Jt(e,t){return Je(nr,"xianyu-auth.html",e,{authUrl:t})}dt();zt();D();var lr="https://api.puresnake.com",mt=class e{config;authStorage=null;cachedToken=null;tokenExpiry=0;constructor(t={}){this.config={baseUrl:t.baseUrl??lr,version:t.version??"v3",debug:t.debug??!1},this.authStorage=Y()}static createNoAuth(){let t=new e;return t.authStorage=null,t}buildUrl(t){let o=t.startsWith("/")?t.slice(1):t;return`${this.config.baseUrl}/${this.config.version}/${o}`}async getAuthToken(){if(!this.authStorage)return;if(this.cachedToken&&Date.now()<this.tokenExpiry)return this.cachedToken;let t=await this.authStorage.getCredentials();if(!t)throw new C("\u8BF7\u5148\u8FD0\u884C r2-cli auth login \u767B\u5F55");return this.cachedToken=t.token,this.tokenExpiry=t.expire?t.expire-Ft:Date.now()+1800*1e3,t.token}async requestRaw(t,o,r={}){let n=this.buildUrl(t),i=r.timeout??3e4,s=await this.getAuthToken(),a={...o.headers,...s?{token:s}:{}},d=new AbortController,w=setTimeout(()=>d.abort(),i),P={...o,headers:a,signal:d.signal};this.config.debug&&console.error(`[API ${o.method??"GET"}]`,n,o.body);try{let c=await fetch(n,P);if(!c.ok){if(c.status===401)throw this.authStorage&&(this.cachedToken=null,await this.authStorage.clearCredentials().catch(()=>{})),new C("\u767B\u5F55\u5DF2\u8FC7\u671F\uFF0C\u8BF7\u8FD0\u884C r2-cli auth login \u91CD\u65B0\u767B\u5F55");if(c.status===413)throw new b("\u56FE\u7247\u592A\u5927\uFF0C\u4E0A\u4F20\u5931\u8D25\uFF08\u670D\u52A1\u7AEF\u9650\u5236\u7EA6 2MB\uFF09",413);let wt=await c.text();throw new b(wt||`${c.status} ${c.statusText}`,c.status)}let x=await c.json();if(this.config.debug&&console.error("[API Response]",x),!x.success||x.status!==0)throw new b(x.msg||"\u672A\u77E5\u9519\u8BEF",x.status,x);return x}catch(c){throw c instanceof DOMException&&c.name==="AbortError"?new b(`\u8BF7\u6C42\u8D85\u65F6 (${i}ms)`,408,void 0,"timeout"):c instanceof TypeError?new b(`\u7F51\u7EDC\u9519\u8BEF: ${c.message}`,0,void 0,"network"):c}finally{clearTimeout(w)}}async requestFull(t,o){let{method:r,headers:n,body:i,timeout:s=3e4}=o,a={method:r,headers:{"Content-Type":"application/json",...n},...i!==void 0&&{body:JSON.stringify(i)}};return this.requestRaw(t,a,{timeout:s})}async request(t,o){return(await this.requestFull(t,o)).data}async get(t,o,r){let n=o&&o.size>0?`${t}?${o.toString()}`:t;return this.request(n,{method:"GET",headers:r})}async post(t,o,r){return this.request(t,{method:"POST",body:o,headers:r})}async put(t,o,r){return this.request(t,{method:"PUT",body:o,headers:r})}async delete(t,o){return this.request(t,{method:"DELETE",headers:o})}async upload(t,o,r){let n={method:"POST",body:o,headers:r};return(await this.requestRaw(t,n,{timeout:6e4})).data}},v=new mt;var Me=mt.createNoAuth();async function Qe(){return Me.post("app/qrcode/generate")}async function Fe(e){let t=new URLSearchParams;t.append("qrToken",e);let o=`app/qrcode/status?${t.toString()}`,r=await Me.requestFull(o,{method:"GET"});return r.token&&typeof r.data=="object"&&r.data!==null&&(r.data.token=r.token),r.data}dt();D();async function Ve(e,t,o){let{UserInfoCard:r}=await Promise.resolve().then(()=>(We(),ze)),{renderComponent:n}=await Promise.resolve().then(()=>(ut(),St)),i=t!=null?{userInfo:e,lastLogin:t,daysSinceLogin:o??0}:{userInfo:e};n(r,i)}var Ct=class{storage;constructor(t){this.storage=t??Y()}async generateQR(){let t=await Qe(),o=`https://m.puresnake.com/r2/auth/login?qrToken=${t.qrContent}&from=wechat`,r=await Xt(o);return{qrData:t,...r}}async waitForLogin(t,o,r,n,i,s){let a=await W(()=>Fe(t),{interval:r,timeout:o,condition:d=>{switch(d.status){case"scanned":return s||(console.log(I.cyan(`
11
- \u{1F50D} \u5DF2\u626B\u7801: ${d.userInfo?.nickname||"\u672A\u77E5\u7528\u6237"}`)),console.log(I.yellow("\u8BF7\u5728 APP \u4E0A\u786E\u8BA4\u767B\u5F55"))),i?.("scanning"),!1;case"confirmed":return s||console.log(I.green(`
12
- \u2705 \u7528\u6237\u5DF2\u786E\u8BA4\u767B\u5F55`)),i?.("success"),!0;case"expired":return s||console.log(I.red(`
13
- \u23F0 \u4E8C\u7EF4\u7801\u5DF2\u8FC7\u671F`)),i?.("expired"),!0;case"canceled":return s||console.log(I.red(`
14
- \u{1F6AB} \u7528\u6237\u5DF2\u53D6\u6D88\u767B\u5F55`)),i?.("expired"),!0;default:return!1}}},n??void 0);if(a.status==="confirmed"&&a.token&&a.userInfo)return await this.storage.saveCredentials(a.token,a.userInfo),{userInfo:a.userInfo,token:a.token};throw a.status==="expired"?new C("\u4E8C\u7EF4\u7801\u5DF2\u8FC7\u671F\uFF0C\u8BF7\u91CD\u65B0\u767B\u5F55"):a.status==="canceled"?new C("\u7528\u6237\u5DF2\u53D6\u6D88\u767B\u5F55"):new C("\u767B\u5F55\u5931\u8D25: \u672A\u83B7\u53D6\u5230\u51ED\u8BC1")}async login(t){console.log(I.cyan(`
15
- \u{1F510} \u6B63\u5728\u542F\u52A8\u626B\u7801\u767B\u5F55...`));let{qrData:o,qrUrl:r,setStatus:n,closeServer:i}=await this.generateQR();console.log(I.green(`\u2705 \u4E8C\u7EF4\u7801\u5DF2\u751F\u6210
16
- `)),console.log(I.cyan(` \u94FE\u63A5: ${r}
17
- `)),X(r),console.log(I.yellow(`\u23F3 \u7B49\u5F85\u626B\u7801...
18
- `));let s=Number.parseInt(o.expireTime,10),a=Number.parseInt(o.pollInterval,10);try{let d=await this.waitForLogin(o.qrToken,s,a,t,n);return console.log(I.green(`
3
+ var fr=Object.defineProperty;var N=(t,o)=>()=>(t&&(o=t(t=0)),o);var V=(t,o)=>{for(var e in o)fr(t,e,{get:o[e],enumerable:!0})};function lt(t){return t instanceof Q?t.errorType:t instanceof DOMException&&t.name==="AbortError"?"timeout":t instanceof TypeError?"network":"unknown"}var Q,v,F,k,q,B=N(()=>{"use strict";Q=class t extends Error{constructor(e,r,n,i="unknown"){super(e);this.code=r;this.details=n;this.errorType=i;this.name="R2Error",Error.captureStackTrace&&Error.captureStackTrace(this,t)}code;details;errorType},v=class extends Q{constructor(e,r,n,i){super(e,"API_ERROR",n,i??(r===401?"auth_expired":"business"));this.status=r;this.response=n;this.name="ApiError"}status;response},F=class extends Q{constructor(e,r,n){super(e,"STORAGE_ERROR",{path:r,code:n},"storage");this.path=r;this.code=n;this.name="StorageError"}path;code},k=class extends Q{constructor(o){super(o,"AUTH_ERROR",void 0,"auth_expired"),this.name="AuthError"}},q=class extends Q{constructor(e,r,n){super(e,"POLLING_ERROR",{attempts:r,timeout:n},"polling");this.attempts=r;this.timeout=n;this.name="PollingError"}attempts;timeout}});function A(t){let o=new URLSearchParams;for(let[e,r]of Object.entries(t))r!=null&&r!==""&&o.append(e,String(r));return o}function J(t,o){let e=null;return()=>(e||(e=t(),o?.(e)),e)}var E=N(()=>{"use strict"});import{promises as Y}from"node:fs";import oo from"node:path";import Nr from"node:os";var vr,ut,At,eo=N(()=>{"use strict";B();E();vr=".r2-cli",ut=class{configPath;config;configLoaded=!1;dirEnsured=!1;constructor(){let o=Nr.homedir(),e=oo.join(o,vr);this.configPath=oo.join(e,"config.json"),this.config={credentials:null}}getConfigPath(){return this.configPath}async loadConfig(){if(this.configLoaded)return this.config;try{let o=await Y.readFile(this.configPath,"utf-8");return this.config=JSON.parse(o),this.configLoaded=!0,this.config}catch{return this.config={credentials:null},this.configLoaded=!0,this.config}}async ensureDir(){if(this.dirEnsured)return;let o=oo.dirname(this.configPath);try{await Y.stat(o)}catch(e){if(e.code==="ENOENT")await Y.mkdir(o,{recursive:!0});else throw new F("Failed to create directory",o,e.code)}this.dirEnsured=!0}async saveConfig(o){this.config=o,await this.ensureDir();let e=JSON.stringify(o,null,2),r=this.configPath+".tmp";try{await Y.writeFile(r,e,"utf-8"),await Y.rename(r,this.configPath),this.configLoaded=!0}catch(n){throw await Y.unlink(r).catch(i=>{typeof process.env.DEBUG<"u"&&console.error("[config] cleanup tmp failed:",i)}),new F("Failed to save config",this.configPath,n.code)}}},At=J(()=>new ut)});var Rr,pt,Z,ae=N(()=>{"use strict";eo();E();Rr=300*1e3,pt=class{store=At();isTokenExpired(o){return o.expire?Date.now()>=o.expire-Rr:!1}async saveCredentials(o,e){let r=Date.now(),n=e.expire?Number.parseInt(e.expire,10):0,i={token:o,userInfo:e,timestamp:r,...n>0&&{expire:r+n}},s=await this.store.loadConfig();s.credentials=i,await this.store.saveConfig(s)}async getCredentials(){let o=await this.store.loadConfig();return!o.credentials||this.isTokenExpired(o.credentials)?null:o.credentials}async clearCredentials(){let o=await this.store.loadConfig();o.credentials=null,await this.store.saveConfig(o)}async getToken(){return(await this.getCredentials())?.token??null}async getUserInfo(){return(await this.getCredentials())?.userInfo??null}async isLoggedIn(){return await this.getCredentials()!==null}},Z=J(()=>new pt)});var ro={};V(ro,{AuthStorage:()=>pt,ConfigStore:()=>ut,getAuthStorage:()=>Z,getConfigStore:()=>At});var gt=N(()=>{"use strict";eo();ae()});var me={};V(me,{UserInfoCard:()=>Ur});import{Box as tt,Text as z}from"ink";import{jsx as X,jsxs as ot}from"react/jsx-runtime";function Ur({userInfo:t,lastLogin:o,daysSinceLogin:e}){let r=t.mobile?t.mobile.replace(/(\d{3})\d{4}(\d{4})/,"$1****$2"):"-";return ot(tt,{flexDirection:"column",marginTop:1,borderStyle:"round",borderColor:"gray",paddingX:1,alignSelf:"flex-start",children:[X(z,{bold:!0,color:"cyan",children:"\u7528\u6237\u4FE1\u606F"}),ot(tt,{flexDirection:"row",marginTop:1,children:[X(tt,{width:10,children:X(z,{color:"gray",children:"\u6635\u79F0"})}),X(z,{color:"yellow",children:t.nickname})]}),ot(tt,{flexDirection:"row",children:[X(tt,{width:10,children:X(z,{color:"gray",children:"\u624B\u673A\u53F7"})}),X(z,{color:"yellow",children:r})]}),o&&ot(tt,{flexDirection:"column",marginTop:1,children:[ot(z,{color:"gray",children:["\u6700\u540E\u767B\u5F55: ",o.toLocaleString()]}),e!==void 0&&ot(z,{color:"gray",children:[" \u8DDD\u4ECA: ",e," \u5929"]})]})]})}var le=N(()=>{"use strict"});var ft={};V(ft,{renderComponent:()=>qr,renderOnce:()=>ue});import $r from"react";import io from"chalk";import{render as Dr}from"ink";import{Writable as Er}from"node:stream";function ue(t){let o=io.level;process.env.NO_COLOR||(io.level=3);try{let e=[],r=new Er({write(m,p,T){e.push(Buffer.from(m)),T()}});r.isTTY=!0,r.columns=process.stdout.columns||80,r.rows=process.stdout.rows||24,Dr(t,{stdout:r,patchConsole:!1}).unmount();let i=Buffer.concat(e).toString("utf8"),a=(i.split(/\x1B\[2J\x1B\[3J\x1B\[H/).at(-1)||i).replace(/\x1B\[\?[\d;]+[hl]/g,"").trimEnd()+`
4
+ `;process.stdout.write(a)}finally{io.level=o}}function qr(t,o){ue($r.createElement(t,o))}var ht=N(()=>{"use strict"});import{Box as Uo,Text as $o}from"ink";import{jsx as Te,jsxs as $t}from"react/jsx-runtime";function et(t,o){return t.length>o?t.slice(0,o-1)+"\u2026":t}function rt(t){let o=process.stdout.columns||80,r=Math.max(o-4-t,20),n=t+r;return{fillWidth:r,totalWidth:n}}function nt({title:t,count:o,countLabel:e="\u6761",totalWidth:r,header:n,children:i}){return $t(Uo,{flexDirection:"column",marginTop:1,borderStyle:"round",borderColor:"gray",paddingX:1,children:[$t(Uo,{flexDirection:"row",children:[Te($o,{bold:!0,color:"cyan",children:t}),$t($o,{color:"gray",children:[" \xB7 ",o," ",e]})]}),$t(Uo,{flexDirection:"column",marginTop:1,children:[n,Te($o,{color:"gray",children:"\u2500".repeat(r)}),i]})]})}var Dt=N(()=>{"use strict"});var ke={};V(ke,{ShopsTable:()=>rn});import{Box as O,Text as _}from"ink";import{jsx as S,jsxs as je}from"react/jsx-runtime";function tn(t){return t.map(o=>"shopName"in o?{id:o.shopId,name:o.shopName,platform:o.platform,expiresIn:o.expiresIn}:{id:o.id,name:o.name,platform:o.thirdUserId,expiresIn:o.expiresIn})}function on({hasPlatform:t,fillWidth:o}){return je(O,{flexDirection:"row",paddingBottom:0,children:[t&&S(O,{width:Do,children:S(_,{bold:!0,color:"white",children:"\u5E73\u53F0"})}),S(O,{width:o,children:S(_,{bold:!0,color:"white",children:"\u5E97\u94FA\u540D"})}),S(O,{width:Eo,children:S(_,{bold:!0,color:"white",children:"ID"})}),S(O,{width:qo,children:S(_,{bold:!0,color:"white",children:"\u72B6\u6001"})})]})}function en({shop:t,hasPlatform:o,fillWidth:e}){let r=Ae[t.platform]??t.platform;return je(O,{flexDirection:"row",children:[o&&S(O,{width:Do,children:S(_,{color:"cyan",children:r})}),S(O,{width:e,children:S(_,{bold:!0,children:t.name})}),S(O,{width:Eo,children:S(_,{color:"gray",children:t.id})}),S(O,{width:qo,children:S(_,{color:"green",children:"\u25CF \u6388\u6743\u4E2D"})})]})}function rn({shops:t,platform:o}){let e=tn(t),r=o==="all",n=o==="all"?"\u6240\u6709\u6388\u6743\u5E97\u94FA":`${Ae[o]??o}\u6388\u6743\u5E97\u94FA`,i=Eo+qo+(r?Do:0),{fillWidth:s,totalWidth:a}=rt(i);return S(nt,{title:n,count:e.length,countLabel:"\u5BB6",fillWidth:s,totalWidth:a,header:S(on,{hasPlatform:r,fillWidth:s}),children:e.map(m=>S(en,{shop:m,hasPlatform:r,fillWidth:s},m.id))})}var Ae,Do,Eo,qo,Ne=N(()=>{"use strict";Dt();Ae={xianyu:"\u95F2\u9C7C",douyin:"\u6296\u97F3"},Do=8,Eo=16,qo=10});var Le={};V(Le,{StocksTable:()=>cn});import{Box as j,Text as U}from"ink";import{jsx as h,jsxs as Oe}from"react/jsx-runtime";function sn({fillWidth:t}){return Oe(j,{flexDirection:"row",paddingBottom:0,children:[h(j,{width:Bo,children:h(U,{bold:!0,color:"white",children:"ID"})}),h(j,{width:Jo,children:h(U,{bold:!0,color:"white",children:"\u7528\u6237ID"})}),h(j,{width:Go,children:h(U,{bold:!0,color:"white",children:"\u4ED3\u5E93ID"})}),h(j,{width:t,children:h(U,{bold:!0,color:"white",children:"\u4ED3\u5E93\u540D\u79F0"})}),h(j,{width:_o,children:h(U,{bold:!0,color:"white",children:"\u521B\u5EFA\u65F6\u95F4"})})]})}function an({stock:t,fillWidth:o}){let e=new Date(t.gmtCreate).toLocaleString("zh-CN");return Oe(j,{flexDirection:"row",children:[h(j,{width:Bo,children:h(U,{color:"gray",children:t.id})}),h(j,{width:Jo,children:h(U,{color:"gray",children:t.userId})}),h(j,{width:Go,children:h(U,{color:"gray",children:t.stockId})}),h(j,{width:o,children:h(U,{bold:!0,children:t.stockName})}),h(j,{width:_o,children:h(U,{color:"gray",children:e})})]})}function cn({stocks:t}){let o=Bo+Jo+Go+_o,{fillWidth:e,totalWidth:r}=rt(o);return h(nt,{title:"\u4ED3\u5E93\u5217\u8868",count:t.length,countLabel:"\u4E2A",fillWidth:e,totalWidth:r,header:h(sn,{fillWidth:e}),children:t.map(n=>h(an,{stock:n,fillWidth:e},n.id))})}var Bo,Jo,Go,_o,Ue=N(()=>{"use strict";Dt();Bo=6,Jo=10,Go=10,_o=22});var Be={};V(Be,{ListingTable:()=>Pn,formatTime:()=>Sn});import{Box as y,Text as b}from"ink";import{jsx as l,jsxs as Fo}from"react/jsx-runtime";function Sn(t){if(!t)return"-";let o=new Date(t),e=r=>String(r).padStart(2,"0");return`${e(o.getMonth()+1)}/${e(o.getDate())} ${e(o.getHours())}:${e(o.getMinutes())}`}function Cn({fillWidth:t}){return Fo(y,{flexDirection:"row",children:[l(y,{width:Mo,children:l(b,{bold:!0,color:"white",children:"ID"})}),l(y,{width:zo,children:l(b,{bold:!0,color:"white",children:"\u72B6\u6001"})}),l(y,{width:Bt,children:l(b,{bold:!0,color:"white",children:"\u54C1\u724C"})}),l(y,{width:t,children:l(b,{bold:!0,color:"white",children:"\u5546\u54C1\u540D\u79F0"})}),l(y,{width:Xo,children:l(b,{bold:!0,color:"white",children:"\u4EF7\u683C"})}),l(y,{width:Wo,children:l(b,{bold:!0,color:"white",children:"\u5E73\u53F0"})}),l(y,{width:Ho,children:l(b,{bold:!0,color:"white",children:"\u5E97\u94FA"})}),l(y,{width:Jt,children:l(b,{bold:!0,color:"white",children:"\u4ED3\u5E93\u5546\u54C1"})}),l(y,{width:Gt,children:l(b,{bold:!0,color:"white",children:"\u8D27\u53F7"})}),l(y,{width:_t,children:l(b,{bold:!0,color:"white",children:"\u4E09\u65B9\u7F16\u53F7"})})]})}function xn({item:t,fillWidth:o}){let e=bn[t.status]??{label:t.status,color:"white"};return Fo(y,{flexDirection:"row",children:[l(y,{width:Mo,children:l(b,{color:"gray",children:t.id})}),l(y,{width:zo,children:l(b,{color:e.color,children:e.label})}),l(y,{width:Bt,children:l(b,{color:"cyan",children:et(t.brandName||"-",Bt-1)})}),l(y,{width:o,children:l(b,{children:et(t.goodsName,o-1)})}),l(y,{width:Xo,children:Fo(b,{color:"yellow",children:["\xA5",t.price]})}),l(y,{width:Wo,children:l(b,{color:"gray",children:t.platform})}),l(y,{width:Ho,children:l(b,{color:"gray",children:t.shopId})}),l(y,{width:Jt,children:l(b,{color:"gray",children:et(`${t.stockGoodsId}`,Jt-1)})}),l(y,{width:Gt,children:l(b,{color:"gray",children:et(t.goodsNo||"-",Gt-1)})}),l(y,{width:_t,children:l(b,{color:"gray",children:et(t.thirdItemNo||"-",_t-1)})})]})}function Pn({items:t,total:o}){let e=Mo+zo+Bt+Xo+Wo+Ho+Jt+Gt+_t,{fillWidth:r,totalWidth:n}=rt(e);return l(nt,{title:"\u4E0A\u67B6\u5217\u8868",count:o,fillWidth:r,totalWidth:n,header:l(Cn,{fillWidth:r}),children:t.map(i=>l(xn,{item:i,fillWidth:r},i.id))})}var bn,Mo,zo,Bt,Xo,Wo,Ho,Jt,Gt,_t,Je=N(()=>{"use strict";Dt();bn={init:{label:"\u5F85\u4E0A\u67B6",color:"yellow"},up:{label:"\u5DF2\u4E0A\u67B6",color:"green"},down:{label:"\u5DF2\u4E0B\u67B6",color:"gray"},fail:{label:"\u5931\u8D25",color:"red"},sold:{label:"\u5DF2\u552E\u51FA",color:"blue"}},Mo=4,zo=8,Bt=8,Xo=8,Wo=8,Ho=11,Jt=10,Gt=10,_t=12});import{Command as Ci}from"commander";import ct from"chalk";import"commander";import{Command as Se}from"commander";import x from"chalk";B();async function hr(t,o,e){let r=new AbortController,n=()=>r.abort();e?.addEventListener("abort",n,{once:!0});let i=setTimeout(()=>r.abort(),o);try{return await t(r.signal)}catch(s){throw r.signal.aborted&&!e?.aborted?new q("\u5355\u6B21\u8F6E\u8BE2\u8BF7\u6C42\u8D85\u65F6"):s}finally{clearTimeout(i),e?.removeEventListener("abort",n)}}async function K(t,o,e){let{interval:r,timeout:n,condition:i}=o,s=Date.now(),a=0;for(;Date.now()-s<n;){if(e?.aborted)throw new q("\u8F6E\u8BE2\u88AB\u4E2D\u6B62");a++;let m=n-(Date.now()-s),p=await hr(t,m,e);if(i(p,a))return p;await yr(r,e)}throw new q(`\u8F6E\u8BE2\u8D85\u65F6 (\u5DF2\u7B49\u5F85 ${Date.now()-s}ms, \u5171 ${a} \u6B21)`)}function yr(t,o){return new Promise((e,r)=>{if(o?.aborted){r(new q("\u8F6E\u8BE2\u88AB\u4E2D\u6B62"));return}let n=()=>{clearTimeout(i),r(new q("\u8F6E\u8BE2\u88AB\u4E2D\u6B62"))},i=setTimeout(()=>{o?.removeEventListener("abort",n),e()},t);o?.addEventListener("abort",n,{once:!0})})}import br from"node:fs";import{fileURLToPath as Sr}from"node:url";import{createRequire as Cr}from"node:module";import ie from"node:path";import{exec as xr}from"node:child_process";E();import Ir from"node:http";var Kt=class t{server=null;pages=new Map;port=0;idleTimer=null;static IDLE_TIMEOUT_MS=1e4;async start(){return this.server?this.port:new Promise((o,e)=>{this.server=Ir.createServer((r,n)=>this.handleRequest(r,n)),this.server.listen(0,"127.0.0.1",()=>{let r=this.server.address();typeof r=="object"&&r?(this.port=r.port,o(this.port)):e(new Error("Failed to get server address"))}),this.server.on("error",e)})}registerPage(o,e,r,n){let i=this.pages.get(o);if(i){i.qrBuffer=r,i.status="waiting",i.config=n;let s=`data: ${JSON.stringify({status:"waiting"})}
5
+
6
+ `;for(let a of i.sseClients)a.write(s)}else this.pages.set(o,{html:e,qrBuffer:r,status:"waiting",sseClients:[],config:n});this.resetIdleTimer()}unregisterPage(o){let e=this.pages.get(o);if(e){for(let r of e.sseClients)r.end();e.sseClients.length=0,this.pages.delete(o),this.pages.size===0&&this.close()}}setStatus(o,e){let r=this.pages.get(o);if(!r)return;r.status=e;let n=`data: ${JSON.stringify({status:e})}
7
+
8
+ `;for(let i of r.sseClients)i.write(n)}close(){if(this.server){this.idleTimer&&(clearTimeout(this.idleTimer),this.idleTimer=null);for(let o of this.pages.values()){for(let e of o.sseClients)e.end();o.sseClients.length=0}this.pages.clear(),this.server.close(),this.server=null,this.port=0}}resetIdleTimer(){this.idleTimer&&clearTimeout(this.idleTimer),this.idleTimer=setTimeout(()=>{[...this.pages.values()].some(e=>e.sseClients.length>0)||this.close()},t.IDLE_TIMEOUT_MS)}handleRequest(o,e){let r=o.url??"/";for(let[n,i]of this.pages){if(r===n){e.writeHead(302,{Location:n+"/"}),e.end();return}if(r===n+"/"){e.writeHead(200,{"Content-Type":"text/html; charset=utf-8"}),e.end(i.html);return}if(r===n+"/qr.png"){e.writeHead(200,{"Content-Type":"image/png","Content-Length":i.qrBuffer.length}),e.end(i.qrBuffer);return}if(r===n+"/events"){e.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"}),e.write(`data: ${JSON.stringify({status:i.status})}
9
+
10
+ `),i.sseClients.push(e),o.on("close",()=>{let s=i.sseClients.indexOf(e);s>=0&&i.sseClients.splice(s,1)});return}if(r===n+"/config"){e.writeHead(200,{"Content-Type":"application/json"}),e.end(JSON.stringify(i.config??{}));return}}e.writeHead(404,{"Content-Type":"text/plain"}),e.end("Not Found")}},re=!1;function Tt(t){t.close()}function wr(t){re||(re=!0,process.on("exit",()=>Tt(t)),process.on("SIGINT",()=>Tt(t)),process.on("SIGTERM",()=>Tt(t)),setInterval(()=>{process.stdin?.destroyed&&Tt(t)},3e3).unref())}var ne=J(()=>new Kt,wr);var Pr=ie.dirname(Sr(import.meta.url)),Tr="/login",Ar="/login-third",Yt=null;async function kr(t){return br.promises.readFile(ie.join(Pr,"pages",t),"utf-8")}async function jr(t){return Yt||(Yt=Cr(import.meta.url)),Yt("qrcode").toBuffer(t,{width:300,margin:2})}function M(t){let o=process.platform==="win32"?`start "" "${t}"`:process.platform==="darwin"?`open "${t}"`:`xdg-open "${t}"`;xr(o)}async function se(t,o,e,r){let[n,i]=await Promise.all([kr(o),jr(e)]),s=ne(),a=await s.start();s.registerPage(t,n,i,r);let m=`http://127.0.0.1:${a}${t}/`;return{url:e,qrUrl:m,setStatus:p=>s.setStatus(t,p),closeServer:()=>s.unregisterPage(t)}}function Zt(t){return se(Tr,"login.html",t)}function to(t,o,e){return se(Ar,"third-auth.html",t,{authUrl:o,title:e.title,primaryColor:e.primaryColor,platformName:e.platformName})}gt();B();var Lr="https://api.puresnake.com",no=class{config;authStorage=null;constructor(o={}){this.config={baseUrl:o.baseUrl??Lr,version:o.version??"v3",debug:o.debug??!1},this.authStorage=Z()}buildUrl(o){let e=o.startsWith("/")?o.slice(1):o;return`${this.config.baseUrl}/${this.config.version}/${e}`}async getAuthToken(){return this.authStorage?(await this.authStorage.getCredentials())?.token:void 0}async requestRaw(o,e,r={}){let n=this.buildUrl(o),i=r.timeout??3e4,s=await this.getAuthToken(),a={...e.headers,...s?{token:s}:{}},m=new AbortController,p=setTimeout(()=>m.abort(),i),T={...e,headers:a,signal:m.signal};this.config.debug&&console.error(`[API ${e.method??"GET"}]`,n,e.body);try{let d=await fetch(n,T);if(!d.ok){if(d.status===401)throw this.authStorage&&await this.authStorage.clearCredentials().catch(()=>{}),new k("\u767B\u5F55\u5DF2\u8FC7\u671F\uFF0C\u8BF7\u8FD0\u884C r2-cli auth login \u91CD\u65B0\u767B\u5F55");if(d.status===413)throw new v("\u56FE\u7247\u592A\u5927\uFF0C\u4E0A\u4F20\u5931\u8D25\uFF08\u670D\u52A1\u7AEF\u9650\u5236\u7EA6 2MB\uFF09",413);let dt=await d.text();throw new v(dt||`${d.status} ${d.statusText}`,d.status)}let I=await d.json();if(this.config.debug&&console.error("[API Response]",I),!I.success||I.status!==0)throw new v(I.msg||"\u672A\u77E5\u9519\u8BEF",I.status,I);return I}catch(d){throw d instanceof DOMException&&d.name==="AbortError"?new v(`\u8BF7\u6C42\u8D85\u65F6 (${i}ms)`,408,void 0,"timeout"):d instanceof TypeError?new v(`\u7F51\u7EDC\u9519\u8BEF: ${d.message}`,0,void 0,"network"):d}finally{clearTimeout(p)}}async requestFull(o,e){let{method:r,headers:n,body:i,timeout:s=3e4}=e,a={method:r,headers:{"Content-Type":"application/json",...n},...i!==void 0&&{body:JSON.stringify(i)}};return this.requestRaw(o,a,{timeout:s})}async request(o,e){return(await this.requestFull(o,e)).data}async get(o,e,r){let n=e&&e.size>0?`${o}?${e.toString()}`:o;return this.request(n,{method:"GET",headers:r})}async post(o,e,r){return this.request(o,{method:"POST",body:e,headers:r})}async put(o,e,r){return this.request(o,{method:"PUT",body:e,headers:r})}async delete(o,e){return this.request(o,{method:"DELETE",headers:e})}async upload(o,e,r){let n={method:"POST",body:e,...r&&{headers:r}};return(await this.requestRaw(o,n,{timeout:6e4})).data}},u=new no;async function ce(){return u.post("app/qrcode/generate")}async function de(t){let o=new URLSearchParams;o.append("qrToken",t);let e=`app/qrcode/status?${o.toString()}`,r=await u.requestFull(e,{method:"GET"});return r.token&&typeof r.data=="object"&&r.data!==null&&(r.data.token=r.token),r.data}gt();B();E();async function pe(t,o,e){let{UserInfoCard:r}=await Promise.resolve().then(()=>(le(),me)),{renderComponent:n}=await Promise.resolve().then(()=>(ht(),ft)),i=o!=null?{userInfo:t,lastLogin:o,daysSinceLogin:e??0}:{userInfo:t};n(r,i)}var kt=class{storage;constructor(o){this.storage=o??Z()}async generateQR(){let o=await ce(),e=`https://m.puresnake.com/r2/auth/login?qrToken=${o.qrContent}&from=wechat`,r=await Zt(e);return{qrData:o,...r}}async waitForLogin(o,e,r,n,i,s){let a=await K(()=>de(o),{interval:r,timeout:e,condition:m=>{switch(m.status){case"scanned":return s||(console.log(x.cyan(`
11
+ \u{1F50D} \u5DF2\u626B\u7801: ${m.userInfo?.nickname||"\u672A\u77E5\u7528\u6237"}`)),console.log(x.yellow("\u8BF7\u5728 APP \u4E0A\u786E\u8BA4\u767B\u5F55"))),i?.("scanning"),!1;case"confirmed":return s||console.log(x.green(`
12
+ \u2705 \u7528\u6237\u5DF2\u786E\u8BA4\u767B\u5F55`)),i?.("success"),!0;case"expired":return s||console.log(x.red(`
13
+ \u23F0 \u4E8C\u7EF4\u7801\u5DF2\u8FC7\u671F`)),i?.("expired"),!0;case"canceled":return s||console.log(x.red(`
14
+ \u{1F6AB} \u7528\u6237\u5DF2\u53D6\u6D88\u767B\u5F55`)),i?.("expired"),!0;default:return!1}}},n??void 0);if(a.status==="confirmed"&&a.token&&a.userInfo)return await this.storage.saveCredentials(a.token,a.userInfo),{userInfo:a.userInfo,token:a.token};throw a.status==="expired"?new k("\u4E8C\u7EF4\u7801\u5DF2\u8FC7\u671F\uFF0C\u8BF7\u91CD\u65B0\u767B\u5F55"):a.status==="canceled"?new k("\u7528\u6237\u5DF2\u53D6\u6D88\u767B\u5F55"):new k("\u767B\u5F55\u5931\u8D25: \u672A\u83B7\u53D6\u5230\u51ED\u8BC1")}async login(o){console.log(x.cyan(`
15
+ \u{1F510} \u6B63\u5728\u542F\u52A8\u626B\u7801\u767B\u5F55...`));let{qrData:e,qrUrl:r,setStatus:n,closeServer:i}=await this.generateQR();console.log(x.green(`\u2705 \u4E8C\u7EF4\u7801\u5DF2\u751F\u6210
16
+ `)),console.log(x.cyan(` \u94FE\u63A5: ${r}
17
+ `)),M(r),console.log(x.yellow(`\u23F3 \u7B49\u5F85\u626B\u7801...
18
+ `));let s=Number.parseInt(e.expireTime,10),a=Number.parseInt(e.pollInterval,10);try{let m=await this.waitForLogin(e.qrToken,s,a,o,n);return console.log(x.green(`
19
19
  \u2705 \u767B\u5F55\u6210\u529F\uFF01
20
- `)),Ve(d.userInfo),d}catch(d){throw console.log(I.red(`
20
+ `)),pe(m.userInfo),m}catch(m){throw console.log(x.red(`
21
21
  \u274C \u767B\u5F55\u5931\u8D25
22
- `)),d}finally{i()}}async logout(){console.log(I.cyan(`
23
- \u{1F6AA} \u6B63\u5728\u9000\u51FA\u767B\u5F55...`)),await this.storage.clearCredentials(),console.log(I.green(`\u2705 \u5DF2\u9000\u51FA\u767B\u5F55
24
- `))}async status(){if(!await this.storage.isLoggedIn()){console.log(I.yellow(`\u26A0\uFE0F \u5C1A\u672A\u767B\u5F55\u6216\u51ED\u8BC1\u5DF2\u8FC7\u671F
25
- `));return}let o=await this.storage.getCredentials(),r=o.userInfo,n=new Date(o.timestamp),i=Math.floor((Date.now()-o.timestamp)/(1e3*60*60*24));console.log(I.green(`\u2705 \u5DF2\u767B\u5F55
26
- `)),await Ve(r,n,i)}},Yt=null;function k(){return Yt||(Yt=new Ct),Yt}import Q from"chalk";var Ye=v;async function Ke(){return Ye.get("mms/xianyu/auth/url")}async function Ze(e){let t=new URLSearchParams({state:e});return Ye.get("mms/xianyu/auth/status",t)}D();async function Tt(){let e=await Ke(),t=await Jt(e.url,e.url);return{authData:e,...t}}async function pt(e,t,o,r,n){return W(()=>Ze(e),{interval:o,timeout:t,condition:i=>i.status==="success"?(console.log(Q.green(`
27
- \u2705 \u6388\u6743\u6210\u529F\uFF01\u5E97\u94FA: ${i.shopName} (${i.shopId})`)),n?.("success"),!0):i.status==="expired"?(console.log(Q.red(`
28
- \u23F0 \u6388\u6743\u94FE\u63A5\u5DF2\u8FC7\u671F`)),n?.("expired"),!0):!1},r)}async function Kt(e){console.log(Q.cyan(`
29
- \u{1F517} \u6B63\u5728\u83B7\u53D6\u95F2\u9C7C\u6388\u6743\u5730\u5740...`));let{authData:t,qrUrl:o,setStatus:r,closeServer:n}=await Tt();console.log(Q.green(`\u2705 \u6388\u6743\u4E8C\u7EF4\u7801\u5DF2\u751F\u6210
30
- `)),console.log(Q.cyan(` \u94FE\u63A5: ${o}`)),console.log(Q.gray(` \u6216\u590D\u5236\u94FE\u63A5\u6253\u5F00: ${t.url}`)),X(o),console.log(Q.yellow(`
22
+ `)),m}finally{i()}}async logout(){console.log(x.cyan(`
23
+ \u{1F6AA} \u6B63\u5728\u9000\u51FA\u767B\u5F55...`)),await this.storage.clearCredentials(),console.log(x.green(`\u2705 \u5DF2\u9000\u51FA\u767B\u5F55
24
+ `))}async status(){if(!await this.storage.isLoggedIn()){console.log(x.yellow(`\u26A0\uFE0F \u5C1A\u672A\u767B\u5F55\u6216\u51ED\u8BC1\u5DF2\u8FC7\u671F
25
+ `));return}let e=await this.storage.getCredentials(),r=e.userInfo,n=new Date(e.timestamp),i=Math.floor((Date.now()-e.timestamp)/(1e3*60*60*24));console.log(x.green(`\u2705 \u5DF2\u767B\u5F55
26
+ `)),await pe(r,n,i)}},R=J(()=>new kt);import W from"chalk";async function ge(t){return u.get(`mms/third/auth/url/${t}`)}async function fe(t,o){let e=new URLSearchParams({state:t,platform:o});return u.get("mms/third/auth/status",e)}var so={xianyu:{title:"\u95F2\u9C7C\u6388\u6743",primaryColor:"#ffe60f",platformName:"\u95F2\u9C7C"},taobao:{title:"\u6DD8\u5B9D\u6388\u6743",primaryColor:"#ff4200",platformName:"\u6DD8\u5B9D"}};function ao(t){let o=so[t];if(!o){let e=Object.keys(so).join("/");throw new Error(`\u4E0D\u652F\u6301\u7684\u5E73\u53F0: ${t}\uFF08\u652F\u6301: ${e}\uFF09`)}return o}function co(){return Object.keys(so)}B();async function jt(t){let o=ao(t),e=await ge(t),r=await to(e.url,e.url,o);return{authData:e,...r}}async function yt(t,o,e,r,n,i){return K(()=>fe(t,o),{interval:r,timeout:e,condition:s=>s.status==="success"?(console.log(W.green(`
27
+ \u2705 \u6388\u6743\u6210\u529F\uFF01\u5E97\u94FA: ${s.shopName} (${s.shopId})`)),i?.("success"),!0):s.status==="expired"?(console.log(W.red(`
28
+ \u23F0 \u6388\u6743\u94FE\u63A5\u5DF2\u8FC7\u671F`)),i?.("expired"),!0):!1},n)}async function mo(t,o){let e=ao(t);console.log(W.cyan(`
29
+ \u{1F517} \u6B63\u5728\u83B7\u53D6${e.platformName}\u6388\u6743\u5730\u5740...`));let{authData:r,qrUrl:n,setStatus:i,closeServer:s}=await jt(t);console.log(W.green(`\u2705 \u6388\u6743\u4E8C\u7EF4\u7801\u5DF2\u751F\u6210
30
+ `)),console.log(W.cyan(` \u94FE\u63A5: ${n}`)),console.log(W.gray(` \u6216\u590D\u5236\u94FE\u63A5\u6253\u5F00: ${r.url}`)),M(n),console.log(W.yellow(`
31
31
  \u23F3 \u7B49\u5F85\u6388\u6743...
32
- `));let i=3e5,s=1e3;try{let a=await pt(t.state,i,s,e,r);if(a.status==="success")return a;throw new C("\u95F2\u9C7C\u6388\u6743\u5931\u8D25: "+(a.status==="expired"?"\u94FE\u63A5\u5DF2\u8FC7\u671F":"\u672A\u77E5\u72B6\u6001"))}finally{n()}}D();import R from"chalk";import to from"chalk";var eo="@round2ai/r2-cli",hr=[`https://registry.npmmirror.com/${encodeURIComponent(eo)}/latest`,`https://registry.npmjs.org/${encodeURIComponent(eo)}/latest`],yr=5e3;async function wr(e){let t=new AbortController,o=setTimeout(()=>t.abort(),yr);try{let r=await fetch(e,{signal:t.signal});return r.ok?(await r.json()).version??null:null}catch{return null}finally{clearTimeout(o)}}async function xr(){let e=await Promise.allSettled(hr.map(wr));for(let t of e)if(t.status==="fulfilled"&&t.value)return t.value;return null}function Ir(e,t){let o=e.split(".").map(Number),r=t.split(".").map(Number);for(let n=0;n<3;n++)if((o[n]??0)!==(r[n]??0))return(o[n]??0)>(r[n]??0);return!1}var Zt=null,bt=null;function oo(){return!Zt||!bt?null:{_notice:{update:{message:`Update available: ${bt} \u2192 ${Zt}`,command:"npm update -g @round2ai/r2-cli && npx skills add Round2AI/r2-cli --all -y"}}}}async function ro(e){let t=await xr();t&&(Ir(t,e)?(Zt=t,bt=e,Sr(e,t)):bt=e)}function Sr(e,t){console.error(to.yellow(`
33
- Update available: ${e} \u2192 ${t}`)+to.gray(`
32
+ `));let a=3e5,m=1e3;try{let p=await yt(r.state,t,a,m,o,i);if(p.status==="success")return p;throw new k(`${e.platformName}\u6388\u6743\u5931\u8D25: `+(p.status==="expired"?"\u94FE\u63A5\u5DF2\u8FC7\u671F":"\u672A\u77E5\u72B6\u6001"))}finally{s()}}B();import L from"chalk";import he from"chalk";var ye="@round2ai/r2-cli",Jr=[`https://registry.npmmirror.com/${encodeURIComponent(ye)}/latest`,`https://registry.npmjs.org/${encodeURIComponent(ye)}/latest`],Gr=5e3;async function _r(t){let o=new AbortController,e=setTimeout(()=>o.abort(),Gr);try{let r=await fetch(t,{signal:o.signal});return r.ok?(await r.json()).version??null:null}catch{return null}finally{clearTimeout(e)}}async function Qr(){let t=await Promise.allSettled(Jr.map(_r));for(let o of t)if(o.status==="fulfilled"&&o.value)return o.value;return null}function Fr(t,o){let e=t.split(".").map(Number),r=o.split(".").map(Number);for(let n=0;n<3;n++)if((e[n]??0)!==(r[n]??0))return(e[n]??0)>(r[n]??0);return!1}var lo=null,Nt=null;function Ie(){return!lo||!Nt?null:{_notice:{update:{message:`Update available: ${Nt} \u2192 ${lo}`,command:"r2-cli update"}}}}async function we(t){let o=await Qr();o&&(Fr(o,t)?(lo=o,Nt=t,Mr(t,o)):Nt=t)}function Mr(t,o){console.error(he.yellow(`
33
+ Update available: ${t} \u2192 ${o}`)+he.gray(`
34
34
  Run: r2-cli update
35
- `))}function Cr(e){if(e instanceof C)console.error(R.red(`
36
- \u25B2 ${e.message}`)),console.error(R.gray(`\u2192 \u8BF7\u5148\u8FD0\u884C: r2-cli auth login
37
- `));else if(e instanceof b)console.error(R.red(`\u25B2 \u64CD\u4F5C\u5931\u8D25: ${e.message}`)),e.status&&console.error(R.gray(` \u72B6\u6001\u7801: ${e.status}`));else if(e instanceof G)console.error(R.red(`\u25B2 \u914D\u7F6E\u6587\u4EF6\u5F02\u5E38: ${e.message}`)),e.path&&console.error(R.gray(` \u8DEF\u5F84: ${e.path}`)),console.error(R.gray(`\u2192 \u8BF7\u5C1D\u8BD5\u91CD\u65B0\u767B\u5F55: r2-cli auth login
38
- `));else{let t=e instanceof Error?e.message:String(e);console.error(R.red(`\u25B2 ${t}`))}process.exit(1)}function S(e){let t=oo();return t&&Object.assign(e,t),e}function te(e,t){let o={success:!1,error:e};t&&(o.errorType=t),S(o),console.log(JSON.stringify(o)),process.exit(1)}function m(e){return async t=>{try{await e(t)}catch(o){if(t.json){let r=o instanceof Error?o.message:String(o),n=z(o),i=o instanceof b?o.status:void 0,s={success:!1,error:r,errorType:n};i!=null&&(s.status=i),S(s),console.log(JSON.stringify(s)),process.exit(1)}Cr(o)}}}function h(e,t){e.json&&(console.log(JSON.stringify({success:!1,error:t,errorType:"validation"})),process.exit(1)),console.log(R.yellow(t))}function y(e,t,o){if(e.json){let r={success:!0,data:t};S(r),console.log(JSON.stringify(r,null,2))}else o&&console.log(R.green(o)),console.log(JSON.stringify(t,null,2))}function Pt(e){return async(...t)=>{try{await e(...t)}catch(o){let r=o instanceof Error?o.message:String(o),n=z(o);te(r,n)}}}var Tr=new Set(["accessToken","refreshExpireIn"]);function no(e){return e.map(t=>{let o={};for(let[r,n]of Object.entries(t))Tr.has(r)||(o[r]=n);return o})}function At(e){e.option("--expire <ms>","\u8FC7\u671F\u65F6\u95F4\uFF08\u6BEB\u79D2\uFF09","300000").option("--interval <ms>","\u8F6E\u8BE2\u95F4\u9694\uFF08\u6BEB\u79D2\uFF09","1000")}function vt(e,t){return{expireMs:Number.parseInt(e.expire??String(t?.expireMs??3e5),10),intervalMs:Number.parseInt(e.interval??String(t?.intervalMs??1e3),10)}}async function kt(e){let{qrInfo:t,qrUrl:o,setStatus:r,closeServer:n,waitArgs:i}=await e.generate();console.log(JSON.stringify(S(t),null,2)),X(o);try{let s=await e.waitResult(i,r);console.log(JSON.stringify(S(e.formatSuccess(s))))}catch(s){let a=s instanceof Error?s.message:String(s);console.log(JSON.stringify(S({success:!1,error:a}))),process.exit(1)}finally{setTimeout(n,1e3)}}function ee(){let e=new io("login");e.description("\u626B\u7801\u767B\u5F55 Round2AI \u8D26\u6237").option("--json","\u8F93\u51FA JSON\uFF08\u4F9B AI Agent \u4F7F\u7528\uFF09");let t=new io("poll").description("\u8F6E\u8BE2\u767B\u5F55\u72B6\u6001\uFF08\u4F9B AI Agent \u4F7F\u7528\uFF09").requiredOption("--token <qrToken>","\u4E8C\u7EF4\u7801 token").action(Pt(async o=>{let r=k(),{expireMs:n,intervalMs:i}=vt(o),s=await r.waitForLogin(o.token,n,i);console.log(JSON.stringify(S({success:!0,...s})))}));return At(t),e.addCommand(t),e.action(m(async o=>{o.json?await kt({generate:async()=>{let r=k(),{qrData:n,qrUrl:i,setStatus:s,closeServer:a}=await r.generateQR(),d=Number.parseInt(n.expireTime,10),w=Number.parseInt(n.pollInterval,10);return{qrInfo:{qrToken:n.qrToken,expireTimeMs:d,pollIntervalMs:w,qrUrl:i},qrUrl:i,setStatus:s,closeServer:a,waitArgs:{qrToken:n.qrToken,expireMs:d,intervalMs:w}}},waitResult:({qrToken:r,expireMs:n,intervalMs:i},s)=>k().waitForLogin(r,n,i,void 0,s,!0),formatSuccess:r=>({success:!0,userInfo:r.userInfo})}):await k().login()})),e}import{Command as br}from"commander";function oe(){let e=new br("logout");return e.description("\u9000\u51FA\u767B\u5F55").option("--json","\u8F93\u51FA JSON\uFF08\u4F9B AI Agent \u4F7F\u7528\uFF09"),e.action(m(async t=>{if(t.json){let{getAuthStorage:o}=await Promise.resolve().then(()=>(dt(),Wt));await o().clearCredentials(),y(t,null,"\u5DF2\u9000\u51FA\u767B\u5F55")}else await k().logout()})),e}import{Command as Pr}from"commander";function re(){let e=new Pr("status");return e.description("\u67E5\u770B\u767B\u5F55\u72B6\u6001").option("--json","\u8F93\u51FA JSON\uFF08\u4F9B AI Agent \u4F7F\u7528\uFF09"),e.action(m(async t=>{if(t.json){let{getAuthStorage:o}=await Promise.resolve().then(()=>(dt(),Wt)),r=o();if(!await r.isLoggedIn()){y(t,{loggedIn:!1},"\u672A\u767B\u5F55");return}let i=await r.getCredentials();y(t,{loggedIn:!0,userInfo:i.userInfo,timestamp:i.timestamp})}else await k().status()})),e}import{Command as so}from"commander";function ne(){let e=new so("xianyu");e.description("\u95F2\u9C7C\u5E97\u94FA\u6388\u6743").option("--json","\u8F93\u51FA JSON\uFF08\u4F9B AI Agent \u4F7F\u7528\uFF09");let t=new so("poll").description("\u8F6E\u8BE2\u95F2\u9C7C\u6388\u6743\u72B6\u6001\uFF08\u4F9B AI Agent \u4F7F\u7528\uFF09").requiredOption("--state <state>","\u6388\u6743\u8F6E\u8BE2 token");return At(t),t.action(Pt(async o=>{let{expireMs:r,intervalMs:n}=vt(o),i=await pt(o.state,r,n);i.status==="success"?console.log(JSON.stringify(S({success:!0,shopId:i.shopId,shopName:i.shopName}))):te(`\u6388\u6743\u72B6\u6001: ${i.status}`)})),e.addCommand(t),e.action(m(async o=>{o.json?await kt({generate:async()=>{let{authData:r,qrUrl:n,setStatus:i,closeServer:s}=await Tt(),a=r.expireTime?Number.parseInt(r.expireTime,10):3e5,d=r.pollInterval?Number.parseInt(r.pollInterval,10):1e3;return{qrInfo:{state:r.state,expireTimeMs:a,pollIntervalMs:d,qrUrl:n},qrUrl:n,setStatus:i,closeServer:s,waitArgs:{state:r.state,expireMs:a,intervalMs:d}}},waitResult:async({state:r,expireMs:n,intervalMs:i},s)=>{let a=await pt(r,n,i,void 0,s);if(a.status!=="success")throw new Error(`\u6388\u6743\u72B6\u6001: ${a.status}`);return a},formatSuccess:r=>({success:!0,shopId:r.shopId,shopName:r.shopName})}):await Kt()})),e}import{Command as hn}from"commander";import{Command as Ur}from"commander";import L from"chalk";import{select as ye,input as Er,confirm as jr}from"@inquirer/prompts";_();var F=v;async function Rt(e){return F.post("mms/goods/listing/up/xianyu",e)}async function ie(e){return F.get("mms/goods/listing/get",E(e))}async function se(e){return F.post("mms/goods/listing/down/xianyu",e)}async function ae(e){return F.post("mms/goods/listing/update/xyPrice",e)}async function ce(e){return F.post("mms/goods/listing/update/goodsInfo",e)}async function le(e){return F.get("mms/goods/listing/list",e?E(e):void 0)}async function de(e){return F.post("mms/goods/listing/hang/up/xianyu",e)}_();var me=v;async function gt(){return await me.get("mms/user/shop/list")??[]}async function ft(){return await me.get("mms/user/stock/list")??[]}async function ht(e){let t=e?E(e):void 0;return me.get("mms/seller/goods/select/list",t)}import{basename as Rr}from"node:path";import{stat as Ar,readFile as ao}from"node:fs/promises";import vr from"sharp";var kr=2*1024*1024;async function co(e,t=kr){let{size:o}=await Ar(e);if(o<=t)return ao(e);let r=vr(e);await r.metadata();let n=[80,70,60,50,40,30],i=null;for(let s of n){let a=await r.jpeg({quality:s,mozjpeg:!0}).toBuffer();if(a.length<=t)return a;i=a}return i??ao(e)}var Lr=v;async function ue(e,t){let o=async(s,a=1)=>{for(let d=0;d<=a;d++)try{let w=await co(s),P=Rr(s),c=new FormData;return c.append("file",new Blob([new Uint8Array(w)]),P),await Lr.upload(`platform/xy/media/upload?shopId=${encodeURIComponent(e)}`,c)}catch(w){if(d<a){await new Promise(P=>setTimeout(P,1e3));continue}throw w}throw new Error("unreachable")},r=await Promise.allSettled(t.map(o)),n=[],i=[];for(let s=0;s<r.length;s++){let a=r[s];if(a.status==="fulfilled")n.push(a.value);else{let d=a.reason;i.push({file:t[s],error:d instanceof Error?d.message:`${d}`})}}return{images:n,failed:i}}_();var pe=v;async function ge(e=16){return await pe.get("platform/xy/cat",E({spBizType:e}))??[]}async function fe(e){return await pe.get("platform/xy/props",E({channelCatId:e}))??[]}async function he(e,t,o){return await pe.get("platform/xy/props/value",E({channelCatId:e,propId:t,key:o}))??[]}D();function Nr(e){let t=e.charCodeAt(0);return t>=32&&t<=126}function Or(e){let t=0;for(let o=0;o<e.length;o++)t+=Nr(e[o])?.5:1;return t}function Lt(e,t=30){let o=Or(e);return o>t?`\u6807\u9898\u8FC7\u957F\uFF08${o}/${t}\uFF09\uFF0C\u95F2\u9C7C\u6807\u9898\u4E0A\u9650 30 \u4E2A\u6C49\u5B57\uFF08\u6216 60 \u4E2A\u82F1\u6587\u5B57\u7B26\uFF09`:null}var lo=99999999;function Nt(e,t="\u552E\u4EF7"){return e<=0?`${t}\u5FC5\u987B\u5927\u4E8E 0`:e>lo?`${t}\u4E0D\u80FD\u8D85\u8FC7 ${lo} \u5143`:null}var Dr=2e3,$r=1e4;function Br(e){let t=e.status?.toLowerCase()??"";return t===""||t==="init"||t==="pending"||t==="processing"}async function mo(e,t,o,r){r||process.stdout.write(L.cyan("\u23F3 \u6B63\u5728\u67E5\u8BE2\u4E0A\u67B6\u8FDB\u5EA6..."));let n=await W(()=>ie({stockGoodsId:e,shopId:t,platform:o}),{interval:Dr,timeout:$r,condition:i=>!Br(i)});return r||process.stdout.write("\r"+" ".repeat(30)+"\r"),n}function uo(){let e=new Ur("up");return e.description("\u4E0A\u67B6\u5546\u54C1\u5230\u95F2\u9C7C"),e.option("--stock-goods-id <id>","\u5E93\u5B58\u5546\u54C1ID\uFF08\u4ECE goods list \u83B7\u53D6\uFF09").option("--shop-id <id>","\u5E97\u94FAID\uFF08\u4ECE goods shops \u83B7\u53D6\uFF09").option("--price <amount>","\u4E0A\u67B6\u4EF7\u683C").option("-p, --platform <platform>","\u5E73\u53F0","xianyu").option("--json","\u8F93\u51FA JSON\uFF08Agent \u7528\uFF09").action(m(async t=>{if(t.json&&!(t.stockGoodsId&&t.shopId&&t.price)){h(t,"Agent \u6A21\u5F0F\u9700\u8981 --stock-goods-id, --shop-id, --price");return}if(t.stockGoodsId&&t.shopId&&t.price){let c=Number(t.stockGoodsId),x=t.shopId,wt=Number(t.price),je=t.platform,De=Nt(wt);if(De){h(t,De);return}let $e;try{$e=await Rt({stockGoodsId:c,shopId:x,price:wt,platform:je})}catch(U){let Qo=U instanceof Error?U.message:String(U),Fo=z(U);console.log(JSON.stringify(S({success:!1,error:Qo,errorType:Fo}))),process.exit(1)}let qt,Be,qe;try{qt=await mo(c,x,je,t.json)}catch(U){Be=U instanceof Error?U.message:String(U),qe=z(U)}let st={submit:$e};qt?st.listing=qt:(st.listing=null,st.warning=`\u63D0\u4EA4\u6210\u529F\u4F46\u56DE\u67E5\u5931\u8D25\uFF1A${Be}`,st.verifyStatus=qe),console.log(JSON.stringify(S({success:!0,data:st}),null,2));return}let o=await gt();if(o.length===0){console.log(L.yellow("\u6CA1\u6709\u5DF2\u6388\u6743\u5E97\u94FA\uFF0C\u8BF7\u5148\u8FD0\u884C r2-cli auth xianyu \u6388\u6743"));return}let r=await ye({message:"\u9009\u62E9\u5E97\u94FA",choices:o.map(c=>({name:`${c.shopName} (${c.platform})`,value:c.shopId}))}),n=await ft();if(n.length===0){console.log(L.yellow("\u6CA1\u6709\u53EF\u7528\u7684\u4ED3\u5E93"));return}let i=await ye({message:"\u9009\u62E9\u4ED3\u5E93",choices:n.map(c=>({name:c.stockName,value:c.stockId}))}),s=await ht({stockId:i,size:100});if(!s.items?.length){console.log(L.yellow("\u8BE5\u4ED3\u5E93\u6CA1\u6709\u53EF\u9009\u7684\u5546\u54C1"));return}let a=await ye({message:"\u9009\u62E9\u5546\u54C1",choices:s.items.map(c=>({name:`${c.goodsName} ${c.size?`| ${c.size}`:""} | \xA5${c.salePrice}`,value:c.stockGoodsId}))}),d=await Er({message:"\u8F93\u5165\u4E0A\u67B6\u4EF7\u683C",default:s.items.find(c=>c.stockGoodsId===a)?.salePrice?.toString()??"",validate:c=>Number(c)>0?!0:"\u4EF7\u683C\u5FC5\u987B\u4E3A\u6B63\u6570"});if(!await jr({message:`\u786E\u8BA4\u4E0A\u67B6\uFF1F\u4EF7\u683C \xA5${d}`,default:!0})){console.log(L.gray("\u5DF2\u53D6\u6D88"));return}let P=Number(a);await Rt({stockGoodsId:P,shopId:r,price:Number(d),platform:"xianyu"}),console.log(L.green("\u2713 \u4E0A\u67B6\u5DF2\u63D0\u4EA4\uFF0C\u6B63\u5728\u67E5\u8BE2\u8FDB\u5EA6..."));try{let c=await mo(P,r,"xianyu"),x=c.status?.toLowerCase()!=="failed";console.log(x?L.green("\u2713 \u4E0A\u67B6\u6210\u529F"):L.red("\u2717 \u4E0A\u67B6\u5931\u8D25")),console.log(JSON.stringify(c,null,2))}catch(c){let x=c instanceof Error?c.message:String(c);console.log(L.yellow("\u26A0 \u5DF2\u63D0\u4EA4\uFF0C\u4F46\u56DE\u67E5\u5931\u8D25\uFF1A"+x)),console.log(L.gray("\u2192 \u8BF7\u7528 r2-cli goods listing \u786E\u8BA4\u4E0A\u67B6\u7ED3\u679C"))}})),e}import{Command as Jr}from"commander";import wo from"chalk";function xo(){let e=new Jr("shops");return e.description("\u67E5\u770B\u6240\u6709\u5DF2\u6388\u6743\u5E97\u94FA\uFF08\u8DE8\u5E73\u53F0\uFF09"),e.option("--json","\u8F93\u51FA JSON\uFF08\u4F9B AI Agent \u4F7F\u7528\uFF09"),e.action(m(async t=>{let o=await gt();if(t.json){console.log(JSON.stringify(no(o),null,2));return}if(!o.length){console.log(wo.yellow("\u672A\u627E\u5230\u5DF2\u6388\u6743\u7684\u5E97\u94FA")),console.log(wo.gray(" \u63D0\u793A: \u8BF7\u5148\u5728\u7B2C\u4E8C\u56DE\u5408 APP \u4E2D\u6388\u6743\u5E97\u94FA"));return}let{ShopsTable:r}=await Promise.resolve().then(()=>(yo(),fo)),{renderComponent:n}=await Promise.resolve().then(()=>(ut(),St));n(r,{shops:o,platform:"all"})})),e}import{Command as zr}from"commander";import Wr from"chalk";function To(){let e=new zr("stocks");return e.description("\u67E5\u770B\u6240\u6709\u4ED3\u5E93"),e.option("--json","\u8F93\u51FA JSON\uFF08\u4F9B AI Agent \u4F7F\u7528\uFF09"),e.action(m(async t=>{let o=await ft();if(t.json){console.log(JSON.stringify(o,null,2));return}if(!o.length){console.log(Wr.yellow("\u672A\u627E\u5230\u4ED3\u5E93\u4FE1\u606F"));return}let{StocksTable:r}=await Promise.resolve().then(()=>(Co(),Io)),{renderComponent:n}=await Promise.resolve().then(()=>(ut(),St));n(r,{stocks:o})})),e}import{Command as Hr}from"commander";import rt from"chalk";function bo(){let e=new Hr("list");return e.description("\u67E5\u770B\u4ED3\u5E93\u4E2D\u7684\u9009\u54C1\u5546\u54C1"),e.option("--stock-id <id>","\u4ED3\u5E93 ID\uFF08\u4ECE goods stocks \u83B7\u53D6\uFF09").option("--stock-goods-id <id>","\u5E93\u5B58\u5546\u54C1 ID").option("--page <n>","\u9875\u7801","1").option("--size <n>","\u6BCF\u9875\u6570\u91CF\uFF08\u6700\u5927 50\uFF09","20").option("--json","\u8F93\u51FA JSON\uFF08\u4F9B AI Agent \u4F7F\u7528\uFF09"),e.action(m(async t=>{let r=await ht({stockId:t.stockId||void 0,stockGoodsId:t.stockGoodsId||void 0,page:Number(t.page)||1,size:Math.min(Number(t.size)||20,50)})??{items:[],total:0};if(t.json){r.items?.length?console.log(JSON.stringify(r,null,2)):console.log(JSON.stringify({...r,hint:"\u9009\u54C1\u5546\u54C1\u4E3A\u7A7A\uFF0C\u8BF7\u5148\u5728\u540E\u53F0\u751F\u6210\u9009\u54C1\u8868\u6570\u636E\u540E\u518D\u8BD5"},null,2));return}if(!r.items?.length){console.log(rt.yellow("\u6682\u65E0\u9009\u54C1\u5546\u54C1\uFF0C\u8BF7\u5148\u7ED1\u5B9A\u4ED3\u5E93\u6216\u5728\u540E\u53F0\u751F\u6210\u9009\u54C1\u8868\u6570\u636E"));return}console.log(rt.cyan(`
35
+ `))}function zr(t){if(t instanceof k)console.error(L.red(`
36
+ \u25B2 ${t.message}`)),console.error(L.gray(`\u2192 \u8BF7\u5148\u8FD0\u884C: r2-cli auth login
37
+ `));else if(t instanceof v)console.error(L.red(`\u25B2 \u64CD\u4F5C\u5931\u8D25: ${t.message}`)),t.status&&console.error(L.gray(` \u72B6\u6001\u7801: ${t.status}`));else if(t instanceof F)console.error(L.red(`\u25B2 \u914D\u7F6E\u6587\u4EF6\u5F02\u5E38: ${t.message}`)),t.path&&console.error(L.gray(` \u8DEF\u5F84: ${t.path}`)),console.error(L.gray(`\u2192 \u8BF7\u5C1D\u8BD5\u91CD\u65B0\u767B\u5F55: r2-cli auth login
38
+ `));else{let o=t instanceof Error?t.message:String(t);console.error(L.red(`\u25B2 ${o}`))}process.exit(1)}function C(t){let o=Ie();return o?{...t,...o}:t}function w(t){let o=typeof t=="object"&&t!==null?t:{value:t};o=C(o),console.log(JSON.stringify(o,null,2))}function uo(t,o){let e={success:!1,error:t};o&&(e.errorType=o),e=C(e),console.log(JSON.stringify(e)),process.exit(1)}function c(t){return async o=>{try{await t(o)}catch(e){if(o.json){let r=e instanceof Error?e.message:String(e),n=lt(e),i=e instanceof v?e.status:void 0,s={success:!1,error:r,errorType:n};i!=null&&(s.status=i),s=C(s),console.log(JSON.stringify(s)),process.exit(1)}zr(e)}}}function g(t,o){t.json&&(console.log(JSON.stringify({success:!1,error:o,errorType:"validation"})),process.exit(1)),console.log(L.yellow(o))}function f(t,o,e){if(t.json){let r={success:!0,data:o};r=C(r),console.log(JSON.stringify(r,null,2))}else e&&console.log(L.green(e)),console.log(JSON.stringify(o,null,2))}function vt(t){return async(...o)=>{try{await t(...o)}catch(e){let r=e instanceof Error?e.message:String(e),n=lt(e);uo(r,n)}}}var Xr=new Set(["accessToken","refreshExpireIn"]);function be(t){return t.map(o=>{let e={};for(let[r,n]of Object.entries(o))Xr.has(r)||(e[r]=n);return e})}function Rt(t){t.option("--expire <ms>","\u8FC7\u671F\u65F6\u95F4\uFF08\u6BEB\u79D2\uFF09","300000").option("--interval <ms>","\u8F6E\u8BE2\u95F4\u9694\uFF08\u6BEB\u79D2\uFF09","1000")}function Lt(t,o){return{expireMs:Number.parseInt(t.expire??String(o?.expireMs??3e5),10),intervalMs:Number.parseInt(t.interval??String(o?.intervalMs??1e3),10)}}async function Ot(t){let{qrInfo:o,qrUrl:e,setStatus:r,closeServer:n,waitArgs:i}=await t.generate();console.log(JSON.stringify(C(o),null,2)),M(e);try{let s=await t.waitResult(i,r);console.log(JSON.stringify(C(t.formatSuccess(s))))}catch(s){let a=s instanceof Error?s.message:String(s);console.log(JSON.stringify(C({success:!1,error:a}))),process.exit(1)}finally{setTimeout(n,1e3)}}function po(){let t=new Se("login");t.description("\u626B\u7801\u767B\u5F55 Round2AI \u8D26\u6237").option("--json","\u8F93\u51FA JSON\uFF08\u4F9B AI Agent \u4F7F\u7528\uFF09");let o=new Se("poll").description("\u8F6E\u8BE2\u767B\u5F55\u72B6\u6001\uFF08\u4F9B AI Agent \u4F7F\u7528\uFF09").requiredOption("--token <qrToken>","\u4E8C\u7EF4\u7801 token").action(vt(async e=>{let r=R(),{expireMs:n,intervalMs:i}=Lt(e),s=await r.waitForLogin(e.token,n,i);console.log(JSON.stringify(C({success:!0,...s})))}));return Rt(o),t.addCommand(o),t.action(c(async e=>{e.json?await Ot({generate:async()=>{let r=R(),{qrData:n,qrUrl:i,setStatus:s,closeServer:a}=await r.generateQR(),m=Number.parseInt(n.expireTime,10),p=Number.parseInt(n.pollInterval,10);return{qrInfo:{qrToken:n.qrToken,expireTimeMs:m,pollIntervalMs:p,qrUrl:i},qrUrl:i,setStatus:s,closeServer:a,waitArgs:{qrToken:n.qrToken,expireMs:m,intervalMs:p}}},waitResult:({qrToken:r,expireMs:n,intervalMs:i},s)=>R().waitForLogin(r,n,i,void 0,s,!0),formatSuccess:r=>({success:!0,userInfo:r.userInfo})}):await R().login()})),t}import{Command as Wr}from"commander";function go(){let t=new Wr("logout");return t.description("\u9000\u51FA\u767B\u5F55").option("--json","\u8F93\u51FA JSON\uFF08\u4F9B AI Agent \u4F7F\u7528\uFF09"),t.action(c(async o=>{if(o.json){let{getAuthStorage:e}=await Promise.resolve().then(()=>(gt(),ro));await e().clearCredentials(),f(o,null,"\u5DF2\u9000\u51FA\u767B\u5F55")}else await R().logout()})),t}import{Command as Hr}from"commander";function fo(){let t=new Hr("status");return t.description("\u67E5\u770B\u767B\u5F55\u72B6\u6001").option("--json","\u8F93\u51FA JSON\uFF08\u4F9B AI Agent \u4F7F\u7528\uFF09"),t.action(c(async o=>{if(o.json){let{getAuthStorage:e}=await Promise.resolve().then(()=>(gt(),ro)),r=e();if(!await r.isLoggedIn()){f(o,{loggedIn:!1},"\u672A\u767B\u5F55");return}let i=await r.getCredentials();f(o,{loggedIn:!0,userInfo:i.userInfo,timestamp:i.timestamp})}else await R().status()})),t}import{Command as Ce}from"commander";function ho(){let t=new Ce("platform");t.description("\u7B2C\u4E09\u65B9\u5E73\u53F0\u6388\u6743").requiredOption("--name <platform>",`\u5E73\u53F0\u540D\u79F0 (${co().join("/")})`).option("--json","\u8F93\u51FA JSON\uFF08\u4F9B AI Agent \u4F7F\u7528\uFF09");let o=new Ce("poll").description("\u8F6E\u8BE2\u6388\u6743\u72B6\u6001\uFF08\u4F9B AI Agent \u4F7F\u7528\uFF09").requiredOption("--state <state>","\u6388\u6743\u8F6E\u8BE2 token").requiredOption("--name <platform>",`\u5E73\u53F0\u540D\u79F0 (${co().join("/")})`);return Rt(o),o.action(vt(async e=>{let{expireMs:r,intervalMs:n}=Lt(e),i=await yt(e.state,e.name,r,n);i.status==="success"?console.log(JSON.stringify(C({success:!0,shopId:i.shopId,shopName:i.shopName}))):uo(`\u6388\u6743\u72B6\u6001: ${i.status}`)})),t.addCommand(o),t.action(c(async e=>{let r=e.name;e.json?await Ot({generate:async()=>{let{authData:n,qrUrl:i,setStatus:s,closeServer:a}=await jt(r),m=3e5,p=1e3;return{qrInfo:{state:n.state,expireTimeMs:m,pollIntervalMs:p,qrUrl:i},qrUrl:i,setStatus:s,closeServer:a,waitArgs:{state:n.state,platform:r,expireMs:m,intervalMs:p}}},waitResult:async({state:n,platform:i,expireMs:s,intervalMs:a},m)=>{let p=await yt(n,i,s,a,void 0,m);if(p.status!=="success")throw new Error(`\u6388\u6743\u72B6\u6001: ${p.status}`);return p},formatSuccess:n=>({success:!0,shopId:n.shopId,shopName:n.shopName})}):await mo(r)})),t}import{Command as Zn}from"commander";import ti from"chalk";import{Command as nn}from"commander";import ve from"chalk";E();async function Ut(t){return u.post("mms/goods/listing/up/xianyu",t)}async function yo(t){return u.post("mms/goods/listing/down/xianyu",t)}async function Io(t){return u.post("mms/goods/listing/update/xyPrice",t)}async function wo(t){return u.post("mms/goods/listing/update/goodsInfo",t)}async function bo(t){return u.post("mms/goods/listing/hang/up/xianyu",t)}async function So(t){return u.get("mms/goods/listing/get",A(t))}async function It(t){return u.get("mms/goods/listing/list",t?A(t):void 0)}E();async function wt(){return await u.get("mms/user/shop/list")??[]}async function bt(){return await u.get("mms/user/stock/list")??[]}async function St(t){let o=t?A(t):void 0;return u.get("mms/seller/goods/select/list",o)}import{basename as Zr}from"node:path";import{stat as Vr,readFile as xe}from"node:fs/promises";import Kr from"sharp";var Yr=2*1024*1024;async function Pe(t,o=Yr){let{size:e}=await Vr(t);if(e<=o)return xe(t);let r=[90,80,70,60,50,40,30],n=null;for(let i of r){let s=await Kr(t).jpeg({quality:i,mozjpeg:!0}).toBuffer();if(s.length<=o)return s;n=s}return n??xe(t)}async function Co(t,o){let e=`platform/xy/media/upload?shopId=${encodeURIComponent(t)}`,r=async(a,m=1)=>{for(let p=0;p<=m;p++)try{if(a.type==="url")return await u.post(e,{url:a.url});let T=await Pe(a.path),d=Zr(a.path),I=new FormData;return I.append("file",new Blob([new Uint8Array(T)]),d),await u.upload(e,I)}catch(T){if(p<m){await new Promise(d=>setTimeout(d,1e3));continue}throw T}throw new Error("unreachable")},n=await Promise.allSettled(o.map(r)),i=[],s=[];for(let a=0;a<n.length;a++){let m=n[a];if(m.status==="fulfilled")i.push(m.value);else{let p=m.reason,T=o[a],d=T.type==="url"?T.url:T.path;s.push({file:d,error:p instanceof Error?p.message:`${p}`})}}return{images:i,failed:s}}E();async function xo(t=16){return await u.get("platform/xy/cat",A({spBizType:t}))??[]}async function Po(t){return await u.get("platform/xy/props",A({channelCatId:t}))??[]}async function To(t,o,e){return await u.get("platform/xy/props/value",A({channelCatId:t,propId:o,key:e}))??[]}E();var G="mms/taobao/jbp";async function Ao(t){return u.get(`${G}/spu/query`,A(t))}async function ko(t,o){return u.get(`${G}/spu/detail`,A({shopId:t,spuId:o}))}async function jo(t){return u.post(`${G}/apply/sku/add`,t)}async function No(t){return u.get(`${G}/apply/item/query`,A(t))}async function vo(t){return u.post(`${G}/apply/sku/quantity/update`,t)}async function Ro(t){return u.post(`${G}/apply/sku/price/update`,t)}async function Lo(t){return u.post(`${G}/apply/spu/offline`,t)}async function Oo(t){return u.post(`${G}/apply/sku/offline`,t)}function Re(){let t=new nn("shops");return t.description("\u67E5\u770B\u6240\u6709\u5DF2\u6388\u6743\u5E97\u94FA\uFF08\u8DE8\u5E73\u53F0\uFF09"),t.option("--json","\u8F93\u51FA JSON\uFF08\u4F9B AI Agent \u4F7F\u7528\uFF09"),t.action(c(async o=>{let e=await wt();if(o.json){w(be(e));return}if(!e.length){console.log(ve.yellow("\u672A\u627E\u5230\u5DF2\u6388\u6743\u7684\u5E97\u94FA")),console.log(ve.gray(" \u63D0\u793A: \u8BF7\u5148\u5728\u7B2C\u4E8C\u56DE\u5408 APP \u4E2D\u6388\u6743\u5E97\u94FA"));return}let{ShopsTable:r}=await Promise.resolve().then(()=>(Ne(),ke)),{renderComponent:n}=await Promise.resolve().then(()=>(ht(),ft));n(r,{shops:e,platform:"all"})})),t}import{Command as dn}from"commander";import mn from"chalk";function $e(){let t=new dn("stocks");return t.description("\u67E5\u770B\u6240\u6709\u4ED3\u5E93"),t.option("--json","\u8F93\u51FA JSON\uFF08\u4F9B AI Agent \u4F7F\u7528\uFF09"),t.action(c(async o=>{let e=await bt();if(o.json){w(e);return}if(!e.length){console.log(mn.yellow("\u672A\u627E\u5230\u4ED3\u5E93\u4FE1\u606F"));return}let{StocksTable:r}=await Promise.resolve().then(()=>(Ue(),Le)),{renderComponent:n}=await Promise.resolve().then(()=>(ht(),ft));n(r,{stocks:e})})),t}import{Command as ln}from"commander";import it from"chalk";function De(){let t=new ln("list");return t.description("\u67E5\u770B\u4ED3\u5E93\u4E2D\u7684\u9009\u54C1\u5546\u54C1"),t.option("--stock-id <id>","\u4ED3\u5E93 ID\uFF08\u4ECE goods stocks \u83B7\u53D6\uFF09").option("--stock-goods-id <id>","\u5E93\u5B58\u5546\u54C1 ID").option("--page <n>","\u9875\u7801","1").option("--size <n>","\u6BCF\u9875\u6570\u91CF\uFF08\u6700\u5927 50\uFF09","20").option("--json","\u8F93\u51FA JSON\uFF08\u4F9B AI Agent \u4F7F\u7528\uFF09"),t.action(c(async o=>{let r=await St({stockId:o.stockId||void 0,stockGoodsId:o.stockGoodsId||void 0,page:Number(o.page)||1,size:Math.min(Number(o.size)||20,50)})??{items:[],total:0};if(o.json){let n=r.items?.length?r:{...r,hint:"\u9009\u54C1\u5546\u54C1\u4E3A\u7A7A\uFF0C\u8BF7\u5148\u5728\u540E\u53F0\u751F\u6210\u9009\u54C1\u8868\u6570\u636E\u540E\u518D\u8BD5"};w(n);return}if(!r.items?.length){console.log(it.yellow("\u6682\u65E0\u9009\u54C1\u5546\u54C1\uFF0C\u8BF7\u5148\u7ED1\u5B9A\u4ED3\u5E93\u6216\u5728\u540E\u53F0\u751F\u6210\u9009\u54C1\u8868\u6570\u636E"));return}console.log(it.cyan(`
39
39
  \u9009\u54C1\u5546\u54C1\uFF08\u5171 ${r.total} \u4EF6\uFF0C\u7B2C ${r.page} \u9875\uFF09
40
- `));for(let n of r.items)console.log(` ${rt.bold(n.goodsName)} ${n.size?rt.gray(`| ${n.size}`):""}`),console.log(` \u54C1\u724C: ${n.brand} \u5EFA\u8BAE\u552E\u4EF7: \xA5${n.salePrice} stockGoodsId: ${rt.green(n.stockGoodsId)}`),console.log(rt.gray(` \u5206\u7C7B: ${n.cate1Name} > ${n.cate2Name} > ${n.cate3Name}`)),console.log()})),e}import{Command as Zr}from"commander";import tn from"chalk";ut();Ut();import{Box as p,Text as g}from"ink";import{jsx as l,jsxs as ve}from"react/jsx-runtime";var Vr={init:{label:"\u5F85\u4E0A\u67B6",color:"yellow"},up:{label:"\u5DF2\u4E0A\u67B6",color:"green"},down:{label:"\u5DF2\u4E0B\u67B6",color:"gray"},fail:{label:"\u5931\u8D25",color:"red"},sold:{label:"\u5DF2\u552E\u51FA",color:"blue"}},ke=4,Re=8,Et=8,Le=8,Ne=8,Oe=11,jt=10,Dt=10,$t=12;function Yr({fillWidth:e}){return ve(p,{flexDirection:"row",children:[l(p,{width:ke,children:l(g,{bold:!0,color:"white",children:"ID"})}),l(p,{width:Re,children:l(g,{bold:!0,color:"white",children:"\u72B6\u6001"})}),l(p,{width:Et,children:l(g,{bold:!0,color:"white",children:"\u54C1\u724C"})}),l(p,{width:e,children:l(g,{bold:!0,color:"white",children:"\u5546\u54C1\u540D\u79F0"})}),l(p,{width:Le,children:l(g,{bold:!0,color:"white",children:"\u4EF7\u683C"})}),l(p,{width:Ne,children:l(g,{bold:!0,color:"white",children:"\u5E73\u53F0"})}),l(p,{width:Oe,children:l(g,{bold:!0,color:"white",children:"\u5E97\u94FA"})}),l(p,{width:jt,children:l(g,{bold:!0,color:"white",children:"\u4ED3\u5E93\u5546\u54C1"})}),l(p,{width:Dt,children:l(g,{bold:!0,color:"white",children:"\u8D27\u53F7"})}),l(p,{width:$t,children:l(g,{bold:!0,color:"white",children:"\u4E09\u65B9\u7F16\u53F7"})})]})}function Kr({item:e,fillWidth:t}){let o=Vr[e.status]??{label:e.status,color:"white"};return ve(p,{flexDirection:"row",children:[l(p,{width:ke,children:l(g,{color:"gray",children:e.id})}),l(p,{width:Re,children:l(g,{color:o.color,children:o.label})}),l(p,{width:Et,children:l(g,{color:"cyan",children:tt(e.brandName||"-",Et-1)})}),l(p,{width:t,children:l(g,{children:tt(e.goodsName,t-1)})}),l(p,{width:Le,children:ve(g,{color:"yellow",children:["\xA5",e.price]})}),l(p,{width:Ne,children:l(g,{color:"gray",children:e.platform})}),l(p,{width:Oe,children:l(g,{color:"gray",children:e.shopId})}),l(p,{width:jt,children:l(g,{color:"gray",children:tt(`${e.stockGoodsId}`,jt-1)})}),l(p,{width:Dt,children:l(g,{color:"gray",children:tt(e.goodsNo||"-",Dt-1)})}),l(p,{width:$t,children:l(g,{color:"gray",children:tt(e.thirdItemNo||"-",$t-1)})})]})}function Po({items:e,total:t}){let o=ke+Re+Et+Le+Ne+Oe+jt+Dt+$t,{fillWidth:r,totalWidth:n}=et(o);return l(ot,{title:"\u4E0A\u67B6\u5217\u8868",count:t,fillWidth:r,totalWidth:n,header:l(Yr,{fillWidth:r}),children:e.map(i=>l(Kr,{item:i,fillWidth:r},i.id))})}function Ao(){let e=new Zr("listing");return e.description("\u67E5\u8BE2\u4E0A\u67B6\u5546\u54C1\u5217\u8868"),e.option("--id <id>","\u4E0A\u67B6\u8BB0\u5F55 ID").option("--stock-goods-id <id>","\u5E93\u5B58\u5546\u54C1 ID").option("--shop-id <id>","\u5E97\u94FA ID").option("--stock-id <id>","\u4ED3\u5E93 ID").option("-s, --status <status>","\u72B6\u6001\u8FC7\u6EE4\uFF08init/up/down/fail/sold\uFF09").option("-p, --platform <platform>","\u5E73\u53F0","xianyu").option("--page <n>","\u9875\u7801","1").option("--size <n>","\u6BCF\u9875\u6570\u91CF\uFF08\u6700\u5927 50\uFF09","20").option("--json","\u8F93\u51FA JSON\uFF08\u4F9B AI Agent \u4F7F\u7528\uFF09"),e.action(m(async t=>{let r=await le({id:t.id,stockGoodsId:t.stockGoodsId?Number(t.stockGoodsId):void 0,shopId:t.shopId,stockId:t.stockId,status:t.status,platform:t.platform,page:Number(t.page)||1,size:Math.min(Number(t.size)||20,50)})??{items:[],total:0};if(t.json){r.items?.length?console.log(JSON.stringify(r,null,2)):console.log(JSON.stringify({...r,hint:"\u6682\u65E0\u4E0A\u67B6\u8BB0\u5F55"},null,2));return}if(!r.items?.length){console.log(tn.yellow("\u6682\u65E0\u4E0A\u67B6\u8BB0\u5F55"));return}Vt(Po,{items:r.items,total:Number(r.total)})})),e}import{Command as en}from"commander";import on from"chalk";function vo(){let e=new en("down");return e.description("\u4E0B\u67B6\u95F2\u9C7C\u5546\u54C1"),e.option("--id <id>","\u4E0A\u67B6\u8BB0\u5F55 ID").option("--stock-goods-id <id>","\u5E93\u5B58\u5546\u54C1 ID").option("--shop-id <id>","\u5E97\u94FA ID").option("--json","\u8F93\u51FA JSON\uFF08\u4F9B AI Agent \u4F7F\u7528\uFF09"),e.action(m(async t=>{if(!t.id&&!(t.stockGoodsId&&t.shopId)){h(t,"\u8BF7\u6307\u5B9A\u4E0B\u67B6\u6761\u4EF6\uFF1A--id <id> \u6216 --stock-goods-id <id> --shop-id <id>");return}let o={};t.id&&(o.id=t.id),t.stockGoodsId&&(o.stockGoodsId=Number(t.stockGoodsId)),t.shopId&&(o.shopId=t.shopId),t.json||console.log(on.cyan("\u{1F4E6} \u6B63\u5728\u4E0B\u67B6\u5546\u54C1..."));let r=await se(o);y(t,r,"\u2705 \u4E0B\u67B6\u6210\u529F")})),e}import{Command as rn}from"commander";import nn from"chalk";function ko(){let e=new rn("price");return e.description("\u4FEE\u6539\u95F2\u9C7C\u4E0A\u67B6\u5546\u54C1\u4EF7\u683C"),e.option("--id <id>","\u4E0A\u67B6\u8BB0\u5F55 ID").option("--stock-goods-id <id>","\u5E93\u5B58\u5546\u54C1 ID").option("--shop-id <id>","\u5E97\u94FA ID").option("--price <amount>","\u65B0\u4EF7\u683C\uFF08\u5FC5\u586B\uFF09").option("--json","\u8F93\u51FA JSON\uFF08\u4F9B AI Agent \u4F7F\u7528\uFF09"),e.action(m(async t=>{if(!t.price){h(t,"--price <amount> \u4E3A\u5FC5\u586B\u53C2\u6570");return}if(!t.id&&!(t.stockGoodsId&&t.shopId)){h(t,"\u8BF7\u6307\u5B9A\u5546\u54C1\uFF1A--id <id> \u6216 --stock-goods-id <id> --shop-id <id>");return}let o={price:Number(t.price)};t.id&&(o.id=t.id),t.stockGoodsId&&(o.stockGoodsId=Number(t.stockGoodsId)),t.shopId&&(o.shopId=t.shopId),t.json||console.log(nn.cyan(`\u{1F4B0} \u6B63\u5728\u4FEE\u6539\u4EF7\u683C\u4E3A ${t.price}...`));let r=await ae(o);y(t,r,"\u2705 \u4EF7\u683C\u4FEE\u6539\u6210\u529F")})),e}import{Command as sn}from"commander";import an from"chalk";function Ro(){let e=new sn("edit");return e.description("\u4FEE\u6539\u5DF2\u4E0A\u67B6\u5546\u54C1\u4FE1\u606F\uFF08\u6807\u9898\u3001\u63CF\u8FF0\u3001\u54C1\u724C\u3001\u7C7B\u76EE\u3001\u56FE\u7247\u3001\u5C5E\u6027\u7B49\uFF09"),e.option("--id <id>","\u5546\u54C1\u4E0A\u67B6 ID\uFF08goodsListingId\uFF0C\u63A8\u8350\uFF09").option("--stock-goods-id <id>","\u5E93\u5B58\u5546\u54C1 ID\uFF08\u4E0E --account \u914D\u5408\uFF09").option("--account <shopId>","\u95F2\u9C7C\u7528\u6237\u540D/\u5E97\u94FA ID\uFF08\u4E0E --stock-goods-id \u914D\u5408\uFF09").option("--title <title>","\u5546\u54C1\u6807\u9898").option("--desc <desc>","\u5546\u54C1\u63CF\u8FF0").requiredOption("--category-id <id>","\u5546\u54C1\u7C7B\u76EE ID\uFF08\u5927\u5206\u7C7B\uFF0C\u540E\u7AEF\u5FC5\u586B\uFF09").requiredOption("--channel-cat-id <id>","\u6E20\u9053\u7C7B\u76EE ID\uFF08\u5C0F\u5206\u7C7B\uFF0C\u540E\u7AEF\u5FC5\u586B\uFF09").option("--image-ids <ids>","\u56FE\u7247 ID \u5217\u8868\uFF08\u9017\u53F7\u5206\u9694\uFF09").option("--item-attrs <json>","\u5546\u54C1\u5C5E\u6027\u5217\u8868\uFF08JSON \u5B57\u7B26\u4E32\uFF09").option("--brand-name <name>","\u54C1\u724C\u540D\u79F0").option("--stuff-status <status>","\u6210\u8272\u7B49\u7EA7\uFF1A100=\u5168\u65B0 -1=\u51C6\u65B0 99=99\u65B0 95=95\u65B0 90=9\u65B0").option("--goods-no <no>","\u8D27\u53F7").option("--original-price <price>","\u539F\u4EF7\uFF08\u5355\u4F4D\uFF1A\u5143\uFF09").option("--size <size>","\u5C3A\u7801").option("--json","\u8F93\u51FA JSON\uFF08\u4F9B AI Agent \u4F7F\u7528\uFF09"),e.action(m(async t=>{if(!t.id&&!(t.stockGoodsId&&t.account)){h(t,"\u8BF7\u6307\u5B9A\u5546\u54C1\uFF1A--id <goodsListingId> \u6216 --stock-goods-id <id> --account <shopId>");return}let o={categoryId:Number(t.categoryId),channelCatId:t.channelCatId};if(t.id&&(o.goodsListingId=Number(t.id)),t.stockGoodsId&&(o.stockGoodsId=Number(t.stockGoodsId)),t.account&&(o.account=t.account),t.title){let i=Lt(t.title);if(i){h(t,i);return}o.title=t.title}if(t.desc&&(o.desc=t.desc),t.imageIds&&(o.imageIdList=t.imageIds.split(",").map(i=>i.trim())),t.brandName&&(o.brandName=t.brandName),t.stuffStatus&&(o.stuffStatus=Number(t.stuffStatus)),t.goodsNo&&(o.goodsNo=t.goodsNo),t.originalPrice&&(o.originalPrice=Number(t.originalPrice)),t.size&&(o.size=t.size),t.itemAttrs)try{o.itemAttrList=JSON.parse(t.itemAttrs)}catch{h(t,"--item-attrs JSON \u89E3\u6790\u5931\u8D25");return}if(!Object.keys(o).some(i=>!["goodsListingId","stockGoodsId","account"].includes(i))){h(t,"\u672A\u6307\u5B9A\u9700\u8981\u4FEE\u6539\u7684\u5B57\u6BB5");return}t.json||console.log(an.cyan("\u6B63\u5728\u4FEE\u6539\u5546\u54C1\u4FE1\u606F..."));let n=await ce(o);y(t,n,"\u2705 \u5546\u54C1\u4FE1\u606F\u4FEE\u6539\u6210\u529F")})),e}import{Command as fn}from"commander";import{Command as cn}from"commander";import Ue from"chalk";function Lo(){return new cn("categories").description("\u83B7\u53D6\u95F2\u9C7C\u7C7B\u76EE\u5217\u8868\uFF08\u5927\u5206\u7C7B \u2192 \u5C0F\u5206\u7C7B\uFF09").option("--sp-biz-type <n>","\u4E1A\u52A1\u5206\u7C7B\uFF0C16=\u5962\u54C1","16").option("--json","\u8F93\u51FA JSON\uFF08\u4F9B AI Agent \u4F7F\u7528\uFF09").action(m(async e=>{let t=await ge(Number(e.spBizType));if(e.json){console.log(JSON.stringify(t,null,2));return}let o=new Map;for(let r of t){let n=String(r.catId);o.has(n)||o.set(n,{catName:r.catName,children:[]}),o.get(n).children.push({channel:r.channel,channelCatId:r.channelCatId})}for(let[r,n]of o){console.log(Ue.bold(`${n.catName} (catId: ${Ue.green(r)})`));for(let i of n.children)console.log(` ${i.channel} (channelCatId: ${Ue.green(i.channelCatId)})`)}}))}import{Command as ln}from"commander";import No from"chalk";function Oo(){return new ln("props").description("\u83B7\u53D6\u6307\u5B9A\u7C7B\u76EE\u4E0B\u7684\u5C5E\u6027\u5217\u8868\uFF08\u542B\u53EF\u9009\u503C\uFF09").requiredOption("--channel-cat-id <id>","\u5C0F\u5206\u7C7B ID\uFF08\u4ECE categories \u83B7\u53D6\uFF09").option("--json","\u8F93\u51FA JSON\uFF08\u4F9B AI Agent \u4F7F\u7528\uFF09").action(m(async e=>{let t=await fe(e.channelCatId);if(e.json){console.log(JSON.stringify(t,null,2));return}for(let o of t)if(console.log(No.bold(`
41
- ${o.propName} (propId: ${o.propId})`)),o.propsValues?.length)for(let r of o.propsValues)console.log(` ${r.valueName} (valueId: ${r.valueId})`);else console.log(No.gray(" \uFF08\u4F7F\u7528 brands \u5B50\u547D\u4EE4\u641C\u7D22\uFF09"))}))}import{Command as dn}from"commander";import mn from"chalk";function Uo(){return new dn("brands").description("\u641C\u7D22\u95F2\u9C7C\u54C1\u724C\uFF08\u6309\u5173\u952E\u5B57\u8FC7\u6EE4\uFF09").requiredOption("--channel-cat-id <id>","\u5C0F\u5206\u7C7B ID").requiredOption("--prop-id <id>","\u5C5E\u6027 ID\uFF08\u54C1\u724C\u5C5E\u6027\u7684 propId\uFF09").requiredOption("--key <keyword>","\u641C\u7D22\u5173\u952E\u5B57").option("--json","\u8F93\u51FA JSON\uFF08\u4F9B AI Agent \u4F7F\u7528\uFF09").action(m(async e=>{let t=await he(e.channelCatId,e.propId,e.key);if(e.json){console.log(JSON.stringify(t,null,2));return}if(!t.length){console.log(mn.yellow("\u672A\u627E\u5230\u5339\u914D\u7684\u54C1\u724C"));return}for(let o of t)console.log(` ${o.valueName} (valueId: ${o.valueId})`)}))}import{Command as un}from"commander";import Ee from"chalk";function Eo(){return new un("upload-images").description("\u6279\u91CF\u4E0A\u4F20\u56FE\u7247\u5230\u95F2\u9C7C\uFF08\u6302\u552E\u524D\u5FC5\u987B\u5148\u4E0A\u4F20\u56FE\u7247\uFF09").requiredOption("--shop-id <id>","\u5E97\u94FA ID").requiredOption("--files <paths>","\u56FE\u7247\u6587\u4EF6\u8DEF\u5F84\uFF0C\u9017\u53F7\u5206\u9694").option("--json","\u8F93\u51FA JSON\uFF08\u4F9B AI Agent \u4F7F\u7528\uFF09").action(m(async e=>{let t=e.files.split(",").map(n=>n.trim()).filter(Boolean);if(t.length===0){h(e,"\u8BF7\u63D0\u4F9B\u81F3\u5C11\u4E00\u5F20\u56FE\u7247");return}e.json||console.log(Ee.cyan(`\u6B63\u5728\u4E0A\u4F20 ${t.length} \u5F20\u56FE\u7247...`));let{images:o,failed:r}=await ue(e.shopId,t);if(e.json){let n={success:!0,images:o};r.length&&(n.warning=`${r.length} \u5F20\u56FE\u7247\u4E0A\u4F20\u5931\u8D25`,n.failed=r),console.log(JSON.stringify(n,null,2))}else{if(o.length){console.log(Ee.green(`\u4E0A\u4F20\u6210\u529F\uFF0C\u5171 ${o.length} \u5F20`));for(let n of o)console.log(` \u56FE\u7247ID: ${n.value}`)}if(r.length){console.log(Ee.yellow(`
42
- ${r.length} \u5F20\u4E0A\u4F20\u5931\u8D25:`));for(let n of r)console.log(` ${n.file}: ${n.error}`)}}}))}import{Command as pn}from"commander";import nt from"chalk";var gn={100:"\u5168\u65B0",[-1]:"\u51C6\u65B0",99:"99\u65B0",95:"95\u65B0",90:"9\u65B0"};function jo(){return new pn("submit").description("\u63D0\u4EA4\u6302\u552E\u4E0A\u67B6").requiredOption("--shop-id <id>","\u5E97\u94FA ID\uFF08\u5373\u95F2\u9C7C\u7528\u6237\u540D account\uFF09").requiredOption("--title <title>","\u5546\u54C1\u6807\u9898").requiredOption("--price <amount>","\u552E\u4EF7").requiredOption("--category-id <id>","\u5927\u5206\u7C7B ID\uFF08\u4ECE categories \u83B7\u53D6\uFF09").requiredOption("--channel-cat-id <id>","\u5C0F\u5206\u7C7B ID\uFF08\u4ECE categories \u83B7\u53D6\uFF09").requiredOption("--image-ids <ids>","\u56FE\u7247 ID \u5217\u8868\uFF0C\u9017\u53F7\u5206\u9694\uFF08\u5148\u901A\u8FC7 upload-images \u83B7\u53D6\uFF09").requiredOption("--stuff-status <n>","\u6210\u8272\uFF1A100 \u5168\u65B0 / -1 \u51C6\u65B0 / 99 99\u65B0 / 95 95\u65B0 / 90 9\u65B0").option("--item-attrs <json>",'\u5546\u54C1\u5C5E\u6027\u5217\u8868 JSON\uFF0C\u683C\u5F0F: [{"valueName":"x","valueId":"y","propId":"z"}]').option("--brand-name <name>","\u54C1\u724C\u540D\u79F0").requiredOption("--desc <desc>","\u5546\u54C1\u63CF\u8FF0").option("--size <size>","\u5C3A\u7801").option("--goods-no <no>","\u8D27\u53F7").option("--original-price <amount>","\u539F\u4EF7").option("--trade-type <n>","\u4EA4\u6613\u65B9\u5F0F\uFF1A0 \u4EC5\u5728\u7EBF / 1 \u4EC5\u7EBF\u4E0B / 2 \u7EBF\u4E0A\u6216\u7EBF\u4E0B","0").option("--transport-fee <amount>","\u8FD0\u8D39\uFF08\u9ED8\u8BA4 0 \u5305\u90AE\uFF09","0").option("--yhb","\u662F\u5426\u5F00\u542F\u9A8C\u8D27\u5B9D").requiredOption("--out-item-no <no>","\u5546\u5BB6\u7F16\u7801\uFF08\u540C\u5E97\u94FA\u552F\u4E00\uFF0C\u7528\u6237\u81EA\u5B9A\u4E49\uFF09").option("--division-id <id>","\u884C\u653F\u533A\u5212 ID\uFF08\u5E02\u7EA7 ID\uFF0C\u9ED8\u8BA4\u676D\u5DDE 330100\uFF09","330100").option("--json","\u8F93\u51FA JSON\uFF08\u4F9B AI Agent \u4F7F\u7528\uFF09").action(m(async e=>{let t=Lt(e.title);if(t){h(e,t);return}let o=Number(e.price),r=Nt(o);if(r){h(e,r);return}let n=e.imageIds.split(",").map(d=>d.trim()),i=e.itemAttrs?JSON.parse(e.itemAttrs):void 0,s={account:e.shopId,title:e.title,reservePrice:Number(e.price),categoryId:Number(e.categoryId),channelCatId:e.channelCatId,imageIdList:n,stuffStatus:Number(e.stuffStatus),itemBizType:2,spBizType:"16",tradeType:Number(e.tradeType)||0,transportFee:Number(e.transportFee)||0,yhb:e.yhb??!1,...e.brandName&&{brandName:e.brandName},desc:e.desc,...e.size&&{size:e.size},...e.goodsNo&&{goodsNo:e.goodsNo},...e.originalPrice&&{originalPrice:Number(e.originalPrice)},...i?.length&&{itemAttrList:i},outItemNo:e.outItemNo,divisionId:Number(e.divisionId)||330100,apiAfterSalesDo:{supportFd10msPolicy:!1,supportFd24hsPolicy:!1,supportNfrPolicy:!1,supportSdrPolicy:!1,supportVnrPolicy:!1,supportGpaPolicy:!1,supportFd48hsPolicy:!1}};e.json||(console.log(nt.cyan("\u6B63\u5728\u63D0\u4EA4\u6302\u552E...")),console.log(nt.gray(` \u6807\u9898: ${s.title}`)),console.log(nt.gray(` \u552E\u4EF7: \xA5${s.reservePrice}`)),console.log(nt.gray(` \u6210\u8272: ${gn[s.stuffStatus]??s.stuffStatus}`)),console.log(nt.gray(` \u56FE\u7247: ${n.length} \u5F20`)),i?.length&&console.log(nt.gray(` \u5C5E\u6027: ${i.length} \u9879`)));let a=await de(s);y(e,a,"\u6302\u552E\u63D0\u4EA4\u6210\u529F")}))}function Do(){let e=new fn("hang-up");return e.description("\u95F2\u9C7C\u6302\u552E\u4E0A\u67B6\uFF08\u5B8C\u6574\u5546\u54C1\u4FE1\u606F\u6A21\u5F0F\uFF09"),e.addCommand(Lo()),e.addCommand(Oo()),e.addCommand(Uo()),e.addCommand(Eo()),e.addCommand(jo()),e}function $o(){let e=new hn("goods");return e.description("\u5546\u54C1\u7BA1\u7406"),e.addCommand(xo()),e.addCommand(To()),e.addCommand(bo()),e.addCommand(Ao()),e.addCommand(vo()),e.addCommand(ko()),e.addCommand(Ro()),e.addCommand(uo()),e.addCommand(Do()),e}import{Command as yn}from"commander";import yt from"chalk";import{promises as wn}from"node:fs";import xn from"node:path";import In from"node:os";import{spawn as Sn}from"node:child_process";var Bo="@round2ai/r2-cli";function Cn(){return new Promise(e=>{let t=Sn("npm",["uninstall","-g",Bo],{stdio:"inherit",shell:!0});t.on("exit",o=>e(o??1)),t.on("error",()=>e(1))})}function qo(){let e=new yn("uninstall");return e.description("\u5378\u8F7D R2-CLI \u5E76\u6E05\u9664\u6240\u6709\u914D\u7F6E").option("--json","\u8F93\u51FA JSON\uFF08\u4F9B AI Agent \u4F7F\u7528\uFF09"),e.action(m(async t=>{let o=xn.join(In.homedir(),".r2-cli"),r=!0;try{await wn.rm(o,{recursive:!0,force:!0})}catch{r=!1}let n=await Cn(),i=n===0;if(t.json){y(t,{configCleared:r,npmUninstalled:i,exitCode:n});return}console.log(r?yt.green("\u2705 \u914D\u7F6E\u6587\u4EF6\u5DF2\u6E05\u9664"):yt.yellow("\u26A0\uFE0F \u914D\u7F6E\u76EE\u5F55\u4E0D\u5B58\u5728\u6216\u65E0\u6CD5\u5220\u9664\uFF08\u53EF\u5FFD\u7565\uFF09")),i?console.log(yt.green(`\u2705 ${Bo} \u5DF2\u5378\u8F7D`)):(console.log(yt.yellow(`\u26A0\uFE0F npm \u5378\u8F7D\u5931\u8D25 (exit code: ${n})`)),console.log(yt.gray(" \u5982\u901A\u8FC7 yarn/pnpm \u5B89\u88C5\uFF0C\u8BF7\u624B\u52A8\u5378\u8F7D")))})),e}import{Command as kn}from"commander";import Go from"chalk";import{spawn as Rn,execSync as Ln}from"node:child_process";import{readFileSync as Tn}from"node:fs";import{dirname as bn,join as Pn}from"node:path";import{fileURLToPath as An}from"node:url";var vn=bn(An(import.meta.url));function Bt(){for(let e of["../package.json","../../package.json"])try{return JSON.parse(Tn(Pn(vn,e),"utf-8")).version}catch{}return"0.0.0"}var _o="@round2ai/r2-cli";function Nn(e,t){return new Promise(o=>{let r=Rn(e,t,{stdio:"inherit"});r.on("close",n=>o(n??1)),r.on("error",()=>o(1))})}function Xo(){return new kn("update").description("\u4E00\u952E\u66F4\u65B0 CLI \u548C\u6280\u80FD").option("--json","\u8F93\u51FA JSON\uFF08\u4F9B AI Agent \u4F7F\u7528\uFF09").action(m(async e=>{let t=Bt();if(e.json||(console.log(Go.cyan(`\u5F53\u524D\u7248\u672C: ${t}`)),console.log(Go.cyan("\u6B63\u5728\u66F4\u65B0 CLI..."))),await Nn("npm",["install","-g",`${_o}@latest`])!==0)throw new Error(`\u66F4\u65B0\u5931\u8D25\uFF0C\u8BF7\u624B\u52A8\u8FD0\u884C: npm install -g ${_o}@latest`);let r=t;try{r=Ln("r2-cli --version",{encoding:"utf-8"}).trim()||t}catch{}y(e,{oldVersion:t,newVersion:r},`
43
- \u2713 \u66F4\u65B0\u5B8C\u6210: ${t} \u2192 ${r}
44
- \u2713 \u6280\u80FD\u5DF2\u540C\u6B65\u66F4\u65B0`)}))}function Jo(e){let t=e.command("auth").description("\u6388\u6743\u7BA1\u7406");t.addCommand(ee()),t.addCommand(oe()),t.addCommand(re()),t.addCommand(ne()),e.addCommand($o()),e.addCommand(qo()),e.addCommand(Xo())}async function Un(){let{default:e}=await import("figlet");console.log(it.cyan.bold(e.textSync("R2-CLI",{font:"Standard",horizontalLayout:"full"}))),console.log(it.gray(` \u5411 AI \u5F00\u653E\u4E8C\u624B\u6F6E\u5962\u4EA4\u6613\u5168\u94FE\u8DEF\u80FD\u529B
45
- `))}function En(){let e=new On;e.name("r2-cli").description("R2-CLI\uFF0C\u5411 AI \u5F00\u653E\u4E8C\u624B\u6F6E\u5962\u4EA4\u6613\u5168\u94FE\u8DEF\u80FD\u529B");let t=Bt();t==="0.0.0"&&console.error(it.yellow("Warning: unable to read version from package.json")),e.version(`r2-cli version ${t}`,"-v, --version");let o=ro(t);return e.configureOutput({writeErr:r=>{console.error(it.red(r.replace("error:","").trim()))}}),e.action(async()=>{await Un(),e.help()}),Jo(e),{program:e,updateCheckPromise:o}}function Mo(){console.log(it.gray(`
46
- \u64CD\u4F5C\u5DF2\u53D6\u6D88`)),process.exit(130)}process.on("SIGINT",Mo);process.on("SIGTERM",Mo);var{program:jn,updateCheckPromise:Dn}=En();jn.parse(process.argv);Dn.catch(e=>{console.error(it.gray(`[update-check] ${e instanceof Error?e.message:String(e)}`))});
40
+ `));for(let n of r.items)console.log(` ${it.bold(n.goodsName)} ${n.size?it.gray(`| ${n.size}`):""}`),console.log(` \u54C1\u724C: ${n.brand} \u5EFA\u8BAE\u552E\u4EF7: \xA5${n.salePrice} stockGoodsId: ${it.green(n.stockGoodsId)}`),console.log(it.gray(` \u5206\u7C7B: ${n.cate1Name} > ${n.cate2Name} > ${n.cate3Name}`)),console.log()})),t}import{Command as Jn}from"commander";import{Command as gn}from"commander";import D from"chalk";import{select as Qo,input as fn,confirm as hn}from"@inquirer/prompts";B();function un(t){let o=t.charCodeAt(0);return o>=32&&o<=126}function pn(t){let o=0;for(let e of t)o+=un(e)?.5:1;return o}function Et(t,o=30){let e=pn(t);return e>o?`\u6807\u9898\u8FC7\u957F\uFF08${e}/${o}\uFF09\uFF0C\u95F2\u9C7C\u6807\u9898\u4E0A\u9650 30 \u4E2A\u6C49\u5B57\uFF08\u6216 60 \u4E2A\u82F1\u6587\u5B57\u7B26\uFF09`:null}var Ee=99999999;function $(t,o="\u552E\u4EF7"){return Number.isFinite(t)?t<=0?`${o}\u5FC5\u987B\u5927\u4E8E 0`:t>Ee?`${o}\u4E0D\u80FD\u8D85\u8FC7 ${Ee} \u5143`:null:`${o}\u65E0\u6548`}var yn=2e3,In=1e4;function wn(t){let o=t.status?.toLowerCase()??"";return o===""||o==="init"||o==="pending"||o==="processing"}async function qe(t,o,e){e||process.stdout.write(D.cyan("\u23F3 \u6B63\u5728\u67E5\u8BE2\u4E0A\u67B6\u8FDB\u5EA6..."));let r=await K(()=>So({stockGoodsId:t,shopId:o,platform:"xianyu"}),{interval:yn,timeout:In,condition:n=>!wn(n)});return e||process.stdout.write("\r"+" ".repeat(30)+"\r"),r}function qt(){let t=new gn("up");return t.description("\u4E0A\u67B6\u5546\u54C1"),t.option("--stock-goods-id <id>","\u5E93\u5B58\u5546\u54C1ID\uFF08\u4ECE goods list \u83B7\u53D6\uFF09").option("--shop-id <id>","\u5E97\u94FAID\uFF08\u4ECE goods shops \u83B7\u53D6\uFF09").option("--price <amount>","\u4E0A\u67B6\u4EF7\u683C").option("--transport-fee <amount>","\u8FD0\u8D39\uFF08\u5143\uFF0C\u9ED8\u8BA4 0 \u5305\u90AE\uFF09","0").option("--yhb","\u662F\u5426\u5F00\u542F\u9A8C\u8D27\u5B9D").option("--json","\u8F93\u51FA JSON\uFF08\u4F9B AI Agent \u4F7F\u7528\uFF09").action(c(async o=>{if(o.json&&!(o.stockGoodsId&&o.shopId&&o.price)){g(o,"Agent \u6A21\u5F0F\u9700\u8981 --stock-goods-id, --shop-id, --price");return}if(o.stockGoodsId&&o.shopId&&o.price){let d=Number(o.stockGoodsId),I=o.shopId,dt=Number(o.price),te=$(dt);if(te){g(o,te);return}let gr=await Ut({stockGoodsId:d,shopId:I,price:dt,platform:"xianyu",transportFee:Number(o.transportFee)||0,yhb:o.yhb??!1}),Vt,oe,ee;try{Vt=await qe(d,I,o.json)}catch(Pt){oe=Pt instanceof Error?Pt.message:String(Pt),ee=lt(Pt)}let mt={submit:gr};Vt?mt.listing=Vt:(mt.listing=null,mt.warning=`\u63D0\u4EA4\u6210\u529F\u4F46\u56DE\u67E5\u5931\u8D25\uFF1A${oe}`,mt.verifyStatus=ee),console.log(JSON.stringify(C({success:!0,data:mt}),null,2));return}let e=await wt();if(e.length===0){console.log(D.yellow("\u6CA1\u6709\u5DF2\u6388\u6743\u5E97\u94FA\uFF0C\u8BF7\u5148\u8FD0\u884C r2-cli auth platform --name <\u5E73\u53F0> \u6388\u6743"));return}let r=await Qo({message:"\u9009\u62E9\u5E97\u94FA",choices:e.map(d=>({name:`${d.shopName} (${d.platform})`,value:d.shopId}))}),n=await bt();if(n.length===0){console.log(D.yellow("\u6CA1\u6709\u53EF\u7528\u7684\u4ED3\u5E93"));return}let i=await Qo({message:"\u9009\u62E9\u4ED3\u5E93",choices:n.map(d=>({name:d.stockName,value:d.stockId}))}),s=await St({stockId:i,size:100});if(!s.items?.length){console.log(D.yellow("\u8BE5\u4ED3\u5E93\u6CA1\u6709\u53EF\u9009\u7684\u5546\u54C1"));return}let a=await Qo({message:"\u9009\u62E9\u5546\u54C1",choices:s.items.map(d=>({name:`${d.goodsName} ${d.size?`| ${d.size}`:""} | \xA5${d.salePrice}`,value:d.stockGoodsId}))}),m=await fn({message:"\u8F93\u5165\u4E0A\u67B6\u4EF7\u683C",default:s.items.find(d=>d.stockGoodsId===a)?.salePrice?.toString()??"",validate:d=>{let I=Number(d);return Number.isNaN(I)||I<=0?"\u4EF7\u683C\u5FC5\u987B\u4E3A\u6B63\u6570":$(I)??!0}});if(!await hn({message:`\u786E\u8BA4\u4E0A\u67B6\uFF1F\u4EF7\u683C \xA5${m}`,default:!0})){console.log(D.gray("\u5DF2\u53D6\u6D88"));return}let T=Number(a);await Ut({stockGoodsId:T,shopId:r,price:Number(m),platform:"xianyu",transportFee:Number(o.transportFee)||0,yhb:o.yhb??!1}),console.log(D.green("\u2713 \u4E0A\u67B6\u5DF2\u63D0\u4EA4\uFF0C\u6B63\u5728\u67E5\u8BE2\u8FDB\u5EA6..."));try{let d=await qe(T,r),I=d.status?.toLowerCase()!=="failed";console.log(I?D.green("\u2713 \u4E0A\u67B6\u6210\u529F"):D.red("\u2717 \u4E0A\u67B6\u5931\u8D25")),console.log(JSON.stringify(d,null,2))}catch(d){let I=d instanceof Error?d.message:String(d);console.log(D.yellow("\u26A0 \u5DF2\u63D0\u4EA4\uFF0C\u4F46\u56DE\u67E5\u5931\u8D25\uFF1A"+I)),console.log(D.gray("\u2192 \u8BF7\u7528 r2-cli goods listing \u786E\u8BA4\u4E0A\u67B6\u7ED3\u679C"))}})),t}import{Command as Tn}from"commander";import An from"chalk";function Qt(){let t=new Tn("listing");return t.description("\u67E5\u8BE2\u4E0A\u67B6\u5546\u54C1\u5217\u8868"),t.option("--id <id>","\u4E0A\u67B6\u8BB0\u5F55 ID").option("--stock-goods-id <id>","\u5E93\u5B58\u5546\u54C1 ID").option("--shop-id <id>","\u5E97\u94FA ID").option("--stock-id <id>","\u4ED3\u5E93 ID").option("-s, --status <status>","\u72B6\u6001\u8FC7\u6EE4\uFF08init=\u5904\u7406\u4E2D, up=\u5DF2\u4E0A\u67B6, down=\u5DF2\u4E0B\u67B6, fail=\u5931\u8D25, sold=\u5DF2\u552E\u51FA\uFF09").option("--page <n>","\u9875\u7801","1").option("--size <n>","\u6BCF\u9875\u6570\u91CF\uFF08\u6700\u5927 50\uFF09","20").option("--json","\u8F93\u51FA JSON\uFF08\u4F9B AI Agent \u4F7F\u7528\uFF09"),t.action(c(async o=>{let r=await It({id:o.id,stockGoodsId:o.stockGoodsId?Number(o.stockGoodsId):void 0,shopId:o.shopId,stockId:o.stockId,status:o.status,page:Number(o.page)||1,size:Math.min(Number(o.size)||20,50)})??{items:[],total:0};if(o.json){let s=r.items?.length?r:{...r,hint:"\u6682\u65E0\u4E0A\u67B6\u8BB0\u5F55"};w(s);return}if(!r.items?.length){console.log(An.yellow("\u6682\u65E0\u4E0A\u67B6\u8BB0\u5F55"));return}let{renderComponent:n}=await Promise.resolve().then(()=>(ht(),ft)),{ListingTable:i}=await Promise.resolve().then(()=>(Je(),Be));n(i,{items:r.items,total:Number(r.total)})})),t}import{Command as kn}from"commander";import jn from"chalk";function Ft(){let t=new kn("down");return t.description("\u4E0B\u67B6\u95F2\u9C7C\u5546\u54C1\uFF08\u652F\u6301 --id \u6216 --stock-goods-id + --shop-id \u4E24\u79CD\u5B9A\u4F4D\u65B9\u5F0F\uFF09"),t.option("--id <id>","\u4E0A\u67B6\u8BB0\u5F55 ID").option("--stock-goods-id <id>","\u5E93\u5B58\u5546\u54C1 ID").option("--shop-id <id>","\u5E97\u94FA ID").option("--json","\u8F93\u51FA JSON\uFF08\u4F9B AI Agent \u4F7F\u7528\uFF09"),t.action(c(async o=>{if(!o.id&&!(o.stockGoodsId&&o.shopId)){g(o,"\u8BF7\u6307\u5B9A\u4E0B\u67B6\u6761\u4EF6\uFF1A--id <id> \u6216 --stock-goods-id <id> --shop-id <id>");return}let e={};o.id&&(e.id=o.id),o.stockGoodsId&&(e.stockGoodsId=Number(o.stockGoodsId)),o.shopId&&(e.shopId=o.shopId),o.json||console.log(jn.cyan("\u6B63\u5728\u4E0B\u67B6\u5546\u54C1..."));let r=await yo(e);f(o,r,"\u4E0B\u67B6\u6210\u529F")})),t}import{Command as Nn}from"commander";import vn from"chalk";function Mt(){let t=new Nn("price");return t.description("\u4FEE\u6539\u95F2\u9C7C\u4E0A\u67B6\u5546\u54C1\u4EF7\u683C\uFF08\u5355\u4F4D\uFF1A\u5143\uFF09"),t.option("--id <id>","\u4E0A\u67B6\u8BB0\u5F55 ID").option("--stock-goods-id <id>","\u5E93\u5B58\u5546\u54C1 ID").option("--shop-id <id>","\u5E97\u94FA ID").requiredOption("--price <amount>","\u65B0\u4EF7\u683C\uFF08\u5355\u4F4D\uFF1A\u5143\uFF09").option("--transport-fee <amount>","\u8FD0\u8D39\uFF08\u5143\uFF0C\u9ED8\u8BA4 0 \u5305\u90AE\uFF09","0").option("--json","\u8F93\u51FA JSON\uFF08\u4F9B AI Agent \u4F7F\u7528\uFF09"),t.action(c(async o=>{if(!o.id&&!(o.stockGoodsId&&o.shopId)){g(o,"\u8BF7\u6307\u5B9A\u5546\u54C1\uFF1A--id <id> \u6216 --stock-goods-id <id> --shop-id <id>");return}let e=Number(o.price),r=$(e);if(r){g(o,r);return}let n={price:e,transportFee:Number(o.transportFee)||0};o.id&&(n.id=o.id),o.stockGoodsId&&(n.stockGoodsId=Number(o.stockGoodsId)),o.shopId&&(n.shopId=o.shopId),o.json||console.log(vn.cyan(`\u6B63\u5728\u4FEE\u6539\u4EF7\u683C\u4E3A \xA5${o.price}...`));let i=await Io(n);f(o,i,"\u4EF7\u683C\u4FEE\u6539\u6210\u529F")})),t}import{Command as Rn}from"commander";import Vo from"chalk";function zt(){let t=new Rn("edit");return t.description("\u4FEE\u6539\u5DF2\u4E0A\u67B6\u5546\u54C1\u4FE1\u606F\uFF08\u6807\u9898\u3001\u63CF\u8FF0\u3001\u54C1\u724C\u3001\u7C7B\u76EE\u3001\u56FE\u7247\u3001\u5C5E\u6027\u7B49\uFF09"),t.option("--id <id>","\u5546\u54C1\u4E0A\u67B6 ID\uFF08goodsListingId\uFF0C\u63A8\u8350\uFF09").option("--stock-goods-id <id>","\u5E93\u5B58\u5546\u54C1 ID\uFF08\u4E0E --account \u914D\u5408\uFF09").option("--account <shopId>","\u5E97\u94FA ID\uFF08\u4E0E --stock-goods-id \u914D\u5408\uFF09").option("--outer-id <id>","\u5546\u5BB6\u7F16\u7801/\u8D27\u53F7\uFF08\u901A\u8FC7 outItemNo \u5339\u914D\u5546\u54C1\uFF09").option("--title <title>","\u5546\u54C1\u6807\u9898").option("--desc <desc>","\u5546\u54C1\u63CF\u8FF0").requiredOption("--category-id <id>","\u5546\u54C1\u7C7B\u76EE ID\uFF08\u5927\u5206\u7C7B\uFF0C\u540E\u7AEF\u5FC5\u586B\uFF09").requiredOption("--channel-cat-id <id>","\u6E20\u9053\u7C7B\u76EE ID\uFF08\u5C0F\u5206\u7C7B\uFF0C\u540E\u7AEF\u5FC5\u586B\uFF09").option("--image-ids <ids>","\u56FE\u7247 ID \u5217\u8868\uFF08\u9017\u53F7\u5206\u9694\uFF09").option("--item-attrs <json>","\u5546\u54C1\u5C5E\u6027\u5217\u8868\uFF08JSON \u5B57\u7B26\u4E32\uFF09").option("--brand-name <name>","\u54C1\u724C\u540D\u79F0").option("--stuff-status <status>","\u6210\u8272\u7B49\u7EA7\uFF1A100=\u5168\u65B0 -1=\u51C6\u65B0 99=99\u65B0 95=95\u65B0 90=9\u65B0").option("--goods-no <no>","\u8D27\u53F7").option("--original-price <price>","\u539F\u4EF7\uFF08\u5355\u4F4D\uFF1A\u5143\uFF09").option("--size <size>","\u5C3A\u7801").option("--yhb","\u662F\u5426\u5F00\u542F\u9A8C\u8D27\u5B9D").option("--transport-fee <amount>","\u8FD0\u8D39\uFF08\u5143\uFF0C\u9ED8\u8BA4 0 \u5305\u90AE\uFF09","0").option("--json","\u8F93\u51FA JSON\uFF08\u4F9B AI Agent \u4F7F\u7528\uFF09"),t.action(c(async o=>{if(!o.id&&!(o.stockGoodsId&&o.account)&&!o.outerId){g(o,"\u8BF7\u6307\u5B9A\u5546\u54C1\uFF1A--id <goodsListingId> \u6216 --stock-goods-id <id> --account <shopId> \u6216 --outer-id <id>");return}if(o.outerId&&!o.id){o.json||console.log(Vo.cyan(`\u{1F50D} \u6B63\u5728\u901A\u8FC7\u5546\u5BB6\u7F16\u7801 ${o.outerId} \u67E5\u627E\u5546\u54C1...`));let s=(await It({...o.account?{shopId:o.account}:{}})).items?.find(a=>a.outItemNo===o.outerId);if(!s){g(o,`\u672A\u627E\u5230\u5546\u5BB6\u7F16\u7801\u4E3A ${o.outerId} \u7684\u5546\u54C1`);return}o.id=s.id,o.json||console.log(Vo.gray(` \u5339\u914D\u5230: ${s.goodsName} (${s.id})`))}let e={categoryId:Number(o.categoryId),channelCatId:o.channelCatId};if(o.id&&(e.goodsListingId=Number(o.id)),o.stockGoodsId&&(e.stockGoodsId=Number(o.stockGoodsId)),o.account&&(e.account=o.account),o.title){let i=Et(o.title);if(i){g(o,i);return}e.title=o.title}if(o.desc&&(e.desc=o.desc),o.imageIds&&(e.imageIdList=o.imageIds.split(",").map(i=>i.trim())),o.brandName&&(e.brandName=o.brandName),o.stuffStatus&&(e.stuffStatus=Number(o.stuffStatus)),o.goodsNo&&(e.goodsNo=o.goodsNo),o.originalPrice){let i=Number(o.originalPrice),s=$(i);if(s){g(o,s);return}e.originalPrice=i}if(o.size&&(e.size=o.size),o.yhb!==void 0&&(e.yhb=o.yhb),o.transportFee&&(e.transportFee=Number(o.transportFee)||0),o.itemAttrs)try{e.itemAttrList=JSON.parse(o.itemAttrs)}catch{g(o,"--item-attrs JSON \u89E3\u6790\u5931\u8D25");return}if(!Object.keys(e).some(i=>!["goodsListingId","stockGoodsId","account","categoryId","channelCatId"].includes(i))){g(o,"\u672A\u6307\u5B9A\u9700\u8981\u4FEE\u6539\u7684\u5B57\u6BB5");return}o.json||console.log(Vo.cyan("\u6B63\u5728\u4FEE\u6539\u5546\u54C1\u4FE1\u606F..."));let n=await wo(e);f(o,n,"\u2705 \u5546\u54C1\u4FE1\u606F\u4FEE\u6539\u6210\u529F")})),t}import{Command as Bn}from"commander";import{Command as Ln}from"commander";import Ko from"chalk";function Ge(){return new Ln("categories").description("\u83B7\u53D6\u7C7B\u76EE\u5217\u8868\uFF08\u5927\u5206\u7C7B \u2192 \u5C0F\u5206\u7C7B\uFF09").option("--sp-biz-type <n>","\u4E1A\u52A1\u5206\u7C7B\uFF0C16=\u5962\u54C1","16").option("--json","\u8F93\u51FA JSON\uFF08\u4F9B AI Agent \u4F7F\u7528\uFF09").action(c(async t=>{let o=await xo(Number(t.spBizType));if(t.json){w(o);return}let e=new Map;for(let r of o){let n=String(r.catId);e.has(n)||e.set(n,{catName:r.catName,children:[]}),e.get(n).children.push({channel:r.channel,channelCatId:r.channelCatId})}for(let[r,n]of e){console.log(Ko.bold(`${n.catName} (catId: ${Ko.green(r)})`));for(let i of n.children)console.log(` ${i.channel} (channelCatId: ${Ko.green(i.channelCatId)})`)}}))}import{Command as On}from"commander";import _e from"chalk";function Qe(){return new On("props").description("\u83B7\u53D6\u6307\u5B9A\u7C7B\u76EE\u4E0B\u7684\u5C5E\u6027\u5217\u8868\uFF08\u542B\u53EF\u9009\u503C\uFF09").requiredOption("--channel-cat-id <id>","\u5C0F\u5206\u7C7B ID\uFF08\u4ECE categories \u83B7\u53D6\uFF09").option("--json","\u8F93\u51FA JSON\uFF08\u4F9B AI Agent \u4F7F\u7528\uFF09").action(c(async t=>{let o=await Po(t.channelCatId);if(t.json){w(o);return}for(let e of o)if(console.log(_e.bold(`
41
+ ${e.propName} (propId: ${e.propId})`)),e.propsValues?.length)for(let r of e.propsValues)console.log(` ${r.valueName} (valueId: ${r.valueId})`);else console.log(_e.gray(" \uFF08\u4F7F\u7528 brands \u5B50\u547D\u4EE4\u641C\u7D22\uFF09"))}))}import{Command as Un}from"commander";import $n from"chalk";function Fe(){return new Un("brands").description("\u641C\u7D22\u54C1\u724C\uFF08\u6309\u5173\u952E\u5B57\u8FC7\u6EE4\uFF09").requiredOption("--channel-cat-id <id>","\u5C0F\u5206\u7C7B ID").requiredOption("--prop-id <id>","\u5C5E\u6027 ID\uFF08\u54C1\u724C\u5C5E\u6027\u7684 propId\uFF09").requiredOption("--key <keyword>","\u641C\u7D22\u5173\u952E\u5B57").option("--json","\u8F93\u51FA JSON\uFF08\u4F9B AI Agent \u4F7F\u7528\uFF09").action(c(async t=>{let o=await To(t.channelCatId,t.propId,t.key);if(t.json){w(o);return}if(!o.length){console.log($n.yellow("\u672A\u627E\u5230\u5339\u914D\u7684\u54C1\u724C"));return}for(let e of o)console.log(` ${e.valueName} (valueId: ${e.valueId})`)}))}import{Command as Dn}from"commander";import Yo from"chalk";function Me(){return new Dn("upload-images").description("\u6279\u91CF\u4E0A\u4F20\u56FE\u7247\uFF08\u6302\u552E\u524D\u5FC5\u987B\u5148\u4E0A\u4F20\u56FE\u7247\uFF09").requiredOption("--shop-id <id>","\u5E97\u94FA ID").option("--files <paths>","\u672C\u5730\u56FE\u7247\u6587\u4EF6\u8DEF\u5F84\uFF0C\u9017\u53F7\u5206\u9694").option("--urls <urls>","CDN \u56FE\u7247 URL\uFF0C\u9017\u53F7\u5206\u9694").option("--json","\u8F93\u51FA JSON\uFF08\u4F9B AI Agent \u4F7F\u7528\uFF09").action(c(async t=>{let o=[];if(t.files)for(let n of t.files.split(",").map(i=>i.trim()).filter(Boolean))o.push({type:"file",path:n});if(t.urls)for(let n of t.urls.split(",").map(i=>i.trim()).filter(Boolean))o.push({type:"url",url:n});if(o.length===0){g(t,"\u8BF7\u63D0\u4F9B\u81F3\u5C11\u4E00\u5F20\u56FE\u7247\uFF1A--files <\u672C\u5730\u8DEF\u5F84> \u6216 --urls <CDN URL>");return}t.json||console.log(Yo.cyan(`\u6B63\u5728\u4E0A\u4F20 ${o.length} \u5F20\u56FE\u7247...`));let{images:e,failed:r}=await Co(t.shopId,o);if(t.json){let n={success:!0,images:e};r.length&&(n.warning=`${r.length} \u5F20\u56FE\u7247\u4E0A\u4F20\u5931\u8D25`,n.failed=r),console.log(JSON.stringify(C(n),null,2))}else{if(e.length){console.log(Yo.green(`\u4E0A\u4F20\u6210\u529F\uFF0C\u5171 ${e.length} \u5F20`));for(let n of e)console.log(` \u56FE\u7247ID: ${n.value}`)}if(r.length){console.log(Yo.yellow(`
42
+ ${r.length} \u5F20\u4E0A\u4F20\u5931\u8D25:`));for(let n of r)console.log(` ${n.file}: ${n.error}`)}}}))}import{Command as En}from"commander";import st from"chalk";var qn={100:"\u5168\u65B0",[-1]:"\u51C6\u65B0",99:"99\u65B0",95:"95\u65B0",90:"9\u65B0"};function ze(){return new En("submit").description("\u63D0\u4EA4\u6302\u552E\u4E0A\u67B6").requiredOption("--shop-id <id>","\u5E97\u94FA ID\uFF08\u5373 account\uFF09").requiredOption("--title <title>","\u5546\u54C1\u6807\u9898").requiredOption("--price <amount>","\u552E\u4EF7").requiredOption("--category-id <id>","\u5927\u5206\u7C7B ID\uFF08\u4ECE categories \u83B7\u53D6\uFF09").requiredOption("--channel-cat-id <id>","\u5C0F\u5206\u7C7B ID\uFF08\u4ECE categories \u83B7\u53D6\uFF09").requiredOption("--image-ids <ids>","\u56FE\u7247 ID \u5217\u8868\uFF0C\u9017\u53F7\u5206\u9694\uFF08\u5148\u901A\u8FC7 upload-images \u83B7\u53D6\uFF09").requiredOption("--stuff-status <n>","\u6210\u8272\uFF1A100 \u5168\u65B0 / -1 \u51C6\u65B0 / 99 99\u65B0 / 95 95\u65B0 / 90 9\u65B0").option("--item-attrs <json>",'\u5546\u54C1\u5C5E\u6027\u5217\u8868 JSON\uFF0C\u683C\u5F0F: [{"valueName":"x","valueId":"y","propId":"z"}]').option("--brand-name <name>","\u54C1\u724C\u540D\u79F0").requiredOption("--desc <desc>","\u5546\u54C1\u63CF\u8FF0").option("--size <size>","\u5C3A\u7801").option("--goods-no <no>","\u8D27\u53F7").option("--original-price <amount>","\u539F\u4EF7").option("--trade-type <n>","\u4EA4\u6613\u65B9\u5F0F\uFF1A0 \u4EC5\u5728\u7EBF / 1 \u4EC5\u7EBF\u4E0B / 2 \u7EBF\u4E0A\u6216\u7EBF\u4E0B","0").option("--transport-fee <amount>","\u8FD0\u8D39\uFF08\u9ED8\u8BA4 0 \u5305\u90AE\uFF09","0").option("--yhb","\u662F\u5426\u5F00\u542F\u9A8C\u8D27\u5B9D").requiredOption("--out-item-no <no>","\u5546\u5BB6\u7F16\u7801\uFF08\u540C\u5E97\u94FA\u552F\u4E00\uFF0C\u7528\u6237\u81EA\u5B9A\u4E49\uFF09").option("--division-id <id>","\u884C\u653F\u533A\u5212 ID\uFF08\u5E02\u7EA7 ID\uFF0C\u9ED8\u8BA4\u676D\u5DDE 330100\uFF09","330100").option("--json","\u8F93\u51FA JSON\uFF08\u4F9B AI Agent \u4F7F\u7528\uFF09").action(c(async t=>{let o=Et(t.title);if(o){g(t,o);return}let e=Number(t.price),r=$(e);if(r){g(t,r);return}if(t.originalPrice){let m=Number(t.originalPrice),p=$(m);if(p){g(t,p);return}}let n=t.imageIds.split(",").map(m=>m.trim()),i;if(t.itemAttrs)try{i=JSON.parse(t.itemAttrs)}catch{g(t,"--item-attrs JSON \u89E3\u6790\u5931\u8D25");return}let s={account:t.shopId,title:t.title,reservePrice:Number(t.price),categoryId:Number(t.categoryId),channelCatId:t.channelCatId,imageIdList:n,stuffStatus:Number(t.stuffStatus),itemBizType:2,spBizType:"16",tradeType:Number(t.tradeType)||0,transportFee:Number(t.transportFee)||0,yhb:t.yhb??!1,...t.brandName?{brandName:t.brandName}:{},desc:t.desc,...t.size?{size:t.size}:{},...t.goodsNo?{goodsNo:t.goodsNo}:{},...t.originalPrice?{originalPrice:Number(t.originalPrice)}:{},...i?.length?{itemAttrList:i}:{},outItemNo:t.outItemNo,divisionId:Number(t.divisionId)||330100,apiAfterSalesDo:{supportFd10msPolicy:!1,supportFd24hsPolicy:!1,supportNfrPolicy:!1,supportSdrPolicy:!1,supportVnrPolicy:!1,supportGpaPolicy:!1,supportFd48hsPolicy:!1}};t.json||(console.log(st.cyan("\u6B63\u5728\u63D0\u4EA4\u6302\u552E...")),console.log(st.gray(` \u6807\u9898: ${s.title}`)),console.log(st.gray(` \u552E\u4EF7: \xA5${s.reservePrice}`)),console.log(st.gray(` \u6210\u8272: ${qn[s.stuffStatus]??s.stuffStatus}`)),console.log(st.gray(` \u56FE\u7247: ${n.length} \u5F20`)),i?.length&&console.log(st.gray(` \u5C5E\u6027: ${i.length} \u9879`)));let a=await bo(s);f(t,a,"\u6302\u552E\u63D0\u4EA4\u6210\u529F")}))}function Xt(){let t=new Bn("hang-up");return t.description("\u6302\u552E\u4E0A\u67B6\uFF08\u5B8C\u6574\u5546\u54C1\u4FE1\u606F\u6A21\u5F0F\uFF09"),t.addCommand(Ge()),t.addCommand(Qe()),t.addCommand(Fe()),t.addCommand(Me()),t.addCommand(ze()),t}function Xe(){let t=new Jn("xianyu");return t.description("\u95F2\u9C7C\uFF08\u4E0A\u67B6 / \u4E0B\u67B6 / \u6539\u4EF7 / \u7F16\u8F91 / \u6302\u552E\uFF09"),t.addCommand(qt()),t.addCommand(Qt()),t.addCommand(Ft()),t.addCommand(Mt()),t.addCommand(zt()),t.addCommand(Xt()),t}import{Command as Yn}from"commander";import{Command as Gn}from"commander";import Wt from"chalk";function We(){let t=new Gn("listing");return t.description("\u67E5\u8BE2\u6DD8\u5B9D\u5DF2\u62A5\u540D\u5546\u54C1\u5217\u8868"),t.requiredOption("--shop-id <id>","\u5E97\u94FA ID").option("--goods-no <no>","\u5546\u54C1\u7F16\u7801\u8FC7\u6EE4").option("--item-id <id>","\u6DD8\u5B9D\u5546\u54C1 ID \u8FC7\u6EE4").option("--goods-name <name>","\u5546\u54C1\u540D\u79F0\u8FC7\u6EE4").option("--status <n>","\u5546\u54C1\u72B6\u6001\u8FC7\u6EE4").option("--code <code>","\u5546\u5BB6\u7F16\u7801\u8FC7\u6EE4").option("--page <n>","\u9875\u7801","1").option("--size <n>","\u6BCF\u9875\u6570\u91CF","20").option("--json","\u8F93\u51FA JSON\uFF08\u4F9B AI Agent \u4F7F\u7528\uFF09"),t.action(c(async o=>{let e=await No({shopId:o.shopId,...o.goodsNo?{goodsNo:o.goodsNo}:{},...o.itemId?{itemId:Number(o.itemId)}:{},...o.goodsName?{goodsName:o.goodsName}:{},...o.status?{status:Number(o.status)}:{},...o.code?{code:o.code}:{},page:Number(o.page)||1,size:Number(o.size)||20});if(o.json){let n=e??{items:[],total:"0"},i=n.items?.length?n:{...n,hint:"\u6682\u65E0\u4E0A\u67B6\u8BB0\u5F55"};w(i);return}let r=e?.items??[];if(!r.length){console.log(Wt.yellow("\u6682\u65E0\u4E0A\u67B6\u8BB0\u5F55"));return}for(let n of r)console.log(` ${Wt.bold(n.itemNumber??n.itemId)} ${Wt.gray(`(jbpSpuId: ${n.jbpSpuId})`)}
43
+ \u72B6\u6001: ${n.itemStatus} | SKU: ${n.applySkuCount}/${n.totalSkuCount} | \u5DF2\u552E: ${n.sales}`);console.log(Wt.gray(`
44
+ \u5171 ${e?.total??r.length} \u6761`))})),t}import{Command as _n}from"commander";import Qn from"chalk";function He(){let t=new _n("down");return t.description("\u4E0B\u67B6\u963F\u91CC\u8D44\u4EA7\u5546\u54C1"),t.requiredOption("--jbp-spu-id <id>","SPU ID").option("--jbp-sku-id <id>","SKU ID\uFF08\u4E0D\u4F20\u5219\u4E0B\u67B6\u6574\u4E2A SPU\uFF09").requiredOption("--shop-id <id>","\u5E97\u94FA ID").option("--sub-item-id <id>","\u5B50\u5546\u54C1 ID\uFF08\u5373 itemId\uFF09").option("--json","\u8F93\u51FA JSON\uFF08\u4F9B AI Agent \u4F7F\u7528\uFF09"),t.action(c(async o=>{let e=Number(o.jbpSpuId);if(o.jbpSkuId&&!o.subItemId){g(o,"\u4E0B\u67B6\u5355\u4E2A SKU \u9700\u8981\u540C\u65F6\u4F20 --sub-item-id\uFF08\u4ECE spu-detail \u7684 haveApplySkuList \u83B7\u53D6\uFF09");return}o.json||console.log(Qn.cyan("\u6B63\u5728\u4E0B\u67B6\u963F\u91CC\u8D44\u4EA7\u5546\u54C1..."));let r={shopId:o.shopId,jbpSpuId:e,...o.subItemId?{subItemId:Number(o.subItemId)}:{}},n;o.jbpSkuId?n=await Oo({...r,jbpSkuId:Number(o.jbpSkuId)}):n=await Lo(r),f(o,n,"\u4E0B\u67B6\u6210\u529F")})),t}import{Command as Fn}from"commander";import Mn from"chalk";function Ve(){let t=new Fn("price");return t.description("\u4FEE\u6539\u963F\u91CC\u8D44\u4EA7 SKU \u4EF7\u683C"),t.requiredOption("--jbp-spu-id <id>","SPU ID").requiredOption("--jbp-sku-id <id>","SKU ID").requiredOption("--shop-id <id>","\u5E97\u94FA ID").requiredOption("--price <amount>","\u65B0\u4EF7\u683C\uFF08\u5143\uFF09").option("--sub-item-id <id>","\u5B50\u5546\u54C1 ID\uFF08\u5373 itemId\uFF09").option("--json","\u8F93\u51FA JSON\uFF08\u4F9B AI Agent \u4F7F\u7528\uFF09"),t.action(c(async o=>{o.json||console.log(Mn.cyan(`\u6B63\u5728\u4FEE\u6539\u4EF7\u683C\u4E3A \xA5${o.price}...`));let e=await Ro({shopId:o.shopId,jbpSpuId:Number(o.jbpSpuId),jbpSkuId:Number(o.jbpSkuId),price:Number(o.price),...o.subItemId?{subItemId:Number(o.subItemId)}:{}});f(o,e,"\u4EF7\u683C\u4FEE\u6539\u6210\u529F")})),t}import{Command as zn}from"commander";import Xn from"chalk";function Ke(){let t=new zn("stock");return t.description("\u4FEE\u6539\u963F\u91CC\u8D44\u4EA7 SKU \u5E93\u5B58"),t.requiredOption("--jbp-spu-id <id>","SPU ID").requiredOption("--jbp-sku-id <id>","SKU ID").requiredOption("--shop-id <id>","\u5E97\u94FA ID").requiredOption("--quantity <n>","\u65B0\u5E93\u5B58\u6570\u91CF").option("--sub-item-id <id>","\u5B50\u5546\u54C1 ID\uFF08\u5373 itemId\uFF09").option("--json","\u8F93\u51FA JSON\uFF08\u4F9B AI Agent \u4F7F\u7528\uFF09"),t.action(c(async o=>{o.json||console.log(Xn.cyan(`\u6B63\u5728\u4FEE\u6539\u5E93\u5B58\u4E3A ${o.quantity}...`));let e=await vo({shopId:o.shopId,jbpSpuId:Number(o.jbpSpuId),jbpSkuId:Number(o.jbpSkuId),quantity:Number(o.quantity),...o.subItemId?{subItemId:Number(o.subItemId)}:{}});f(o,e,"\u5E93\u5B58\u4FEE\u6539\u6210\u529F")})),t}import{Command as Kn}from"commander";import{Command as Wn}from"commander";import Ct from"chalk";function Ye(){return new Wn("spu-query").description("\u67E5\u8BE2\u963F\u91CC\u8D44\u4EA7\u53EF\u7533\u8BF7\u7684 SPU \u5546\u54C1\u5217\u8868").requiredOption("--shop-id <id>","\u6DD8\u5B9D\u5E97\u94FA ID").requiredOption("--goods-no <no>","\u5546\u54C1\u7F16\u7801\uFF08\u4E0D\u4F20\u65E0\u6CD5\u67E5\u8BE2\u5230\u5546\u54C1\uFF09").option("--spu-id <id>","\u963F\u91CC\u8D44\u4EA7 SPU ID\uFF08\u9009\u586B\uFF09").option("--page <n>","\u9875\u7801\uFF08\u4ECE 1 \u5F00\u59CB\uFF09","1").option("--size <n>","\u6BCF\u9875\u6761\u6570","20").option("--json","\u8F93\u51FA JSON\uFF08\u4F9B AI Agent \u4F7F\u7528\uFF09").action(c(async t=>{t.json||console.log(Ct.cyan("\u6B63\u5728\u67E5\u8BE2\u963F\u91CC\u8D44\u4EA7 SPU \u5217\u8868..."));let o=await Ao({shopId:t.shopId,goodsNo:t.goodsNo,...t.spuId?{spuId:Number(t.spuId)}:{},page:Number(t.page)||1,size:Number(t.size)||20});if(t.json){w(o);return}let e=o?.items??[];if(!e.length){console.log(Ct.yellow("\u6682\u65E0\u53EF\u7533\u8BF7\u7684 SPU"));return}for(let r of e){let n=r.minPrice?`\xA5${(r.minPrice/100).toFixed(2)}`:"-";console.log(` ${Ct.bold(r.spuTitle)} ${Ct.gray(`(${r.jbpSpuId})`)}
45
+ \u54C1\u724C: ${r.brandName} | \u7C7B\u76EE: ${r.categoryName} | \u6700\u4F4E\u4EF7: ${n}
46
+ \u7F16\u7801: ${r.itemNumber}`)}console.log(Ct.gray(`
47
+ \u5171 ${o?.total??e.length} \u6761`))}))}import{Command as Hn}from"commander";import H from"chalk";function Ze(){return new Hn("spu-detail").description("\u67E5\u8BE2\u963F\u91CC\u8D44\u4EA7 SPU \u8BE6\u60C5\uFF08\u542B\u53EF\u7533\u8BF7 SKU \u5217\u8868\uFF09").requiredOption("--shop-id <id>","\u6DD8\u5B9D\u5E97\u94FA ID").requiredOption("--jbp-spu-id <id>","\u963F\u91CC\u8D44\u4EA7 SPU ID").option("--json","\u8F93\u51FA JSON\uFF08\u4F9B AI Agent \u4F7F\u7528\uFF09").action(c(async t=>{let o=Number(t.jbpSpuId);t.json||console.log(H.cyan("\u6B63\u5728\u67E5\u8BE2 SPU \u8BE6\u60C5..."));let e=await ko(t.shopId,o);if(t.json){w(e);return}if(console.log(H.bold(`SPU: ${e.jbpSpuId} (itemId: ${e.itemId})`)),console.log(H.gray(` spuVersion: ${e.spuVersion} | needIdentify: ${e.needIdentify} | identifyOrgId: ${e.identifyOrgId}`)),e.canApplySkuList?.length){console.log(H.green(`
48
+ \u53EF\u7533\u8BF7 SKU (${e.canApplySkuList.length}):`));for(let r of e.canApplySkuList){let n=r.minPrice?(r.minPrice/100).toFixed(2):"-",i=r.maxPrice?(r.maxPrice/100).toFixed(2):"-",s=r.pvs?.map(m=>`${m.name}:${m.value}`).join(", ")??"",a=r.canApply?H.green("\u53EF\u7533\u8BF7"):H.red("\u4E0D\u53EF\u7533\u8BF7");console.log(` SKU ${r.jbpSkuId} (${a}) | \u4EF7\u683C\u8303\u56F4: \xA5${n} ~ \xA5${i} | ${s}`)}}if(e.haveApplySkuList?.length){console.log(H.yellow(`
49
+ \u5DF2\u7533\u8BF7 SKU (${e.haveApplySkuList.length}):`));for(let r of e.haveApplySkuList){let n=r.price?(r.price/100).toFixed(2):"-";console.log(` SKU ${r.jbpSkuId} | \u4EF7\u683C: \xA5${n} | \u5E93\u5B58: ${r.quantity} | \u5DF2\u552E: ${r.sales} | \u7F16\u7801: ${r.commodityCode}`)}}}))}import{Command as Vn}from"commander";import tr from"chalk";function or(){return new Vn("apply").description("\u7533\u8BF7\u4E0A\u67B6\u963F\u91CC\u8D44\u4EA7 SKU").requiredOption("--shop-id <id>","\u6DD8\u5B9D\u5E97\u94FA ID").requiredOption("--jbp-spu-id <id>","\u963F\u91CC\u8D44\u4EA7 SPU ID").requiredOption("--apply-skus <json>","SKU \u5217\u8868 JSON: [{jbpSkuId, price(\u5143), quantity, ...}]").option("--sub-item-id <id>","\u5B50\u5546\u54C1 ID").option("--city-code <code>","\u57CE\u5E02\u7F16\u7801").option("--city-name <name>","\u57CE\u5E02\u540D\u79F0").option("--delivery-id <id>","\u53D1\u8D27\u5730 ID").option("--identify-org-id <id>","\u9274\u5B9A\u673A\u6784 ID").option("--pro-code <code>","\u7701\u4EFD\u7F16\u7801").option("--pro-name <name>","\u7701\u4EFD\u540D\u79F0").option("--spu-version <n>","SPU \u7248\u672C\u53F7").option("--json","\u8F93\u51FA JSON\uFF08\u4F9B AI Agent \u4F7F\u7528\uFF09").action(c(async t=>{let o=Number(t.jbpSpuId),e;try{let i=JSON.parse(t.applySkus);if(!Array.isArray(i)||i.length===0){g(t,"--apply-skus \u5FC5\u987B\u4E3A\u975E\u7A7A\u6570\u7EC4");return}e=i.map(s=>({jbpSkuId:Number(s.jbpSkuId),price:Number(s.price),quantity:Number(s.quantity),...s.commodityCode?{commodityCode:String(s.commodityCode)}:{},...s.skuVersion?{skuVersion:Number(s.skuVersion)}:{}}))}catch{g(t,"--apply-skus JSON \u89E3\u6790\u5931\u8D25");return}let r={shopId:t.shopId,jbpSpuId:o,applySkuList:e,...t.subItemId?{subItemId:Number(t.subItemId)}:{},...t.cityCode?{cityCode:Number(t.cityCode)}:{},...t.cityName?{cityName:t.cityName}:{},...t.deliveryId?{deliveryId:t.deliveryId}:{},...t.identifyOrgId?{identifyOrgId:t.identifyOrgId}:{},...t.proCode?{proCode:Number(t.proCode)}:{},...t.proName?{proName:t.proName}:{},...t.spuVersion?{spuVersion:Number(t.spuVersion)}:{}};if(!t.json){console.log(tr.cyan("\u6B63\u5728\u7533\u8BF7\u4E0A\u67B6..."));for(let i of e)console.log(tr.gray(` SKU ${i.jbpSkuId}: \xA5${i.price} x ${i.quantity}`))}let n=await jo(r);f(t,n,"\u7533\u8BF7\u4E0A\u67B6\u6210\u529F")}))}function er(){let t=new Kn("alzc");return t.description("\u963F\u91CC\u8D44\u4EA7\u5546\u54C1\u7BA1\u7406"),t.addCommand(Ye()),t.addCommand(Ze()),t.addCommand(or()),t}function rr(){let t=new Yn("taobao");return t.description("\u6DD8\u5B9D / \u963F\u91CC\u8D44\u4EA7\uFF08\u4E0A\u67B6 / \u4E0B\u67B6 / \u6539\u4EF7 / SPU \u67E5\u8BE2\uFF09"),t.addCommand(We()),t.addCommand(He()),t.addCommand(Ve()),t.addCommand(Ke()),t.addCommand(er()),t}function at(t,o,e){let r=e();return r.name(t),r.description(`[\u5DF2\u5E9F\u5F03] \u8BF7\u4F7F\u7528 ${o}\u3002${r.description()}`),r.hook("preAction",(n,i)=>{i.opts?.()?.json||console.log(ti.yellow(`\u26A0 "goods ${t}" \u5DF2\u8FC1\u79FB\u81F3 "${o}"\uFF0C\u8BF7\u5C3D\u5FEB\u66F4\u65B0
50
+ `))}),r}function nr(){let t=new Zn("goods");return t.description("\u5546\u54C1\u7BA1\u7406\uFF08\u5E97\u94FA / \u4ED3\u5E93 / \u9009\u54C1 / \u4E0A\u67B6 / \u4E0B\u67B6 / \u6539\u4EF7 / \u6302\u552E\uFF09"),t.addHelpText("after",`
51
+
52
+ Examples:
53
+ $ r2-cli goods shops --json \u67E5\u770B\u5E97\u94FA\uFF08Agent \u6A21\u5F0F\uFF09
54
+ $ r2-cli goods list --stock-id <id> \u6309\u4ED3\u5E93\u67E5\u770B\u9009\u54C1\u5546\u54C1
55
+ $ r2-cli goods xianyu up \u95F2\u9C7C\u4EA4\u4E92\u5F0F\u4E0A\u67B6
56
+ $ r2-cli goods taobao alzc spu-query \u963F\u91CC\u8D44\u4EA7 SPU \u67E5\u8BE2
57
+ `),t.addCommand(Re()),t.addCommand($e()),t.addCommand(De()),t.addCommand(Xe()),t.addCommand(rr()),t.addCommand(at("up","goods xianyu up",qt)),t.addCommand(at("listing","goods xianyu listing",Qt)),t.addCommand(at("down","goods xianyu down",Ft)),t.addCommand(at("price","goods xianyu price",Mt)),t.addCommand(at("edit","goods xianyu edit",zt)),t.addCommand(at("hang-up","goods xianyu hang-up",Xt)),t}import{Command as oi}from"commander";import{resolve as ei,dirname as ri}from"node:path";import{fileURLToPath as ni}from"node:url";import{execSync as ir}from"node:child_process";import Zo from"chalk";var ii=ri(ni(import.meta.url)),si=ei(ii,"../../scripts/install.js");function sr(){return new oi("install").description("\u4E00\u952E\u5B89\u88C5\u5E76\u914D\u7F6E R2-CLI\uFF08\u63A8\u8350\u901A\u8FC7 npx \u4F7F\u7528\uFF09").option("--json","\u8F93\u51FA JSON\uFF08\u4F9B AI Agent \u4F7F\u7528\uFF09").action(async t=>{let o=!t.json&&!!process.stdin.isTTY,e=t.json?["--json","--from-cli"]:["--from-cli"];try{ir(`node "${si}" ${e.join(" ")}`,{stdio:"inherit"})}catch{process.exit(1)}if(o){console.log(Zo.cyan(`
58
+ \u4E0B\u4E00\u6B65\uFF1A\u626B\u7801\u767B\u5F55`)),console.log(Zo.gray(` \u5C06\u81EA\u52A8\u6253\u5F00\u6D4F\u89C8\u5668\uFF0C\u4F7F\u7528\u7B2C\u4E8C\u56DE\u5408 APP / \u5FAE\u4FE1 / \u652F\u4ED8\u5B9D\u626B\u7801
59
+ `));try{ir("r2-cli auth login",{stdio:"inherit"})}catch{console.log(Zo.yellow(`
60
+ \u767B\u5F55\u8DF3\u8FC7\uFF0C\u540E\u7EED\u53EF\u8FD0\u884C r2-cli auth login \u5B8C\u6210`))}}})}import{Command as ai}from"commander";import xt from"chalk";import{promises as ci}from"node:fs";import di from"node:path";import mi from"node:os";import{spawn as li}from"node:child_process";var ar="@round2ai/r2-cli";function ui(){return new Promise(t=>{let o=li("npm",["uninstall","-g",ar],{stdio:"inherit",shell:!0});o.on("exit",e=>t(e??1)),o.on("error",()=>t(1))})}function cr(){let t=new ai("uninstall");return t.description("\u5378\u8F7D R2-CLI \u5E76\u6E05\u9664\u6240\u6709\u914D\u7F6E").option("--json","\u8F93\u51FA JSON\uFF08\u4F9B AI Agent \u4F7F\u7528\uFF09"),t.action(c(async o=>{let e=di.join(mi.homedir(),".r2-cli"),r=!0;try{await ci.rm(e,{recursive:!0,force:!0})}catch{r=!1}let n=await ui(),i=n===0;if(o.json){f(o,{configCleared:r,npmUninstalled:i,exitCode:n});return}console.log(r?xt.green("\u2705 \u914D\u7F6E\u6587\u4EF6\u5DF2\u6E05\u9664"):xt.yellow("\u26A0\uFE0F \u914D\u7F6E\u76EE\u5F55\u4E0D\u5B58\u5728\u6216\u65E0\u6CD5\u5220\u9664\uFF08\u53EF\u5FFD\u7565\uFF09")),i?console.log(xt.green(`\u2705 ${ar} \u5DF2\u5378\u8F7D`)):(console.log(xt.yellow(`\u26A0\uFE0F npm \u5378\u8F7D\u5931\u8D25 (exit code: ${n})`)),console.log(xt.gray(" \u5982\u901A\u8FC7 yarn/pnpm \u5B89\u88C5\uFF0C\u8BF7\u624B\u52A8\u5378\u8F7D")))})),t}import{Command as Ii}from"commander";import dr from"chalk";import{spawn as wi,execSync as bi}from"node:child_process";import{readFileSync as pi}from"node:fs";import{dirname as gi,join as fi}from"node:path";import{fileURLToPath as hi}from"node:url";var yi=gi(hi(import.meta.url));function Ht(){for(let t of["../package.json","../../package.json"])try{return JSON.parse(pi(fi(yi,t),"utf-8")).version}catch{}return"0.0.0"}var mr="@round2ai/r2-cli";function Si(t,o){return new Promise(e=>{let r=wi(t,o,{stdio:"inherit"});r.on("close",n=>e(n??1)),r.on("error",()=>e(1))})}function lr(){return new Ii("update").description("\u4E00\u952E\u66F4\u65B0 CLI \u548C\u6280\u80FD").option("--json","\u8F93\u51FA JSON\uFF08\u4F9B AI Agent \u4F7F\u7528\uFF09").action(c(async t=>{let o=Ht();if(t.json||(console.log(dr.cyan(`\u5F53\u524D\u7248\u672C: ${o}`)),console.log(dr.cyan("\u6B63\u5728\u66F4\u65B0 CLI..."))),await Si("npm",["install","-g",`${mr}@latest`])!==0)throw new Error(`\u66F4\u65B0\u5931\u8D25\uFF0C\u8BF7\u624B\u52A8\u8FD0\u884C: npm install -g ${mr}@latest`);let r=o;try{r=bi("r2-cli --version",{encoding:"utf-8"}).trim()||o}catch{}f(t,{oldVersion:o,newVersion:r},`
61
+ \u2713 \u66F4\u65B0\u5B8C\u6210: ${o} \u2192 ${r}
62
+ \u2713 \u6280\u80FD\u5DF2\u540C\u6B65\u66F4\u65B0`)}))}function ur(t){let o=t.command("auth").description("\u8BA4\u8BC1\u7BA1\u7406\uFF08\u767B\u5F55 / \u767B\u51FA / \u72B6\u6001 / \u5E73\u53F0\u6388\u6743\uFF09");o.addCommand(po()),o.addCommand(go()),o.addCommand(fo()),o.addCommand(ho()),t.addCommand(nr()),t.addCommand(sr()),t.addCommand(cr()),t.addCommand(lr())}async function xi(){let{default:t}=await import("figlet");console.log(ct.cyan.bold(t.textSync("R2-CLI",{font:"Standard",horizontalLayout:"full"}))),console.log(ct.gray(` \u5411 AI \u5F00\u653E\u4E8C\u624B\u6F6E\u5962\u4EA4\u6613\u5168\u94FE\u8DEF\u80FD\u529B
63
+ `))}function Pi(){let t=new Ci;t.name("r2-cli").description("R2-CLI \u2014 \u4E8C\u624B\u6F6E\u5962\u4EA4\u6613\u547D\u4EE4\u884C\u5DE5\u5177").usage("[command] [options]"),t.addHelpText("after",`
64
+
65
+ Examples:
66
+ $ r2-cli auth login \u626B\u7801\u767B\u5F55
67
+ $ r2-cli goods shops \u67E5\u770B\u5E97\u94FA
68
+ $ r2-cli goods xianyu up \u4EA4\u4E92\u5F0F\u4E0A\u67B6\uFF08\u95F2\u9C7C\uFF09
69
+ $ r2-cli goods list --json Agent \u6A21\u5F0F\u67E5\u8BE2\u9009\u54C1\u5546\u54C1
70
+
71
+ Quick Start:
72
+ npx @round2ai/r2-cli@latest install \u4E00\u952E\u5B89\u88C5
73
+ r2-cli auth login \u626B\u7801\u767B\u5F55
74
+ r2-cli goods xianyu up \u5F00\u59CB\u4E0A\u67B6
75
+
76
+ Docs: https://github.com/Round2AI/r2-cli
77
+ `);let o=Ht();o==="0.0.0"&&console.error(ct.yellow("Warning: unable to read version from package.json")),t.version(`r2-cli version ${o}`,"-v, --version");let e=we(o);return t.configureOutput({writeErr:r=>{console.error(ct.red(r.replace("error:","").trim()))}}),t.action(async()=>{await xi(),t.help()}),ur(t),{program:t,updateCheckPromise:e}}function pr(){console.log(ct.gray(`
78
+ \u64CD\u4F5C\u5DF2\u53D6\u6D88`)),process.exit(130)}process.on("SIGINT",pr);process.on("SIGTERM",pr);var{program:Ti,updateCheckPromise:Ai}=Pi();Ti.parse(process.argv);Ai.catch(t=>{console.error(ct.gray(`[update-check] ${t instanceof Error?t.message:String(t)}`))});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@round2ai/r2-cli",
3
- "version": "1.0.16",
3
+ "version": "1.0.17",
4
4
  "description": "R2-CLI,向 AI 开放二手潮奢交易全链路能力",
5
5
  "main": "dist/r2-cli.js",
6
6
  "type": "module",
@@ -8,12 +8,13 @@
8
8
  "r2-cli": "dist/r2-cli.js"
9
9
  },
10
10
  "scripts": {
11
- "postinstall": "node scripts/install-skills.js",
12
- "build": "cross-env NODE_ENV=development node scripts/build.js",
13
- "build:prod": "cross-env NODE_ENV=production node scripts/build.js",
11
+ "postinstall": "node scripts/install.js",
12
+ "build": "cross-env NODE_ENV=production node scripts/build.js",
13
+ "build:dev": "cross-env NODE_ENV=development node scripts/build.js",
14
14
  "dev": "node scripts/dev.js",
15
15
  "test": "vitest run",
16
- "test:watch": "vitest"
16
+ "test:watch": "vitest",
17
+ "typecheck": "tsc --noEmit"
17
18
  },
18
19
  "keywords": [
19
20
  "round2ai",
@@ -27,7 +28,7 @@
27
28
  ],
28
29
  "files": [
29
30
  "dist",
30
- "scripts/install-skills.js",
31
+ "scripts/install.js",
31
32
  "skills",
32
33
  "package.json",
33
34
  "README.md"