@zenovay/cli 0.1.25 → 0.1.27

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.
Files changed (100) hide show
  1. package/dist/{agency-BlO4pTMw.js → agency-DEixFVRT.js} +1 -1
  2. package/dist/{ai-kheJm6pR.js → ai-B8r28ZBm.js} +1 -1
  3. package/dist/{analytical-screen-B4KwZvWt.js → analytical-screen-BpTK5dCY.js} +1 -1
  4. package/dist/analytics-ByCwmuvS.js +1 -0
  5. package/dist/api-CeB_9iPg.js +1 -0
  6. package/dist/api-keys-DsQR075b.js +7 -0
  7. package/dist/api-v2-B_kZhVxd.js +1 -0
  8. package/dist/audit-CfOJ3rNW.js +10 -0
  9. package/dist/bin.js +4 -9
  10. package/dist/commands-DbkdKFGz.js +2 -0
  11. package/dist/companies-BToqUnFi.js +2 -0
  12. package/dist/config-Cmi_f_SY.js +1 -0
  13. package/dist/data-table-BUyOP6Nc.js +1 -0
  14. package/dist/deploys-CgNr5r7M.js +2 -0
  15. package/dist/{devices-CB09XAUJ.js → devices-C8xVqaBs.js} +1 -1
  16. package/dist/doctor-K37xh3M7.js +16 -0
  17. package/dist/domains-Bfx2vdwv.js +11 -0
  18. package/dist/{emit-D7VCOSNk.js → emit-DBbMG9mK.js} +1 -1
  19. package/dist/errors-CRwoAz9u.js +2 -0
  20. package/dist/{events-tail-C_SqkJGL.js → events-tail-CXJUK5ka.js} +1 -1
  21. package/dist/fmt-DSJbiH8w.js +3 -0
  22. package/dist/funnel-nm9X3Od7.js +3 -0
  23. package/dist/{geo-D3I6WwHR.js → geo-BaCNZ7-S.js} +1 -1
  24. package/dist/globe-_m_z4uIW.js +1 -0
  25. package/dist/{goals-DQxQPCzo.js → goals-D1qL286b.js} +1 -1
  26. package/dist/{health-oHQqxSl8.js → health-ChZuTNP2.js} +1 -1
  27. package/dist/health-DfgPNC1A.js +1 -0
  28. package/dist/{heatmaps-Cbn1-7r7.js → heatmaps-e1Q72VWJ.js} +1 -1
  29. package/dist/{home-D0XpZbNo.js → home-CtsY-gj0.js} +1 -1
  30. package/dist/{init-D3XNLCyB.js → init-BVUEPvVr.js} +2 -2
  31. package/dist/init-CJ1Py9a8.js +1 -0
  32. package/dist/{insights-Dqh7Ufbj.js → insights-wx3wIgGV.js} +1 -1
  33. package/dist/{integrations-BnSHObFe.js → integrations-B6IO1dM0.js} +1 -1
  34. package/dist/{journeys-B28PBv9G.js → journeys-zPmCha98.js} +1 -1
  35. package/dist/{live-CLx6wDFI.js → live-k32y1phk.js} +1 -1
  36. package/dist/{login-DWaz_EsV.js → login-BSDS_gNS.js} +1 -1
  37. package/dist/login-B_CW06vS.js +1 -0
  38. package/dist/{logout-B_pg5Z_L.js → logout-1ohk4uie.js} +1 -1
  39. package/dist/{metric-card-CPdcwjJ9.js → metric-card-BRHv93Un.js} +1 -1
  40. package/dist/{notes-DmX8L6of.js → notes-Cepz-K00.js} +1 -1
  41. package/dist/{pages-C7NXBSHr.js → pages-CAYP4Abn.js} +1 -1
  42. package/dist/plans-D8aqF_lo.js +8 -0
  43. package/dist/profile-DQJdZ-s_.js +4 -0
  44. package/dist/projects-BC8pmo7u.js +2 -0
  45. package/dist/query-gWCT9Xf0.js +8 -0
  46. package/dist/{resolve-site-D3e1i32Z.js → resolve-site-BUpzvcMz.js} +1 -1
  47. package/dist/{retention-uKTmC3wy.js → retention-DQPI6wVN.js} +1 -1
  48. package/dist/{revenue-DeVVYxep.js → revenue-Cdh1fgXQ.js} +1 -1
  49. package/dist/{sessions-B1Hfl4L8.js → sessions-Dv-Z29cQ.js} +1 -1
  50. package/dist/{settings-jcW7fMBD.js → settings-BsczzB3M.js} +1 -1
  51. package/dist/share-BQjP_Anq.js +6 -0
  52. package/dist/sources-DL_o-kkA.js +2 -0
  53. package/dist/stats-DRy2d3At.js +2 -0
  54. package/dist/team-Bg-ggtky.js +9 -0
  55. package/dist/teams-Dvh7_Gkg.js +17 -0
  56. package/dist/themes-nvY0oaq_.js +4 -0
  57. package/dist/{tier-RjOGNzda.js → tier-DyX4EObq.js} +1 -1
  58. package/dist/ui-BRls3_H3.js +1 -0
  59. package/dist/{update-gcfMIvHa.js → update-DWBRR_PD.js} +1 -1
  60. package/dist/{uptime-PY8IPIN5.js → uptime-DACm8Hdh.js} +1 -1
  61. package/dist/usage-BhLXHEkY.js +3 -0
  62. package/dist/{use-BvDJ2P2x.js → use-DJ0b_xNo.js} +1 -1
  63. package/dist/visitors-BeyCZy77.js +2 -0
  64. package/dist/vitals-lpeK0mbA.js +2 -0
  65. package/dist/{watch-DRAghFKG.js → watch-BMrHdnHX.js} +1 -1
  66. package/dist/webhooks-Ddhz2P7n.js +15 -0
  67. package/dist/{webhooks-forward-BtOuGN6W.js → webhooks-forward-C1TfzLgn.js} +1 -1
  68. package/dist/wizard-bin.js +1 -1
  69. package/dist/{ws-client-3QuvHd5K.js → ws-client-_BBjvKCb.js} +1 -1
  70. package/package.json +1 -1
  71. package/dist/analytics-Ddw3RGTP.js +0 -1
  72. package/dist/api-DXmhz2DM.js +0 -1
  73. package/dist/api-keys-DWREca-O.js +0 -10
  74. package/dist/api-v2-Du1AbBjc.js +0 -1
  75. package/dist/companies-BKrVg1cs.js +0 -2
  76. package/dist/config-CZ9IzjIH.js +0 -1
  77. package/dist/data-table-BVWqHy9m.js +0 -1
  78. package/dist/deploys-BxHmngLs.js +0 -2
  79. package/dist/doctor-DGINy0u2.js +0 -13
  80. package/dist/domains-B8CmJV7y.js +0 -14
  81. package/dist/errors-S8mj9Tqs.js +0 -2
  82. package/dist/funnel-yfcouhk_.js +0 -3
  83. package/dist/health-gixkqsPr.js +0 -1
  84. package/dist/init-C1NI6Mrv.js +0 -1
  85. package/dist/login-Bo0VXzkT.js +0 -1
  86. package/dist/plans-FgNt6BmG.js +0 -7
  87. package/dist/profile-PoH3lRsu.js +0 -4
  88. package/dist/projects-CfmZlvpr.js +0 -2
  89. package/dist/query-DhO_19ZW.js +0 -8
  90. package/dist/sources-CBKyeNDe.js +0 -2
  91. package/dist/stats-DJJRqR25.js +0 -2
  92. package/dist/team-DEkMZ3M2.js +0 -15
  93. package/dist/themes-CCA4vmtV.js +0 -4
  94. package/dist/ui-oBd4Xpw5.js +0 -1
  95. package/dist/usage-D68rh-TN.js +0 -3
  96. package/dist/visitors-P-ne5WvP.js +0 -2
  97. package/dist/vitals-CLSdd5us.js +0 -2
  98. /package/dist/{completions-CNQoXN6L.js → completions-CXAOfyWo.js} +0 -0
  99. /package/dist/{globe-CN7K03RO.js → globe-BrlflaZ1.js} +0 -0
  100. /package/dist/{wrapper-D7FQ-LtK.js → wrapper-BgssVzXH.js} +0 -0
