@round2ai/r2-cli 1.0.12-beta.0 → 1.0.12

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,48 +1,49 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- var _e=Object.defineProperty;var tt=(e,t)=>()=>(e&&(t=e(e=0)),t);var et=(e,t)=>{for(var n in t)_e(e,n,{get:t[n],enumerable:!0})};var ee={};et(ee,{UserInfoCard:()=>co});import{Box as _,Text as E}from"ink";import{jsx as j,jsxs as M}from"react/jsx-runtime";function co({userInfo:e,lastLogin:t,daysSinceLogin:n}){let o=e.mobile?e.mobile.replace(/(\d{3})\d{4}(\d{4})/,"$1****$2"):"-";return M(_,{flexDirection:"column",marginTop:1,borderStyle:"round",borderColor:"gray",paddingX:1,children:[j(E,{bold:!0,color:"cyan",children:"\u7528\u6237\u4FE1\u606F"}),M(_,{flexDirection:"row",marginTop:1,children:[j(_,{width:10,children:j(E,{color:"gray",children:"\u6635\u79F0"})}),j(E,{color:"yellow",children:e.nickname})]}),M(_,{flexDirection:"row",children:[j(_,{width:10,children:j(E,{color:"gray",children:"\u624B\u673A\u53F7"})}),j(E,{color:"yellow",children:o})]}),t&&M(_,{flexDirection:"column",marginTop:1,children:[M(E,{color:"gray",children:["\u6700\u540E\u767B\u5F55: ",t.toLocaleString()]}),n!==void 0&&M(E,{color:"gray",children:[" \u8DDD\u4ECA: ",n," \u5929"]})]})]})}var oe=tt(()=>{"use strict"});var at={};et(at,{renderComponent:()=>po,renderOnce:()=>ne});import lo from"react";import kt from"chalk";import{render as uo}from"ink";import{Writable as mo}from"node:stream";function ne(e){let t=kt.level;process.env.NO_COLOR||(kt.level=3);try{let n=[],o=new mo({write(c,u,d){n.push(Buffer.from(c)),d()}});o.isTTY=!0,o.columns=process.stdout.columns||80,o.rows=process.stdout.rows||24,uo(e,{stdout:o,patchConsole:!1}).unmount();let s=Buffer.concat(n).toString("utf8"),a=(s.split(/\x1B\[2J\x1B\[3J\x1B\[H/).at(-1)||s).replace(/\x1B\[\?[\d;]+[hl]/g,"").trimEnd()+`
4
- `;process.stdout.write(a)}finally{kt.level=t}}function po(e,t){ne(lo.createElement(e,t))}var ct=tt(()=>{"use strict"});var Pe={};et(Pe,{ShopsTable:()=>Ro});import{Box as S,Text as A}from"ink";import{jsx as g,jsxs as z}from"react/jsx-runtime";function Ao(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 vo({hasPlatform:e,fillWidth:t}){return z(S,{flexDirection:"row",paddingBottom:0,children:[e&&g(S,{width:qt,children:g(A,{bold:!0,color:"white",children:"\u5E73\u53F0"})}),g(S,{width:t,children:g(A,{bold:!0,color:"white",children:"\u5E97\u94FA\u540D"})}),g(S,{width:Bt,children:g(A,{bold:!0,color:"white",children:"ID"})}),g(S,{width:Gt,children:g(A,{bold:!0,color:"white",children:"\u72B6\u6001"})})]})}function ko({shop:e,hasPlatform:t,fillWidth:n}){let o=Ce[e.platform]??e.platform;return z(S,{flexDirection:"row",children:[t&&g(S,{width:qt,children:g(A,{color:"cyan",children:o})}),g(S,{width:n,children:g(A,{bold:!0,children:e.name})}),g(S,{width:Bt,children:g(A,{color:"gray",children:e.id})}),g(S,{width:Gt,children:g(A,{color:"green",children:"\u25CF \u6388\u6743\u4E2D"})})]})}function Ro({shops:e,platform:t}){let n=Ao(e),o=t==="all",r=t==="all"?"\u6240\u6709\u6388\u6743\u5E97\u94FA":`${Ce[t]??t}\u6388\u6743\u5E97\u94FA`,s=process.stdout.columns||80,i=4,a=Bt+Gt+(o?qt:0),c=Math.max(s-i-a,20),u=a+c;return z(S,{flexDirection:"column",marginTop:1,borderStyle:"round",borderColor:"gray",paddingX:1,children:[z(S,{flexDirection:"row",children:[g(A,{bold:!0,color:"cyan",children:r}),z(A,{color:"gray",children:[" \xB7 ",n.length," \u5BB6"]})]}),z(S,{flexDirection:"column",marginTop:1,children:[g(vo,{hasPlatform:o,fillWidth:c}),g(A,{color:"gray",children:"\u2500".repeat(u)}),n.map(d=>g(ko,{shop:d,hasPlatform:o,fillWidth:c},d.id))]})]})}var Ce,qt,Bt,Gt,Te=tt(()=>{"use strict";Ce={xianyu:"\u95F2\u9C7C",douyin:"\u6296\u97F3"},qt=8,Bt=16,Gt=10});var ve={};et(ve,{StocksTable:()=>Uo});import{Box as h,Text as C}from"ink";import{jsx as m,jsxs as H}from"react/jsx-runtime";function Lo({fillWidth:e}){return H(h,{flexDirection:"row",paddingBottom:0,children:[m(h,{width:Jt,children:m(C,{bold:!0,color:"white",children:"ID"})}),m(h,{width:Xt,children:m(C,{bold:!0,color:"white",children:"\u7528\u6237ID"})}),m(h,{width:Qt,children:m(C,{bold:!0,color:"white",children:"\u4ED3\u5E93ID"})}),m(h,{width:e,children:m(C,{bold:!0,color:"white",children:"\u4ED3\u5E93\u540D\u79F0"})}),m(h,{width:_t,children:m(C,{bold:!0,color:"white",children:"\u521B\u5EFA\u65F6\u95F4"})})]})}function Oo({stock:e,fillWidth:t}){let n=new Date(e.gmtCreate).toLocaleString("zh-CN");return H(h,{flexDirection:"row",children:[m(h,{width:Jt,children:m(C,{color:"gray",children:e.id})}),m(h,{width:Xt,children:m(C,{color:"gray",children:e.userId})}),m(h,{width:Qt,children:m(C,{color:"gray",children:e.stockId})}),m(h,{width:t,children:m(C,{bold:!0,children:e.stockName})}),m(h,{width:_t,children:m(C,{color:"gray",children:n})})]})}function Uo({stocks:e}){let t=process.stdout.columns||80,n=4,o=Jt+Xt+Qt+_t,r=Math.max(t-n-o,20),s=o+r;return H(h,{flexDirection:"column",marginTop:1,borderStyle:"round",borderColor:"gray",paddingX:1,children:[H(h,{flexDirection:"row",children:[m(C,{bold:!0,color:"cyan",children:"\u4ED3\u5E93\u5217\u8868"}),H(C,{color:"gray",children:[" \xB7 ",e.length," \u4E2A"]})]}),H(h,{flexDirection:"column",marginTop:1,children:[m(Lo,{fillWidth:r}),m(C,{color:"gray",children:"\u2500".repeat(s)}),e.map(i=>m(Oo,{stock:i,fillWidth:r},i.id))]})]})}var Jt,Xt,Qt,_t,ke=tt(()=>{"use strict";Jt=6,Xt=10,Qt=10,_t=22});import{Command as tn}from"commander";import{readFileSync as en}from"node:fs";import on from"node:path";import K from"chalk";import"commander";import{Command as le}from"commander";import f from"chalk";var G=class e extends Error{constructor(n,o,r){super(n);this.code=o;this.details=r;this.name="R2Error",Error.captureStackTrace&&Error.captureStackTrace(this,e)}code;details},T=class extends G{constructor(n,o,r){super(n,"API_ERROR",r);this.status=o;this.response=r;this.name="ApiError"}status;response},D=class extends G{constructor(n,o,r){super(n,"STORAGE_ERROR",{path:o,code:r});this.path=o;this.code=r;this.name="StorageError"}path;code},x=class extends G{constructor(t){super(t,"AUTH_ERROR"),this.name="AuthError"}},L=class extends G{constructor(n,o,r){super(n,"POLLING_ERROR",{attempts:o,timeout:r});this.attempts=o;this.timeout=r;this.name="PollingError"}attempts;timeout};async function Me(e,t,n){let o=new AbortController,r=()=>o.abort();n?.addEventListener("abort",r,{once:!0});let s=setTimeout(()=>o.abort(),t);try{return await e()}catch(i){throw o.signal.aborted&&!n?.aborted?new L("\u5355\u6B21\u8F6E\u8BE2\u8BF7\u6C42\u8D85\u65F6"):i}finally{clearTimeout(s),n?.removeEventListener("abort",r)}}async function J(e,t,n){let{interval:o,timeout:r,condition:s}=t,i=Date.now(),a=0;for(;Date.now()-i<r;){if(n?.aborted)throw new L("\u8F6E\u8BE2\u88AB\u4E2D\u6B62");a++;let c=r-(Date.now()-i),u=await Me(e,c,n);if(s(u,a))return u;await Fe(o,n)}throw new L(`\u8F6E\u8BE2\u8D85\u65F6 (\u5DF2\u7B49\u5F85 ${Date.now()-i}ms, \u5171 ${a} \u6B21)`)}function Fe(e,t){return new Promise((n,o)=>{if(t?.aborted){o(new L("\u8F6E\u8BE2\u88AB\u4E2D\u6B62"));return}let r=()=>{clearTimeout(s),o(new L("\u8F6E\u8BE2\u88AB\u4E2D\u6B62"))},s=setTimeout(()=>{t?.removeEventListener("abort",r),n()},e);t?.addEventListener("abort",r,{once:!0})})}import We from"node:fs";import{fileURLToPath as Ve}from"node:url";import{createRequire as Ke}from"node:module";import Wt from"node:path";import{exec as Ye}from"node:child_process";import ze from"node:http";var xt=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,n)=>{this.server=ze.createServer((o,r)=>this.handleRequest(o,r)),this.server.listen(0,"127.0.0.1",()=>{let o=this.server.address();typeof o=="object"&&o?(this.port=o.port,t(this.port)):n(new Error("Failed to get server address"))}),this.server.on("error",n)})}registerPage(t,n,o,r){let s=this.pages.get(t);if(s){s.qrBuffer=o,s.status="waiting",s.config=r;let i=`data: ${JSON.stringify({status:"waiting"})}
3
+ var me=Object.defineProperty;var at=(o,t)=>()=>(o&&(t=o(o=0)),t);var ct=(o,t)=>{for(var e in t)me(o,e,{get:t[e],enumerable:!0})};var ho={};ct(ho,{UserInfoCard:()=>Re});import{Box as H,Text as G}from"ink";import{jsx as J,jsxs as V}from"react/jsx-runtime";function Re({userInfo:o,lastLogin:t,daysSinceLogin:e}){let r=o.mobile?o.mobile.replace(/(\d{3})\d{4}(\d{4})/,"$1****$2"):"-";return V(H,{flexDirection:"column",marginTop:1,borderStyle:"round",borderColor:"gray",paddingX:1,children:[J(G,{bold:!0,color:"cyan",children:"\u7528\u6237\u4FE1\u606F"}),V(H,{flexDirection:"row",marginTop:1,children:[J(H,{width:10,children:J(G,{color:"gray",children:"\u6635\u79F0"})}),J(G,{color:"yellow",children:o.nickname})]}),V(H,{flexDirection:"row",children:[J(H,{width:10,children:J(G,{color:"gray",children:"\u624B\u673A\u53F7"})}),J(G,{color:"yellow",children:r})]}),t&&V(H,{flexDirection:"column",marginTop:1,children:[V(G,{color:"gray",children:["\u6700\u540E\u767B\u5F55: ",t.toLocaleString()]}),e!==void 0&&V(G,{color:"gray",children:[" \u8DDD\u4ECA: ",e," \u5929"]})]})]})}var yo=at(()=>{"use strict"});var pt={};ct(pt,{renderComponent:()=>Bt,renderOnce:()=>wo});import Le from"react";import $t from"chalk";import{render as Oe}from"ink";import{Writable as De}from"node:stream";function wo(o){let t=$t.level;process.env.NO_COLOR||($t.level=3);try{let e=[],r=new De({write(l,w,m){e.push(Buffer.from(l)),m()}});r.isTTY=!0,r.columns=process.stdout.columns||80,r.rows=process.stdout.rows||24,Oe(o,{stdout:r,patchConsole:!1}).unmount();let s=Buffer.concat(e).toString("utf8"),a=(s.split(/\x1B\[2J\x1B\[3J\x1B\[H/).at(-1)||s).replace(/\x1B\[\?[\d;]+[hl]/g,"").trimEnd()+`
4
+ `;process.stdout.write(a)}finally{$t.level=t}}function Bt(o,t){wo(Le.createElement(o,t))}var rt=at(()=>{"use strict"});var Go={};ct(Go,{ShopsTable:()=>He});import{Box as T,Text as N}from"ink";import{jsx as f,jsxs as K}from"react/jsx-runtime";function Fe(o){return o.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 ze({hasPlatform:o,fillWidth:t}){return K(T,{flexDirection:"row",paddingBottom:0,children:[o&&f(T,{width:Wt,children:f(N,{bold:!0,color:"white",children:"\u5E73\u53F0"})}),f(T,{width:t,children:f(N,{bold:!0,color:"white",children:"\u5E97\u94FA\u540D"})}),f(T,{width:Ht,children:f(N,{bold:!0,color:"white",children:"ID"})}),f(T,{width:Vt,children:f(N,{bold:!0,color:"white",children:"\u72B6\u6001"})})]})}function We({shop:o,hasPlatform:t,fillWidth:e}){let r=Bo[o.platform]??o.platform;return K(T,{flexDirection:"row",children:[t&&f(T,{width:Wt,children:f(N,{color:"cyan",children:r})}),f(T,{width:e,children:f(N,{bold:!0,children:o.name})}),f(T,{width:Ht,children:f(N,{color:"gray",children:o.id})}),f(T,{width:Vt,children:f(N,{color:"green",children:"\u25CF \u6388\u6743\u4E2D"})})]})}function He({shops:o,platform:t}){let e=Fe(o),r=t==="all",n=t==="all"?"\u6240\u6709\u6388\u6743\u5E97\u94FA":`${Bo[t]??t}\u6388\u6743\u5E97\u94FA`,s=process.stdout.columns||80,i=4,a=Ht+Vt+(r?Wt:0),l=Math.max(s-i-a,20),w=a+l;return K(T,{flexDirection:"column",marginTop:1,borderStyle:"round",borderColor:"gray",paddingX:1,children:[K(T,{flexDirection:"row",children:[f(N,{bold:!0,color:"cyan",children:n}),K(N,{color:"gray",children:[" \xB7 ",e.length," \u5BB6"]})]}),K(T,{flexDirection:"column",marginTop:1,children:[f(ze,{hasPlatform:r,fillWidth:l}),f(N,{color:"gray",children:"\u2500".repeat(w)}),e.map(m=>f(We,{shop:m,hasPlatform:r,fillWidth:l},m.id))]})]})}var Bo,Wt,Ht,Vt,Jo=at(()=>{"use strict";Bo={xianyu:"\u95F2\u9C7C",douyin:"\u6296\u97F3"},Wt=8,Ht=16,Vt=10});var _o={};ct(_o,{StocksTable:()=>Ze});import{Box as I,Text as b}from"ink";import{jsx as u,jsxs as Y}from"react/jsx-runtime";function Ke({fillWidth:o}){return Y(I,{flexDirection:"row",paddingBottom:0,children:[u(I,{width:Kt,children:u(b,{bold:!0,color:"white",children:"ID"})}),u(I,{width:Yt,children:u(b,{bold:!0,color:"white",children:"\u7528\u6237ID"})}),u(I,{width:Zt,children:u(b,{bold:!0,color:"white",children:"\u4ED3\u5E93ID"})}),u(I,{width:o,children:u(b,{bold:!0,color:"white",children:"\u4ED3\u5E93\u540D\u79F0"})}),u(I,{width:to,children:u(b,{bold:!0,color:"white",children:"\u521B\u5EFA\u65F6\u95F4"})})]})}function Ye({stock:o,fillWidth:t}){let e=new Date(o.gmtCreate).toLocaleString("zh-CN");return Y(I,{flexDirection:"row",children:[u(I,{width:Kt,children:u(b,{color:"gray",children:o.id})}),u(I,{width:Yt,children:u(b,{color:"gray",children:o.userId})}),u(I,{width:Zt,children:u(b,{color:"gray",children:o.stockId})}),u(I,{width:t,children:u(b,{bold:!0,children:o.stockName})}),u(I,{width:to,children:u(b,{color:"gray",children:e})})]})}function Ze({stocks:o}){let t=process.stdout.columns||80,e=4,r=Kt+Yt+Zt+to,n=Math.max(t-e-r,20),s=r+n;return Y(I,{flexDirection:"column",marginTop:1,borderStyle:"round",borderColor:"gray",paddingX:1,children:[Y(I,{flexDirection:"row",children:[u(b,{bold:!0,color:"cyan",children:"\u4ED3\u5E93\u5217\u8868"}),Y(b,{color:"gray",children:[" \xB7 ",o.length," \u4E2A"]})]}),Y(I,{flexDirection:"column",marginTop:1,children:[u(Ke,{fillWidth:n}),u(b,{color:"gray",children:"\u2500".repeat(s)}),o.map(i=>u(Ye,{stock:i,fillWidth:n},i.id))]})]})}var Kt,Yt,Zt,to,Qo=at(()=>{"use strict";Kt=6,Yt=10,Zt=10,to=22});import{Command as Lr}from"commander";import ot from"chalk";import"commander";import{Command as bo}from"commander";import x from"chalk";var M=class o extends Error{constructor(e,r,n){super(e);this.code=r;this.details=n;this.name="R2Error",Error.captureStackTrace&&Error.captureStackTrace(this,o)}code;details},A=class extends M{constructor(e,r,n){super(e,"API_ERROR",n);this.status=r;this.response=n;this.name="ApiError"}status;response},$=class extends M{constructor(e,r,n){super(e,"STORAGE_ERROR",{path:r,code:n});this.path=r;this.code=n;this.name="StorageError"}path;code},S=class extends M{constructor(t){super(t,"AUTH_ERROR"),this.name="AuthError"}},U=class extends M{constructor(e,r,n){super(e,"POLLING_ERROR",{attempts:r,timeout:n});this.attempts=r;this.timeout=n;this.name="PollingError"}attempts;timeout};async function ge(o,t,e){let r=new AbortController,n=()=>r.abort();e?.addEventListener("abort",n,{once:!0});let s=setTimeout(()=>r.abort(),t);try{return await o()}catch(i){throw r.signal.aborted&&!e?.aborted?new U("\u5355\u6B21\u8F6E\u8BE2\u8BF7\u6C42\u8D85\u65F6"):i}finally{clearTimeout(s),e?.removeEventListener("abort",n)}}async function F(o,t,e){let{interval:r,timeout:n,condition:s}=t,i=Date.now(),a=0;for(;Date.now()-i<n;){if(e?.aborted)throw new U("\u8F6E\u8BE2\u88AB\u4E2D\u6B62");a++;let l=n-(Date.now()-i),w=await ge(o,l,e);if(s(w,a))return w;await pe(r,e)}throw new U(`\u8F6E\u8BE2\u8D85\u65F6 (\u5DF2\u7B49\u5F85 ${Date.now()-i}ms, \u5171 ${a} \u6B21)`)}function pe(o,t){return new Promise((e,r)=>{if(t?.aborted){r(new U("\u8F6E\u8BE2\u88AB\u4E2D\u6B62"));return}let n=()=>{clearTimeout(s),r(new U("\u8F6E\u8BE2\u88AB\u4E2D\u6B62"))},s=setTimeout(()=>{t?.removeEventListener("abort",n),e()},o);t?.addEventListener("abort",n,{once:!0})})}import ye from"node:fs";import{fileURLToPath as we}from"node:url";import{createRequire as xe}from"node:module";import lo from"node:path";import{exec as Ie}from"node:child_process";import fe from"node:http";var vt=class o{server=null;pages=new Map;port=0;idleTimer=null;static IDLE_TIMEOUT_MS=1e4;async start(){return this.server?this.port:new Promise((t,e)=>{this.server=fe.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)):e(new Error("Failed to get server address"))}),this.server.on("error",e)})}registerPage(t,e,r,n){let s=this.pages.get(t);if(s){s.qrBuffer=r,s.status="waiting",s.config=n;let i=`data: ${JSON.stringify({status:"waiting"})}
5
5
 
6
- `;for(let a of s.sseClients)a.write(i)}else this.pages.set(t,{html:n,qrBuffer:o,status:"waiting",sseClients:[],config:r});this.resetIdleTimer()}unregisterPage(t){let n=this.pages.get(t);if(n){for(let o of n.sseClients)o.end();n.sseClients.length=0,this.pages.delete(t),this.pages.size===0&&this.close()}}setStatus(t,n){let o=this.pages.get(t);if(!o)return;o.status=n;let r=`data: ${JSON.stringify({status:n})}
6
+ `;for(let a of s.sseClients)a.write(i)}else this.pages.set(t,{html:e,qrBuffer:r,status:"waiting",sseClients:[],config:n});this.resetIdleTimer()}unregisterPage(t){let e=this.pages.get(t);if(e){for(let r of e.sseClients)r.end();e.sseClients.length=0,this.pages.delete(t),this.pages.size===0&&this.close()}}setStatus(t,e){let r=this.pages.get(t);if(!r)return;r.status=e;let n=`data: ${JSON.stringify({status:e})}
7
7
 
8
- `;for(let s of o.sseClients)s.write(r)}close(){if(this.server){this.idleTimer&&(clearTimeout(this.idleTimer),this.idleTimer=null);for(let t of this.pages.values()){for(let n of t.sseClients)n.end();t.sseClients.length=0}this.pages.clear(),this.server.close(),this.server=null,this.port=0,X=null}}resetIdleTimer(){this.idleTimer&&clearTimeout(this.idleTimer),this.idleTimer=setTimeout(()=>{[...this.pages.values()].some(n=>n.sseClients.length>0)||this.close()},e.IDLE_TIMEOUT_MS)}handleRequest(t,n){let o=t.url??"/";for(let[r,s]of this.pages){if(o===r){n.writeHead(302,{Location:r+"/"}),n.end();return}if(o===r+"/"){n.writeHead(200,{"Content-Type":"text/html; charset=utf-8"}),n.end(s.html);return}if(o===r+"/qr.png"){n.writeHead(200,{"Content-Type":"image/png","Content-Length":s.qrBuffer.length}),n.end(s.qrBuffer);return}if(o===r+"/events"){n.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"}),n.write(`data: ${JSON.stringify({status:s.status})}
8
+ `;for(let s of r.sseClients)s.write(n)}close(){if(this.server){this.idleTimer&&(clearTimeout(this.idleTimer),this.idleTimer=null);for(let t of this.pages.values()){for(let e of t.sseClients)e.end();t.sseClients.length=0}this.pages.clear(),this.server.close(),this.server=null,this.port=0,z=null}}resetIdleTimer(){this.idleTimer&&clearTimeout(this.idleTimer),this.idleTimer=setTimeout(()=>{[...this.pages.values()].some(e=>e.sseClients.length>0)||this.close()},o.IDLE_TIMEOUT_MS)}handleRequest(t,e){let r=t.url??"/";for(let[n,s]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(s.html);return}if(r===n+"/qr.png"){e.writeHead(200,{"Content-Type":"image/png","Content-Length":s.qrBuffer.length}),e.end(s.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:s.status})}
9
9
 
10
- `),s.sseClients.push(n),t.on("close",()=>{let i=s.sseClients.indexOf(n);i>=0&&s.sseClients.splice(i,1)});return}if(o===r+"/config"){n.writeHead(200,{"Content-Type":"application/json"}),n.end(JSON.stringify(s.config??{}));return}}n.writeHead(404,{"Content-Type":"text/plain"}),n.end("Not Found")}},X=null,zt=!1;function ot(){X&&X.close()}function He(){zt||(zt=!0,process.on("exit",ot),process.on("SIGINT",ot),process.on("SIGTERM",ot),setInterval(()=>{process.stdin?.destroyed&&ot()},3e3).unref())}function Ht(){return X||(X=new xt,He()),X}var Ze=Wt.dirname(Ve(import.meta.url)),to="/login",eo="/login-xianyu",It=null;async function oo(e){return We.promises.readFile(Wt.join(Ze,"pages",e),"utf-8")}async function no(e){return It||(It=Ke(import.meta.url)),It("qrcode").toBuffer(e,{width:300,margin:2})}function R(e){let t=process.platform==="win32"?`start "" "${e}"`:process.platform==="darwin"?`open "${e}"`:`xdg-open "${e}"`;Ye(t)}async function Vt(e,t,n,o){let[r,s]=await Promise.all([oo(t),no(n)]),i=Ht(),a=await i.start();i.registerPage(e,r,s,o);let c=`http://127.0.0.1:${a}${e}/`;return{url:n,qrUrl:c,setStatus:u=>i.setStatus(e,u),closeServer:()=>i.unregisterPage(e)}}function St(e){return Vt(to,"login.html",e)}function Ct(e,t){return Vt(eo,"xianyu-auth.html",e,{authUrl:t})}import{promises as Q}from"node:fs";import Pt from"node:path";import ro from"node:os";var so=".r2-cli",nt=class{configPath;config;configLoaded=!1;dirEnsured=!1;constructor(){let t=ro.homedir(),n=Pt.join(t,so);this.configPath=Pt.join(n,"config.json"),this.config={credentials:null}}getConfigPath(){return this.configPath}async loadConfig(){if(this.configLoaded)return this.config;try{let t=await Q.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=Pt.dirname(this.configPath);try{await Q.stat(t)}catch(n){if(n.code==="ENOENT")await Q.mkdir(t,{recursive:!0});else throw new D("Failed to create directory",t,n.code)}this.dirEnsured=!0}async saveConfig(t){this.config=t,await this.ensureDir();let n=JSON.stringify(t,null,2),o=this.configPath+".tmp";try{await Q.writeFile(o,n,"utf-8"),await Q.rename(o,this.configPath),this.configLoaded=!0}catch(r){throw await Q.unlink(o).catch(s=>{typeof process.env.DEBUG<"u"&&console.error("[config] cleanup tmp failed:",s)}),new D("Failed to save config",this.configPath,r.code)}}},Tt=null;function bt(){return Tt||(Tt=new nt),Tt}var vt=300*1e3,rt=class{store=bt();isTokenExpired(t){return t.expire?Date.now()>=t.expire-vt:!1}async saveCredentials(t,n){let o=Date.now(),r=n.expire?Number.parseInt(n.expire,10):0,s={token:t,userInfo:n,timestamp:o,...r>0&&{expire:o+r}},i=await this.store.loadConfig();i.credentials=s,await this.store.saveConfig(i)}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}},At=null;function Y(){return At||(At=new rt),At}var io="https://api.puresnake.com",st=class{config;authStorage=null;cachedToken=null;tokenExpiry=0;constructor(t={}){this.config={baseUrl:t.baseUrl??io,version:t.version??"v3",debug:t.debug??!1},this.authStorage=t.auth===!1?null:Y()}buildUrl(t){let n=t.startsWith("/")?t.slice(1):t;return`${this.config.baseUrl}/${this.config.version}/${n}`}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 x("\u8BF7\u5148\u8FD0\u884C r2-cli auth login \u767B\u5F55");return this.cachedToken=t.token,this.tokenExpiry=t.expire?t.expire-vt:Date.now()+1800*1e3,t.token}async requestFull(t,n){let o=this.buildUrl(t),{method:r,headers:s,body:i,timeout:a=3e4}=n,c=await this.getAuthToken(),u={...s,...c?{token:c}:{}},d=new AbortController,w=setTimeout(()=>d.abort(),a),q={method:r,headers:{"Content-Type":"application/json",...u},signal:d.signal};i!==void 0&&(q.body=JSON.stringify(i)),this.config.debug&&console.error(`[API ${r}]`,o,i);try{let l=await fetch(o,q);if(!l.ok){if(l.status===401)throw this.authStorage&&(this.cachedToken=null,await this.authStorage.clearCredentials().catch(B=>{console.error("[API] \u6E05\u9664\u51ED\u8BC1\u5931\u8D25:",B instanceof Error?B.message:String(B))})),new x("\u767B\u5F55\u5DF2\u8FC7\u671F\uFF0C\u8BF7\u8FD0\u884C r2-cli auth login \u91CD\u65B0\u767B\u5F55");let yt=await l.text();throw new T(yt||`${l.status} ${l.statusText}`,l.status)}let P=await l.json();if(this.config.debug&&console.error("[API Response]",P),!P.success||P.status!==0)throw new T(P.msg||"\u672A\u77E5\u9519\u8BEF",P.status,P);return P}catch(l){throw l instanceof DOMException&&l.name==="AbortError"?new T(`\u8BF7\u6C42\u8D85\u65F6 (${a}ms)`,408):l}finally{clearTimeout(w)}}async request(t,n){return(await this.requestFull(t,n)).data}async get(t,n,o){let r=n&&n.size>0?`${t}?${n.toString()}`:t;return this.request(r,{method:"GET",headers:o})}async post(t,n,o){return this.request(t,{method:"POST",body:n,headers:o})}async put(t,n,o){return this.request(t,{method:"PUT",body:n,headers:o})}async delete(t,n){return this.request(t,{method:"DELETE",headers:n})}async upload(t,n,o){let r=this.buildUrl(t),s=await this.getAuthToken(),i={...o,...s?{token:s}:{}},a=new AbortController,c=setTimeout(()=>a.abort(),6e4),u={method:"POST",headers:i,body:n,signal:a.signal};this.config.debug&&console.error("[API UPLOAD]",r);try{let d=await fetch(r,u);if(!d.ok){if(d.status===401)throw this.authStorage&&(this.cachedToken=null,await this.authStorage.clearCredentials().catch(()=>{})),new x("\u767B\u5F55\u5DF2\u8FC7\u671F\uFF0C\u8BF7\u8FD0\u884C r2-cli auth login \u91CD\u65B0\u767B\u5F55");let q=await d.text();throw new T(q||`${d.status} ${d.statusText}`,d.status)}let w=await d.json();if(this.config.debug&&console.error("[API Response]",w),!w.success||w.status!==0)throw new T(w.msg||"\u672A\u77E5\u9519\u8BEF",w.status,w);return w.data}catch(d){throw d instanceof DOMException&&d.name==="AbortError"?new T("\u4E0A\u4F20\u8D85\u65F6 (60000ms)",408):d}finally{clearTimeout(c)}}},it=new st,Kt=new st({auth:!1});var Yt=Kt;async function Zt(){return Yt.post("app/qrcode/generate")}async function te(e){let t=new URLSearchParams;t.append("qrToken",e);let n=`app/qrcode/status?${t.toString()}`,o=await Yt.requestFull(n,{method:"GET"});return o.token&&typeof o.data=="object"&&o.data!==null&&(o.data.token=o.token),o.data}async function re(e,t,n){let{UserInfoCard:o}=await Promise.resolve().then(()=>(oe(),ee)),{renderComponent:r}=await Promise.resolve().then(()=>(ct(),at)),s=t!=null?{userInfo:e,lastLogin:t,daysSinceLogin:n??0}:{userInfo:e};r(o,s)}var lt=class{storage;constructor(t){this.storage=t??Y()}async generateQR(){let t=await Zt(),n=`https://m.puresnake.com/r2/auth/login?qrToken=${t.qrContent}&from=wechat`,o=await St(n);return{qrData:t,...o}}async waitForLogin(t,n,o,r,s,i){let a=await J(()=>te(t),{interval:o,timeout:n,condition:c=>{switch(c.status){case"scanned":return i||(console.log(f.cyan(`
11
- \u{1F50D} \u5DF2\u626B\u7801: ${c.userInfo?.nickname||"\u672A\u77E5\u7528\u6237"}`)),console.log(f.yellow("\u8BF7\u5728 APP \u4E0A\u786E\u8BA4\u767B\u5F55"))),s?.("scanning"),!1;case"confirmed":return i||console.log(f.green(`
12
- \u2705 \u7528\u6237\u5DF2\u786E\u8BA4\u767B\u5F55`)),s?.("success"),!0;case"expired":return i||console.log(f.red(`
13
- \u23F0 \u4E8C\u7EF4\u7801\u5DF2\u8FC7\u671F`)),s?.("expired"),!0;case"canceled":return i||console.log(f.red(`
14
- \u{1F6AB} \u7528\u6237\u5DF2\u53D6\u6D88\u767B\u5F55`)),s?.("expired"),!0;default:return!1}}},r??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 x("\u4E8C\u7EF4\u7801\u5DF2\u8FC7\u671F\uFF0C\u8BF7\u91CD\u65B0\u767B\u5F55"):a.status==="canceled"?new x("\u7528\u6237\u5DF2\u53D6\u6D88\u767B\u5F55"):new x("\u767B\u5F55\u5931\u8D25: \u672A\u83B7\u53D6\u5230\u51ED\u8BC1")}async login(t){console.log(f.cyan(`
15
- \u{1F510} \u6B63\u5728\u542F\u52A8\u626B\u7801\u767B\u5F55...`));let{qrData:n,qrUrl:o,setStatus:r,closeServer:s}=await this.generateQR();console.log(f.green(`\u2705 \u4E8C\u7EF4\u7801\u5DF2\u751F\u6210
16
- `)),console.log(f.cyan(` \u94FE\u63A5: ${o}
17
- `)),R(o),console.log(f.yellow(`\u23F3 \u7B49\u5F85\u626B\u7801...
18
- `));let i=Number.parseInt(n.expireTime,10),a=Number.parseInt(n.pollInterval,10);try{let c=await this.waitForLogin(n.qrToken,i,a,t,r);return console.log(f.green(`
10
+ `),s.sseClients.push(e),t.on("close",()=>{let i=s.sseClients.indexOf(e);i>=0&&s.sseClients.splice(i,1)});return}if(r===n+"/config"){e.writeHead(200,{"Content-Type":"application/json"}),e.end(JSON.stringify(s.config??{}));return}}e.writeHead(404,{"Content-Type":"text/plain"}),e.end("Not Found")}},z=null,ao=!1;function lt(){z&&z.close()}function he(){ao||(ao=!0,process.on("exit",lt),process.on("SIGINT",lt),process.on("SIGTERM",lt),setInterval(()=>{process.stdin?.destroyed&&lt()},3e3).unref())}function co(){return z||(z=new vt,he()),z}var Se=lo.dirname(we(import.meta.url)),Ce="/login",Te="/login-xianyu",Nt=null;async function be(o){return ye.promises.readFile(lo.join(Se,"pages",o),"utf-8")}async function Pe(o){return Nt||(Nt=xe(import.meta.url)),Nt("qrcode").toBuffer(o,{width:300,margin:2})}function B(o){let t=process.platform==="win32"?`start "" "${o}"`:process.platform==="darwin"?`open "${o}"`:`xdg-open "${o}"`;Ie(t)}async function uo(o,t,e,r){let[n,s]=await Promise.all([be(t),Pe(e)]),i=co(),a=await i.start();i.registerPage(o,n,s,r);let l=`http://127.0.0.1:${a}${o}/`;return{url:e,qrUrl:l,setStatus:w=>i.setStatus(o,w),closeServer:()=>i.unregisterPage(o)}}function Rt(o){return uo(Ce,"login.html",o)}function Lt(o,t){return uo(Te,"xianyu-auth.html",o,{authUrl:t})}import{promises as W}from"node:fs";import Ot from"node:path";import Ae from"node:os";var ke=".r2-cli",dt=class{configPath;config;configLoaded=!1;dirEnsured=!1;constructor(){let t=Ae.homedir(),e=Ot.join(t,ke);this.configPath=Ot.join(e,"config.json"),this.config={credentials:null}}getConfigPath(){return this.configPath}async loadConfig(){if(this.configLoaded)return this.config;try{let t=await W.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=Ot.dirname(this.configPath);try{await W.stat(t)}catch(e){if(e.code==="ENOENT")await W.mkdir(t,{recursive:!0});else throw new $("Failed to create directory",t,e.code)}this.dirEnsured=!0}async saveConfig(t){this.config=t,await this.ensureDir();let e=JSON.stringify(t,null,2),r=this.configPath+".tmp";try{await W.writeFile(r,e,"utf-8"),await W.rename(r,this.configPath),this.configLoaded=!0}catch(n){throw await W.unlink(r).catch(s=>{typeof process.env.DEBUG<"u"&&console.error("[config] cleanup tmp failed:",s)}),new $("Failed to save config",this.configPath,n.code)}}},Dt=null;function Ut(){return Dt||(Dt=new dt),Dt}var Et=300*1e3,ut=class{store=Ut();isTokenExpired(t){return t.expire?Date.now()>=t.expire-Et:!1}async saveCredentials(t,e){let r=Date.now(),n=e.expire?Number.parseInt(e.expire,10):0,s={token:t,userInfo:e,timestamp:r,...n>0&&{expire:r+n}},i=await this.store.loadConfig();i.credentials=s,await this.store.saveConfig(i)}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}},jt=null;function et(){return jt||(jt=new ut),jt}var ve="https://api.puresnake.com",mt=class{config;authStorage=null;cachedToken=null;tokenExpiry=0;constructor(t={}){this.config={baseUrl:t.baseUrl??ve,version:t.version??"v3",debug:t.debug??!1},this.authStorage=t.auth===!1?null:et()}buildUrl(t){let e=t.startsWith("/")?t.slice(1):t;return`${this.config.baseUrl}/${this.config.version}/${e}`}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 S("\u8BF7\u5148\u8FD0\u884C r2-cli auth login \u767B\u5F55");return this.cachedToken=t.token,this.tokenExpiry=t.expire?t.expire-Et:Date.now()+1800*1e3,t.token}async requestFull(t,e){let r=this.buildUrl(t),{method:n,headers:s,body:i,timeout:a=3e4}=e,l=await this.getAuthToken(),w={...s,...l?{token:l}:{}},m=new AbortController,P=setTimeout(()=>m.abort(),a),_={method:n,headers:{"Content-Type":"application/json",...w},signal:m.signal};i!==void 0&&(_.body=JSON.stringify(i)),this.config.debug&&console.error(`[API ${n}]`,r,i);try{let d=await fetch(r,_);if(!d.ok){if(d.status===401)throw this.authStorage&&(this.cachedToken=null,await this.authStorage.clearCredentials().catch(Q=>{console.error("[API] \u6E05\u9664\u51ED\u8BC1\u5931\u8D25:",Q instanceof Error?Q.message:String(Q))})),new S("\u767B\u5F55\u5DF2\u8FC7\u671F\uFF0C\u8BF7\u8FD0\u884C r2-cli auth login \u91CD\u65B0\u767B\u5F55");let At=await d.text();throw new A(At||`${d.status} ${d.statusText}`,d.status)}let k=await d.json();if(this.config.debug&&console.error("[API Response]",k),!k.success||k.status!==0)throw new A(k.msg||"\u672A\u77E5\u9519\u8BEF",k.status,k);return k}catch(d){throw d instanceof DOMException&&d.name==="AbortError"?new A(`\u8BF7\u6C42\u8D85\u65F6 (${a}ms)`,408):d}finally{clearTimeout(P)}}async request(t,e){return(await this.requestFull(t,e)).data}async get(t,e,r){let n=e&&e.size>0?`${t}?${e.toString()}`:t;return this.request(n,{method:"GET",headers:r})}async post(t,e,r){return this.request(t,{method:"POST",body:e,headers:r})}async put(t,e,r){return this.request(t,{method:"PUT",body:e,headers:r})}async delete(t,e){return this.request(t,{method:"DELETE",headers:e})}async upload(t,e,r){let n=this.buildUrl(t),s=await this.getAuthToken(),i={...r,...s?{token:s}:{}},a=new AbortController,l=setTimeout(()=>a.abort(),6e4),w={method:"POST",headers:i,body:e,signal:a.signal};this.config.debug&&console.error("[API UPLOAD]",n);try{let m=await fetch(n,w);if(!m.ok){if(m.status===401)throw this.authStorage&&(this.cachedToken=null,await this.authStorage.clearCredentials().catch(()=>{})),new S("\u767B\u5F55\u5DF2\u8FC7\u671F\uFF0C\u8BF7\u8FD0\u884C r2-cli auth login \u91CD\u65B0\u767B\u5F55");let _=await m.text();throw new A(_||`${m.status} ${m.statusText}`,m.status)}let P=await m.json();if(this.config.debug&&console.error("[API Response]",P),!P.success||P.status!==0)throw new A(P.msg||"\u672A\u77E5\u9519\u8BEF",P.status,P);return P.data}catch(m){throw m instanceof DOMException&&m.name==="AbortError"?new A("\u4E0A\u4F20\u8D85\u65F6 (60000ms)",408):m}finally{clearTimeout(l)}}},gt=new mt,mo=new mt({auth:!1});var go=mo;async function po(){return go.post("app/qrcode/generate")}async function fo(o){let t=new URLSearchParams;t.append("qrToken",o);let e=`app/qrcode/status?${t.toString()}`,r=await go.requestFull(e,{method:"GET"});return r.token&&typeof r.data=="object"&&r.data!==null&&(r.data.token=r.token),r.data}async function xo(o,t,e){let{UserInfoCard:r}=await Promise.resolve().then(()=>(yo(),ho)),{renderComponent:n}=await Promise.resolve().then(()=>(rt(),pt)),s=t!=null?{userInfo:o,lastLogin:t,daysSinceLogin:e??0}:{userInfo:o};n(r,s)}var ft=class{storage;constructor(t){this.storage=t??et()}async generateQR(){let t=await po(),e=`https://m.puresnake.com/r2/auth/login?qrToken=${t.qrContent}&from=wechat`,r=await Rt(e);return{qrData:t,...r}}async waitForLogin(t,e,r,n,s,i){let a=await F(()=>fo(t),{interval:r,timeout:e,condition:l=>{switch(l.status){case"scanned":return i||(console.log(x.cyan(`
11
+ \u{1F50D} \u5DF2\u626B\u7801: ${l.userInfo?.nickname||"\u672A\u77E5\u7528\u6237"}`)),console.log(x.yellow("\u8BF7\u5728 APP \u4E0A\u786E\u8BA4\u767B\u5F55"))),s?.("scanning"),!1;case"confirmed":return i||console.log(x.green(`
12
+ \u2705 \u7528\u6237\u5DF2\u786E\u8BA4\u767B\u5F55`)),s?.("success"),!0;case"expired":return i||console.log(x.red(`
13
+ \u23F0 \u4E8C\u7EF4\u7801\u5DF2\u8FC7\u671F`)),s?.("expired"),!0;case"canceled":return i||console.log(x.red(`
14
+ \u{1F6AB} \u7528\u6237\u5DF2\u53D6\u6D88\u767B\u5F55`)),s?.("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 S("\u4E8C\u7EF4\u7801\u5DF2\u8FC7\u671F\uFF0C\u8BF7\u91CD\u65B0\u767B\u5F55"):a.status==="canceled"?new S("\u7528\u6237\u5DF2\u53D6\u6D88\u767B\u5F55"):new S("\u767B\u5F55\u5931\u8D25: \u672A\u83B7\u53D6\u5230\u51ED\u8BC1")}async login(t){console.log(x.cyan(`
15
+ \u{1F510} \u6B63\u5728\u542F\u52A8\u626B\u7801\u767B\u5F55...`));let{qrData:e,qrUrl:r,setStatus:n,closeServer:s}=await this.generateQR();console.log(x.green(`\u2705 \u4E8C\u7EF4\u7801\u5DF2\u751F\u6210
16
+ `)),console.log(x.cyan(` \u94FE\u63A5: ${r}
17
+ `)),B(r),console.log(x.yellow(`\u23F3 \u7B49\u5F85\u626B\u7801...
18
+ `));let i=Number.parseInt(e.expireTime,10),a=Number.parseInt(e.pollInterval,10);try{let l=await this.waitForLogin(e.qrToken,i,a,t,n);return console.log(x.green(`
19
19
  \u2705 \u767B\u5F55\u6210\u529F\uFF01
20
- `)),re(c.userInfo),c}catch(c){throw console.log(f.red(`
20
+ `)),xo(l.userInfo),l}catch(l){throw console.log(x.red(`
21
21
  \u274C \u767B\u5F55\u5931\u8D25
22
- `)),c}finally{s()}}async logout(){console.log(f.cyan(`
23
- \u{1F6AA} \u6B63\u5728\u9000\u51FA\u767B\u5F55...`)),await this.storage.clearCredentials(),console.log(f.green(`\u2705 \u5DF2\u9000\u51FA\u767B\u5F55
24
- `))}async status(){if(!await this.storage.isLoggedIn()){console.log(f.yellow(`\u26A0\uFE0F \u5C1A\u672A\u767B\u5F55\u6216\u51ED\u8BC1\u5DF2\u8FC7\u671F
25
- `));return}let n=await this.storage.getCredentials(),o=n.userInfo,r=new Date(n.timestamp),s=Math.floor((Date.now()-n.timestamp)/(1e3*60*60*24));console.log(f.green(`\u2705 \u5DF2\u767B\u5F55
26
- `)),await re(o,r,s)}},Rt=null;function N(){return Rt||(Rt=new lt),Rt}import $ from"chalk";var se=it;async function ie(){return se.get("mms/xianyu/auth/url")}async function ae(e){let t=new URLSearchParams({state:e});return se.get("mms/xianyu/auth/status",t)}async function dt(){let e=await ie(),t=await Ct(e.url,e.url);return{authData:e,...t}}async function Z(e,t,n,o,r){return J(()=>ae(e),{interval:n,timeout:t,condition:s=>s.status==="success"?(console.log($.green(`
27
- \u2705 \u6388\u6743\u6210\u529F\uFF01\u5E97\u94FA: ${s.shopName} (${s.shopId})`)),r?.("success"),!0):s.status==="expired"?(console.log($.red(`
28
- \u23F0 \u6388\u6743\u94FE\u63A5\u5DF2\u8FC7\u671F`)),r?.("expired"),!0):!1},o)}async function Nt(e){console.log($.cyan(`
29
- \u{1F517} \u6B63\u5728\u83B7\u53D6\u95F2\u9C7C\u6388\u6743\u5730\u5740...`));let{authData:t,qrUrl:n,setStatus:o,closeServer:r}=await dt();console.log($.green(`\u2705 \u6388\u6743\u4E8C\u7EF4\u7801\u5DF2\u751F\u6210
30
- `)),console.log($.cyan(` \u94FE\u63A5: ${n}`)),console.log($.gray(` \u6216\u590D\u5236\u94FE\u63A5\u6253\u5F00: ${t.url}`)),R(n),console.log($.yellow(`
22
+ `)),l}finally{s()}}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),s=Math.floor((Date.now()-e.timestamp)/(1e3*60*60*24));console.log(x.green(`\u2705 \u5DF2\u767B\u5F55
26
+ `)),await xo(r,n,s)}},Gt=null;function R(){return Gt||(Gt=new ft),Gt}import q from"chalk";var Io=gt;async function So(){return Io.get("mms/xianyu/auth/url")}async function Co(o){let t=new URLSearchParams({state:o});return Io.get("mms/xianyu/auth/status",t)}async function ht(){let o=await So(),t=await Lt(o.url,o.url);return{authData:o,...t}}async function nt(o,t,e,r,n){return F(()=>Co(o),{interval:e,timeout:t,condition:s=>s.status==="success"?(console.log(q.green(`
27
+ \u2705 \u6388\u6743\u6210\u529F\uFF01\u5E97\u94FA: ${s.shopName} (${s.shopId})`)),n?.("success"),!0):s.status==="expired"?(console.log(q.red(`
28
+ \u23F0 \u6388\u6743\u94FE\u63A5\u5DF2\u8FC7\u671F`)),n?.("expired"),!0):!1},r)}async function Jt(o){console.log(q.cyan(`
29
+ \u{1F517} \u6B63\u5728\u83B7\u53D6\u95F2\u9C7C\u6388\u6743\u5730\u5740...`));let{authData:t,qrUrl:e,setStatus:r,closeServer:n}=await ht();console.log(q.green(`\u2705 \u6388\u6743\u4E8C\u7EF4\u7801\u5DF2\u751F\u6210
30
+ `)),console.log(q.cyan(` \u94FE\u63A5: ${e}`)),console.log(q.gray(` \u6216\u590D\u5236\u94FE\u63A5\u6253\u5F00: ${t.url}`)),B(e),console.log(q.yellow(`
31
31
  \u23F3 \u7B49\u5F85\u6388\u6743...
32
- `));let s=t.expireTime?Number.parseInt(t.expireTime,10):3e5,i=t.pollInterval?Number.parseInt(t.pollInterval,10):1e3;try{let a=await Z(t.state,s,i,e,o);if(a.status==="success")return a;throw new x("\u95F2\u9C7C\u6388\u6743\u5931\u8D25: "+(a.status==="expired"?"\u94FE\u63A5\u5DF2\u8FC7\u671F":"\u672A\u77E5\u72B6\u6001"))}finally{r()}}import O from"chalk";function b(e){if(e instanceof x)console.error(O.red(`
33
- \u25B2 ${e.message}`)),console.error(O.gray(`\u2192 \u8BF7\u5148\u8FD0\u884C: r2-cli auth login
34
- `));else if(e instanceof T)console.error(O.red(`\u25B2 \u64CD\u4F5C\u5931\u8D25: ${e.message}`)),e.status&&console.error(O.gray(` \u72B6\u6001\u7801: ${e.status}`));else if(e instanceof D)console.error(O.red(`\u25B2 \u914D\u7F6E\u6587\u4EF6\u5F02\u5E38: ${e.message}`)),e.path&&console.error(O.gray(` \u8DEF\u5F84: ${e.path}`)),console.error(O.gray(`\u2192 \u8BF7\u5C1D\u8BD5\u91CD\u65B0\u767B\u5F55: r2-cli auth login
35
- `));else{let t=e instanceof Error?e.message:String(e);console.error(O.red(`\u25B2 ${t}`))}process.exit(1)}function Lt(e){console.log(JSON.stringify({success:!1,error:e})),process.exit(1)}function p(e){return async t=>{try{await e(t)}catch(n){if(t.json){let o=n instanceof Error?n.message:String(n);console.log(JSON.stringify({success:!1,error:o})),process.exit(1)}b(n)}}}function ut(e){return async(...t)=>{try{await e(...t)}catch(n){let o=n instanceof Error?n.message:String(n);Lt(o)}}}var fo=new Set(["accessToken","refreshExpireIn"]);function ce(e){return e.map(t=>{let n={};for(let[o,r]of Object.entries(t))fo.has(o)||(n[o]=r);return n})}function Ot(){let e=new le("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 le("poll").description("\u8F6E\u8BE2\u767B\u5F55\u72B6\u6001\uFF08\u4F9B AI Agent \u4F7F\u7528\uFF09").requiredOption("--token <qrToken>","\u4E8C\u7EF4\u7801 token").option("--expire <ms>","\u8FC7\u671F\u65F6\u95F4\uFF08\u6BEB\u79D2\uFF09","300000").option("--interval <ms>","\u8F6E\u8BE2\u95F4\u9694\uFF08\u6BEB\u79D2\uFF09","1000").action(ut(async n=>{let r=await N().waitForLogin(n.token,Number.parseInt(n.expire,10),Number.parseInt(n.interval,10));console.log(JSON.stringify({success:!0,...r}))}));return e.addCommand(t),e.action(async n=>{try{if(n.json){let o=N(),{qrData:r,qrUrl:s,setStatus:i,closeServer:a}=await o.generateQR(),c=Number.parseInt(r.expireTime,10),u=Number.parseInt(r.pollInterval,10);console.log(JSON.stringify({qrToken:r.qrToken,expireTimeMs:c,pollIntervalMs:u,url:`https://m.puresnake.com/r2/auth/login?qrToken=${r.qrContent}&from=wechat`,qrUrl:s},null,2)),R(s);try{let d=await o.waitForLogin(r.qrToken,c,u,void 0,i,!0);console.log(JSON.stringify({success:!0,userInfo:d.userInfo}))}catch(d){let w=d instanceof Error?d.message:String(d);console.log(JSON.stringify({success:!1,error:w}))}finally{setTimeout(a,1e3)}}else await N().login()}catch(o){if(n.json){let r=o instanceof Error?o.message:String(o);console.log(JSON.stringify({success:!1,error:r})),process.exit(1)}b(o)}}),e}import{Command as ho}from"commander";function Ut(){let e=new ho("logout");return e.description("\u9000\u51FA\u767B\u5F55"),e.action(async()=>{try{await N().logout()}catch(t){b(t)}}),e}import{Command as yo}from"commander";function Dt(){let e=new yo("status");return e.description("\u67E5\u770B\u767B\u5F55\u72B6\u6001"),e.action(async()=>{try{await N().status()}catch(t){b(t)}}),e}import{Command as de}from"commander";function Et(){let e=new de("xianyu");e.description("\u95F2\u9C7C\u5E97\u94FA\u6388\u6743").option("--json","\u8F93\u51FA JSON\uFF08\u4F9B AI Agent \u4F7F\u7528\uFF09");let t=new de("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").option("--expire <ms>","\u8FC7\u671F\u65F6\u95F4\uFF08\u6BEB\u79D2\uFF09","300000").option("--interval <ms>","\u8F6E\u8BE2\u95F4\u9694\uFF08\u6BEB\u79D2\uFF09","1000").action(ut(async n=>{let o=await Z(n.state,Number.parseInt(n.expire,10),Number.parseInt(n.interval,10));o.status==="success"?console.log(JSON.stringify({success:!0,shopId:o.shopId,shopName:o.shopName})):Lt(`\u6388\u6743\u72B6\u6001: ${o.status}`)}));return e.addCommand(t),e.action(async n=>{try{if(n.json){let{authData:o,qrUrl:r,setStatus:s,closeServer:i}=await dt(),a=o.expireTime?Number.parseInt(o.expireTime,10):3e5,c=o.pollInterval?Number.parseInt(o.pollInterval,10):1e3;console.log(JSON.stringify({state:o.state,expireTimeMs:a,pollIntervalMs:c,qrUrl:r},null,2)),R(r);try{let u=await Z(o.state,a,c,void 0,s);u.status==="success"?console.log(JSON.stringify({success:!0,shopId:u.shopId,shopName:u.shopName})):(console.log(JSON.stringify({success:!1,error:`\u6388\u6743\u72B6\u6001: ${u.status}`})),process.exit(1))}catch(u){let d=u instanceof Error?u.message:String(u);console.log(JSON.stringify({success:!1,error:d})),process.exit(1)}finally{setTimeout(i,1e3)}}else await Nt()}catch(o){if(n.json){let r=o instanceof Error?o.message:String(o);console.log(JSON.stringify({success:!1,error:r})),process.exit(1)}b(o)}}),e}import{Command as Xo}from"commander";import{Command as Io}from"commander";import v from"chalk";import{select as $t,input as So,confirm as Co}from"@inquirer/prompts";import{readFileSync as wo}from"node:fs";import{basename as xo}from"node:path";var I=it;function F(e){let t=new URLSearchParams;for(let[n,o]of Object.entries(e))o!=null&&o!==""&&t.append(n,String(o));return t}async function jt(e){return I.post("mms/goods/listing/up/xianyu",e)}async function ue(e){return I.get("mms/goods/listing/get",F({...e}))}async function me(e){return I.post("mms/goods/listing/down/xianyu",e)}async function pe(e){return I.post("mms/goods/listing/update/xyPrice",e)}async function ge(e){return I.get("mms/goods/listing/list",e?F({...e}):void 0)}async function mt(){return await I.get("mms/user/shop/list")??[]}async function pt(){return await I.get("mms/user/stock/list")??[]}async function gt(e){let t=e?F({...e}):void 0;return I.get("mms/seller/goods/select/list",t)}async function fe(e,t){let n=[];for(let o of t){let r=wo(o),s=xo(o),i=new FormData;i.append("file",new Blob([r]),s);let a=await I.upload(`platform/xy/media/upload?shopId=${encodeURIComponent(e)}`,i);n.push(a)}return n}async function he(e){return I.post("mms/goods/listing/hang/up/xianyu",e)}async function ye(e=16){return await I.get("platform/xy/cat",F({spBizType:e}))??[]}async function we(e){return await I.get("platform/xy/props",F({channelCatId:e}))??[]}async function xe(e,t,n){return await I.get("platform/xy/props/value",F({channelCatId:e,propId:t,key:n}))??[]}var Po=2e3,To=1e4;function bo(e){let t=e.status?.toLowerCase()??"";return t===""||t==="init"||t==="pending"||t==="processing"}async function Ie(e,t,n,o){o||process.stdout.write(v.cyan("\u23F3 \u6B63\u5728\u67E5\u8BE2\u4E0A\u67B6\u8FDB\u5EA6..."));let r=await J(()=>ue({stockGoodsId:e,shopId:t,platform:n}),{interval:Po,timeout:To,condition:s=>!bo(s)});return o||process.stdout.write("\r"+" ".repeat(30)+"\r"),r}function Se(){let e=new Io("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(p(async t=>{if(t.json&&!(t.stockGoodsId&&t.shopId&&t.price)&&(console.log(JSON.stringify({success:!1,error:"Agent \u6A21\u5F0F\u9700\u8981 --stock-goods-id, --shop-id, --price"})),process.exit(1)),t.stockGoodsId&&t.shopId&&t.price){let l=Number(t.stockGoodsId),P=t.shopId,yt=Number(t.price),B=t.platform,Xe=await jt({stockGoodsId:l,shopId:P,price:yt,platform:B}),wt=await Ie(l,P,B,t.json);if(t.json)console.log(JSON.stringify({success:!0,data:{submit:Xe,listing:wt}},null,2));else{let Qe=wt.status?.toLowerCase()!=="failed";console.log(Qe?v.green("\u2713 \u4E0A\u67B6\u6210\u529F"):v.red("\u2717 \u4E0A\u67B6\u5931\u8D25")),console.log(JSON.stringify(wt,null,2))}return}let n=await mt();if(n.length===0){console.log(v.yellow("\u6CA1\u6709\u5DF2\u6388\u6743\u5E97\u94FA\uFF0C\u8BF7\u5148\u8FD0\u884C r2-cli auth xianyu \u6388\u6743"));return}let o=await $t({message:"\u9009\u62E9\u5E97\u94FA",choices:n.map(l=>({name:`${l.shopName} (${l.platform})`,value:l.shopId}))}),r=await pt();if(r.length===0){console.log(v.yellow("\u6CA1\u6709\u53EF\u7528\u7684\u4ED3\u5E93"));return}let s=await $t({message:"\u9009\u62E9\u4ED3\u5E93",choices:r.map(l=>({name:l.stockName,value:l.stockId}))}),i=await gt({stockId:s,size:100});if(!i.items?.length){console.log(v.yellow("\u8BE5\u4ED3\u5E93\u6CA1\u6709\u53EF\u9009\u7684\u5546\u54C1"));return}let a=await $t({message:"\u9009\u62E9\u5546\u54C1",choices:i.items.map(l=>({name:`${l.goodsName} ${l.size?`| ${l.size}`:""} | \xA5${l.salePrice}`,value:l.stockGoodsId}))}),c=await So({message:"\u8F93\u5165\u4E0A\u67B6\u4EF7\u683C",default:i.items.find(l=>l.stockGoodsId===a)?.salePrice?.toString()??"",validate:l=>Number(l)>0?!0:"\u4EF7\u683C\u5FC5\u987B\u4E3A\u6B63\u6570"});if(!await Co({message:`\u786E\u8BA4\u4E0A\u67B6\uFF1F\u4EF7\u683C \xA5${c}`,default:!0})){console.log(v.gray("\u5DF2\u53D6\u6D88"));return}let d=Number(a);await jt({stockGoodsId:d,shopId:o,price:Number(c),platform:"xianyu"}),console.log(v.green("\u2713 \u4E0A\u67B6\u5DF2\u63D0\u4EA4\uFF0C\u6B63\u5728\u67E5\u8BE2\u8FDB\u5EA6..."));let w=await Ie(d,o,"xianyu"),q=w.status?.toLowerCase()!=="failed";console.log(q?v.green("\u2713 \u4E0A\u67B6\u6210\u529F"):v.red("\u2717 \u4E0A\u67B6\u5931\u8D25")),console.log(JSON.stringify(w,null,2))})),e}import{Command as No}from"commander";import be from"chalk";function Ae(){let e=new No("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(p(async t=>{let n=await mt();if(t.json){console.log(JSON.stringify(ce(n),null,2));return}if(!n.length){console.log(be.yellow("\u672A\u627E\u5230\u5DF2\u6388\u6743\u7684\u5E97\u94FA")),console.log(be.gray(" \u63D0\u793A: \u8BF7\u5148\u5728\u7B2C\u4E8C\u56DE\u5408 APP \u4E2D\u6388\u6743\u5E97\u94FA"));return}let{ShopsTable:o}=await Promise.resolve().then(()=>(Te(),Pe)),{renderComponent:r}=await Promise.resolve().then(()=>(ct(),at));r(o,{shops:n,platform:"all"})})),e}import{Command as Do}from"commander";import Eo from"chalk";function Re(){let e=new Do("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(p(async t=>{let n=await pt();if(t.json){console.log(JSON.stringify(n,null,2));return}if(!n.length){console.log(Eo.yellow("\u672A\u627E\u5230\u4ED3\u5E93\u4FE1\u606F"));return}let{StocksTable:o}=await Promise.resolve().then(()=>(ke(),ve)),{renderComponent:r}=await Promise.resolve().then(()=>(ct(),at));r(o,{stocks:n})})),e}import{Command as jo}from"commander";import W from"chalk";function Ne(){let e=new jo("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","20").option("--json","\u8F93\u51FA JSON\uFF08\u4F9B AI Agent \u4F7F\u7528\uFF09"),e.action(p(async t=>{let o=await gt({stockId:t.stockId||void 0,stockGoodsId:t.stockGoodsId||void 0,page:Number(t.page)||1,size:Number(t.size)||20})??{items:[],total:0};if(t.json){o.items?.length?console.log(JSON.stringify(o,null,2)):console.log(JSON.stringify({...o,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(!o.items?.length){console.log(W.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(W.cyan(`
36
- \u9009\u54C1\u5546\u54C1\uFF08\u5171 ${o.total} \u4EF6\uFF0C\u7B2C ${o.page} \u9875\uFF09
37
- `));for(let r of o.items)console.log(` ${W.bold(r.goodsName)} ${r.size?W.gray(`| ${r.size}`):""}`),console.log(` \u54C1\u724C: ${r.brand} \u5EFA\u8BAE\u552E\u4EF7: \xA5${r.salePrice} stockGoodsId: ${W.green(r.stockGoodsId)}`),console.log(W.gray(` \u5206\u7C7B: ${r.cate1Name} > ${r.cate2Name} > ${r.cate3Name}`)),console.log()})),e}import{Command as $o}from"commander";import Le from"chalk";var qo={init:"\u5F85\u4E0A\u67B6",up:"\u5DF2\u4E0A\u67B6",down:"\u5DF2\u4E0B\u67B6",fail:"\u5931\u8D25"};function Oe(){let e=new $o("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\uFF09").option("-p, --platform <platform>","\u5E73\u53F0","xianyu").option("--json","\u8F93\u51FA JSON\uFF08\u4F9B AI Agent \u4F7F\u7528\uFF09"),e.action(p(async t=>{let o=await ge({id:t.id,stockGoodsId:t.stockGoodsId?Number(t.stockGoodsId):void 0,shopId:t.shopId,stockId:t.stockId,status:t.status,platform:t.platform})??{list:[],total:0};if(t.json){o.list?.length?console.log(JSON.stringify(o,null,2)):console.log(JSON.stringify({...o,hint:"\u6682\u65E0\u4E0A\u67B6\u8BB0\u5F55"},null,2));return}if(!o.list?.length){console.log(Le.yellow("\u6682\u65E0\u4E0A\u67B6\u8BB0\u5F55"));return}console.log(Le.green(`\u2705 \u5171 ${o.total} \u6761\u8BB0\u5F55
38
- `));for(let r of o.list){let s=qo[r.status]??r.status;console.log(` ID: ${r.id} | \u72B6\u6001: ${s} | \u4EF7\u683C: ${r.price} | stockGoodsId: ${r.stockGoodsId}`)}})),e}import{Command as Bo}from"commander";import Mt from"chalk";function Ue(){let e=new Bo("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(p(async t=>{if(!t.id&&!(t.stockGoodsId&&t.shopId)){t.json&&(console.log(JSON.stringify({success:!1,error:"\u8BF7\u6307\u5B9A\u4E0B\u67B6\u6761\u4EF6\uFF1A--id <id> \u6216 --stock-goods-id <id> --shop-id <id>"})),process.exit(1)),console.log(Mt.yellow("\u8BF7\u6307\u5B9A\u4E0B\u67B6\u6761\u4EF6\uFF1A--id <id> \u6216 --stock-goods-id <id> --shop-id <id>"));return}let n={};t.id&&(n.id=t.id),t.stockGoodsId&&(n.stockGoodsId=Number(t.stockGoodsId)),t.shopId&&(n.shopId=t.shopId),t.json||console.log(Mt.cyan("\u{1F4E6} \u6B63\u5728\u4E0B\u67B6\u5546\u54C1..."));let o=await me(n);t.json?console.log(JSON.stringify({success:!0,data:o},null,2)):(console.log(Mt.green("\u2705 \u4E0B\u67B6\u6210\u529F")),console.log(JSON.stringify(o,null,2)))})),e}import{Command as Go}from"commander";import ft from"chalk";function De(){let e=new Go("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(p(async t=>{if(!t.price){t.json&&(console.log(JSON.stringify({success:!1,error:"--price <amount> \u4E3A\u5FC5\u586B\u53C2\u6570"})),process.exit(1)),console.log(ft.yellow("--price <amount> \u4E3A\u5FC5\u586B\u53C2\u6570"));return}if(!t.id&&!(t.stockGoodsId&&t.shopId)){t.json&&(console.log(JSON.stringify({success:!1,error:"\u8BF7\u6307\u5B9A\u5546\u54C1\uFF1A--id <id> \u6216 --stock-goods-id <id> --shop-id <id>"})),process.exit(1)),console.log(ft.yellow("\u8BF7\u6307\u5B9A\u5546\u54C1\uFF1A--id <id> \u6216 --stock-goods-id <id> --shop-id <id>"));return}let n={price:Number(t.price)};t.id&&(n.id=t.id),t.stockGoodsId&&(n.stockGoodsId=Number(t.stockGoodsId)),t.shopId&&(n.shopId=t.shopId),t.json||console.log(ft.cyan(`\u{1F4B0} \u6B63\u5728\u4FEE\u6539\u4EF7\u683C\u4E3A ${t.price}...`));let o=await pe(n);t.json?console.log(JSON.stringify({success:!0,data:o},null,2)):(console.log(ft.green("\u2705 \u4EF7\u683C\u4FEE\u6539\u6210\u529F")),console.log(JSON.stringify(o,null,2)))})),e}import{Command as V}from"commander";import y from"chalk";var Jo={100:"\u5168\u65B0",[-1]:"\u51C6\u65B0",99:"99\u65B0",95:"95\u65B0",90:"9\u65B0"};function Ee(){let e=new V("hang-up");return e.description("\u95F2\u9C7C\u6302\u552E\u4E0A\u67B6\uFF08\u5B8C\u6574\u5546\u54C1\u4FE1\u606F\u6A21\u5F0F\uFF09"),e.addCommand(new V("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(p(async t=>{let n=await ye(Number(t.spBizType));if(t.json){console.log(JSON.stringify(n,null,2));return}let o=new Map;for(let r of n){let s=String(r.catId);o.has(s)||o.set(s,{catName:r.catName,children:[]}),o.get(s).children.push({channel:r.channel,channelCatId:r.channelCatId})}for(let[,r]of o){console.log(y.bold(r.catName));for(let s of r.children)console.log(` ${s.channel} (channelCatId: ${y.green(s.channelCatId)})`)}}))),e.addCommand(new V("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(p(async t=>{let n=await we(t.channelCatId);if(t.json){console.log(JSON.stringify(n,null,2));return}for(let o of n)if(console.log(y.bold(`
39
- ${o.propName} (propId: ${o.propId})`)),o.propsValues?.length)for(let r of o.propsValues)console.log(` ${r.valueName} (valueId: ${r.valueId})`);else console.log(y.gray(" \uFF08\u4F7F\u7528 brands \u5B50\u547D\u4EE4\u641C\u7D22\uFF09"))}))),e.addCommand(new V("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(p(async t=>{let n=await xe(t.channelCatId,t.propId,t.key);if(t.json){console.log(JSON.stringify(n,null,2));return}if(!n.length){console.log(y.yellow("\u672A\u627E\u5230\u5339\u914D\u7684\u54C1\u724C"));return}for(let o of n)console.log(` ${o.valueName} (valueId: ${o.valueId})`)}))),e.addCommand(new V("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(p(async t=>{let n=t.files.split(",").map(r=>r.trim()).filter(Boolean);if(n.length===0){t.json&&(console.log(JSON.stringify({success:!1,error:"\u8BF7\u63D0\u4F9B\u81F3\u5C11\u4E00\u5F20\u56FE\u7247"})),process.exit(1)),console.log(y.yellow("\u8BF7\u63D0\u4F9B\u81F3\u5C11\u4E00\u5F20\u56FE\u7247"));return}t.json||console.log(y.cyan(`\u6B63\u5728\u4E0A\u4F20 ${n.length} \u5F20\u56FE\u7247...`));let o=await fe(t.shopId,n);if(t.json)console.log(JSON.stringify({success:!0,images:o},null,2));else{console.log(y.green(`\u4E0A\u4F20\u6210\u529F\uFF0C\u5171 ${o.length} \u5F20`));for(let r of o)console.log(` \u56FE\u7247ID: ${r.value}`)}}))),e.addCommand(new V("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: [{"propId":"x","valueId":"y","valueName":"z"}]').option("--brand-name <name>","\u54C1\u724C\u540D\u79F0").option("--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(p(async t=>{let n=t.imageIds.split(",").map(s=>s.trim()),o={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},...t.desc&&{desc:t.desc},...t.size&&{size:t.size},...t.goodsNo&&{goodsNo:t.goodsNo},...t.originalPrice&&{originalPrice:Number(t.originalPrice)},outItemNo:t.outItemNo,divisionId:Number(t.divisionId)||330100,apiAfterSalesDo:{supportFd10msPolicy:!1,supportFd24hsPolicy:!0,supportNfrPolicy:!0,supportSdrPolicy:!0,supportVnrPolicy:!1,supportGpaPolicy:!1,supportFd48hsPolicy:!1},...t.itemAttrs&&{itemAttrList:JSON.parse(t.itemAttrs)}};t.json||(console.log(y.cyan("\u6B63\u5728\u63D0\u4EA4\u6302\u552E...")),console.log(y.gray(` \u6807\u9898: ${o.title}`)),console.log(y.gray(` \u552E\u4EF7: \xA5${o.reservePrice}`)),console.log(y.gray(` \u6210\u8272: ${Jo[o.stuffStatus]??o.stuffStatus}`)),console.log(y.gray(` \u56FE\u7247: ${n.length} \u5F20`)),o.itemAttrList?.length&&console.log(y.gray(` \u5C5E\u6027: ${o.itemAttrList.length} \u9879`)));let r=await he(o);t.json?console.log(JSON.stringify({success:!0,data:r},null,2)):(console.log(y.green("\u6302\u552E\u63D0\u4EA4\u6210\u529F")),console.log(JSON.stringify(r,null,2)))}))),e}function je(){let e=new Xo("goods");return e.description("\u5546\u54C1\u7BA1\u7406"),e.addCommand(Ae()),e.addCommand(Re()),e.addCommand(Ne()),e.addCommand(Oe()),e.addCommand(Ue()),e.addCommand(De()),e.addCommand(Se()),e.addCommand(Ee()),e}import{Command as Qo}from"commander";import k from"chalk";import{promises as _o}from"node:fs";import Mo from"node:path";import Fo from"node:os";import{spawn as zo}from"node:child_process";var ht="@round2ai/r2-cli";function $e(){let e=new Qo("uninstall");return e.description("\u5378\u8F7D R2-CLI \u5E76\u6E05\u9664\u6240\u6709\u914D\u7F6E"),e.action(async()=>{try{console.log(k.yellow(`
40
- \u26A0\uFE0F \u5373\u5C06\u6267\u884C\u4EE5\u4E0B\u64CD\u4F5C\uFF1A`)),console.log(k.gray(" 1. \u5220\u9664\u914D\u7F6E\u76EE\u5F55 ~/.r2-cli/")),console.log(k.gray(` 2. \u5168\u5C40\u5378\u8F7D ${ht}
41
- `));let{confirm:t}=await import("@inquirer/prompts");if(!await t({message:"\u786E\u8BA4\u5378\u8F7D\uFF1F",default:!1})){console.log(k.gray("\u5DF2\u53D6\u6D88\u5378\u8F7D"));return}let o=Mo.join(Fo.homedir(),".r2-cli");try{await _o.rm(o,{recursive:!0,force:!0}),console.log(k.green("\u2705 \u914D\u7F6E\u6587\u4EF6\u5DF2\u6E05\u9664"))}catch{console.log(k.yellow("\u26A0\uFE0F \u914D\u7F6E\u76EE\u5F55\u4E0D\u5B58\u5728\u6216\u65E0\u6CD5\u5220\u9664\uFF08\u53EF\u5FFD\u7565\uFF09"))}console.log(k.cyan(`\u6B63\u5728\u5378\u8F7D ${ht}...`)),zo("npm",["uninstall","-g",ht],{stdio:"inherit",shell:!0}).on("exit",s=>{s===0?console.log(k.green(`
42
- \u2705 ${ht} \u5DF2\u5378\u8F7D`)):(console.log(k.yellow(`
43
- \u26A0\uFE0F npm \u5378\u8F7D\u5931\u8D25 (exit code: ${s})`)),console.log(k.gray(" \u5982\u901A\u8FC7 yarn/pnpm \u5B89\u88C5\uFF0C\u8BF7\u624B\u52A8\u5378\u8F7D"))),process.exit(s??1)})}catch(t){b(t)}}),e}function qe(e){let t=e.command("auth").description("\u6388\u6743\u7BA1\u7406");t.addCommand(Ot()),t.addCommand(Ut()),t.addCommand(Dt()),t.addCommand(Et()),e.addCommand(je()),e.addCommand($e())}import Be from"chalk";var Ft="@round2ai/r2-cli",Ho=[`https://registry.npmmirror.com/${encodeURIComponent(Ft)}/latest`,`https://registry.npmjs.org/${encodeURIComponent(Ft)}/latest`],Wo=5e3;async function Vo(e){let t=new AbortController,n=setTimeout(()=>t.abort(),Wo);try{let o=await fetch(e,{signal:t.signal});return o.ok?(await o.json()).version??null:null}catch{return null}finally{clearTimeout(n)}}async function Ko(){let e=await Promise.allSettled(Ho.map(Vo));for(let t of e)if(t.status==="fulfilled"&&t.value)return t.value;return null}function Yo(e,t){let n=e.split(".").map(Number),o=t.split(".").map(Number);for(let r=0;r<3;r++)if((n[r]??0)!==(o[r]??0))return(n[r]??0)>(o[r]??0);return!1}async function Ge(e){let t=await Ko();t&&Yo(t,e)&&Zo(e,t)}function Zo(e,t){console.error(Be.yellow(`
44
- Update available: ${e} \u2192 ${t}`)+Be.gray(`
45
- Run: npm update -g ${Ft}
46
- `))}async function nn(){let{default:e}=await import("figlet");console.log(K.cyan.bold(e.textSync("R2-CLI",{font:"Standard",horizontalLayout:"full"}))),console.log(K.gray(` \u5411 AI \u5F00\u653E\u4E8C\u624B\u6F6E\u5962\u4EA4\u6613\u5168\u94FE\u8DEF\u80FD\u529B
47
- `))}function rn(){let e=new tn;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="0.0.0";for(let o of["../package.json","../../package.json"])try{t=JSON.parse(en(on.join(import.meta.dirname,o),"utf-8")).version;break}catch{}t==="0.0.0"&&console.error(K.yellow("Warning: unable to read version from package.json")),e.version(t,"-v, --version");let n=Ge(t);return e.configureOutput({writeErr:o=>{console.error(K.red(o.replace("error:","").trim()))}}),e.action(async()=>{await nn(),e.help()}),qe(e),{program:e,updateCheckPromise:n}}function Je(){console.log(K.gray(`
48
- \u64CD\u4F5C\u5DF2\u53D6\u6D88`)),process.exit(130)}process.on("SIGINT",Je);process.on("SIGTERM",Je);var{program:sn,updateCheckPromise:an}=rn();sn.parse(process.argv);an.catch(e=>{console.error(K.gray(`[update-check] ${e instanceof Error?e.message:String(e)}`))});
32
+ `));let s=t.expireTime?Number.parseInt(t.expireTime,10):3e5,i=t.pollInterval?Number.parseInt(t.pollInterval,10):1e3;try{let a=await nt(t.state,s,i,o,r);if(a.status==="success")return a;throw new S("\u95F2\u9C7C\u6388\u6743\u5931\u8D25: "+(a.status==="expired"?"\u94FE\u63A5\u5DF2\u8FC7\u671F":"\u672A\u77E5\u72B6\u6001"))}finally{n()}}import j from"chalk";function v(o){if(o instanceof S)console.error(j.red(`
33
+ \u25B2 ${o.message}`)),console.error(j.gray(`\u2192 \u8BF7\u5148\u8FD0\u884C: r2-cli auth login
34
+ `));else if(o instanceof A)console.error(j.red(`\u25B2 \u64CD\u4F5C\u5931\u8D25: ${o.message}`)),o.status&&console.error(j.gray(` \u72B6\u6001\u7801: ${o.status}`));else if(o instanceof $)console.error(j.red(`\u25B2 \u914D\u7F6E\u6587\u4EF6\u5F02\u5E38: ${o.message}`)),o.path&&console.error(j.gray(` \u8DEF\u5F84: ${o.path}`)),console.error(j.gray(`\u2192 \u8BF7\u5C1D\u8BD5\u91CD\u65B0\u767B\u5F55: r2-cli auth login
35
+ `));else{let t=o instanceof Error?o.message:String(o);console.error(j.red(`\u25B2 ${t}`))}process.exit(1)}function qt(o){console.log(JSON.stringify({success:!1,error:o})),process.exit(1)}function g(o){return async t=>{try{await o(t)}catch(e){if(t.json){let r=e instanceof Error?e.message:String(e),n=e instanceof A?e.status:void 0;console.log(JSON.stringify({success:!1,error:r,...n!=null&&{status:n}})),process.exit(1)}v(e)}}}function yt(o){return async(...t)=>{try{await o(...t)}catch(e){let r=e instanceof Error?e.message:String(e);qt(r)}}}var je=new Set(["accessToken","refreshExpireIn"]);function To(o){return o.map(t=>{let e={};for(let[r,n]of Object.entries(t))je.has(r)||(e[r]=n);return e})}async function wt(o){let{qrInfo:t,qrUrl:e,setStatus:r,closeServer:n,waitArgs:s}=await o.generate();console.log(JSON.stringify(t,null,2)),B(e);try{let i=await o.waitResult(s,r);console.log(JSON.stringify(o.formatSuccess(i)))}catch(i){let a=i instanceof Error?i.message:String(i);console.log(JSON.stringify({success:!1,error:a})),process.exit(1)}finally{setTimeout(n,1e3)}}function Xt(){let o=new bo("login");o.description("\u626B\u7801\u767B\u5F55 Round2AI \u8D26\u6237").option("--json","\u8F93\u51FA JSON\uFF08\u4F9B AI Agent \u4F7F\u7528\uFF09");let t=new bo("poll").description("\u8F6E\u8BE2\u767B\u5F55\u72B6\u6001\uFF08\u4F9B AI Agent \u4F7F\u7528\uFF09").requiredOption("--token <qrToken>","\u4E8C\u7EF4\u7801 token").option("--expire <ms>","\u8FC7\u671F\u65F6\u95F4\uFF08\u6BEB\u79D2\uFF09","300000").option("--interval <ms>","\u8F6E\u8BE2\u95F4\u9694\uFF08\u6BEB\u79D2\uFF09","1000").action(yt(async e=>{let n=await R().waitForLogin(e.token,Number.parseInt(e.expire,10),Number.parseInt(e.interval,10));console.log(JSON.stringify({success:!0,...n}))}));return o.addCommand(t),o.action(async e=>{try{e.json?await wt({generate:async()=>{let r=R(),{qrData:n,qrUrl:s,setStatus:i,closeServer:a}=await r.generateQR(),l=Number.parseInt(n.expireTime,10),w=Number.parseInt(n.pollInterval,10);return{qrInfo:{qrToken:n.qrToken,expireTimeMs:l,pollIntervalMs:w,url:`https://m.puresnake.com/r2/auth/login?qrToken=${n.qrContent}&from=wechat`,qrUrl:s},qrUrl:s,setStatus:i,closeServer:a,waitArgs:{qrToken:n.qrToken,expireMs:l,intervalMs:w}}},waitResult:({qrToken:r,expireMs:n,intervalMs:s},i)=>R().waitForLogin(r,n,s,void 0,i,!0),formatSuccess:r=>({success:!0,userInfo:r.userInfo})}):await R().login()}catch(r){if(e.json){let n=r instanceof Error?r.message:String(r);console.log(JSON.stringify({success:!1,error:n})),process.exit(1)}v(r)}}),o}import{Command as Ee}from"commander";function _t(){let o=new Ee("logout");return o.description("\u9000\u51FA\u767B\u5F55"),o.action(async()=>{try{await R().logout()}catch(t){v(t)}}),o}import{Command as $e}from"commander";function Qt(){let o=new $e("status");return o.description("\u67E5\u770B\u767B\u5F55\u72B6\u6001"),o.action(async()=>{try{await R().status()}catch(t){v(t)}}),o}import{Command as Po}from"commander";function Mt(){let o=new Po("xianyu");o.description("\u95F2\u9C7C\u5E97\u94FA\u6388\u6743").option("--json","\u8F93\u51FA JSON\uFF08\u4F9B AI Agent \u4F7F\u7528\uFF09");let t=new Po("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").option("--expire <ms>","\u8FC7\u671F\u65F6\u95F4\uFF08\u6BEB\u79D2\uFF09","300000").option("--interval <ms>","\u8F6E\u8BE2\u95F4\u9694\uFF08\u6BEB\u79D2\uFF09","1000").action(yt(async e=>{let r=await nt(e.state,Number.parseInt(e.expire,10),Number.parseInt(e.interval,10));r.status==="success"?console.log(JSON.stringify({success:!0,shopId:r.shopId,shopName:r.shopName})):qt(`\u6388\u6743\u72B6\u6001: ${r.status}`)}));return o.addCommand(t),o.action(async e=>{try{e.json?await wt({generate:async()=>{let{authData:r,qrUrl:n,setStatus:s,closeServer:i}=await ht(),a=r.expireTime?Number.parseInt(r.expireTime,10):3e5,l=r.pollInterval?Number.parseInt(r.pollInterval,10):1e3;return{qrInfo:{state:r.state,expireTimeMs:a,pollIntervalMs:l,qrUrl:n},qrUrl:n,setStatus:s,closeServer:i,waitArgs:{state:r.state,expireMs:a,intervalMs:l}}},waitResult:async({state:r,expireMs:n,intervalMs:s},i)=>{let a=await nt(r,n,s,void 0,i);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 Jt()}catch(r){if(e.json){let n=r instanceof Error?r.message:String(r);console.log(JSON.stringify({success:!1,error:n})),process.exit(1)}v(r)}}),o}import{Command as gr}from"commander";import{Command as Je}from"commander";import L from"chalk";import{select as zt,input as qe,confirm as Xe}from"@inquirer/prompts";import{readFileSync as Be}from"node:fs";import{basename as Ge}from"node:path";function X(o){let t=new URLSearchParams;for(let[e,r]of Object.entries(o))r!=null&&r!==""&&t.append(e,String(r));return t}var C=gt;async function Ft(o){return C.post("mms/goods/listing/up/xianyu",o)}async function Ao(o){return C.get("mms/goods/listing/get",X({...o}))}async function ko(o){return C.post("mms/goods/listing/down/xianyu",o)}async function vo(o){return C.post("mms/goods/listing/update/xyPrice",o)}async function No(o){return C.post("mms/goods/listing/update/goodsInfo",o)}async function Ro(o){return C.get("mms/goods/listing/list",o?X({...o}):void 0)}async function xt(){return await C.get("mms/user/shop/list")??[]}async function It(){return await C.get("mms/user/stock/list")??[]}async function St(o){let t=o?X({...o}):void 0;return C.get("mms/seller/goods/select/list",t)}async function Lo(o,t){let e=[];for(let r of t){let n=Be(r),s=Ge(r),i=new FormData;i.append("file",new Blob([n]),s);let a=await C.upload(`platform/xy/media/upload?shopId=${encodeURIComponent(o)}`,i);e.push(a)}return e}async function Oo(o){return C.post("mms/goods/listing/hang/up/xianyu",o)}async function Do(o=16){return await C.get("platform/xy/cat",X({spBizType:o}))??[]}async function Uo(o){return await C.get("platform/xy/props",X({channelCatId:o}))??[]}async function jo(o,t,e){return await C.get("platform/xy/props/value",X({channelCatId:o,propId:t,key:e}))??[]}var _e=2e3,Qe=1e4;function Me(o){let t=o.status?.toLowerCase()??"";return t===""||t==="init"||t==="pending"||t==="processing"}async function Eo(o,t,e,r){r||process.stdout.write(L.cyan("\u23F3 \u6B63\u5728\u67E5\u8BE2\u4E0A\u67B6\u8FDB\u5EA6..."));let n=await F(()=>Ao({stockGoodsId:o,shopId:t,platform:e}),{interval:_e,timeout:Qe,condition:s=>!Me(s)});return r||process.stdout.write("\r"+" ".repeat(30)+"\r"),n}function $o(){let o=new Je("up");return o.description("\u4E0A\u67B6\u5546\u54C1\u5230\u95F2\u9C7C"),o.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(g(async t=>{if(t.json&&!(t.stockGoodsId&&t.shopId&&t.price)&&(console.log(JSON.stringify({success:!1,error:"Agent \u6A21\u5F0F\u9700\u8981 --stock-goods-id, --shop-id, --price"})),process.exit(1)),t.stockGoodsId&&t.shopId&&t.price){let d=Number(t.stockGoodsId),k=t.shopId,At=Number(t.price),Q=t.platform,de=await Ft({stockGoodsId:d,shopId:k,price:At,platform:Q}),kt=await Eo(d,k,Q,t.json);if(t.json)console.log(JSON.stringify({success:!0,data:{submit:de,listing:kt}},null,2));else{let ue=kt.status?.toLowerCase()!=="failed";console.log(ue?L.green("\u2713 \u4E0A\u67B6\u6210\u529F"):L.red("\u2717 \u4E0A\u67B6\u5931\u8D25")),console.log(JSON.stringify(kt,null,2))}return}let e=await xt();if(e.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 zt({message:"\u9009\u62E9\u5E97\u94FA",choices:e.map(d=>({name:`${d.shopName} (${d.platform})`,value:d.shopId}))}),n=await It();if(n.length===0){console.log(L.yellow("\u6CA1\u6709\u53EF\u7528\u7684\u4ED3\u5E93"));return}let s=await zt({message:"\u9009\u62E9\u4ED3\u5E93",choices:n.map(d=>({name:d.stockName,value:d.stockId}))}),i=await St({stockId:s,size:100});if(!i.items?.length){console.log(L.yellow("\u8BE5\u4ED3\u5E93\u6CA1\u6709\u53EF\u9009\u7684\u5546\u54C1"));return}let a=await zt({message:"\u9009\u62E9\u5546\u54C1",choices:i.items.map(d=>({name:`${d.goodsName} ${d.size?`| ${d.size}`:""} | \xA5${d.salePrice}`,value:d.stockGoodsId}))}),l=await qe({message:"\u8F93\u5165\u4E0A\u67B6\u4EF7\u683C",default:i.items.find(d=>d.stockGoodsId===a)?.salePrice?.toString()??"",validate:d=>Number(d)>0?!0:"\u4EF7\u683C\u5FC5\u987B\u4E3A\u6B63\u6570"});if(!await Xe({message:`\u786E\u8BA4\u4E0A\u67B6\uFF1F\u4EF7\u683C \xA5${l}`,default:!0})){console.log(L.gray("\u5DF2\u53D6\u6D88"));return}let m=Number(a);await Ft({stockGoodsId:m,shopId:r,price:Number(l),platform:"xianyu"}),console.log(L.green("\u2713 \u4E0A\u67B6\u5DF2\u63D0\u4EA4\uFF0C\u6B63\u5728\u67E5\u8BE2\u8FDB\u5EA6..."));let P=await Eo(m,r,"xianyu"),_=P.status?.toLowerCase()!=="failed";console.log(_?L.green("\u2713 \u4E0A\u67B6\u6210\u529F"):L.red("\u2717 \u4E0A\u67B6\u5931\u8D25")),console.log(JSON.stringify(P,null,2))})),o}import{Command as Ve}from"commander";import qo from"chalk";function Xo(){let o=new Ve("shops");return o.description("\u67E5\u770B\u6240\u6709\u5DF2\u6388\u6743\u5E97\u94FA\uFF08\u8DE8\u5E73\u53F0\uFF09"),o.option("--json","\u8F93\u51FA JSON\uFF08\u4F9B AI Agent \u4F7F\u7528\uFF09"),o.action(g(async t=>{let e=await xt();if(t.json){console.log(JSON.stringify(To(e),null,2));return}if(!e.length){console.log(qo.yellow("\u672A\u627E\u5230\u5DF2\u6388\u6743\u7684\u5E97\u94FA")),console.log(qo.gray(" \u63D0\u793A: \u8BF7\u5148\u5728\u7B2C\u4E8C\u56DE\u5408 APP \u4E2D\u6388\u6743\u5E97\u94FA"));return}let{ShopsTable:r}=await Promise.resolve().then(()=>(Jo(),Go)),{renderComponent:n}=await Promise.resolve().then(()=>(rt(),pt));n(r,{shops:e,platform:"all"})})),o}import{Command as tr}from"commander";import or from"chalk";function Mo(){let o=new tr("stocks");return o.description("\u67E5\u770B\u6240\u6709\u4ED3\u5E93"),o.option("--json","\u8F93\u51FA JSON\uFF08\u4F9B AI Agent \u4F7F\u7528\uFF09"),o.action(g(async t=>{let e=await It();if(t.json){console.log(JSON.stringify(e,null,2));return}if(!e.length){console.log(or.yellow("\u672A\u627E\u5230\u4ED3\u5E93\u4FE1\u606F"));return}let{StocksTable:r}=await Promise.resolve().then(()=>(Qo(),_o)),{renderComponent:n}=await Promise.resolve().then(()=>(rt(),pt));n(r,{stocks:e})})),o}import{Command as er}from"commander";import Z from"chalk";function Fo(){let o=new er("list");return o.description("\u67E5\u770B\u4ED3\u5E93\u4E2D\u7684\u9009\u54C1\u5546\u54C1"),o.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","20").option("--json","\u8F93\u51FA JSON\uFF08\u4F9B AI Agent \u4F7F\u7528\uFF09"),o.action(g(async t=>{let r=await St({stockId:t.stockId||void 0,stockGoodsId:t.stockGoodsId||void 0,page:Number(t.page)||1,size:Number(t.size)||20})??{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(Z.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(Z.cyan(`
36
+ \u9009\u54C1\u5546\u54C1\uFF08\u5171 ${r.total} \u4EF6\uFF0C\u7B2C ${r.page} \u9875\uFF09
37
+ `));for(let n of r.items)console.log(` ${Z.bold(n.goodsName)} ${n.size?Z.gray(`| ${n.size}`):""}`),console.log(` \u54C1\u724C: ${n.brand} \u5EFA\u8BAE\u552E\u4EF7: \xA5${n.salePrice} stockGoodsId: ${Z.green(n.stockGoodsId)}`),console.log(Z.gray(` \u5206\u7C7B: ${n.cate1Name} > ${n.cate2Name} > ${n.cate3Name}`)),console.log()})),o}import{Command as ar}from"commander";import cr from"chalk";rt();import{Box as p,Text as h}from"ink";import{jsx as c,jsxs as E}from"react/jsx-runtime";var rr={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"}},oo=4,eo=8,Ct=12,ro=10,no=6,so=8;function zo(o,t){return o.length>t?o.slice(0,t-1)+"\u2026":o}function Wo(o){if(!o)return"-";let t=new Date(o),e=r=>String(r).padStart(2,"0");return`${e(t.getMonth()+1)}/${e(t.getDate())} ${e(t.getHours())}:${e(t.getMinutes())}`}function nr({fillWidth:o}){return E(p,{flexDirection:"row",children:[c(p,{width:oo,children:c(h,{bold:!0,color:"white",children:"ID"})}),c(p,{width:eo,children:c(h,{bold:!0,color:"white",children:"\u72B6\u6001"})}),c(p,{width:Ct,children:c(h,{bold:!0,color:"white",children:"\u54C1\u724C"})}),c(p,{width:o,children:c(h,{bold:!0,color:"white",children:"\u5546\u54C1\u540D\u79F0"})}),c(p,{width:ro,children:c(h,{bold:!0,color:"white",children:"\u4EF7\u683C"})}),c(p,{width:no,children:c(h,{bold:!0,color:"white",children:"\u89C4\u683C"})}),c(p,{width:so,children:c(h,{bold:!0,color:"white",children:"\u5E93\u5B58ID"})})]})}function sr({item:o}){return c(p,{flexDirection:"column",children:c(h,{color:"gray",children:` shopId: ${o.shopId} thirdItemNo: ${o.thirdItemNo||"-"} outItemNo: ${o.outItemNo||"-"} \u8D27\u53F7: ${o.goodsNo||"-"} ${o.type||"-"} ${o.platform} \u521B\u5EFA: ${Wo(o.gmtCreate)} \u4FEE\u6539: ${Wo(o.gmtModified)}`})})}function ir({item:o,fillWidth:t}){let e=rr[o.status]??{label:o.status,color:"white"};return E(p,{flexDirection:"column",children:[E(p,{flexDirection:"row",children:[c(p,{width:oo,children:c(h,{color:"gray",children:o.id})}),c(p,{width:eo,children:c(h,{color:e.color,children:e.label})}),c(p,{width:Ct,children:c(h,{color:"cyan",children:zo(o.brandName||"-",Ct-1)})}),c(p,{width:t,children:c(h,{children:zo(o.goodsName,t-1)})}),c(p,{width:ro,children:E(h,{color:"yellow",children:["\xA5",o.price]})}),c(p,{width:no,children:c(h,{color:"gray",children:o.spec||"-"})}),c(p,{width:so,children:c(h,{color:"gray",children:o.stockGoodsId})})]}),c(sr,{item:o})]})}function Ho({items:o,total:t}){let e=process.stdout.columns||80,r=4,n=oo+eo+Ct+ro+no+so,s=Math.max(e-r-n,20),i=n+s;return E(p,{flexDirection:"column",marginTop:1,borderStyle:"round",borderColor:"gray",paddingX:1,children:[E(p,{flexDirection:"row",children:[c(h,{bold:!0,color:"cyan",children:"\u4E0A\u67B6\u5217\u8868"}),E(h,{color:"gray",children:[" \xB7 \u5171 ",t," \u6761"]})]}),E(p,{flexDirection:"column",marginTop:1,children:[c(nr,{fillWidth:s}),c(h,{color:"gray",children:"\u2500".repeat(i)}),o.map(a=>c(ir,{item:a,fillWidth:s},a.id))]})]})}function Vo(){let o=new ar("listing");return o.description("\u67E5\u8BE2\u4E0A\u67B6\u5546\u54C1\u5217\u8868"),o.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\uFF09").option("-p, --platform <platform>","\u5E73\u53F0","xianyu").option("--json","\u8F93\u51FA JSON\uFF08\u4F9B AI Agent \u4F7F\u7528\uFF09"),o.action(g(async t=>{let r=await Ro({id:t.id,stockGoodsId:t.stockGoodsId?Number(t.stockGoodsId):void 0,shopId:t.shopId,stockId:t.stockId,status:t.status,platform:t.platform})??{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(cr.yellow("\u6682\u65E0\u4E0A\u67B6\u8BB0\u5F55"));return}Bt(Ho,{items:r.items,total:r.total})})),o}import{Command as lr}from"commander";import io from"chalk";function Ko(){let o=new lr("down");return o.description("\u4E0B\u67B6\u95F2\u9C7C\u5546\u54C1"),o.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"),o.action(g(async t=>{if(!t.id&&!(t.stockGoodsId&&t.shopId)){t.json&&(console.log(JSON.stringify({success:!1,error:"\u8BF7\u6307\u5B9A\u4E0B\u67B6\u6761\u4EF6\uFF1A--id <id> \u6216 --stock-goods-id <id> --shop-id <id>"})),process.exit(1)),console.log(io.yellow("\u8BF7\u6307\u5B9A\u4E0B\u67B6\u6761\u4EF6\uFF1A--id <id> \u6216 --stock-goods-id <id> --shop-id <id>"));return}let e={};t.id&&(e.id=t.id),t.stockGoodsId&&(e.stockGoodsId=Number(t.stockGoodsId)),t.shopId&&(e.shopId=t.shopId),t.json||console.log(io.cyan("\u{1F4E6} \u6B63\u5728\u4E0B\u67B6\u5546\u54C1..."));let r=await ko(e);t.json?console.log(JSON.stringify({success:!0,data:r},null,2)):(console.log(io.green("\u2705 \u4E0B\u67B6\u6210\u529F")),console.log(JSON.stringify(r,null,2)))})),o}import{Command as dr}from"commander";import Tt from"chalk";function Yo(){let o=new dr("price");return o.description("\u4FEE\u6539\u95F2\u9C7C\u4E0A\u67B6\u5546\u54C1\u4EF7\u683C"),o.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"),o.action(g(async t=>{if(!t.price){t.json&&(console.log(JSON.stringify({success:!1,error:"--price <amount> \u4E3A\u5FC5\u586B\u53C2\u6570"})),process.exit(1)),console.log(Tt.yellow("--price <amount> \u4E3A\u5FC5\u586B\u53C2\u6570"));return}if(!t.id&&!(t.stockGoodsId&&t.shopId)){t.json&&(console.log(JSON.stringify({success:!1,error:"\u8BF7\u6307\u5B9A\u5546\u54C1\uFF1A--id <id> \u6216 --stock-goods-id <id> --shop-id <id>"})),process.exit(1)),console.log(Tt.yellow("\u8BF7\u6307\u5B9A\u5546\u54C1\uFF1A--id <id> \u6216 --stock-goods-id <id> --shop-id <id>"));return}let e={price:Number(t.price)};t.id&&(e.id=t.id),t.stockGoodsId&&(e.stockGoodsId=Number(t.stockGoodsId)),t.shopId&&(e.shopId=t.shopId),t.json||console.log(Tt.cyan(`\u{1F4B0} \u6B63\u5728\u4FEE\u6539\u4EF7\u683C\u4E3A ${t.price}...`));let r=await vo(e);t.json?console.log(JSON.stringify({success:!0,data:r},null,2)):(console.log(Tt.green("\u2705 \u4EF7\u683C\u4FEE\u6539\u6210\u529F")),console.log(JSON.stringify(r,null,2)))})),o}import{Command as ur}from"commander";import st from"chalk";function Zo(){let o=new ur("edit");return o.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"),o.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").option("--category-id <id>","\u5546\u54C1\u7C7B\u76EE ID\uFF08\u5927\u5206\u7C7B\uFF0C\u540E\u7AEF\u5FC5\u586B\uFF09").option("--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"),o.action(g(async t=>{if(!t.id&&!(t.stockGoodsId&&t.account)){t.json&&(console.log(JSON.stringify({success:!1,status:400,error:"\u8BF7\u6307\u5B9A\u5546\u54C1\uFF1A--id <goodsListingId> \u6216 --stock-goods-id <id> --account <shopId>"})),process.exit(1)),console.log(st.yellow("\u8BF7\u6307\u5B9A\u5546\u54C1\uFF1A--id <goodsListingId> \u6216 --stock-goods-id <id> --account <shopId>"));return}let e={};if(t.id&&(e.goodsListingId=Number(t.id)),t.stockGoodsId&&(e.stockGoodsId=Number(t.stockGoodsId)),t.account&&(e.account=t.account),t.title&&(e.title=t.title),t.desc&&(e.desc=t.desc),t.categoryId&&(e.categoryId=Number(t.categoryId)),t.channelCatId&&(e.channelCatId=t.channelCatId),t.imageIds&&(e.imageIdList=t.imageIds.split(",").map(s=>s.trim())),t.brandName&&(e.brandName=t.brandName),t.stuffStatus&&(e.stuffStatus=Number(t.stuffStatus)),t.goodsNo&&(e.goodsNo=t.goodsNo),t.originalPrice&&(e.originalPrice=Number(t.originalPrice)),t.size&&(e.size=t.size),t.itemAttrs)try{e.itemAttrList=JSON.parse(t.itemAttrs)}catch{t.json&&(console.log(JSON.stringify({success:!1,status:400,error:"--item-attrs JSON \u89E3\u6790\u5931\u8D25"})),process.exit(1)),console.log(st.yellow("--item-attrs JSON \u89E3\u6790\u5931\u8D25"));return}if(!Object.keys(e).some(s=>!["goodsListingId","stockGoodsId","account"].includes(s))){t.json&&(console.log(JSON.stringify({success:!1,status:400,error:"\u672A\u6307\u5B9A\u9700\u8981\u4FEE\u6539\u7684\u5B57\u6BB5"})),process.exit(1)),console.log(st.yellow("\u672A\u6307\u5B9A\u9700\u8981\u4FEE\u6539\u7684\u5B57\u6BB5"));return}t.json||console.log(st.cyan("\u6B63\u5728\u4FEE\u6539\u5546\u54C1\u4FE1\u606F..."));let n=await No(e);t.json?console.log(JSON.stringify({success:!0,data:n},null,2)):(console.log(st.green("\u2705 \u5546\u54C1\u4FE1\u606F\u4FEE\u6539\u6210\u529F")),console.log(JSON.stringify(n,null,2)))})),o}import{Command as tt}from"commander";import y from"chalk";var mr={100:"\u5168\u65B0",[-1]:"\u51C6\u65B0",99:"99\u65B0",95:"95\u65B0",90:"9\u65B0"};function te(){let o=new tt("hang-up");return o.description("\u95F2\u9C7C\u6302\u552E\u4E0A\u67B6\uFF08\u5B8C\u6574\u5546\u54C1\u4FE1\u606F\u6A21\u5F0F\uFF09"),o.addCommand(new tt("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(g(async t=>{let e=await Do(Number(t.spBizType));if(t.json){console.log(JSON.stringify(e,null,2));return}let r=new Map;for(let n of e){let s=String(n.catId);r.has(s)||r.set(s,{catName:n.catName,children:[]}),r.get(s).children.push({channel:n.channel,channelCatId:n.channelCatId})}for(let[n,s]of r){console.log(y.bold(`${s.catName} (catId: ${y.green(n)})`));for(let i of s.children)console.log(` ${i.channel} (channelCatId: ${y.green(i.channelCatId)})`)}}))),o.addCommand(new tt("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(g(async t=>{let e=await Uo(t.channelCatId);if(t.json){console.log(JSON.stringify(e,null,2));return}for(let r of e)if(console.log(y.bold(`
38
+ ${r.propName} (propId: ${r.propId})`)),r.propsValues?.length)for(let n of r.propsValues)console.log(` ${n.valueName} (valueId: ${n.valueId})`);else console.log(y.gray(" \uFF08\u4F7F\u7528 brands \u5B50\u547D\u4EE4\u641C\u7D22\uFF09"))}))),o.addCommand(new tt("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(g(async t=>{let e=await jo(t.channelCatId,t.propId,t.key);if(t.json){console.log(JSON.stringify(e,null,2));return}if(!e.length){console.log(y.yellow("\u672A\u627E\u5230\u5339\u914D\u7684\u54C1\u724C"));return}for(let r of e)console.log(` ${r.valueName} (valueId: ${r.valueId})`)}))),o.addCommand(new tt("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(g(async t=>{let e=t.files.split(",").map(n=>n.trim()).filter(Boolean);if(e.length===0){t.json&&(console.log(JSON.stringify({success:!1,error:"\u8BF7\u63D0\u4F9B\u81F3\u5C11\u4E00\u5F20\u56FE\u7247"})),process.exit(1)),console.log(y.yellow("\u8BF7\u63D0\u4F9B\u81F3\u5C11\u4E00\u5F20\u56FE\u7247"));return}t.json||console.log(y.cyan(`\u6B63\u5728\u4E0A\u4F20 ${e.length} \u5F20\u56FE\u7247...`));let r=await Lo(t.shopId,e);if(t.json)console.log(JSON.stringify({success:!0,images:r},null,2));else{console.log(y.green(`\u4E0A\u4F20\u6210\u529F\uFF0C\u5171 ${r.length} \u5F20`));for(let n of r)console.log(` \u56FE\u7247ID: ${n.value}`)}}))),o.addCommand(new tt("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: [{"propId":"x","valueId":"y","valueName":"z"}]').option("--brand-name <name>","\u54C1\u724C\u540D\u79F0").option("--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(g(async t=>{let e=t.imageIds.split(",").map(s=>s.trim()),r={account:t.shopId,title:t.title,reservePrice:Number(t.price),categoryId:Number(t.categoryId),channelCatId:t.channelCatId,imageIdList:e,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},...t.desc&&{desc:t.desc},...t.size&&{size:t.size},...t.goodsNo&&{goodsNo:t.goodsNo},...t.originalPrice&&{originalPrice:Number(t.originalPrice)},outItemNo:t.outItemNo,divisionId:Number(t.divisionId)||330100,apiAfterSalesDo:{supportFd10msPolicy:!1,supportFd24hsPolicy:!1,supportNfrPolicy:!1,supportSdrPolicy:!1,supportVnrPolicy:!1,supportGpaPolicy:!1,supportFd48hsPolicy:!1},...t.itemAttrs&&{itemAttrList:JSON.parse(t.itemAttrs)}};t.json||(console.log(y.cyan("\u6B63\u5728\u63D0\u4EA4\u6302\u552E...")),console.log(y.gray(` \u6807\u9898: ${r.title}`)),console.log(y.gray(` \u552E\u4EF7: \xA5${r.reservePrice}`)),console.log(y.gray(` \u6210\u8272: ${mr[r.stuffStatus]??r.stuffStatus}`)),console.log(y.gray(` \u56FE\u7247: ${e.length} \u5F20`)),r.itemAttrList?.length&&console.log(y.gray(` \u5C5E\u6027: ${r.itemAttrList.length} \u9879`)));let n=await Oo(r);t.json?console.log(JSON.stringify({success:!0,data:n},null,2)):(console.log(y.green("\u6302\u552E\u63D0\u4EA4\u6210\u529F")),console.log(JSON.stringify(n,null,2)))}))),o}function oe(){let o=new gr("goods");return o.description("\u5546\u54C1\u7BA1\u7406"),o.addCommand(Xo()),o.addCommand(Mo()),o.addCommand(Fo()),o.addCommand(Vo()),o.addCommand(Ko()),o.addCommand(Yo()),o.addCommand(Zo()),o.addCommand($o()),o.addCommand(te()),o}import{Command as pr}from"commander";import O from"chalk";import{promises as fr}from"node:fs";import hr from"node:path";import yr from"node:os";import{spawn as wr}from"node:child_process";var bt="@round2ai/r2-cli";function ee(){let o=new pr("uninstall");return o.description("\u5378\u8F7D R2-CLI \u5E76\u6E05\u9664\u6240\u6709\u914D\u7F6E"),o.action(async()=>{try{console.log(O.yellow(`
39
+ \u26A0\uFE0F \u5373\u5C06\u6267\u884C\u4EE5\u4E0B\u64CD\u4F5C\uFF1A`)),console.log(O.gray(" 1. \u5220\u9664\u914D\u7F6E\u76EE\u5F55 ~/.r2-cli/")),console.log(O.gray(` 2. \u5168\u5C40\u5378\u8F7D ${bt}
40
+ `));let{confirm:t}=await import("@inquirer/prompts");if(!await t({message:"\u786E\u8BA4\u5378\u8F7D\uFF1F",default:!1})){console.log(O.gray("\u5DF2\u53D6\u6D88\u5378\u8F7D"));return}let r=hr.join(yr.homedir(),".r2-cli");try{await fr.rm(r,{recursive:!0,force:!0}),console.log(O.green("\u2705 \u914D\u7F6E\u6587\u4EF6\u5DF2\u6E05\u9664"))}catch{console.log(O.yellow("\u26A0\uFE0F \u914D\u7F6E\u76EE\u5F55\u4E0D\u5B58\u5728\u6216\u65E0\u6CD5\u5220\u9664\uFF08\u53EF\u5FFD\u7565\uFF09"))}console.log(O.cyan(`\u6B63\u5728\u5378\u8F7D ${bt}...`)),wr("npm",["uninstall","-g",bt],{stdio:"inherit",shell:!0}).on("exit",s=>{s===0?console.log(O.green(`
41
+ \u2705 ${bt} \u5DF2\u5378\u8F7D`)):(console.log(O.yellow(`
42
+ \u26A0\uFE0F npm \u5378\u8F7D\u5931\u8D25 (exit code: ${s})`)),console.log(O.gray(" \u5982\u901A\u8FC7 yarn/pnpm \u5B89\u88C5\uFF0C\u8BF7\u624B\u52A8\u5378\u8F7D"))),process.exit(s??1)})}catch(t){v(t)}}),o}import{Command as Sr}from"commander";import it from"chalk";import{spawn as Cr,execSync as Tr}from"node:child_process";import{readFileSync as xr}from"node:fs";import{join as Ir}from"node:path";function Pt(){for(let o of["../package.json","../../package.json"])try{return JSON.parse(xr(Ir(import.meta.dirname,o),"utf-8")).version}catch{}return"0.0.0"}var re="@round2ai/r2-cli";function br(o,t){return new Promise(e=>{let r=Cr(o,t,{stdio:"inherit"});r.on("close",n=>e(n??1)),r.on("error",()=>e(1))})}function ne(){return new Sr("update").description("\u4E00\u952E\u66F4\u65B0 CLI \u548C\u6280\u80FD").action(async()=>{let o=Pt();console.log(it.cyan(`\u5F53\u524D\u7248\u672C: ${o}`)),console.log(it.cyan("\u6B63\u5728\u66F4\u65B0 CLI...")),await br("npm",["install","-g",`${re}@latest`])!==0&&(console.error(it.red(`
43
+ \u2717 update failed \xB7 Try: npm install -g ${re}@latest`)),process.exit(1));let e=o;try{e=Tr("r2-cli --version",{encoding:"utf-8"}).trim()||o}catch{}console.log(it.green(`
44
+ \u2713 \u66F4\u65B0\u5B8C\u6210: ${o} \u2192 ${e}`)),console.log(it.green("\u2713 \u6280\u80FD\u5DF2\u540C\u6B65\u66F4\u65B0"))})}function se(o){let t=o.command("auth").description("\u6388\u6743\u7BA1\u7406");t.addCommand(Xt()),t.addCommand(_t()),t.addCommand(Qt()),t.addCommand(Mt()),o.addCommand(oe()),o.addCommand(ee()),o.addCommand(ne())}import ie from"chalk";var ae="@round2ai/r2-cli",Pr=[`https://registry.npmmirror.com/${encodeURIComponent(ae)}/latest`,`https://registry.npmjs.org/${encodeURIComponent(ae)}/latest`],Ar=5e3;async function kr(o){let t=new AbortController,e=setTimeout(()=>t.abort(),Ar);try{let r=await fetch(o,{signal:t.signal});return r.ok?(await r.json()).version??null:null}catch{return null}finally{clearTimeout(e)}}async function vr(){let o=await Promise.allSettled(Pr.map(kr));for(let t of o)if(t.status==="fulfilled"&&t.value)return t.value;return null}function Nr(o,t){let e=o.split(".").map(Number),r=t.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}async function ce(o){let t=await vr();t&&Nr(t,o)&&Rr(o,t)}function Rr(o,t){console.error(ie.yellow(`
45
+ Update available: ${o} \u2192 ${t}`)+ie.gray(`
46
+ Run: r2-cli update
47
+ `))}async function Or(){let{default:o}=await import("figlet");console.log(ot.cyan.bold(o.textSync("R2-CLI",{font:"Standard",horizontalLayout:"full"}))),console.log(ot.gray(` \u5411 AI \u5F00\u653E\u4E8C\u624B\u6F6E\u5962\u4EA4\u6613\u5168\u94FE\u8DEF\u80FD\u529B
48
+ `))}function Dr(){let o=new Lr;o.name("r2-cli").description("R2-CLI\uFF0C\u5411 AI \u5F00\u653E\u4E8C\u624B\u6F6E\u5962\u4EA4\u6613\u5168\u94FE\u8DEF\u80FD\u529B");let t=Pt();t==="0.0.0"&&console.error(ot.yellow("Warning: unable to read version from package.json")),o.version(t,"-v, --version");let e=ce(t);return o.configureOutput({writeErr:r=>{console.error(ot.red(r.replace("error:","").trim()))}}),o.action(async()=>{await Or(),o.help()}),se(o),{program:o,updateCheckPromise:e}}function le(){console.log(ot.gray(`
49
+ \u64CD\u4F5C\u5DF2\u53D6\u6D88`)),process.exit(130)}process.on("SIGINT",le);process.on("SIGTERM",le);var{program:Ur,updateCheckPromise:jr}=Dr();Ur.parse(process.argv);jr.catch(o=>{console.error(ot.gray(`[update-check] ${o instanceof Error?o.message:String(o)}`))});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@round2ai/r2-cli",
3
- "version": "1.0.12-beta.0",
3
+ "version": "1.0.12",
4
4
  "description": "R2-CLI,向 AI 开放二手潮奢交易全链路能力",
5
5
  "main": "dist/r2-cli.js",
6
6
  "type": "module",
@@ -24,12 +24,40 @@ for (const name of fs.readdirSync(pkgSkillsDir)) {
24
24
  const dest = path.join(agentsDir, name);
25
25
  if (fs.existsSync(dest)) {
26
26
  for (const old of fs.readdirSync(dest)) {
27
- fs.unlinkSync(path.join(dest, old));
27
+ const oldPath = path.join(dest, old);
28
+ fs.statSync(oldPath).isDirectory()
29
+ ? fs.rmSync(oldPath, { recursive: true })
30
+ : fs.unlinkSync(oldPath);
28
31
  }
29
32
  }
30
33
  fs.mkdirSync(dest, { recursive: true });
31
34
 
32
35
  for (const file of fs.readdirSync(src)) {
33
- fs.copyFileSync(path.join(src, file), path.join(dest, file));
36
+ const fileSrc = path.join(src, file);
37
+ const fileDest = path.join(dest, file);
38
+ if (fs.statSync(fileSrc).isDirectory()) {
39
+ copyDir(fileSrc, fileDest);
40
+ } else {
41
+ fs.copyFileSync(fileSrc, fileDest);
42
+ }
43
+ }
44
+ }
45
+
46
+ function copyDir(src, dest) {
47
+ if (fs.existsSync(dest)) {
48
+ for (const old of fs.readdirSync(dest)) {
49
+ const oldPath = path.join(dest, old);
50
+ fs.statSync(oldPath).isDirectory()
51
+ ? fs.rmSync(oldPath, { recursive: true })
52
+ : fs.unlinkSync(oldPath);
53
+ }
54
+ }
55
+ fs.mkdirSync(dest, { recursive: true });
56
+ for (const file of fs.readdirSync(src)) {
57
+ const fileSrc = path.join(src, file);
58
+ const fileDest = path.join(dest, file);
59
+ fs.statSync(fileSrc).isDirectory()
60
+ ? copyDir(fileSrc, fileDest)
61
+ : fs.copyFileSync(fileSrc, fileDest);
34
62
  }
35
63
  }
@@ -19,7 +19,7 @@ metadata:
19
19
 
20
20
  ## CRITICAL
21
21
 
22
- 安装、统一错误格式见 **r2-shared** skill。
22
+ 命令执行规则见 **r2-shared** skill 的「执行规则」。安装、统一错误格式见 **r2-shared** skill
23
23
 
24
24
  ---
25
25