@fugood/bricks-cli 2.26.0-beta.19 → 2.26.0-beta.20

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/lib/lib.js CHANGED
@@ -1217,7 +1217,7 @@ ${am}`);return r.cause=e,r},ah=ei(function e(t,a){var r,i=this;er(this,e),this.b
1217
1217
  }
1218
1218
  }
1219
1219
  }
1220
- `,r=yield this.apolloClient.mutate({mutation:a,variables:{id:e,tokens:t},errorPolicy:"all",fetchPolicy:"no-cache"}),i=r.data,n=r.errors;if(n?.length>0)throw Error(n.map(({message:e})=>e).join("\n"));return i.updateWorkspaceTokens.newTokens}),function(e){return c.apply(this,arguments)})}]),aE=(e,t)=>new aw(e,t),aT=i(68832);let aN=t("node:fs/promises"),aS=t("node:path"),aO=t("node:dgram"),aI=t("node:os");var aD=()=>Math.random().toString(36).slice(2,9),aA=new Set(["ANNOUNCE","RESPONSE"]),ak=(e,t)=>{var a=JSON.parse(e.toString());return t(a)&&aA.has(a.t)&&a.d?.info||null},aC=()=>{var e=[];for(var t of Object.values(aI.networkInterfaces()))for(var a of t)if(function(){if("IPv4"!==a.family||a.internal)return 1;var t=a.address.split(".").map(Number),r=a.netmask.split(".").map(Number),i=t.map((e,t)=>(e|255&~r[t]).toString()).join(".");e.push({address:a.address,broadcast:i})}())continue;return e},ax=({port:e,timeout:t=3e3,idleTimeout:a=0,buildQuery:r,parseMessage:i})=>new Promise((n,p)=>{var o=new Map,d=aO.createSocket("udp4"),s=null,l=null,u=!1,c=e=>{if(!u){u=!0,clearTimeout(s),clearTimeout(l);try{d.close()}catch{}e?p(e):n([...o.values()])}};d.on("error",c),d.on("message",(e,t)=>{if(!u)try{var r=i(e,t);if(!r||o.has(r.key))return;o.set(r.key,r.value),a&&!u&&(clearTimeout(l),l=setTimeout(c,a))}catch{}});try{d.bind(()=>{if(!u)try{d.setBroadcast(!0);var a=r();for(var i of(()=>{var e=new Set(["255.255.255.255","127.0.0.1"]);for(var t of aC())e.add(t.broadcast);return[...e]})())d.send(a,0,a.length,e,i);s=setTimeout(c,t)}catch(e){c(e)}})}catch(e){c(e)}}),aR=(m=ea(function*(e,t=3e3){var a;try{var r=new AbortController;a=setTimeout(()=>r.abort(),t);var i=yield fetch(e,{signal:r.signal});if(!i.ok)return null;return yield i.json()}catch{return null}finally{void 0!==a&&clearTimeout(a)}}),function(e){return m.apply(this,arguments)}),aV="bricks-devtools",aF=(f=ea(function*({port:e=19851,connectTimeout:t=500,concurrency:a=50,timeout:r=0}={}){var i=aC();if(0===i.length)return[];var n=[],p=r>0?Date.now()+r:0,o=[],d=new Set;for(var s of i){var l=s.address.split(".").slice(0,3).join(".");if(!d.has(l)){d.add(l);for(var u=1;u<255;u++)o.push(`${l}.${u}`)}}for(var c=0;c<o.length&&!(p&&Date.now()>=p);c+=a){var m=o.slice(c,c+a);yield Promise.allSettled(m.map(function(){var a=ea(function*(a){var r=yield a$(a,e,t);r&&n.push({...r,address:a,port:e})});return function(e){return a.apply(this,arguments)}}()))}return n}),function(){return f.apply(this,arguments)}),a$=(h=ea(function*(e,t,a=3e3){return aR(`http://${e}:${t}/devtools/info`,a)}),function(e,t){return h.apply(this,arguments)}),aP=(v=ea(function*(e,t,a=3e3){var r;try{var i=new AbortController;r=setTimeout(()=>i.abort(),a);var n=yield fetch(`http://${e}:${t}/json/list`,{signal:i.signal});if(!n.ok)return null;return yield n.json()}catch{return null}finally{void 0!==r&&clearTimeout(r)}}),function(e,t){return v.apply(this,arguments)}),aL=(y=ea(function*(e,t=1e3){for(var a=[],r=e,i=0;i<10;i++){var n=aS.join(r,".bricks","devtools.json");try{var p=yield aN.readFile(n,"utf8"),o=JSON.parse(p),d=yield a$(o.address||"localhost",o.port,t);d&&a.push({name:o.name||"BRICKS Simulator",address:o.address||"localhost",port:o.port,protocols:["cdp"],hasPasscode:!1,source:"project",projectPath:r,...d})}catch{}var s=aS.dirname(r);if(s===r)break;r=s}return a}),function(e){return y.apply(this,arguments)}),aj=(g=ea(function*({timeout:e=3e3,verify:t=!1,udpOnly:a=!1,project:r=!0,port:i=19851,cwd:n=process.cwd(),onStatus:p}={}){var o,d=(({timeout:e=3e3,idleTimeout:t=0}={})=>ax({port:19900,timeout:e,idleTimeout:t,buildQuery:()=>Buffer.from(JSON.stringify({t:"QUERY",v:"1.0",s:aV,d:{id:`cli-${aD()}`}})),parseMessage:(e,t)=>{var a=ak(e,e=>e?.s===aV);if(!a)return null;var r=t.address;return{key:`${r}:${a.port}`,value:{...a,address:r}}}}))({timeout:e,idleTimeout:800}),s=a?Promise.resolve([]):(p?.("Scanning via UDP + HTTP probe..."),aF({port:i,timeout:e})),l=r?aL(n,1e3):Promise.resolve([]),u=aT((yield Promise.all([d,s,l])),3),c=(e=>{var t=new Map;for(var a of e){var r=a.deviceId||`${a.address}:${a.port}`,i=t.get(r);if(!i){t.set(r,{...a,addresses:[a.address],protocols:[...a.protocols||[]]});continue}for(var n of(i.addresses.includes(a.address)||i.addresses.push(a.address),"127.0.0.1"===i.address&&"127.0.0.1"!==a.address&&(i.address=a.address),a.protocols||[]))i.protocols.includes(n)||i.protocols.push(n);for(var p of Object.entries(a)){var o=aT(p,2),d=o[0],s=o[1];null!=s&&"address"!==d&&"addresses"!==d&&"protocols"!==d&&(void 0===i[d]||null===i[d])&&(i[d]=s)}}return[...t.values()]})([...u[0],...u[1],...u[2]]);if(0===c.length)return[];if(t){p?.(`Verifying ${c.length} server(s)...`);var m,f=yield Promise.all(c.map((m=ea(function*(e){var t=yield a$(e.address,e.port);return{...e,...t||{},address:e.address,port:e.port,verified:!!t,version:t?.version||e.version}}),function(e){return m.apply(this,arguments)})));c.splice(0,c.length,...f)}return p?.("Checking chrome://inspect support..."),yield Promise.all(c.map((o=ea(function*(e){var t=yield aP(e.address,e.port);if(t){e.chromeInspect=!0;var a=(e=>{if(!e)return null;var t=e.match(/\/ws\/(.+)$/);return t?decodeURIComponent(t[1]):null})(t[0]?.webSocketDebuggerUrl);a&&(e.passcode=a)}}),function(e){return o.apply(this,arguments)}))),c}),function(){return g.apply(this,arguments)}),aM=i(76982);let aU=t("fs"),aB=t("path");var aq=i(70857),aQ=aB.join(aq.homedir(),".bricks-cli"),aY=aB.join(aQ,"config.json"),aG=`${aY}.lock`,az=`${aY}.oauth-refresh.lock`,aH=new Int32Array(new SharedArrayBuffer(4)),aW=e=>new Promise(t=>setTimeout(t,e)),aK=e=>{if(!Number.isInteger(e)||e<=0)return!1;try{return process.kill(e,0),!0}catch(e){return"ESRCH"!==e.code}},aJ=e=>{try{var t=aU.readFileSync(e,"utf8"),a=aU.statSync(e),r=null;try{var i=JSON.parse(t);Number.isInteger(i?.pid)&&"string"==typeof i?.nonce&&(r=i)}catch{}return{raw:t,stat:a,owner:r}}catch(e){if("ENOENT"===e.code)return null;throw e}},aZ=e=>{var t,a=aJ(e);if(!a)return!0;var r=a.owner?!aK(a.owner.pid):Date.now()-a.stat.mtimeMs>1e3;if(!r)return!1;var i=`${e}.recovery`;try{t=aX(i)}catch(e){if("EEXIST"===e.code)return!1;throw e}try{if(!(a=aJ(e)))return!0;if(!(r=a.owner?!aK(a.owner.pid):Date.now()-a.stat.mtimeMs>1e3))return!1;return aU.unlinkSync(e),!0}catch(e){if("ENOENT"===e.code)return!0;throw e}finally{a1(i,t)}},aX=e=>{var t,a={pid:process.pid,nonce:aM.randomUUID()},r=`${e}.${a.pid}.${a.nonce}.candidate`;try{t=aU.openSync(r,"wx",384),aU.writeFileSync(t,JSON.stringify(a)),aU.fsyncSync(t),aU.closeSync(t),t=void 0}catch(e){if(void 0!==t)try{aU.closeSync(t)}catch{}try{aU.unlinkSync(r)}catch{}throw e}try{aU.linkSync(r,e)}catch(e){try{aU.unlinkSync(r)}catch{}throw e}try{aU.unlinkSync(r)}catch(e){"ENOENT"!==e.code&&console.error(`Failed to clean up shared BRICKS lock candidate: ${e.message}`)}return{owner:a}},a1=(e,{owner:t})=>{try{var a;(a=aJ(e))&&a.owner?.nonce===t.nonce&&aU.unlinkSync(e)}catch(e){"ENOENT"!==e.code&&console.error(`Failed to release shared BRICKS lock: ${e.message}`)}},a0=e=>{aU.mkdirSync(aQ,{recursive:!0});for(var t,a=Date.now()+5e3;!t;)try{t=aX(aG)}catch(e){if("EEXIST"!==e.code)throw e;if(aZ(aG))continue;if(Date.now()>=a)throw Error(`Timed out waiting for shared BRICKS config lock: ${aG}`);Atomics.wait(aH,0,0,20)}try{return e()}finally{a1(aG,t)}},a2=(_=ea(function*(e){aU.mkdirSync(aQ,{recursive:!0});for(var t,a=Date.now()+5e3;!t;)try{t=aX(aG)}catch(e){if("EEXIST"!==e.code)throw e;if(aZ(aG))continue;if(Date.now()>=a)throw Error(`Timed out waiting for shared BRICKS config lock: ${aG}`);yield aW(20)}try{var r=e();if(r&&"function"==typeof r.then)throw Error("Shared BRICKS config lock callbacks must be synchronous");return r}finally{a1(aG,t)}}),function(e){return _.apply(this,arguments)}),a6=(b=ea(function*(e,{timeoutMs:t=3e4}={}){aU.mkdirSync(aQ,{recursive:!0});for(var a,r=Date.now()+t;!a;)try{a=aX(az)}catch(e){if("EEXIST"!==e.code)throw e;if(aZ(az))continue;if(Date.now()>=r)throw Error(`Timed out waiting for OAuth refresh lock: ${az}`);yield aW(20)}try{return yield e()}finally{a1(az,a)}}),function(e){return b.apply(this,arguments)}),a4=()=>new a({projectName:"bricks-cli",cwd:aQ,configFileMode:384,schema:{oauth:{type:"object",default:{},properties:{accessToken:{type:"string"},refreshToken:{type:["string","null"]},expiresAt:{type:"string"},user:{type:"object"},audience:{type:"string"}}},tokens:{type:"object",default:{},additionalProperties:{type:"object",properties:{type:{type:"string",enum:["oauth"]},oauthSubject:{type:"string"},token:{type:"string"},name:{type:"string"},workspaceId:{type:"string"},workspaceName:{type:"string"},workspaceBilling:{type:"object"},createdAt:{type:"string"},baseUrl:{type:"string"},activityLogBaseUrl:{type:"string"},bank:{type:"object"}}}},currentProfile:{type:"string",default:"default"},baseUrl:{type:"string",default:"https://display.bricks.tools"},activityLogBaseUrl:{type:"string",default:"https://activity-log.bricks.tools"},devtoolsTokens:{type:"object",default:{},additionalProperties:{type:"object",additionalProperties:{type:"object",properties:{token:{type:"string"},expiresAt:{type:"string"},jti:{type:"string"},workspaceId:{type:"string"}}}}}}}),a3=null,a9=null,a5=()=>a3||=a4(),a8=(w=ea(function*(){if(a3)return a3;a9||=a2(()=>a3||=a4());try{return yield a9}finally{a9=null}}),function(){return w.apply(this,arguments)}),a7=(E=ea(function*(){yield a8()}),function(){return E.apply(this,arguments)}),re={get:e=>a5().get(e),set:(e,t)=>{var a=a5();return a0(()=>a.set(e,t))},clear:()=>{var e=a5();return a0(()=>e.clear())},setAsync:(T=ea(function*(e,t){var a=yield a8();return a2(()=>a.set(e,t))}),function(e,t){return T.apply(this,arguments)}),update:(e,t)=>{var a=a5();return a0(()=>{var r=t(a.get(e));return a.set(e,r),r})},updateAsync:(N=ea(function*(e,t){var a=yield a8();return a2(()=>{var r=t(a.get(e));return a.set(e,r),r})}),function(e,t){return N.apply(this,arguments)}),snapshot:e=>{var t=a5().store;return Object.fromEntries(e.map(e=>[e,t[e]]))},snapshotAsync:(S=ea(function*(e){var t=(yield a8()).store;return Object.fromEntries(e.map(e=>[e,t[e]]))}),function(e){return S.apply(this,arguments)}),transaction:(e,t)=>{var a=a5();return a0(()=>{var r=t(Object.fromEntries(e.map(e=>[e,a.get(e)])))||{};return Object.keys(r).length>0&&a.set(r),r})},transactionAsync:(O=ea(function*(e,t){var a=yield a8();return a2(()=>{var r=t(Object.fromEntries(e.map(e=>[e,a.get(e)])))||{};return Object.keys(r).length>0&&a.set(r),r})}),function(e,t){return O.apply(this,arguments)})},rt=(e,t,a,r)=>{if(!e)return null;var i=null==e.workspaceId?null:String(e.workspaceId);return"oauth"===e.type?e.oauthSubject&&e.oauthSubject===t?.user?.sub?{kind:"oauth",workspaceId:i,oauthSubject:e.oauthSubject,baseUrl:a,activityLogBaseUrl:r}:null:e.token?{kind:"token",workspaceId:i,token:e.token,baseUrl:a,activityLogBaseUrl:r}:null},ra=(e,t,a)=>({exists:void 0!==e,kind:e?.type==="oauth"?"oauth":e?.token?"token":"incomplete",workspaceId:e?.workspaceId==null?null:String(e.workspaceId),credential:e?.type==="oauth"?e.oauthSubject||null:e?.token||null,baseUrl:t,activityLogBaseUrl:a}),rr=(e,{tokens:t={},oauth:a,devtoolsTokens:r={},baseUrl:i,activityLogBaseUrl:n})=>{var p=t[e],o=p?.baseUrl||i,d=p?.activityLogBaseUrl||n,s=rt(p,a,o,d);return{profile:e,tokenInfo:p,oauth:a,fingerprint:s,baseline:ra(p,o,d),bank:s&&p?.bank||null,devtoolsTokens:r[e]||{},baseUrl:o,activityLogBaseUrl:d}},ri=(I=ea(function*(e="default"){return rr(e,(yield re.snapshotAsync(["tokens","oauth","devtoolsTokens","baseUrl","activityLogBaseUrl"])))}),function(){return I.apply(this,arguments)}),rn=(e,t,a)=>{for(var r=re.snapshot(["tokens","baseUrl","activityLogBaseUrl"]),i=r.tokens||{},n=e,p=2;;){var o=i[n];if(!o||"oauth"===o.type&&o.oauthSubject===a&&String(o.workspaceId)===String(t))break;n=`${e}-${p}`,p+=1}var d=i[n];return{profile:n,baseline:ra(d,d?.baseUrl||r.baseUrl,d?.activityLogBaseUrl||r.activityLogBaseUrl)}},rp=(e,t,a,r)=>{var i=a[e],n=i?.workspaceId&&t?.workspaceId&&String(i.workspaceId)===String(t.workspaceId),p=i?.type==="oauth"&&t?.type==="oauth"&&!!i.oauthSubject&&i.oauthSubject===t.oauthSubject||i?.type!=="oauth"&&t?.type!=="oauth"&&!!i?.token&&i.token===t?.token,o=n&&p,d={tokens:{...a,[e]:{...i?.baseUrl?{baseUrl:i.baseUrl}:{},...i?.activityLogBaseUrl?{activityLogBaseUrl:i.activityLogBaseUrl}:{},...o&&i?.bank?{bank:i.bank}:{},...t,createdAt:new Date().toISOString()}}};if(!o&&r[e]){var s={...r};delete s[e],d.devtoolsTokens=s}return d},ro=(e,t)=>{if(e&&t?.user?.sub!==e)throw Error("OAuth account changed. Re-select the workspace for the current account.")},rd=(e,t,a,r)=>!!e&&JSON.stringify(e)===JSON.stringify(ra(t,t?.baseUrl||a,t?.activityLogBaseUrl||r)),rs=(e,t,a,{expectedOAuthSubject:r,makeCurrent:i=!1}={})=>{var n=!1;return re.transaction(["tokens","devtoolsTokens","oauth","currentProfile","baseUrl","activityLogBaseUrl"],({tokens:p={},devtoolsTokens:o={},oauth:d,baseUrl:s,activityLogBaseUrl:l})=>{if(!rd(a,p[e],s,l))return{};ro(r,d),n=!0;var u=rp(e,t,p,o);return i?{...u,currentProfile:e}:u}),n},rl=(D=ea(function*(e,t,a,{expectedOAuthSubject:r,makeCurrent:i=!1}={}){var n=!1;return yield re.transactionAsync(["tokens","devtoolsTokens","oauth","currentProfile","baseUrl","activityLogBaseUrl"],({tokens:p={},devtoolsTokens:o={},oauth:d,baseUrl:s,activityLogBaseUrl:l})=>{if(!rd(a,p[e],s,l))return{};ro(r,d),n=!0;var u=rp(e,t,p,o);return i?{...u,currentProfile:e}:u}),n}),function(e,t,a){return D.apply(this,arguments)}),ru=(e,t)=>{var a=!1;return re.transaction(["tokens","devtoolsTokens"],({tokens:r={},devtoolsTokens:i={}})=>{if(n=r[e],!n||!t||String(n.workspaceId??"")!==String(t.workspaceId??"")||("oauth"===t.type?"oauth"!==n.type||n.oauthSubject!==t.oauthSubject:t.token?"oauth"===n.type||n.token!==t.token:JSON.stringify(n)!==JSON.stringify(t)))return{};a=!0;var n,p={...r};delete p[e];var o={...i};return delete o[e],{tokens:p,devtoolsTokens:o}}),a},rc=(A=ea(function*(e,t,a,r){var i=!1;return yield re.transactionAsync(["tokens","oauth","devtoolsTokens","baseUrl","activityLogBaseUrl"],({tokens:n={},oauth:p,devtoolsTokens:o={},baseUrl:d,activityLogBaseUrl:s})=>((e,t,a,r,i)=>{if(!e)return!1;var n=rt(t,a,t?.baseUrl||r,t?.activityLogBaseUrl||i);return!!n&&n.kind===e.kind&&n.workspaceId===e.workspaceId&&n.baseUrl===e.baseUrl&&n.activityLogBaseUrl===e.activityLogBaseUrl&&("oauth"===n.kind?n.oauthSubject===e.oauthSubject:n.token===e.token)})(t,n[e],p,d,s)?(i=!0,{devtoolsTokens:{...o,[e]:{...o[e],[a]:r}}}):{}),i}),function(e,t,a,r){return A.apply(this,arguments)}),rm=(e,t)=>{if(e)return t(["tokens","devtoolsTokens"],({tokens:t={},devtoolsTokens:a={}})=>{var r={...t},i=[];for(var n of Object.entries(t)){var p=aT(n,2),o=p[0],d=p[1];if(d?.type==="oauth"&&(!d.oauthSubject||d.oauthSubject===e)){i.push(o);var s={...d,oauthSubject:d.oauthSubject||e};delete s.bank,r[o]=s}}var l={...a},u=!1;return i.forEach(e=>{l[e]&&(delete l[e],u=!0)}),{tokens:r,...u?{devtoolsTokens:l}:{}}})},rf=e=>rm(e,re.transaction),rh=e=>rm(e,re.transactionAsync),rv=(e,t,a)=>{if(r=a.oauth,e?.accessToken?!rS(e,r):!!r?.accessToken)return{result:{installed:!1,identityChanged:!1,previous:null},updates:{}};var r,i=a.oauth?.accessToken?a.oauth:null,n=i?.user?.sub,p=!!(n&&t?.user?.sub&&n!==t.user.sub),o={installed:!0,identityChanged:p,previous:i};if(!p)return{result:o,updates:{oauth:t}};var d={...a.tokens||{}},s={...a.devtoolsTokens||{}},l=!1;for(var u of Object.entries(a.tokens||{})){var c=aT(u,2),m=c[0],f=c[1];if(f?.type==="oauth"&&(!f.oauthSubject||f.oauthSubject===n)){var h={...f,oauthSubject:f.oauthSubject||n};delete h.bank,d[m]=h,s[m]&&(delete s[m],l=!0)}}return{result:o,updates:{oauth:t,tokens:d,...l?{devtoolsTokens:s}:{}}}},ry=(e,t)=>{var a;return re.transaction(["oauth","tokens","devtoolsTokens"],r=>{var i=rv(e,t,r);return a=i.result,i.updates}),a},rg=(k=ea(function*(e,t){var a;return yield re.transactionAsync(["oauth","tokens","devtoolsTokens"],r=>{var i=rv(e,t,r);return a=i.result,i.updates}),a}),function(e,t){return k.apply(this,arguments)}),r_=(e="default")=>{var t=((e="default")=>re.get("tokens")[e])(e);return t?"oauth"===t.type?"oauth":t.token?"token":null:null},rb=()=>{var e=re.get("oauth");return e&&Object.keys(e).length>0?e:null},rw=e=>re.set("oauth",e),rE=e=>re.setAsync("oauth",e),rT=()=>re.set("oauth",{}),rN=(C=ea(function*(){var e=null;return yield re.updateAsync("oauth",t=>(t?.accessToken&&(e=t),{})),e}),function(){return C.apply(this,arguments)}),rS=(e,t)=>!!e&&!!t&&e.accessToken===t.accessToken&&e.refreshToken===t.refreshToken,rO=(x=ea(function*(e,t){var a=!1;return yield re.updateAsync("oauth",r=>rS(e,r)?(a=!0,t||{}):r||{}),a}),function(e,t){return x.apply(this,arguments)}),rI=e=>rO(e,{}),rD=(R=ea(function*({client:e,ttlSeconds:t}={}){if(!e?.issueDevtoolsAccessToken)throw Error("A BRICKS workspace client is required to issue a DevTools access token.");return e.issueDevtoolsAccessToken({ttlSeconds:t})}),function(){return R.apply(this,arguments)}),rA=(V=ea(function*({profile:e,client:t,workspaceId:a,ttlSeconds:r,force:i=!1,now:n=Date.now()}={}){var p=e||process.env.BRICKS_PROFILE||re.get("currentProfile"),o=yield ri(p),d=o.tokenInfo,s=o.fingerprint,l=o.devtoolsTokens;if(d?.type==="oauth"&&!s)throw Error(`OAuth profile ${p} belongs to a different account.`);if(!s)throw Error(`Profile ${p} is not logged in or has no workspace id.`);var u=d?.workspaceId,c=a||u;if(!c)throw Error(`Profile ${p} is not logged in or has no workspace id.`);var m=l[c];if(!i&&((e,t=Date.now())=>{if(!e?.token||!e?.expiresAt)return!1;var a=new Date(e.expiresAt).getTime();return Number.isFinite(a)&&a-t>6048e5})(m,n))return m;if(String(c)!==String(u))throw Error(`Profile ${p} has no usable DevTools token for workspace ${c}.`);var f=yield rD({client:t,ttlSeconds:r});if(!f?.token||!f?.expiresAt)throw Error("DevTools access token response was incomplete.");if(f.workspaceId&&String(f.workspaceId)!==String(c))throw Error("DevTools access token was issued for a different workspace.");var h={token:f.token,expiresAt:f.expiresAt,jti:f.jti,workspaceId:f.workspaceId||c};if(!(yield rc(p,s,c,h)))throw Error(`Profile ${p} changed while issuing the DevTools token. Retry.`);return h}),function(){return V.apply(this,arguments)});i(67996);let rk=t("node:crypto");i(27549);var rC=8089,rx=(F=ea(function*(e,t,a=3e3){return aR(`http://${e}:${t}/buttress/info`,a)}),function(e,t){return F.apply(this,arguments)}),rR=aS.join(aI.homedir(),".bricks-cli","buttress"),rV=e=>aS.join(e||rR,"state.json");ea(function*(e,t,a){var r,i,n,p=null,o=!0;try{p=JSON.parse((yield aN.readFile(e,"utf8"))),o=!1}catch(t){if(t instanceof SyntaxError)throw Error(`${e} is not valid JSON; refusing to overwrite it.`);if("ENOENT"!==t.code)throw t}var d=(n=(i=(r=p)&&"object"==typeof r&&!Array.isArray(r)?r:{}).mcpServers&&"object"==typeof i.mcpServers&&!Array.isArray(i.mcpServers)?i.mcpServers:{},{...i,mcpServers:{...n,[t]:a}});return yield aN.writeFile(e,`${JSON.stringify(d,null,2)}
1220
+ `,r=yield this.apolloClient.mutate({mutation:a,variables:{id:e,tokens:t},errorPolicy:"all",fetchPolicy:"no-cache"}),i=r.data,n=r.errors;if(n?.length>0)throw Error(n.map(({message:e})=>e).join("\n"));return i.updateWorkspaceTokens.newTokens}),function(e){return c.apply(this,arguments)})}]),aE=(e,t)=>new aw(e,t),aT=i(68832);let aN=t("node:fs/promises"),aS=t("node:path"),aO=t("node:dgram"),aI=t("node:os");var aD=()=>Math.random().toString(36).slice(2,9),aA=new Set(["ANNOUNCE","RESPONSE"]),ak=(e,t)=>{var a=JSON.parse(e.toString());return t(a)&&aA.has(a.t)&&a.d?.info||null},aC=()=>{var e=[];for(var t of Object.values(aI.networkInterfaces()))for(var a of t)if(function(){if("IPv4"!==a.family||a.internal)return 1;var t=a.address.split(".").map(Number),r=a.netmask.split(".").map(Number),i=t.map((e,t)=>(e|255&~r[t]).toString()).join(".");e.push({address:a.address,broadcast:i})}())continue;return e},ax=({port:e,timeout:t=3e3,idleTimeout:a=0,buildQuery:r,parseMessage:i})=>new Promise((n,p)=>{var o=new Map,d=aO.createSocket("udp4"),s=null,l=null,u=!1,c=e=>{if(!u){u=!0,clearTimeout(s),clearTimeout(l);try{d.close()}catch{}e?p(e):n([...o.values()])}};d.on("error",c),d.on("message",(e,t)=>{if(!u)try{var r=i(e,t);if(!r||o.has(r.key))return;o.set(r.key,r.value),a&&!u&&(clearTimeout(l),l=setTimeout(c,a))}catch{}});try{d.bind(()=>{if(!u)try{d.setBroadcast(!0);var a=r();for(var i of(()=>{var e=new Set(["255.255.255.255","127.0.0.1"]);for(var t of aC())e.add(t.broadcast);return[...e]})())d.send(a,0,a.length,e,i);s=setTimeout(c,t)}catch(e){c(e)}})}catch(e){c(e)}}),aR=(m=ea(function*(e,t=3e3){var a,r=new AbortController;try{a=setTimeout(()=>r.abort(),t);var i=yield fetch(e,{signal:r.signal});if(!i.ok)return null;return yield i.json()}catch{return null}finally{void 0!==a&&clearTimeout(a),r.abort()}}),function(e){return m.apply(this,arguments)}),aV="bricks-devtools",aF=(f=ea(function*({port:e=19851,connectTimeout:t=500,concurrency:a=50,timeout:r=0}={}){var i=aC();if(0===i.length)return[];var n=[],p=r>0?Date.now()+r:0,o=[],d=new Set;for(var s of i){var l=s.address.split(".").slice(0,3).join(".");if(!d.has(l)){d.add(l);for(var u=1;u<255;u++)o.push(`${l}.${u}`)}}for(var c=0;c<o.length&&!(p&&Date.now()>=p);c+=a){var m=o.slice(c,c+a);yield Promise.allSettled(m.map(function(){var a=ea(function*(a){var r=yield a$(a,e,t);r&&n.push({...r,address:a,port:e})});return function(e){return a.apply(this,arguments)}}()))}return n}),function(){return f.apply(this,arguments)}),a$=(h=ea(function*(e,t,a=3e3){return aR(`http://${e}:${t}/devtools/info`,a)}),function(e,t){return h.apply(this,arguments)}),aP=(v=ea(function*(e,t,a=3e3){return aR(`http://${e}:${t}/json/list`,a)}),function(e,t){return v.apply(this,arguments)}),aL=(y=ea(function*(e,t=1e3){for(var a=[],r=e,i=0;i<10;i++){var n=aS.join(r,".bricks","devtools.json");try{var p=yield aN.readFile(n,"utf8"),o=JSON.parse(p),d=yield a$(o.address||"localhost",o.port,t);d&&a.push({name:o.name||"BRICKS Simulator",address:o.address||"localhost",port:o.port,protocols:["cdp"],hasPasscode:!1,source:"project",projectPath:r,...d})}catch{}var s=aS.dirname(r);if(s===r)break;r=s}return a}),function(e){return y.apply(this,arguments)}),aj=(g=ea(function*({timeout:e=3e3,verify:t=!1,udpOnly:a=!1,project:r=!0,port:i=19851,cwd:n=process.cwd(),onStatus:p}={}){var o,d=(({timeout:e=3e3,idleTimeout:t=0}={})=>ax({port:19900,timeout:e,idleTimeout:t,buildQuery:()=>Buffer.from(JSON.stringify({t:"QUERY",v:"1.0",s:aV,d:{id:`cli-${aD()}`}})),parseMessage:(e,t)=>{var a=ak(e,e=>e?.s===aV);if(!a)return null;var r=t.address;return{key:`${r}:${a.port}`,value:{...a,address:r}}}}))({timeout:e,idleTimeout:800}),s=a?Promise.resolve([]):(p?.("Scanning via UDP + HTTP probe..."),aF({port:i,timeout:e})),l=r?aL(n,1e3):Promise.resolve([]),u=aT((yield Promise.all([d,s,l])),3),c=(e=>{var t=new Map;for(var a of e){var r=a.deviceId||`${a.address}:${a.port}`,i=t.get(r);if(!i){t.set(r,{...a,addresses:[a.address],protocols:[...a.protocols||[]]});continue}for(var n of(i.addresses.includes(a.address)||i.addresses.push(a.address),"127.0.0.1"===i.address&&"127.0.0.1"!==a.address&&(i.address=a.address),a.protocols||[]))i.protocols.includes(n)||i.protocols.push(n);for(var p of Object.entries(a)){var o=aT(p,2),d=o[0],s=o[1];null!=s&&"address"!==d&&"addresses"!==d&&"protocols"!==d&&(void 0===i[d]||null===i[d])&&(i[d]=s)}}return[...t.values()]})([...u[0],...u[1],...u[2]]);if(0===c.length)return[];if(t){p?.(`Verifying ${c.length} server(s)...`);var m,f=yield Promise.all(c.map((m=ea(function*(e){var t=yield a$(e.address,e.port);return{...e,...t||{},address:e.address,port:e.port,verified:!!t,version:t?.version||e.version}}),function(e){return m.apply(this,arguments)})));c.splice(0,c.length,...f)}return p?.("Checking chrome://inspect support..."),yield Promise.all(c.map((o=ea(function*(e){var t=yield aP(e.address,e.port);if(t){e.chromeInspect=!0;var a=(e=>{if(!e)return null;var t=e.match(/\/ws\/(.+)$/);return t?decodeURIComponent(t[1]):null})(t[0]?.webSocketDebuggerUrl);a&&(e.passcode=a)}}),function(e){return o.apply(this,arguments)}))),c}),function(){return g.apply(this,arguments)}),aM=i(76982);let aU=t("fs"),aB=t("path");var aq=i(70857),aQ=aB.join(aq.homedir(),".bricks-cli"),aY=aB.join(aQ,"config.json"),aG=`${aY}.lock`,az=`${aY}.oauth-refresh.lock`,aH=new Int32Array(new SharedArrayBuffer(4)),aW=e=>new Promise(t=>setTimeout(t,e)),aK=e=>{if(!Number.isInteger(e)||e<=0)return!1;try{return process.kill(e,0),!0}catch(e){return"ESRCH"!==e.code}},aJ=e=>{try{var t=aU.readFileSync(e,"utf8"),a=aU.statSync(e),r=null;try{var i=JSON.parse(t);Number.isInteger(i?.pid)&&"string"==typeof i?.nonce&&(r=i)}catch{}return{raw:t,stat:a,owner:r}}catch(e){if("ENOENT"===e.code)return null;throw e}},aZ=e=>{var t,a=aJ(e);if(!a)return!0;var r=a.owner?!aK(a.owner.pid):Date.now()-a.stat.mtimeMs>1e3;if(!r)return!1;var i=`${e}.recovery`;try{t=aX(i)}catch(e){if("EEXIST"===e.code)return!1;throw e}try{if(!(a=aJ(e)))return!0;if(!(r=a.owner?!aK(a.owner.pid):Date.now()-a.stat.mtimeMs>1e3))return!1;return aU.unlinkSync(e),!0}catch(e){if("ENOENT"===e.code)return!0;throw e}finally{a1(i,t)}},aX=e=>{var t,a={pid:process.pid,nonce:aM.randomUUID()},r=`${e}.${a.pid}.${a.nonce}.candidate`;try{t=aU.openSync(r,"wx",384),aU.writeFileSync(t,JSON.stringify(a)),aU.fsyncSync(t),aU.closeSync(t),t=void 0}catch(e){if(void 0!==t)try{aU.closeSync(t)}catch{}try{aU.unlinkSync(r)}catch{}throw e}try{aU.linkSync(r,e)}catch(e){try{aU.unlinkSync(r)}catch{}throw e}try{aU.unlinkSync(r)}catch(e){"ENOENT"!==e.code&&console.error(`Failed to clean up shared BRICKS lock candidate: ${e.message}`)}return{owner:a}},a1=(e,{owner:t})=>{try{var a;(a=aJ(e))&&a.owner?.nonce===t.nonce&&aU.unlinkSync(e)}catch(e){"ENOENT"!==e.code&&console.error(`Failed to release shared BRICKS lock: ${e.message}`)}},a0=e=>{aU.mkdirSync(aQ,{recursive:!0});for(var t,a=Date.now()+5e3;!t;)try{t=aX(aG)}catch(e){if("EEXIST"!==e.code)throw e;if(aZ(aG))continue;if(Date.now()>=a)throw Error(`Timed out waiting for shared BRICKS config lock: ${aG}`);Atomics.wait(aH,0,0,20)}try{return e()}finally{a1(aG,t)}},a2=(_=ea(function*(e){aU.mkdirSync(aQ,{recursive:!0});for(var t,a=Date.now()+5e3;!t;)try{t=aX(aG)}catch(e){if("EEXIST"!==e.code)throw e;if(aZ(aG))continue;if(Date.now()>=a)throw Error(`Timed out waiting for shared BRICKS config lock: ${aG}`);yield aW(20)}try{var r=e();if(r&&"function"==typeof r.then)throw Error("Shared BRICKS config lock callbacks must be synchronous");return r}finally{a1(aG,t)}}),function(e){return _.apply(this,arguments)}),a6=(b=ea(function*(e,{timeoutMs:t=3e4}={}){aU.mkdirSync(aQ,{recursive:!0});for(var a,r=Date.now()+t;!a;)try{a=aX(az)}catch(e){if("EEXIST"!==e.code)throw e;if(aZ(az))continue;if(Date.now()>=r)throw Error(`Timed out waiting for OAuth refresh lock: ${az}`);yield aW(20)}try{return yield e()}finally{a1(az,a)}}),function(e){return b.apply(this,arguments)}),a4=()=>new a({projectName:"bricks-cli",cwd:aQ,configFileMode:384,schema:{oauth:{type:"object",default:{},properties:{accessToken:{type:"string"},refreshToken:{type:["string","null"]},expiresAt:{type:"string"},user:{type:"object"},audience:{type:"string"}}},tokens:{type:"object",default:{},additionalProperties:{type:"object",properties:{type:{type:"string",enum:["oauth"]},oauthSubject:{type:"string"},token:{type:"string"},name:{type:"string"},workspaceId:{type:"string"},workspaceName:{type:"string"},workspaceBilling:{type:"object"},createdAt:{type:"string"},baseUrl:{type:"string"},activityLogBaseUrl:{type:"string"},bank:{type:"object"}}}},currentProfile:{type:"string",default:"default"},baseUrl:{type:"string",default:"https://display.bricks.tools"},activityLogBaseUrl:{type:"string",default:"https://activity-log.bricks.tools"},devtoolsTokens:{type:"object",default:{},additionalProperties:{type:"object",additionalProperties:{type:"object",properties:{token:{type:"string"},expiresAt:{type:"string"},jti:{type:"string"},workspaceId:{type:"string"}}}}}}}),a3=null,a9=null,a5=()=>a3||=a4(),a8=(w=ea(function*(){if(a3)return a3;a9||=a2(()=>a3||=a4());try{return yield a9}finally{a9=null}}),function(){return w.apply(this,arguments)}),a7=(E=ea(function*(){yield a8()}),function(){return E.apply(this,arguments)}),re={get:e=>a5().get(e),set:(e,t)=>{var a=a5();return a0(()=>a.set(e,t))},clear:()=>{var e=a5();return a0(()=>e.clear())},setAsync:(T=ea(function*(e,t){var a=yield a8();return a2(()=>a.set(e,t))}),function(e,t){return T.apply(this,arguments)}),update:(e,t)=>{var a=a5();return a0(()=>{var r=t(a.get(e));return a.set(e,r),r})},updateAsync:(N=ea(function*(e,t){var a=yield a8();return a2(()=>{var r=t(a.get(e));return a.set(e,r),r})}),function(e,t){return N.apply(this,arguments)}),snapshot:e=>{var t=a5().store;return Object.fromEntries(e.map(e=>[e,t[e]]))},snapshotAsync:(S=ea(function*(e){var t=(yield a8()).store;return Object.fromEntries(e.map(e=>[e,t[e]]))}),function(e){return S.apply(this,arguments)}),transaction:(e,t)=>{var a=a5();return a0(()=>{var r=t(Object.fromEntries(e.map(e=>[e,a.get(e)])))||{};return Object.keys(r).length>0&&a.set(r),r})},transactionAsync:(O=ea(function*(e,t){var a=yield a8();return a2(()=>{var r=t(Object.fromEntries(e.map(e=>[e,a.get(e)])))||{};return Object.keys(r).length>0&&a.set(r),r})}),function(e,t){return O.apply(this,arguments)})},rt=(e,t,a,r)=>{if(!e)return null;var i=null==e.workspaceId?null:String(e.workspaceId);return"oauth"===e.type?e.oauthSubject&&e.oauthSubject===t?.user?.sub?{kind:"oauth",workspaceId:i,oauthSubject:e.oauthSubject,baseUrl:a,activityLogBaseUrl:r}:null:e.token?{kind:"token",workspaceId:i,token:e.token,baseUrl:a,activityLogBaseUrl:r}:null},ra=(e,t,a)=>({exists:void 0!==e,kind:e?.type==="oauth"?"oauth":e?.token?"token":"incomplete",workspaceId:e?.workspaceId==null?null:String(e.workspaceId),credential:e?.type==="oauth"?e.oauthSubject||null:e?.token||null,baseUrl:t,activityLogBaseUrl:a}),rr=(e,{tokens:t={},oauth:a,devtoolsTokens:r={},baseUrl:i,activityLogBaseUrl:n})=>{var p=t[e],o=p?.baseUrl||i,d=p?.activityLogBaseUrl||n,s=rt(p,a,o,d);return{profile:e,tokenInfo:p,oauth:a,fingerprint:s,baseline:ra(p,o,d),bank:s&&p?.bank||null,devtoolsTokens:r[e]||{},baseUrl:o,activityLogBaseUrl:d}},ri=(I=ea(function*(e="default"){return rr(e,(yield re.snapshotAsync(["tokens","oauth","devtoolsTokens","baseUrl","activityLogBaseUrl"])))}),function(){return I.apply(this,arguments)}),rn=(e,t,a)=>{for(var r=re.snapshot(["tokens","baseUrl","activityLogBaseUrl"]),i=r.tokens||{},n=e,p=2;;){var o=i[n];if(!o||"oauth"===o.type&&o.oauthSubject===a&&String(o.workspaceId)===String(t))break;n=`${e}-${p}`,p+=1}var d=i[n];return{profile:n,baseline:ra(d,d?.baseUrl||r.baseUrl,d?.activityLogBaseUrl||r.activityLogBaseUrl)}},rp=(e,t,a,r)=>{var i=a[e],n=i?.workspaceId&&t?.workspaceId&&String(i.workspaceId)===String(t.workspaceId),p=i?.type==="oauth"&&t?.type==="oauth"&&!!i.oauthSubject&&i.oauthSubject===t.oauthSubject||i?.type!=="oauth"&&t?.type!=="oauth"&&!!i?.token&&i.token===t?.token,o=n&&p,d={tokens:{...a,[e]:{...i?.baseUrl?{baseUrl:i.baseUrl}:{},...i?.activityLogBaseUrl?{activityLogBaseUrl:i.activityLogBaseUrl}:{},...o&&i?.bank?{bank:i.bank}:{},...t,createdAt:new Date().toISOString()}}};if(!o&&r[e]){var s={...r};delete s[e],d.devtoolsTokens=s}return d},ro=(e,t)=>{if(e&&t?.user?.sub!==e)throw Error("OAuth account changed. Re-select the workspace for the current account.")},rd=(e,t,a,r)=>!!e&&JSON.stringify(e)===JSON.stringify(ra(t,t?.baseUrl||a,t?.activityLogBaseUrl||r)),rs=(e,t,a,{expectedOAuthSubject:r,makeCurrent:i=!1}={})=>{var n=!1;return re.transaction(["tokens","devtoolsTokens","oauth","currentProfile","baseUrl","activityLogBaseUrl"],({tokens:p={},devtoolsTokens:o={},oauth:d,baseUrl:s,activityLogBaseUrl:l})=>{if(!rd(a,p[e],s,l))return{};ro(r,d),n=!0;var u=rp(e,t,p,o);return i?{...u,currentProfile:e}:u}),n},rl=(D=ea(function*(e,t,a,{expectedOAuthSubject:r,makeCurrent:i=!1}={}){var n=!1;return yield re.transactionAsync(["tokens","devtoolsTokens","oauth","currentProfile","baseUrl","activityLogBaseUrl"],({tokens:p={},devtoolsTokens:o={},oauth:d,baseUrl:s,activityLogBaseUrl:l})=>{if(!rd(a,p[e],s,l))return{};ro(r,d),n=!0;var u=rp(e,t,p,o);return i?{...u,currentProfile:e}:u}),n}),function(e,t,a){return D.apply(this,arguments)}),ru=(e,t)=>{var a=!1;return re.transaction(["tokens","devtoolsTokens"],({tokens:r={},devtoolsTokens:i={}})=>{if(n=r[e],!n||!t||String(n.workspaceId??"")!==String(t.workspaceId??"")||("oauth"===t.type?"oauth"!==n.type||n.oauthSubject!==t.oauthSubject:t.token?"oauth"===n.type||n.token!==t.token:JSON.stringify(n)!==JSON.stringify(t)))return{};a=!0;var n,p={...r};delete p[e];var o={...i};return delete o[e],{tokens:p,devtoolsTokens:o}}),a},rc=(A=ea(function*(e,t,a,r){var i=!1;return yield re.transactionAsync(["tokens","oauth","devtoolsTokens","baseUrl","activityLogBaseUrl"],({tokens:n={},oauth:p,devtoolsTokens:o={},baseUrl:d,activityLogBaseUrl:s})=>((e,t,a,r,i)=>{if(!e)return!1;var n=rt(t,a,t?.baseUrl||r,t?.activityLogBaseUrl||i);return!!n&&n.kind===e.kind&&n.workspaceId===e.workspaceId&&n.baseUrl===e.baseUrl&&n.activityLogBaseUrl===e.activityLogBaseUrl&&("oauth"===n.kind?n.oauthSubject===e.oauthSubject:n.token===e.token)})(t,n[e],p,d,s)?(i=!0,{devtoolsTokens:{...o,[e]:{...o[e],[a]:r}}}):{}),i}),function(e,t,a,r){return A.apply(this,arguments)}),rm=(e,t)=>{if(e)return t(["tokens","devtoolsTokens"],({tokens:t={},devtoolsTokens:a={}})=>{var r={...t},i=[];for(var n of Object.entries(t)){var p=aT(n,2),o=p[0],d=p[1];if(d?.type==="oauth"&&(!d.oauthSubject||d.oauthSubject===e)){i.push(o);var s={...d,oauthSubject:d.oauthSubject||e};delete s.bank,r[o]=s}}var l={...a},u=!1;return i.forEach(e=>{l[e]&&(delete l[e],u=!0)}),{tokens:r,...u?{devtoolsTokens:l}:{}}})},rf=e=>rm(e,re.transaction),rh=e=>rm(e,re.transactionAsync),rv=(e,t,a)=>{if(r=a.oauth,e?.accessToken?!rS(e,r):!!r?.accessToken)return{result:{installed:!1,identityChanged:!1,previous:null},updates:{}};var r,i=a.oauth?.accessToken?a.oauth:null,n=i?.user?.sub,p=!!(n&&t?.user?.sub&&n!==t.user.sub),o={installed:!0,identityChanged:p,previous:i};if(!p)return{result:o,updates:{oauth:t}};var d={...a.tokens||{}},s={...a.devtoolsTokens||{}},l=!1;for(var u of Object.entries(a.tokens||{})){var c=aT(u,2),m=c[0],f=c[1];if(f?.type==="oauth"&&(!f.oauthSubject||f.oauthSubject===n)){var h={...f,oauthSubject:f.oauthSubject||n};delete h.bank,d[m]=h,s[m]&&(delete s[m],l=!0)}}return{result:o,updates:{oauth:t,tokens:d,...l?{devtoolsTokens:s}:{}}}},ry=(e,t)=>{var a;return re.transaction(["oauth","tokens","devtoolsTokens"],r=>{var i=rv(e,t,r);return a=i.result,i.updates}),a},rg=(k=ea(function*(e,t){var a;return yield re.transactionAsync(["oauth","tokens","devtoolsTokens"],r=>{var i=rv(e,t,r);return a=i.result,i.updates}),a}),function(e,t){return k.apply(this,arguments)}),r_=(e="default")=>{var t=((e="default")=>re.get("tokens")[e])(e);return t?"oauth"===t.type?"oauth":t.token?"token":null:null},rb=()=>{var e=re.get("oauth");return e&&Object.keys(e).length>0?e:null},rw=e=>re.set("oauth",e),rE=e=>re.setAsync("oauth",e),rT=()=>re.set("oauth",{}),rN=(C=ea(function*(){var e=null;return yield re.updateAsync("oauth",t=>(t?.accessToken&&(e=t),{})),e}),function(){return C.apply(this,arguments)}),rS=(e,t)=>!!e&&!!t&&e.accessToken===t.accessToken&&e.refreshToken===t.refreshToken,rO=(x=ea(function*(e,t){var a=!1;return yield re.updateAsync("oauth",r=>rS(e,r)?(a=!0,t||{}):r||{}),a}),function(e,t){return x.apply(this,arguments)}),rI=e=>rO(e,{}),rD=(R=ea(function*({client:e,ttlSeconds:t}={}){if(!e?.issueDevtoolsAccessToken)throw Error("A BRICKS workspace client is required to issue a DevTools access token.");return e.issueDevtoolsAccessToken({ttlSeconds:t})}),function(){return R.apply(this,arguments)}),rA=(V=ea(function*({profile:e,client:t,workspaceId:a,ttlSeconds:r,force:i=!1,now:n=Date.now()}={}){var p=e||process.env.BRICKS_PROFILE||re.get("currentProfile"),o=yield ri(p),d=o.tokenInfo,s=o.fingerprint,l=o.devtoolsTokens;if(d?.type==="oauth"&&!s)throw Error(`OAuth profile ${p} belongs to a different account.`);if(!s)throw Error(`Profile ${p} is not logged in or has no workspace id.`);var u=d?.workspaceId,c=a||u;if(!c)throw Error(`Profile ${p} is not logged in or has no workspace id.`);var m=l[c];if(!i&&((e,t=Date.now())=>{if(!e?.token||!e?.expiresAt)return!1;var a=new Date(e.expiresAt).getTime();return Number.isFinite(a)&&a-t>6048e5})(m,n))return m;if(String(c)!==String(u))throw Error(`Profile ${p} has no usable DevTools token for workspace ${c}.`);var f=yield rD({client:t,ttlSeconds:r});if(!f?.token||!f?.expiresAt)throw Error("DevTools access token response was incomplete.");if(f.workspaceId&&String(f.workspaceId)!==String(c))throw Error("DevTools access token was issued for a different workspace.");var h={token:f.token,expiresAt:f.expiresAt,jti:f.jti,workspaceId:f.workspaceId||c};if(!(yield rc(p,s,c,h)))throw Error(`Profile ${p} changed while issuing the DevTools token. Retry.`);return h}),function(){return V.apply(this,arguments)});i(67996);let rk=t("node:crypto");i(27549);var rC=8089,rx=(F=ea(function*(e,t,a=3e3){return aR(`http://${e}:${t}/buttress/info`,a)}),function(e,t){return F.apply(this,arguments)}),rR=aS.join(aI.homedir(),".bricks-cli","buttress"),rV=e=>aS.join(e||rR,"state.json");ea(function*(e,t,a){var r,i,n,p=null,o=!0;try{p=JSON.parse((yield aN.readFile(e,"utf8"))),o=!1}catch(t){if(t instanceof SyntaxError)throw Error(`${e} is not valid JSON; refusing to overwrite it.`);if("ENOENT"!==t.code)throw t}var d=(n=(i=(r=p)&&"object"==typeof r&&!Array.isArray(r)?r:{}).mcpServers&&"object"==typeof i.mcpServers&&!Array.isArray(i.mcpServers)?i.mcpServers:{},{...i,mcpServers:{...n,[t]:a}});return yield aN.writeFile(e,`${JSON.stringify(d,null,2)}
1221
1221
  `,o?{mode:384}:{}),{file:e,created:o}}),ea(function*({client:e,workspaceId:t,serverId:a,name:r}){if(!t)throw Error("A workspace-authenticated client is required to bind Buttress.");var i,n,p,o,d,s,l=yield e.issueDevtoolsAccessToken({});if("string"!=typeof l?.token||!l.token||String(l.workspaceId)!==String(t)||!(Date.parse(l.expiresAt)>Date.now()))throw Error("DevTools token response is incomplete, expired, or belongs to another workspace.");var u=(n=(i=rk.generateKeyPairSync("ed25519")).publicKey,p=i.privateKey,o=n.export({type:"spki",format:"der"}),d=p.export({type:"pkcs8",format:"der"}),s=rk.createHash("sha256").update(o).digest("hex").slice(0,16),{publicKeySpki:o.toString("base64"),privateKeyPkcs8:d.toString("base64"),kid:s}),c=yield e.bindButtressServer({serverId:a,name:r,serverPublicKey:{spkiBase64:u.publicKeySpki,kid:u.kid}});if(String(c.workspaceId)!==String(t))throw Error("Buttress binding response belongs to another workspace.");return{workspace:{id:c.workspaceId,name:c.workspaceName,serverId:c.serverId,issuerPublicKey:c.issuerPublicKey.pem,kid:c.issuerPublicKey.kid,boundAt:new Date().toISOString()},serverKeyPair:u,devtools:{token:l.token,workspaceId:l.workspaceId,expiresAt:l.expiresAt,...l.jti?{jti:l.jti}:{}}}});var rF=($=ea(function*(e){var t=rV(e);try{var a=yield aN.readFile(t,"utf8");return JSON.parse(a)}catch(e){if(e instanceof SyntaxError)throw Error("Buttress state.json contains invalid JSON.");if("ENOENT"===e.code)return null;throw e}}),function(e){return $.apply(this,arguments)});ea(function*(e,t){var a=t||rR,r=rV(t);yield aN.mkdir(a,{recursive:!0,mode:448}),yield aN.chmod(a,448);var i=`${r}.tmp-${process.pid}-${rk.randomUUID()}`;try{yield aN.writeFile(i,JSON.stringify(e,null,2),{encoding:"utf8",mode:384}),yield aN.chmod(i,384),yield aN.rename(i,r),yield aN.chmod(r,384)}catch(e){throw yield aN.unlink(i).catch(()=>{}),e}return r});var r$=(P=ea(function*(e){var t=rV(e);try{return yield aN.unlink(t),!0}catch(e){if("ENOENT"===e.code)return!1;throw e}}),function(e){return P.apply(this,arguments)});ea(function*({client:e,serverId:t,workspaceId:a,stateDir:r,keepLocal:i=!1}){var n=i?null:yield rF(r),p=!i&&((e,t,a)=>{if(e?.workspace?.serverId!==t)return!1;var r=e.workspace.id;if(!r||!a||String(r)!==String(a))throw Error(`Local Buttress state belongs to workspace ${r||"unknown"}, but the current profile targets ${a||"unknown"}. Switch profiles first.`);return!0})(n,t,a);return{removed:yield e.unbindButtressServer({serverId:t}),localRemoved:!!p&&(yield r$(r))}});var rP=(L=ea(function*({timeout:e=3e3,verify:t=!0,port:a=rC,onStatus:r}={}){r?.(`Scanning UDP ${a} for ${e}ms...`);var i,n=yield(({timeout:e=3e3,idleTimeout:t=0,port:a=rC}={})=>ax({port:a,timeout:e,idleTimeout:t,buildQuery:()=>Buffer.from(JSON.stringify({t:"QUERY",v:"2.0",d:{id:`cli-${aD()}`}})),parseMessage:(e,t)=>{var a=ak(e,e=>e?.v==="2.0");if(!a)return null;var r={...a,address:t.address};return{key:r.id||`${t.address}:${r.port}`,value:r}}}))({timeout:e,port:a});return 0===n.length?[]:t?(r?.(`Verifying ${n.length} server(s)...`),yield Promise.all(n.map((i=ea(function*(e){var t=yield rx(e.address,e.port,2e3);return t?{...e,...t,address:e.address,verified:!0}:{...e,verified:!1}}),function(e){return i.apply(this,arguments)})))):n}),function(){return L.apply(this,arguments)});let rL=t("node:fs");var rj=(j=ea(function*(e,t,a){var r=yield e.mediaFiles({boxId:t,userTags:[`bricks_screenshot_${a}`],limit:1});return r?.[0]||null}),function(e,t,a){return j.apply(this,arguments)}),rM=(M=ea(function*(e,t=null){var a=yield aa(e);if(!a.ok)throw Error(`Failed to download screenshot: ${a.statusText}`);var r=yield a.buffer(),i=t||aS.join(aI.tmpdir(),`bricks-screenshot-${Date.now()}.png`),n=aS.dirname(i);return rL.existsSync(n)||rL.mkdirSync(n,{recursive:!0}),rL.writeFileSync(i,r),i}),function(e){return M.apply(this,arguments)}),rU=(U=ea(function*(e,t,a,r=null,i={}){var n=t?.media_resource?.enable_media_workspace!==!0?null:t.media_resource?.system_media_box_id||null;if(!n)return{error:"Media workspace not enabled for this workspace"};var p=yield rj(e,n,a);if(!p)return{error:"No screenshot available for this device"};var o=((e,{preferThumbnail:t=!1}={})=>{if(!e?.meta?.storageEndpoint)return null;var a=e.meta,r=a.storageEndpoint,i=a.originalFileKey,n=(t?(e=>{var t=e?.meta;if(!t)return null;if("Video"===e.fileType&&t.videoThumbOriginalFileKey)return t.videoThumbOriginalFileKey;var a=t.imageVersions||[];if(!Array.isArray(a)||0===a.length)return null;var r=a.filter(e=>e?.strategy==="BOUNDED"&&"number"==typeof e.width).sort((e,t)=>e.width-t.width);return(r[0]||a[0])?.key||null})(e):null)||i;return n?`${r}/${n}`:null})(p,i);return o?{path:yield rM(o,r),file:p,url:o}:{error:"Could not build screenshot URL"}}),function(e,t,a){return U.apply(this,arguments)}),rB=i(35317),rq=i(10750),rQ=e=>{try{return(0,rB.execSync)(`which ${e}`,{stdio:"ignore"}),!0}catch{return!1}},rY=(e,t,a)=>new Promise((r,i)=>{var n=[e,...t].join(" "),p=(0,rB.spawn)(n,[],{cwd:a,stdio:["pipe","ignore","pipe"],shell:!0}),o=[];p.stderr.on("data",e=>o.push(e)),p.on("close",e=>{0===e?r():i(Error(Buffer.concat(o).toString().trim()||`Command failed with code ${e}`))}),p.on("error",i)}),rG=(B=ea(function*(e,t){try{var a=(yield i.e(7456).then(i.bind(i,79491))).format;return(yield a(t,e,{trailingComma:"all",tabWidth:2,semi:!1,singleQuote:!0,printWidth:100})).code}catch{}return e}),function(e,t){return B.apply(this,arguments)}),rz=(q=ea(function*(e,t){var a;return Promise.all(e.map((a=ea(function*(e){var a=aB.join(t,e.name),r=e.input;return e.formatable&&(r=yield rG(r,a)),{...e,filePath:a,content:r}}),function(e){return a.apply(this,arguments)})))}),function(e,t){return q.apply(this,arguments)}),rH=(Q=ea(function*(e,t={}){var a="function"==typeof t.onStatus?t.onStatus:()=>{},r=!1,i=!1;if(!1!==t.install&&rQ("bun")){a("Installing dependencies (bun install)...");try{yield rY("bun",["install"],e),r=!0}catch{}}if(!1!==t.git&&rQ("git")){a("Initializing git repository...");try{yield rY("git",["init"],e),yield rY("git",["add","."],e),yield rY("git",["-c 'user.name=BRICKS CLI'","-c 'user.email=cli@bricks.tools'","commit","-m 'chore: initialize commit'"],e),i=!0}catch{}}return{bunInstalled:r,gitInitialized:i}}),function(e){return Q.apply(this,arguments)}),rW=(Y=ea(function*(e,t,a){var r=a.client,i=a.output,n=a.outputAsTarget;if(!r)throw Error("client is required");if(!i)throw Error("output directory is required");var p=(e=>{for(var t=aB.resolve(e);;){if(aU.existsSync(aB.join(t,"application.json"))||aU.existsSync(aB.join(t,"module.json")))return t;var a=aB.dirname(t);if(a===t)return null;t=a}})(n?aB.dirname(aB.resolve(i)):i);if(p)throw Error(`Cannot initialize a new BRICKS project inside an existing project (${p}). Choose a directory outside the project.`);var o="application"===e?r.applicationProject:r.moduleProject,d=yield o({id:t,buildApplicationOnly:!1,setupGitHubActions:!1!==a.githubActions,setupAgents:!1!==a.agents,setupClaudeCode:!1!==a.claude,setupGeminiCLI:!0===a.gemini});if(!d?.files)throw Error(`${e} project not found`);var s=((e=[])=>{var t=e.find(e=>"application.json"===e.name);if(!t)return"bricks-ctor";try{var a=JSON.parse(t.input);return rq(a.name||"bricks-ctor")}catch{return"bricks-ctor"}})(d.files),l=n?aB.resolve(i):aB.resolve(i,s);if(aU.existsSync(l))throw Error(`Directory already exists: ${l}`);aU.mkdirSync(l,{recursive:!0}),(yield rz(d.files,l)).forEach(e=>{aU.mkdirSync(aB.dirname(e.filePath),{recursive:!0}),aU.writeFileSync(e.filePath,e.content)});var u=yield rH(l,a),c=u.bunInstalled,m=u.gitInitialized;return{success:!0,path:l,files:d.files.length,bunInstalled:c,gitInitialized:m}}),function(e,t,a){return Y.apply(this,arguments)}),rK=process.env.BRICKS_OAUTH_DOMAIN||"auth0.bricks.tools",rJ=process.env.BRICKS_OAUTH_AUDIENCE||"https://display.bricks.tools",rZ="openid profile email offline_access",rX=process.env.BRICKS_OAUTH_CLIENT_ID||"Atyy2gp0suIWE33rj8LtJ0pJpIGHiGaT",r1="/callback",r0="127.0.0.1",r2=()=>!!rX,r6=(e,t,{signal:a}={})=>(()=>{var e=process.env.HTTPS_PROXY||process.env.https_proxy;if(!e)return aa;var t=new ai(e);return(e,a={})=>aa(e,{...a,agent:t})})()(`https://${rK}${e}`,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams(t).toString(),signal:a}),r4=(G=ea(function*(e){var t;try{t=yield e.json()}catch(e){if(e?.name==="AbortError")throw e;t={}}if(!e.ok){var a=Error(t.error_description||t.error||`HTTP ${e.status}`);throw a.code=t.error,a}return t}),function(e){return G.apply(this,arguments)}),r3=(z=ea(function*(e,t,{signal:a}={}){var r=new AbortController,i=()=>r.abort();a?.addEventListener("abort",i,{once:!0}),a?.aborted&&i();var n=setTimeout(()=>r.abort(),15e3);try{return yield r4((yield r6(e,t,{signal:r.signal})))}finally{clearTimeout(n),a?.removeEventListener("abort",i)}}),function(e,t){return z.apply(this,arguments)}),r9=e=>{try{return JSON.parse(Buffer.from(e.split(".")[1],"base64url").toString("utf8"))}catch{return{}}},r5=e=>String(e).replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;").replaceAll("'","&#39;"),r8=({title:e,heading:t,message:a})=>`<!doctype html>
