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