@coinbase/cdp-cli 2.0.126 → 2.0.128

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/index.js CHANGED
@@ -42,7 +42,7 @@ if (-not [Win32.Cred]::CredWrite([ref]$cred, 0)) {
42
42
  [Runtime.InteropServices.Marshal]::FreeHGlobal($blob)`)}delete(t,r){try{vt(`[void][Win32.Cred]::CredDelete('${pe(bt(t,r))}', 1, 0)`)}catch{}}};var Et="cdp-cli",Y,lr=!1;function Fe(){if(Y!==void 0)return Y;try{process.platform==="darwin"?Y=new Le:process.platform==="linux"?Y=new Me:process.platform==="win32"?Y=new Ue:Y=null}catch{lr||(process.stderr.write(`warning: OS keychain not accessible \u2014 secrets stored in keychain will not be available
43
43
  `),lr=!0),Y=null}return Y}function ee(e){let t=Fe();if(!t)return null;try{return t.get(Et,e)}catch{return null}}function me(e,t){let r=Fe();if(!r)return!1;try{return r.set(Et,e,t),!0}catch{return!1}}function ge(e){let t=Fe();if(t)try{t.delete(Et,e)}catch{}}function ur(){return Fe()!==null}var F=ir,fr=ar;function re(){if(process.env.CDP_CONFIG_DIR)return process.env.CDP_CONFIG_DIR;if(process.platform==="win32"){let e=process.env.APPDATA??We(dr(),"AppData","Roaming");return We(e,"cdp")}return We(dr(),".config","cdp")}function he(){return We(re(),"config.json")}function W(e,t){if(e.url)return e.url;if(F[t])return F[t];let r=fr[t];if(r&&F[r])return F[r];let n={...F};for(let[s,a]of Object.entries(fr))F[a]&&(n[s]=F[a]);let o=Object.keys(n).find(s=>t.startsWith(s+"-"));return o?n[o]:""}function ye(e){return Object.values(F).some(t=>e.startsWith(t.replace(/\/platform\/v2$/,"")))}function D(){let e={env:"",environments:{},history:{}},t=he();try{let r=vo(t,"utf8"),n=JSON.parse(r);return e.env=n.env??"",e.environments=n.environments??{},e.history=n.history??{},n.settings&&(e.settings=n.settings),e}catch(r){if(r.code!=="ENOENT")throw r instanceof SyntaxError?new Error(`invalid config JSON: ${r.message}`):new Error(`reading config: ${r.message}`)}return e}function q(e){let t=re();So(t,{recursive:!0,mode:448});let r={env:e.env,environments:e.environments};Object.keys(e.history).length>0&&(r.history=e.history),e.settings&&(r.settings=e.settings),Eo(he(),JSON.stringify(r,null,2)+`
44
44
  `,{mode:384})}function we(e){return ee(`${e}:wallet`)}function St(e,t){return me(`${e}:wallet`,t)}function kt(e){ge(`${e}:wallet`)}function xe(e,t){return t||process.env.CDP_ENV||e.env}function ne(e,t){let r=xe(e,t);if(!r)throw new Error("no environment configured. Run: cdp env <name>");let n={...e.environments[r]};if(!n.key_secret){let s=ee(r);s&&(n.key_secret=s)}if(!n.wallet_secret){let s=we(r);s&&(n.wallet_secret=s)}if(process.env.CDP_KEY_ID&&(n.key_id=process.env.CDP_KEY_ID),process.env.CDP_KEY_SECRET&&(n.key_secret=process.env.CDP_KEY_SECRET,delete process.env.CDP_KEY_SECRET),process.env.CDP_WALLET_SECRET&&(n.wallet_secret=process.env.CDP_WALLET_SECRET,delete process.env.CDP_WALLET_SECRET),process.env.CDP_URL&&(n.url=process.env.CDP_URL,ye(n.url)||process.stderr.write(`warning: CDP_URL overrides to non-standard endpoint: ${n.url}
45
- `)),!W(n,r))throw new Error(`no URL for environment "${r}". Set url in config or use a built-in env name`);if(n.key_id&&!n.key_secret)throw new Error(`API key secret for "${r}" is stored in the OS keychain but could not be retrieved. This typically occurs in sandboxed environments (e.g. Codex) \u2014 grant the environment access to the OS keychain.`);if(!n.key_id||!n.key_secret)throw new Error(`no API key for "${r}". Run: cdp env ${r} --key-id=...`);return{name:r,env:n}}var ko=["CDP_KEY_SECRET","CDP_KEY_ID","CDP_WALLET_SECRET"];function Je(){let e={...process.env};for(let t of ko)delete e[t];return e}function pr(e){return process.env.CDP_NO_HISTORY?!1:e.settings?.history?.enabled!==!1}function Pt(e,t,r){return e.history[t]?.[r]}function Rt(e){try{return JSON.parse(e)}catch{return e}}function mr(e,t,r,n){e.history[t]||(e.history[t]={}),e.history[t][r]={last_used:new Date().toISOString(),values:n}}function He(e,t,r){if(t&&r)return e.history[t]?.[r]?(delete e.history[t][r],Object.keys(e.history[t]).length===0&&delete e.history[t],1):0;if(t){let o=Object.keys(e.history[t]??{}).length;return delete e.history[t],o}let n=Object.values(e.history).reduce((o,s)=>o+Object.keys(s).length,0);return e.history={},n}import{createSign as Er,createPrivateKey as Do,createHash as qo,sign as Lo,randomBytes as jo}from"node:crypto";import{readFileSync as Po,writeFileSync as Ro,mkdirSync as $o}from"node:fs";import{join as hr}from"node:path";var yr;yr="2.0.126";var H=yr,Ve=sr,Ao=`${Ne}/${encodeURIComponent(Ve)}`,wr="version-check.json";function gr(e){let t=e.replace(/^v/,"").split("-")[0],[r,n,o]=t.split(".").map(Number);return{major:r??0,minor:n??0,patch:o??0}}function To(e,t){let r=gr(e),n=gr(t);return n.major!==r.major?n.major>r.major:n.minor!==r.minor?n.minor>r.minor:n.patch>r.patch}var Oo="https://registry.npmjs.org";function Io(e,t){let r=Ne===Oo?"":` --registry ${Ne}`;return`
45
+ `)),!W(n,r))throw new Error(`no URL for environment "${r}". Set url in config or use a built-in env name`);if(n.key_id&&!n.key_secret)throw new Error(`API key secret for "${r}" is stored in the OS keychain but could not be retrieved. This typically occurs in sandboxed environments (e.g. Codex) \u2014 grant the environment access to the OS keychain.`);if(!n.key_id||!n.key_secret)throw new Error(`no API key for "${r}". Run: cdp env ${r} --key-id=...`);return{name:r,env:n}}var ko=["CDP_KEY_SECRET","CDP_KEY_ID","CDP_WALLET_SECRET"];function Je(){let e={...process.env};for(let t of ko)delete e[t];return e}function pr(e){return process.env.CDP_NO_HISTORY?!1:e.settings?.history?.enabled!==!1}function Pt(e,t,r){return e.history[t]?.[r]}function Rt(e){try{return JSON.parse(e)}catch{return e}}function mr(e,t,r,n){e.history[t]||(e.history[t]={}),e.history[t][r]={last_used:new Date().toISOString(),values:n}}function He(e,t,r){if(t&&r)return e.history[t]?.[r]?(delete e.history[t][r],Object.keys(e.history[t]).length===0&&delete e.history[t],1):0;if(t){let o=Object.keys(e.history[t]??{}).length;return delete e.history[t],o}let n=Object.values(e.history).reduce((o,s)=>o+Object.keys(s).length,0);return e.history={},n}import{createSign as Er,createPrivateKey as Do,createHash as qo,sign as Lo,randomBytes as jo}from"node:crypto";import{readFileSync as Po,writeFileSync as Ro,mkdirSync as $o}from"node:fs";import{join as hr}from"node:path";var yr;yr="2.0.128";var H=yr,Ve=sr,Ao=`${Ne}/${encodeURIComponent(Ve)}`,wr="version-check.json";function gr(e){let t=e.replace(/^v/,"").split("-")[0],[r,n,o]=t.split(".").map(Number);return{major:r??0,minor:n??0,patch:o??0}}function To(e,t){let r=gr(e),n=gr(t);return n.major!==r.major?n.major>r.major:n.minor!==r.minor?n.minor>r.minor:n.patch>r.patch}var Oo="https://registry.npmjs.org";function Io(e,t){let r=Ne===Oo?"":` --registry ${Ne}`;return`
46
46
  Update available: ${e} \u2192 ${t}
47
47
  Run: npm i -g ${Ve}${r}
48
48
  `}var _o=1440*60*1e3;function xr(){return re()}function Co(){try{return JSON.parse(Po(hr(xr(),wr),"utf8"))}catch{return null}}function Bo(e){try{let t=xr();$o(t,{recursive:!0}),Ro(hr(t,wr),JSON.stringify(e))}catch{}}async function No(){try{let e=new AbortController,t=setTimeout(()=>e.abort(),3e3),r=await fetch(Ao,{signal:e.signal,headers:{Accept:"application/json"}});return clearTimeout(t),r.ok?(await r.json())?.["dist-tags"]?.latest??null:null}catch{return null}}async function br(){if(process.env.CI||process.env.CDP_NO_UPDATE_CHECK)return"";let e=Co();if(e&&Date.now()-e.checkedAt<_o)return"";let t=await No();return t?(Bo({checkedAt:Date.now(),latestVersion:t}),To(H,t)?Io(H,t):""):""}function At(e){return Buffer.from(e).toString("base64url")}function Ge(e){return At(Buffer.from(JSON.stringify(e)))}function Sr(){return jo(16).toString("hex")}function Mo(e){return e.includes("-----BEGIN EC PRIVATE KEY-----")}function Uo(e){try{return Buffer.from(e,"base64").length===64}catch{return!1}}function Fo(e,t,r,n,o){let s=Math.floor(Date.now()/1e3),a=Sr(),i={sub:e,iss:"cdp",nbf:s,iat:s,exp:s+120},l=`${r} ${n}${o}`;if(r&&n&&o&&(i.uris=[l]),Mo(t))return Wo(e,t,i,a);if(Uo(t))return Jo(e,t,i,a);throw new Error("invalid key format - must be either PEM EC key or base64 Ed25519 key")}function kr(e,t,r){let n=`${Ge(e)}.${Ge(t)}`,o=Er("SHA256");o.update(n);let s=o.sign(r);return`${n}.${At(Ho(s))}`}function Wo(e,t,r,n){return kr({alg:"ES256",typ:"JWT",kid:e,nonce:n},r,t)}function Jo(e,t,r,n){let s=`${Ge({alg:"EdDSA",typ:"JWT",kid:e,nonce:n})}.${Ge(r)}`,a=Buffer.from(t,"base64"),i=Do({key:Buffer.concat([Buffer.from("302e020100300506032b657004220420","hex"),a.subarray(0,32)]),format:"der",type:"pkcs8"}),l=Lo(null,Buffer.from(s),i);return`${s}.${At(l)}`}function Ho(e){let t=2;if(e[t]!==2)throw new Error("invalid DER signature");t++;let r=e[t];t++;let n=e.subarray(t,t+r);if(t+=r,e[t]!==2)throw new Error("invalid DER signature");t++;let o=e[t];t++;let s=e.subarray(t,t+o);return n=vr(n,32),s=vr(s,32),Buffer.concat([n,s])}function vr(e,t){if(e.length===t)return Buffer.from(e);if(e.length>t)return Buffer.from(e.subarray(e.length-t));let r=Buffer.alloc(t);return r.set(e,t-e.length),r}function Vo(e,t,r,n,o){let s=Math.floor(Date.now()/1e3),a=Sr(),l={uris:[`${t} ${r}${n}`],iat:s,nbf:s,jti:a};if(o&&o.length>0)try{let u=JSON.parse(new TextDecoder().decode(o));if(typeof u=="object"&&Object.keys(u).length>0){let d=$t(u);l.reqHash=qo("sha256").update(JSON.stringify(d)).digest("hex")}}catch{}let c=Pr(e);return kr({alg:"ES256",typ:"JWT"},l,c)}function Pr(e){return`-----BEGIN PRIVATE KEY-----