1222
1222
  <html lang="en">
1223
1223
  <head>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fugood/bricks-cli",
3
- "version": "2.26.0-beta.19",
3
+ "version": "2.26.0-beta.20",
4
4
  "description": "BRICKS CLI - Command-line interface for BRICKS Workspace API",
5
5
  "keywords": [
6
6
  "bricks",
@@ -56,11 +56,11 @@
56
56
  "@babel/parser": "7.28.5",
57
57
  "@babel/traverse": "7.28.5",
58
58
  "@babel/types": "7.28.5",
59
- "@fugood/bricks-config-core": "^2.26.0-beta.19",
60
- "@fugood/bricks-core-generated": "^2.26.0-beta.19",
59
+ "@fugood/bricks-config-core": "^2.26.0-beta.20",
60
+ "@fugood/bricks-core-generated": "^2.26.0-beta.20",
61
61
  "@fugood/bricks-devtools-core": "^2.26.0-beta.18",
62
62
  "@fugood/bricks-system-properties-definition": "^2.25.3",
63
- "@fugood/property-bank-calc-generated": "^2.26.0-beta.19",
63
+ "@fugood/property-bank-calc-generated": "^2.26.0-beta.20",
64
64
  "@huggingface/gguf": "^0.3.2",
65
65
  "@iarna/toml": "^3.0.0",
66
66
  "@inquirer/prompts": "^7.0.0",
@@ -89,5 +89,5 @@
89
89
  "engines": {
90
90
  "node": ">=18.0.0"
91
91
  },
92
- "gitHead": "59c100eee13c4152667a221954959f741ef0194f"
92
+ "gitHead": "ca31dd0b8e73e39b22addc5e34c33f5240ef64a1"
93
93
  }