@fugood/bricks-cli 2.26.0-beta.25 → 2.26.0-beta.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.
- package/lib/1010.js +1 -1
- package/lib/1215.js +1 -1
- package/lib/1374.js +1 -1
- package/lib/1708.js +6 -6
- package/lib/2486.js +1 -1
- package/lib/2517.js +1 -1
- package/lib/2557.js +1 -1
- package/lib/3223.js +1 -1
- package/lib/6818.js +1 -1
- package/lib/7511.js +3 -1
- package/lib/907.js +12 -17
- package/lib/9439.js +88 -88
- package/lib/index.js +6 -6
- package/lib/lib.js +7 -12
- package/package.json +5 -5
package/lib/index.js
CHANGED
|
@@ -100,9 +100,9 @@ Matching Device Groups (${n.matches.length})`)),console.log("─".repeat(80)),n.
|
|
|
100
100
|
`));var i=(a=c(function*(){try{var t=yield Promise.all([o.deviceGroup({id:e}),o.devicesByGroup({id:e})]),a=u(t,2),r=a[0],i=a[1];if(process.stdout.write("\x1b[2J\x1b[0f"),console.log(f.default.bold(`Device Group: ${r.name}`)+f.default.gray(` - ${new Date().toLocaleTimeString()}`)),console.log("─".repeat(80)),!i||0===i.length)return void console.log(f.default.yellow("No devices in this group"));var n=0,p=0;i.forEach(e=>{var t=e.device||{},a=t.entry_detail?.watch_dog_timer?.last_alive_time,o=(0,y.Ed)(a),r=t.name||t.device_name||e.target_name||t._id||"Unknown",i=t.entry_detail?.application?.name||f.default.gray("No app");"online"===o.state?n++:p++,console.log(`${_(o)} ${f.default.cyan(r.padEnd(30))} ${i}`)}),console.log("─".repeat(80)),console.log(`Online: ${f.default.green(n)} Offline: ${f.default.red(p)}`),console.log(`
|
|
101
101
|
${f.default.gray("Press Ctrl+C to stop")}`)}catch(e){console.error(f.default.red(`Error: ${e.message}`))}}),function(){return a.apply(this,arguments)});yield i(),setInterval(i,r)}),function(e,t){return l.apply(this,arguments)}))},68473(e,t,a){a.d(t,{K:()=>u});var o,r,i=a(99436),n=a(35679),p=a(73284),d=a(47988),s=a(31802),l=(o=i(function*(e){return(0,(yield Promise.all([a.e(3332),a.e(1826),a.e(3781),a.e(5698),a.e(1010),a.e(9439)]).then(a.bind(a,70114))).startStdioServer)(e)}),function(e){return o.apply(this,arguments)}),u=new n.uB("mcp").description("MCP server management");u.command("start").description("Start the BRICKS MCP server in STDIO mode").option("-t, --token <token>","API token (overrides saved token)").action((r=i(function*(e){var t=(0,d.getCurrentProfile)(),a=(0,s.getConnectionContext)(t),o=a.auth,r=a.baseUrl,i=a.activityLogBaseUrl,n=e.token?null:o,u=e.token||(n?.kind==="token"?n.token:null);u||n||(console.error(p.default.red("Error: No API credential found.")),console.error(p.default.gray("Please login first with: bricks auth login")),console.error(p.default.gray("Or provide a token with: bricks mcp start --token <token>")),process.exit(1));try{yield l({...u?{token:u}:{getAuthHeaders:n.getHeaders},baseUrl:r,activityLogBaseUrl:i})}catch(e){console.error(p.default.red(`Failed to start MCP server: ${e.message}`)),process.exit(1)}}),function(e){return r.apply(this,arguments)}))},12569(e,t,a){a.d(t,{u:()=>D});var o,r,i,n,p,d,s,l,u,c=a(68832),m=a(99436),f=a(35679),h=()=>(l||(l=Promise.all([Promise.resolve().then(a.bind(a,73284)),Promise.resolve().then(a.bind(a,14636)),Promise.resolve().then(a.bind(a,56493)),a.e(831).then(a.bind(a,60450))]).then(([e,t,a,o])=>({chalk:e.default,ora:t.default,requireAuth:a.requireAuth,isMediaEnabled:o.isMediaEnabled,buildScreenshotUrl:o.buildScreenshotUrl}))),l),v=(o=m(function*(e,t){var a=yield e.workspace();if(!t.isMediaEnabled(a))throw Error("Media workspace not enabled for this workspace")}),function(e,t){return o.apply(this,arguments)}),g=e=>{var t=e.meta||{};if(!t.originalFileUploaded)return{ready:!1,label:"Uploading"};if("Video"===e.fileType){if(!t.videoThumbOriginalFileKey)return{ready:!1,label:"Processing"};if(!t.convertedFileUploaded)return{ready:!1,label:"Transcoding"}}return{ready:!0,label:"Ready"}},y=(e,t)=>e.ready?t.green(e.label):t.yellow(e.label),D=new f.uB("media").description("Media Flow support");D.command("boxes").description("List Media Flow boxes").option("-j, --json","Output as JSON").action((r=m(function*(e){var t=yield h(),a=t.chalk,o=t.requireAuth(),r=t.ora("Fetching media boxes...").start();try{yield v(o,t);var i=yield o.mediaBoxes();if(r.stop(),e.json)return void console.log(JSON.stringify(i,null,2));if(!i||0===i.length)return void console.log(a.yellow("No media boxes found"));console.log(a.bold("\nMedia Boxes")),console.log("─".repeat(80)),i.forEach(e=>{console.log(`${a.cyan(e.name||"Unnamed")} ${a.gray(e.id)}`),e.description&&console.log(` ${e.description}`),e.tags?.length&&console.log(` Tags: ${e.tags.join(", ")}`),null!=e.size&&console.log(` Size: ${e.size}`),console.log()})}catch(e){r.fail(`Failed to list media boxes: ${e.message}`),process.exit(1)}}),function(e){return r.apply(this,arguments)})),D.command("box <id>").description("Get Media Flow box details").option("-j, --json","Output as JSON").action((i=m(function*(e,t){var a=yield h(),o=a.chalk,r=a.requireAuth(),i=a.ora("Fetching media box...").start();try{yield v(r,a);var n=yield r.mediaBox({id:e});if(i.stop(),n||(console.log(o.red("Media box not found")),process.exit(1)),t.json)return void console.log(JSON.stringify(n,null,2));console.log(o.bold(`
|
|
102
102
|
Media Box: ${n.name||"Unnamed"}`)),console.log("─".repeat(60)),console.log(`ID: ${o.gray(n.id)}`),console.log(`Description: ${n.description||o.gray("N/A")}`),console.log(`Tags: ${n.tags?.join(", ")||o.gray("None")}`),null!=n.size&&console.log(`Size: ${n.size}`),n.passcodes?.length&&(console.log(`
|
|
103
|
-
${o.bold("Passcodes")}`),n.passcodes.forEach(e=>{console.log(`- ${e.name||"Passcode"}: ${e.code}`)})),console.log("─".repeat(60))}catch(e){i.fail(`Failed to get media box: ${e.message}`),process.exit(1)}}),function(e,t){return i.apply(this,arguments)})),D.command("files <boxId>").description("List Media Flow files in a box").option("-t, --types <types>","Comma-separated file types to include").option("-u, --user-tag <tag>","Filter by user tag (repeatable)",(e,t)=>[...t,e],[]).option("-l, --limit <limit>","Limit results",e=>Number.parseInt(e,10)).option("-o, --offset <offset>","Offset results",e=>Number.parseInt(e,10)).option("-j, --json","Output as JSON").action((n=m(function*(e,t){var a=yield h(),o=a.chalk,r=a.requireAuth(),i=a.ora("Fetching media files...").start();try{yield v(r,a);var n=t.types?t.types.split(",").map(e=>e.trim()).filter(Boolean):void 0,p=t.userTag?.length?t.userTag:void 0,d=yield r.mediaFiles({boxId:e,includeTypes:n,userTags:p,limit:t.limit,offset:t.offset});if(i.stop(),t.json)return void console.log(JSON.stringify(d,null,2));if(!d||0===d.length)return void console.log(o.yellow("No media files found"));console.log(o.bold(`
|
|
103
|
+
${o.bold("Passcodes")}`),n.passcodes.forEach(e=>{console.log(`- ${e.name||"Passcode"}: ${e.code}`)})),console.log("─".repeat(60))}catch(e){i.fail(`Failed to get media box: ${e.message}`),process.exit(1)}}),function(e,t){return i.apply(this,arguments)})),D.command("files <boxId>").description("List Media Flow files in a box").option("-t, --types <types>","Comma-separated file types to include").option("-u, --user-tag <tag>","Filter by user tag (repeatable)",(e,t)=>[...t,e],[]).option("-l, --limit <limit>","Limit results",e=>Number.parseInt(e,10)).option("-o, --offset <offset>","Offset results",e=>Number.parseInt(e,10)).option("-j, --json","Output as JSON").action((n=m(function*(e,t){var a=yield h(),o=a.chalk,r=a.requireAuth(),i=a.ora("Fetching media files...").start();try{yield v(r,a);var n=t.types?t.types.split(",").map(e=>e.trim().toUpperCase()).filter(Boolean):void 0,p=t.userTag?.length?t.userTag:void 0,d=yield r.mediaFiles({boxId:e,includeTypes:n,userTags:p,limit:t.limit,offset:t.offset});if(i.stop(),t.json)return void console.log(JSON.stringify(d,null,2));if(!d||0===d.length)return void console.log(o.yellow("No media files found"));console.log(o.bold(`
|
|
104
104
|
Media Files (${d.length})`)),console.log("─".repeat(100)),d.forEach(e=>{var t=g(e);console.log(`${o.cyan(e.name||"Unnamed")} ${o.gray(e.id)}`),console.log(` Type: ${e.fileType} Status: ${y(t,o)}`),e.userTags?.length&&console.log(` Tags: ${e.userTags.join(", ")}`),e.updatedAt&&console.log(` Updated: ${new Date(e.updatedAt).toLocaleString()}`),console.log()})}catch(e){i.fail(`Failed to list media files: ${e.message}`),process.exit(1)}}),function(e,t){return n.apply(this,arguments)})),D.command("file <id>").description("Get Media Flow file details").option("-j, --json","Output as JSON").action((p=m(function*(e,t){var a=yield h(),o=a.chalk,r=a.requireAuth(),i=a.ora("Fetching media file...").start();try{yield v(r,a);var n=yield r.mediaFile({id:e});if(i.stop(),n||(console.log(o.red("Media file not found")),process.exit(1)),t.json)return void console.log(JSON.stringify(n,null,2));var p=g(n);console.log(o.bold(`
|
|
105
|
-
Media File: ${n.name||"Unnamed"}`)),console.log("─".repeat(60)),console.log(`ID: ${o.gray(n.id)}`),console.log(`Box ID: ${o.gray(n.boxId)}`),console.log(`Type: ${n.fileType}`),console.log(`Status: ${y(p,o)}`),console.log(`Description: ${n.description||o.gray("N/A")}`),console.log(`Tags: ${n.userTags?.join(", ")||o.gray("None")}`),console.log(`Created: ${o.gray(n.createdAt||"N/A")}`),console.log(`Updated: ${o.gray(n.updatedAt||"N/A")}`);var d=a.buildScreenshotUrl(n),s=a.buildScreenshotUrl(n,{preferThumbnail:!0});n.meta?.originalFileKey&&console.log(`Original Key: ${o.gray(n.meta.originalFileKey)}`),d&&console.log(`Original URL: ${o.gray(d)}`),s&&s!==d&&console.log(`Thumbnail URL: ${o.gray(s)}`),console.log("─".repeat(60))}catch(e){i.fail(`Failed to get media file: ${e.message}`),process.exit(1)}}),function(e,t){return p.apply(this,arguments)}));var w=e=>{var t=e.match(/^(\d+)x(\d+)(?::(\w+))?$/);if(!t)throw Error(`Invalid image version spec: "${e}". Expected format: WxH or WxH:STRATEGY`);return{width:parseInt(t[1],10),height:parseInt(t[2],10),strategy:(t[3]||"FILL").toUpperCase(),copypreview:!1}},b=(d=m(function*(e,t,a,o,r){var i=new FormData;for(var n of Object.entries(t)){var p=c(n,2),d=p[0],s=p[1];i.append(d,s)}i.append("file",new Blob([a],{type:r}),o);var l=yield fetch(e,{method:"POST",body:i});if(!l.ok&&204!==l.status){var u=yield l.text().catch(()=>"");throw Error(`S3 upload failed (${l.status}): ${u}`)}}),function(e,t,a,o,r){return d.apply(this,arguments)});D.command("upload <boxId> <files...>").description("Upload file(s) to a Media Flow box").option("-d, --description <text>","File description","").option("-t, --user-tag <tag>","User tag (repeatable, max 15)",(e,t)=>[...t,e],[]).option("--image-version <spec>","Image resize spec as WxH or WxH:STRATEGY (repeatable)",(e,t)=>[...t,e],[]).option("--image-version-type <type>","Image output format: jpg or png").option("--enable-ai-analysis","Enable AI analysis on uploaded files").option("--ai-instruction <text>","Custom AI analysis instruction").option("--concurrency <n>","Max concurrent uploads",e=>parseInt(e,10),3).option("-j, --json","Output as JSON").action((s=m(function*(e,t,o){var r=yield h(),i=yield(!u&&(u=Promise.all([Promise.resolve().then(a.t.bind(a,51455,19)),Promise.resolve().then(a.t.bind(a,76760,19)),a.e(2247).then(a.t.bind(a,86090,19)),a.e(5212).then(a.bind(a,76983))]).then(([e,t,a,o])=>({readFile:e.readFile,stat:e.stat,basename:t.basename,resolve:t.resolve,lookup:a.lookup,runWithConcurrency:o.runWithConcurrency}))),u),n=r.chalk,p=r.requireAuth(),d=r.ora("Preparing upload...").start();try{if(yield v(p,r),o.userTag.length>15)throw Error("Maximum 15 user tags allowed");var s,l,c=o.imageVersion.map(w),f=o.enableAiAnalysis||!!o.aiInstruction,g=yield Promise.all(t.map((s=m(function*(e){var t=i.resolve(e),a=yield i.stat(t).catch(()=>null);if(!a||!a.isFile())throw Error(`Not a file: ${e}`);var o=i.basename(t),r=i.lookup(o)||"application/octet-stream";return{filePath:t,fileName:o,contentType:r,size:a.size}}),function(e){return s.apply(this,arguments)})));d.stop();var y=g.length;console.log(n.bold(`
|
|
105
|
+
Media File: ${n.name||"Unnamed"}`)),console.log("─".repeat(60)),console.log(`ID: ${o.gray(n.id)}`),console.log(`Box ID: ${o.gray(n.boxId)}`),console.log(`Type: ${n.fileType}`),console.log(`Status: ${y(p,o)}`),console.log(`Description: ${n.description||o.gray("N/A")}`),console.log(`Tags: ${n.userTags?.join(", ")||o.gray("None")}`),console.log(`Created: ${o.gray(n.createdAt||"N/A")}`),console.log(`Updated: ${o.gray(n.updatedAt||"N/A")}`);var d=a.buildScreenshotUrl(n),s=a.buildScreenshotUrl(n,{preferThumbnail:!0});n.meta?.originalFileKey&&console.log(`Original Key: ${o.gray(n.meta.originalFileKey)}`),d&&console.log(`Original URL: ${o.gray(d)}`),s&&s!==d&&console.log(`Thumbnail URL: ${o.gray(s)}`),console.log("─".repeat(60))}catch(e){i.fail(`Failed to get media file: ${e.message}`),process.exit(1)}}),function(e,t){return p.apply(this,arguments)}));var w=e=>{var t=e.match(/^(\d+)x(\d+)(?::(\w+))?$/);if(!t)throw Error(`Invalid image version spec: "${e}". Expected format: WxH or WxH:STRATEGY`);return{width:parseInt(t[1],10),height:parseInt(t[2],10),strategy:(t[3]||"FILL").toUpperCase(),copypreview:!1}},b=(d=m(function*(e,t,a,o,r){var i=new FormData;for(var n of Object.entries(t)){var p=c(n,2),d=p[0],s=p[1];i.append(d,s)}i.append("file",new Blob([a],{type:r}),o);var l=yield fetch(e,{method:"POST",body:i});if(!l.ok&&204!==l.status){var u=yield l.text().catch(()=>"");throw Error(`S3 upload failed (${l.status}): ${u}`)}}),function(e,t,a,o,r){return d.apply(this,arguments)});D.command("upload <boxId> <files...>").description("Upload file(s) to a Media Flow box").option("-d, --description <text>","File description","").option("-t, --user-tag <tag>","User tag (repeatable, max 15)",(e,t)=>[...t,e],[]).option("--image-version <spec>","Image resize spec as WxH or WxH:STRATEGY (repeatable)",(e,t)=>[...t,e],[]).option("--image-version-type <type>","Image output format: jpg or png").option("--enable-ai-analysis","Enable AI analysis on uploaded files").option("--ai-instruction <text>","Custom AI analysis instruction").option("--concurrency <n>","Max concurrent uploads",e=>parseInt(e,10),3).option("-j, --json","Output as JSON").action((s=m(function*(e,t,o){var r=yield h(),i=yield(!u&&(u=Promise.all([Promise.resolve().then(a.t.bind(a,51455,19)),Promise.resolve().then(a.t.bind(a,76760,19)),a.e(2247).then(a.t.bind(a,86090,19)),a.e(5212).then(a.bind(a,76983))]).then(([e,t,a,o])=>({readFile:e.readFile,stat:e.stat,basename:t.basename,resolve:t.resolve,lookup:a.lookup,runWithConcurrency:o.runWithConcurrency}))),u),n=r.chalk,p=r.requireAuth(),d=r.ora("Preparing upload...").start();try{if(yield v(p,r),o.userTag.length>15)throw Error("Maximum 15 user tags allowed");var s,l,c=o.imageVersion.map(w),f=o.enableAiAnalysis||!!o.aiInstruction,g=yield Promise.all(t.map((s=m(function*(e){var t=i.resolve(e),a=yield i.stat(t).catch(()=>null);if(!a||!a.isFile())throw Error(`Not a file: ${e}`);var o=i.basename(t),r=i.lookup(o)||"application/octet-stream";return{filePath:t,fileName:o,contentType:r,size:a.size}}),function(e){return s.apply(this,arguments)})));d.stop();var y=g.length;o.json||console.log(n.bold(`
|
|
106
106
|
Uploading ${y} file${y>1?"s":""} to box ${n.gray(e)}...
|
|
107
107
|
`));var D=[];yield i.runWithConcurrency(g,o.concurrency,(l=m(function*(t,a){var d=`[${a+1}/${y}] ${t.fileName}`,s=r.ora(`${d} — requesting upload...`).start();try{var l,u,m=(l=t.contentType)&&"image/svg+xml"!==l?l.startsWith("image/")?"IMAGE":l.startsWith("video/")?"VIDEO":l.startsWith("audio/")?"AUDIO":"FILE":"FILE",h={imageVersions:"IMAGE"===m?c:[],imageVersionType:"IMAGE"===m?o.imageVersionType:void 0,enableAiAnalysis:f,aiCustomInstruction:o.aiInstruction||void 0},v=yield p.createMediaFileUploadRequest({name:t.fileName,description:o.description,boxId:e,fileType:m,contentType:t.contentType,userTags:o.userTag.length?o.userTag:[],meta:h});s.text=`${d} — uploading to storage...`;var g=JSON.parse(v.meta.uploadInfo),w=yield i.readFile(t.filePath);yield b(g.url,{AWSAccessKeyId:g.AWSAccessKeyId,"Content-Type":g["Content-Type"],key:g.key,Signature:g.Signature,Policy:g.Policy,acl:g.acl},w,t.fileName,t.contentType),s.succeed(`${d} ${n.green("✓")} ${n.gray(`(${m}, ${(u=t.size)<1024?`${u} B`:u<1048576?`${(u/1024).toFixed(1)} KB`:u<0x40000000?`${(u/1048576).toFixed(1)} MB`:`${(u/0x40000000).toFixed(1)} GB`})`)}`),D.push({file:t.fileName,id:v.id,status:"success",fileType:m,size:t.size})}catch(e){s.fail(`${d} — ${e.message}`),D.push({file:t.fileName,id:null,status:"failed",error:e.message})}}),function(e,t){return l.apply(this,arguments)}));var _=D.filter(e=>"success"===e.status).length,k=D.filter(e=>"failed"===e.status).length;o.json?console.log(JSON.stringify({boxId:e,results:D,summary:{total:y,success:_,failed:k}},null,2)):(console.log(),0===k?console.log(n.green(`Uploaded ${_}/${y} files`)):console.log(n.yellow(`Uploaded ${_}/${y} files (${k} failed)`))),k>0&&process.exit(1)}catch(e){d.fail(`Upload failed: ${e.message}`),process.exit(1)}}),function(e,t,a){return s.apply(this,arguments)}))},32541(e,t,a){a.d(t,{A:()=>C});var o,r,i,n,p,d,s,l,u,c,m,f=a(99436),h=a(35679),v=a(73284),g=a(14636),y=a(7586),D=a(56493),w=a(74049),b=a(98593),_=a(90003),k=a(70681),S=a(76250),$=(e,t)=>(0,b.H_)(e,t,{currentVersion:e?.current_version||null,public:!!e?.is_public}),C=new h.uB("module").description("Module management");C.command("new").description("Create a new module").requiredOption("-n, --name <name>","Module name").option("-d, --description <description>","Module description").option("--layout-width <width>","Layout width",parseInt).option("--layout-height <height>","Layout height",parseInt).option("--public","Make module available to all users").option("--allow-modify","Allow users to modify imported module config").option("--init","Initialize a BRICKS Project after creation").option("-o, --output <dir>","Output directory for --init (default: current directory)").option("-y, --yes","Skip prompts for --init").option("-j, --json","Output as JSON").action((o=f(function*(e){var t=(0,D.requireAuth)(),o=e.json?null:(0,g.default)("Creating module...").start();try{var r={name:e.name};e.description&&(r.description=e.description),e.layoutWidth&&(r.layoutWidth=e.layoutWidth),e.layoutHeight&&(r.layoutHeight=e.layoutHeight),e.public&&(r.isPublic=!0),e.allowModify&&(r.isAllowModify=!0);var i=yield t.createModule(r);if(e.json&&!e.init?console.log(JSON.stringify(i,null,2)):e.json||(o.succeed(`Module created: ${v.default.green(i.name)}`),console.log(` ID: ${v.default.gray(i._id)}`),i.description&&console.log(` ${v.default.gray(i.description)}`),console.log(` Public: ${i.is_public?v.default.green("Yes"):v.default.gray("No")}`),console.log(` Allow Modify: ${i.is_allow_modify?v.default.green("Yes"):v.default.gray("No")}`)),e.init){o&&o.stop();var n=(yield Promise.all([a.e(5658),a.e(4456)]).then(a.bind(a,58891))).initProject;yield n("module",i._id,{output:e.output,yes:e.yes,json:e.json})}}catch(t){e.json?console.error(JSON.stringify({error:t.message})):o.fail(`Failed to create module: ${t.message}`),process.exit(1)}}),function(e){return o.apply(this,arguments)})),C.command("list").description("List all modules").option("-k, --keyword <keyword>","Filter by keyword").option("-j, --json","Output as JSON").action((r=f(function*(e){var t=(0,D.requireAuth)(),a=(0,g.default)("Fetching modules...").start();try{var o=yield t.modules({keyword:e.keyword});if(a.stop(),e.json)return void console.log(JSON.stringify(o,null,2));if(!o||0===o.length)return void console.log(v.default.yellow("No modules found"));console.log(v.default.bold("\nModules")),console.log("─".repeat(80)),o.forEach(e=>{var t=e.current_version?`v${e.current_version}`:v.default.gray("no version");console.log(`● ${v.default.cyan(e.name)} ${v.default.gray(t)}`),console.log(` ID: ${v.default.gray(e._id)}`),e.description&&console.log(` ${v.default.gray(e.description)}`),console.log()})}catch(e){a.fail(`Failed to list modules: ${e.message}`),process.exit(1)}}),function(e){return r.apply(this,arguments)})),C.command("list-public").description("Search public modules").requiredOption("-k, --keyword <keyword>","Search keyword (min 2 characters)").option("-j, --json","Output as JSON").action((i=f(function*(e){var t=(0,D.requireAuth)(),a=(0,g.default)("Searching public modules...").start();try{var o=yield t.publicModules({keyword:e.keyword});if(a.stop(),e.json)return void console.log(JSON.stringify(o,null,2));if(!o||0===o.length)return void console.log(v.default.yellow("No public modules found"));console.log(v.default.bold("\nPublic Modules")),console.log("─".repeat(80)),o.forEach(e=>{var t=e.current_version?`v${e.current_version}`:v.default.gray("no version");console.log(`● ${v.default.cyan(e.name)} ${v.default.gray(t)}`),console.log(` ID: ${v.default.gray(e._id)}`),e.description&&console.log(` ${v.default.gray(e.description)}`),console.log()})}catch(e){a.fail(`Failed to search public modules: ${e.message}`),process.exit(1)}}),function(e){return i.apply(this,arguments)})),C.command("get <id>").description("Get module details").option("-j, --json","Output as JSON").action((n=f(function*(e,t){var a=(0,D.requireAuth)(),o=(0,g.default)("Fetching module...").start();try{var r=yield a.module({id:e});if(o.stop(),r||(console.log(v.default.red("Module not found")),process.exit(1)),t.json)return void console.log(JSON.stringify(r,null,2));if(console.log(v.default.bold(`
|
|
108
108
|
Module: ${r.name}`)),console.log("─".repeat(60)),console.log(`ID: ${v.default.gray(r._id)}`),console.log(`Description: ${r.description||v.default.gray("N/A")}`),console.log(`Tags: ${r.tags?.join(", ")||v.default.gray("None")}`),console.log(`Created: ${v.default.gray(r.create_datetime)}`),console.log(`Modified: ${v.default.gray(r.last_modify_datetime)}`),console.log(`
|
|
@@ -113,11 +113,11 @@ ${v.default.bold("Exposed Properties")} (${r.expose_properties.length})`),r.expo
|
|
|
113
113
|
Resolved ${u}`)),console.log("─".repeat(60)),console.log(`Name: ${r.default.cyan(y.name||"Unnamed")}`),console.log(`ID: ${r.default.gray(y._id)}`),console.log(`Selected By: ${g.selectedBy}`),console.log("─".repeat(60));return}if(0===g.matches.length)return void console.log(r.default.yellow(`No ${c} matched "${e}"`));console.log(r.default.bold(`
|
|
114
114
|
Matching ${m} (${g.matches.length})`)),console.log("─".repeat(80)),g.matches.forEach(e=>{console.log(`${r.default.cyan(e.name||"Unnamed")} ${r.default.gray(e._id)}`)}),console.log("─".repeat(80))}catch(a){f?f.fail(`Failed to resolve ${t}: ${a.message}`):(0,p.OW)(a.message,{resource:t,query:e}),process.exit(1)}}),function(e,t){return l.apply(this,arguments)}))}},76250(e,t,a){a.d(t,{n:()=>d});var o=a(99436),r=a(73284),i=a(14636),n=a(44618),p=a(56493),d=(e,{description:t,entityName:a,fetchEntity:d})=>{var s;e.command("short-refs <id>").description(t).option("-k, --keyword <keyword>","Filter by shortId or title").option("-t, --types <types>","Comma-separated shortId prefixes to include (e.g. B,C,S)").option("-j, --json","Output as JSON").action((s=o(function*(e,t){var o=(0,p.requireAuth)(),s=(0,i.default)("Fetching short edit references...").start();try{var l=yield d(o,e);if(s.stop(),!l?.short_edit?.enabled)return void console.log(r.default.yellow(`Short Edit is not enabled for this ${a}`));var u=t.types?t.types.split(",").map(e=>e.trim()).filter(Boolean):[],c=(0,n.V)(l.short_edit.ref_map,{keyword:t.keyword,types:u});if(t.json)return void console.log(JSON.stringify(c,null,2));if(0===c.length)return void console.log(r.default.yellow("No short edit references found"));console.log(r.default.bold(`
|
|
115
115
|
Short Edit References: ${l.name}`)),c.forEach(e=>{console.log(r.default.cyan(`
|
|
116
|
-
${e.label} (${e.prefix}_)`)),e.refs.forEach(({shortId:e,ref:t})=>{var a=t?.title?r.default.gray(`- ${t.title}`):"";console.log(` ${r.default.green(e)} ${a}`)})}),console.log()}catch(e){s.fail(`Failed to fetch short edit references: ${e.message}`),process.exit(1)}}),function(e,t){return s.apply(this,arguments)}))}},38311(e,t,a){a.d(t,{D:()=>u});var o,r,i,n=a(99436),p=a(35679),d=a(73284),s=(o=n(function*(){var e=(yield Promise.resolve().then(a.bind(a,14636))).default,t=yield a.e(6818).then(a.bind(a,53241)),o=t.detectChannel,r=t.detectInstallMethod,i=yield a.e(9405).then(a.bind(a,21068));return{ora:e,detectChannel:o,detectInstallMethod:r,fetchLatestVersionInfo:i.fetchLatestVersionInfo,runUpdateForMethod:i.runUpdateForMethod}}),function(){return o.apply(this,arguments)}),l=(r=n(function*({message:e,defaultValue:t,autoYes:o}){if(o)return!0;(0,(yield Promise.resolve().then(a.bind(a,8479))).isInteractiveTerminal)()||(console.error(d.default.red("Refusing to prompt in a non-interactive shell. Pass -y/--yes to confirm.")),process.exit(1));try{var r=(yield a.e(5658).then(a.bind(a,27521))).confirm;return yield r({message:e,default:t})}catch{return!1}}),function(e){return r.apply(this,arguments)}),u=new p.uB("update-cli").description("Update the BRICKS CLI to the latest version").option("-y, --yes","Skip confirmation prompts").option("--channel <channel>","Override channel (release|beta)").option("--check-update","Only check whether a newer version is available and exit").action((i=n(function*(e){var t,a=yield s(),o=a.ora,r=a.detectChannel,i=a.detectInstallMethod,p=a.fetchLatestVersionInfo,u=a.runUpdateForMethod,c="2.26.0-beta.
|
|
116
|
+
${e.label} (${e.prefix}_)`)),e.refs.forEach(({shortId:e,ref:t})=>{var a=t?.title?r.default.gray(`- ${t.title}`):"";console.log(` ${r.default.green(e)} ${a}`)})}),console.log()}catch(e){s.fail(`Failed to fetch short edit references: ${e.message}`),process.exit(1)}}),function(e,t){return s.apply(this,arguments)}))}},38311(e,t,a){a.d(t,{D:()=>u});var o,r,i,n=a(99436),p=a(35679),d=a(73284),s=(o=n(function*(){var e=(yield Promise.resolve().then(a.bind(a,14636))).default,t=yield a.e(6818).then(a.bind(a,53241)),o=t.detectChannel,r=t.detectInstallMethod,i=yield a.e(9405).then(a.bind(a,21068));return{ora:e,detectChannel:o,detectInstallMethod:r,fetchLatestVersionInfo:i.fetchLatestVersionInfo,runUpdateForMethod:i.runUpdateForMethod}}),function(){return o.apply(this,arguments)}),l=(r=n(function*({message:e,defaultValue:t,autoYes:o}){if(o)return!0;(0,(yield Promise.resolve().then(a.bind(a,8479))).isInteractiveTerminal)()||(console.error(d.default.red("Refusing to prompt in a non-interactive shell. Pass -y/--yes to confirm.")),process.exit(1));try{var r=(yield a.e(5658).then(a.bind(a,27521))).confirm;return yield r({message:e,default:t})}catch{return!1}}),function(e){return r.apply(this,arguments)}),u=new p.uB("update-cli").description("Update the BRICKS CLI to the latest version").option("-y, --yes","Skip confirmation prompts").option("--channel <channel>","Override channel (release|beta)").option("--check-update","Only check whether a newer version is available and exit").action((i=n(function*(e){var t,a=yield s(),o=a.ora,r=a.detectChannel,i=a.detectInstallMethod,p=a.fetchLatestVersionInfo,u=a.runUpdateForMethod,c="2.26.0-beta.27",m=i(),f=e.channel||r({version:c,execPath:m.execPath});console.log(d.default.bold(e.checkUpdate?"BRICKS CLI Update Check":"BRICKS CLI Update")),console.log("─".repeat(60)),console.log(`Current version : ${d.default.cyan(c)}`),console.log(`Channel : ${d.default.cyan(f)}`),console.log(`Detected method : ${d.default.cyan(m.method)}`),m.execPath&&"binary"===m.method&&console.log(`Binary path : ${d.default.gray(m.execPath)}`),m.installRoot&&console.log(`Install root : ${d.default.gray(m.installRoot)}`);var h="npm"===m.method||"bun"===m.method?"npm":"cdn",v=o(`Fetching latest version info (${h})...`).start(),g=null,y=null;try{g=(yield p(f,m.method)).version,v.succeed(`Latest ${f} (${h}): ${d.default.green(g)}`)}catch(e){y=e,v.warn(`Could not fetch version info: ${e.message}`)}var D=g&&g===c;if(e.checkUpdate){if(y&&process.exit(2),D)return void console.log(d.default.green("\nUp to date."));g&&(console.log(d.default.yellow(`
|
|
117
117
|
Update available: ${c} → ${g}. Run 'bricks update-cli' to install.`)),process.exit(1)),console.log(d.default.yellow("\nCould not determine current version.")),process.exit(2)}if(D&&(console.log(d.default.green("\nAlready running the latest version.")),!(yield l({message:"Reinstall anyway?",defaultValue:!1,autoYes:e.yes}))))return void console.log(d.default.gray("Skipped."));var w=["npm","bun","binary"].includes(m.method);w||console.log(d.default.yellow(`Cannot auto-detect installer (method: ${m.method}); falling back to binary install.`));var b=w?m.method:"binary";if(!(yield l({message:`Update CLI using "${b}" method?`,defaultValue:!0,autoYes:e.yes})))return void console.log(d.default.yellow("Cancelled."));var _=(t=n(function*(e){console.log(d.default.cyan(`
|
|
118
118
|
→ Running ${e} update...`));try{return yield u(e,f,m),!0}catch(t){return console.error(d.default.yellow(`
|
|
119
|
-
${e} update failed: ${t.message}`)),!1}}),function(e){return t.apply(this,arguments)}),k=yield _(b);!k&&"binary"!==b&&(console.log(d.default.cyan("\nFalling back to binary install (same method used by the desktop app).")),(yield l({message:"Try the binary installer as a fallback?",defaultValue:!0,autoYes:e.yes}))&&(k=yield _("binary"))),k||(console.error(d.default.red("\nUpdate failed. See messages above.")),process.exit(1)),console.log(d.default.green("\nUpdate complete."))}),function(e){return i.apply(this,arguments)}))},1878(e,t,a){a.a(e,async function(e,o){try{a.d(t,{A:()=>x,e:()=>F});var r,i=a(99436),n=a(35679),p=a(73284),d=a(47988),s=a(8479),l=a(55614),u=a(43738),c=a(72381),m=a(32541),f=a(28634),h=a(27594),v=a(12569),g=a(55609),y=a(71335),D=a(68473),w=a(27759),b=a(42400),_=a(98247),k=a(70970),S=a(38311),$=a(59845),C=a(22175),E=e([b]);b=(E.then?(await E)():E)[0];var F=(r=i(function*(){var e,t=(0,s.getUnsupportedBunRuntimeError)();if(t){var o=process.argv.includes("--json")||process.argv.includes("-j");console.error(o?JSON.stringify({error:t}):p.default.red(t)),process.exit(1)}var r=process.argv.findIndex(e=>"--auth-profile"===e||"-ap"===e)
|
|
120
|
-
${p.default.bold("Data")}`),console.log(`Remote Update: ${m.bank?.enable_remote_update?p.default.green("Enabled"):p.default.gray("Disabled")}`),console.log(`Spacename: ${m.bank?.spacename||p.default.gray("N/A")}`),console.log("─".repeat(60))}catch(e){u.fail(`Failed to get workspace: ${e.message}`),process.exit(1)}}),function(t){return e.apply(this,arguments)})),n.DM.on("--help",()=>{console.log(""),console.log(p.default.bold("Examples:")),console.log(""),console.log(p.default.gray(" # Sign in with your BRICKS account (opens the browser)")),console.log(" $ bricks auth login"),console.log(""),console.log(p.default.gray(" # Select a workspace as the active profile")),console.log(" $ bricks auth use-workspace"),console.log(""),console.log(p.default.gray(" # Workspace auth (CI/automation): one-time passcode or token")),console.log(" $ bricks auth login-workspace <passcode>"),console.log(""),console.log(p.default.gray(" # List all devices")),console.log(" $ bricks device list"),console.log(""),console.log(p.default.gray(" # Monitor devices in real-time")),console.log(" $ bricks device monitor"),console.log(""),console.log(p.default.gray(" # Control a device")),console.log(" $ bricks device refresh <device-id>"),console.log(" $ bricks device control <device-id> clear-cache"),console.log(""),console.log(p.default.gray(" # Bind a new device")),console.log(' $ bricks device bind <passcode> -n "My Device"'),console.log(""),console.log(p.default.gray(" # List applications")),console.log(" $ bricks app list"),console.log(""),console.log(p.default.gray(" # Start interactive mode")),console.log(" $ bricks interactive"),console.log(""),console.log(p.default.gray(" # Change API endpoint")),console.log(" $ bricks config endpoint beta"),console.log(""),console.log(p.default.gray("Get workspace token from BRICKS Controller:")),console.log(p.default.cyan(" https://control.bricks.tools")),console.log(p.default.gray(" Go to Workspace Settings > API Token"))});var E=process.argv.slice(2);if(0===E.length){if((0,s.shouldStartInteractiveMode)(E))try{var F=(yield Promise.all([a.e(3332),a.e(8295),a.e(3690),a.e(907),a.e(7294)]).then(a.bind(a,94685))).runInteractiveMode;yield F();return}catch(e){console.error(p.default.red(`Failed to start interactive mode: ${e.message}`)),process.exit(1)}console.error(p.default.gray("No command provided. Interactive mode requires a TTY, so showing help instead.\n")),n.DM.outputHelp();return}yield n.DM.parseAsync(process.argv)}),function(){return r.apply(this,arguments)});let x=F;o()}catch(e){o(e)}})},31802(e,t,a){a.r(t),a.d(t,{getAuthContext:()=>d,getConnectionContext:()=>p});var o=a(99436),r=a(47988),i=a(63755),n=(e,t)=>{if(!e)throw Error("Not logged in. Run `bricks auth login` first.");if(e.user?.sub!==t)throw Error("OAuth account changed. Re-select the workspace for the current account.");return e},p=e=>{var t=(0,r.getProfileCredentialSnapshot)(e);return{...t,auth:(({tokenInfo:e,oauth:t})=>{if(!e)return null;if("oauth"===e.type){if(!t?.accessToken||!e.oauthSubject||e.oauthSubject!==t.user?.sub||!e.workspaceId)return null;var a,r,p,d,s=e.oauthSubject,l=(r=o(function*(){return n((yield(0,i.EC)()),s).accessToken}),function(){return r.apply(this,arguments)});return{kind:"oauth",workspaceId:e.workspaceId,workspaceName:e.workspaceName,getAccessToken:l,getHeaders:(p=o(function*(){return{authorization:`Bearer ${yield l()}`,"x-bricks-workspace-id":String(e.workspaceId)}}),function(){return p.apply(this,arguments)}),refresh:(d=o(function*(){n((yield(0,i.EC)({forceRefresh:!0})),s)}),function(){return d.apply(this,arguments)})}}return e.token?{kind:"token",token:e.token,workspaceId:e.workspaceId,workspaceName:e.workspaceName,getHeaders:(a=o(function*(){return{authorization:`Bearer ${e.token}`}}),function(){return a.apply(this,arguments)})}:null})(t)}},d=e=>p(e).auth},31596(e,t,a){a.d(t,{GE:()=>r,YC:()=>o,jR:()=>i});var o=["InSubspace","Global"],r="Data Bank is not enabled for this workspace.",i=e=>{if(e&&!o.includes(e))throw Error(`Invalid meta "${e}" (expected ${o.join(" | ")})`)}},56493(e,t,a){a.r(t),a.d(t,{requireAuth:()=>l,requireAuthConnection:()=>s});var o=a(99436),r=a(73284),i=a(47988),n=a(31802),p=a(29988),d=new Set(["$$typeof","asymmetricMatch","catch","constructor","finally","hasOwnProperty","inspect","nodeType","toJSON","toString","valueOf"]),s=(e=(0,i.getCurrentProfile)())=>{var t,a,s,l=(0,n.getConnectionContext)(e),u=l.auth,c=l.baseUrl;return u||(console.error(r.default.red("Not logged in.")),console.error(r.default.gray("Use `bricks auth login` (OAuth) or `bricks auth login-workspace` (workspace token) first.")),process.exit(1)),{...l,client:(t=null,a=o(function*(){return t||=Promise.resolve((0,p.i)()).then(({createClient:e})=>e(c,u))}),s=function(){return a.apply(this,arguments)},new Proxy({},{get:(e,t)=>t===Symbol.toStringTag?"BricksLazyClient":"string"!=typeof t||"then"===t||d.has(t)?void 0:o(function*(...e){var a=yield s(),o=a[t];return"function"==typeof o?o.apply(a,e):o})}))}},l=(e=(0,i.getCurrentProfile)())=>s(e).client},7586(e,t,a){a.d(t,{$l:()=>i,GF:()=>o,OW:()=>r});var o=e=>{console.log(JSON.stringify(e,null,2))},r=(e,t={})=>{console.error(JSON.stringify({ok:!1,error:{message:e,...t}},null,2))},i=(e,t=4)=>e?e.length<=2*t?"*".repeat(e.length):`${e.slice(0,t)}…${e.slice(-t)}`:null},58021(e,t,a){a.d(t,{n:()=>d});var o,r,i=a(99436),n=a(8479),p=(o=i(function*(){return a.e(5658).then(a.bind(a,27521))}),function(){return o.apply(this,arguments)}),d=(r=i(function*({message:e,autoYes:t,json:a}){if(t)return!0;if(a)throw Error("Confirmation required: pass -y/--yes together with --json");if(!(0,n.isInteractiveTerminal)())throw Error("Refusing to prompt in a non-interactive shell. Pass -y/--yes to confirm.");try{var o=(yield p()).confirm;return yield o({message:e,default:!1})}catch{return!1}}),function(e){return r.apply(this,arguments)})},8479(e,t,a){a.r(t),a.d(t,{MINIMUM_BUN_VERSION:()=>o,getUnsupportedBunRuntimeError:()=>i,isInteractiveTerminal:()=>n,shouldStartInteractiveMode:()=>p});var o="1.3.0",r=e=>{var t=String(e).match(/^(\d+)\.(\d+)\.(\d+)/);return t?t.slice(1).map(Number):null},i=(e=process.versions.bun)=>!e||((e,t)=>{var a=r(e),o=r(t);if(!a||!o)return!1;for(var i=0;i<o.length&&!(a[i]>o[i]);i+=1)if(a[i]<o[i])return!1;return!0})(e,o)?null:`Bun ${e} is not supported by BRICKS CLI. Bun ${o} or later is required. Run \`bun upgrade\` and retry.`,n=()=>!!(process.stdin.isTTY&&process.stdout.isTTY&&"function"==typeof process.stdin.setRawMode),p=(e=[])=>0===e.length&&n()},47988(e,t,a){a.r(t),a.d(t,{CONFIG_DIR:()=>S,CONFIG_LOCK_PATH:()=>C,CONFIG_PATH:()=>$,OAUTH_REFRESH_LOCK_PATH:()=>E,clearBankCredentials:()=>eM,clearConfig:()=>eq,clearOAuth:()=>eS,clearOAuthIfCurrent:()=>eA,clearOAuthIfCurrentAsync:()=>eN,default:()=>eJ,getActivityLogBaseUrl:()=>eU,getBankCredentials:()=>eV,getBaseUrl:()=>G,getCurrentProfile:()=>ej,getCurrentProfileSource:()=>eI,getOAuth:()=>eb,getProfileAuthKind:()=>ew,getProfileCredentialSnapshot:()=>ee,getProfileCredentialSnapshotAsync:()=>et,getProfileFingerprint:()=>ea,getToken:()=>K,getTokenInfo:()=>z,getTokens:()=>W,initializeConfigAsync:()=>q,installOAuthSessionIfCurrent:()=>ey,installOAuthSessionIfCurrentAsync:()=>eD,invalidateOAuthProfileCredentials:()=>eh,invalidateOAuthProfileCredentialsAsync:()=>ev,listProfiles:()=>eP,removeToken:()=>el,removeTokenIfCurrent:()=>eu,replaceOAuthIfCurrent:()=>eF,replaceOAuthIfCurrentAsync:()=>ex,resolveOAuthProfileTarget:()=>eo,setActivityLogBaseUrl:()=>eL,setBankCredentials:()=>eR,setBaseUrl:()=>H,setCurrentProfile:()=>eB,setDevtoolsTokenIfProfileCurrent:()=>ec,setDevtoolsTokenIfProfileCurrentAsync:()=>em,setOAuth:()=>e_,setOAuthAsync:()=>ek,setProfileOverride:()=>eT,setToken:()=>en,setTokenIfProfileCurrent:()=>ed,setTokenIfProfileCurrentAsync:()=>es,takeOAuthSession:()=>e$,takeOAuthSessionAsync:()=>eC,withOAuthRefreshLock:()=>P});var o,r,i,n,p,d,s,l,u,c,m,f,h,v,g=a(68832),y=a(99436),D=a(83440),w=a(76982),b=a(79896),_=a(16928),k=a(70857),S=_.join(k.homedir(),".bricks-cli"),$=_.join(S,"config.json"),C=`${$}.lock`,E=`${$}.oauth-refresh.lock`,F=new Int32Array(new SharedArrayBuffer(4)),x=e=>new Promise(t=>setTimeout(t,e)),A=e=>{if(!Number.isInteger(e)||e<=0)return!1;try{return process.kill(e,0),!0}catch(e){return"ESRCH"!==e.code}},N=e=>{try{var t=b.readFileSync(e,"utf8"),a=b.statSync(e),o=null;try{var r=JSON.parse(t);Number.isInteger(r?.pid)&&"string"==typeof r?.nonce&&(o=r)}catch{}return{raw:t,stat:a,owner:o}}catch(e){if("ENOENT"===e.code)return null;throw e}},O=e=>{var t,a=N(e);if(!a)return!0;var o=a.owner?!A(a.owner.pid):Date.now()-a.stat.mtimeMs>1e3;if(!o)return!1;var r=`${e}.recovery`;try{t=T(r)}catch(e){if("EEXIST"===e.code)return!1;throw e}try{if(!(a=N(e)))return!0;if(!(o=a.owner?!A(a.owner.pid):Date.now()-a.stat.mtimeMs>1e3))return!1;return b.unlinkSync(e),!0}catch(e){if("ENOENT"===e.code)return!0;throw e}finally{j(r,t)}},T=e=>{var t,a={pid:process.pid,nonce:w.randomUUID()},o=`${e}.${a.pid}.${a.nonce}.candidate`;try{t=b.openSync(o,"wx",384),b.writeFileSync(t,JSON.stringify(a)),b.fsyncSync(t),b.closeSync(t),t=void 0}catch(e){if(void 0!==t)try{b.closeSync(t)}catch{}try{b.unlinkSync(o)}catch{}throw e}try{b.linkSync(o,e)}catch(e){try{b.unlinkSync(o)}catch{}throw e}try{b.unlinkSync(o)}catch(e){"ENOENT"!==e.code&&console.error(`Failed to clean up shared BRICKS lock candidate: ${e.message}`)}return{owner:a}},j=(e,{owner:t})=>{try{var a;(a=N(e))&&a.owner?.nonce===t.nonce&&b.unlinkSync(e)}catch(e){"ENOENT"!==e.code&&console.error(`Failed to release shared BRICKS lock: ${e.message}`)}},I=e=>{b.mkdirSync(S,{recursive:!0});for(var t,a=Date.now()+5e3;!t;)try{t=T(C)}catch(e){if("EEXIST"!==e.code)throw e;if(O(C))continue;if(Date.now()>=a)throw Error(`Timed out waiting for shared BRICKS config lock: ${C}`);Atomics.wait(F,0,0,20)}try{return e()}finally{j(C,t)}},B=(o=y(function*(e){b.mkdirSync(S,{recursive:!0});for(var t,a=Date.now()+5e3;!t;)try{t=T(C)}catch(e){if("EEXIST"!==e.code)throw e;if(O(C))continue;if(Date.now()>=a)throw Error(`Timed out waiting for shared BRICKS config lock: ${C}`);yield x(20)}try{var o=e();if(o&&"function"==typeof o.then)throw Error("Shared BRICKS config lock callbacks must be synchronous");return o}finally{j(C,t)}}),function(e){return o.apply(this,arguments)}),P=(r=y(function*(e,{timeoutMs:t=3e4}={}){b.mkdirSync(S,{recursive:!0});for(var a,o=Date.now()+t;!a;)try{a=T(E)}catch(e){if("EEXIST"!==e.code)throw e;if(O(E))continue;if(Date.now()>=o)throw Error(`Timed out waiting for OAuth refresh lock: ${E}`);yield x(20)}try{return yield e()}finally{j(E,a)}}),function(e){return r.apply(this,arguments)}),V=()=>new D.default({projectName:"bricks-cli",cwd:S,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"}}}}}}}),R=null,M=null,U=()=>R||=V(),L=(i=y(function*(){if(R)return R;M||=B(()=>R||=V());try{return yield M}finally{M=null}}),function(){return i.apply(this,arguments)}),q=(n=y(function*(){yield L()}),function(){return n.apply(this,arguments)}),J={get:e=>U().get(e),set:(e,t)=>{var a=U();return I(()=>a.set(e,t))},clear:()=>{var e=U();return I(()=>e.clear())},setAsync:(p=y(function*(e,t){var a=yield L();return B(()=>a.set(e,t))}),function(e,t){return p.apply(this,arguments)}),update:(e,t)=>{var a=U();return I(()=>{var o=t(a.get(e));return a.set(e,o),o})},updateAsync:(d=y(function*(e,t){var a=yield L();return B(()=>{var o=t(a.get(e));return a.set(e,o),o})}),function(e,t){return d.apply(this,arguments)}),snapshot:e=>{var t=U().store;return Object.fromEntries(e.map(e=>[e,t[e]]))},snapshotAsync:(s=y(function*(e){var t=(yield L()).store;return Object.fromEntries(e.map(e=>[e,t[e]]))}),function(e){return s.apply(this,arguments)}),transaction:(e,t)=>{var a=U();return I(()=>{var o=t(Object.fromEntries(e.map(e=>[e,a.get(e)])))||{};return Object.keys(o).length>0&&a.set(o),o})},transactionAsync:(l=y(function*(e,t){var a=yield L();return B(()=>{var o=t(Object.fromEntries(e.map(e=>[e,a.get(e)])))||{};return Object.keys(o).length>0&&a.set(o),o})}),function(e,t){return l.apply(this,arguments)})},G=(e=ej())=>{var t=J.get("tokens");return t[e]?.baseUrl||J.get("baseUrl")},H=(e,t)=>{t?J.update("tokens",(a={})=>({...a,[t]:{...a[t],baseUrl:e}})):J.set("baseUrl",e)},W=()=>J.get("tokens"),K=(e="default")=>{var t=J.get("tokens");return t[e]?.token},z=(e="default")=>J.get("tokens")[e],Y=(e,t,a,o)=>{if(!e)return null;var r=null==e.workspaceId?null:String(e.workspaceId);return"oauth"===e.type?e.oauthSubject&&e.oauthSubject===t?.user?.sub?{kind:"oauth",workspaceId:r,oauthSubject:e.oauthSubject,baseUrl:a,activityLogBaseUrl:o}:null:e.token?{kind:"token",workspaceId:r,token:e.token,baseUrl:a,activityLogBaseUrl:o}:null},Q=(e,t,a,o,r)=>{if(!e)return!1;var i=Y(t,a,t?.baseUrl||o,t?.activityLogBaseUrl||r);return!!i&&i.kind===e.kind&&i.workspaceId===e.workspaceId&&i.baseUrl===e.baseUrl&&i.activityLogBaseUrl===e.activityLogBaseUrl&&("oauth"===i.kind?i.oauthSubject===e.oauthSubject:i.token===e.token)},Z=(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}),X=(e,{tokens:t={},oauth:a,devtoolsTokens:o={},baseUrl:r,activityLogBaseUrl:i})=>{var n=t[e],p=n?.baseUrl||r,d=n?.activityLogBaseUrl||i,s=Y(n,a,p,d);return{profile:e,tokenInfo:n,oauth:a,fingerprint:s,baseline:Z(n,p,d),bank:s&&n?.bank||null,devtoolsTokens:o[e]||{},baseUrl:p,activityLogBaseUrl:d}},ee=(e="default")=>X(e,J.snapshot(["tokens","oauth","devtoolsTokens","baseUrl","activityLogBaseUrl"])),et=(u=y(function*(e="default"){return X(e,(yield J.snapshotAsync(["tokens","oauth","devtoolsTokens","baseUrl","activityLogBaseUrl"])))}),function(){return u.apply(this,arguments)}),ea=(e="default")=>ee(e).fingerprint,eo=(e,t,a)=>{for(var o=J.snapshot(["tokens","baseUrl","activityLogBaseUrl"]),r=o.tokens||{},i=e,n=2;;){var p=r[i];if(!p||"oauth"===p.type&&p.oauthSubject===a&&String(p.workspaceId)===String(t))break;i=`${e}-${n}`,n+=1}var d=r[i];return{profile:i,baseline:Z(d,d?.baseUrl||o.baseUrl,d?.activityLogBaseUrl||o.activityLogBaseUrl)}},er=(e,t,a,o)=>{var r=a[e],i=r?.workspaceId&&t?.workspaceId&&String(r.workspaceId)===String(t.workspaceId),n=r?.type==="oauth"&&t?.type==="oauth"&&!!r.oauthSubject&&r.oauthSubject===t.oauthSubject||r?.type!=="oauth"&&t?.type!=="oauth"&&!!r?.token&&r.token===t?.token,p=i&&n,d={tokens:{...a,[e]:{...r?.baseUrl?{baseUrl:r.baseUrl}:{},...r?.activityLogBaseUrl?{activityLogBaseUrl:r.activityLogBaseUrl}:{},...p&&r?.bank?{bank:r.bank}:{},...t,createdAt:new Date().toISOString()}}};if(!p&&o[e]){var s={...o};delete s[e],d.devtoolsTokens=s}return d},ei=(e,t)=>{if(e&&t?.user?.sub!==e)throw Error("OAuth account changed. Re-select the workspace for the current account.")},en=(e,t,{expectedOAuthSubject:a}={})=>{J.transaction(a?["tokens","devtoolsTokens","oauth"]:["tokens","devtoolsTokens"],({tokens:o={},devtoolsTokens:r={},oauth:i})=>(ei(a,i),er(e,t,o,r)))},ep=(e,t,a,o)=>!!e&&JSON.stringify(e)===JSON.stringify(Z(t,t?.baseUrl||a,t?.activityLogBaseUrl||o)),ed=(e,t,a,{expectedOAuthSubject:o,makeCurrent:r=!1}={})=>{var i=!1;return J.transaction(["tokens","devtoolsTokens","oauth","currentProfile","baseUrl","activityLogBaseUrl"],({tokens:n={},devtoolsTokens:p={},oauth:d,baseUrl:s,activityLogBaseUrl:l})=>{if(!ep(a,n[e],s,l))return{};ei(o,d),i=!0;var u=er(e,t,n,p);return r?{...u,currentProfile:e}:u}),i},es=(c=y(function*(e,t,a,{expectedOAuthSubject:o,makeCurrent:r=!1}={}){var i=!1;return yield J.transactionAsync(["tokens","devtoolsTokens","oauth","currentProfile","baseUrl","activityLogBaseUrl"],({tokens:n={},devtoolsTokens:p={},oauth:d,baseUrl:s,activityLogBaseUrl:l})=>{if(!ep(a,n[e],s,l))return{};ei(o,d),i=!0;var u=er(e,t,n,p);return r?{...u,currentProfile:e}:u}),i}),function(e,t,a){return c.apply(this,arguments)}),el=e=>{J.transaction(["tokens","devtoolsTokens"],({tokens:t={},devtoolsTokens:a={}})=>{var o={...t};delete o[e];var r={tokens:o};if(a[e]){var i={...a};delete i[e],r.devtoolsTokens=i}return r})},eu=(e,t)=>{var a=!1;return J.transaction(["tokens","devtoolsTokens"],({tokens:o={},devtoolsTokens:r={}})=>{if(i=o[e],!i||!t||String(i.workspaceId??"")!==String(t.workspaceId??"")||("oauth"===t.type?"oauth"!==i.type||i.oauthSubject!==t.oauthSubject:t.token?"oauth"===i.type||i.token!==t.token:JSON.stringify(i)!==JSON.stringify(t)))return{};a=!0;var i,n={...o};delete n[e];var p={...r};return delete p[e],{tokens:n,devtoolsTokens:p}}),a},ec=(e,t,a,o)=>{var r=!1;return J.transaction(["tokens","oauth","devtoolsTokens","baseUrl","activityLogBaseUrl"],({tokens:i={},oauth:n,devtoolsTokens:p={},baseUrl:d,activityLogBaseUrl:s})=>Q(t,i[e],n,d,s)?(r=!0,{devtoolsTokens:{...p,[e]:{...p[e],[a]:o}}}):{}),r},em=(m=y(function*(e,t,a,o){var r=!1;return yield J.transactionAsync(["tokens","oauth","devtoolsTokens","baseUrl","activityLogBaseUrl"],({tokens:i={},oauth:n,devtoolsTokens:p={},baseUrl:d,activityLogBaseUrl:s})=>Q(t,i[e],n,d,s)?(r=!0,{devtoolsTokens:{...p,[e]:{...p[e],[a]:o}}}):{}),r}),function(e,t,a,o){return m.apply(this,arguments)}),ef=(e,t)=>{if(e)return t(["tokens","devtoolsTokens"],({tokens:t={},devtoolsTokens:a={}})=>{var o={...t},r=[];for(var i of Object.entries(t)){var n=g(i,2),p=n[0],d=n[1];if(d?.type==="oauth"&&(!d.oauthSubject||d.oauthSubject===e)){r.push(p);var s={...d,oauthSubject:d.oauthSubject||e};delete s.bank,o[p]=s}}var l={...a},u=!1;return r.forEach(e=>{l[e]&&(delete l[e],u=!0)}),{tokens:o,...u?{devtoolsTokens:l}:{}}})},eh=e=>ef(e,J.transaction),ev=e=>ef(e,J.transactionAsync),eg=(e,t,a)=>{if(o=a.oauth,e?.accessToken?!eE(e,o):!!o?.accessToken)return{result:{installed:!1,identityChanged:!1,previous:null},updates:{}};var o,r=a.oauth?.accessToken?a.oauth:null,i=r?.user?.sub,n=!!(i&&t?.user?.sub&&i!==t.user.sub),p={installed:!0,identityChanged:n,previous:r};if(!n)return{result:p,updates:{oauth:t}};var d={...a.tokens||{}},s={...a.devtoolsTokens||{}},l=!1;for(var u of Object.entries(a.tokens||{})){var c=g(u,2),m=c[0],f=c[1];if(f?.type==="oauth"&&(!f.oauthSubject||f.oauthSubject===i)){var h={...f,oauthSubject:f.oauthSubject||i};delete h.bank,d[m]=h,s[m]&&(delete s[m],l=!0)}}return{result:p,updates:{oauth:t,tokens:d,...l?{devtoolsTokens:s}:{}}}},ey=(e,t)=>{var a;return J.transaction(["oauth","tokens","devtoolsTokens"],o=>{var r=eg(e,t,o);return a=r.result,r.updates}),a},eD=(f=y(function*(e,t){var a;return yield J.transactionAsync(["oauth","tokens","devtoolsTokens"],o=>{var r=eg(e,t,o);return a=r.result,r.updates}),a}),function(e,t){return f.apply(this,arguments)}),ew=(e="default")=>{var t=z(e);return t?"oauth"===t.type?"oauth":t.token?"token":null:null},eb=()=>{var e=J.get("oauth");return e&&Object.keys(e).length>0?e:null},e_=e=>J.set("oauth",e),ek=e=>J.setAsync("oauth",e),eS=()=>J.set("oauth",{}),e$=()=>{var e=null;return J.update("oauth",t=>(t?.accessToken&&(e=t),{})),e},eC=(h=y(function*(){var e=null;return yield J.updateAsync("oauth",t=>(t?.accessToken&&(e=t),{})),e}),function(){return h.apply(this,arguments)}),eE=(e,t)=>!!e&&!!t&&e.accessToken===t.accessToken&&e.refreshToken===t.refreshToken,eF=(e,t)=>{var a=!1;return J.update("oauth",o=>eE(e,o)?(a=!0,t||{}):o||{}),a},ex=(v=y(function*(e,t){var a=!1;return yield J.updateAsync("oauth",o=>eE(e,o)?(a=!0,t||{}):o||{}),a}),function(e,t){return v.apply(this,arguments)}),eA=e=>eF(e,{}),eN=e=>ex(e,{}),eO=null,eT=e=>{eO=e},ej=()=>eO||process.env.BRICKS_PROFILE||J.get("currentProfile"),eI=()=>eO?"override":process.env.BRICKS_PROFILE?"env":"config",eB=e=>J.set("currentProfile",e),eP=()=>{var e=J.get("tokens"),t=J.get("currentProfile");return Object.keys(e).map(a=>({...e[a],name:a,current:a===t}))},eV=(e="default")=>{var t=J.get("tokens")[e];if(t?.type==="oauth"){var a=eb();if(!t.oauthSubject||t.oauthSubject!==a?.user?.sub)return null}return t?.bank||null},eR=(e,t,{expectedProfile:a}={})=>{var o=!1;return J.transaction(["tokens","oauth","baseUrl","activityLogBaseUrl"],({tokens:r={},oauth:i,baseUrl:n,activityLogBaseUrl:p})=>(!a||Q(a,r[e],i,n,p))&&r[e]?(o=!0,{tokens:{...r,[e]:{...r[e],bank:t}}}):{}),o},eM=(e,{expectedProfile:t,expectedSpacekey:a}={})=>{var o=!1;return J.transaction(["tokens","oauth","baseUrl","activityLogBaseUrl"],({tokens:r={},oauth:i,baseUrl:n,activityLogBaseUrl:p})=>{if(t&&!Q(t,r[e],i,n,p)||!r[e]?.bank||a&&r[e].bank.spacekey!==a)return{};o=!0;var d={...r[e]};return delete d.bank,{tokens:{...r,[e]:d}}}),o},eU=(e=ej())=>{var t=J.get("tokens");return t[e]?.activityLogBaseUrl||J.get("activityLogBaseUrl")},eL=(e,t)=>{t?J.update("tokens",(a={})=>({...a,[t]:{...a[t],activityLogBaseUrl:e}})):J.set("activityLogBaseUrl",e)},eq=()=>{J.clear()};let eJ=J},54782(e,t,a){a.d(t,{Cj:()=>i,vc:()=>r});var o="http://localhost:3006",r=(e,t,a,r=process.env)=>{var i=((e,t=process.env)=>{var a;if(t.BRICKS_CONTROLLER_URL)return t.BRICKS_CONTROLLER_URL.replace(/\/$/,"");try{a=new URL(e)}catch{return null}return"localhost"===a.hostname||"127.0.0.1"===a.hostname?o:/^display(-[a-z0-9]+)?\.bricks\.tools$/.test(a.hostname)?`${a.protocol}//${a.hostname.replace(/^display/,"control")}`:null})(e,r);if(!i)return null;var n=i===o?`dev-${t}`:t,p=Object.entries(a).map(([e,t])=>`${e}=${encodeURIComponent(t)}`).join("&");return`${i}/${n}?${p}`},i=(e,t,a=process.env)=>r(e,"webLauncher.html",{token:t},a)},9683(e,t,a){a.d(t,{Ed:()=>r,RZ:()=>o,mz:()=>i});var o=3e5,r=(e,t=Date.now())=>{if(!e)return{state:"unknown",tone:"gray",glyph:"○",label:"Unknown"};var a=t-new Date(e).getTime();return a<=o?{state:"online",tone:"green",glyph:"●",label:"Online"}:{state:"offline",tone:a<36e5?"yellow":"red",glyph:"○",label:a<36e5?`${Math.floor(a/6e4)}m ago`:a<864e5?`${Math.floor(a/36e5)}h ago`:`${Math.floor(a/864e5)}d ago`}},i=({state:e,glyph:t,label:a})=>`${t} ${"offline"===e?`Offline (${a})`:a}`},75646(e,t,a){a.r(t),a.d(t,{discoverDevToolsServers:()=>d,httpProbeSubnet:()=>s,verifyDevToolsServer:()=>l});var o,r,i=a(99436),n=a(19557),p="bricks-devtools",d=({timeout:e=3e3,idleTimeout:t=0}={})=>(0,n.YH)({port:19900,timeout:e,idleTimeout:t,buildQuery:()=>Buffer.from(JSON.stringify({t:"QUERY",v:"1.0",s:p,d:{id:`cli-${(0,n.BW)()}`}})),parseMessage:(e,t)=>{var a=(0,n.nl)(e,e=>e?.s===p);if(!a)return null;var o=t.address;return{key:`${o}:${a.port}`,value:{...a,address:o}}}}),s=(o=i(function*({port:e=19851,connectTimeout:t=500,concurrency:a=50,timeout:o=0}={}){var r=(0,n.r9)();if(0===r.length)return[];var p=[],d=o>0?Date.now()+o:0,s=[],u=new Set;for(var c of r){var m=c.address.split(".").slice(0,3).join(".");if(!u.has(m)){u.add(m);for(var f=1;f<255;f++)s.push(`${m}.${f}`)}}for(var h=0;h<s.length&&!(d&&Date.now()>=d);h+=a){var v=s.slice(h,h+a);yield Promise.allSettled(v.map(function(){var a=i(function*(a){var o=yield l(a,e,t);o&&p.push({...o,address:a,port:e})});return function(e){return a.apply(this,arguments)}}()))}return p}),function(){return o.apply(this,arguments)}),l=(r=i(function*(e,t,a=3e3){return(0,n.uE)(`http://${e}:${t}/devtools/info`,a)}),function(e,t){return r.apply(this,arguments)})},29988(e,t,a){a.d(t,{U:()=>r,i:()=>o});var o=()=>"u">typeof module&&"function"==typeof module.require?module.require("../gql/client.js"):Promise.all([a.e(3332),a.e(8295),a.e(907)]).then(a.bind(a,85382)),r=()=>"u">typeof module&&"function"==typeof module.require?module.require("../gql/controller-client.js"):Promise.all([a.e(3332),a.e(8295),a.e(7494)]).then(a.bind(a,59957))},19557(e,t,a){a.d(t,{BW:()=>p,YH:()=>u,nl:()=>s,r9:()=>l,uE:()=>c});var o,r=a(99436),i=a(41314),n=a(48161),p=()=>Math.random().toString(36).slice(2,9),d=new Set(["ANNOUNCE","RESPONSE"]),s=(e,t)=>{var a=JSON.parse(e.toString());return t(a)&&d.has(a.t)&&a.d?.info||null},l=()=>{var e=[];for(var t of Object.values(n.networkInterfaces()))for(var a of t)if(function(){if("IPv4"!==a.family||a.internal)return 1;var t=a.address.split(".").map(Number),o=a.netmask.split(".").map(Number),r=t.map((e,t)=>(e|255&~o[t]).toString()).join(".");e.push({address:a.address,broadcast:r})}())continue;return e},u=({port:e,timeout:t=3e3,idleTimeout:a=0,buildQuery:o,parseMessage:r})=>new Promise((n,p)=>{var d=new Map,s=i.createSocket("udp4"),u=null,c=null,m=!1,f=e=>{if(!m){m=!0,clearTimeout(u),clearTimeout(c);try{s.close()}catch{}e?p(e):n([...d.values()])}};s.on("error",f),s.on("message",(e,t)=>{if(!m)try{var o=r(e,t);if(!o||d.has(o.key))return;d.set(o.key,o.value),a&&!m&&(clearTimeout(c),c=setTimeout(f,a))}catch{}});try{s.bind(()=>{if(!m)try{s.setBroadcast(!0);var a=o();for(var r of(()=>{var e=new Set(["255.255.255.255","127.0.0.1"]);for(var t of l())e.add(t.broadcast);return[...e]})())s.send(a,0,a.length,e,r);u=setTimeout(f,t)}catch(e){f(e)}})}catch(e){f(e)}}),c=(o=r(function*(e,t=3e3){var a,o=new AbortController;try{a=setTimeout(()=>o.abort(),t);var r=yield fetch(e,{signal:o.signal});if(!r.ok)return null;return yield r.json()}catch{return null}finally{void 0!==a&&clearTimeout(a),o.abort()}}),function(e){return o.apply(this,arguments)})},63755(e,t,a){a.d(t,{EC:()=>M,IC:()=>U,UY:()=>I,X9:()=>J,Zd:()=>P,b2:()=>j,bo:()=>V,iF:()=>L,n_:()=>$,ph:()=>q});var o,r,i,n,p,d,s,l,u=a(68832),c=a(99436),m=a(76982),f=a(58611),h=a(35317),v=a(79657),g=a(64007),y=a(47988),D=process.env.BRICKS_OAUTH_DOMAIN||"auth0.bricks.tools",w=process.env.BRICKS_OAUTH_AUDIENCE||"https://display.bricks.tools",b="openid profile email offline_access",_=process.env.BRICKS_OAUTH_CLIENT_ID||"Atyy2gp0suIWE33rj8LtJ0pJpIGHiGaT",k="/callback",S="127.0.0.1",$=()=>!!_,C=(e,t,{signal:a}={})=>(()=>{var e=process.env.HTTPS_PROXY||process.env.https_proxy;if(!e)return v.Ay;var t=new g(e);return(e,a={})=>(0,v.Ay)(e,{...a,agent:t})})()(`https://${D}${e}`,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams(t).toString(),signal:a}),E=(o=c(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 o.apply(this,arguments)}),F=(r=c(function*(e,t,{signal:a}={}){var o=new AbortController,r=()=>o.abort();a?.addEventListener("abort",r,{once:!0}),a?.aborted&&r();var i=setTimeout(()=>o.abort(),15e3);try{return yield E((yield C(e,t,{signal:o.signal})))}finally{clearTimeout(i),a?.removeEventListener("abort",r)}}),function(e,t){return r.apply(this,arguments)}),x=e=>String(e).replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'"),A=({title:e,heading:t,message:a})=>`<!doctype html>
|
|
119
|
+
${e} update failed: ${t.message}`)),!1}}),function(e){return t.apply(this,arguments)}),k=yield _(b);!k&&"binary"!==b&&(console.log(d.default.cyan("\nFalling back to binary install (same method used by the desktop app).")),(yield l({message:"Try the binary installer as a fallback?",defaultValue:!0,autoYes:e.yes}))&&(k=yield _("binary"))),k||(console.error(d.default.red("\nUpdate failed. See messages above.")),process.exit(1)),console.log(d.default.green("\nUpdate complete."))}),function(e){return i.apply(this,arguments)}))},1878(e,t,a){a.a(e,async function(e,o){try{a.d(t,{A:()=>x,e:()=>F});var r,i=a(99436),n=a(35679),p=a(73284),d=a(47988),s=a(8479),l=a(55614),u=a(43738),c=a(72381),m=a(32541),f=a(28634),h=a(27594),v=a(12569),g=a(55609),y=a(71335),D=a(68473),w=a(27759),b=a(42400),_=a(98247),k=a(70970),S=a(38311),$=a(59845),C=a(22175),E=e([b]);b=(E.then?(await E)():E)[0];var F=(r=i(function*(){var e,t=(0,s.getUnsupportedBunRuntimeError)();if(t){var o=process.argv.includes("--json")||process.argv.includes("-j");console.error(o?JSON.stringify({error:t}):p.default.red(t)),process.exit(1)}var r=process.argv.findIndex(e=>"--auth-profile"===e||"-ap"===e);if(-1!==r&&process.argv[r+1]){var E=process.argv[r+1];(0,d.setProfileOverride)(E),process.env.BRICKS_PROFILE=E,process.argv.splice(r,2)}n.DM.name("bricks").description("BRICKS CLI - Command-line interface for BRICKS Workspace API").version("2.26.0-beta.27","-v, --version","output the version number").enablePositionalOptions(),n.DM.addCommand(l.s),n.DM.addCommand(u._),n.DM.addCommand(c.B),n.DM.addCommand(m.A),n.DM.addCommand(f.p),n.DM.addCommand(h.n),n.DM.addCommand(v.u),n.DM.addCommand(g.E),n.DM.addCommand(y.oT),n.DM.addCommand(D.K),n.DM.addCommand(w.gf),n.DM.addCommand(b.D),n.DM.addCommand(_.v),n.DM.addCommand(k.l),n.DM.addCommand(S.D),n.DM.addCommand($.Q),n.DM.addCommand(C.g),n.DM.command("interactive").alias("i").description("Start interactive mode with Ink UI").action(i(function*(){try{var e=(yield Promise.all([a.e(3332),a.e(8295),a.e(3690),a.e(907),a.e(7294)]).then(a.bind(a,94685))).runInteractiveMode;yield e()}catch(e){console.error(p.default.red(`Failed to start interactive mode: ${e.message}`)),process.exit(1)}})),n.DM.command("workspace").alias("ws").description("Show current workspace information").option("-j, --json","Output as JSON").action((e=i(function*(e){var t=(yield Promise.resolve().then(a.bind(a,47988))).getCurrentProfile,o=(yield Promise.resolve().then(a.bind(a,31802))).getConnectionContext,r=(yield Promise.all([a.e(3332),a.e(8295),a.e(907)]).then(a.bind(a,85382))).createClient,i=(yield Promise.resolve().then(a.bind(a,14636))).default,n=t(),d=o(n),s=d.auth,l=d.baseUrl;s||(console.error(p.default.red("Not logged in. Use `bricks auth login` first.")),process.exit(1));var u=i("Fetching workspace info...").start();try{var c=r(l,s),m=yield c.workspace();if(u.stop(),e.json)return void console.log(JSON.stringify(m,null,2));console.log(p.default.bold("\nWorkspace Information")),console.log("─".repeat(60)),console.log(`Name: ${p.default.green(m.name)}`),console.log(`ID: ${p.default.gray(m._id)}`),console.log(`Description: ${m.description||p.default.gray("N/A")}`),console.log(`
|
|
120
|
+
${p.default.bold("Data")}`),console.log(`Remote Update: ${m.bank?.enable_remote_update?p.default.green("Enabled"):p.default.gray("Disabled")}`),console.log(`Spacename: ${m.bank?.spacename||p.default.gray("N/A")}`),console.log("─".repeat(60))}catch(e){u.fail(`Failed to get workspace: ${e.message}`),process.exit(1)}}),function(t){return e.apply(this,arguments)})),n.DM.on("--help",()=>{console.log(""),console.log(p.default.bold("Examples:")),console.log(""),console.log(p.default.gray(" # Sign in with your BRICKS account (opens the browser)")),console.log(" $ bricks auth login"),console.log(""),console.log(p.default.gray(" # Select a workspace as the active profile")),console.log(" $ bricks auth use-workspace"),console.log(""),console.log(p.default.gray(" # Workspace auth (CI/automation): one-time passcode or token")),console.log(" $ bricks auth login-workspace <passcode>"),console.log(""),console.log(p.default.gray(" # List all devices")),console.log(" $ bricks device list"),console.log(""),console.log(p.default.gray(" # Monitor devices in real-time")),console.log(" $ bricks device monitor"),console.log(""),console.log(p.default.gray(" # Control a device")),console.log(" $ bricks device refresh <device-id>"),console.log(" $ bricks device control <device-id> clear-cache"),console.log(""),console.log(p.default.gray(" # Bind a new device")),console.log(' $ bricks device bind <passcode> -n "My Device"'),console.log(""),console.log(p.default.gray(" # List applications")),console.log(" $ bricks app list"),console.log(""),console.log(p.default.gray(" # Start interactive mode")),console.log(" $ bricks interactive"),console.log(""),console.log(p.default.gray(" # Change API endpoint")),console.log(" $ bricks config endpoint beta"),console.log(""),console.log(p.default.gray("Get workspace token from BRICKS Controller:")),console.log(p.default.cyan(" https://control.bricks.tools")),console.log(p.default.gray(" Go to Workspace Settings > API Token"))});var F=process.argv.slice(2);if(0===F.length){if((0,s.shouldStartInteractiveMode)(F))try{var x=(yield Promise.all([a.e(3332),a.e(8295),a.e(3690),a.e(907),a.e(7294)]).then(a.bind(a,94685))).runInteractiveMode;yield x();return}catch(e){console.error(p.default.red(`Failed to start interactive mode: ${e.message}`)),process.exit(1)}console.error(p.default.gray("No command provided. Interactive mode requires a TTY, so showing help instead.\n")),n.DM.outputHelp();return}yield n.DM.parseAsync(process.argv)}),function(){return r.apply(this,arguments)});let x=F;o()}catch(e){o(e)}})},31802(e,t,a){a.r(t),a.d(t,{getAuthContext:()=>d,getConnectionContext:()=>p});var o=a(99436),r=a(47988),i=a(63755),n=(e,t)=>{if(!e)throw Error("Not logged in. Run `bricks auth login` first.");if(e.user?.sub!==t)throw Error("OAuth account changed. Re-select the workspace for the current account.");return e},p=e=>{var t=(0,r.getProfileCredentialSnapshot)(e);return{...t,auth:(({tokenInfo:e,oauth:t})=>{if(!e)return null;if("oauth"===e.type){if(!t?.accessToken||!e.oauthSubject||e.oauthSubject!==t.user?.sub||!e.workspaceId)return null;var a,r,p,d,s=e.oauthSubject,l=(r=o(function*(){return n((yield(0,i.EC)()),s).accessToken}),function(){return r.apply(this,arguments)});return{kind:"oauth",workspaceId:e.workspaceId,workspaceName:e.workspaceName,getAccessToken:l,getHeaders:(p=o(function*(){return{authorization:`Bearer ${yield l()}`,"x-bricks-workspace-id":String(e.workspaceId)}}),function(){return p.apply(this,arguments)}),refresh:(d=o(function*(){n((yield(0,i.EC)({forceRefresh:!0})),s)}),function(){return d.apply(this,arguments)})}}return e.token?{kind:"token",token:e.token,workspaceId:e.workspaceId,workspaceName:e.workspaceName,getHeaders:(a=o(function*(){return{authorization:`Bearer ${e.token}`}}),function(){return a.apply(this,arguments)})}:null})(t)}},d=e=>p(e).auth},31596(e,t,a){a.d(t,{GE:()=>r,YC:()=>o,jR:()=>i});var o=["InSubspace","Global"],r="Data Bank is not enabled for this workspace.",i=e=>{if(e&&!o.includes(e))throw Error(`Invalid meta "${e}" (expected ${o.join(" | ")})`)}},56493(e,t,a){a.r(t),a.d(t,{requireAuth:()=>l,requireAuthConnection:()=>s});var o=a(99436),r=a(73284),i=a(47988),n=a(31802),p=a(29988),d=new Set(["$$typeof","asymmetricMatch","catch","constructor","finally","hasOwnProperty","inspect","nodeType","toJSON","toString","valueOf"]),s=(e=(0,i.getCurrentProfile)())=>{var t,a,s,l=(0,n.getConnectionContext)(e),u=l.auth,c=l.baseUrl;return u||(console.error(r.default.red("Not logged in.")),console.error(r.default.gray("Use `bricks auth login` (OAuth) or `bricks auth login-workspace` (workspace token) first.")),process.exit(1)),{...l,client:(t=null,a=o(function*(){return t||=Promise.resolve((0,p.i)()).then(({createClient:e})=>e(c,u))}),s=function(){return a.apply(this,arguments)},new Proxy({},{get:(e,t)=>t===Symbol.toStringTag?"BricksLazyClient":"string"!=typeof t||"then"===t||d.has(t)?void 0:o(function*(...e){var a=yield s(),o=a[t];return"function"==typeof o?o.apply(a,e):o})}))}},l=(e=(0,i.getCurrentProfile)())=>s(e).client},7586(e,t,a){a.d(t,{$l:()=>i,GF:()=>o,OW:()=>r});var o=e=>{console.log(JSON.stringify(e,null,2))},r=(e,t={})=>{console.error(JSON.stringify({ok:!1,error:{message:e,...t}},null,2))},i=(e,t=4)=>e?e.length<=2*t?"*".repeat(e.length):`${e.slice(0,t)}…${e.slice(-t)}`:null},58021(e,t,a){a.d(t,{n:()=>d});var o,r,i=a(99436),n=a(8479),p=(o=i(function*(){return a.e(5658).then(a.bind(a,27521))}),function(){return o.apply(this,arguments)}),d=(r=i(function*({message:e,autoYes:t,json:a}){if(t)return!0;if(a)throw Error("Confirmation required: pass -y/--yes together with --json");if(!(0,n.isInteractiveTerminal)())throw Error("Refusing to prompt in a non-interactive shell. Pass -y/--yes to confirm.");try{var o=(yield p()).confirm;return yield o({message:e,default:!1})}catch{return!1}}),function(e){return r.apply(this,arguments)})},8479(e,t,a){a.r(t),a.d(t,{MINIMUM_BUN_VERSION:()=>o,getUnsupportedBunRuntimeError:()=>i,isInteractiveTerminal:()=>n,shouldStartInteractiveMode:()=>p});var o="1.3.0",r=e=>{var t=String(e).match(/^(\d+)\.(\d+)\.(\d+)/);return t?t.slice(1).map(Number):null},i=(e=process.versions.bun)=>!e||((e,t)=>{var a=r(e),o=r(t);if(!a||!o)return!1;for(var i=0;i<o.length&&!(a[i]>o[i]);i+=1)if(a[i]<o[i])return!1;return!0})(e,o)?null:`Bun ${e} is not supported by BRICKS CLI. Bun ${o} or later is required. Run \`bun upgrade\` and retry.`,n=()=>!!(process.stdin.isTTY&&process.stdout.isTTY&&"function"==typeof process.stdin.setRawMode),p=(e=[])=>0===e.length&&n()},47988(e,t,a){a.r(t),a.d(t,{CONFIG_DIR:()=>S,CONFIG_LOCK_PATH:()=>C,CONFIG_PATH:()=>$,OAUTH_REFRESH_LOCK_PATH:()=>E,clearBankCredentials:()=>eM,clearConfig:()=>eq,clearOAuth:()=>eS,clearOAuthIfCurrent:()=>eA,clearOAuthIfCurrentAsync:()=>eN,default:()=>eJ,getActivityLogBaseUrl:()=>eU,getBankCredentials:()=>eV,getBaseUrl:()=>G,getCurrentProfile:()=>ej,getCurrentProfileSource:()=>eI,getOAuth:()=>eb,getProfileAuthKind:()=>ew,getProfileCredentialSnapshot:()=>ee,getProfileCredentialSnapshotAsync:()=>et,getProfileFingerprint:()=>ea,getToken:()=>K,getTokenInfo:()=>z,getTokens:()=>W,initializeConfigAsync:()=>q,installOAuthSessionIfCurrent:()=>ey,installOAuthSessionIfCurrentAsync:()=>eD,invalidateOAuthProfileCredentials:()=>eh,invalidateOAuthProfileCredentialsAsync:()=>ev,listProfiles:()=>eP,removeToken:()=>el,removeTokenIfCurrent:()=>eu,replaceOAuthIfCurrent:()=>eF,replaceOAuthIfCurrentAsync:()=>ex,resolveOAuthProfileTarget:()=>eo,setActivityLogBaseUrl:()=>eL,setBankCredentials:()=>eR,setBaseUrl:()=>H,setCurrentProfile:()=>eB,setDevtoolsTokenIfProfileCurrent:()=>ec,setDevtoolsTokenIfProfileCurrentAsync:()=>em,setOAuth:()=>e_,setOAuthAsync:()=>ek,setProfileOverride:()=>eT,setToken:()=>en,setTokenIfProfileCurrent:()=>ed,setTokenIfProfileCurrentAsync:()=>es,takeOAuthSession:()=>e$,takeOAuthSessionAsync:()=>eC,withOAuthRefreshLock:()=>P});var o,r,i,n,p,d,s,l,u,c,m,f,h,v,g=a(68832),y=a(99436),D=a(83440),w=a(76982),b=a(79896),_=a(16928),k=a(70857),S=_.join(k.homedir(),".bricks-cli"),$=_.join(S,"config.json"),C=`${$}.lock`,E=`${$}.oauth-refresh.lock`,F=new Int32Array(new SharedArrayBuffer(4)),x=e=>new Promise(t=>setTimeout(t,e)),A=e=>{if(!Number.isInteger(e)||e<=0)return!1;try{return process.kill(e,0),!0}catch(e){return"ESRCH"!==e.code}},N=e=>{try{var t=b.readFileSync(e,"utf8"),a=b.statSync(e),o=null;try{var r=JSON.parse(t);Number.isInteger(r?.pid)&&"string"==typeof r?.nonce&&(o=r)}catch{}return{raw:t,stat:a,owner:o}}catch(e){if("ENOENT"===e.code)return null;throw e}},O=e=>{var t,a=N(e);if(!a)return!0;var o=a.owner?!A(a.owner.pid):Date.now()-a.stat.mtimeMs>1e3;if(!o)return!1;var r=`${e}.recovery`;try{t=T(r)}catch(e){if("EEXIST"===e.code)return!1;throw e}try{if(!(a=N(e)))return!0;if(!(o=a.owner?!A(a.owner.pid):Date.now()-a.stat.mtimeMs>1e3))return!1;return b.unlinkSync(e),!0}catch(e){if("ENOENT"===e.code)return!0;throw e}finally{j(r,t)}},T=e=>{var t,a={pid:process.pid,nonce:w.randomUUID()},o=`${e}.${a.pid}.${a.nonce}.candidate`;try{t=b.openSync(o,"wx",384),b.writeFileSync(t,JSON.stringify(a)),b.fsyncSync(t),b.closeSync(t),t=void 0}catch(e){if(void 0!==t)try{b.closeSync(t)}catch{}try{b.unlinkSync(o)}catch{}throw e}try{b.linkSync(o,e)}catch(e){try{b.unlinkSync(o)}catch{}throw e}try{b.unlinkSync(o)}catch(e){"ENOENT"!==e.code&&console.error(`Failed to clean up shared BRICKS lock candidate: ${e.message}`)}return{owner:a}},j=(e,{owner:t})=>{try{var a;(a=N(e))&&a.owner?.nonce===t.nonce&&b.unlinkSync(e)}catch(e){"ENOENT"!==e.code&&console.error(`Failed to release shared BRICKS lock: ${e.message}`)}},I=e=>{b.mkdirSync(S,{recursive:!0});for(var t,a=Date.now()+5e3;!t;)try{t=T(C)}catch(e){if("EEXIST"!==e.code)throw e;if(O(C))continue;if(Date.now()>=a)throw Error(`Timed out waiting for shared BRICKS config lock: ${C}`);Atomics.wait(F,0,0,20)}try{return e()}finally{j(C,t)}},B=(o=y(function*(e){b.mkdirSync(S,{recursive:!0});for(var t,a=Date.now()+5e3;!t;)try{t=T(C)}catch(e){if("EEXIST"!==e.code)throw e;if(O(C))continue;if(Date.now()>=a)throw Error(`Timed out waiting for shared BRICKS config lock: ${C}`);yield x(20)}try{var o=e();if(o&&"function"==typeof o.then)throw Error("Shared BRICKS config lock callbacks must be synchronous");return o}finally{j(C,t)}}),function(e){return o.apply(this,arguments)}),P=(r=y(function*(e,{timeoutMs:t=3e4}={}){b.mkdirSync(S,{recursive:!0});for(var a,o=Date.now()+t;!a;)try{a=T(E)}catch(e){if("EEXIST"!==e.code)throw e;if(O(E))continue;if(Date.now()>=o)throw Error(`Timed out waiting for OAuth refresh lock: ${E}`);yield x(20)}try{return yield e()}finally{j(E,a)}}),function(e){return r.apply(this,arguments)}),V=()=>new D.default({projectName:"bricks-cli",cwd:S,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"}}}}}}}),R=null,M=null,U=()=>R||=V(),L=(i=y(function*(){if(R)return R;M||=B(()=>R||=V());try{return yield M}finally{M=null}}),function(){return i.apply(this,arguments)}),q=(n=y(function*(){yield L()}),function(){return n.apply(this,arguments)}),J={get:e=>U().get(e),set:(e,t)=>{var a=U();return I(()=>a.set(e,t))},clear:()=>{var e=U();return I(()=>e.clear())},setAsync:(p=y(function*(e,t){var a=yield L();return B(()=>a.set(e,t))}),function(e,t){return p.apply(this,arguments)}),update:(e,t)=>{var a=U();return I(()=>{var o=t(a.get(e));return a.set(e,o),o})},updateAsync:(d=y(function*(e,t){var a=yield L();return B(()=>{var o=t(a.get(e));return a.set(e,o),o})}),function(e,t){return d.apply(this,arguments)}),snapshot:e=>{var t=U().store;return Object.fromEntries(e.map(e=>[e,t[e]]))},snapshotAsync:(s=y(function*(e){var t=(yield L()).store;return Object.fromEntries(e.map(e=>[e,t[e]]))}),function(e){return s.apply(this,arguments)}),transaction:(e,t)=>{var a=U();return I(()=>{var o=t(Object.fromEntries(e.map(e=>[e,a.get(e)])))||{};return Object.keys(o).length>0&&a.set(o),o})},transactionAsync:(l=y(function*(e,t){var a=yield L();return B(()=>{var o=t(Object.fromEntries(e.map(e=>[e,a.get(e)])))||{};return Object.keys(o).length>0&&a.set(o),o})}),function(e,t){return l.apply(this,arguments)})},G=(e=ej())=>{var t=J.get("tokens");return t[e]?.baseUrl||J.get("baseUrl")},H=(e,t)=>{t?J.update("tokens",(a={})=>({...a,[t]:{...a[t],baseUrl:e}})):J.set("baseUrl",e)},W=()=>J.get("tokens"),K=(e="default")=>{var t=J.get("tokens");return t[e]?.token},z=(e="default")=>J.get("tokens")[e],Y=(e,t,a,o)=>{if(!e)return null;var r=null==e.workspaceId?null:String(e.workspaceId);return"oauth"===e.type?e.oauthSubject&&e.oauthSubject===t?.user?.sub?{kind:"oauth",workspaceId:r,oauthSubject:e.oauthSubject,baseUrl:a,activityLogBaseUrl:o}:null:e.token?{kind:"token",workspaceId:r,token:e.token,baseUrl:a,activityLogBaseUrl:o}:null},Q=(e,t,a,o,r)=>{if(!e)return!1;var i=Y(t,a,t?.baseUrl||o,t?.activityLogBaseUrl||r);return!!i&&i.kind===e.kind&&i.workspaceId===e.workspaceId&&i.baseUrl===e.baseUrl&&i.activityLogBaseUrl===e.activityLogBaseUrl&&("oauth"===i.kind?i.oauthSubject===e.oauthSubject:i.token===e.token)},Z=(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}),X=(e,{tokens:t={},oauth:a,devtoolsTokens:o={},baseUrl:r,activityLogBaseUrl:i})=>{var n=t[e],p=n?.baseUrl||r,d=n?.activityLogBaseUrl||i,s=Y(n,a,p,d);return{profile:e,tokenInfo:n,oauth:a,fingerprint:s,baseline:Z(n,p,d),bank:s&&n?.bank||null,devtoolsTokens:o[e]||{},baseUrl:p,activityLogBaseUrl:d}},ee=(e="default")=>X(e,J.snapshot(["tokens","oauth","devtoolsTokens","baseUrl","activityLogBaseUrl"])),et=(u=y(function*(e="default"){return X(e,(yield J.snapshotAsync(["tokens","oauth","devtoolsTokens","baseUrl","activityLogBaseUrl"])))}),function(){return u.apply(this,arguments)}),ea=(e="default")=>ee(e).fingerprint,eo=(e,t,a)=>{for(var o=J.snapshot(["tokens","baseUrl","activityLogBaseUrl"]),r=o.tokens||{},i=e,n=2;;){var p=r[i];if(!p||"oauth"===p.type&&p.oauthSubject===a&&String(p.workspaceId)===String(t))break;i=`${e}-${n}`,n+=1}var d=r[i];return{profile:i,baseline:Z(d,d?.baseUrl||o.baseUrl,d?.activityLogBaseUrl||o.activityLogBaseUrl)}},er=(e,t,a,o)=>{var r=a[e],i=r?.workspaceId&&t?.workspaceId&&String(r.workspaceId)===String(t.workspaceId),n=r?.type==="oauth"&&t?.type==="oauth"&&!!r.oauthSubject&&r.oauthSubject===t.oauthSubject||r?.type!=="oauth"&&t?.type!=="oauth"&&!!r?.token&&r.token===t?.token,p=i&&n,d={tokens:{...a,[e]:{...r?.baseUrl?{baseUrl:r.baseUrl}:{},...r?.activityLogBaseUrl?{activityLogBaseUrl:r.activityLogBaseUrl}:{},...p&&r?.bank?{bank:r.bank}:{},...t,createdAt:new Date().toISOString()}}};if(!p&&o[e]){var s={...o};delete s[e],d.devtoolsTokens=s}return d},ei=(e,t)=>{if(e&&t?.user?.sub!==e)throw Error("OAuth account changed. Re-select the workspace for the current account.")},en=(e,t,{expectedOAuthSubject:a}={})=>{J.transaction(a?["tokens","devtoolsTokens","oauth"]:["tokens","devtoolsTokens"],({tokens:o={},devtoolsTokens:r={},oauth:i})=>(ei(a,i),er(e,t,o,r)))},ep=(e,t,a,o)=>!!e&&JSON.stringify(e)===JSON.stringify(Z(t,t?.baseUrl||a,t?.activityLogBaseUrl||o)),ed=(e,t,a,{expectedOAuthSubject:o,makeCurrent:r=!1}={})=>{var i=!1;return J.transaction(["tokens","devtoolsTokens","oauth","currentProfile","baseUrl","activityLogBaseUrl"],({tokens:n={},devtoolsTokens:p={},oauth:d,baseUrl:s,activityLogBaseUrl:l})=>{if(!ep(a,n[e],s,l))return{};ei(o,d),i=!0;var u=er(e,t,n,p);return r?{...u,currentProfile:e}:u}),i},es=(c=y(function*(e,t,a,{expectedOAuthSubject:o,makeCurrent:r=!1}={}){var i=!1;return yield J.transactionAsync(["tokens","devtoolsTokens","oauth","currentProfile","baseUrl","activityLogBaseUrl"],({tokens:n={},devtoolsTokens:p={},oauth:d,baseUrl:s,activityLogBaseUrl:l})=>{if(!ep(a,n[e],s,l))return{};ei(o,d),i=!0;var u=er(e,t,n,p);return r?{...u,currentProfile:e}:u}),i}),function(e,t,a){return c.apply(this,arguments)}),el=e=>{J.transaction(["tokens","devtoolsTokens"],({tokens:t={},devtoolsTokens:a={}})=>{var o={...t};delete o[e];var r={tokens:o};if(a[e]){var i={...a};delete i[e],r.devtoolsTokens=i}return r})},eu=(e,t)=>{var a=!1;return J.transaction(["tokens","devtoolsTokens"],({tokens:o={},devtoolsTokens:r={}})=>{if(i=o[e],!i||!t||String(i.workspaceId??"")!==String(t.workspaceId??"")||("oauth"===t.type?"oauth"!==i.type||i.oauthSubject!==t.oauthSubject:t.token?"oauth"===i.type||i.token!==t.token:JSON.stringify(i)!==JSON.stringify(t)))return{};a=!0;var i,n={...o};delete n[e];var p={...r};return delete p[e],{tokens:n,devtoolsTokens:p}}),a},ec=(e,t,a,o)=>{var r=!1;return J.transaction(["tokens","oauth","devtoolsTokens","baseUrl","activityLogBaseUrl"],({tokens:i={},oauth:n,devtoolsTokens:p={},baseUrl:d,activityLogBaseUrl:s})=>Q(t,i[e],n,d,s)?(r=!0,{devtoolsTokens:{...p,[e]:{...p[e],[a]:o}}}):{}),r},em=(m=y(function*(e,t,a,o){var r=!1;return yield J.transactionAsync(["tokens","oauth","devtoolsTokens","baseUrl","activityLogBaseUrl"],({tokens:i={},oauth:n,devtoolsTokens:p={},baseUrl:d,activityLogBaseUrl:s})=>Q(t,i[e],n,d,s)?(r=!0,{devtoolsTokens:{...p,[e]:{...p[e],[a]:o}}}):{}),r}),function(e,t,a,o){return m.apply(this,arguments)}),ef=(e,t)=>{if(e)return t(["tokens","devtoolsTokens"],({tokens:t={},devtoolsTokens:a={}})=>{var o={...t},r=[];for(var i of Object.entries(t)){var n=g(i,2),p=n[0],d=n[1];if(d?.type==="oauth"&&(!d.oauthSubject||d.oauthSubject===e)){r.push(p);var s={...d,oauthSubject:d.oauthSubject||e};delete s.bank,o[p]=s}}var l={...a},u=!1;return r.forEach(e=>{l[e]&&(delete l[e],u=!0)}),{tokens:o,...u?{devtoolsTokens:l}:{}}})},eh=e=>ef(e,J.transaction),ev=e=>ef(e,J.transactionAsync),eg=(e,t,a)=>{if(o=a.oauth,e?.accessToken?!eE(e,o):!!o?.accessToken)return{result:{installed:!1,identityChanged:!1,previous:null},updates:{}};var o,r=a.oauth?.accessToken?a.oauth:null,i=r?.user?.sub,n=!!(i&&t?.user?.sub&&i!==t.user.sub),p={installed:!0,identityChanged:n,previous:r};if(!n)return{result:p,updates:{oauth:t}};var d={...a.tokens||{}},s={...a.devtoolsTokens||{}},l=!1;for(var u of Object.entries(a.tokens||{})){var c=g(u,2),m=c[0],f=c[1];if(f?.type==="oauth"&&(!f.oauthSubject||f.oauthSubject===i)){var h={...f,oauthSubject:f.oauthSubject||i};delete h.bank,d[m]=h,s[m]&&(delete s[m],l=!0)}}return{result:p,updates:{oauth:t,tokens:d,...l?{devtoolsTokens:s}:{}}}},ey=(e,t)=>{var a;return J.transaction(["oauth","tokens","devtoolsTokens"],o=>{var r=eg(e,t,o);return a=r.result,r.updates}),a},eD=(f=y(function*(e,t){var a;return yield J.transactionAsync(["oauth","tokens","devtoolsTokens"],o=>{var r=eg(e,t,o);return a=r.result,r.updates}),a}),function(e,t){return f.apply(this,arguments)}),ew=(e="default")=>{var t=z(e);return t?"oauth"===t.type?"oauth":t.token?"token":null:null},eb=()=>{var e=J.get("oauth");return e&&Object.keys(e).length>0?e:null},e_=e=>J.set("oauth",e),ek=e=>J.setAsync("oauth",e),eS=()=>J.set("oauth",{}),e$=()=>{var e=null;return J.update("oauth",t=>(t?.accessToken&&(e=t),{})),e},eC=(h=y(function*(){var e=null;return yield J.updateAsync("oauth",t=>(t?.accessToken&&(e=t),{})),e}),function(){return h.apply(this,arguments)}),eE=(e,t)=>!!e&&!!t&&e.accessToken===t.accessToken&&e.refreshToken===t.refreshToken,eF=(e,t)=>{var a=!1;return J.update("oauth",o=>eE(e,o)?(a=!0,t||{}):o||{}),a},ex=(v=y(function*(e,t){var a=!1;return yield J.updateAsync("oauth",o=>eE(e,o)?(a=!0,t||{}):o||{}),a}),function(e,t){return v.apply(this,arguments)}),eA=e=>eF(e,{}),eN=e=>ex(e,{}),eO=null,eT=e=>{eO=e},ej=()=>eO||process.env.BRICKS_PROFILE||J.get("currentProfile"),eI=()=>eO?"override":process.env.BRICKS_PROFILE?"env":"config",eB=e=>J.set("currentProfile",e),eP=()=>{var e=J.get("tokens"),t=J.get("currentProfile");return Object.keys(e).map(a=>({...e[a],name:a,current:a===t}))},eV=(e="default")=>{var t=J.get("tokens")[e];if(t?.type==="oauth"){var a=eb();if(!t.oauthSubject||t.oauthSubject!==a?.user?.sub)return null}return t?.bank||null},eR=(e,t,{expectedProfile:a}={})=>{var o=!1;return J.transaction(["tokens","oauth","baseUrl","activityLogBaseUrl"],({tokens:r={},oauth:i,baseUrl:n,activityLogBaseUrl:p})=>(!a||Q(a,r[e],i,n,p))&&r[e]?(o=!0,{tokens:{...r,[e]:{...r[e],bank:t}}}):{}),o},eM=(e,{expectedProfile:t,expectedSpacekey:a}={})=>{var o=!1;return J.transaction(["tokens","oauth","baseUrl","activityLogBaseUrl"],({tokens:r={},oauth:i,baseUrl:n,activityLogBaseUrl:p})=>{if(t&&!Q(t,r[e],i,n,p)||!r[e]?.bank||a&&r[e].bank.spacekey!==a)return{};o=!0;var d={...r[e]};return delete d.bank,{tokens:{...r,[e]:d}}}),o},eU=(e=ej())=>{var t=J.get("tokens");return t[e]?.activityLogBaseUrl||J.get("activityLogBaseUrl")},eL=(e,t)=>{t?J.update("tokens",(a={})=>({...a,[t]:{...a[t],activityLogBaseUrl:e}})):J.set("activityLogBaseUrl",e)},eq=()=>{J.clear()};let eJ=J},54782(e,t,a){a.d(t,{Cj:()=>i,vc:()=>r});var o="http://localhost:3006",r=(e,t,a,r=process.env)=>{var i=((e,t=process.env)=>{var a;if(t.BRICKS_CONTROLLER_URL)return t.BRICKS_CONTROLLER_URL.replace(/\/$/,"");try{a=new URL(e)}catch{return null}return"localhost"===a.hostname||"127.0.0.1"===a.hostname?o:/^display(-[a-z0-9]+)?\.bricks\.tools$/.test(a.hostname)?`${a.protocol}//${a.hostname.replace(/^display/,"control")}`:null})(e,r);if(!i)return null;var n=i===o?`dev-${t}`:t,p=Object.entries(a).map(([e,t])=>`${e}=${encodeURIComponent(t)}`).join("&");return`${i}/${n}?${p}`},i=(e,t,a=process.env)=>r(e,"webLauncher.html",{token:t},a)},9683(e,t,a){a.d(t,{Ed:()=>r,RZ:()=>o,mz:()=>i});var o=3e5,r=(e,t=Date.now())=>{if(!e)return{state:"unknown",tone:"gray",glyph:"○",label:"Unknown"};var a=t-new Date(e).getTime();return a<=o?{state:"online",tone:"green",glyph:"●",label:"Online"}:{state:"offline",tone:a<36e5?"yellow":"red",glyph:"○",label:a<36e5?`${Math.floor(a/6e4)}m ago`:a<864e5?`${Math.floor(a/36e5)}h ago`:`${Math.floor(a/864e5)}d ago`}},i=({state:e,glyph:t,label:a})=>`${t} ${"offline"===e?`Offline (${a})`:a}`},75646(e,t,a){a.r(t),a.d(t,{discoverDevToolsServers:()=>d,httpProbeSubnet:()=>s,verifyDevToolsServer:()=>l});var o,r,i=a(99436),n=a(19557),p="bricks-devtools",d=({timeout:e=3e3,idleTimeout:t=0}={})=>(0,n.YH)({port:19900,timeout:e,idleTimeout:t,buildQuery:()=>Buffer.from(JSON.stringify({t:"QUERY",v:"1.0",s:p,d:{id:`cli-${(0,n.BW)()}`}})),parseMessage:(e,t)=>{var a=(0,n.nl)(e,e=>e?.s===p);if(!a)return null;var o=t.address;return{key:`${o}:${a.port}`,value:{...a,address:o}}}}),s=(o=i(function*({port:e=19851,connectTimeout:t=500,concurrency:a=50,timeout:o=0}={}){var r=(0,n.r9)();if(0===r.length)return[];var p=[],d=o>0?Date.now()+o:0,s=[],u=new Set;for(var c of r){var m=c.address.split(".").slice(0,3).join(".");if(!u.has(m)){u.add(m);for(var f=1;f<255;f++)s.push(`${m}.${f}`)}}for(var h=0;h<s.length&&!(d&&Date.now()>=d);h+=a){var v=s.slice(h,h+a);yield Promise.allSettled(v.map(function(){var a=i(function*(a){var o=yield l(a,e,t);o&&p.push({...o,address:a,port:e})});return function(e){return a.apply(this,arguments)}}()))}return p}),function(){return o.apply(this,arguments)}),l=(r=i(function*(e,t,a=3e3){return(0,n.uE)(`http://${e}:${t}/devtools/info`,a)}),function(e,t){return r.apply(this,arguments)})},29988(e,t,a){a.d(t,{U:()=>r,i:()=>o});var o=()=>"u">typeof module&&"function"==typeof module.require?module.require("../gql/client.js"):Promise.all([a.e(3332),a.e(8295),a.e(907)]).then(a.bind(a,85382)),r=()=>"u">typeof module&&"function"==typeof module.require?module.require("../gql/controller-client.js"):Promise.all([a.e(3332),a.e(8295),a.e(7494)]).then(a.bind(a,59957))},19557(e,t,a){a.d(t,{BW:()=>p,YH:()=>u,nl:()=>s,r9:()=>l,uE:()=>c});var o,r=a(99436),i=a(41314),n=a(48161),p=()=>Math.random().toString(36).slice(2,9),d=new Set(["ANNOUNCE","RESPONSE"]),s=(e,t)=>{var a=JSON.parse(e.toString());return t(a)&&d.has(a.t)&&a.d?.info||null},l=()=>{var e=[];for(var t of Object.values(n.networkInterfaces()))for(var a of t)if(function(){if("IPv4"!==a.family||a.internal)return 1;var t=a.address.split(".").map(Number),o=a.netmask.split(".").map(Number),r=t.map((e,t)=>(e|255&~o[t]).toString()).join(".");e.push({address:a.address,broadcast:r})}())continue;return e},u=({port:e,timeout:t=3e3,idleTimeout:a=0,buildQuery:o,parseMessage:r})=>new Promise((n,p)=>{var d=new Map,s=i.createSocket("udp4"),u=null,c=null,m=!1,f=e=>{if(!m){m=!0,clearTimeout(u),clearTimeout(c);try{s.close()}catch{}e?p(e):n([...d.values()])}};s.on("error",f),s.on("message",(e,t)=>{if(!m)try{var o=r(e,t);if(!o||d.has(o.key))return;d.set(o.key,o.value),a&&!m&&(clearTimeout(c),c=setTimeout(f,a))}catch{}});try{s.bind(()=>{if(!m)try{s.setBroadcast(!0);var a=o();for(var r of(()=>{var e=new Set(["255.255.255.255","127.0.0.1"]);for(var t of l())e.add(t.broadcast);return[...e]})())s.send(a,0,a.length,e,r);u=setTimeout(f,t)}catch(e){f(e)}})}catch(e){f(e)}}),c=(o=r(function*(e,t=3e3){var a,o=new AbortController;try{a=setTimeout(()=>o.abort(),t);var r=yield fetch(e,{signal:o.signal});if(!r.ok)return null;return yield r.json()}catch{return null}finally{void 0!==a&&clearTimeout(a),o.abort()}}),function(e){return o.apply(this,arguments)})},63755(e,t,a){a.d(t,{EC:()=>M,IC:()=>U,UY:()=>I,X9:()=>J,Zd:()=>P,b2:()=>j,bo:()=>V,iF:()=>L,n_:()=>$,ph:()=>q});var o,r,i,n,p,d,s,l,u=a(68832),c=a(99436),m=a(76982),f=a(58611),h=a(35317),v=a(79657),g=a(64007),y=a(47988),D=process.env.BRICKS_OAUTH_DOMAIN||"auth0.bricks.tools",w=process.env.BRICKS_OAUTH_AUDIENCE||"https://display.bricks.tools",b="openid profile email offline_access",_=process.env.BRICKS_OAUTH_CLIENT_ID||"Atyy2gp0suIWE33rj8LtJ0pJpIGHiGaT",k="/callback",S="127.0.0.1",$=()=>!!_,C=(e,t,{signal:a}={})=>(()=>{var e=process.env.HTTPS_PROXY||process.env.https_proxy;if(!e)return v.Ay;var t=new g(e);return(e,a={})=>(0,v.Ay)(e,{...a,agent:t})})()(`https://${D}${e}`,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams(t).toString(),signal:a}),E=(o=c(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 o.apply(this,arguments)}),F=(r=c(function*(e,t,{signal:a}={}){var o=new AbortController,r=()=>o.abort();a?.addEventListener("abort",r,{once:!0}),a?.aborted&&r();var i=setTimeout(()=>o.abort(),15e3);try{return yield E((yield C(e,t,{signal:o.signal})))}finally{clearTimeout(i),a?.removeEventListener("abort",r)}}),function(e,t){return r.apply(this,arguments)}),x=e=>String(e).replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'"),A=({title:e,heading:t,message:a})=>`<!doctype html>
|
|
121
121
|
<html lang="en">
|
|
122
122
|
<head>
|
|
123
123
|
<meta charset="utf-8" />
|
|
@@ -180,7 +180,7 @@ ${p.default.bold("Data")}`),console.log(`Remote Update: ${m.bank?.enable_remote_
|
|
|
180
180
|
<p>${x(a)}</p>
|
|
181
181
|
</main>
|
|
182
182
|
</body>
|
|
183
|
-
</html>`,N=A({title:"Signed in to BRICKS",heading:"Signed in to BRICKS",message:"You can close this tab now."}),O=e=>A({title:"Sign-in failed",heading:"Sign-in failed",message:e}),T="Sign-in cancelled",j=(i=c(function*({onAuthorizeUrl:e,signal:t}={}){if(t?.aborted)throw Error(T);var a,o,r,i,n,p,d,s=(a=m.randomBytes(32).toString("base64url"),o=m.createHash("sha256").update(a).digest("base64url"),{verifier:a,challenge:o}),l=s.verifier,c=s.challenge,h=m.randomBytes(16).toString("base64url"),v=process.env.BRICKS_OAUTH_CALLBACK_PORT,g=null!=v&&""!==v?Number(v):8535,y=new Promise((e,t)=>{r=e,i=t}),$=f.createServer((e,t)=>{var a=new URL(e.url,`http://${S}`);if(a.pathname!==k)return void t.writeHead(404).end();var o=a.searchParams.get("error"),n=a.searchParams.get("code");if(a.searchParams.get("state")!==h)return void t.writeHead(400,{"Content-Type":"text/html"}).end(O("Invalid state"));if(o){var p=a.searchParams.get("error_description")||o;t.writeHead(200,{"Content-Type":"text/html"}).end(O(p)),i(Error(p));return}if(!n){t.writeHead(400,{"Content-Type":"text/html"}).end(O("Invalid state")),i(Error("OAuth callback did not include an authorization code"));return}t.writeHead(200,{"Content-Type":"text/html"}).end(N),r(n)}),C=yield new Promise((e,t)=>{$.once("error",e=>{e?.code==="EADDRINUSE"?t(Error(`Callback port ${g} is already in use — is another sign-in in progress? Close it and retry.`)):t(e)}),$.listen(g,S,()=>e($.address().port))}),E=`http://${S}:${C}${k}`,x=(({redirectUri:e,state:t,challenge:a})=>{var o=new URL(`https://${D}/authorize`);return o.searchParams.set("response_type","code"),o.searchParams.set("client_id",_),o.searchParams.set("redirect_uri",e),o.searchParams.set("scope",b),o.searchParams.set("audience",w),o.searchParams.set("state",t),o.searchParams.set("code_challenge",a),o.searchParams.set("code_challenge_method","S256"),o.toString()})({redirectUri:E,state:h,challenge:c}),A=new Promise((e,t)=>{d=t}),j=()=>d(Error(T));t?.addEventListener("abort",j,{once:!0});try{if(t?.aborted)throw Error(T);var I=new Promise((e,t)=>{n=setTimeout(()=>t(Error("Timed out waiting for the browser sign-in (5 minutes)")),3e5)}),B=e?Promise.resolve().then(()=>e(x)):Promise.resolve(),P=yield Promise.race([Promise.all([B,y]),I,A]),V=u(P,2)[1];p=yield F("/oauth/token",{grant_type:"authorization_code",client_id:_,code:V,code_verifier:l,redirect_uri:E},{signal:t})}catch(e){if(t?.aborted)throw Error(T);throw e}finally{n&&clearTimeout(n),t?.removeEventListener("abort",j),yield new Promise(e=>{$.close(e),$.closeIdleConnections?.()})}if(t?.aborted)throw Error(T);return p}),function(){return i.apply(this,arguments)}),I=(n=c(function*(){return yield F("/oauth/device/code",{client_id:_,scope:b,audience:w})}),function(){return n.apply(this,arguments)}),B=e=>new Promise(t=>setTimeout(t,e)),P=(p=c(function*({device_code:e,interval:t=5,expires_in:a=900}){for(var o=Date.now()+1e3*a,r=1e3*t;Date.now()<o;){yield B(r);try{return yield F("/oauth/token",{grant_type:"urn:ietf:params:oauth:grant-type:device_code",client_id:_,device_code:e})}catch(e){if("authorization_pending"===e.code)continue;if("slow_down"===e.code){r+=5e3;continue}throw e}}throw Error("Device authorization expired before the sign-in was confirmed")}),function(e){return p.apply(this,arguments)}),V=(e,t=null,{preservePrevious:a=!1}={})=>{if(!e?.access_token)throw Error("OAuth token response did not include an access token");if(!a&&!e.id_token)throw Error("OAuth login response did not include an ID token");var o=e.id_token?(e=>{try{return JSON.parse(Buffer.from(e.split(".")[1],"base64url").toString("utf8"))}catch{return{}}})(e.id_token):{};if(!a&&!o.sub)throw Error("OAuth ID token did not include a user subject");if(a&&o.sub&&t?.user?.sub&&o.sub!==t.user.sub)throw Error("OAuth refresh returned a different user identity");var r=a?t?.user:null;return{accessToken:e.access_token,refreshToken:e.refresh_token||(a?t?.refreshToken:null)||null,expiresAt:new Date(Date.now()+1e3*(e.expires_in||0)).toISOString(),user:{sub:o.sub||r?.sub||null,email:o.email||r?.email||null,name:o.name||r?.name||null,nickname:o.nickname||r?.nickname||null,picture:o.picture||r?.picture||null},audience:w}},R=null,M=(d=c(function*({forceRefresh:e=!1}={}){var t=(0,y.getOAuth)();if(!t?.accessToken)return null;var a=new Date(t.expiresAt||0).getTime()-Date.now();if(!e&&a>3e5)return t;if(!t.refreshToken){if(a>0)return t;if(!(yield(0,y.clearOAuthIfCurrentAsync)(t)))return(0,y.getOAuth)();throw Error("OAuth session expired. Run `bricks auth login` again.")}var o=`${t.accessToken}\0${t.refreshToken}`;if(R){var r=R;return r.sessionKey===o?r.promise:(yield r.promise.catch(()=>{}),M({forceRefresh:e}))}var i=(0,y.withOAuthRefreshLock)(c(function*(){var a=(0,y.getOAuth)();if(!a?.accessToken)return null;if(!t||!a||t.accessToken!==a.accessToken||t.refreshToken!==a.refreshToken)return a;var o=new Date(a.expiresAt||0).getTime()-Date.now();if(!e&&o>3e5)return a;if(!a.refreshToken){if(o>0)return a;if(!(yield(0,y.clearOAuthIfCurrentAsync)(a)))return(0,y.getOAuth)();throw Error("OAuth session expired. Run `bricks auth login` again.")}try{var r=yield F("/oauth/token",{grant_type:"refresh_token",client_id:_,refresh_token:a.refreshToken}),i=V(r,a,{preservePrevious:!0});if(!(yield(0,y.replaceOAuthIfCurrentAsync)(a,i)))return(0,y.getOAuth)();return i}catch(e){if("invalid_grant"===e.code){if(!(yield(0,y.clearOAuthIfCurrentAsync)(a)))return(0,y.getOAuth)();throw Error("OAuth session expired. Run `bricks auth login` again.")}throw e}}));R={sessionKey:o,promise:i};try{return yield i}finally{R?.promise===i&&(R=null)}}),function(){return d.apply(this,arguments)}),U=(s=c(function*(e){if(e){var t=new AbortController,a=setTimeout(()=>t.abort(),5e3);try{yield C("/oauth/revoke",{client_id:_,token:e},{signal:t.signal})}catch{}finally{clearTimeout(a),t.abort()}}}),function(e){return s.apply(this,arguments)}),L=(l=c(function*(){var e=yield(0,y.takeOAuthSessionAsync)();return!!e?.accessToken&&(yield U(e.refreshToken),!0)}),function(){return l.apply(this,arguments)}),q=e=>new Promise(t=>{var a=u("darwin"===process.platform?["open",[e]]:"win32"===process.platform?["cmd",["/c","start","",e.replace(/&/g,"^&")]]:["xdg-open",[e]],2),o=a[0],r=a[1];try{var i=(0,h.spawn)(o,r,{stdio:"ignore",detached:!0});i.once("error",()=>t(!1)),i.once("spawn",()=>{i.unref(),t(!0)})}catch{t(!1)}}),J=()=>"darwin"===process.platform||"win32"===process.platform?!process.env.SSH_CONNECTION:!!process.env.DISPLAY||!!process.env.WAYLAND_DISPLAY},10536(e,t,a){a.d(t,{Ep:()=>
|
|
183
|
+
</html>`,N=A({title:"Signed in to BRICKS",heading:"Signed in to BRICKS",message:"You can close this tab now."}),O=e=>A({title:"Sign-in failed",heading:"Sign-in failed",message:e}),T="Sign-in cancelled",j=(i=c(function*({onAuthorizeUrl:e,signal:t}={}){if(t?.aborted)throw Error(T);var a,o,r,i,n,p,d,s=(a=m.randomBytes(32).toString("base64url"),o=m.createHash("sha256").update(a).digest("base64url"),{verifier:a,challenge:o}),l=s.verifier,c=s.challenge,h=m.randomBytes(16).toString("base64url"),v=process.env.BRICKS_OAUTH_CALLBACK_PORT,g=null!=v&&""!==v?Number(v):8535,y=new Promise((e,t)=>{r=e,i=t}),$=f.createServer((e,t)=>{var a=new URL(e.url,`http://${S}`);if(a.pathname!==k)return void t.writeHead(404).end();var o=a.searchParams.get("error"),n=a.searchParams.get("code");if(a.searchParams.get("state")!==h)return void t.writeHead(400,{"Content-Type":"text/html"}).end(O("Invalid state"));if(o){var p=a.searchParams.get("error_description")||o;t.writeHead(200,{"Content-Type":"text/html"}).end(O(p)),i(Error(p));return}if(!n){t.writeHead(400,{"Content-Type":"text/html"}).end(O("Invalid state")),i(Error("OAuth callback did not include an authorization code"));return}t.writeHead(200,{"Content-Type":"text/html"}).end(N),r(n)}),C=yield new Promise((e,t)=>{$.once("error",e=>{e?.code==="EADDRINUSE"?t(Error(`Callback port ${g} is already in use — is another sign-in in progress? Close it and retry.`)):t(e)}),$.listen(g,S,()=>e($.address().port))}),E=`http://${S}:${C}${k}`,x=(({redirectUri:e,state:t,challenge:a})=>{var o=new URL(`https://${D}/authorize`);return o.searchParams.set("response_type","code"),o.searchParams.set("client_id",_),o.searchParams.set("redirect_uri",e),o.searchParams.set("scope",b),o.searchParams.set("audience",w),o.searchParams.set("state",t),o.searchParams.set("code_challenge",a),o.searchParams.set("code_challenge_method","S256"),o.toString()})({redirectUri:E,state:h,challenge:c}),A=new Promise((e,t)=>{d=t}),j=()=>d(Error(T));t?.addEventListener("abort",j,{once:!0});try{if(t?.aborted)throw Error(T);var I=new Promise((e,t)=>{n=setTimeout(()=>t(Error("Timed out waiting for the browser sign-in (5 minutes)")),3e5)}),B=e?Promise.resolve().then(()=>e(x)):Promise.resolve(),P=yield Promise.race([Promise.all([B,y]),I,A]),V=u(P,2)[1];p=yield F("/oauth/token",{grant_type:"authorization_code",client_id:_,code:V,code_verifier:l,redirect_uri:E},{signal:t})}catch(e){if(t?.aborted)throw Error(T);throw e}finally{n&&clearTimeout(n),t?.removeEventListener("abort",j),yield new Promise(e=>{$.close(e),$.closeIdleConnections?.()})}if(t?.aborted)throw Error(T);return p}),function(){return i.apply(this,arguments)}),I=(n=c(function*(){return yield F("/oauth/device/code",{client_id:_,scope:b,audience:w})}),function(){return n.apply(this,arguments)}),B=e=>new Promise(t=>setTimeout(t,e)),P=(p=c(function*({device_code:e,interval:t=5,expires_in:a=900}){for(var o=Date.now()+1e3*a,r=1e3*t;Date.now()<o;){yield B(r);try{return yield F("/oauth/token",{grant_type:"urn:ietf:params:oauth:grant-type:device_code",client_id:_,device_code:e})}catch(e){if("authorization_pending"===e.code)continue;if("slow_down"===e.code){r+=5e3;continue}throw e}}throw Error("Device authorization expired before the sign-in was confirmed")}),function(e){return p.apply(this,arguments)}),V=(e,t=null,{preservePrevious:a=!1}={})=>{if(!e?.access_token)throw Error("OAuth token response did not include an access token");if(!a&&!e.id_token)throw Error("OAuth login response did not include an ID token");var o=e.id_token?(e=>{try{return JSON.parse(Buffer.from(e.split(".")[1],"base64url").toString("utf8"))}catch{return{}}})(e.id_token):{};if(!a&&!o.sub)throw Error("OAuth ID token did not include a user subject");if(a&&o.sub&&t?.user?.sub&&o.sub!==t.user.sub)throw Error("OAuth refresh returned a different user identity");var r=a?t?.user:null;return{accessToken:e.access_token,refreshToken:e.refresh_token||(a?t?.refreshToken:null)||null,expiresAt:new Date(Date.now()+1e3*(e.expires_in||0)).toISOString(),user:{sub:o.sub||r?.sub||null,email:o.email||r?.email||null,name:o.name||r?.name||null,nickname:o.nickname||r?.nickname||null,picture:o.picture||r?.picture||null},audience:w}},R=null,M=(d=c(function*({forceRefresh:e=!1}={}){var t=(0,y.getOAuth)();if(!t?.accessToken)return null;var a=new Date(t.expiresAt||0).getTime()-Date.now();if(!e&&a>3e5)return t;if(!t.refreshToken){if(a>0)return t;if(!(yield(0,y.clearOAuthIfCurrentAsync)(t)))return(0,y.getOAuth)();throw Error("OAuth session expired. Run `bricks auth login` again.")}var o=`${t.accessToken}\0${t.refreshToken}`;if(R){var r=R;return r.sessionKey===o?r.promise:(yield r.promise.catch(()=>{}),M({forceRefresh:e}))}var i=(0,y.withOAuthRefreshLock)(c(function*(){var a=(0,y.getOAuth)();if(!a?.accessToken)return null;if(!t||!a||t.accessToken!==a.accessToken||t.refreshToken!==a.refreshToken)return a;var o=new Date(a.expiresAt||0).getTime()-Date.now();if(!e&&o>3e5)return a;if(!a.refreshToken){if(o>0)return a;if(!(yield(0,y.clearOAuthIfCurrentAsync)(a)))return(0,y.getOAuth)();throw Error("OAuth session expired. Run `bricks auth login` again.")}try{var r=yield F("/oauth/token",{grant_type:"refresh_token",client_id:_,refresh_token:a.refreshToken}),i=V(r,a,{preservePrevious:!0});if(!(yield(0,y.replaceOAuthIfCurrentAsync)(a,i)))return(0,y.getOAuth)();return i}catch(e){if("invalid_grant"===e.code){if(!(yield(0,y.clearOAuthIfCurrentAsync)(a)))return(0,y.getOAuth)();throw Error("OAuth session expired. Run `bricks auth login` again.")}throw e}}));R={sessionKey:o,promise:i};try{return yield i}finally{R?.promise===i&&(R=null)}}),function(){return d.apply(this,arguments)}),U=(s=c(function*(e){if(e){var t=new AbortController,a=setTimeout(()=>t.abort(),5e3);try{yield C("/oauth/revoke",{client_id:_,token:e},{signal:t.signal})}catch{}finally{clearTimeout(a),t.abort()}}}),function(e){return s.apply(this,arguments)}),L=(l=c(function*(){var e=yield(0,y.takeOAuthSessionAsync)();return!!e?.accessToken&&(yield U(e.refreshToken),!0)}),function(){return l.apply(this,arguments)}),q=e=>new Promise(t=>{var a=u("darwin"===process.platform?["open",[e]]:"win32"===process.platform?["cmd",["/c","start","",e.replace(/&/g,"^&")]]:["xdg-open",[e]],2),o=a[0],r=a[1];try{var i=(0,h.spawn)(o,r,{stdio:"ignore",detached:!0});i.once("error",()=>t(!1)),i.once("spawn",()=>{i.unref(),t(!0)})}catch{t(!1)}}),J=()=>"darwin"===process.platform||"win32"===process.platform?!process.env.SSH_CONNECTION:!!process.env.DISPLAY||!!process.env.WAYLAND_DISPLAY},10536(e,t,a){a.d(t,{Ep:()=>s,LQ:()=>n,xB:()=>i});var o=a(99436),r=a(68832),i=e=>{var t=/^(v?)(\d+)\.(\d+)(?:\.(\d+))?(-[0-9A-Za-z.-]+)?(\+[0-9A-Za-z.-]+)?$/.exec(e);if(!t)return null;var a=r(t,6),o=a[1],i=a[2],n=a[3],p=a[4],d=void 0===p?"0":p;return a[5]?`${o}${i}.${n}.${d}`:`${o}${i}.${n}.${Number(d)+1}`};function n(e){if("string"!=typeof e)return null;var t=/^v?(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$/.exec(e);if(!t||t[0]!==e)return null;var a=t.slice(1,4),o=t[4]?.split(".")||[];return[...a,...o].some(e=>/^0\d+$/.test(e))?null:{core:a,prerelease:o}}var p=(e,t)=>{var a=/^\d+$/.test(e),o=/^\d+$/.test(t);if(a!==o)return a?-1:1;var r=a?BigInt(e):e,i=o?BigInt(t):t;return r<i?-1:+(r>i)},d=(e,t)=>{for(var a=0;a<3;a+=1){var o=p(e.core[a],t.core[a]);if(o)return o}if(!e.prerelease.length||!t.prerelease.length)return Number(!e.prerelease.length)-Number(!t.prerelease.length);for(var r=0;r<Math.min(e.prerelease.length,t.prerelease.length);r+=1){var i=p(e.prerelease[r],t.prerelease[r]);if(i)return i}return e.prerelease.length-t.prerelease.length};function s(e,t,a){return l.apply(this,arguments)}function l(){return(l=o(function*(e,t,a){!function(e,t){if(!Array.isArray(t))throw Error("Could not read cloud release versions; release cancelled");var a=t.map(e=>e.version),o=a.map(e=>({value:e,parsed:n(e)})).filter(({parsed:e})=>e).sort((e,t)=>d(t.parsed,e.parsed))[0],i=o?.value||a[0]||"(none)",p=o?(({core:e,prerelease:t})=>{var a=r(e.map(BigInt),3),o=a[0],i=a[1],n=a[2];return{patch:`${o}.${i}.${t.length?n:n+1n}`,minor:`${o}.${t.length&&0n===n?i:i+1n}.0`}})(o.parsed):null,s=o?`Use --version ${p.patch} (next patch) or --version ${p.minor} (next minor).`:"Use a semantic version, for example --version 1.0.0.",l=`Latest cloud version: ${i}.${!o&&a.length?" No semantic versions exist yet.":""} ${s}`;if(a.includes(e))throw Error(`Release version "${e}" already exists. ${l}`);var u=n(e);if(!u)throw Error(`Release version "${e??"(missing)"}" must be valid semver. ${l}`);if(o&&0>=d(u,o.parsed))throw Error(`Release version "${e}" must be newer than "${o.value}". ${l}`)}(a,(yield e.applicationReleaseVersions({id:t})))})).apply(this,arguments)}},74049(e,t,a){a.d(t,{Ku:()=>p,w9:()=>n});var o=a(79896),r=a(16928),i=new Set(["CTOR","CTOR Desktop"]),n=e=>{var t,a=`Release by ${(t=process.env.BRICKS_RELEASE_SIGN)&&i.has(t)?t:"BRICKS CLI"}`;return e?`${e}
|
|
184
184
|
|
|
185
185
|
${a}`:a},p=e=>{var t=e.endsWith(".json")||e.includes("/");if(t)try{JSON.parse(e),t=!1}catch{}if(t){if(!o.existsSync(e))throw Error(`Config file not found: ${e}`);var a=o.readFileSync(e,"utf-8");return{config:a,source:{type:"file",path:r.resolve(e)},sizeBytes:Buffer.byteLength(a)}}return{config:e,source:{type:"inline"},sizeBytes:Buffer.byteLength(e)}}},68168(e,t,a){a.d(t,{K:()=>n,Y:()=>p});var o,r=a(99436),i=e=>String(e||"").trim().toLowerCase(),n=({resource:e,query:t,items:a,fields:o,selectedBy:r=null})=>{var n=i(t),p=a.filter(e=>o.some(t=>i(t.split(".").reduce((e,t)=>e?.[t],e)??null)===n)),d=null,s=r;return"id"===r?d=a[0]||null:1===p.length?(d=p[0],s="exact"):1===a.length&&(d=a[0],s="single"),{resource:e,query:t,exactMatchCount:p.length,matchCount:a.length,selectedBy:s,ambiguous:a.length>1&&!d,resolved:d,matches:a}},p=(o=r(function*(e){try{return yield e()}catch(e){if(/not found/i.test(e.message))return null;throw e}}),function(e){return o.apply(this,arguments)})},44618(e,t,a){a.d(t,{V:()=>i});var o={S:"Subspace",B:"Brick",C:"Canvas",A:"Animation",G:"Generator",D:"Data",F:"Data Calc",N:"Calc Node",T:"Test",TC:"Test Case",AT:"Automation Map"},r=e=>e?.split("_")?.[0]||"",i=(e,{keyword:t,types:a}={})=>{var i=t?.trim().toLowerCase()||"",n=a?.length>0?new Set(a.flatMap(e=>{var t=String(e).trim().toUpperCase();return t?[t]:[]})):null;return Object.entries(Object.entries(e||{}).filter(([,e])=>e&&!e.hide).filter(([e,t])=>{var a=r(e);if(n&&!n.has(a))return!1;if(!i)return!0;var o=t?.title?String(t.title).toLowerCase():"";return e.toLowerCase().includes(i)||o.includes(i)}).reduce((e,[t,a])=>{var o=r(t);return e[o]||(e[o]=[]),e[o].push({shortId:t,ref:a}),e},{})).map(([e,t])=>({prefix:e,label:o[e]||e,refs:t.sort((e,t)=>{var a=e.ref?.title||e.shortId,o=t.ref?.title||t.shortId;return String(a).localeCompare(String(o))})})).sort((e,t)=>e.label.localeCompare(t.label))}},94979(e,t,a){a.d(t,{U:()=>p,p:()=>n});var o=a(35679),r=/^(\d+)(s|m|h|d|w)$/,i={s:1e3,m:6e4,h:36e5,d:864e5,w:6048e5};function n(e){var t=e.match(r);if(t){var a=parseInt(t[1],10),o=i[t[2]];return new Date(Date.now()-a*o).toISOString()}var n=new Date(e);if(isNaN(n.getTime()))throw Error(`Invalid time format: "${e}". Use ISO 8601 or relative (e.g. 1h, 30m, 2d)`);return n.toISOString()}function p(e){var t=Number(e);if(!Number.isFinite(t)||t<1||t>2147483.647)throw new o.Di("Expected a number of seconds between 1 and 2147483.647.");return t}},98593(e,t,a){a.d(t,{H_:()=>p,Iy:()=>n,S5:()=>l,jB:()=>d,yd:()=>u});var o=a(73284),r=a(79896),i=a(7586),n=(e,t,a)=>({label:e,ok:t,detail:a}),p=(e,t,{id:a,name:o,...r}={})=>({id:e?._id||t,name:o||e?.name||"Unnamed",...r}),d=(e,t)=>{var a={id:e};return t.name&&(a.name=t.name),"string"==typeof t.description&&(a.description=t.description),t.config?a.config=t.config:t.file&&(a.config=r.readFileSync(t.file,"utf-8")),void 0!==a.config&&(a.validateConfig=!1!==t.validate),t.lastCommitId&&(a.lastCommitId=t.lastCommitId),a},s=e=>null==e?o.default.gray("N/A"):"object"==typeof e?o.default.gray(JSON.stringify(e,null,2)):String(e),l=({action:e,target:t,request:a,checks:r=[],notes:n=[],json:p=!1})=>{var d={ok:!0,dryRun:!0,action:e,target:t||null,request:a||null,checks:r,...n.length>0?{notes:n}:{}};p?(0,i.GF)(d):(console.log(o.default.bold(`
|
|
186
186
|
Dry Run: ${e}`)),console.log("─".repeat(60)),t&&(console.log(o.default.bold("Target")),Object.entries(t).forEach(([e,t])=>{console.log(`${e}: ${s(t)}`)})),a&&(console.log(`
|