@@ -1,15 +0,0 @@
1
- import{readConfig as e}from"./config-CZ9IzjIH.js";import{readToken as t}from"./api-DXmhz2DM.js";import{ApiV2Client as n}from"./api-v2-Du1AbBjc.js";import{requireTier as r}from"./tier-RjOGNzda.js";import{confirmDestructive as i}from"./confirm-D_aKHknn.js";function a(e){return e.length>12?`${e.slice(0,8)}…${e.slice(-4)}`:e}function o(e){return e?new Date(e).toISOString().slice(0,10):`—`}async function s(s){let c=await e(),l=await t({strict:!1}),u=new n({config:c,cliVersion:s.cliVersion,token:l});try{await r(u,`pro`)}catch(e){return process.stderr.write(`✗ ${e.message}\n`),2}try{switch(s.action){case`list`:{let e=await u.listTeam();if(s.json)return process.stdout.write(JSON.stringify(e,null,2)+`
2
- `),0;if(process.stdout.write(`\nMEMBERS (${e.members.length})\n`),e.members.length===0)process.stdout.write(` — none —
3
- `);else{let t=[14,32,8,10],n=e=>e.map((e,n)=>(e??``).padEnd(t[n])).join(` `);process.stdout.write(n([`user id`,`email`,`role`,`joined`])+`
4
- `),process.stdout.write(n(t.map(e=>`─`.repeat(e)))+`
5
- `);for(let r of e.members)process.stdout.write(n([a(r.userId),(r.email??`—`).slice(0,t[1]),r.role,o(r.joinedAt)])+`
6
- `)}if(process.stdout.write(`\nPENDING INVITES (${e.invites.length})\n`),e.invites.length===0)process.stdout.write(` — none —
7
- `);else{let t=[14,32,8,10],n=e=>e.map((e,n)=>(e??``).padEnd(t[n])).join(` `);process.stdout.write(n([`invite id`,`email`,`role`,`expires`])+`
8
- `),process.stdout.write(n(t.map(e=>`─`.repeat(e)))+`
9
- `);for(let r of e.invites)process.stdout.write(n([a(r.id),r.email.slice(0,t[1]),r.role,o(r.expiresAt)])+`
10
- `)}return process.stdout.write(`
11
- `),0}case`invite`:{if(!s.email)return process.stderr.write("Error: <email> is required for `team invite`.\n"),2;let e=s.role===`admin`?`admin`:`member`,t=await u.inviteTeamMember({email:s.email,role:e});return s.json?(process.stdout.write(JSON.stringify(t)+`
12
- `),0):t.status===`already_invited`?(process.stdout.write(`Already invited: ${t.email} (id: ${t.invitationId}).\n`),0):(process.stdout.write(`✔ Invited ${t.email} as ${e} (id: ${t.invitationId}).\n`),0)}case`remove`:{if(!s.userId)return process.stderr.write("Error: <user-id> is required for `team remove`.\n"),2;let e=await i({resource:`team member`,name:a(s.userId),yes:s.yes,destructive:!0});if(!e)return process.stdout.write(`Cancelled.
13
- `),1;let t=await u.removeTeamMember(s.userId);return s.json?(process.stdout.write(JSON.stringify(t)+`
14
- `),0):(process.stdout.write(`✔ Removed team member ${a(s.userId)}.\n`),0)}case`role`:{if(!s.userId||!s.role)return process.stderr.write("Error: both <user-id> and <new-role> are required for `team role`.\n"),2;let e=s.role===`admin`?`admin`:`member`,t=await u.updateTeamMemberRole(s.userId,e);return s.json?(process.stdout.write(JSON.stringify(t)+`
15
- `),0):(process.stdout.write(`✔ Set ${a(s.userId)} role → ${t.role}.\n`),0)}}}catch(e){return process.stderr.write(`✗ ${e.message}\n`),1}}export{s as teamCommand};
@@ -1,4 +0,0 @@
1
- import{dracula as e,latte as t,mocha as n,nord as r,tokyoNight as i}from"./panel-uygscwY5.js";import{Banner as a}from"./banner-BPQh2F8l.js";import"./progress-row-DFOvHAc5.js";import"./prompt-BURfUNxp.js";import"./keybar-C7YkmK1U.js";import"./sparkline-Bkfzqe4x.js";import"./bar-C9stEeJd.js";import"./ui-oBd4Xpw5.js";import{promises as o}from"node:fs";import{Box as s,Text as c,render as l}from"ink";import u from"react";const d=[{name:`mocha`,theme:n,mode:`dark`},{name:`latte`,theme:t,mode:`light`},{name:`dracula`,theme:e,mode:`dark`},{name:`tokyoNight`,theme:i,mode:`dark`},{name:`nord`,theme:r,mode:`dark`}],f=[`name`,`bg`,`fg`,`muted`,`accent`,`accent2`,`success`,`warn`,`error`,`border`,`dim`];function p({name:e,theme:t,mode:n}){let r=[t.accent,t.accent2,t.success,t.warn,t.error];return u.createElement(s,{flexDirection:`row`},u.createElement(c,{bold:!0},e.padEnd(14)),u.createElement(c,{color:`gray`},n.padEnd(7)),r.map((e,t)=>u.createElement(c,{key:t,color:e},`████`,` `)),u.createElement(c,{color:`gray`},t.bg))}function m({themes:e}){return u.createElement(s,{flexDirection:`column`},u.createElement(a,{version:`themes`}),u.createElement(s,{marginTop:1,marginBottom:1},u.createElement(c,{color:`gray`},e.length,` themes — pass --theme <name> to any command, or set in your config.`)),u.createElement(s,{flexDirection:`column`},u.createElement(s,null,u.createElement(c,{bold:!0},`name`.padEnd(14)),u.createElement(c,{bold:!0},`mode`.padEnd(7)),u.createElement(c,{bold:!0},`swatch`.padEnd(28)),u.createElement(c,{bold:!0},`bg`)),e.map(({name:e,theme:t,mode:n})=>u.createElement(p,{key:e,name:e,theme:t,mode:n}))))}async function h(e){if(e.validate){let t;try{let n=await o.readFile(e.validate,`utf8`);t=JSON.parse(n)}catch(t){return process.stderr.write(`✗ Failed to read ${e.validate}: ${t.message}\n`),1}let n=f.filter(e=>t[e]==null);return n.length>0?(process.stderr.write(`✗ Missing required tokens: ${n.join(`, `)}\n`),e.json&&process.stdout.write(JSON.stringify({ok:!1,missing:n},null,2)+`
2
- `),1):(process.stdout.write(`✔ Valid theme (${f.length} tokens present).\n`),e.json&&process.stdout.write(JSON.stringify({ok:!0,theme:t},null,2)+`
3
- `),0)}if(e.json)return process.stdout.write(JSON.stringify({themes:d.map(({name:e,theme:t,mode:n})=>({name:e,mode:n,background:t.bg,foreground:t.fg,accent:t.accent}))},null,2)+`
4
- `),0;let{waitUntilExit:t}=l(u.createElement(m,{themes:d}));return await t(),0}export{h as themesCommand};
@@ -1 +0,0 @@
1
- import{useTheme as e}from"./panel-uygscwY5.js";import{Box as t,Text as n,useInput as r}from"ink";import i,{useMemo as a,useState as o}from"react";import"diff";function s(e,t){return e.length<=t?e:t<=1?e.slice(0,t):`${e.slice(0,t-1)}…`}function c(e,t,n){if(e.length>=t)return s(e,t);let r=t-e.length;if(n===`right`)return` `.repeat(r)+e;if(n===`center`){let t=Math.floor(r/2),n=r-t;return` `.repeat(t)+e+` `.repeat(n)}return e+` `.repeat(r)}function l(e,t){return e.map(e=>{if(typeof e.width==`number`&&e.width>0)return e.width;let n=e.header.length;for(let r of t){let t=r[e.key],i=e.format?e.format(t,r):String(t??``);i.length>n&&(n=i.length)}return Math.max(3,n)})}function u({columns:r,data:a,zebra:o=!1}){let{theme:s}=e(),u=l(r,a),d=u.reduce((e,t)=>e+t,0)+r.length*3+1,f=(e,t,n)=>{let r=e;return u.forEach((e,i)=>{r+=`─`.repeat(e+2),r+=i===u.length-1?n:t}),r},p=f(`╭`,`┬`,`╮`),m=f(`├`,`┼`,`┤`),h=f(`╰`,`┴`,`╯`),g=r.map((e,t)=>c(e.header,u[t]??e.header.length,e.align??`left`)).join(` │ `);return i.createElement(t,{flexDirection:`column`,width:d},i.createElement(n,{color:s.border},p),i.createElement(t,{flexDirection:`row`},i.createElement(n,{color:s.border},`│ `),i.createElement(n,{bold:!0,color:s.accent},g),i.createElement(n,{color:s.border},` │`)),i.createElement(n,{color:s.border},m),a.map((e,a)=>{let l=o&&a%2==1,d=l?s.muted:s.fg,f=r.map((t,n)=>{let r=e[t.key],i=t.format?t.format(r,e):String(r??``);return c(i,u[n]??i.length,t.align??`left`)}).join(` │ `);return i.createElement(t,{key:a,flexDirection:`row`},i.createElement(n,{color:s.border},`│ `),i.createElement(n,{color:d},f),i.createElement(n,{color:s.border},` │`))}),i.createElement(n,{color:s.border},h))}export{u as Table};
@@ -1,3 +0,0 @@
1
- import{readConfig as e}from"./config-CZ9IzjIH.js";import{readToken as t}from"./api-DXmhz2DM.js";import{ApiV2Client as n}from"./api-v2-Du1AbBjc.js";function r(e){return e.toLocaleString(`en-US`)}const i=1e8,a=e=>e<=0||e>=i;function o(e,t,n=24){if(a(t))return`─`.repeat(n);let r=Math.min(1,e/t),i=Math.round(r*n);return`█`.repeat(i)+`░`.repeat(Math.max(0,n-i))}function s(e,t){if(a(t))return`—`;let n=e/t*100;return`${n.toFixed(0)}%`}function c(e,t){if(a(t))return``;let n=e/t;return n>=1?`⚠ over limit`:n>=.8?`⚠ near limit`:``}function l(e,t){return a(e)?`∞`:t(e)}function u(e){if(!e)return`—`;let t=new Date(e);if(Number.isNaN(t.getTime()))return e;let n=t.toISOString().slice(0,10),r=t.toISOString().slice(11,16);return`${n} ${r} UTC`}async function d(i){let a=await e(),d=await t({strict:!1});if(!d)return process.stderr.write("Not logged in — run `zenovay login` first.\n"),2;let f=new n({config:a,cliVersion:i.cliVersion,token:d}),p;try{p=await f.getUsage()}catch(e){return process.stderr.write(`✗ ${e.message}\n`),1}if(i.json)return process.stdout.write(JSON.stringify(p,null,2)+`
2
- `),0;let m=[{label:`events this month`,used:p.events.thisMonth,limit:p.events.monthlyLimit,format:r},{label:`events today`,used:p.events.today,limit:p.events.dailyLimit,format:r},{label:`websites`,used:p.websites.used,limit:p.websites.limit},{label:`team members`,used:p.teamMembers.used,limit:p.teamMembers.limit}],h=18,g=8,_=9,v=[];v.push(``),v.push(` plan: ${p.plan}`),v.push(``);for(let e of m){let t=e.format??r,n=t(e.used).padStart(g),i=l(e.limit,t).padStart(_),a=o(e.used,e.limit),u=s(e.used,e.limit).padStart(5),d=c(e.used,e.limit);v.push(` ${e.label.padEnd(h)} ${n} / ${i} ${a} ${u} ${d}`.trimEnd())}return v.push(` ${`api keys`.padEnd(h)} ${r(p.apiKeys.used).padStart(g)} / ${`—`.padStart(_)} ${`─`.repeat(24)} ${`—`.padStart(5)}`),v.push(``),v.push(` data retention: ${p.dataRetentionDays} days`),v.push(` last event: ${u(p.events.lastEventAt)}`),v.push(``),process.stdout.write(v.join(`
3
- `)),0}export{d as usageCommand};
@@ -1,2 +0,0 @@
1
- import{readConfig as e}from"./config-CZ9IzjIH.js";import{readToken as t}from"./api-DXmhz2DM.js";import{ApiV2Client as n}from"./api-v2-Du1AbBjc.js";import{formatTabular as r,selectFormat as i}from"./formatter-mW0Yk3Nt.js";import"./panel-uygscwY5.js";import"./banner-BPQh2F8l.js";import"./progress-row-DFOvHAc5.js";import"./prompt-BURfUNxp.js";import"./keybar-C7YkmK1U.js";import{spark as a}from"./sparkline-Bkfzqe4x.js";import{resolveSiteId as o}from"./resolve-site-D3e1i32Z.js";import"./bar-C9stEeJd.js";import{runAnalyticalScreen as s}from"./analytical-screen-B4KwZvWt.js";import{Table as c}from"./ui-oBd4Xpw5.js";import{Box as l,Text as u}from"ink";import d from"react";function f(e){let t=Math.max(0,Math.floor((Date.now()-new Date(e).getTime())/1e3));return t<60?`${t}s`:t<3600?`${Math.floor(t/60)}m`:t<86400?`${Math.floor(t/3600)}h`:`${Math.floor(t/86400)}d`}async function p(p){let m=await e(),h=await t({strict:!1}),g=new n({config:m,cliVersion:p.cliVersion,token:h}),_,v;try{({siteId:_,site:v}=await o(g,{explicit:p.siteId,headless:!!(p.json||p.csv||p.tsv||p.ndjson),cliVersion:p.cliVersion}))}catch(e){return process.stderr.write(`${e.message}\n`),2}let y=i(p),b=p.limit??50,x=[{key:`startedAt`,header:`when`,width:6,format:e=>f(String(e))},{key:`country`,header:`country`,width:7,format:e=>String(e??`—`)},{key:`city`,header:`city`,width:14,format:e=>String(e??`—`)},{key:`device`,header:`device`,width:7,format:e=>String(e??`—`)},{key:`page`,header:`page`,width:26,format:e=>String(e??`—`)},{key:`aiScore`,header:`score`,width:5,align:`right`,format:e=>typeof e==`number`?String(Math.round(e)):`—`}];return s({cliVersion:p.cliVersion,title:`visitors · ${_}`,commandName:`visitors`,authToken:h?.accessToken??null,refreshIntervalMs:1e4,fetcher:e=>g.getVisitors(_,{limit:b},e),format:y,headlessEmit:(e,t)=>{if(t===`json`||t===`ndjson`){process.stdout.write(JSON.stringify(e,null,t===`json`?2:0)),t===`ndjson`&&process.stdout.write(`
2
- `);return}let n=[`startedAt`,`country`,`city`,`device`,`page`,`aiScore`];process.stdout.write(r(e.visitors,n,t))},panels:[{id:`live`,title:`Now`,render:e=>{let t=[...e.visitors].sort((e,t)=>(t.aiScore??0)-(e.aiScore??0)),n=t[0],r=Array(24*6).fill(0),i=Date.now();for(let t of e.visitors){let e=i-new Date(t.startedAt).getTime(),n=Math.floor(e/(10*60*1e3));n>=0&&n<r.length&&(r[r.length-1-n]+=1)}return d.createElement(l,{flexDirection:`column`},d.createElement(u,{bold:!0},e.total,` live`),d.createElement(u,{color:`gray`},a(r,40)),n?d.createElement(u,{color:`gray`},`top: `,n.city??n.country??`—`,` · `,n.page??`—`,` (score`,` `,typeof n.aiScore==`number`?Math.round(n.aiScore):`—`,`)`):null)}},{id:`visitors`,title:`Active sessions`,render:e=>{let t=[...e.visitors].sort((e,t)=>(t.aiScore??0)-(e.aiScore??0)).slice(0,b);return t.length===0?d.createElement(u,{color:`gray`},`— no visitors yet —`):d.createElement(c,{columns:x,data:t})}}]})}export{p as visitorsCommand};
@@ -1,2 +0,0 @@
1
- import{readConfig as e}from"./config-CZ9IzjIH.js";import{readToken as t}from"./api-DXmhz2DM.js";import{ApiV2Client as n}from"./api-v2-Du1AbBjc.js";import{formatTabular as r,selectFormat as i}from"./formatter-mW0Yk3Nt.js";import"./panel-uygscwY5.js";import"./banner-BPQh2F8l.js";import"./progress-row-DFOvHAc5.js";import"./prompt-BURfUNxp.js";import"./keybar-C7YkmK1U.js";import"./sparkline-Bkfzqe4x.js";import{resolveSiteId as a}from"./resolve-site-D3e1i32Z.js";import"./bar-C9stEeJd.js";import{runAnalyticalScreen as o}from"./analytical-screen-B4KwZvWt.js";import{Table as s}from"./ui-oBd4Xpw5.js";import{Box as c,Text as l}from"ink";import u from"react";const d={lcp:{good:2500,poor:4e3},inp:{good:200,poor:500},cls:{good:.1,poor:.25},ttfb:{good:800,poor:1800},fcp:{good:1800,poor:3e3}};function f(e,t){let n=d[e];return t<=n.good?{label:`good`,color:`green`}:t<=n.poor?{label:`needs`,color:`yellow`}:{label:`poor`,color:`red`}}function p(e,t){return e===`cls`?t.toFixed(3):t<1e3?`${Math.round(t)}ms`:`${(t/1e3).toFixed(2)}s`}async function m(d){let m=await e(),h=await t({strict:!1}),g=new n({config:m,cliVersion:d.cliVersion,token:h}),_,v;try{({siteId:_,site:v}=await a(g,{explicit:d.siteId,headless:!!(d.json||d.csv||d.tsv||d.ndjson),cliVersion:d.cliVersion}))}catch(e){return process.stderr.write(`${e.message}\n`),2}let y=i(d),b=[{key:`url`,header:`url`,width:32},{key:`device`,header:`device`,width:7,format:e=>String(e??`—`)},{key:`lcp`,header:`LCP p75`,width:9,align:`right`,format:e=>e&&typeof e==`object`&&`p75`in e?p(`lcp`,e.p75):`—`},{key:`inp`,header:`INP p75`,width:9,align:`right`,format:e=>e&&typeof e==`object`&&`p75`in e?p(`inp`,e.p75):`—`},{key:`cls`,header:`CLS p75`,width:9,align:`right`,format:e=>e&&typeof e==`object`&&`p75`in e?p(`cls`,e.p75):`—`},{key:`samples`,header:`n`,width:6,align:`right`}];return o({cliVersion:d.cliVersion,title:`vitals · ${_}`,commandName:`vitals`,authToken:h?.accessToken??null,refreshIntervalMs:d.watch?5*6e4:0,fetcher:e=>g.getVitals(_,{url:d.url,device:d.device,window:d.window},e),format:y,headlessEmit:(e,t)=>{if(t===`json`||t===`ndjson`){process.stdout.write(JSON.stringify(e,null,t===`json`?2:0)),t===`ndjson`&&process.stdout.write(`
2
- `);return}process.stdout.write(r(e.vitals,[`url`,`device`,`samples`],t))},panels:[{id:`summary`,title:`Site-wide p75`,render:e=>{let t=t=>{let n=0,r=0;for(let i of e.vitals){let e=i[t]?.p75;typeof e==`number`&&(n+=e*i.samples,r+=i.samples)}return r>0?n/r:0},n=[`lcp`,`inp`,`cls`,`ttfb`,`fcp`];return u.createElement(c,{flexDirection:`column`},n.map(e=>{let n=t(e),r=f(e,n);return u.createElement(l,{key:e},u.createElement(l,{color:r.color},`● `),u.createElement(l,{bold:!0},e.toUpperCase().padEnd(5)),` `,u.createElement(l,null,p(e,n).padStart(8)),` `,u.createElement(l,{color:r.color},r.label))}))}},{id:`pages`,title:`Per-page`,render:e=>e.vitals.length===0?u.createElement(l,{color:`gray`},`— no vitals data yet —`):u.createElement(s,{data:e.vitals.slice(0,15),columns:b})}]})}export{m as vitalsCommand};
File without changes