@sr-connect/cli 0.1.1 → 0.1.2
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/README.md +1 -1
- package/dist/index.js +9 -9
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -8,7 +8,7 @@ npm i -g @sr-connect/cli # then: sr-connect
|
|
|
8
8
|
npx @sr-connect/cli cli get-readme # prints this document from the installed copy
|
|
9
9
|
```
|
|
10
10
|
|
|
11
|
-
Node 22 or newer. An older runtime gets one warning line per run and most commands still work, but live log streaming does not. Every example below spells the CLI as `npx @sr-connect/cli
|
|
11
|
+
Node 22 or newer. An older runtime gets one warning line per run and most commands still work, but live log streaming does not. Every example below spells the CLI as `npx @sr-connect/cli`. For daily use install it globally: `npx` spends most of a second resolving the package before the CLI starts, the installed `sr-connect` answers in a fraction of that, and a global install refers to itself as `sr-connect` in its own hints rather than telling you to run `npx`.
|
|
12
12
|
|
|
13
13
|
## Getting started
|
|
14
14
|
|
package/dist/index.js
CHANGED
|
@@ -21,10 +21,10 @@ Expecting one of '${allowedValues.join("', '")}'`);return this._lifeCycleHooks[e
|
|
|
21
21
|
- ${executableDirMessage}`;throw new Error(executableMissing)}_executeSubCommand(subcommand,args){args=args.slice();let sourceExt=[".js",".ts",".tsx",".mjs",".cjs"];function findFile(baseDir,baseName){let localBin=path.resolve(baseDir,baseName);if(fs.existsSync(localBin))return localBin;if(sourceExt.includes(path.extname(baseName)))return;let foundExt=sourceExt.find(ext=>fs.existsSync(`${localBin}${ext}`));if(foundExt)return`${localBin}${foundExt}`}this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let executableFile=subcommand._executableFile||`${this._name}-${subcommand._name}`,executableDir=this._executableDir||"";if(this._scriptPath){let resolvedScriptPath;try{resolvedScriptPath=fs.realpathSync(this._scriptPath)}catch{resolvedScriptPath=this._scriptPath}executableDir=path.resolve(path.dirname(resolvedScriptPath),executableDir)}if(executableDir){let localFile=findFile(executableDir,executableFile);if(!localFile&&!subcommand._executableFile&&this._scriptPath){let legacyName=path.basename(this._scriptPath,path.extname(this._scriptPath));legacyName!==this._name&&(localFile=findFile(executableDir,`${legacyName}-${subcommand._name}`))}executableFile=localFile||executableFile}let launchWithNode=sourceExt.includes(path.extname(executableFile)),proc;process2.platform!=="win32"?launchWithNode?(args.unshift(executableFile),args=incrementNodeInspectorPort(process2.execArgv).concat(args),proc=childProcess.spawn(process2.argv[0],args,{stdio:"inherit"})):proc=childProcess.spawn(executableFile,args,{stdio:"inherit"}):(this._checkForMissingExecutable(executableFile,executableDir,subcommand._name),args.unshift(executableFile),args=incrementNodeInspectorPort(process2.execArgv).concat(args),proc=childProcess.spawn(process2.execPath,args,{stdio:"inherit"})),proc.killed||["SIGUSR1","SIGUSR2","SIGTERM","SIGINT","SIGHUP"].forEach(signal=>{process2.on(signal,()=>{proc.killed===!1&&proc.exitCode===null&&proc.kill(signal)})});let exitCallback=this._exitCallback;proc.on("close",code=>{code=code??1,exitCallback?exitCallback(new CommanderError(code,"commander.executeSubCommandAsync","(close)")):process2.exit(code)}),proc.on("error",err=>{if(err.code==="ENOENT")this._checkForMissingExecutable(executableFile,executableDir,subcommand._name);else if(err.code==="EACCES")throw new Error(`'${executableFile}' not executable`);if(!exitCallback)process2.exit(1);else{let wrappedError=new CommanderError(1,"commander.executeSubCommandAsync","(error)");wrappedError.nestedError=err,exitCallback(wrappedError)}}),this.runningCommand=proc}_dispatchSubcommand(commandName,operands,unknown2){let subCommand=this._findCommand(commandName);subCommand||this.help({error:!0}),subCommand._prepareForParse();let promiseChain;return promiseChain=this._chainOrCallSubCommandHook(promiseChain,subCommand,"preSubcommand"),promiseChain=this._chainOrCall(promiseChain,()=>{if(subCommand._executableHandler)this._executeSubCommand(subCommand,operands.concat(unknown2));else return subCommand._parseCommand(operands,unknown2)}),promiseChain}_dispatchHelpCommand(subcommandName){subcommandName||this.help();let subCommand=this._findCommand(subcommandName);return subCommand&&!subCommand._executableHandler&&subCommand.help(),this._dispatchSubcommand(subcommandName,[],[this._getHelpOption()?.long??this._getHelpOption()?.short??"--help"])}_checkNumberOfArguments(){this.registeredArguments.forEach((arg,i)=>{arg.required&&this.args[i]==null&&this.missingArgument(arg.name())}),!(this.registeredArguments.length>0&&this.registeredArguments[this.registeredArguments.length-1].variadic)&&this.args.length>this.registeredArguments.length&&this._excessArguments(this.args)}_processArguments(){let myParseArg=(argument,value,previous)=>{let parsedValue=value;if(value!==null&&argument.parseArg){let invalidValueMessage=`error: command-argument value '${value}' is invalid for argument '${argument.name()}'.`;parsedValue=this._callParseArg(argument,value,previous,invalidValueMessage)}return parsedValue};this._checkNumberOfArguments();let processedArgs=[];this.registeredArguments.forEach((declaredArg,index)=>{let value=declaredArg.defaultValue;declaredArg.variadic?index<this.args.length?(value=this.args.slice(index),declaredArg.parseArg&&(value=value.reduce((processed,v2)=>myParseArg(declaredArg,v2,processed),declaredArg.defaultValue))):value===void 0&&(value=[]):index<this.args.length&&(value=this.args[index],declaredArg.parseArg&&(value=myParseArg(declaredArg,value,declaredArg.defaultValue))),processedArgs[index]=value}),this.processedArgs=processedArgs}_chainOrCall(promise2,fn){return promise2?.then&&typeof promise2.then=="function"?promise2.then(()=>fn()):fn()}_chainOrCallHooks(promise2,event){let result=promise2,hooks=[];return this._getCommandAndAncestors().reverse().filter(cmd=>cmd._lifeCycleHooks[event]!==void 0).forEach(hookedCommand=>{hookedCommand._lifeCycleHooks[event].forEach(callback=>{hooks.push({hookedCommand,callback})})}),event==="postAction"&&hooks.reverse(),hooks.forEach(hookDetail=>{result=this._chainOrCall(result,()=>hookDetail.callback(hookDetail.hookedCommand,this))}),result}_chainOrCallSubCommandHook(promise2,subCommand,event){let result=promise2;return this._lifeCycleHooks[event]!==void 0&&this._lifeCycleHooks[event].forEach(hook=>{result=this._chainOrCall(result,()=>hook(this,subCommand))}),result}_parseCommand(operands,unknown2){let parsed=this.parseOptions(unknown2);if(this._parseOptionsEnv(),this._parseOptionsImplied(),operands=operands.concat(parsed.operands),unknown2=parsed.unknown,this.args=operands.concat(unknown2),operands&&this._findCommand(operands[0]))return this._dispatchSubcommand(operands[0],operands.slice(1),unknown2);if(this._getHelpCommand()&&operands[0]===this._getHelpCommand().name())return this._dispatchHelpCommand(operands[1]);if(this._defaultCommandName)return this._outputHelpIfRequested(unknown2),this._dispatchSubcommand(this._defaultCommandName,operands,unknown2);this.commands.length&&this.args.length===0&&!this._actionHandler&&!this._defaultCommandName&&this.help({error:!0}),this._outputHelpIfRequested(parsed.unknown),this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let checkForUnknownOptions=()=>{parsed.unknown.length>0&&this.unknownOption(parsed.unknown[0])},commandEvent=`command:${this.name()}`;if(this._actionHandler){checkForUnknownOptions(),this._processArguments();let promiseChain;return promiseChain=this._chainOrCallHooks(promiseChain,"preAction"),promiseChain=this._chainOrCall(promiseChain,()=>this._actionHandler(this.processedArgs)),this.parent&&(promiseChain=this._chainOrCall(promiseChain,()=>{this.parent.emit(commandEvent,operands,unknown2)})),promiseChain=this._chainOrCallHooks(promiseChain,"postAction"),promiseChain}if(this.parent?.listenerCount(commandEvent))checkForUnknownOptions(),this._processArguments(),this.parent.emit(commandEvent,operands,unknown2);else if(operands.length){if(this._findCommand("*"))return this._dispatchSubcommand("*",operands,unknown2);this.listenerCount("command:*")?this.emit("command:*",operands,unknown2):this.commands.length?this.unknownCommand():(checkForUnknownOptions(),this._processArguments())}else this.commands.length?(checkForUnknownOptions(),this.help({error:!0})):(checkForUnknownOptions(),this._processArguments())}_findCommand(name){if(name)return this.commands.find(cmd=>cmd._name===name||cmd._aliases.includes(name))}_findOption(arg){return this.options.find(option=>option.is(arg))}_checkForMissingMandatoryOptions(){this._getCommandAndAncestors().forEach(cmd=>{cmd.options.forEach(anOption=>{anOption.mandatory&&cmd.getOptionValue(anOption.attributeName())===void 0&&cmd.missingMandatoryOptionValue(anOption)})})}_checkForConflictingLocalOptions(){let definedNonDefaultOptions=this.options.filter(option=>{let optionKey=option.attributeName();return this.getOptionValue(optionKey)===void 0?!1:this.getOptionValueSource(optionKey)!=="default"});definedNonDefaultOptions.filter(option=>option.conflictsWith.length>0).forEach(option=>{let conflictingAndDefined=definedNonDefaultOptions.find(defined=>option.conflictsWith.includes(defined.attributeName()));conflictingAndDefined&&this._conflictingOption(option,conflictingAndDefined)})}_checkForConflictingOptions(){this._getCommandAndAncestors().forEach(cmd=>{cmd._checkForConflictingLocalOptions()})}parseOptions(args){let operands=[],unknown2=[],dest=operands;function maybeOption(arg){return arg.length>1&&arg[0]==="-"}let negativeNumberArg=arg=>/^-(\d+|\d*\.\d+)(e[+-]?\d+)?$/.test(arg)?!this._getCommandAndAncestors().some(cmd=>cmd.options.map(opt=>opt.short).some(short=>/^-\d$/.test(short))):!1,activeVariadicOption=null,activeGroup=null,i=0;for(;i<args.length||activeGroup;){let arg=activeGroup??args[i++];if(activeGroup=null,arg==="--"){dest===unknown2&&dest.push(arg),dest.push(...args.slice(i));break}if(activeVariadicOption&&(!maybeOption(arg)||negativeNumberArg(arg))){this.emit(`option:${activeVariadicOption.name()}`,arg);continue}if(activeVariadicOption=null,maybeOption(arg)){let option=this._findOption(arg);if(option){if(option.required){let value=args[i++];value===void 0&&this.optionMissingArgument(option),this.emit(`option:${option.name()}`,value)}else if(option.optional){let value=null;i<args.length&&(!maybeOption(args[i])||negativeNumberArg(args[i]))&&(value=args[i++]),this.emit(`option:${option.name()}`,value)}else this.emit(`option:${option.name()}`);activeVariadicOption=option.variadic?option:null;continue}}if(arg.length>2&&arg[0]==="-"&&arg[1]!=="-"){let option=this._findOption(`-${arg[1]}`);if(option){option.required||option.optional&&this._combineFlagAndOptionalValue?this.emit(`option:${option.name()}`,arg.slice(2)):(this.emit(`option:${option.name()}`),activeGroup=`-${arg.slice(2)}`);continue}}if(/^--[^=]+=/.test(arg)){let index=arg.indexOf("="),option=this._findOption(arg.slice(0,index));if(option&&(option.required||option.optional)){this.emit(`option:${option.name()}`,arg.slice(index+1));continue}}if(dest===operands&&maybeOption(arg)&&!(this.commands.length===0&&negativeNumberArg(arg))&&(dest=unknown2),(this._enablePositionalOptions||this._passThroughOptions)&&operands.length===0&&unknown2.length===0){if(this._findCommand(arg)){operands.push(arg),unknown2.push(...args.slice(i));break}else if(this._getHelpCommand()&&arg===this._getHelpCommand().name()){operands.push(arg,...args.slice(i));break}else if(this._defaultCommandName){unknown2.push(arg,...args.slice(i));break}}if(this._passThroughOptions){dest.push(arg,...args.slice(i));break}dest.push(arg)}return{operands,unknown:unknown2}}opts(){if(this._storeOptionsAsProperties){let result={},len=this.options.length;for(let i=0;i<len;i++){let key=this.options[i].attributeName();result[key]=key===this._versionOptionName?this._version:this[key]}return result}return this._optionValues}optsWithGlobals(){return this._getCommandAndAncestors().reduce((combinedOptions,cmd)=>Object.assign(combinedOptions,cmd.opts()),{})}error(message,errorOptions){this._outputConfiguration.outputError(`${message}
|
|
22
22
|
`,this._outputConfiguration.writeErr),typeof this._showHelpAfterError=="string"?this._outputConfiguration.writeErr(`${this._showHelpAfterError}
|
|
23
23
|
`):this._showHelpAfterError&&(this._outputConfiguration.writeErr(`
|
|
24
|
-
`),this.outputHelp({error:!0}));let config2=errorOptions||{},exitCode=config2.exitCode||1,code=config2.code||"commander.error";this._exit(exitCode,code,message)}_parseOptionsEnv(){this.options.forEach(option=>{if(option.envVar&&option.envVar in process2.env){let optionKey=option.attributeName();(this.getOptionValue(optionKey)===void 0||["default","config","env"].includes(this.getOptionValueSource(optionKey)))&&(option.required||option.optional?this.emit(`optionEnv:${option.name()}`,process2.env[option.envVar]):this.emit(`optionEnv:${option.name()}`))}})}_parseOptionsImplied(){let dualHelper=new DualOptions(this.options),hasCustomOptionValue=optionKey=>this.getOptionValue(optionKey)!==void 0&&!["default","implied"].includes(this.getOptionValueSource(optionKey));this.options.filter(option=>option.implied!==void 0&&hasCustomOptionValue(option.attributeName())&&dualHelper.valueFromOption(this.getOptionValue(option.attributeName()),option)).forEach(option=>{Object.keys(option.implied).filter(impliedKey=>!hasCustomOptionValue(impliedKey)).forEach(impliedKey=>{this.setOptionValueWithSource(impliedKey,option.implied[impliedKey],"implied")})})}missingArgument(name){let message=`error: missing required argument '${name}'`;this.error(message,{code:"commander.missingArgument"})}optionMissingArgument(option){let message=`error: option '${option.flags}' argument missing`;this.error(message,{code:"commander.optionMissingArgument"})}missingMandatoryOptionValue(option){let message=`error: required option '${option.flags}' not specified`;this.error(message,{code:"commander.missingMandatoryOptionValue"})}_conflictingOption(option,conflictingOption){let findBestOptionFromValue=option2=>{let optionKey=option2.attributeName(),optionValue=this.getOptionValue(optionKey),negativeOption=this.options.find(target=>target.negate&&optionKey===target.attributeName()),positiveOption=this.options.find(target=>!target.negate&&optionKey===target.attributeName());return negativeOption&&(negativeOption.presetArg===void 0&&optionValue===!1||negativeOption.presetArg!==void 0&&optionValue===negativeOption.presetArg)?negativeOption:positiveOption||option2},getErrorMessage=option2=>{let bestOption=findBestOptionFromValue(option2),optionKey=bestOption.attributeName();return this.getOptionValueSource(optionKey)==="env"?`environment variable '${bestOption.envVar}'`:`option '${bestOption.flags}'`},message=`error: ${getErrorMessage(option)} cannot be used with ${getErrorMessage(conflictingOption)}`;this.error(message,{code:"commander.conflictingOption"})}unknownOption(flag){if(this._allowUnknownOption)return;let suggestion="";if(flag.startsWith("--")&&this._showSuggestionAfterError){let candidateFlags=[],command=this;do{let moreFlags=command.createHelp().visibleOptions(command).filter(option=>option.long).map(option=>option.long);candidateFlags=candidateFlags.concat(moreFlags),command=command.parent}while(command&&!command._enablePositionalOptions);suggestion=suggestSimilar(flag,candidateFlags)}let message=`error: unknown option '${flag}'${suggestion}`;this.error(message,{code:"commander.unknownOption"})}_excessArguments(receivedArgs){if(this._allowExcessArguments)return;let expected=this.registeredArguments.length,s=expected===1?"":"s",received=receivedArgs.length,forSubcommand=this.parent?` for '${this.name()}'`:"",details=receivedArgs.join(", "),message=`error: too many arguments${forSubcommand}. Expected ${expected} argument${s} but got ${received}: ${details}.`;this.error(message,{code:"commander.excessArguments"})}unknownCommand(){let unknownName=this.args[0],suggestion="";if(this._showSuggestionAfterError){let
|
|
24
|
+
`),this.outputHelp({error:!0}));let config2=errorOptions||{},exitCode=config2.exitCode||1,code=config2.code||"commander.error";this._exit(exitCode,code,message)}_parseOptionsEnv(){this.options.forEach(option=>{if(option.envVar&&option.envVar in process2.env){let optionKey=option.attributeName();(this.getOptionValue(optionKey)===void 0||["default","config","env"].includes(this.getOptionValueSource(optionKey)))&&(option.required||option.optional?this.emit(`optionEnv:${option.name()}`,process2.env[option.envVar]):this.emit(`optionEnv:${option.name()}`))}})}_parseOptionsImplied(){let dualHelper=new DualOptions(this.options),hasCustomOptionValue=optionKey=>this.getOptionValue(optionKey)!==void 0&&!["default","implied"].includes(this.getOptionValueSource(optionKey));this.options.filter(option=>option.implied!==void 0&&hasCustomOptionValue(option.attributeName())&&dualHelper.valueFromOption(this.getOptionValue(option.attributeName()),option)).forEach(option=>{Object.keys(option.implied).filter(impliedKey=>!hasCustomOptionValue(impliedKey)).forEach(impliedKey=>{this.setOptionValueWithSource(impliedKey,option.implied[impliedKey],"implied")})})}missingArgument(name){let message=`error: missing required argument '${name}'`;this.error(message,{code:"commander.missingArgument"})}optionMissingArgument(option){let message=`error: option '${option.flags}' argument missing`;this.error(message,{code:"commander.optionMissingArgument"})}missingMandatoryOptionValue(option){let message=`error: required option '${option.flags}' not specified`;this.error(message,{code:"commander.missingMandatoryOptionValue"})}_conflictingOption(option,conflictingOption){let findBestOptionFromValue=option2=>{let optionKey=option2.attributeName(),optionValue=this.getOptionValue(optionKey),negativeOption=this.options.find(target=>target.negate&&optionKey===target.attributeName()),positiveOption=this.options.find(target=>!target.negate&&optionKey===target.attributeName());return negativeOption&&(negativeOption.presetArg===void 0&&optionValue===!1||negativeOption.presetArg!==void 0&&optionValue===negativeOption.presetArg)?negativeOption:positiveOption||option2},getErrorMessage=option2=>{let bestOption=findBestOptionFromValue(option2),optionKey=bestOption.attributeName();return this.getOptionValueSource(optionKey)==="env"?`environment variable '${bestOption.envVar}'`:`option '${bestOption.flags}'`},message=`error: ${getErrorMessage(option)} cannot be used with ${getErrorMessage(conflictingOption)}`;this.error(message,{code:"commander.conflictingOption"})}unknownOption(flag){if(this._allowUnknownOption)return;let suggestion="";if(flag.startsWith("--")&&this._showSuggestionAfterError){let candidateFlags=[],command=this;do{let moreFlags=command.createHelp().visibleOptions(command).filter(option=>option.long).map(option=>option.long);candidateFlags=candidateFlags.concat(moreFlags),command=command.parent}while(command&&!command._enablePositionalOptions);suggestion=suggestSimilar(flag,candidateFlags)}let message=`error: unknown option '${flag}'${suggestion}`;this.error(message,{code:"commander.unknownOption"})}_excessArguments(receivedArgs){if(this._allowExcessArguments)return;let expected=this.registeredArguments.length,s=expected===1?"":"s",received=receivedArgs.length,forSubcommand=this.parent?` for '${this.name()}'`:"",details=receivedArgs.join(", "),message=`error: too many arguments${forSubcommand}. Expected ${expected} argument${s} but got ${received}: ${details}.`;this.error(message,{code:"commander.excessArguments"})}unknownCommand(){let unknownName=this.args[0],suggestion="";if(this._showSuggestionAfterError){let candidateNames2=[];this.createHelp().visibleCommands(this).forEach(command=>{candidateNames2.push(command.name()),command.alias()&&candidateNames2.push(command.alias())}),suggestion=suggestSimilar(unknownName,candidateNames2)}let message=`error: unknown command '${unknownName}'${suggestion}`;this.error(message,{code:"commander.unknownCommand"})}version(str,flags,description){if(str===void 0)return this._version;this._version=str,flags=flags||"-V, --version",description=description||"output the version number";let versionOption=this.createOption(flags,description);return this._versionOptionName=versionOption.attributeName(),this._registerOption(versionOption),this.on("option:"+versionOption.name(),()=>{this._outputConfiguration.writeOut(`${str}
|
|
25
25
|
`),this._exit(0,"commander.version",str)}),this}description(str,argsDescription){return str===void 0&&argsDescription===void 0?this._description:(this._description=str,argsDescription&&(this._argsDescription=argsDescription),this)}summary(str){return str===void 0?this._summary:(this._summary=str,this)}alias(alias){if(alias===void 0)return this._aliases[0];let command=this;if(this.commands.length!==0&&this.commands[this.commands.length-1]._executableHandler&&(command=this.commands[this.commands.length-1]),alias===command._name)throw new Error("Command alias can't be the same as its name");let matchingCommand=this.parent?._findCommand(alias);if(matchingCommand){let existingCmd=[matchingCommand.name()].concat(matchingCommand.aliases()).join("|");throw new Error(`cannot add alias '${alias}' to command '${this.name()}' as already have command '${existingCmd}'`)}return command._aliases.push(alias),this}aliases(aliases){return aliases===void 0?this._aliases:(aliases.forEach(alias=>this.alias(alias)),this)}usage(str){if(str===void 0){if(this._usage)return this._usage;let args=this.registeredArguments.map(arg=>humanReadableArgName(arg));return[].concat(this.options.length||this._helpOption!==null?"[options]":[],this.commands.length?"[command]":[],this.registeredArguments.length?args:[]).join(" ")}return this._usage=str,this}name(str){return str===void 0?this._name:(this._name=str,this)}helpGroup(heading){return heading===void 0?this._helpGroupHeading??"":(this._helpGroupHeading=heading,this)}commandsGroup(heading){return heading===void 0?this._defaultCommandGroup??"":(this._defaultCommandGroup=heading,this)}optionsGroup(heading){return heading===void 0?this._defaultOptionGroup??"":(this._defaultOptionGroup=heading,this)}_initOptionGroup(option){this._defaultOptionGroup&&!option.helpGroupHeading&&option.helpGroup(this._defaultOptionGroup)}_initCommandGroup(cmd){this._defaultCommandGroup&&!cmd.helpGroup()&&cmd.helpGroup(this._defaultCommandGroup)}nameFromFilename(filename){return this._name=path.basename(filename,path.extname(filename)),this}executableDir(path2){return path2===void 0?this._executableDir:(this._executableDir=path2,this)}helpInformation(contextOptions){let helper=this.createHelp(),context=this._getOutputContext(contextOptions);helper.prepareContext({error:context.error,helpWidth:context.helpWidth,outputHasColors:context.hasColors});let text=helper.formatHelp(this,helper);return context.hasColors?text:this._outputConfiguration.stripColor(text)}_getOutputContext(contextOptions){contextOptions=contextOptions||{};let error51=!!contextOptions.error,baseWrite,hasColors,helpWidth;return error51?(baseWrite=str=>this._outputConfiguration.writeErr(str),hasColors=this._outputConfiguration.getErrHasColors(),helpWidth=this._outputConfiguration.getErrHelpWidth()):(baseWrite=str=>this._outputConfiguration.writeOut(str),hasColors=this._outputConfiguration.getOutHasColors(),helpWidth=this._outputConfiguration.getOutHelpWidth()),{error:error51,write:str=>(hasColors||(str=this._outputConfiguration.stripColor(str)),baseWrite(str)),hasColors,helpWidth}}outputHelp(contextOptions){let deprecatedCallback;typeof contextOptions=="function"&&(deprecatedCallback=contextOptions,contextOptions=void 0);let outputContext=this._getOutputContext(contextOptions),eventContext={error:outputContext.error,write:outputContext.write,command:this};this._getCommandAndAncestors().reverse().forEach(command=>command.emit("beforeAllHelp",eventContext)),this.emit("beforeHelp",eventContext);let helpInformation=this.helpInformation({error:outputContext.error});if(deprecatedCallback&&(helpInformation=deprecatedCallback(helpInformation),typeof helpInformation!="string"&&!Buffer.isBuffer(helpInformation)))throw new Error("outputHelp callback must return a string or a Buffer");outputContext.write(helpInformation),this._getHelpOption()?.long&&this.emit(this._getHelpOption().long),this.emit("afterHelp",eventContext),this._getCommandAndAncestors().forEach(command=>command.emit("afterAllHelp",eventContext))}helpOption(flags,description){return typeof flags=="boolean"?(flags?(this._helpOption===null&&(this._helpOption=void 0),this._defaultOptionGroup&&this._initOptionGroup(this._getHelpOption())):this._helpOption=null,this):(this._helpOption=this.createOption(flags??"-h, --help",description??"display help for command"),(flags||description)&&this._initOptionGroup(this._helpOption),this)}_getHelpOption(){return this._helpOption===void 0&&this.helpOption(void 0,void 0),this._helpOption}addHelpOption(option){return this._helpOption=option,this._initOptionGroup(option),this}help(contextOptions){this.outputHelp(contextOptions);let exitCode=Number(process2.exitCode??0);exitCode===0&&contextOptions&&typeof contextOptions!="function"&&contextOptions.error&&(exitCode=1),this._exit(exitCode,"commander.help","(outputHelp)")}addHelpText(position,text){let allowedValues=["beforeAll","before","after","afterAll"];if(!allowedValues.includes(position))throw new Error(`Unexpected value for position to addHelpText.
|
|
26
26
|
Expecting one of '${allowedValues.join("', '")}'`);let helpEvent=`${position}Help`;return this.on(helpEvent,context=>{let helpStr;typeof text=="function"?helpStr=text({error:context.error,command:context.command}):helpStr=text,helpStr&&context.write(`${helpStr}
|
|
27
|
-
`)}),this}_outputHelpIfRequested(args){let helpOption=this._getHelpOption();helpOption&&args.find(arg=>helpOption.is(arg))&&(this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)"))}};function incrementNodeInspectorPort(args){return args.map(arg=>{if(!arg.startsWith("--inspect"))return arg;let debugOption,debugHost="127.0.0.1",debugPort="9229",match;return(match=arg.match(/^(--inspect(-brk)?)$/))!==null?debugOption=match[1]:(match=arg.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null?(debugOption=match[1],/^\d+$/.test(match[3])?debugPort=match[3]:debugHost=match[3]):(match=arg.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null&&(debugOption=match[1],debugHost=match[3],debugPort=match[4]),debugOption&&debugPort!=="0"?`${debugOption}=${debugHost}:${parseInt(debugPort)+1}`:arg})}function useColor(){if(process2.env.NO_COLOR||process2.env.FORCE_COLOR==="0"||process2.env.FORCE_COLOR==="false")return!1;if(process2.env.FORCE_COLOR||process2.env.CLICOLOR_FORCE!==void 0)return!0}var program=new Command;import{appendFileSync as appendFileSync2,mkdirSync as mkdirSync4,readFileSync as readFileSync5,readdirSync as readdirSync2,renameSync as renameSync3,rmSync as rmSync3,statSync as statSync2}from"fs";import{join as
|
|
27
|
+
`)}),this}_outputHelpIfRequested(args){let helpOption=this._getHelpOption();helpOption&&args.find(arg=>helpOption.is(arg))&&(this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)"))}};function incrementNodeInspectorPort(args){return args.map(arg=>{if(!arg.startsWith("--inspect"))return arg;let debugOption,debugHost="127.0.0.1",debugPort="9229",match;return(match=arg.match(/^(--inspect(-brk)?)$/))!==null?debugOption=match[1]:(match=arg.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null?(debugOption=match[1],/^\d+$/.test(match[3])?debugPort=match[3]:debugHost=match[3]):(match=arg.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null&&(debugOption=match[1],debugHost=match[3],debugPort=match[4]),debugOption&&debugPort!=="0"?`${debugOption}=${debugHost}:${parseInt(debugPort)+1}`:arg})}function useColor(){if(process2.env.NO_COLOR||process2.env.FORCE_COLOR==="0"||process2.env.FORCE_COLOR==="false")return!1;if(process2.env.FORCE_COLOR||process2.env.CLICOLOR_FORCE!==void 0)return!0}var program=new Command;import{appendFileSync as appendFileSync2,mkdirSync as mkdirSync4,readFileSync as readFileSync5,readdirSync as readdirSync2,renameSync as renameSync3,rmSync as rmSync3,statSync as statSync2}from"fs";import{join as join5}from"path";import{mkdirSync,readFileSync as readFileSync2,writeFileSync}from"fs";import{homedir as homedir2}from"os";import{join as join2}from"path";import{readFileSync}from"fs";import{realpathSync}from"fs";import{dirname,join,resolve,sep}from"path";import{fileURLToPath}from"url";function globalRoots(site){let nodeDir=dirname(site.execPath),roots=[{manager:"npm",root:join(nodeDir,"..","lib","node_modules")},{manager:"npm",root:join(nodeDir,"node_modules")}],prefix=site.env.npm_config_prefix??site.env.PREFIX;if(prefix){let root=site.platform==="win32"?join(prefix,"node_modules"):join(prefix,"lib","node_modules");roots.push({manager:"npm",root})}let pnpmHome=site.env.PNPM_HOME;pnpmHome&&roots.push({manager:"pnpm",root:pnpmHome});let bunInstall=site.env.BUN_INSTALL;return bunInstall&&roots.push({manager:"bun",root:join(bunInstall,"install","global")}),roots}function under(path2,root){let normalized=resolve(root);return path2===normalized||path2.startsWith(normalized.endsWith(sep)?normalized:normalized+sep)}function classifyInstall(site){if(site.entry.includes(`${sep}_npx${sep}`)||site.entry.includes(`${sep}dlx${sep}`))return{kind:"npx",manager:"npm"};for(let{manager,root}of globalRoots(site))if(under(site.entry,root))return{kind:"global",manager};return{kind:site.entry.includes(`${sep}node_modules${sep}`)?"local":"unknown",manager:"npm"}}function currentSite(){let file2=fileURLToPath(import.meta.url),entry2=file2;try{entry2=realpathSync(file2)}catch{}return{entry:entry2,env:process.env,execPath:process.execPath,platform:process.platform}}var DEFAULT_PATH_EXT=".COM;.EXE;.BAT;.CMD";function pathLookup(){let realpathOrNone=candidate=>{try{return realpathSync(candidate)}catch{return}};return{main:process.argv[1]===void 0?void 0:realpathOrNone(process.argv[1]),path:process.env.PATH,pathExt:process.env.PATHEXT,platform:process.platform,resolve:realpathOrNone}}function candidateNames(bin,lookup){return lookup.platform!=="win32"?[bin]:[...(lookup.pathExt??DEFAULT_PATH_EXT).split(";").filter(Boolean),".ps1"].map(ext=>`${bin}${ext}`)}function isEphemeral(path2){return path2.includes(`${sep}_npx${sep}`)||path2.includes(`${sep}dlx${sep}`)}function spawnedByPackageManager(env){return["npm_command","npm_config_user_agent","npm_execpath","npm_lifecycle_event"].some(key=>env[key]!==void 0)}function binIsOnPath(bin,entry2,lookup){let windows=lookup.platform==="win32",delimiter=windows?";":":",separator=windows?"\\":"/",names=candidateNames(bin,lookup);for(let dir of(lookup.path??"").split(delimiter)){if(!dir)continue;let base=dir.endsWith(separator)?dir:dir+separator;for(let name of names){let found2=lookup.resolve(base+name);if(found2!==void 0)return isEphemeral(base+name)?!1:found2===entry2||found2===lookup.main}}return!1}function invocationCommand(bin,npxSpec,site=currentSite(),lookup=pathLookup()){let{kind}=classifyInstall(site);return kind==="global"?bin:kind==="npx"||spawnedByPackageManager(site.env)?npxSpec:binIsOnPath(bin,site.entry,lookup)?bin:npxSpec}var PACKAGE="@sr-connect/cli",BIN="sr-connect",CLI=invocationCommand(BIN,`npx ${PACKAGE}`);function manifestVersion(){let url2=new URL("../package.json",import.meta.url),manifest=JSON.parse(readFileSync(url2,"utf8")),record4=typeof manifest=="object"&&manifest!==null?manifest:{};if(record4.name!==PACKAGE||typeof record4.version!="string")throw new Error(`${url2.pathname} is not the manifest of ${PACKAGE}.`);return record4.version}var VERSION=manifestVersion(),USER_AGENT=`${PACKAGE}@${VERSION}`,APP_DIR="sr-connect";var import_picocolors=__toESM(require_picocolors(),1);import{appendFileSync}from"fs";import{homedir}from"os";import{resolve as resolve2,sep as sep2}from"path";var EXIT={OK:0,API_ERROR:1,USAGE:2,UNAUTHENTICATED:3,NOT_FOUND:4,CANCELLED:130},rawMode=!1;function configureRawMode(opts){let value=process.env.SR_CONNECT_CLI_RAW;rawMode=opts.enabled===!0||value!==void 0&&!/^(0|false|no|off|)$/i.test(value.trim())}function isRaw(){return rawMode}var promptsAllowed=!0;function setPromptsAllowed(allowed){promptsAllowed=allowed}var agentMode=!1;function agentEnvOn(){let value=process.env.SR_CONNECT_CLI_AGENT;return value!==void 0&&!/^(0|false|no|off|)$/i.test(value.trim())}function configureAgentMode(opts){agentMode=opts.enabled===!0||agentEnvOn()}function isAgent(){return agentMode}function promptsDeclined(){return!promptsAllowed||agentMode}function supplyHint(opts={}){let pass=opts.pass??"Pass it",env=opts.env===void 0?"":`, set ${opts.env}`,ask=opts.ask??"pick one";return promptsDeclined()?`${pass}${env}, or ${restorePrompts()} and run on a terminal to ${ask}.`:`${pass}${env}, or run on a terminal to ${ask}.`}function restorePrompts(){return agentMode?agentEnvOn()?"unset SR_CONNECT_CLI_AGENT":"drop --agent":process.env.SR_CONNECT_CLI_NO_PROMPTS?"unset SR_CONNECT_CLI_NO_PROMPTS":"drop --no-prompts"}function canPrompt(){return promptsAllowed&&!agentMode&&!!(process.stdin.isTTY&&process.stderr.isTTY)}var copyPath;function generatedOutputName(){return`output-${Math.floor(Date.now()/1e3)}.${rawMode?"json":"txt"}`}function setOutputCopy(target){if(!target){copyPath=void 0;return}let name=typeof target=="string"&&target.trim()!==""?target.trim():void 0,path2=resolve2(name??generatedOutputName());try{appendFileSync(path2,"")}catch(err){fail(EXIT.USAGE,"OUTPUT_FILE_ERROR",`--copy-output-to-file ${path2} is not writable: ${err instanceof Error?err.message:String(err)}`)}return copyPath=path2,path2}function outputCopyPath(){return copyPath}function assertOutputCopyValue(argv2,commandNames){for(let[at2,token]of argv2.entries()){if(token!=="--copy-output-to-file")continue;let value=argv2[at2+1];value===void 0||value.startsWith("-")||!commandNames.includes(value)||fail(EXIT.USAGE,"OUTPUT_FILE_ERROR",`--copy-output-to-file took '${value}' as the file name, which is a command group; the file name is optional and the next word is taken as it.`,{hint:`Put the flag after the command, or name the file: --copy-output-to-file ./${value} if that really is the file.`})}}function assertVersionFlagIsRoot(argv2,commandNames){let rest=argv2.slice(2),flag=rest.find(a=>a==="-V"||a==="--version");if(flag===void 0)return;let group=rest.findIndex(a=>!a.startsWith("-")&&commandNames.includes(a));if(group===-1)return;let verb=rest[group+1],command=verb!==void 0&&!verb.startsWith("-")?`${rest[group]} ${verb}`:rest[group];fail(EXIT.USAGE,"USAGE_ERROR",`${flag} prints this CLI's own version and belongs to the root, so it would have sent nothing and exited 0.`,{hint:`Drop it to run '${command}', or use the flag the verb means: --release-version for a release, --package-version for a package.`})}function reportOutputCopy(){if(copyPath===void 0)return;let line=`Output copied to ${copyPath}`;rawMode?console.error(import_picocolors.default.dim(line)):console.log(import_picocolors.default.green(line))}async function flushOutput(){let drain=stream=>new Promise(done=>{if(stream.writableLength===0){done();return}stream.write("",()=>done())});await Promise.all([drain(process.stdout),drain(process.stderr)])}function ignoreBrokenPipe(){for(let stream of[process.stdout,process.stderr])stream.on("error",err=>{throw(err.code==="EPIPE"||err.code==="ERR_STREAM_DESTROYED")&&process.exit(EXIT.OK),err})}function displayPath(path2,home=safeHomedir()){if(process.platform==="win32")return path2;let base=home.endsWith(sep2)?home.slice(0,-sep2.length):home;return base===""||base===sep2?path2:path2===base?"~":path2.startsWith(base+sep2)?`~${path2.slice(base.length)}`:path2}function shellQuote(value){return/^[\w.:@/+-]+$/.test(value)?value:`'${value.replaceAll("'","'\\''")}'`}function safeHomedir(){try{return homedir()}catch{return""}}var ANSI=new RegExp("\x1B\\[[0-9;]*m","g");function stripAnsi(text){return text.replaceAll(ANSI,"")}function emit(text){console.log(text),appendCopy(`${text}
|
|
28
28
|
`)}function appendCopy(text){if(copyPath!==void 0)try{appendFileSync(copyPath,stripAnsi(text))}catch(err){let message=err instanceof Error?err.message:String(err);console.error(import_picocolors.default.yellow(`\u26A0 Could not append to ${copyPath}: ${message}`)),copyPath=void 0}}function describeError(err,depth=0){if(!(err instanceof Error))return String(err);let code=err.code,head=typeof code=="string"&&!err.message.includes(code)?`${err.message} (${code})`:err.message;if(depth>=3)return head;let nested=err instanceof AggregateError&&err.errors.length>0?err.errors[0]:err.cause;if(nested==null)return head;let tail=describeError(nested,depth+1);return head===""?tail:`${head}: ${tail}`}var CliError=class extends Error{exitCode;code;hint;status;tone;banner;expected;constructor(exitCode,code,message,opts){super(message),this.exitCode=exitCode,this.code=code,this.hint=opts?.hint,this.status=opts?.status,this.tone=opts?.tone??"error",this.banner=opts?.banner,this.expected=opts?.expected??!1}};function fail(exitCode,code,message,opts){throw new CliError(exitCode,code,message,opts)}function reportError(err){if(rawMode){let envelope={code:err.code,message:err.message};err.status!==void 0&&(envelope.status=err.status),err.hint!==void 0&&(envelope.hint=err.hint),emit(JSON.stringify({error:envelope}))}else if(err.banner?.length)for(let line of err.banner)console.error(import_picocolors.default.red(line));else console.error(err.tone==="ok"?import_picocolors.default.green(`\u2714 ${err.message}`):import_picocolors.default.red(`\u2716 ${err.message}`)),err.hint&&console.error(import_picocolors.default.dim(` ${err.hint}`));return err.exitCode}function isPrimitive(v2){return v2===null||["string","number","boolean"].includes(typeof v2)}function cell(v2){return v2==null?"":isPrimitive(v2)?String(v2):typeof v2=="object"&&"name"in v2&&isPrimitive(v2.name)?String(v2.name):JSON.stringify(v2)}function humanizeKey(key){return key.replaceAll(/([a-z0-9])([A-Z])/g,"$1_$2").replaceAll(/[\s-]+/g,"_").toUpperCase()}function tableRows(columns,rows2){return rows2.map(row=>Object.fromEntries(columns.map(column=>[column,row[column]??null])))}function renderTable(rows2){if(rows2.length===0)return import_picocolors.default.dim("(no results)");let cols=[];for(let row of rows2)for(let key of Object.keys(row))cols.includes(key)||cols.push(key);let headers=cols.map(humanizeKey),widths=cols.map((c,i)=>Math.max(headers[i]?.length??0,...rows2.map(r=>cell(r[c]).length))),line=vals=>vals.map((v2,i)=>v2.padEnd(widths[i]??0)).join(" ").trimEnd();return[import_picocolors.default.bold(line(headers)),...rows2.map(r=>line(cols.map(c=>cell(r[c]))))].join(`
|
|
29
29
|
`)}function isNamedResource(v2){return typeof v2=="object"&&v2!==null&&!Array.isArray(v2)&&"name"in v2&&typeof v2.name=="string"}function detailValue(v2){if(v2!==void 0){if(v2===null)return"";if(isPrimitive(v2))return String(v2);if(isNamedResource(v2))return v2.id!==void 0?`${v2.name} (${v2.id})`:v2.name;if(Array.isArray(v2))return v2.every(isPrimitive)?v2.map(String).join(", "):v2.every(isNamedResource)?v2.map(item=>detailValue(item)??"").join(", "):JSON.stringify(v2)}}var WARNING_GLYPH="\u26A0";function isWarning(line){return line.trimStart().startsWith(WARNING_GLYPH)}function formatBytes(bytes){return bytes<1024?`${bytes} B`:bytes<1024*1024?`${trimmedNumber(bytes/1024)} KiB`:`${trimmedNumber(bytes/(1024*1024))} MiB`}function trimmedNumber(value){return String(Number(value.toFixed(1)))}function grouped(bytes){return String(bytes).replace(/\B(?=(\d{3})+(?!\d))/g,",")}function sizesAgainstCap(bytes,cap){let actual=formatBytes(bytes),capped=formatBytes(cap);return actual!==capped?{actual,cap:capped}:{actual:`${grouped(bytes)} bytes`,cap:`${capped} (${grouped(cap)} bytes)`}}function warnLine(line){process.stderr.write(`${import_picocolors.default.yellow(line)}
|
|
30
30
|
`)}function noteLine(line){process.stderr.write(`${line}
|
|
@@ -33,13 +33,13 @@ Expecting one of '${allowedValues.join("', '")}'`);let helpEvent=`${position}Hel
|
|
|
33
33
|
`).join(`
|
|
34
34
|
${continuation}`);return`${import_picocolors.default.dim(label.padEnd(width))} ${aligned2}`}).join(`
|
|
35
35
|
`)}function renderHuman(data){if(typeof data=="string")return data;let rows2=data;if(rows2&&typeof rows2=="object"&&!Array.isArray(rows2)){let arrayProps=Object.entries(rows2).filter(([,v2])=>Array.isArray(v2));arrayProps.length===1&&Object.keys(rows2).length===1&&(rows2=arrayProps[0]?.[1])}return Array.isArray(rows2)?renderTable(rows2):data&&typeof data=="object"?renderDetail(data):JSON.stringify(data,null,2)}function ok(data,opts){emit(rawMode?JSON.stringify(data):renderHuman(opts?.human?opts.human(data):data))}function okText(text){emit(text)}function okFile(bytes){process.stdout.write(bytes),appendCopy(bytes)}function okMutation(message,payload,detail){if(rawMode){emit(JSON.stringify(payload));return}emit(detail===void 0?import_picocolors.default.green(`\u2714 ${message}.`):`${import_picocolors.default.green(`\u2714 ${message}:`)}
|
|
36
|
-
${renderHuman(detail)}`)}var KNOWN_INSTANCES={eu:{label:"EU",url:"https://api.scriptrunnerconnect.com",appUrl:"https://app.eu.scriptrunnerconnect.com"},us:{label:"US",url:"https://api.us.scriptrunnerconnect.com",appUrl:"https://app.us.scriptrunnerconnect.com"}},INSTANCE_KEYS=Object.keys(KNOWN_INSTANCES);function knownInstance(value){return KNOWN_INSTANCES[value]}var INSTANCE_FORMAT=`${INSTANCE_KEYS.join(", ")}, or an API base URL (e.g. https://api.example.com)`;function parseInstance(raw){let value=raw.trim();if(value==="")return{error:`An instance is required: ${INSTANCE_FORMAT}.`};let lower=value.toLowerCase();if(knownInstance(lower))return{instance:lower};let withScheme=/^[a-z][a-z0-9+.-]*:\/\//i.test(value)?value:`https://${value}`,url2;try{url2=new URL(withScheme)}catch{return{error:`'${value}' is not a valid instance \u2014 use ${INSTANCE_FORMAT}.`}}return url2.protocol!=="https:"&&url2.protocol!=="http:"?{error:`An instance URL must be http:// or https:// \u2014 '${value}' is ${url2.protocol}//.`}:url2.hostname===""?{error:`'${value}' has no host \u2014 use ${INSTANCE_FORMAT}.`}:url2.username!==""||url2.password!==""?{error:`An instance URL must not embed a username or password \u2014 got '${value}'.`}:url2.search!==""||url2.hash!==""?{error:`An instance URL must not carry a query string or fragment \u2014 got '${value}'.`}:{instance:`${url2.protocol}//${url2.host}${url2.pathname.replace(/\/+$/,"")}`}}function instanceError(value){return parseInstance(value).error}function normalizeInstance(value){let{instance:instance4,error:error51}=parseInstance(value);if(!instance4)throw new Error(error51??`not an instance: '${value}'`);return instance4}function assertInstance(value,origin){let{instance:instance4,error:error51}=parseInstance(value);return instance4||fail(EXIT.USAGE,"INVALID_INSTANCE",`${origin}: ${error51}`),instance4}function configDir(){return
|
|
37
|
-
`)}function baseUrl(instance4){return knownInstance(instance4)?.url??instance4}function instanceLabel(instance4){let known=knownInstance(instance4);return known?`${known.label} (${known.url})`:instance4}var API_KEYS_PATH="/apiKeys";function apiKeysUrl(instance4){let known=knownInstance(instance4);return known?`${known.appUrl}${API_KEYS_PATH}`:void 0}var LOOPBACK=new Set(["localhost","127.0.0.1","[::1]","::1"]);function insecureInstanceWarning(instance4){let url2=baseUrl(instance4);if(!url2.startsWith("http://"))return;let host;try{host=new URL(url2).hostname}catch{return}if(!LOOPBACK.has(host))return`\u26A0 ${url2} is not HTTPS \u2014 your API credentials are sent unencrypted.`}function explicitInstance(flag){let fromEnv=process.env.SR_CONNECT_CLI_INSTANCE;if(flag!==void 0&&flag!=="")return assertInstance(flag,"--instance");if(fromEnv!==void 0&&fromEnv!=="")return assertInstance(fromEnv,"SR_CONNECT_CLI_INSTANCE")}function resolveInstance(flag){let explicit2=explicitInstance(flag);if(explicit2!==void 0)return explicit2;let stored=readConfig().instance;if(stored!==void 0&&stored!=="")return assertInstance(stored,`the instance in ${
|
|
38
|
-
`,{mode:384}),renameSync(tmp,file2)}catch(err){throw rmSync(tmp,{force:!0}),err}}function pruneLocks(locks){if(!locks)return;let kept=Object.fromEntries(Object.entries(locks).filter(([,lock])=>{let expiry=Date.parse(lock.expiresAt);return!Number.isFinite(expiry)||Date.now()-expiry<LOCK_KEEP_MS}));return Object.keys(kept).length>0?kept:void 0}function readWorkspaceLock(workspaceId){let file2=sessionFile();if(file2)return readRecord(file2)?.locks?.[workspaceId]}function storeWorkspaceLock(workspaceId,lock){let file2=sessionFile();if(!file2)return!1;try{let existing=readRecord(file2),{instance:_instance,updatedAt:_updatedAt,locks,...rest}=existing??{};return persist(file2,{...rest,locks:{...locks,[workspaceId]:lock}}),!0}catch{return!1}}function forgetWorkspaceLock(workspaceId){let file2=sessionFile();if(!file2)return;let existing=readRecord(file2);if(existing?.locks?.[workspaceId])try{let{instance:_instance,updatedAt:_updatedAt,locks,...rest}=existing,remaining={...locks};delete remaining[workspaceId],persist(file2,{...rest,locks:remaining})}catch{}}function cachedServiceInfo(){return readSession()?.serviceInfo}function cacheServiceInfo(info){if(!enabled)return;let file2=sessionFile();if(file2)try{let existing=readRecord(file2),{instance:_instance,updatedAt:_updatedAt,...rest}=existing??{};persist(file2,{...rest,serviceInfo:info})}catch{}}function readUpdateCheck(){let file2=sessionFile();if(file2)return readRecord(file2)?.updateCheck}function storeUpdateCheck(check2){let file2=sessionFile();if(file2)try{let existing=readRecord(file2),{instance:_instance,updatedAt:_updatedAt,...rest}=existing??{};persist(file2,{...rest,updateCheck:check2})}catch{}}function forgetScopeValue(key,value,dependents=[]){if(!enabled)return[];let file2=sessionFile();if(!file2)return[];let existing=readRecord(file2);if(!existing||existing[key]!==value)return[];try{let{instance:_instance,updatedAt:_updatedAt,labels,...rest}=existing,removed=[key];delete rest[key];let remaining={...labels};delete remaining[key];for(let dependent of dependents)rest[dependent]!==void 0&&removed.push(dependent),delete rest[dependent],delete remaining[dependent];return persist(file2,{...rest,...Object.keys(remaining).length>0?{labels:remaining}:{}}),removed}catch{return[]}}function lockReleaseCommand(lock){let instance4=lock.instance?` --instance ${shellQuote(lock.instance)}`:"";return`${CLI} workspace-lock release -w ${lock.workspaceId} --lock-id ${lock.lockId}${instance4}`}function dropSession(file2){try{return rmSync(file2),!0}catch{return!1}}function clearSession(){let file2=sessionFile();if(!file2)return{cleared:!1,keptLocks:[]};let existing=readRecord(file2),locks=pruneLocks(existing?.locks);if(!locks)return{cleared:dropSession(file2),keptLocks:[]};let kept=keptLocksOf(locks);try{return persist(file2,{locks},void 0,{replace:!0}),{cleared:!0,keptLocks:kept}}catch{return{cleared:dropSession(file2),keptLocks:kept}}}function clearAllSessions(){let removed=0,keptLocks=[];try{for(let name of readdirSync(sessionsDir())){if(!name.endsWith(".json"))continue;let file2=
|
|
39
|
-
`,{mode:384}),renameSync2(tmp,path2)}catch(err){throw rmSync2(tmp,{force:!0}),err}return cache=stored,forced}function setSetting(key,value){let stored=readSettings(),values=Object.fromEntries(SETTING_KEYS.map(candidate=>[candidate,candidate===key?value:stored[candidate]!==!1]));return writeSettings(values)}function settingStates(flagOff={}){let stored=readSettings();return SETTING_KEYS.map(key=>{let descriptor=SETTINGS[key],flagDisabled=flagOff[key]===!0,env=envDisabled(key),value=stored[key],source=flagDisabled?"flag":env?"env":value===void 0?"default":"stored";return{key,label:descriptor.label,hint:descriptor.hint,enabled:!flagDisabled&&!env&&value!==!1,stored:value??null,envVar:descriptor.envVar,envDisabled:env,flag:descriptor.flag,flagDisabled,source}})}var ENTRY_VERSION=2,MAX_BODY=4*1024,PRUNE_MS2=10080*60*1e3,MAX_SESSION_BYTES=25*1024*1024,ROLLED=".1.jsonl",SECRET_KEY=/password|secret|token|credential|apikey|authorization|lockid/i,SECRET_PARAM=/^(x-amz-signature|x-amz-credential|x-amz-security-token|signature|awsaccesskeyid|googleaccessid|sig|se|sp|sig_key|token|password|apikey)$/i,REDACTED="<redacted>",KEEP_HEADERS=["content-type","content-length","retry-after","x-sr-connect-workspace-lock-expires-at","x-request-id","x-amzn-requestid","x-amzn-trace-id"],enabled2=!1,argv=[],instance,runId="",runSequence=0,runStarted="",runWritten=!1,maintained=!1,SECRET_ARGV_FLAG=/^(--header|--lock-id)(=|$)/;function redactArg(flag,value){if(flag.startsWith("--lock-id"))return REDACTED;let at2=value.indexOf(":");return at2===-1?REDACTED:`${value.slice(0,at2)}: ${REDACTED}`}function sanitizeArgv(tokens){let out=[];for(let i=0;i<tokens.length;i++){let token=tokens[i]??"";if(!SECRET_ARGV_FLAG.test(token)){out.push(token);continue}let eq=token.indexOf("=");if(eq!==-1){out.push(`${token.slice(0,eq)}=${redactArg(token,token.slice(eq+1))}`);continue}out.push(token);let next=tokens[i+1];next!==void 0&&(out.push(redactArg(token,next)),i++)}return out}function configureRecorder(opts){let off=process.env.SR_CONNECT_CLI_NO_RECORD_API_CALLS;enabled2=opts.enabled!==!1&&(off===void 0||/^(0|false|no|off|)$/i.test(off.trim()))&&settingEnabled("recordApiCalls"),instance=opts.instance,argv=sanitizeArgv(process.argv.slice(2)),runStarted=new Date().toISOString(),runSequence+=1,runId=`${RUN_ID}-${runSequence}`,runWritten=!1,maintained=!1}function recordingEnabled(){return enabled2}function apiCallsDir(){return
|
|
40
|
-
`).join(""),{mode:384}),runWritten=!0}catch(err){enabled2=!1;let message=err instanceof Error?err.message:String(err);warnLine(`\u26A0 Could not record API calls to ${path2}: ${message}`)}}function maintainOnce(path2,key){maintained||(maintained=!0,prune2(),roll(path2,key))}function prune2(){for(let name of listFiles()){let path2=
|
|
41
|
-
`))if(line.trim()!=="")try{let parsed=JSON.parse(line);parsed.v===ENTRY_VERSION&&lines.push(parsed)}catch{}return lines}function readApiCalls(opts){let runs=[],byId=new Map;for(let name of filesToRead(opts)){let session=sessionOf(name),runOf=(id,ts)=>{let runKey=`${session}\0${id}`,known=byId.get(runKey);if(known)return known;let created={runId:id,ts,argv:[],pid:0,session,calls:[],totalCalls:0};return byId.set(runKey,created),runs.push(created),created};for(let line of parseFile(name)){if(line.t==="run"){let run2=runOf(line.runId,line.ts);run2.ts=line.ts,run2.argv=line.argv,run2.pid=line.pid,run2.instance=line.instance;continue}let run=runOf(line.runId,line.ts),{v:_version,t:_type,runId:_runId,...call}=line;run.calls.push(call),run.totalCalls+=1}}return runs.sort((a,b2)=>a.ts.localeCompare(b2.ts))}function listRecordedSessions(){return summarize(listFiles())}function recordedTargets(opts){return summarize(filesToRead(opts))}function summarize(names){let rows2=new Map;for(let name of names){let session=sessionOf(name),row=rows2.get(session)??{session,files:0,runs:0,calls:0,bytes:0},lines=parseFile(name),calls=lines.filter(line=>line.t==="call");row.files+=1,row.runs+=lines.filter(line=>line.t==="run").length,row.calls+=calls.length,row.first??=calls[0]?.ts,row.last=calls.at(-1)?.ts??row.last;try{row.bytes+=statSync2(join4(apiCallsDir(),name)).size}catch{}rows2.set(session,row)}return[...rows2.values()]}function clearApiCalls(opts){let removed=new Set;for(let name of filesToRead(opts))try{rmSync3(join4(apiCallsDir(),name)),removed.add(sessionOf(name))}catch{}return[...removed]}import{closeSync,mkdirSync as mkdirSync6,openSync,readFileSync as readFileSync8,readSync,readdirSync as readdirSync4,rmSync as rmSync5,statSync as statSync4,writeFileSync as writeFileSync5}from"fs";import{arch,platform,release}from"os";import{join as join8}from"path";var PATH_PARAM_RE=/\{[^{}]+\}/g,supportsRequestInitExt=()=>typeof process=="object"&&Number.parseInt(process?.versions?.node?.substring(0,2))>=18&&process.versions.undici;function randomID(){return Math.random().toString(36).slice(2,11)}function createClient(clientOptions){let{baseUrl:baseUrl2="",Request:CustomRequest=globalThis.Request,fetch:baseFetch=globalThis.fetch,querySerializer:globalQuerySerializer,bodySerializer:globalBodySerializer,pathSerializer:globalPathSerializer,headers:baseHeaders,requestInitExt=void 0,...baseOptions}={...clientOptions};requestInitExt=supportsRequestInitExt()?requestInitExt:void 0,baseUrl2=removeTrailingSlash(baseUrl2);let globalMiddlewares=[];async function coreFetch(schemaPath,fetchOptions){let{baseUrl:localBaseUrl,fetch:fetch2=baseFetch,Request:Request2=CustomRequest,headers,params={},parseAs="json",querySerializer:requestQuerySerializer,bodySerializer=globalBodySerializer??defaultBodySerializer,pathSerializer:requestPathSerializer,body,middleware:requestMiddlewares=[],...init}=fetchOptions||{},finalBaseUrl=baseUrl2;localBaseUrl&&(finalBaseUrl=removeTrailingSlash(localBaseUrl)??baseUrl2);let querySerializer=typeof globalQuerySerializer=="function"?globalQuerySerializer:createQuerySerializer(globalQuerySerializer);requestQuerySerializer&&(querySerializer=typeof requestQuerySerializer=="function"?requestQuerySerializer:createQuerySerializer({...typeof globalQuerySerializer=="object"?globalQuerySerializer:{},...requestQuerySerializer}));let pathSerializer=requestPathSerializer||globalPathSerializer||defaultPathSerializer,serializedBody=body===void 0?void 0:bodySerializer(body,mergeHeaders(baseHeaders,headers,params.header)),finalHeaders=mergeHeaders(serializedBody===void 0||serializedBody instanceof FormData?{}:{"Content-Type":"application/json"},baseHeaders,headers,params.header),finalMiddlewares=[...globalMiddlewares,...requestMiddlewares],requestInit={redirect:"follow",...baseOptions,...init,body:serializedBody,headers:finalHeaders},id,options,request=new Request2(createFinalURL(schemaPath,{baseUrl:finalBaseUrl,params,querySerializer,pathSerializer}),requestInit),response;for(let key in init)key in request||(request[key]=init[key]);if(finalMiddlewares.length){id=randomID(),options=Object.freeze({baseUrl:finalBaseUrl,fetch:fetch2,parseAs,querySerializer,bodySerializer,pathSerializer});for(let m2 of finalMiddlewares)if(m2&&typeof m2=="object"&&typeof m2.onRequest=="function"){let result=await m2.onRequest({request,schemaPath,params,options,id});if(result)if(result instanceof Request2)request=result;else if(result instanceof Response){response=result;break}else throw new Error("onRequest: must return new Request() or Response() when modifying the request")}}if(!response){try{response=await fetch2(request,requestInitExt)}catch(error210){let errorAfterMiddleware=error210;if(finalMiddlewares.length)for(let i=finalMiddlewares.length-1;i>=0;i--){let m2=finalMiddlewares[i];if(m2&&typeof m2=="object"&&typeof m2.onError=="function"){let result=await m2.onError({request,error:errorAfterMiddleware,schemaPath,params,options,id});if(result){if(result instanceof Response){errorAfterMiddleware=void 0,response=result;break}if(result instanceof Error){errorAfterMiddleware=result;continue}throw new Error("onError: must return new Response() or instance of Error")}}}if(errorAfterMiddleware)throw errorAfterMiddleware}if(finalMiddlewares.length)for(let i=finalMiddlewares.length-1;i>=0;i--){let m2=finalMiddlewares[i];if(m2&&typeof m2=="object"&&typeof m2.onResponse=="function"){let result=await m2.onResponse({request,response,schemaPath,params,options,id});if(result){if(!(result instanceof Response))throw new Error("onResponse: must return new Response() when modifying the response");response=result}}}}let contentLength=response.headers.get("Content-Length");if(response.status===204||request.method==="HEAD"||contentLength==="0"&&!response.headers.get("Transfer-Encoding")?.includes("chunked"))return response.ok?{data:void 0,response}:{error:void 0,response};if(response.ok)return{data:await(async()=>{if(parseAs==="stream")return response.body;if(parseAs==="json"&&!contentLength){let raw=await response.text();return raw?JSON.parse(raw):void 0}return await response[parseAs]()})(),response};let error51=await response.text();try{error51=JSON.parse(error51)}catch{}return{error:error51,response}}return{request(method,url2,init){return coreFetch(url2,{...init,method:method.toUpperCase()})},GET(url2,init){return coreFetch(url2,{...init,method:"GET"})},PUT(url2,init){return coreFetch(url2,{...init,method:"PUT"})},POST(url2,init){return coreFetch(url2,{...init,method:"POST"})},DELETE(url2,init){return coreFetch(url2,{...init,method:"DELETE"})},OPTIONS(url2,init){return coreFetch(url2,{...init,method:"OPTIONS"})},HEAD(url2,init){return coreFetch(url2,{...init,method:"HEAD"})},PATCH(url2,init){return coreFetch(url2,{...init,method:"PATCH"})},TRACE(url2,init){return coreFetch(url2,{...init,method:"TRACE"})},use(...middleware){for(let m2 of middleware)if(m2){if(typeof m2!="object"||!("onRequest"in m2||"onResponse"in m2||"onError"in m2))throw new Error("Middleware must be an object with one of `onRequest()`, `onResponse() or `onError()`");globalMiddlewares.push(m2)}},eject(...middleware){for(let m2 of middleware){let i=globalMiddlewares.indexOf(m2);i!==-1&&globalMiddlewares.splice(i,1)}}}}function serializePrimitiveParam(name,value,options){if(value==null)return"";if(typeof value=="object")throw new Error("Deeply-nested arrays/objects aren\u2019t supported. Provide your own `querySerializer()` to handle these.");return`${name}=${options?.allowReserved===!0?value:encodeURIComponent(value)}`}function serializeObjectParam(name,value,options){if(!value||typeof value!="object")return"";let values=[],joiner={simple:",",label:".",matrix:";"}[options.style]||"&";if(options.style!=="deepObject"&&options.explode===!1){for(let k2 in value)values.push(k2,options.allowReserved===!0?value[k2]:encodeURIComponent(value[k2]));let final2=values.join(",");switch(options.style){case"form":return`${name}=${final2}`;case"label":return`.${final2}`;case"matrix":return`;${name}=${final2}`;default:return final2}}for(let k2 in value){let finalName=options.style==="deepObject"?`${name}[${k2}]`:k2;values.push(serializePrimitiveParam(finalName,value[k2],options))}let final=values.join(joiner);return options.style==="label"||options.style==="matrix"?`${joiner}${final}`:final}function serializeArrayParam(name,value,options){if(!Array.isArray(value))return"";if(options.explode===!1){let joiner2={form:",",spaceDelimited:"%20",pipeDelimited:"|"}[options.style]||",",final=(options.allowReserved===!0?value:value.map(v2=>encodeURIComponent(v2))).join(joiner2);switch(options.style){case"simple":return final;case"label":return`.${final}`;case"matrix":return`;${name}=${final}`;default:return`${name}=${final}`}}let joiner={simple:",",label:".",matrix:";"}[options.style]||"&",values=[];for(let v2 of value)options.style==="simple"||options.style==="label"?values.push(options.allowReserved===!0?v2:encodeURIComponent(v2)):values.push(serializePrimitiveParam(name,v2,options));return options.style==="label"||options.style==="matrix"?`${joiner}${values.join(joiner)}`:values.join(joiner)}function createQuerySerializer(options){return function(queryParams){let search=[];if(queryParams&&typeof queryParams=="object")for(let name in queryParams){let value=queryParams[name];if(value!=null){if(Array.isArray(value)){if(value.length===0)continue;search.push(serializeArrayParam(name,value,{style:"form",explode:!0,...options?.array,allowReserved:options?.allowReserved||!1}));continue}if(typeof value=="object"){search.push(serializeObjectParam(name,value,{style:"deepObject",explode:!0,...options?.object,allowReserved:options?.allowReserved||!1}));continue}search.push(serializePrimitiveParam(name,value,options))}}return search.join("&")}}function defaultPathSerializer(pathname,pathParams){let nextURL=pathname;for(let match of pathname.match(PATH_PARAM_RE)??[]){let name=match.substring(1,match.length-1),explode=!1,style="simple";if(name.endsWith("*")&&(explode=!0,name=name.substring(0,name.length-1)),name.startsWith(".")?(style="label",name=name.substring(1)):name.startsWith(";")&&(style="matrix",name=name.substring(1)),!pathParams||pathParams[name]===void 0||pathParams[name]===null)continue;let value=pathParams[name];if(Array.isArray(value)){nextURL=nextURL.replace(match,serializeArrayParam(name,value,{style,explode}));continue}if(typeof value=="object"){nextURL=nextURL.replace(match,serializeObjectParam(name,value,{style,explode}));continue}if(style==="matrix"){nextURL=nextURL.replace(match,`;${serializePrimitiveParam(name,value)}`);continue}nextURL=nextURL.replace(match,style==="label"?`.${encodeURIComponent(value)}`:encodeURIComponent(value))}return nextURL}function defaultBodySerializer(body,headers){return body instanceof FormData?body:headers&&(headers.get instanceof Function?headers.get("Content-Type")??headers.get("content-type"):headers["Content-Type"]??headers["content-type"])==="application/x-www-form-urlencoded"?new URLSearchParams(body).toString():JSON.stringify(body)}function createFinalURL(pathname,options){let finalURL=`${options.baseUrl}${pathname}`;options.params?.path&&(finalURL=options.pathSerializer(finalURL,options.params.path));let search=options.querySerializer(options.params.query??{});return search.startsWith("?")&&(search=search.substring(1)),search&&(finalURL+=`?${search}`),finalURL}function mergeHeaders(...allHeaders){let finalHeaders=new Headers;for(let h of allHeaders){if(!h||typeof h!="object")continue;let iterator=h instanceof Headers?h.entries():Object.entries(h);for(let[k2,v2]of iterator)if(v2===null)finalHeaders.delete(k2);else if(Array.isArray(v2))for(let v22 of v2)finalHeaders.append(k2,v22);else v2!==void 0&&finalHeaders.set(k2,v2)}return finalHeaders}function removeTrailingSlash(url2){return url2.endsWith("/")?url2.substring(0,url2.length-1):url2}var import_picocolors4=__toESM(require_picocolors(),1);import{chmodSync,mkdirSync as mkdirSync5,readFileSync as readFileSync6,rmSync as rmSync4,writeFileSync as writeFileSync4}from"fs";import{join as join5}from"path";var SERVICE=APP_DIR,ACCOUNT="default";async function entry(){if(process.env.SR_CONNECT_CLI_DISABLE_KEYCHAIN)throw new Error("Keychain disabled via SR_CONNECT_CLI_DISABLE_KEYCHAIN.");let{Entry}=await import("@napi-rs/keyring");return new Entry(SERVICE,ACCOUNT)}async function keychainGet(){try{let raw=(await entry()).getPassword();return raw?JSON.parse(raw):null}catch{return null}}async function keychainSet(creds){(await entry()).setPassword(JSON.stringify(creds))}async function keychainDelete(){try{return(await entry()).deletePassword()}catch{return!1}}var CREDENTIALS_FILE=()=>join5(configDir(),"credentials.json");function fileGet(){try{return JSON.parse(readFileSync6(CREDENTIALS_FILE(),"utf8"))}catch{return null}}function fileSet(creds){mkdirSync5(configDir(),{recursive:!0}),writeFileSync4(CREDENTIALS_FILE(),JSON.stringify(creds,null,2)+`
|
|
42
|
-
`,{mode:384}),chmodSync(CREDENTIALS_FILE(),384)}function fileDelete(){rmSync4(CREDENTIALS_FILE(),{force:!0})}async function resolveCredentials(){let creds=await lookupCredentials();return creds&&(resolvedUsername=creds.username),creds}async function lookupCredentials(){let envUser=process.env.SR_CONNECT_CLI_USERNAME,envPass=process.env.SR_CONNECT_CLI_PASSWORD;if(envUser&&envPass)return{username:envUser,password:envPass,source:"env"};let fromKeychain=await keychainGet();if(fromKeychain)return{...fromKeychain,source:"keychain"};let fromFile=fileGet();return fromFile?{...fromFile,source:"file"}:null}var resolvedUsername;function currentUsername(){return resolvedUsername}async function requireCredentials(){let creds=await resolveCredentials();return creds||fail(EXIT.UNAUTHENTICATED,"UNAUTHENTICATED","Not authenticated.",{hint:`Run \`${CLI} auth login\`, or set SR_CONNECT_CLI_USERNAME, SR_CONNECT_CLI_PASSWORD and SR_CONNECT_CLI_INSTANCE.`}),creds}function basicAuthHeader(creds){return"Basic "+Buffer.from(`${creds.username}:${creds.password}`).toString("base64")}var MIN_NODE_MAJOR=22;function runtimeNodeVersion(){return process.versions.node}function nodeMajor(version2=runtimeNodeVersion()){let major=Number.parseInt(version2??"",10);return Number.isFinite(major)?major:void 0}function nodeVersionWarning(version2=runtimeNodeVersion()){let major=Number.parseInt(version2??"",10);if(!(!Number.isFinite(major)||major>=MIN_NODE_MAJOR))return`\u26A0 Node ${version2} is older than the Node ${MIN_NODE_MAJOR} this CLI needs \u2014 live log streaming (--stream-logs) is unavailable and other commands may fail.`}var warned2=!1;function warnIfNodeUnsupported(){if(warned2)return;let warning=nodeVersionWarning();warning&&(warned2=!0,warnLine(warning))}var SEMVER_FORMAT="major.minor.patch",SEMVER=/^\d+\.\d+\.\d+$/;function semverError(version2){let trimmed=version2.trim();if(!SEMVER.test(trimmed))return`Expected a version in ${SEMVER_FORMAT} format, e.g. 1.4.0 \u2014 got "${trimmed}".`}function assertSemver(version2){let error51=semverError(version2);return error51&&fail(EXIT.USAGE,"INVALID_VERSION",error51),version2.trim()}var LOOSE_SEMVER=/^v?(\d+)\.(\d+)\.(\d+)(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?$/;function parseVersion(version2){let trimmed=version2.trim(),match=LOOSE_SEMVER.exec(trimmed);if(match)return{major:Number(match[1]??0),minor:Number(match[2]??0),patch:Number(match[3]??0),release:trimmed.includes("-")?0:1}}function compareSemver(a,b2){let left=parseVersion(a),right=parseVersion(b2);return left?right?left.major-right.major||left.minor-right.minor||left.patch-right.patch||left.release-right.release:1:right?-1:0}import{realpathSync}from"fs";import{dirname,join as join6,resolve as resolve2,sep as sep2}from"path";import{fileURLToPath}from"url";var DEFAULT_REGISTRY="https://registry.npmjs.org",LOOKUP_TIMEOUT_MS=5e3,MAX_OFFERED_VERSIONS=30,fetchImpl=(...args)=>fetch(...args);function registryBase(){let configured=process.env.SR_CONNECT_CLI_NPM_REGISTRY;return(configured&&configured.trim()!==""?configured.trim():DEFAULT_REGISTRY).replace(/\/+$/,"")}function isPrerelease(version2){return version2.includes("-")}async function fetchVersions(name){try{let response=await fetchImpl(`${registryBase()}/${encodeURIComponent(name)}`,{headers:{accept:"application/vnd.npm.install-v1+json","user-agent":USER_AGENT},signal:AbortSignal.timeout(LOOKUP_TIMEOUT_MS)});if(response.status===404)return"not-found";if(!response.ok)return;let body=await response.json();if(!body.versions||typeof body.versions!="object"||Array.isArray(body.versions))return;let versions=Object.keys(body.versions).reverse();if(versions.length===0)return;let distTags=body["dist-tags"]&&typeof body["dist-tags"]=="object"&&!Array.isArray(body["dist-tags"])?body["dist-tags"]:{},latest=typeof distTags.latest=="string"?distTags.latest:void 0;return{versions,distTags,...latest?{latest}:{}}}catch{return}}var enabled3=!0;function configureUpdateCheck(opts){let off=process.env.SR_CONNECT_CLI_NO_UPDATE_CHECK;enabled3=opts.enabled&&(off===void 0||/^(0|false|no|off|)$/i.test(off.trim()))}function latestStable(lookup){return lookup.latest&&!isPrerelease(lookup.latest)?lookup.latest:lookup.versions.filter(v2=>!isPrerelease(v2)).sort(compareSemver).at(-1)}function isFresh(checkedAt){let age=Date.now()-Date.parse(checkedAt);return Number.isFinite(age)&&age>=0&&age<SESSION_TTL_MS}function startUpdateCheck(){if(!enabled3)return;let stored=readUpdateCheck();stored&&isFresh(stored.checkedAt)||fetchVersions(PACKAGE).then(lookup=>{if(!lookup||lookup==="not-found")return;let latest=latestStable(lookup);latest&&storeUpdateCheck({checkedAt:new Date().toISOString(),latest})})}function globalRoots(site){let nodeDir=dirname(site.execPath),roots=[{manager:"npm",root:join6(nodeDir,"..","lib","node_modules")},{manager:"npm",root:join6(nodeDir,"node_modules")}],prefix=site.env.npm_config_prefix??site.env.PREFIX;prefix&&roots.push({manager:"npm",root:join6(prefix,"lib","node_modules")});let pnpmHome=site.env.PNPM_HOME;pnpmHome&&roots.push({manager:"pnpm",root:pnpmHome});let bunInstall=site.env.BUN_INSTALL;return bunInstall&&roots.push({manager:"bun",root:join6(bunInstall,"install","global")}),roots}function under(path2,root){let normalized=resolve2(root);return path2===normalized||path2.startsWith(normalized.endsWith(sep2)?normalized:normalized+sep2)}function classifyInstall(site){if(site.entry.includes(`${sep2}_npx${sep2}`)||site.entry.includes(`${sep2}dlx${sep2}`))return{kind:"npx",manager:"npm"};for(let{manager,root}of globalRoots(site))if(under(site.entry,root))return{kind:"global",manager};return{kind:site.entry.includes(`${sep2}node_modules${sep2}`)?"local":"unknown",manager:"npm"}}function updateCommand(kind,manager){let spec=`${PACKAGE}@latest`;return kind==="npx"?`npx ${spec}`:kind!=="global"?`npm install ${spec}`:manager==="pnpm"?`pnpm add -g ${spec}`:manager==="bun"?`bun add -g ${spec}`:`npm install -g ${spec}`}function currentSite(){let file2=fileURLToPath(import.meta.url),entry2=file2;try{entry2=realpathSync(file2)}catch{}return{entry:entry2,env:process.env,execPath:process.execPath}}function updateNotice(latest,current=VERSION,site=currentSite()){if(compareSemver(latest,current)<=0)return;let{kind,manager}=classifyInstall(site);return{command:updateCommand(kind,manager),current,latest}}function renderBanner(body){let width=Math.max(...body.map(line=>Array.from(line).length)),rule="*".repeat(width+6),pad=line=>`* ${line}${" ".repeat(width-Array.from(line).length)} *`;return[rule,pad(""),...body.map(pad),pad(""),rule]}function updateBody(notice){return[`New version of ${PACKAGE} available!`,`${notice.current} \u2192 ${notice.latest}`,"","Update with:",notice.command]}function unsupportedNotice(current=VERSION,site=currentSite()){let{kind,manager}=classifyInstall(site),command=updateCommand(kind,manager);return{message:`${PACKAGE} ${current} is no longer supported by this deployment.`,hint:`Update with: ${command}`,banner:renderBanner([`${PACKAGE} ${current} is no longer supported.`,"","Update with:",command])}}function renderCompact(notice){return[`\u2714 ${PACKAGE} ${notice.latest} is available (you have ${notice.current}).`,` Update with: ${notice.command}`]}var announced=!1;function printUpdateNotice(){if(announced||!enabled3)return;let stored=readUpdateCheck();if(!stored)return;let notice=updateNotice(stored.latest);if(notice){announced=!0;for(let line of isRaw()?renderCompact(notice):renderBanner(updateBody(notice)))successLine(line)}}function asksForUpdates(argv2){let words=argv2.slice(2).filter(token=>!token.startsWith("-"));return words[0]==="cli"&&words[1]==="check-updates"}async function checkForUpdate(){let lookup=await fetchVersions(PACKAGE);if(lookup==="not-found")return{state:"unpublished"};if(!lookup)return{state:"unreachable"};let latest=latestStable(lookup);if(!latest)return{state:"unpublished"};storeUpdateCheck({checkedAt:new Date().toISOString(),latest});let notice=updateNotice(latest);return notice?{notice,state:"available"}:{current:VERSION,latest,state:"current"}}function renderUpdateLine(answer){if(answer.state==="available"){let{command,current,latest}=answer.notice;return`\u2714 ${PACKAGE} ${latest} is available (you have ${current}). Update with: ${command}`}return`\u2714 ${PACKAGE} ${answer.current} is the latest version.`}var flagEnabled=!0;function configureVersionGate(opts){flagEnabled=opts.enabled}function gateEnabled(){return flagEnabled&&!process.env.SR_CONNECT_CLI_NO_VERSION_GATE}var refreshed=!1;async function readServiceInfo(client,opts={}){let cached2=cachedServiceInfo(),refresh=opts.refreshWithoutStreamUrl===!0&&!cached2?.logsStreamUrl&&!refreshed;if(cached2&&!refresh)return cached2;refresh&&cached2&&(refreshed=!0);let answer=await client.GET("/v1/serviceInfo",{}).catch(()=>{});if(!answer)return cached2;let{data,response}=answer;if(response.status===401&&fail(EXIT.UNAUTHENTICATED,"INVALID_CREDENTIALS","The API rejected these credentials.",{hint:`Run \`${CLI} auth login\` and try again.`}),!response.ok||!data)return cached2;let info={readAt:new Date().toISOString(),...data.logsStreamUrl?{logsStreamUrl:data.logsStreamUrl}:{},...data.minimumCliVersion?{minimumCliVersion:data.minimumCliVersion}:{}};return cacheServiceInfo(info),info}async function assertSupportedVersion(client){if(!gateEnabled())return;let minimum=(await readServiceInfo(client))?.minimumCliVersion;if(!minimum||compareSemver(VERSION,minimum)>=0)return;let notice=unsupportedNotice();fail(EXIT.USAGE,"CLI_TOO_OLD",notice.message,{banner:notice.banner,hint:notice.hint})}var import_picocolors3=__toESM(require_picocolors(),1);import crypto from"crypto";var ENCODING="0123456789ABCDEFGHJKMNPQRSTVWXYZ",ENCODING_LEN=32;var RANDOM_LEN=16,TIME_LEN=10,TIME_MAX=0xffffffffffff;var ULIDErrorCode;(function(ULIDErrorCode2){ULIDErrorCode2.Base32IncorrectEncoding="B32_ENC_INVALID",ULIDErrorCode2.DecodeTimeInvalidCharacter="DEC_TIME_CHAR",ULIDErrorCode2.DecodeTimeValueMalformed="DEC_TIME_MALFORMED",ULIDErrorCode2.EncodeTimeNegative="ENC_TIME_NEG",ULIDErrorCode2.EncodeTimeSizeExceeded="ENC_TIME_SIZE_EXCEED",ULIDErrorCode2.EncodeTimeValueMalformed="ENC_TIME_MALFORMED",ULIDErrorCode2.PRNGDetectFailure="PRNG_DETECT",ULIDErrorCode2.ULIDInvalid="ULID_INVALID",ULIDErrorCode2.Unexpected="UNEXPECTED",ULIDErrorCode2.UUIDInvalid="UUID_INVALID"})(ULIDErrorCode||(ULIDErrorCode={}));var ULIDError=class extends Error{constructor(errorCode,message){super(`${message} (${errorCode})`),this.name="ULIDError",this.code=errorCode}};function randomChar(prng){let randomPosition=Math.floor(prng()*ENCODING_LEN)%ENCODING_LEN;return ENCODING.charAt(randomPosition)}function detectPRNG(root){let rootLookup=detectRoot(),globalCrypto=rootLookup&&(rootLookup.crypto||rootLookup.msCrypto)||(typeof crypto<"u"?crypto:null);if(typeof globalCrypto?.getRandomValues=="function")return()=>{let buffer=new Uint8Array(1);return globalCrypto.getRandomValues(buffer),buffer[0]/256};if(typeof globalCrypto?.randomBytes=="function")return()=>globalCrypto.randomBytes(1).readUInt8()/256;if(crypto?.randomBytes)return()=>crypto.randomBytes(1).readUInt8()/256;throw new ULIDError(ULIDErrorCode.PRNGDetectFailure,"Failed to find a reliable PRNG")}function detectRoot(){return inWebWorker()?self:typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:null}function encodeRandom(len,prng){let str="";for(;len>0;len--)str=randomChar(prng)+str;return str}function encodeTime(now,len=TIME_LEN){if(isNaN(now))throw new ULIDError(ULIDErrorCode.EncodeTimeValueMalformed,`Time must be a number: ${now}`);if(now>TIME_MAX)throw new ULIDError(ULIDErrorCode.EncodeTimeSizeExceeded,`Cannot encode a time larger than ${TIME_MAX}: ${now}`);if(now<0)throw new ULIDError(ULIDErrorCode.EncodeTimeNegative,`Time must be positive: ${now}`);if(Number.isInteger(now)===!1)throw new ULIDError(ULIDErrorCode.EncodeTimeValueMalformed,`Time must be an integer: ${now}`);let mod,str="";for(let currentLen=len;currentLen>0;currentLen--)mod=now%ENCODING_LEN,str=ENCODING.charAt(mod)+str,now=(now-mod)/ENCODING_LEN;return str}function inWebWorker(){return typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope}function ulid(seedTime,prng){let currentPRNG=prng||detectPRNG(),seed=!seedTime||isNaN(seedTime)?Date.now():seedTime;return encodeTime(seed,TIME_LEN)+encodeRandom(RANDOM_LEN,currentPRNG)}function personName(person){return[person.firstName,person.lastName].filter(Boolean).join(" ")||person.email||""}function personCell(person){return`${personName(person)||person.id}${person.id?` (${person.id})`:""}`}var import_cronstrue=__toESM(require_cronstrue(),1);var CRON_FIELDS="second minute hour day-of-month month day-of-week",HOURLY_CRON="0 0 * * * *";function everyMinutesCron(minutes){return`0 */${minutes} * * * *`}function dailyCron(hour,minute){return`0 ${minute} ${hour} * * *`}function weeklyCron(day,hour,minute){return`0 ${minute} ${hour} * * ${day}`}function normalizeCron(expression){return expression.trim().split(/\s+/).join(" ")}function errorForNormalized(normalized){let parts=normalized.split(" ").filter(Boolean);if(parts.length!==6)return`CRON expression must have 6 fields (${CRON_FIELDS}) \u2014 got ${parts.length}.`;try{(0,import_cronstrue.toString)(parts.join(" "))}catch(err){return`Invalid CRON expression: ${(err instanceof Error?err.message:String(err)).replace(/^Error:\s*/,"")}`}}function cronError(expression){return errorForNormalized(normalizeCron(expression))}function describeCron(expression){try{return(0,import_cronstrue.toString)(normalizeCron(expression))}catch{return}}var MIN_TRIGGER_INTERVAL_MINUTES=15;function scheduleOf(trigger){return trigger.cronExpressionDescription??trigger.cronExpression??"not scheduled"}function assertCron(expression){let normalized=normalizeCron(expression),message=errorForNormalized(normalized);return message&&fail(EXIT.USAGE,"INVALID_CRON",message,{hint:`Once per hour is ${HOURLY_CRON}`}),normalized}var ResolverFetchError=class extends Error{status;constructor(status,message){super(message),this.status=status}};function listenerAppRegistry(){let app=RESOLVERS.app;return app?{...RESOLVERS,app:{...app,async fetch(client,deps){let payload=await fetchApps(client),withListeners=new Set(payload.apps.filter(a=>connectionTypes(a).some(ct2=>(ct2.eventListenerTypes??[]).length>0)).map(a=>a.id));return(await app.fetch(client,deps)).filter(choice=>withListeners.has(choice.value))}}}:RESOLVERS}function mapResolverError(err,spec){err.status===401&&fail(EXIT.UNAUTHENTICATED,"INVALID_CREDENTIALS",err.message,{status:401}),fail(err.status===404?EXIT.NOT_FOUND:EXIT.API_ERROR,err.status===404?"NOT_FOUND":"API_ERROR",`Fetching ${spec.plural} failed: ${err.message}`,{status:err.status})}function must(deps,key){let v2=deps[key];if(!v2)throw new Error(`resolver dependency '${key}' missing`);return v2}async function unwrap(res){if(!res.response.ok||res.data===void 0){let message=res.error?.errorMessage??`Request failed with HTTP status ${res.response.status}.`;throw new ResolverFetchError(res.response.status,message)}return res.data}var appsCache=new WeakMap,featuresCache=new WeakMap;async function teamFeatures(client,teamId){return await teamFeaturesIfKnown(client,teamId)??{eventQueues:!1,remoteWorkspace:!1}}async function teamFeaturesIfKnown(client,teamId){let perTeam=featuresCache.get(client);perTeam||featuresCache.set(client,perTeam=new Map);let cached2=perTeam.get(teamId);return cached2||(cached2=client.GET("/v1/team/{teamId}",{params:{path:{teamId}}}).then(res=>res.response.ok&&res.data?res.data.features:void 0).catch(()=>{}),perTeam.set(teamId,cached2)),cached2}function connectionTypes(app){return app.connectionTypes??(app.connectionType?[app.connectionType]:[])}async function fetchApps(client){let cached2=appsCache.get(client);return cached2||(cached2=client.GET("/v1/apps").then(unwrap),appsCache.set(client,cached2)),cached2}function findApp(payload,appId){return payload.apps.find(a=>a.id===appId)}function findApiConnectionType(app,apiConnectionTypeId){return connectionTypes(app).flatMap(ct2=>ct2.apiConnectionTypes??[]).find(t=>t.id===apiConnectionTypeId)}async function apiConnectionPackages(client,appId,apiConnectionTypeId){let app=findApp(await fetchApps(client),appId);if(!app)throw new ResolverFetchError(404,`App '${appId}' not found.`);let type=findApiConnectionType(app,apiConnectionTypeId);if(!type)throw new ResolverFetchError(404,`API connection type '${apiConnectionTypeId}' not found.`);return type.packages??[]}var GENERIC_APP="Generic";async function appConnectionTypeName(client,appId){let app=findApp(await fetchApps(client),appId);if(app)return connectionTypes(app)[0]?.name}async function isGenericApp(client,appId){try{return await appConnectionTypeName(client,appId)===GENERIC_APP}catch{return!1}}var environmentsCache=new WeakMap;function fetchEnvironments(client,workspaceId){let perWorkspace=environmentsCache.get(client);perWorkspace||environmentsCache.set(client,perWorkspace=new Map);let cached2=perWorkspace.get(workspaceId);return cached2||(cached2=client.GET("/v1/workspace/{workspaceId}/environments",{params:{path:{workspaceId}}}).then(unwrap),cached2.catch(()=>perWorkspace.delete(workspaceId)),perWorkspace.set(workspaceId,cached2)),cached2}async function environmentRelease(client,workspaceId,environmentId){return(await environmentInfo(client,workspaceId,environmentId))?.release}async function environmentInfo(client,workspaceId,environmentId){return(await fetchEnvironments(client,workspaceId).catch(()=>{}))?.environments.find(e=>e.id===environmentId)}async function environmentBelongsTo(client,workspaceId,environmentId){let data=await fetchEnvironments(client,workspaceId).catch(()=>{});if(data)return data.environments.some(e=>e.id===environmentId)}var packagesCache=new WeakMap;function fetchWorkspacePackages(client,workspaceId){let perWorkspace=packagesCache.get(client);perWorkspace||packagesCache.set(client,perWorkspace=new Map);let cached2=perWorkspace.get(workspaceId);return cached2||(cached2=client.GET("/v1/workspace/{workspaceId}/packages",{params:{path:{workspaceId}}}).then(unwrap),cached2.catch(()=>perWorkspace.delete(workspaceId)),perWorkspace.set(workspaceId,cached2)),cached2}async function packageInfo(client,workspaceId,packageId){return(await fetchWorkspacePackages(client,workspaceId).catch(()=>{}))?.packages.find(p=>p.id===packageId)}var connectorsCache=new WeakMap;function fetchConnectors(client,teamId){let perTeam=connectorsCache.get(client);perTeam||connectorsCache.set(client,perTeam=new Map);let cached2=perTeam.get(teamId);return cached2||(cached2=client.GET("/v1/team/{teamId}/connectors",{params:{path:{teamId}}}).then(unwrap),cached2.catch(()=>perTeam.delete(teamId)),perTeam.set(teamId,cached2)),cached2}async function connectorInfo(client,teamId,connectorId){return(await fetchConnectors(client,teamId).catch(()=>{}))?.connections.find(c=>c.id===connectorId)}var userCache=new WeakMap;async function currentUser(client){let cached2=userCache.get(client);return cached2||(cached2=client.GET("/v1/user/me").then(res=>res.response.ok&&res.data?res.data:void 0).catch(()=>{}),userCache.set(client,cached2)),cached2}async function currentUserId(client){return(await currentUser(client))?.id}var RESOLVERS={team:{key:"team",flag:"--team",label:"Team",plural:"teams",listCommand:`${CLI} team list`,dependsOn:[],async fetch(client){return(await unwrap(await client.GET("/v1/teams"))).teams.map(t=>({value:t.id,label:t.name,hint:t.id}))}},workspace:{key:"workspace",flag:"-w, --workspace",label:"Workspace",plural:"workspaces",listCommand:`${CLI} workspace list`,dependsOn:["team"],async fetch(client,deps){return(await unwrap(await client.GET("/v1/team/{teamId}/workspaces",{params:{path:{teamId:must(deps,"team")}}}))).workspaces.map(w=>({value:w.id,label:w.name,hint:w.id}))}},environment:{key:"environment",flag:"-e, --env",label:"Environment",plural:"environments",listCommand:`${CLI} environment list`,dependsOn:["workspace"],async fetch(client,deps){return(await fetchEnvironments(client,must(deps,"workspace"))).environments.map(e=>({value:e.id??"",label:e.name??e.id??"?",display:`${e.name??e.id??"?"} (${e.release?.version??"HEAD"})`,hint:e.id}))}},release:{key:"release",flag:"<releaseId>",label:"Release",plural:"releases",listCommand:`${CLI} release list`,dependsOn:["workspace"],async fetch(client,deps){return[...(await unwrap(await client.GET("/v1/workspace/{workspaceId}/releases",{params:{path:{workspaceId:must(deps,"workspace")}}}))).releases].reverse().map(r=>({value:r.id,label:r.version,...r.label?{display:`${r.version} \u2014 ${r.label}`}:{},hint:r.created}))}},parameter:{key:"parameter",flag:"<parameterId>",label:"Parameter",plural:"parameters",listCommand:`${CLI} environment-parameter list`,dependsOn:["workspace","environment"],async fetch(client,deps){let data=await unwrap(await client.GET("/v1/workspace/{workspaceId}/environment/{environmentId}/parameters",{params:{path:{workspaceId:must(deps,"workspace"),environmentId:must(deps,"environment")}}})),flatten2=(params,prefix="")=>params.flatMap(p=>{let path2=prefix?`${prefix} / ${p.key}`:p.key,self2={value:p.id,label:`${path2} \xB7 ${p.type}`,hint:p.id};return p.children?.length?[self2,...flatten2(p.children,path2)]:[self2]});return flatten2(data.parameters)}},app:{key:"app",flag:"--app-id",label:"App",plural:"apps",listCommand:`${CLI} app list`,dependsOn:[],async fetch(client){return(await fetchApps(client)).apps.map(a=>({value:a.id??"",label:a.name??a.id??"?",hint:a.id}))}},apiConnectionType:{key:"apiConnectionType",flag:"--api-connection-type-id",label:"API connection type",plural:"API connection types",listCommand:`${CLI} app list`,dependsOn:["app"],autoSelectSingle:!0,async fetch(client,deps){let app=findApp(await fetchApps(client),must(deps,"app"));if(!app)throw new ResolverFetchError(404,`App '${deps.app}' not found.`);return connectionTypes(app).flatMap(ct2=>(ct2.apiConnectionTypes??[]).map(t=>({value:t.id??"",label:t.name??t.id??"?",hint:ct2.name})))}},apiConnectionPackage:{key:"apiConnectionPackage",flag:"--package-id",label:"API connection package",plural:"API connection packages",listCommand:`${CLI} app list`,dependsOn:["app","apiConnectionType"],async fetch(client,deps){return(await apiConnectionPackages(client,must(deps,"app"),must(deps,"apiConnectionType"))).map(p=>({value:p.id??"",label:p.name??p.id??"?",hint:p.recommended?"recommended":p.deprecated?"deprecated":void 0}))}},listenerType:{key:"listenerType",flag:"--listener-type-id",label:"Event listener type",plural:"event listener types",listCommand:`${CLI} app list`,dependsOn:["app"],autoSelectSingle:!0,async fetch(client,deps){let app=findApp(await fetchApps(client),must(deps,"app"));if(!app)throw new ResolverFetchError(404,`App '${deps.app}' not found.`);return connectionTypes(app).flatMap(ct2=>(ct2.eventListenerTypes??[]).map(lt2=>({value:lt2.id??"",label:lt2.name??lt2.id??"?",hint:ct2.name})))}},eventType:{key:"eventType",flag:"--event-type-id",label:"Event type",plural:"event types",listCommand:`${CLI} app list`,dependsOn:["app","listenerType"],async fetch(client,deps){let app=findApp(await fetchApps(client),must(deps,"app"));if(!app)throw new ResolverFetchError(404,`App '${deps.app}' not found.`);let listenerType=connectionTypes(app).flatMap(ct2=>ct2.eventListenerTypes??[]).find(lt2=>lt2.id===must(deps,"listenerType"));if(!listenerType)throw new ResolverFetchError(404,`Event listener type '${deps.listenerType}' not found.`);return(listenerType.eventTypes??[]).map(et2=>({value:et2.id??"",label:et2.name??et2.id??"?",hint:et2.category}))}},connector:{key:"connector",flag:"--connector-id",label:"Connector",plural:"connectors",listCommand:`${CLI} connector list`,dependsOn:["team"],async fetch(client,deps){let data=await fetchConnectors(client,must(deps,"team")),me2=await currentUserId(client),allowed,appId=deps.app;if(appId){let app=findApp(await fetchApps(client),appId);if(app){let cts=connectionTypes(app),listenerTypeId=deps.listenerType;if(listenerTypeId){let owning=cts.filter(ct2=>(ct2.eventListenerTypes??[]).some(lt2=>lt2.id===listenerTypeId));owning.length>0&&(cts=owning)}let apiConnectionTypeId=deps.apiConnectionType;if(apiConnectionTypeId){let owning=cts.filter(ct2=>(ct2.apiConnectionTypes??[]).some(t=>t.id===apiConnectionTypeId));owning.length>0&&(cts=owning)}allowed=new Set(cts.map(ct2=>ct2.id??""))}}return data.connections.filter(c=>!allowed||allowed.has(c.connectionType?.id??"")).filter(c=>!appId||c.canUse!==!1).map(c=>{let sharer=me2&&c.owner?.id&&c.owner.id!==me2?personName(c.owner):"",notes=[c.authorized===!1?"unauthorized":void 0,sharer?`explicitly shared with you by ${sharer}`:void 0,c.canUse===!1?"not for use":void 0].filter(note=>note!==void 0),label=c.name??c.id??"?";return{value:c.id??"",label,...notes.length>0?{display:`${label} (${notes.join(", ")})`}:{},hint:c.connectionType?.name}})}},ownedConnector:{key:"ownedConnector",flag:"--connector-id",label:"Connector",plural:"connectors you own",listCommand:`${CLI} connector list`,dependsOn:["team"],async fetch(client,deps){let data=await fetchConnectors(client,must(deps,"team")),me2=await currentUserId(client);return data.connections.filter(c=>!me2||c.owner?.id===me2).map(c=>{let label=c.name??c.id??"?";return{value:c.id??"",label,...c.authorized===!1?{display:`${label} (unauthorized)`}:{},hint:c.connectionType?.name}})}},script:{key:"script",flag:"<scriptId>",label:"Script",plural:"scripts",dependsOn:["workspace","environment"],async fetch(client,deps){return(await unwrap(await client.GET("/v1/workspace/{workspaceId}/environment/{environmentId}/scripts",{params:{path:{workspaceId:must(deps,"workspace"),environmentId:must(deps,"environment")}}}))).scripts.map(s=>({value:s.id,label:s.name,hint:s.id}))}},eventListener:{key:"eventListener",flag:"<eventListenerId>",label:"Event listener",plural:"event listeners",listCommand:`${CLI} event-listener list`,dependsOn:["workspace","environment"],async fetch(client,deps){return(await unwrap(await client.GET("/v1/workspace/{workspaceId}/environment/{environmentId}/eventListeners",{params:{path:{workspaceId:must(deps,"workspace"),environmentId:must(deps,"environment")}}}))).eventListeners.map(el=>({value:el.id,label:el.eventType?`${el.app.name} \xB7 ${el.eventType.name}${el.script?` \u2192 ${el.script.name}`:""}`:`${el.app.name} (setup incomplete)`,hint:el.id}))}},apiConnection:{key:"apiConnection",flag:"<apiConnectionId>",label:"API connection",plural:"API connections",listCommand:`${CLI} api-connection list`,dependsOn:["workspace","environment"],async fetch(client,deps){return(await unwrap(await client.GET("/v1/workspace/{workspaceId}/environment/{environmentId}/apiConnections",{params:{path:{workspaceId:must(deps,"workspace"),environmentId:must(deps,"environment")}}}))).apiConnections.map(c=>{let label=c.path??c.id;return{value:c.id,label,display:`${label} \xB7 ${c.app.name}${c.connector?` \u2014 ${c.connector.name||c.connector.id}`:" \u2014 no connector here"}`,hint:c.id}})}},eventQueue:{key:"eventQueue",flag:"--event-queue-id",label:"Event queue",plural:"event queues",listCommand:`${CLI} event-queue list`,dependsOn:["workspace","environment"],async fetch(client,deps){return(await unwrap(await client.GET("/v1/workspace/{workspaceId}/environment/{environmentId}/eventQueues",{params:{path:{workspaceId:must(deps,"workspace"),environmentId:must(deps,"environment")}}}))).eventQueues.map(q2=>({value:q2.id,label:q2.name,...q2.disabled?{display:`${q2.name} (disabled)`}:{},hint:q2.id}))}},testPayload:{key:"testPayload",flag:"<testPayloadId>",label:"Test payload",plural:"test payloads",listCommand:`${CLI} event-listener-test-payload list`,dependsOn:["workspace","environment","eventListener"],async fetch(client,deps){let data=await unwrap(await client.GET("/v1/workspace/{workspaceId}/environment/{environmentId}/eventListener/{eventListenerId}/testPayloads",{params:{path:{workspaceId:must(deps,"workspace"),environmentId:must(deps,"environment"),eventListenerId:must(deps,"eventListener")}}}));return data.testPayloads.map(p=>({value:p.id,label:p.name,...p.id===data.defaultTestPayloadId?{display:`${p.name} (default)`}:{},hint:p.id}))}},scheduledTrigger:{key:"scheduledTrigger",flag:"<scheduledTriggerId>",label:"Scheduled trigger",plural:"scheduled triggers",listCommand:`${CLI} scheduled-trigger list`,dependsOn:["workspace","environment"],async fetch(client,deps){return(await unwrap(await client.GET("/v1/workspace/{workspaceId}/environment/{environmentId}/scheduledTriggers",{params:{path:{workspaceId:must(deps,"workspace"),environmentId:must(deps,"environment")}}}))).scheduledTriggers.map(t=>{let label=t.script?.name??t.id;return{value:t.id,label,display:`${label} \xB7 ${scheduleOf(t)}${t.disabled?" (disabled)":""}`,hint:t.id}})}},workspacePackage:{key:"workspacePackage",flag:"<packageId>",label:"Package",plural:"packages",listCommand:`${CLI} package list`,dependsOn:["workspace"],async fetch(client,deps){return(await fetchWorkspacePackages(client,must(deps,"workspace"))).packages.map(p=>({value:p.id,label:p.name,display:`${p.name}@${p.version} \xB7 ${p.type}${p.required?" \xB7 required":""}`,hint:p.id}))}}};var import_picocolors2=__toESM(require_picocolors(),1);import{existsSync,lstatSync,readdirSync as readdirSync3}from"fs";import{dirname as dirname2,join as join7}from"path";import{PassThrough}from"stream";import{styleText}from"util";function pathOptions(userInput,extensions){if(userInput==="")return[];let allowed=p=>!extensions?.length||extensions.some(ext=>p.toLowerCase().endsWith(ext.toLowerCase())),isDirectory=p=>{try{return lstatSync(p).isDirectory()}catch{return!1}},entriesOf=(dir,prefix)=>readdirSync3(dir).map(name=>join7(dir,name)).filter(full=>full.startsWith(prefix)).filter(full=>isDirectory(full)||allowed(full)).map(full=>isDirectory(full)?`${full}/`:full);try{let insideDir=userInput.length>1&&userInput.endsWith("/"),prefix=insideDir?userInput.slice(0,-1):userInput,values=[];insideDir||values.push(...entriesOf(dirname2(userInput),prefix)),isDirectory(userInput)&&values.push(...entriesOf(userInput,prefix));let options=[...new Set(values)].map(value=>({value}));return existsSync(userInput)&&lstatSync(userInput).isFile()&&!options.some(o=>o.value===userInput)&&options.unshift({value:userInput}),options}catch{return[]}}var AUTOCOMPLETE_THRESHOLD=8;function cancelled(){fail(EXIT.CANCELLED,"CANCELLED","Cancelled.")}var SUBMIT_KEY="Ctrl-S",CTRL_S=19,TAB=9,TAB_SENTINEL_BYTE=28,TAB_SENTINEL="";function detabSentinel(text){return text.replaceAll(TAB_SENTINEL," ")}function rewriteSubmitKeys(chunk){let out=[];for(let byte of chunk)byte===CTRL_S?out.push(TAB):byte===TAB?out.push(TAB_SENTINEL_BYTE):out.push(byte);return Buffer.from(out)}function submitOnCtrlS(source=process.stdin){if(!source.isTTY)return;let proxy=new PassThrough,onData=chunk=>{proxy.write(rewriteSubmitKeys(chunk))};source.on("data",onData),source.resume();let restoreTty=()=>{source.isRaw&&source.setRawMode(!1)};process.once("exit",restoreTty);let input=Object.assign(proxy,{isTTY:!0,setRawMode(mode){return source.setRawMode(mode),input}});return{input,done:()=>{process.off("exit",restoreTty),source.off("data",onData),source.pause(),proxy.end()}}}var clackAdapter={async select(message,choices,opts){let clack=await import("./dist-A3XXQMMP.js"),options=choices.map(c=>({value:c.value,label:c.display??c.label,hint:c.hint,disabled:c.disabled})),initialValue=opts?.initial,result=choices.length>AUTOCOMPLETE_THRESHOLD?await clack.autocomplete({message,options,initialValue,maxItems:10,output:process.stderr}):await clack.select({message,options,initialValue,output:process.stderr});return clack.isCancel(result)&&cancelled(),result},async multiselect(message,choices,opts){let clack=await import("./dist-A3XXQMMP.js"),options=choices.map(c=>({value:c.value,label:c.display??c.label,hint:c.hint,disabled:c.disabled})),initialValues=opts?.initial,result=choices.length>AUTOCOMPLETE_THRESHOLD?await clack.autocompleteMultiselect({message,options,initialValues,required:!1,maxItems:10,output:process.stderr}):await clack.multiselect({message,options,initialValues,required:!1,output:process.stderr});return clack.isCancel(result)&&cancelled(),result},async confirm(message,initial=!1){let clack=await import("./dist-A3XXQMMP.js"),result=await clack.confirm({message,initialValue:initial,output:process.stderr});return clack.isCancel(result)&&cancelled(),result},async text(message,opts){let clack=await import("./dist-A3XXQMMP.js"),result=await clack.text({message,initialValue:opts?.initial,validate:v2=>v2||opts?.allowEmpty?void 0:"Required.",output:process.stderr});return clack.isCancel(result)&&cancelled(),result},async multiline(message,opts){let clack=await import("./dist-A3XXQMMP.js"),core=await import("./dist-UQEAKLYF.js"),{highlightWithCursor,insertCursor}=await import("./highlight-7NU3CBVT.js"),keys=submitOnCtrlS();try{let language=opts?.language,output=process.stderr,style=(format,text)=>styleText(format,text,{stream:output}),result=await new core.MultiLinePrompt({placeholder:opts?.placeholder,initialValue:opts?.initial,showSubmit:!0,validate:()=>{},output,...keys?{input:keys.input}:{},render(){let withGuide=clack.settings.withGuide,title=`${withGuide?`${style("gray",clack.S_BAR)}
|
|
36
|
+
${renderHuman(detail)}`)}var KNOWN_INSTANCES={eu:{label:"EU",url:"https://api.scriptrunnerconnect.com",appUrl:"https://app.eu.scriptrunnerconnect.com"},us:{label:"US",url:"https://api.us.scriptrunnerconnect.com",appUrl:"https://app.us.scriptrunnerconnect.com"}},INSTANCE_KEYS=Object.keys(KNOWN_INSTANCES);function knownInstance(value){return KNOWN_INSTANCES[value]}var INSTANCE_FORMAT=`${INSTANCE_KEYS.join(", ")}, or an API base URL (e.g. https://api.example.com)`;function parseInstance(raw){let value=raw.trim();if(value==="")return{error:`An instance is required: ${INSTANCE_FORMAT}.`};let lower=value.toLowerCase();if(knownInstance(lower))return{instance:lower};let withScheme=/^[a-z][a-z0-9+.-]*:\/\//i.test(value)?value:`https://${value}`,url2;try{url2=new URL(withScheme)}catch{return{error:`'${value}' is not a valid instance \u2014 use ${INSTANCE_FORMAT}.`}}return url2.protocol!=="https:"&&url2.protocol!=="http:"?{error:`An instance URL must be http:// or https:// \u2014 '${value}' is ${url2.protocol}//.`}:url2.hostname===""?{error:`'${value}' has no host \u2014 use ${INSTANCE_FORMAT}.`}:url2.username!==""||url2.password!==""?{error:`An instance URL must not embed a username or password \u2014 got '${value}'.`}:url2.search!==""||url2.hash!==""?{error:`An instance URL must not carry a query string or fragment \u2014 got '${value}'.`}:{instance:`${url2.protocol}//${url2.host}${url2.pathname.replace(/\/+$/,"")}`}}function instanceError(value){return parseInstance(value).error}function normalizeInstance(value){let{instance:instance4,error:error51}=parseInstance(value);if(!instance4)throw new Error(error51??`not an instance: '${value}'`);return instance4}function assertInstance(value,origin){let{instance:instance4,error:error51}=parseInstance(value);return instance4||fail(EXIT.USAGE,"INVALID_INSTANCE",`${origin}: ${error51}`),instance4}function configDir(){return join2(userConfigHome(process.platform,process.env,homedir2()),APP_DIR)}function userConfigHome(platform2,env,home){let xdg=env.XDG_CONFIG_HOME;if(xdg&&xdg!=="")return xdg;if(platform2==="win32"){let appData=env.APPDATA;return appData&&appData!==""?appData:join2(home,"AppData","Roaming")}return join2(home,".config")}function readConfig(){try{return JSON.parse(readFileSync2(join2(configDir(),"config.json"),"utf8"))}catch{return{}}}function writeConfig(config2){mkdirSync(configDir(),{recursive:!0}),writeFileSync(join2(configDir(),"config.json"),JSON.stringify(config2,null,2)+`
|
|
37
|
+
`)}function baseUrl(instance4){return knownInstance(instance4)?.url??instance4}function instanceLabel(instance4){let known=knownInstance(instance4);return known?`${known.label} (${known.url})`:instance4}var API_KEYS_PATH="/apiKeys";function apiKeysUrl(instance4){let known=knownInstance(instance4);return known?`${known.appUrl}${API_KEYS_PATH}`:void 0}var LOOPBACK=new Set(["localhost","127.0.0.1","[::1]","::1"]);function insecureInstanceWarning(instance4){let url2=baseUrl(instance4);if(!url2.startsWith("http://"))return;let host;try{host=new URL(url2).hostname}catch{return}if(!LOOPBACK.has(host))return`\u26A0 ${url2} is not HTTPS \u2014 your API credentials are sent unencrypted.`}function explicitInstance(flag){let fromEnv=process.env.SR_CONNECT_CLI_INSTANCE;if(flag!==void 0&&flag!=="")return assertInstance(flag,"--instance");if(fromEnv!==void 0&&fromEnv!=="")return assertInstance(fromEnv,"SR_CONNECT_CLI_INSTANCE")}function resolveInstance(flag){let explicit2=explicitInstance(flag);if(explicit2!==void 0)return explicit2;let stored=readConfig().instance;if(stored!==void 0&&stored!=="")return assertInstance(stored,`the instance in ${join2(configDir(),"config.json")}`)}var RUN_ID=`${Date.now().toString(36)}-${process.pid}`;import{createHash}from"crypto";import{fstatSync,mkdirSync as mkdirSync2,readFileSync as readFileSync3,readdirSync,renameSync,rmSync,statSync,writeFileSync as writeFileSync2}from"fs";import{homedir as homedir3}from"os";import{join as join3}from"path";var SESSION_KEYS=["team","workspace","environment"],SESSION_RECORD_VERSION=2,SESSION_TTL_MS=720*60*1e3,PRUNE_MS=10080*60*1e3,LOCK_KEEP_MS=3600*1e3,runtimeInstance,enabled=!0;function configureSession(opts){runtimeInstance=opts.instance,enabled=opts.enabled!==!1}function sessionEnabled(){return enabled}function stateHome(){return userStateHome(process.platform,process.env,homedir3())}function userStateHome(platform2,env,home){let explicit2=env.SR_CONNECT_CLI_STATE_HOME;if(explicit2&&explicit2!=="")return explicit2;let xdg=env.XDG_STATE_HOME;if(xdg&&xdg!=="")return xdg;if(platform2==="win32"){let local=env.LOCALAPPDATA;return local&&local!==""?local:join3(home,"AppData","Local")}return join3(home,".local","state")}function sessionsDir(){return join3(stateHome(),APP_DIR,"sessions")}var sanitize=v2=>v2.replace(/[^A-Za-z0-9_.-]/g,"_").slice(0,96);function terminalMarker(){let pair=(a,b2)=>a&&a!==""?`${a}:${b2??""}`:void 0;return[process.env.TERM_SESSION_ID,process.env.ITERM_SESSION_ID,pair(process.env.WEZTERM_UNIX_SOCKET,process.env.WEZTERM_PANE),pair(process.env.KITTY_PID,process.env.KITTY_WINDOW_ID),process.env.ALACRITTY_WINDOW_ID,process.env.WT_SESSION,pair(process.env.TMUX,process.env.TMUX_PANE),process.env.STY].find(c=>c&&c!=="")}function sessionKey(){let explicit2=process.env.SR_CONNECT_CLI_SESSION_ID;if(explicit2&&explicit2!=="")return`id-${sanitize(explicit2)}`;let marker=terminalMarker();if(marker)return`mark-${sanitize(marker)}`;for(let fd of[0,1,2])try{let st2=fstatSync(fd);if(st2.isCharacterDevice()&&st2.rdev)return`tty-${st2.rdev}`}catch{}return process.ppid?`ppid-${process.ppid}`:void 0}function instanceSlug(instance4){return createHash("sha256").update(instance4).digest("hex").slice(0,12)}function sessionFile(){let key=sessionKey();if(!key)return;let instance4=effectiveInstance();return join3(sessionsDir(),instance4?`${key}.${instanceSlug(instance4)}.json`:`${key}.json`)}function hasScope(record4){return!!(record4&&SESSION_KEYS.some(k2=>record4[k2]))}function effectiveInstance(){return resolveInstance(runtimeInstance)}function readSession(){if(!enabled)return;let file2=sessionFile();if(!file2)return;let record4;try{record4=JSON.parse(readFileSync3(file2,"utf8"))}catch{return}if(record4.version!==SESSION_RECORD_VERSION){dropSession(file2);return}let age=Date.now()-Date.parse(record4.updatedAt);if(!Number.isFinite(age)||age>SESSION_TTL_MS){dropSession(file2);return}let instance4=effectiveInstance();if(record4.instance&&instance4&&record4.instance!==instance4){warnStrandedLocks(pruneLocks(record4.locks)),dropSession(file2),hasScope(record4)&&(instanceCleared=instanceLabel(record4.instance));return}return record4}function warnStrandedLocks(locks){if(!locks)return;let kept=keptLocksOf(locks);if(kept.length!==0){warnLine(`${kept.length} workspace lock${kept.length===1?"":"s"} taken against another instance cannot be presented from here and are being forgotten.`);for(let lock of kept)warnLine(` ${lockReleaseCommand(lock)}`)}}var instanceCleared;function takeInstanceClear(){let cleared=instanceCleared;return instanceCleared=void 0,cleared}function readRecord(file2,opts={}){let record4;try{record4=JSON.parse(readFileSync3(file2,"utf8"))}catch{return}if(record4.version!==SESSION_RECORD_VERSION)return;let age=Date.now()-Date.parse(record4.updatedAt);if(!Number.isFinite(age)||age>SESSION_TTL_MS)return;if(opts.anyInstance)return record4;let instance4=effectiveInstance();if(!(record4.instance&&instance4&&record4.instance!==instance4))return record4}function prune(dir){try{for(let name of readdirSync(dir)){if(!name.endsWith(".json"))continue;let path2=join3(dir,name);try{Date.now()-statSync(path2).mtimeMs>PRUNE_MS&&rmSync(path2)}catch{}}}catch{}}function writeSession(record4){let file2=sessionFile();file2||fail(EXIT.USAGE,"NO_SESSION","No shell session detected (no TTY). Set SR_CONNECT_CLI_SESSION_ID, or pass --team/-w/-e explicitly."),persist(file2,record4)}function persist(file2,record4,instance4,options){let dir=sessionsDir();mkdirSync2(dir,{recursive:!0,mode:448}),prune(dir);let existing=options?.replace?void 0:readRecord(file2),carried=record4.serviceInfo??existing?.serviceInfo,locks=pruneLocks("locks"in record4?record4.locks:existing?.locks),update=record4.updateCheck??existing?.updateCheck,payload={...record4,version:SESSION_RECORD_VERSION,...carried===void 0?{}:{serviceInfo:carried},...locks===void 0?{}:{locks},...update===void 0?{}:{updateCheck:update},instance:instance4??effectiveInstance(),updatedAt:new Date().toISOString()},tmp=`${file2}.${process.pid}.tmp`;try{writeFileSync2(tmp,JSON.stringify(payload)+`
|
|
38
|
+
`,{mode:384}),renameSync(tmp,file2)}catch(err){throw rmSync(tmp,{force:!0}),err}}function pruneLocks(locks){if(!locks)return;let kept=Object.fromEntries(Object.entries(locks).filter(([,lock])=>{let expiry=Date.parse(lock.expiresAt);return!Number.isFinite(expiry)||Date.now()-expiry<LOCK_KEEP_MS}));return Object.keys(kept).length>0?kept:void 0}function readWorkspaceLock(workspaceId){let file2=sessionFile();if(file2)return readRecord(file2)?.locks?.[workspaceId]}function storeWorkspaceLock(workspaceId,lock){let file2=sessionFile();if(!file2)return!1;try{let existing=readRecord(file2),{instance:_instance,updatedAt:_updatedAt,locks,...rest}=existing??{};return persist(file2,{...rest,locks:{...locks,[workspaceId]:lock}}),!0}catch{return!1}}function forgetWorkspaceLock(workspaceId){let file2=sessionFile();if(!file2)return;let existing=readRecord(file2);if(existing?.locks?.[workspaceId])try{let{instance:_instance,updatedAt:_updatedAt,locks,...rest}=existing,remaining={...locks};delete remaining[workspaceId],persist(file2,{...rest,locks:remaining})}catch{}}function cachedServiceInfo(){return readSession()?.serviceInfo}function cacheServiceInfo(info){if(!enabled)return;let file2=sessionFile();if(file2)try{let existing=readRecord(file2),{instance:_instance,updatedAt:_updatedAt,...rest}=existing??{};persist(file2,{...rest,serviceInfo:info})}catch{}}function readUpdateCheck(){let file2=sessionFile();if(file2)return readRecord(file2)?.updateCheck}function storeUpdateCheck(check2){let file2=sessionFile();if(file2)try{let existing=readRecord(file2),{instance:_instance,updatedAt:_updatedAt,...rest}=existing??{};persist(file2,{...rest,updateCheck:check2})}catch{}}function forgetScopeValue(key,value,dependents=[]){if(!enabled)return[];let file2=sessionFile();if(!file2)return[];let existing=readRecord(file2);if(!existing||existing[key]!==value)return[];try{let{instance:_instance,updatedAt:_updatedAt,labels,...rest}=existing,removed=[key];delete rest[key];let remaining={...labels};delete remaining[key];for(let dependent of dependents)rest[dependent]!==void 0&&removed.push(dependent),delete rest[dependent],delete remaining[dependent];return persist(file2,{...rest,...Object.keys(remaining).length>0?{labels:remaining}:{}}),removed}catch{return[]}}function lockReleaseCommand(lock){let instance4=lock.instance?` --instance ${shellQuote(lock.instance)}`:"";return`${CLI} workspace-lock release -w ${lock.workspaceId} --lock-id ${lock.lockId}${instance4}`}function dropSession(file2){try{return rmSync(file2),!0}catch{return!1}}function clearSession(){let file2=sessionFile();if(!file2)return{cleared:!1,keptLocks:[]};let existing=readRecord(file2),locks=pruneLocks(existing?.locks);if(!locks)return{cleared:dropSession(file2),keptLocks:[]};let kept=keptLocksOf(locks);try{return persist(file2,{locks},void 0,{replace:!0}),{cleared:!0,keptLocks:kept}}catch{return{cleared:dropSession(file2),keptLocks:kept}}}function clearAllSessions(){let removed=0,keptLocks=[];try{for(let name of readdirSync(sessionsDir())){if(!name.endsWith(".json"))continue;let file2=join3(sessionsDir(),name),record4=readRecord(file2,{anyInstance:!0}),locks=pruneLocks(record4?.locks);try{locks?(persist(file2,{locks},record4?.instance,{replace:!0}),keptLocks.push(...keptLocksOf(locks,record4?.instance))):rmSync(file2),removed+=1}catch{}}}catch{}return{removed,keptLocks}}function keptLocksOf(locks,instance4){let now=Date.now(),foreign=instance4!==void 0&&instance4!==effectiveInstance()?{instance:instance4}:{};return Object.entries(locks).filter(([,lock])=>Date.parse(lock.expiresAt)>now).map(([workspaceId,lock])=>({workspaceId,lockId:lock.lockId,...foreign}))}function describeValue(record4,key){let id=record4[key]??"",label=record4.labels?.[key];return label?`${label} (${id})`:id}import{mkdirSync as mkdirSync3,readFileSync as readFileSync4,renameSync as renameSync2,rmSync as rmSync2,writeFileSync as writeFileSync3}from"fs";import{join as join4}from"path";var SETTING_KEYS=["recordApiCalls","workspaceLock","localSync","crashReports","agenticFeedback"],SETTINGS={recordApiCalls:{label:"Record API calls",hint:"records this CLI's own requests to a local log, readable with `cli list-api-logs` \u2014 recommended to keep on",envVar:"SR_CONNECT_CLI_NO_RECORD_API_CALLS",flag:"--no-record-api-calls"},workspaceLock:{label:"Auto workspace lock",hint:"takes a workspace lock before a write, so nothing else changes the workspace mid-command \u2014 recommended to keep on",envVar:"SR_CONNECT_CLI_NO_LOCK",flag:"--no-lock"},localSync:{label:"Auto local sync",hint:"mirrors a change into the local copy of the workspace, if the local directory is a local workspace clone \u2014 recommended to keep on",envVar:"SR_CONNECT_CLI_NO_LOCAL_SYNC",flag:"--no-local-sync"},crashReports:{label:"Generate crash reports",hint:"writes a report when a run fails unexpectedly, and offers to send it \u2014 recommended to keep on",envVar:"SR_CONNECT_CLI_NO_CRASH_REPORTS",flag:"--no-crash-reports"},agenticFeedback:{label:"Allow agentic feedback",hint:"allows agents to send feedback autonomously for improvements \u2014 recommended to keep on",envVar:"SR_CONNECT_CLI_NO_AGENTIC_FEEDBACK",flag:"--no-agentic-feedback"}},SETTINGS_VERSION=1;function settingsFile(){return join4(stateHome(),APP_DIR,"settings.json")}var cache,warned=!1;function readSettings(){if(cache)return cache;let parsed;try{parsed=JSON.parse(readFileSync4(settingsFile(),"utf8"))}catch{return cache={},cache}let file2=parsed;if(typeof file2?.version=="number"&&file2.version>SETTINGS_VERSION)return warned||(warned=!0,warnLine(`\u26A0 ${settingsFile()} was written by a newer CLI (format ${file2.version}) \u2014 using the defaults. Update the CLI to read it.`)),cache={},cache;let values={},stored=file2?.values;if(stored&&typeof stored=="object")for(let key of SETTING_KEYS){let value=stored[key];typeof value=="boolean"&&(values[key]=value)}return cache=values,values}function envDisabled(key){let value=process.env[SETTINGS[key].envVar];return value===void 0?!1:!["","0","false","no","off"].includes(value.trim().toLowerCase())}function settingEnabled(key){return readSettings()[key]!==!1}function writeSettings(values){let forced=[],stored={};for(let key of SETTING_KEYS){if(envDisabled(key)){forced.push(key),stored[key]=!1;continue}values[key]||(stored[key]=!1)}let file2={version:SETTINGS_VERSION,updatedAt:new Date().toISOString(),values:stored},path2=settingsFile();mkdirSync3(join4(stateHome(),APP_DIR),{recursive:!0,mode:448});let tmp=`${path2}.${process.pid}.tmp`;try{writeFileSync3(tmp,JSON.stringify(file2)+`
|
|
39
|
+
`,{mode:384}),renameSync2(tmp,path2)}catch(err){throw rmSync2(tmp,{force:!0}),err}return cache=stored,forced}function setSetting(key,value){let stored=readSettings(),values=Object.fromEntries(SETTING_KEYS.map(candidate=>[candidate,candidate===key?value:stored[candidate]!==!1]));return writeSettings(values)}function settingStates(flagOff={}){let stored=readSettings();return SETTING_KEYS.map(key=>{let descriptor=SETTINGS[key],flagDisabled=flagOff[key]===!0,env=envDisabled(key),value=stored[key],source=flagDisabled?"flag":env?"env":value===void 0?"default":"stored";return{key,label:descriptor.label,hint:descriptor.hint,enabled:!flagDisabled&&!env&&value!==!1,stored:value??null,envVar:descriptor.envVar,envDisabled:env,flag:descriptor.flag,flagDisabled,source}})}var ENTRY_VERSION=2,MAX_BODY=4*1024,PRUNE_MS2=10080*60*1e3,MAX_SESSION_BYTES=25*1024*1024,ROLLED=".1.jsonl",SECRET_KEY=/password|secret|token|credential|apikey|authorization|lockid/i,SECRET_PARAM=/^(x-amz-signature|x-amz-credential|x-amz-security-token|signature|awsaccesskeyid|googleaccessid|sig|se|sp|sig_key|token|password|apikey)$/i,REDACTED="<redacted>",KEEP_HEADERS=["content-type","content-length","retry-after","x-sr-connect-workspace-lock-expires-at","x-request-id","x-amzn-requestid","x-amzn-trace-id"],enabled2=!1,argv=[],instance,runId="",runSequence=0,runStarted="",runWritten=!1,maintained=!1,SECRET_ARGV_FLAG=/^(--header|--lock-id)(=|$)/;function redactArg(flag,value){if(flag.startsWith("--lock-id"))return REDACTED;let at2=value.indexOf(":");return at2===-1?REDACTED:`${value.slice(0,at2)}: ${REDACTED}`}function sanitizeArgv(tokens){let out=[];for(let i=0;i<tokens.length;i++){let token=tokens[i]??"";if(!SECRET_ARGV_FLAG.test(token)){out.push(token);continue}let eq=token.indexOf("=");if(eq!==-1){out.push(`${token.slice(0,eq)}=${redactArg(token,token.slice(eq+1))}`);continue}out.push(token);let next=tokens[i+1];next!==void 0&&(out.push(redactArg(token,next)),i++)}return out}function configureRecorder(opts){let off=process.env.SR_CONNECT_CLI_NO_RECORD_API_CALLS;enabled2=opts.enabled!==!1&&(off===void 0||/^(0|false|no|off|)$/i.test(off.trim()))&&settingEnabled("recordApiCalls"),instance=opts.instance,argv=sanitizeArgv(process.argv.slice(2)),runStarted=new Date().toISOString(),runSequence+=1,runId=`${RUN_ID}-${runSequence}`,runWritten=!1,maintained=!1}function recordingEnabled(){return enabled2}function apiCallsDir(){return join5(stateHome(),APP_DIR,"api-calls")}function sessionFile2(key){return join5(apiCallsDir(),`${key}.jsonl`)}function sessionOf(name){return name.replace(/(\.1)?\.jsonl$/,"")}function sanitizeBody(text){if(text==="")return"";let bytes=Buffer.byteLength(text),out;try{out=JSON.stringify(redact(JSON.parse(text)))}catch{return`<non-json, ${bytes} bytes>`}return out.length>MAX_BODY?`${out.slice(0,MAX_BODY)}\u2026(truncated, ${bytes} bytes)`:out}function redactHeaders(value){return Array.isArray(value)?value.map(entry2=>entry2&&typeof entry2=="object"&&!Array.isArray(entry2)&&"name"in entry2&&"value"in entry2?{...entry2,value:REDACTED}:redact(entry2)):redact(value)}function redactAttachments(value){return Array.isArray(value)?value.map(entry2=>entry2&&typeof entry2=="object"&&!Array.isArray(entry2)&&"content"in entry2?{...entry2,content:REDACTED}:redact(entry2)):redact(value)}function redact(value){return Array.isArray(value)?value.map(redact):value&&typeof value=="object"?Object.fromEntries(Object.entries(value).map(([key,child])=>[key,SECRET_KEY.test(key)?REDACTED:key==="headers"?redactHeaders(child):key==="attachments"?redactAttachments(child):redact(child)])):typeof value=="string"&&/^https?:\/\//i.test(value)?sanitizeUrl(value):value}function pickHeaders(headers){let picked={};for(let name of KEEP_HEADERS){let value=headers.get(name);value!==null&&(picked[name]=value)}return picked}function instanceBaseUrl(value=instance){let resolved=resolveInstance(value);return resolved?baseUrl(resolved):void 0}function redactLockPath(url2){return url2.replace(/\/lock\/[^/?#]+/i,`/lock/${REDACTED}`)}function sanitizeUrl(url2,base=instanceBaseUrl()){if(url2=redactLockPath(url2),base!==void 0&&url2.startsWith(base))return url2;let cut=url2.indexOf("?");if(cut===-1)return url2;let query=url2.slice(cut+1).split("&").map(pair=>{let eq=pair.indexOf("="),name=eq===-1?pair:pair.slice(0,eq);return SECRET_PARAM.test(name)?`${name}=${REDACTED}`:pair}).join("&");return`${url2.slice(0,cut)}?${query}`}function recordApiCall(call){if(!enabled2)return;let key=sessionKey();if(!key)return;let path2=sessionFile2(key);try{mkdirSync4(apiCallsDir(),{recursive:!0,mode:448}),maintainOnce(path2,key);let lines=[];runWritten||lines.push({v:ENTRY_VERSION,t:"run",runId,ts:runStarted,argv,pid:process.pid,...instance===void 0?{}:{instance}}),lines.push({v:ENTRY_VERSION,t:"call",runId,...call,url:sanitizeUrl(call.url)}),appendFileSync2(path2,lines.map(line=>`${JSON.stringify(line)}
|
|
40
|
+
`).join(""),{mode:384}),runWritten=!0}catch(err){enabled2=!1;let message=err instanceof Error?err.message:String(err);warnLine(`\u26A0 Could not record API calls to ${path2}: ${message}`)}}function maintainOnce(path2,key){maintained||(maintained=!0,prune2(),roll(path2,key))}function prune2(){for(let name of listFiles()){let path2=join5(apiCallsDir(),name);try{Date.now()-statSync2(path2).mtimeMs>PRUNE_MS2&&rmSync3(path2)}catch{}}}function roll(path2,key){try{if(statSync2(path2).size<MAX_SESSION_BYTES)return;renameSync3(path2,join5(apiCallsDir(),`${key}${ROLLED}`))}catch{}}function listFiles(){try{return readdirSync2(apiCallsDir()).filter(name=>name.endsWith(".jsonl")).sort()}catch{return[]}}function filesToRead(opts){if(opts.allSessions)return listFiles();let key=opts.session??sessionKey();if(!key)return[];let present=new Set(listFiles());return[`${key}${ROLLED}`,`${key}.jsonl`].filter(name=>present.has(name))}function parseFile(name){let text;try{text=readFileSync5(join5(apiCallsDir(),name),"utf8")}catch{return[]}let lines=[];for(let line of text.split(`
|
|
41
|
+
`))if(line.trim()!=="")try{let parsed=JSON.parse(line);parsed.v===ENTRY_VERSION&&lines.push(parsed)}catch{}return lines}function readApiCalls(opts){let runs=[],byId=new Map;for(let name of filesToRead(opts)){let session=sessionOf(name),runOf=(id,ts)=>{let runKey=`${session}\0${id}`,known=byId.get(runKey);if(known)return known;let created={runId:id,ts,argv:[],pid:0,session,calls:[],totalCalls:0};return byId.set(runKey,created),runs.push(created),created};for(let line of parseFile(name)){if(line.t==="run"){let run2=runOf(line.runId,line.ts);run2.ts=line.ts,run2.argv=line.argv,run2.pid=line.pid,run2.instance=line.instance;continue}let run=runOf(line.runId,line.ts),{v:_version,t:_type,runId:_runId,...call}=line;run.calls.push(call),run.totalCalls+=1}}return runs.sort((a,b2)=>a.ts.localeCompare(b2.ts))}function listRecordedSessions(){return summarize(listFiles())}function recordedTargets(opts){return summarize(filesToRead(opts))}function summarize(names){let rows2=new Map;for(let name of names){let session=sessionOf(name),row=rows2.get(session)??{session,files:0,runs:0,calls:0,bytes:0},lines=parseFile(name),calls=lines.filter(line=>line.t==="call");row.files+=1,row.runs+=lines.filter(line=>line.t==="run").length,row.calls+=calls.length,row.first??=calls[0]?.ts,row.last=calls.at(-1)?.ts??row.last;try{row.bytes+=statSync2(join5(apiCallsDir(),name)).size}catch{}rows2.set(session,row)}return[...rows2.values()]}function clearApiCalls(opts){let removed=new Set;for(let name of filesToRead(opts))try{rmSync3(join5(apiCallsDir(),name)),removed.add(sessionOf(name))}catch{}return[...removed]}import{closeSync,mkdirSync as mkdirSync6,openSync,readFileSync as readFileSync8,readSync,readdirSync as readdirSync4,rmSync as rmSync5,statSync as statSync4,writeFileSync as writeFileSync5}from"fs";import{arch,platform,release}from"os";import{join as join8}from"path";var PATH_PARAM_RE=/\{[^{}]+\}/g,supportsRequestInitExt=()=>typeof process=="object"&&Number.parseInt(process?.versions?.node?.substring(0,2))>=18&&process.versions.undici;function randomID(){return Math.random().toString(36).slice(2,11)}function createClient(clientOptions){let{baseUrl:baseUrl2="",Request:CustomRequest=globalThis.Request,fetch:baseFetch=globalThis.fetch,querySerializer:globalQuerySerializer,bodySerializer:globalBodySerializer,pathSerializer:globalPathSerializer,headers:baseHeaders,requestInitExt=void 0,...baseOptions}={...clientOptions};requestInitExt=supportsRequestInitExt()?requestInitExt:void 0,baseUrl2=removeTrailingSlash(baseUrl2);let globalMiddlewares=[];async function coreFetch(schemaPath,fetchOptions){let{baseUrl:localBaseUrl,fetch:fetch2=baseFetch,Request:Request2=CustomRequest,headers,params={},parseAs="json",querySerializer:requestQuerySerializer,bodySerializer=globalBodySerializer??defaultBodySerializer,pathSerializer:requestPathSerializer,body,middleware:requestMiddlewares=[],...init}=fetchOptions||{},finalBaseUrl=baseUrl2;localBaseUrl&&(finalBaseUrl=removeTrailingSlash(localBaseUrl)??baseUrl2);let querySerializer=typeof globalQuerySerializer=="function"?globalQuerySerializer:createQuerySerializer(globalQuerySerializer);requestQuerySerializer&&(querySerializer=typeof requestQuerySerializer=="function"?requestQuerySerializer:createQuerySerializer({...typeof globalQuerySerializer=="object"?globalQuerySerializer:{},...requestQuerySerializer}));let pathSerializer=requestPathSerializer||globalPathSerializer||defaultPathSerializer,serializedBody=body===void 0?void 0:bodySerializer(body,mergeHeaders(baseHeaders,headers,params.header)),finalHeaders=mergeHeaders(serializedBody===void 0||serializedBody instanceof FormData?{}:{"Content-Type":"application/json"},baseHeaders,headers,params.header),finalMiddlewares=[...globalMiddlewares,...requestMiddlewares],requestInit={redirect:"follow",...baseOptions,...init,body:serializedBody,headers:finalHeaders},id,options,request=new Request2(createFinalURL(schemaPath,{baseUrl:finalBaseUrl,params,querySerializer,pathSerializer}),requestInit),response;for(let key in init)key in request||(request[key]=init[key]);if(finalMiddlewares.length){id=randomID(),options=Object.freeze({baseUrl:finalBaseUrl,fetch:fetch2,parseAs,querySerializer,bodySerializer,pathSerializer});for(let m2 of finalMiddlewares)if(m2&&typeof m2=="object"&&typeof m2.onRequest=="function"){let result=await m2.onRequest({request,schemaPath,params,options,id});if(result)if(result instanceof Request2)request=result;else if(result instanceof Response){response=result;break}else throw new Error("onRequest: must return new Request() or Response() when modifying the request")}}if(!response){try{response=await fetch2(request,requestInitExt)}catch(error210){let errorAfterMiddleware=error210;if(finalMiddlewares.length)for(let i=finalMiddlewares.length-1;i>=0;i--){let m2=finalMiddlewares[i];if(m2&&typeof m2=="object"&&typeof m2.onError=="function"){let result=await m2.onError({request,error:errorAfterMiddleware,schemaPath,params,options,id});if(result){if(result instanceof Response){errorAfterMiddleware=void 0,response=result;break}if(result instanceof Error){errorAfterMiddleware=result;continue}throw new Error("onError: must return new Response() or instance of Error")}}}if(errorAfterMiddleware)throw errorAfterMiddleware}if(finalMiddlewares.length)for(let i=finalMiddlewares.length-1;i>=0;i--){let m2=finalMiddlewares[i];if(m2&&typeof m2=="object"&&typeof m2.onResponse=="function"){let result=await m2.onResponse({request,response,schemaPath,params,options,id});if(result){if(!(result instanceof Response))throw new Error("onResponse: must return new Response() when modifying the response");response=result}}}}let contentLength=response.headers.get("Content-Length");if(response.status===204||request.method==="HEAD"||contentLength==="0"&&!response.headers.get("Transfer-Encoding")?.includes("chunked"))return response.ok?{data:void 0,response}:{error:void 0,response};if(response.ok)return{data:await(async()=>{if(parseAs==="stream")return response.body;if(parseAs==="json"&&!contentLength){let raw=await response.text();return raw?JSON.parse(raw):void 0}return await response[parseAs]()})(),response};let error51=await response.text();try{error51=JSON.parse(error51)}catch{}return{error:error51,response}}return{request(method,url2,init){return coreFetch(url2,{...init,method:method.toUpperCase()})},GET(url2,init){return coreFetch(url2,{...init,method:"GET"})},PUT(url2,init){return coreFetch(url2,{...init,method:"PUT"})},POST(url2,init){return coreFetch(url2,{...init,method:"POST"})},DELETE(url2,init){return coreFetch(url2,{...init,method:"DELETE"})},OPTIONS(url2,init){return coreFetch(url2,{...init,method:"OPTIONS"})},HEAD(url2,init){return coreFetch(url2,{...init,method:"HEAD"})},PATCH(url2,init){return coreFetch(url2,{...init,method:"PATCH"})},TRACE(url2,init){return coreFetch(url2,{...init,method:"TRACE"})},use(...middleware){for(let m2 of middleware)if(m2){if(typeof m2!="object"||!("onRequest"in m2||"onResponse"in m2||"onError"in m2))throw new Error("Middleware must be an object with one of `onRequest()`, `onResponse() or `onError()`");globalMiddlewares.push(m2)}},eject(...middleware){for(let m2 of middleware){let i=globalMiddlewares.indexOf(m2);i!==-1&&globalMiddlewares.splice(i,1)}}}}function serializePrimitiveParam(name,value,options){if(value==null)return"";if(typeof value=="object")throw new Error("Deeply-nested arrays/objects aren\u2019t supported. Provide your own `querySerializer()` to handle these.");return`${name}=${options?.allowReserved===!0?value:encodeURIComponent(value)}`}function serializeObjectParam(name,value,options){if(!value||typeof value!="object")return"";let values=[],joiner={simple:",",label:".",matrix:";"}[options.style]||"&";if(options.style!=="deepObject"&&options.explode===!1){for(let k2 in value)values.push(k2,options.allowReserved===!0?value[k2]:encodeURIComponent(value[k2]));let final2=values.join(",");switch(options.style){case"form":return`${name}=${final2}`;case"label":return`.${final2}`;case"matrix":return`;${name}=${final2}`;default:return final2}}for(let k2 in value){let finalName=options.style==="deepObject"?`${name}[${k2}]`:k2;values.push(serializePrimitiveParam(finalName,value[k2],options))}let final=values.join(joiner);return options.style==="label"||options.style==="matrix"?`${joiner}${final}`:final}function serializeArrayParam(name,value,options){if(!Array.isArray(value))return"";if(options.explode===!1){let joiner2={form:",",spaceDelimited:"%20",pipeDelimited:"|"}[options.style]||",",final=(options.allowReserved===!0?value:value.map(v2=>encodeURIComponent(v2))).join(joiner2);switch(options.style){case"simple":return final;case"label":return`.${final}`;case"matrix":return`;${name}=${final}`;default:return`${name}=${final}`}}let joiner={simple:",",label:".",matrix:";"}[options.style]||"&",values=[];for(let v2 of value)options.style==="simple"||options.style==="label"?values.push(options.allowReserved===!0?v2:encodeURIComponent(v2)):values.push(serializePrimitiveParam(name,v2,options));return options.style==="label"||options.style==="matrix"?`${joiner}${values.join(joiner)}`:values.join(joiner)}function createQuerySerializer(options){return function(queryParams){let search=[];if(queryParams&&typeof queryParams=="object")for(let name in queryParams){let value=queryParams[name];if(value!=null){if(Array.isArray(value)){if(value.length===0)continue;search.push(serializeArrayParam(name,value,{style:"form",explode:!0,...options?.array,allowReserved:options?.allowReserved||!1}));continue}if(typeof value=="object"){search.push(serializeObjectParam(name,value,{style:"deepObject",explode:!0,...options?.object,allowReserved:options?.allowReserved||!1}));continue}search.push(serializePrimitiveParam(name,value,options))}}return search.join("&")}}function defaultPathSerializer(pathname,pathParams){let nextURL=pathname;for(let match of pathname.match(PATH_PARAM_RE)??[]){let name=match.substring(1,match.length-1),explode=!1,style="simple";if(name.endsWith("*")&&(explode=!0,name=name.substring(0,name.length-1)),name.startsWith(".")?(style="label",name=name.substring(1)):name.startsWith(";")&&(style="matrix",name=name.substring(1)),!pathParams||pathParams[name]===void 0||pathParams[name]===null)continue;let value=pathParams[name];if(Array.isArray(value)){nextURL=nextURL.replace(match,serializeArrayParam(name,value,{style,explode}));continue}if(typeof value=="object"){nextURL=nextURL.replace(match,serializeObjectParam(name,value,{style,explode}));continue}if(style==="matrix"){nextURL=nextURL.replace(match,`;${serializePrimitiveParam(name,value)}`);continue}nextURL=nextURL.replace(match,style==="label"?`.${encodeURIComponent(value)}`:encodeURIComponent(value))}return nextURL}function defaultBodySerializer(body,headers){return body instanceof FormData?body:headers&&(headers.get instanceof Function?headers.get("Content-Type")??headers.get("content-type"):headers["Content-Type"]??headers["content-type"])==="application/x-www-form-urlencoded"?new URLSearchParams(body).toString():JSON.stringify(body)}function createFinalURL(pathname,options){let finalURL=`${options.baseUrl}${pathname}`;options.params?.path&&(finalURL=options.pathSerializer(finalURL,options.params.path));let search=options.querySerializer(options.params.query??{});return search.startsWith("?")&&(search=search.substring(1)),search&&(finalURL+=`?${search}`),finalURL}function mergeHeaders(...allHeaders){let finalHeaders=new Headers;for(let h of allHeaders){if(!h||typeof h!="object")continue;let iterator=h instanceof Headers?h.entries():Object.entries(h);for(let[k2,v2]of iterator)if(v2===null)finalHeaders.delete(k2);else if(Array.isArray(v2))for(let v22 of v2)finalHeaders.append(k2,v22);else v2!==void 0&&finalHeaders.set(k2,v2)}return finalHeaders}function removeTrailingSlash(url2){return url2.endsWith("/")?url2.substring(0,url2.length-1):url2}var import_picocolors4=__toESM(require_picocolors(),1);import{chmodSync,mkdirSync as mkdirSync5,readFileSync as readFileSync6,rmSync as rmSync4,writeFileSync as writeFileSync4}from"fs";import{join as join6}from"path";var SERVICE=APP_DIR,ACCOUNT="default";async function entry(){if(process.env.SR_CONNECT_CLI_DISABLE_KEYCHAIN)throw new Error("Keychain disabled via SR_CONNECT_CLI_DISABLE_KEYCHAIN.");let{Entry}=await import("@napi-rs/keyring");return new Entry(SERVICE,ACCOUNT)}async function keychainGet(){try{let raw=(await entry()).getPassword();return raw?JSON.parse(raw):null}catch{return null}}async function keychainSet(creds){(await entry()).setPassword(JSON.stringify(creds))}async function keychainDelete(){try{return(await entry()).deletePassword()}catch{return!1}}var CREDENTIALS_FILE=()=>join6(configDir(),"credentials.json");function fileGet(){try{return JSON.parse(readFileSync6(CREDENTIALS_FILE(),"utf8"))}catch{return null}}function fileSet(creds){mkdirSync5(configDir(),{recursive:!0}),writeFileSync4(CREDENTIALS_FILE(),JSON.stringify(creds,null,2)+`
|
|
42
|
+
`,{mode:384}),chmodSync(CREDENTIALS_FILE(),384)}function fileDelete(){rmSync4(CREDENTIALS_FILE(),{force:!0})}async function resolveCredentials(){let creds=await lookupCredentials();return creds&&(resolvedUsername=creds.username),creds}async function lookupCredentials(){let envUser=process.env.SR_CONNECT_CLI_USERNAME,envPass=process.env.SR_CONNECT_CLI_PASSWORD;if(envUser&&envPass)return{username:envUser,password:envPass,source:"env"};let fromKeychain=await keychainGet();if(fromKeychain)return{...fromKeychain,source:"keychain"};let fromFile=fileGet();return fromFile?{...fromFile,source:"file"}:null}var resolvedUsername;function currentUsername(){return resolvedUsername}async function requireCredentials(){let creds=await resolveCredentials();return creds||fail(EXIT.UNAUTHENTICATED,"UNAUTHENTICATED","Not authenticated.",{hint:`Run \`${CLI} auth login\`, or set SR_CONNECT_CLI_USERNAME, SR_CONNECT_CLI_PASSWORD and SR_CONNECT_CLI_INSTANCE.`}),creds}function basicAuthHeader(creds){return"Basic "+Buffer.from(`${creds.username}:${creds.password}`).toString("base64")}var MIN_NODE_MAJOR=22;function runtimeNodeVersion(){return process.versions.node}function nodeMajor(version2=runtimeNodeVersion()){let major=Number.parseInt(version2??"",10);return Number.isFinite(major)?major:void 0}function nodeVersionWarning(version2=runtimeNodeVersion()){let major=Number.parseInt(version2??"",10);if(!(!Number.isFinite(major)||major>=MIN_NODE_MAJOR))return`\u26A0 Node ${version2} is older than the Node ${MIN_NODE_MAJOR} this CLI needs \u2014 live log streaming (--stream-logs) is unavailable and other commands may fail.`}var warned2=!1;function warnIfNodeUnsupported(){if(warned2)return;let warning=nodeVersionWarning();warning&&(warned2=!0,warnLine(warning))}var SEMVER_FORMAT="major.minor.patch",SEMVER=/^\d+\.\d+\.\d+$/;function semverError(version2){let trimmed=version2.trim();if(!SEMVER.test(trimmed))return`Expected a version in ${SEMVER_FORMAT} format, e.g. 1.4.0 \u2014 got "${trimmed}".`}function assertSemver(version2){let error51=semverError(version2);return error51&&fail(EXIT.USAGE,"INVALID_VERSION",error51),version2.trim()}var LOOSE_SEMVER=/^v?(\d+)\.(\d+)\.(\d+)(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?$/;function parseVersion(version2){let trimmed=version2.trim(),match=LOOSE_SEMVER.exec(trimmed);if(match)return{major:Number(match[1]??0),minor:Number(match[2]??0),patch:Number(match[3]??0),release:trimmed.includes("-")?0:1}}function compareSemver(a,b2){let left=parseVersion(a),right=parseVersion(b2);return left?right?left.major-right.major||left.minor-right.minor||left.patch-right.patch||left.release-right.release:1:right?-1:0}var DEFAULT_REGISTRY="https://registry.npmjs.org",LOOKUP_TIMEOUT_MS=5e3,MAX_OFFERED_VERSIONS=30,fetchImpl=(...args)=>fetch(...args);function registryBase(){let configured=process.env.SR_CONNECT_CLI_NPM_REGISTRY;return(configured&&configured.trim()!==""?configured.trim():DEFAULT_REGISTRY).replace(/\/+$/,"")}function isPrerelease(version2){return version2.includes("-")}async function fetchVersions(name){try{let response=await fetchImpl(`${registryBase()}/${encodeURIComponent(name)}`,{headers:{accept:"application/vnd.npm.install-v1+json","user-agent":USER_AGENT},signal:AbortSignal.timeout(LOOKUP_TIMEOUT_MS)});if(response.status===404)return"not-found";if(!response.ok)return;let body=await response.json();if(!body.versions||typeof body.versions!="object"||Array.isArray(body.versions))return;let versions=Object.keys(body.versions).reverse();if(versions.length===0)return;let distTags=body["dist-tags"]&&typeof body["dist-tags"]=="object"&&!Array.isArray(body["dist-tags"])?body["dist-tags"]:{},latest=typeof distTags.latest=="string"?distTags.latest:void 0;return{versions,distTags,...latest?{latest}:{}}}catch{return}}var enabled3=!0;function configureUpdateCheck(opts){let off=process.env.SR_CONNECT_CLI_NO_UPDATE_CHECK;enabled3=opts.enabled&&(off===void 0||/^(0|false|no|off|)$/i.test(off.trim()))}function latestStable(lookup){return lookup.latest&&!isPrerelease(lookup.latest)?lookup.latest:lookup.versions.filter(v2=>!isPrerelease(v2)).sort(compareSemver).at(-1)}function isFresh(checkedAt){let age=Date.now()-Date.parse(checkedAt);return Number.isFinite(age)&&age>=0&&age<SESSION_TTL_MS}function startUpdateCheck(){if(!enabled3)return;let stored=readUpdateCheck();stored&&isFresh(stored.checkedAt)||fetchVersions(PACKAGE).then(lookup=>{if(!lookup||lookup==="not-found")return;let latest=latestStable(lookup);latest&&storeUpdateCheck({checkedAt:new Date().toISOString(),latest})})}function updateCommand(kind,manager){let spec=`${PACKAGE}@latest`;return kind==="npx"?`npx ${spec}`:kind!=="global"?`npm install ${spec}`:manager==="pnpm"?`pnpm add -g ${spec}`:manager==="bun"?`bun add -g ${spec}`:`npm install -g ${spec}`}function updateNotice(latest,current=VERSION,site=currentSite()){if(compareSemver(latest,current)<=0)return;let{kind,manager}=classifyInstall(site);return{command:updateCommand(kind,manager),current,latest}}function renderBanner(body){let width=Math.max(...body.map(line=>Array.from(line).length)),rule="*".repeat(width+6),pad=line=>`* ${line}${" ".repeat(width-Array.from(line).length)} *`;return[rule,pad(""),...body.map(pad),pad(""),rule]}function updateBody(notice){return[`New version of ${PACKAGE} available!`,`${notice.current} \u2192 ${notice.latest}`,"","Update with:",notice.command]}function unsupportedNotice(current=VERSION,site=currentSite()){let{kind,manager}=classifyInstall(site),command=updateCommand(kind,manager);return{message:`${PACKAGE} ${current} is no longer supported by this deployment.`,hint:`Update with: ${command}`,banner:renderBanner([`${PACKAGE} ${current} is no longer supported.`,"","Update with:",command])}}function renderCompact(notice){return[`\u2714 ${PACKAGE} ${notice.latest} is available (you have ${notice.current}).`,` Update with: ${notice.command}`]}var announced=!1;function printUpdateNotice(){if(announced||!enabled3)return;let stored=readUpdateCheck();if(!stored)return;let notice=updateNotice(stored.latest);if(notice){announced=!0;for(let line of isRaw()?renderCompact(notice):renderBanner(updateBody(notice)))successLine(line)}}function asksForUpdates(argv2){let words=argv2.slice(2).filter(token=>!token.startsWith("-"));return words[0]==="cli"&&words[1]==="check-updates"}async function checkForUpdate(){let lookup=await fetchVersions(PACKAGE);if(lookup==="not-found")return{state:"unpublished"};if(!lookup)return{state:"unreachable"};let latest=latestStable(lookup);if(!latest)return{state:"unpublished"};storeUpdateCheck({checkedAt:new Date().toISOString(),latest});let notice=updateNotice(latest);return notice?{notice,state:"available"}:{current:VERSION,latest,state:"current"}}function renderUpdateLine(answer){if(answer.state==="available"){let{command,current,latest}=answer.notice;return`\u2714 ${PACKAGE} ${latest} is available (you have ${current}). Update with: ${command}`}return`\u2714 ${PACKAGE} ${answer.current} is the latest version.`}var flagEnabled=!0;function configureVersionGate(opts){flagEnabled=opts.enabled}function gateEnabled(){return flagEnabled&&!process.env.SR_CONNECT_CLI_NO_VERSION_GATE}var refreshed=!1;async function readServiceInfo(client,opts={}){let cached2=cachedServiceInfo(),refresh=opts.refreshWithoutStreamUrl===!0&&!cached2?.logsStreamUrl&&!refreshed;if(cached2&&!refresh)return cached2;refresh&&cached2&&(refreshed=!0);let answer=await client.GET("/v1/serviceInfo",{}).catch(()=>{});if(!answer)return cached2;let{data,response}=answer;if(response.status===401&&fail(EXIT.UNAUTHENTICATED,"INVALID_CREDENTIALS","The API rejected these credentials.",{hint:`Run \`${CLI} auth login\` and try again.`}),!response.ok||!data)return cached2;let info={readAt:new Date().toISOString(),...data.logsStreamUrl?{logsStreamUrl:data.logsStreamUrl}:{},...data.minimumCliVersion?{minimumCliVersion:data.minimumCliVersion}:{}};return cacheServiceInfo(info),info}async function assertSupportedVersion(client){if(!gateEnabled())return;let minimum=(await readServiceInfo(client))?.minimumCliVersion;if(!minimum||compareSemver(VERSION,minimum)>=0)return;let notice=unsupportedNotice();fail(EXIT.USAGE,"CLI_TOO_OLD",notice.message,{banner:notice.banner,hint:notice.hint})}var import_picocolors3=__toESM(require_picocolors(),1);import crypto from"crypto";var ENCODING="0123456789ABCDEFGHJKMNPQRSTVWXYZ",ENCODING_LEN=32;var RANDOM_LEN=16,TIME_LEN=10,TIME_MAX=0xffffffffffff;var ULIDErrorCode;(function(ULIDErrorCode2){ULIDErrorCode2.Base32IncorrectEncoding="B32_ENC_INVALID",ULIDErrorCode2.DecodeTimeInvalidCharacter="DEC_TIME_CHAR",ULIDErrorCode2.DecodeTimeValueMalformed="DEC_TIME_MALFORMED",ULIDErrorCode2.EncodeTimeNegative="ENC_TIME_NEG",ULIDErrorCode2.EncodeTimeSizeExceeded="ENC_TIME_SIZE_EXCEED",ULIDErrorCode2.EncodeTimeValueMalformed="ENC_TIME_MALFORMED",ULIDErrorCode2.PRNGDetectFailure="PRNG_DETECT",ULIDErrorCode2.ULIDInvalid="ULID_INVALID",ULIDErrorCode2.Unexpected="UNEXPECTED",ULIDErrorCode2.UUIDInvalid="UUID_INVALID"})(ULIDErrorCode||(ULIDErrorCode={}));var ULIDError=class extends Error{constructor(errorCode,message){super(`${message} (${errorCode})`),this.name="ULIDError",this.code=errorCode}};function randomChar(prng){let randomPosition=Math.floor(prng()*ENCODING_LEN)%ENCODING_LEN;return ENCODING.charAt(randomPosition)}function detectPRNG(root){let rootLookup=detectRoot(),globalCrypto=rootLookup&&(rootLookup.crypto||rootLookup.msCrypto)||(typeof crypto<"u"?crypto:null);if(typeof globalCrypto?.getRandomValues=="function")return()=>{let buffer=new Uint8Array(1);return globalCrypto.getRandomValues(buffer),buffer[0]/256};if(typeof globalCrypto?.randomBytes=="function")return()=>globalCrypto.randomBytes(1).readUInt8()/256;if(crypto?.randomBytes)return()=>crypto.randomBytes(1).readUInt8()/256;throw new ULIDError(ULIDErrorCode.PRNGDetectFailure,"Failed to find a reliable PRNG")}function detectRoot(){return inWebWorker()?self:typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:null}function encodeRandom(len,prng){let str="";for(;len>0;len--)str=randomChar(prng)+str;return str}function encodeTime(now,len=TIME_LEN){if(isNaN(now))throw new ULIDError(ULIDErrorCode.EncodeTimeValueMalformed,`Time must be a number: ${now}`);if(now>TIME_MAX)throw new ULIDError(ULIDErrorCode.EncodeTimeSizeExceeded,`Cannot encode a time larger than ${TIME_MAX}: ${now}`);if(now<0)throw new ULIDError(ULIDErrorCode.EncodeTimeNegative,`Time must be positive: ${now}`);if(Number.isInteger(now)===!1)throw new ULIDError(ULIDErrorCode.EncodeTimeValueMalformed,`Time must be an integer: ${now}`);let mod,str="";for(let currentLen=len;currentLen>0;currentLen--)mod=now%ENCODING_LEN,str=ENCODING.charAt(mod)+str,now=(now-mod)/ENCODING_LEN;return str}function inWebWorker(){return typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope}function ulid(seedTime,prng){let currentPRNG=prng||detectPRNG(),seed=!seedTime||isNaN(seedTime)?Date.now():seedTime;return encodeTime(seed,TIME_LEN)+encodeRandom(RANDOM_LEN,currentPRNG)}function personName(person){return[person.firstName,person.lastName].filter(Boolean).join(" ")||person.email||""}function personCell(person){return`${personName(person)||person.id}${person.id?` (${person.id})`:""}`}var import_cronstrue=__toESM(require_cronstrue(),1);var CRON_FIELDS="second minute hour day-of-month month day-of-week",HOURLY_CRON="0 0 * * * *";function everyMinutesCron(minutes){return`0 */${minutes} * * * *`}function dailyCron(hour,minute){return`0 ${minute} ${hour} * * *`}function weeklyCron(day,hour,minute){return`0 ${minute} ${hour} * * ${day}`}function normalizeCron(expression){return expression.trim().split(/\s+/).join(" ")}function errorForNormalized(normalized){let parts=normalized.split(" ").filter(Boolean);if(parts.length!==6)return`CRON expression must have 6 fields (${CRON_FIELDS}) \u2014 got ${parts.length}.`;try{(0,import_cronstrue.toString)(parts.join(" "))}catch(err){return`Invalid CRON expression: ${(err instanceof Error?err.message:String(err)).replace(/^Error:\s*/,"")}`}}function cronError(expression){return errorForNormalized(normalizeCron(expression))}function describeCron(expression){try{return(0,import_cronstrue.toString)(normalizeCron(expression))}catch{return}}var MIN_TRIGGER_INTERVAL_MINUTES=15;function scheduleOf(trigger){return trigger.cronExpressionDescription??trigger.cronExpression??"not scheduled"}function assertCron(expression){let normalized=normalizeCron(expression),message=errorForNormalized(normalized);return message&&fail(EXIT.USAGE,"INVALID_CRON",message,{hint:`Once per hour is ${HOURLY_CRON}`}),normalized}var ResolverFetchError=class extends Error{status;constructor(status,message){super(message),this.status=status}};function listenerAppRegistry(){let app=RESOLVERS.app;return app?{...RESOLVERS,app:{...app,async fetch(client,deps){let payload=await fetchApps(client),withListeners=new Set(payload.apps.filter(a=>connectionTypes(a).some(ct2=>(ct2.eventListenerTypes??[]).length>0)).map(a=>a.id));return(await app.fetch(client,deps)).filter(choice=>withListeners.has(choice.value))}}}:RESOLVERS}function mapResolverError(err,spec){err.status===401&&fail(EXIT.UNAUTHENTICATED,"INVALID_CREDENTIALS",err.message,{status:401}),fail(err.status===404?EXIT.NOT_FOUND:EXIT.API_ERROR,err.status===404?"NOT_FOUND":"API_ERROR",`Fetching ${spec.plural} failed: ${err.message}`,{status:err.status})}function must(deps,key){let v2=deps[key];if(!v2)throw new Error(`resolver dependency '${key}' missing`);return v2}async function unwrap(res){if(!res.response.ok||res.data===void 0){let message=res.error?.errorMessage??`Request failed with HTTP status ${res.response.status}.`;throw new ResolverFetchError(res.response.status,message)}return res.data}var appsCache=new WeakMap,featuresCache=new WeakMap;async function teamFeatures(client,teamId){return await teamFeaturesIfKnown(client,teamId)??{eventQueues:!1,remoteWorkspace:!1}}async function teamFeaturesIfKnown(client,teamId){let perTeam=featuresCache.get(client);perTeam||featuresCache.set(client,perTeam=new Map);let cached2=perTeam.get(teamId);return cached2||(cached2=client.GET("/v1/team/{teamId}",{params:{path:{teamId}}}).then(res=>res.response.ok&&res.data?res.data.features:void 0).catch(()=>{}),perTeam.set(teamId,cached2)),cached2}function connectionTypes(app){return app.connectionTypes??(app.connectionType?[app.connectionType]:[])}async function fetchApps(client){let cached2=appsCache.get(client);return cached2||(cached2=client.GET("/v1/apps").then(unwrap),appsCache.set(client,cached2)),cached2}function findApp(payload,appId){return payload.apps.find(a=>a.id===appId)}function findApiConnectionType(app,apiConnectionTypeId){return connectionTypes(app).flatMap(ct2=>ct2.apiConnectionTypes??[]).find(t=>t.id===apiConnectionTypeId)}async function apiConnectionPackages(client,appId,apiConnectionTypeId){let app=findApp(await fetchApps(client),appId);if(!app)throw new ResolverFetchError(404,`App '${appId}' not found.`);let type=findApiConnectionType(app,apiConnectionTypeId);if(!type)throw new ResolverFetchError(404,`API connection type '${apiConnectionTypeId}' not found.`);return type.packages??[]}var GENERIC_APP="Generic";async function appConnectionTypeName(client,appId){let app=findApp(await fetchApps(client),appId);if(app)return connectionTypes(app)[0]?.name}async function isGenericApp(client,appId){try{return await appConnectionTypeName(client,appId)===GENERIC_APP}catch{return!1}}var environmentsCache=new WeakMap;function fetchEnvironments(client,workspaceId){let perWorkspace=environmentsCache.get(client);perWorkspace||environmentsCache.set(client,perWorkspace=new Map);let cached2=perWorkspace.get(workspaceId);return cached2||(cached2=client.GET("/v1/workspace/{workspaceId}/environments",{params:{path:{workspaceId}}}).then(unwrap),cached2.catch(()=>perWorkspace.delete(workspaceId)),perWorkspace.set(workspaceId,cached2)),cached2}async function environmentRelease(client,workspaceId,environmentId){return(await environmentInfo(client,workspaceId,environmentId))?.release}async function environmentInfo(client,workspaceId,environmentId){return(await fetchEnvironments(client,workspaceId).catch(()=>{}))?.environments.find(e=>e.id===environmentId)}async function environmentBelongsTo(client,workspaceId,environmentId){let data=await fetchEnvironments(client,workspaceId).catch(()=>{});if(data)return data.environments.some(e=>e.id===environmentId)}var packagesCache=new WeakMap;function fetchWorkspacePackages(client,workspaceId){let perWorkspace=packagesCache.get(client);perWorkspace||packagesCache.set(client,perWorkspace=new Map);let cached2=perWorkspace.get(workspaceId);return cached2||(cached2=client.GET("/v1/workspace/{workspaceId}/packages",{params:{path:{workspaceId}}}).then(unwrap),cached2.catch(()=>perWorkspace.delete(workspaceId)),perWorkspace.set(workspaceId,cached2)),cached2}async function packageInfo(client,workspaceId,packageId){return(await fetchWorkspacePackages(client,workspaceId).catch(()=>{}))?.packages.find(p=>p.id===packageId)}var connectorsCache=new WeakMap;function fetchConnectors(client,teamId){let perTeam=connectorsCache.get(client);perTeam||connectorsCache.set(client,perTeam=new Map);let cached2=perTeam.get(teamId);return cached2||(cached2=client.GET("/v1/team/{teamId}/connectors",{params:{path:{teamId}}}).then(unwrap),cached2.catch(()=>perTeam.delete(teamId)),perTeam.set(teamId,cached2)),cached2}async function connectorInfo(client,teamId,connectorId){return(await fetchConnectors(client,teamId).catch(()=>{}))?.connections.find(c=>c.id===connectorId)}var userCache=new WeakMap;async function currentUser(client){let cached2=userCache.get(client);return cached2||(cached2=client.GET("/v1/user/me").then(res=>res.response.ok&&res.data?res.data:void 0).catch(()=>{}),userCache.set(client,cached2)),cached2}async function currentUserId(client){return(await currentUser(client))?.id}var RESOLVERS={team:{key:"team",flag:"--team",label:"Team",plural:"teams",listCommand:`${CLI} team list`,dependsOn:[],async fetch(client){return(await unwrap(await client.GET("/v1/teams"))).teams.map(t=>({value:t.id,label:t.name,hint:t.id}))}},workspace:{key:"workspace",flag:"-w, --workspace",label:"Workspace",plural:"workspaces",listCommand:`${CLI} workspace list`,dependsOn:["team"],async fetch(client,deps){return(await unwrap(await client.GET("/v1/team/{teamId}/workspaces",{params:{path:{teamId:must(deps,"team")}}}))).workspaces.map(w=>({value:w.id,label:w.name,hint:w.id}))}},environment:{key:"environment",flag:"-e, --env",label:"Environment",plural:"environments",listCommand:`${CLI} environment list`,dependsOn:["workspace"],async fetch(client,deps){return(await fetchEnvironments(client,must(deps,"workspace"))).environments.map(e=>({value:e.id??"",label:e.name??e.id??"?",display:`${e.name??e.id??"?"} (${e.release?.version??"HEAD"})`,hint:e.id}))}},release:{key:"release",flag:"<releaseId>",label:"Release",plural:"releases",listCommand:`${CLI} release list`,dependsOn:["workspace"],async fetch(client,deps){return[...(await unwrap(await client.GET("/v1/workspace/{workspaceId}/releases",{params:{path:{workspaceId:must(deps,"workspace")}}}))).releases].reverse().map(r=>({value:r.id,label:r.version,...r.label?{display:`${r.version} \u2014 ${r.label}`}:{},hint:r.created}))}},parameter:{key:"parameter",flag:"<parameterId>",label:"Parameter",plural:"parameters",listCommand:`${CLI} environment-parameter list`,dependsOn:["workspace","environment"],async fetch(client,deps){let data=await unwrap(await client.GET("/v1/workspace/{workspaceId}/environment/{environmentId}/parameters",{params:{path:{workspaceId:must(deps,"workspace"),environmentId:must(deps,"environment")}}})),flatten2=(params,prefix="")=>params.flatMap(p=>{let path2=prefix?`${prefix} / ${p.key}`:p.key,self2={value:p.id,label:`${path2} \xB7 ${p.type}`,hint:p.id};return p.children?.length?[self2,...flatten2(p.children,path2)]:[self2]});return flatten2(data.parameters)}},app:{key:"app",flag:"--app-id",label:"App",plural:"apps",listCommand:`${CLI} app list`,dependsOn:[],async fetch(client){return(await fetchApps(client)).apps.map(a=>({value:a.id??"",label:a.name??a.id??"?",hint:a.id}))}},apiConnectionType:{key:"apiConnectionType",flag:"--api-connection-type-id",label:"API connection type",plural:"API connection types",listCommand:`${CLI} app list`,dependsOn:["app"],autoSelectSingle:!0,async fetch(client,deps){let app=findApp(await fetchApps(client),must(deps,"app"));if(!app)throw new ResolverFetchError(404,`App '${deps.app}' not found.`);return connectionTypes(app).flatMap(ct2=>(ct2.apiConnectionTypes??[]).map(t=>({value:t.id??"",label:t.name??t.id??"?",hint:ct2.name})))}},apiConnectionPackage:{key:"apiConnectionPackage",flag:"--package-id",label:"API connection package",plural:"API connection packages",listCommand:`${CLI} app list`,dependsOn:["app","apiConnectionType"],async fetch(client,deps){return(await apiConnectionPackages(client,must(deps,"app"),must(deps,"apiConnectionType"))).map(p=>({value:p.id??"",label:p.name??p.id??"?",hint:p.recommended?"recommended":p.deprecated?"deprecated":void 0}))}},listenerType:{key:"listenerType",flag:"--listener-type-id",label:"Event listener type",plural:"event listener types",listCommand:`${CLI} app list`,dependsOn:["app"],autoSelectSingle:!0,async fetch(client,deps){let app=findApp(await fetchApps(client),must(deps,"app"));if(!app)throw new ResolverFetchError(404,`App '${deps.app}' not found.`);return connectionTypes(app).flatMap(ct2=>(ct2.eventListenerTypes??[]).map(lt2=>({value:lt2.id??"",label:lt2.name??lt2.id??"?",hint:ct2.name})))}},eventType:{key:"eventType",flag:"--event-type-id",label:"Event type",plural:"event types",listCommand:`${CLI} app list`,dependsOn:["app","listenerType"],async fetch(client,deps){let app=findApp(await fetchApps(client),must(deps,"app"));if(!app)throw new ResolverFetchError(404,`App '${deps.app}' not found.`);let listenerType=connectionTypes(app).flatMap(ct2=>ct2.eventListenerTypes??[]).find(lt2=>lt2.id===must(deps,"listenerType"));if(!listenerType)throw new ResolverFetchError(404,`Event listener type '${deps.listenerType}' not found.`);return(listenerType.eventTypes??[]).map(et2=>({value:et2.id??"",label:et2.name??et2.id??"?",hint:et2.category}))}},connector:{key:"connector",flag:"--connector-id",label:"Connector",plural:"connectors",listCommand:`${CLI} connector list`,dependsOn:["team"],async fetch(client,deps){let data=await fetchConnectors(client,must(deps,"team")),me2=await currentUserId(client),allowed,appId=deps.app;if(appId){let app=findApp(await fetchApps(client),appId);if(app){let cts=connectionTypes(app),listenerTypeId=deps.listenerType;if(listenerTypeId){let owning=cts.filter(ct2=>(ct2.eventListenerTypes??[]).some(lt2=>lt2.id===listenerTypeId));owning.length>0&&(cts=owning)}let apiConnectionTypeId=deps.apiConnectionType;if(apiConnectionTypeId){let owning=cts.filter(ct2=>(ct2.apiConnectionTypes??[]).some(t=>t.id===apiConnectionTypeId));owning.length>0&&(cts=owning)}allowed=new Set(cts.map(ct2=>ct2.id??""))}}return data.connections.filter(c=>!allowed||allowed.has(c.connectionType?.id??"")).filter(c=>!appId||c.canUse!==!1).map(c=>{let sharer=me2&&c.owner?.id&&c.owner.id!==me2?personName(c.owner):"",notes=[c.authorized===!1?"unauthorized":void 0,sharer?`explicitly shared with you by ${sharer}`:void 0,c.canUse===!1?"not for use":void 0].filter(note=>note!==void 0),label=c.name??c.id??"?";return{value:c.id??"",label,...notes.length>0?{display:`${label} (${notes.join(", ")})`}:{},hint:c.connectionType?.name}})}},ownedConnector:{key:"ownedConnector",flag:"--connector-id",label:"Connector",plural:"connectors you own",listCommand:`${CLI} connector list`,dependsOn:["team"],async fetch(client,deps){let data=await fetchConnectors(client,must(deps,"team")),me2=await currentUserId(client);return data.connections.filter(c=>!me2||c.owner?.id===me2).map(c=>{let label=c.name??c.id??"?";return{value:c.id??"",label,...c.authorized===!1?{display:`${label} (unauthorized)`}:{},hint:c.connectionType?.name}})}},script:{key:"script",flag:"<scriptId>",label:"Script",plural:"scripts",dependsOn:["workspace","environment"],async fetch(client,deps){return(await unwrap(await client.GET("/v1/workspace/{workspaceId}/environment/{environmentId}/scripts",{params:{path:{workspaceId:must(deps,"workspace"),environmentId:must(deps,"environment")}}}))).scripts.map(s=>({value:s.id,label:s.name,hint:s.id}))}},eventListener:{key:"eventListener",flag:"<eventListenerId>",label:"Event listener",plural:"event listeners",listCommand:`${CLI} event-listener list`,dependsOn:["workspace","environment"],async fetch(client,deps){return(await unwrap(await client.GET("/v1/workspace/{workspaceId}/environment/{environmentId}/eventListeners",{params:{path:{workspaceId:must(deps,"workspace"),environmentId:must(deps,"environment")}}}))).eventListeners.map(el=>({value:el.id,label:el.eventType?`${el.app.name} \xB7 ${el.eventType.name}${el.script?` \u2192 ${el.script.name}`:""}`:`${el.app.name} (setup incomplete)`,hint:el.id}))}},apiConnection:{key:"apiConnection",flag:"<apiConnectionId>",label:"API connection",plural:"API connections",listCommand:`${CLI} api-connection list`,dependsOn:["workspace","environment"],async fetch(client,deps){return(await unwrap(await client.GET("/v1/workspace/{workspaceId}/environment/{environmentId}/apiConnections",{params:{path:{workspaceId:must(deps,"workspace"),environmentId:must(deps,"environment")}}}))).apiConnections.map(c=>{let label=c.path??c.id;return{value:c.id,label,display:`${label} \xB7 ${c.app.name}${c.connector?` \u2014 ${c.connector.name||c.connector.id}`:" \u2014 no connector here"}`,hint:c.id}})}},eventQueue:{key:"eventQueue",flag:"--event-queue-id",label:"Event queue",plural:"event queues",listCommand:`${CLI} event-queue list`,dependsOn:["workspace","environment"],async fetch(client,deps){return(await unwrap(await client.GET("/v1/workspace/{workspaceId}/environment/{environmentId}/eventQueues",{params:{path:{workspaceId:must(deps,"workspace"),environmentId:must(deps,"environment")}}}))).eventQueues.map(q2=>({value:q2.id,label:q2.name,...q2.disabled?{display:`${q2.name} (disabled)`}:{},hint:q2.id}))}},testPayload:{key:"testPayload",flag:"<testPayloadId>",label:"Test payload",plural:"test payloads",listCommand:`${CLI} event-listener-test-payload list`,dependsOn:["workspace","environment","eventListener"],async fetch(client,deps){let data=await unwrap(await client.GET("/v1/workspace/{workspaceId}/environment/{environmentId}/eventListener/{eventListenerId}/testPayloads",{params:{path:{workspaceId:must(deps,"workspace"),environmentId:must(deps,"environment"),eventListenerId:must(deps,"eventListener")}}}));return data.testPayloads.map(p=>({value:p.id,label:p.name,...p.id===data.defaultTestPayloadId?{display:`${p.name} (default)`}:{},hint:p.id}))}},scheduledTrigger:{key:"scheduledTrigger",flag:"<scheduledTriggerId>",label:"Scheduled trigger",plural:"scheduled triggers",listCommand:`${CLI} scheduled-trigger list`,dependsOn:["workspace","environment"],async fetch(client,deps){return(await unwrap(await client.GET("/v1/workspace/{workspaceId}/environment/{environmentId}/scheduledTriggers",{params:{path:{workspaceId:must(deps,"workspace"),environmentId:must(deps,"environment")}}}))).scheduledTriggers.map(t=>{let label=t.script?.name??t.id;return{value:t.id,label,display:`${label} \xB7 ${scheduleOf(t)}${t.disabled?" (disabled)":""}`,hint:t.id}})}},workspacePackage:{key:"workspacePackage",flag:"<packageId>",label:"Package",plural:"packages",listCommand:`${CLI} package list`,dependsOn:["workspace"],async fetch(client,deps){return(await fetchWorkspacePackages(client,must(deps,"workspace"))).packages.map(p=>({value:p.id,label:p.name,display:`${p.name}@${p.version} \xB7 ${p.type}${p.required?" \xB7 required":""}`,hint:p.id}))}}};var import_picocolors2=__toESM(require_picocolors(),1);import{existsSync,lstatSync,readdirSync as readdirSync3}from"fs";import{dirname as dirname2,join as join7}from"path";import{PassThrough}from"stream";import{styleText}from"util";function pathOptions(userInput,extensions){if(userInput==="")return[];let allowed=p=>!extensions?.length||extensions.some(ext=>p.toLowerCase().endsWith(ext.toLowerCase())),isDirectory=p=>{try{return lstatSync(p).isDirectory()}catch{return!1}},entriesOf=(dir,prefix)=>readdirSync3(dir).map(name=>join7(dir,name)).filter(full=>full.startsWith(prefix)).filter(full=>isDirectory(full)||allowed(full)).map(full=>isDirectory(full)?`${full}/`:full);try{let insideDir=userInput.length>1&&userInput.endsWith("/"),prefix=insideDir?userInput.slice(0,-1):userInput,values=[];insideDir||values.push(...entriesOf(dirname2(userInput),prefix)),isDirectory(userInput)&&values.push(...entriesOf(userInput,prefix));let options=[...new Set(values)].map(value=>({value}));return existsSync(userInput)&&lstatSync(userInput).isFile()&&!options.some(o=>o.value===userInput)&&options.unshift({value:userInput}),options}catch{return[]}}var AUTOCOMPLETE_THRESHOLD=8;function cancelled(){fail(EXIT.CANCELLED,"CANCELLED","Cancelled.")}var SUBMIT_KEY="Ctrl-S",CTRL_S=19,TAB=9,TAB_SENTINEL_BYTE=28,TAB_SENTINEL="";function detabSentinel(text){return text.replaceAll(TAB_SENTINEL," ")}function rewriteSubmitKeys(chunk){let out=[];for(let byte of chunk)byte===CTRL_S?out.push(TAB):byte===TAB?out.push(TAB_SENTINEL_BYTE):out.push(byte);return Buffer.from(out)}function submitOnCtrlS(source=process.stdin){if(!source.isTTY)return;let proxy=new PassThrough,onData=chunk=>{proxy.write(rewriteSubmitKeys(chunk))};source.on("data",onData),source.resume();let restoreTty=()=>{source.isRaw&&source.setRawMode(!1)};process.once("exit",restoreTty);let input=Object.assign(proxy,{isTTY:!0,setRawMode(mode){return source.setRawMode(mode),input}});return{input,done:()=>{process.off("exit",restoreTty),source.off("data",onData),source.pause(),proxy.end()}}}var clackAdapter={async select(message,choices,opts){let clack=await import("./dist-A3XXQMMP.js"),options=choices.map(c=>({value:c.value,label:c.display??c.label,hint:c.hint,disabled:c.disabled})),initialValue=opts?.initial,result=choices.length>AUTOCOMPLETE_THRESHOLD?await clack.autocomplete({message,options,initialValue,maxItems:10,output:process.stderr}):await clack.select({message,options,initialValue,output:process.stderr});return clack.isCancel(result)&&cancelled(),result},async multiselect(message,choices,opts){let clack=await import("./dist-A3XXQMMP.js"),options=choices.map(c=>({value:c.value,label:c.display??c.label,hint:c.hint,disabled:c.disabled})),initialValues=opts?.initial,result=choices.length>AUTOCOMPLETE_THRESHOLD?await clack.autocompleteMultiselect({message,options,initialValues,required:!1,maxItems:10,output:process.stderr}):await clack.multiselect({message,options,initialValues,required:!1,output:process.stderr});return clack.isCancel(result)&&cancelled(),result},async confirm(message,initial=!1){let clack=await import("./dist-A3XXQMMP.js"),result=await clack.confirm({message,initialValue:initial,output:process.stderr});return clack.isCancel(result)&&cancelled(),result},async text(message,opts){let clack=await import("./dist-A3XXQMMP.js"),result=await clack.text({message,initialValue:opts?.initial,validate:v2=>v2||opts?.allowEmpty?void 0:"Required.",output:process.stderr});return clack.isCancel(result)&&cancelled(),result},async multiline(message,opts){let clack=await import("./dist-A3XXQMMP.js"),core=await import("./dist-UQEAKLYF.js"),{highlightWithCursor,insertCursor}=await import("./highlight-7NU3CBVT.js"),keys=submitOnCtrlS();try{let language=opts?.language,output=process.stderr,style=(format,text)=>styleText(format,text,{stream:output}),result=await new core.MultiLinePrompt({placeholder:opts?.placeholder,initialValue:opts?.initial,showSubmit:!0,validate:()=>{},output,...keys?{input:keys.input}:{},render(){let withGuide=clack.settings.withGuide,title=`${withGuide?`${style("gray",clack.S_BAR)}
|
|
43
43
|
`:""}${clack.symbol(this.state)} ${message}
|
|
44
44
|
`,placeholder=opts?.placeholder&&opts.placeholder.length>0?style("inverse",opts.placeholder[0])+style("dim",opts.placeholder.slice(1)):style(["inverse","hidden"],"_"),userInput=detabSentinel(this.userInput),input=userInput?language?highlightWithCursor(userInput,this.cursor,language):insertCursor(userInput,userInput,this.cursor):placeholder,value=detabSentinel(this.value??""),submit=`
|
|
45
45
|
${style("dim",`${SUBMIT_KEY} to reach [ submit ], then enter`)}
|