domani 0.4.2 → 0.4.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/domani.cjs +210 -194
- package/package.json +1 -1
package/dist/domani.cjs
CHANGED
|
@@ -1,245 +1,261 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";var
|
|
3
|
-
`)}displayWidth(
|
|
4
|
-
`+" ".repeat(s+l)),o+a+" ".repeat(l)+
|
|
5
|
-
${o}`)}boxWrap(
|
|
6
|
-
`)}};function
|
|
2
|
+
"use strict";var _o=Object.create;var Ls=Object.defineProperty;var So=Object.getOwnPropertyDescriptor;var xo=Object.getOwnPropertyNames;var ko=Object.getPrototypeOf,jo=Object.prototype.hasOwnProperty;var ke=(t,e)=>()=>(t&&(e=t(t=0)),e);var nt=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),Pt=(t,e)=>{for(var s in e)Ls(t,s,{get:e[s],enumerable:!0})},Co=(t,e,s,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of xo(e))!jo.call(t,n)&&n!==s&&Ls(t,n,{get:()=>e[n],enumerable:!(i=So(e,n))||i.enumerable});return t};var N=(t,e,s)=>(s=t!=null?_o(ko(t)):{},Co(e||!t||!t.__esModule?Ls(s,"default",{value:t,enumerable:!0}):s,t));var Ht=nt(Ms=>{var ns=class extends Error{constructor(e,s,i){super(i),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.code=s,this.exitCode=e,this.nestedError=void 0}},Us=class extends ns{constructor(e){super(1,"commander.invalidArgument",e),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}};Ms.CommanderError=ns;Ms.InvalidArgumentError=Us});var rs=nt(qs=>{var{InvalidArgumentError:Oo}=Ht(),Vs=class{constructor(e,s){switch(this.description=s||"",this.variadic=!1,this.parseArg=void 0,this.defaultValue=void 0,this.defaultValueDescription=void 0,this.argChoices=void 0,e[0]){case"<":this.required=!0,this._name=e.slice(1,-1);break;case"[":this.required=!1,this._name=e.slice(1,-1);break;default:this.required=!0,this._name=e;break}this._name.length>3&&this._name.slice(-3)==="..."&&(this.variadic=!0,this._name=this._name.slice(0,-3))}name(){return this._name}_concatValue(e,s){return s===this.defaultValue||!Array.isArray(s)?[e]:s.concat(e)}default(e,s){return this.defaultValue=e,this.defaultValueDescription=s,this}argParser(e){return this.parseArg=e,this}choices(e){return this.argChoices=e.slice(),this.parseArg=(s,i)=>{if(!this.argChoices.includes(s))throw new Oo(`Allowed choices are ${this.argChoices.join(", ")}.`);return this.variadic?this._concatValue(s,i):s},this}argRequired(){return this.required=!0,this}argOptional(){return this.required=!1,this}};function Io(t){let e=t.name()+(t.variadic===!0?"...":"");return t.required?"<"+e+">":"["+e+"]"}qs.Argument=Vs;qs.humanReadableArgName=Io});var Js=nt(Hs=>{var{humanReadableArgName:Ro}=rs(),Ws=class{constructor(){this.helpWidth=void 0,this.minWidthToWrap=40,this.sortSubcommands=!1,this.sortOptions=!1,this.showGlobalOptions=!1}prepareContext(e){this.helpWidth=this.helpWidth??e.helpWidth??80}visibleCommands(e){let s=e.commands.filter(n=>!n._hidden),i=e._getHelpCommand();return i&&!i._hidden&&s.push(i),this.sortSubcommands&&s.sort((n,r)=>n.name().localeCompare(r.name())),s}compareOptions(e,s){let i=n=>n.short?n.short.replace(/^-/,""):n.long.replace(/^--/,"");return i(e).localeCompare(i(s))}visibleOptions(e){let s=e.options.filter(n=>!n.hidden),i=e._getHelpOption();if(i&&!i.hidden){let n=i.short&&e._findOption(i.short),r=i.long&&e._findOption(i.long);!n&&!r?s.push(i):i.long&&!r?s.push(e.createOption(i.long,i.description)):i.short&&!n&&s.push(e.createOption(i.short,i.description))}return this.sortOptions&&s.sort(this.compareOptions),s}visibleGlobalOptions(e){if(!this.showGlobalOptions)return[];let s=[];for(let i=e.parent;i;i=i.parent){let n=i.options.filter(r=>!r.hidden);s.push(...n)}return this.sortOptions&&s.sort(this.compareOptions),s}visibleArguments(e){return e._argsDescription&&e.registeredArguments.forEach(s=>{s.description=s.description||e._argsDescription[s.name()]||""}),e.registeredArguments.find(s=>s.description)?e.registeredArguments:[]}subcommandTerm(e){let s=e.registeredArguments.map(i=>Ro(i)).join(" ");return e._name+(e._aliases[0]?"|"+e._aliases[0]:"")+(e.options.length?" [options]":"")+(s?" "+s:"")}optionTerm(e){return e.flags}argumentTerm(e){return e.name()}longestSubcommandTermLength(e,s){return s.visibleCommands(e).reduce((i,n)=>Math.max(i,this.displayWidth(s.styleSubcommandTerm(s.subcommandTerm(n)))),0)}longestOptionTermLength(e,s){return s.visibleOptions(e).reduce((i,n)=>Math.max(i,this.displayWidth(s.styleOptionTerm(s.optionTerm(n)))),0)}longestGlobalOptionTermLength(e,s){return s.visibleGlobalOptions(e).reduce((i,n)=>Math.max(i,this.displayWidth(s.styleOptionTerm(s.optionTerm(n)))),0)}longestArgumentTermLength(e,s){return s.visibleArguments(e).reduce((i,n)=>Math.max(i,this.displayWidth(s.styleArgumentTerm(s.argumentTerm(n)))),0)}commandUsage(e){let s=e._name;e._aliases[0]&&(s=s+"|"+e._aliases[0]);let i="";for(let n=e.parent;n;n=n.parent)i=n.name()+" "+i;return i+s+" "+e.usage()}commandDescription(e){return e.description()}subcommandDescription(e){return e.summary()||e.description()}optionDescription(e){let s=[];return e.argChoices&&s.push(`choices: ${e.argChoices.map(i=>JSON.stringify(i)).join(", ")}`),e.defaultValue!==void 0&&(e.required||e.optional||e.isBoolean()&&typeof e.defaultValue=="boolean")&&s.push(`default: ${e.defaultValueDescription||JSON.stringify(e.defaultValue)}`),e.presetArg!==void 0&&e.optional&&s.push(`preset: ${JSON.stringify(e.presetArg)}`),e.envVar!==void 0&&s.push(`env: ${e.envVar}`),s.length>0?`${e.description} (${s.join(", ")})`:e.description}argumentDescription(e){let s=[];if(e.argChoices&&s.push(`choices: ${e.argChoices.map(i=>JSON.stringify(i)).join(", ")}`),e.defaultValue!==void 0&&s.push(`default: ${e.defaultValueDescription||JSON.stringify(e.defaultValue)}`),s.length>0){let i=`(${s.join(", ")})`;return e.description?`${e.description} ${i}`:i}return e.description}formatHelp(e,s){let i=s.padWidth(e,s),n=s.helpWidth??80;function r(f,g){return s.formatItem(f,i,g,s)}let o=[`${s.styleTitle("Usage:")} ${s.styleUsage(s.commandUsage(e))}`,""],a=s.commandDescription(e);a.length>0&&(o=o.concat([s.boxWrap(s.styleCommandDescription(a),n),""]));let l=s.visibleArguments(e).map(f=>r(s.styleArgumentTerm(s.argumentTerm(f)),s.styleArgumentDescription(s.argumentDescription(f))));l.length>0&&(o=o.concat([s.styleTitle("Arguments:"),...l,""]));let c=s.visibleOptions(e).map(f=>r(s.styleOptionTerm(s.optionTerm(f)),s.styleOptionDescription(s.optionDescription(f))));if(c.length>0&&(o=o.concat([s.styleTitle("Options:"),...c,""])),s.showGlobalOptions){let f=s.visibleGlobalOptions(e).map(g=>r(s.styleOptionTerm(s.optionTerm(g)),s.styleOptionDescription(s.optionDescription(g))));f.length>0&&(o=o.concat([s.styleTitle("Global Options:"),...f,""]))}let d=s.visibleCommands(e).map(f=>r(s.styleSubcommandTerm(s.subcommandTerm(f)),s.styleSubcommandDescription(s.subcommandDescription(f))));return d.length>0&&(o=o.concat([s.styleTitle("Commands:"),...d,""])),o.join(`
|
|
3
|
+
`)}displayWidth(e){return tn(e).length}styleTitle(e){return e}styleUsage(e){return e.split(" ").map(s=>s==="[options]"?this.styleOptionText(s):s==="[command]"?this.styleSubcommandText(s):s[0]==="["||s[0]==="<"?this.styleArgumentText(s):this.styleCommandText(s)).join(" ")}styleCommandDescription(e){return this.styleDescriptionText(e)}styleOptionDescription(e){return this.styleDescriptionText(e)}styleSubcommandDescription(e){return this.styleDescriptionText(e)}styleArgumentDescription(e){return this.styleDescriptionText(e)}styleDescriptionText(e){return e}styleOptionTerm(e){return this.styleOptionText(e)}styleSubcommandTerm(e){return e.split(" ").map(s=>s==="[options]"?this.styleOptionText(s):s[0]==="["||s[0]==="<"?this.styleArgumentText(s):this.styleSubcommandText(s)).join(" ")}styleArgumentTerm(e){return this.styleArgumentText(e)}styleOptionText(e){return e}styleArgumentText(e){return e}styleSubcommandText(e){return e}styleCommandText(e){return e}padWidth(e,s){return Math.max(s.longestOptionTermLength(e,s),s.longestGlobalOptionTermLength(e,s),s.longestSubcommandTermLength(e,s),s.longestArgumentTermLength(e,s))}preformatted(e){return/\n[^\S\r\n]/.test(e)}formatItem(e,s,i,n){let o=" ".repeat(2);if(!i)return o+e;let a=e.padEnd(s+e.length-n.displayWidth(e)),l=2,d=(this.helpWidth??80)-s-l-2,f;return d<this.minWidthToWrap||n.preformatted(i)?f=i:f=n.boxWrap(i,d).replace(/\n/g,`
|
|
4
|
+
`+" ".repeat(s+l)),o+a+" ".repeat(l)+f.replace(/\n/g,`
|
|
5
|
+
${o}`)}boxWrap(e,s){if(s<this.minWidthToWrap)return e;let i=e.split(/\r\n|\n/),n=/[\s]*[^\s]+/g,r=[];return i.forEach(o=>{let a=o.match(n);if(a===null){r.push("");return}let l=[a.shift()],c=this.displayWidth(l[0]);a.forEach(d=>{let f=this.displayWidth(d);if(c+f<=s){l.push(d),c+=f;return}r.push(l.join(""));let g=d.trimStart();l=[g],c=this.displayWidth(g)}),r.push(l.join(""))}),r.join(`
|
|
6
|
+
`)}};function tn(t){let e=/\x1b\[\d*(;\d*)*m/g;return t.replace(e,"")}Hs.Help=Ws;Hs.stripColor=tn});var Ks=nt(Ys=>{var{InvalidArgumentError:Ao}=Ht(),Bs=class{constructor(e,s){this.flags=e,this.description=s||"",this.required=e.includes("<"),this.optional=e.includes("["),this.variadic=/\w\.\.\.[>\]]$/.test(e),this.mandatory=!1;let i=To(e);this.short=i.shortFlag,this.long=i.longFlag,this.negate=!1,this.long&&(this.negate=this.long.startsWith("--no-")),this.defaultValue=void 0,this.defaultValueDescription=void 0,this.presetArg=void 0,this.envVar=void 0,this.parseArg=void 0,this.hidden=!1,this.argChoices=void 0,this.conflictsWith=[],this.implied=void 0}default(e,s){return this.defaultValue=e,this.defaultValueDescription=s,this}preset(e){return this.presetArg=e,this}conflicts(e){return this.conflictsWith=this.conflictsWith.concat(e),this}implies(e){let s=e;return typeof e=="string"&&(s={[e]:!0}),this.implied=Object.assign(this.implied||{},s),this}env(e){return this.envVar=e,this}argParser(e){return this.parseArg=e,this}makeOptionMandatory(e=!0){return this.mandatory=!!e,this}hideHelp(e=!0){return this.hidden=!!e,this}_concatValue(e,s){return s===this.defaultValue||!Array.isArray(s)?[e]:s.concat(e)}choices(e){return this.argChoices=e.slice(),this.parseArg=(s,i)=>{if(!this.argChoices.includes(s))throw new Ao(`Allowed choices are ${this.argChoices.join(", ")}.`);return this.variadic?this._concatValue(s,i):s},this}name(){return this.long?this.long.replace(/^--/,""):this.short.replace(/^-/,"")}attributeName(){return this.negate?sn(this.name().replace(/^no-/,"")):sn(this.name())}is(e){return this.short===e||this.long===e}isBoolean(){return!this.required&&!this.optional&&!this.negate}},Gs=class{constructor(e){this.positiveOptions=new Map,this.negativeOptions=new Map,this.dualOptions=new Set,e.forEach(s=>{s.negate?this.negativeOptions.set(s.attributeName(),s):this.positiveOptions.set(s.attributeName(),s)}),this.negativeOptions.forEach((s,i)=>{this.positiveOptions.has(i)&&this.dualOptions.add(i)})}valueFromOption(e,s){let i=s.attributeName();if(!this.dualOptions.has(i))return!0;let n=this.negativeOptions.get(i).presetArg,r=n!==void 0?n:!1;return s.negate===(r===e)}};function sn(t){return t.split("-").reduce((e,s)=>e+s[0].toUpperCase()+s.slice(1))}function To(t){let e,s,i=/^-[^-]$/,n=/^--[^-]/,r=t.split(/[ |,]+/).concat("guard");if(i.test(r[0])&&(e=r.shift()),n.test(r[0])&&(s=r.shift()),!e&&i.test(r[0])&&(e=r.shift()),!e&&n.test(r[0])&&(e=s,s=r.shift()),r[0].startsWith("-")){let o=r[0],a=`option creation failed due to '${o}' in option flags '${t}'`;throw/^-[^-][^-]/.test(o)?new Error(`${a}
|
|
7
7
|
- a short flag is a single dash and a single character
|
|
8
8
|
- either use a single dash and a single character (for a short flag)
|
|
9
9
|
- or use a double dash for a long option (and can have two, like '--ws, --workspace')`):i.test(o)?new Error(`${a}
|
|
10
10
|
- too many short flags`):n.test(o)?new Error(`${a}
|
|
11
11
|
- too many long flags`):new Error(`${a}
|
|
12
|
-
- unrecognised flag format`)}if(
|
|
12
|
+
- unrecognised flag format`)}if(e===void 0&&s===void 0)throw new Error(`option creation failed due to no flags found in '${t}'.`);return{shortFlag:e,longFlag:s}}Ys.Option=Bs;Ys.DualOptions=Gs});var rn=nt(nn=>{function Eo(t,e){if(Math.abs(t.length-e.length)>3)return Math.max(t.length,e.length);let s=[];for(let i=0;i<=t.length;i++)s[i]=[i];for(let i=0;i<=e.length;i++)s[0][i]=i;for(let i=1;i<=e.length;i++)for(let n=1;n<=t.length;n++){let r=1;t[n-1]===e[i-1]?r=0:r=1,s[n][i]=Math.min(s[n-1][i]+1,s[n][i-1]+1,s[n-1][i-1]+r),n>1&&i>1&&t[n-1]===e[i-2]&&t[n-2]===e[i-1]&&(s[n][i]=Math.min(s[n][i],s[n-2][i-2]+1))}return s[t.length][e.length]}function Do(t,e){if(!e||e.length===0)return"";e=Array.from(new Set(e));let s=t.startsWith("--");s&&(t=t.slice(2),e=e.map(o=>o.slice(2)));let i=[],n=3,r=.4;return e.forEach(o=>{if(o.length<=1)return;let a=Eo(t,o),l=Math.max(t.length,o.length);(l-a)/l>r&&(a<n?(n=a,i=[o]):a===n&&i.push(o))}),i.sort((o,a)=>o.localeCompare(a)),s&&(i=i.map(o=>`--${o}`)),i.length>1?`
|
|
13
13
|
(Did you mean one of ${i.join(", ")}?)`:i.length===1?`
|
|
14
|
-
(Did you mean ${i[0]}?)`:""}
|
|
15
|
-
- specify the name in Command constructor or using .name()`);return s=s||{},s.isDefault&&(this._defaultCommandName=
|
|
16
|
-
Expecting one of '${i.join("', '")}'`);return this._lifeCycleHooks[
|
|
17
|
-
- already used by option '${s.flags}'`)}this.options.push(
|
|
18
|
-
- either make a new Command for each call to parse, or stop storing options as properties`);this._name=this._savedState._name,this._scriptPath=null,this.rawArgs=[],this._optionValues={...this._savedState._optionValues},this._optionValueSources={...this._savedState._optionValueSources},this.args=[],this.processedArgs=[]}_checkForMissingExecutable(
|
|
14
|
+
(Did you mean ${i[0]}?)`:""}nn.suggestSimilar=Do});var cn=nt(ei=>{var Po=require("node:events").EventEmitter,zs=require("node:child_process"),rt=require("node:path"),os=require("node:fs"),se=require("node:process"),{Argument:No,humanReadableArgName:Fo}=rs(),{CommanderError:Xs}=Ht(),{Help:Lo,stripColor:Uo}=Js(),{Option:on,DualOptions:Mo}=Ks(),{suggestSimilar:an}=rn(),Zs=class t extends Po{constructor(e){super(),this.commands=[],this.options=[],this.parent=null,this._allowUnknownOption=!1,this._allowExcessArguments=!1,this.registeredArguments=[],this._args=this.registeredArguments,this.args=[],this.rawArgs=[],this.processedArgs=[],this._scriptPath=null,this._name=e||"",this._optionValues={},this._optionValueSources={},this._storeOptionsAsProperties=!1,this._actionHandler=null,this._executableHandler=!1,this._executableFile=null,this._executableDir=null,this._defaultCommandName=null,this._exitCallback=null,this._aliases=[],this._combineFlagAndOptionalValue=!0,this._description="",this._summary="",this._argsDescription=void 0,this._enablePositionalOptions=!1,this._passThroughOptions=!1,this._lifeCycleHooks={},this._showHelpAfterError=!1,this._showSuggestionAfterError=!0,this._savedState=null,this._outputConfiguration={writeOut:s=>se.stdout.write(s),writeErr:s=>se.stderr.write(s),outputError:(s,i)=>i(s),getOutHelpWidth:()=>se.stdout.isTTY?se.stdout.columns:void 0,getErrHelpWidth:()=>se.stderr.isTTY?se.stderr.columns:void 0,getOutHasColors:()=>Qs()??(se.stdout.isTTY&&se.stdout.hasColors?.()),getErrHasColors:()=>Qs()??(se.stderr.isTTY&&se.stderr.hasColors?.()),stripColor:s=>Uo(s)},this._hidden=!1,this._helpOption=void 0,this._addImplicitHelpCommand=void 0,this._helpCommand=void 0,this._helpConfiguration={}}copyInheritedSettings(e){return this._outputConfiguration=e._outputConfiguration,this._helpOption=e._helpOption,this._helpCommand=e._helpCommand,this._helpConfiguration=e._helpConfiguration,this._exitCallback=e._exitCallback,this._storeOptionsAsProperties=e._storeOptionsAsProperties,this._combineFlagAndOptionalValue=e._combineFlagAndOptionalValue,this._allowExcessArguments=e._allowExcessArguments,this._enablePositionalOptions=e._enablePositionalOptions,this._showHelpAfterError=e._showHelpAfterError,this._showSuggestionAfterError=e._showSuggestionAfterError,this}_getCommandAndAncestors(){let e=[];for(let s=this;s;s=s.parent)e.push(s);return e}command(e,s,i){let n=s,r=i;typeof n=="object"&&n!==null&&(r=n,n=null),r=r||{};let[,o,a]=e.match(/([^ ]+) *(.*)/),l=this.createCommand(o);return n&&(l.description(n),l._executableHandler=!0),r.isDefault&&(this._defaultCommandName=l._name),l._hidden=!!(r.noHelp||r.hidden),l._executableFile=r.executableFile||null,a&&l.arguments(a),this._registerCommand(l),l.parent=this,l.copyInheritedSettings(this),n?this:l}createCommand(e){return new t(e)}createHelp(){return Object.assign(new Lo,this.configureHelp())}configureHelp(e){return e===void 0?this._helpConfiguration:(this._helpConfiguration=e,this)}configureOutput(e){return e===void 0?this._outputConfiguration:(Object.assign(this._outputConfiguration,e),this)}showHelpAfterError(e=!0){return typeof e!="string"&&(e=!!e),this._showHelpAfterError=e,this}showSuggestionAfterError(e=!0){return this._showSuggestionAfterError=!!e,this}addCommand(e,s){if(!e._name)throw new Error(`Command passed to .addCommand() must have a name
|
|
15
|
+
- specify the name in Command constructor or using .name()`);return s=s||{},s.isDefault&&(this._defaultCommandName=e._name),(s.noHelp||s.hidden)&&(e._hidden=!0),this._registerCommand(e),e.parent=this,e._checkForBrokenPassThrough(),this}createArgument(e,s){return new No(e,s)}argument(e,s,i,n){let r=this.createArgument(e,s);return typeof i=="function"?r.default(n).argParser(i):r.default(i),this.addArgument(r),this}arguments(e){return e.trim().split(/ +/).forEach(s=>{this.argument(s)}),this}addArgument(e){let s=this.registeredArguments.slice(-1)[0];if(s&&s.variadic)throw new Error(`only the last argument can be variadic '${s.name()}'`);if(e.required&&e.defaultValue!==void 0&&e.parseArg===void 0)throw new Error(`a default value for a required argument is never used: '${e.name()}'`);return this.registeredArguments.push(e),this}helpCommand(e,s){if(typeof e=="boolean")return this._addImplicitHelpCommand=e,this;e=e??"help [command]";let[,i,n]=e.match(/([^ ]+) *(.*)/),r=s??"display help for command",o=this.createCommand(i);return o.helpOption(!1),n&&o.arguments(n),r&&o.description(r),this._addImplicitHelpCommand=!0,this._helpCommand=o,this}addHelpCommand(e,s){return typeof e!="object"?(this.helpCommand(e,s),this):(this._addImplicitHelpCommand=!0,this._helpCommand=e,this)}_getHelpCommand(){return this._addImplicitHelpCommand??(this.commands.length&&!this._actionHandler&&!this._findCommand("help"))?(this._helpCommand===void 0&&this.helpCommand(void 0,void 0),this._helpCommand):null}hook(e,s){let i=["preSubcommand","preAction","postAction"];if(!i.includes(e))throw new Error(`Unexpected value for event passed to hook : '${e}'.
|
|
16
|
+
Expecting one of '${i.join("', '")}'`);return this._lifeCycleHooks[e]?this._lifeCycleHooks[e].push(s):this._lifeCycleHooks[e]=[s],this}exitOverride(e){return e?this._exitCallback=e:this._exitCallback=s=>{if(s.code!=="commander.executeSubCommandAsync")throw s},this}_exit(e,s,i){this._exitCallback&&this._exitCallback(new Xs(e,s,i)),se.exit(e)}action(e){let s=i=>{let n=this.registeredArguments.length,r=i.slice(0,n);return this._storeOptionsAsProperties?r[n]=this:r[n]=this.opts(),r.push(this),e.apply(this,r)};return this._actionHandler=s,this}createOption(e,s){return new on(e,s)}_callParseArg(e,s,i,n){try{return e.parseArg(s,i)}catch(r){if(r.code==="commander.invalidArgument"){let o=`${n} ${r.message}`;this.error(o,{exitCode:r.exitCode,code:r.code})}throw r}}_registerOption(e){let s=e.short&&this._findOption(e.short)||e.long&&this._findOption(e.long);if(s){let i=e.long&&this._findOption(e.long)?e.long:e.short;throw new Error(`Cannot add option '${e.flags}'${this._name&&` to command '${this._name}'`} due to conflicting flag '${i}'
|
|
17
|
+
- already used by option '${s.flags}'`)}this.options.push(e)}_registerCommand(e){let s=n=>[n.name()].concat(n.aliases()),i=s(e).find(n=>this._findCommand(n));if(i){let n=s(this._findCommand(i)).join("|"),r=s(e).join("|");throw new Error(`cannot add command '${r}' as already have command '${n}'`)}this.commands.push(e)}addOption(e){this._registerOption(e);let s=e.name(),i=e.attributeName();if(e.negate){let r=e.long.replace(/^--no-/,"--");this._findOption(r)||this.setOptionValueWithSource(i,e.defaultValue===void 0?!0:e.defaultValue,"default")}else e.defaultValue!==void 0&&this.setOptionValueWithSource(i,e.defaultValue,"default");let n=(r,o,a)=>{r==null&&e.presetArg!==void 0&&(r=e.presetArg);let l=this.getOptionValue(i);r!==null&&e.parseArg?r=this._callParseArg(e,r,l,o):r!==null&&e.variadic&&(r=e._concatValue(r,l)),r==null&&(e.negate?r=!1:e.isBoolean()||e.optional?r=!0:r=""),this.setOptionValueWithSource(i,r,a)};return this.on("option:"+s,r=>{let o=`error: option '${e.flags}' argument '${r}' is invalid.`;n(r,o,"cli")}),e.envVar&&this.on("optionEnv:"+s,r=>{let o=`error: option '${e.flags}' value '${r}' from env '${e.envVar}' is invalid.`;n(r,o,"env")}),this}_optionEx(e,s,i,n,r){if(typeof s=="object"&&s instanceof on)throw new Error("To add an Option object use addOption() instead of option() or requiredOption()");let o=this.createOption(s,i);if(o.makeOptionMandatory(!!e.mandatory),typeof n=="function")o.default(r).argParser(n);else if(n instanceof RegExp){let a=n;n=(l,c)=>{let d=a.exec(l);return d?d[0]:c},o.default(r).argParser(n)}else o.default(n);return this.addOption(o)}option(e,s,i,n){return this._optionEx({},e,s,i,n)}requiredOption(e,s,i,n){return this._optionEx({mandatory:!0},e,s,i,n)}combineFlagAndOptionalValue(e=!0){return this._combineFlagAndOptionalValue=!!e,this}allowUnknownOption(e=!0){return this._allowUnknownOption=!!e,this}allowExcessArguments(e=!0){return this._allowExcessArguments=!!e,this}enablePositionalOptions(e=!0){return this._enablePositionalOptions=!!e,this}passThroughOptions(e=!0){return this._passThroughOptions=!!e,this._checkForBrokenPassThrough(),this}_checkForBrokenPassThrough(){if(this.parent&&this._passThroughOptions&&!this.parent._enablePositionalOptions)throw new Error(`passThroughOptions cannot be used for '${this._name}' without turning on enablePositionalOptions for parent command(s)`)}storeOptionsAsProperties(e=!0){if(this.options.length)throw new Error("call .storeOptionsAsProperties() before adding options");if(Object.keys(this._optionValues).length)throw new Error("call .storeOptionsAsProperties() before setting option values");return this._storeOptionsAsProperties=!!e,this}getOptionValue(e){return this._storeOptionsAsProperties?this[e]:this._optionValues[e]}setOptionValue(e,s){return this.setOptionValueWithSource(e,s,void 0)}setOptionValueWithSource(e,s,i){return this._storeOptionsAsProperties?this[e]=s:this._optionValues[e]=s,this._optionValueSources[e]=i,this}getOptionValueSource(e){return this._optionValueSources[e]}getOptionValueSourceWithGlobals(e){let s;return this._getCommandAndAncestors().forEach(i=>{i.getOptionValueSource(e)!==void 0&&(s=i.getOptionValueSource(e))}),s}_prepareUserArgs(e,s){if(e!==void 0&&!Array.isArray(e))throw new Error("first parameter to parse must be array or undefined");if(s=s||{},e===void 0&&s.from===void 0){se.versions?.electron&&(s.from="electron");let n=se.execArgv??[];(n.includes("-e")||n.includes("--eval")||n.includes("-p")||n.includes("--print"))&&(s.from="eval")}e===void 0&&(e=se.argv),this.rawArgs=e.slice();let i;switch(s.from){case void 0:case"node":this._scriptPath=e[1],i=e.slice(2);break;case"electron":se.defaultApp?(this._scriptPath=e[1],i=e.slice(2)):i=e.slice(1);break;case"user":i=e.slice(0);break;case"eval":i=e.slice(1);break;default:throw new Error(`unexpected parse option { from: '${s.from}' }`)}return!this._name&&this._scriptPath&&this.nameFromFilename(this._scriptPath),this._name=this._name||"program",i}parse(e,s){this._prepareForParse();let i=this._prepareUserArgs(e,s);return this._parseCommand([],i),this}async parseAsync(e,s){this._prepareForParse();let i=this._prepareUserArgs(e,s);return await this._parseCommand([],i),this}_prepareForParse(){this._savedState===null?this.saveStateBeforeParse():this.restoreStateBeforeParse()}saveStateBeforeParse(){this._savedState={_name:this._name,_optionValues:{...this._optionValues},_optionValueSources:{...this._optionValueSources}}}restoreStateBeforeParse(){if(this._storeOptionsAsProperties)throw new Error(`Can not call parse again when storeOptionsAsProperties is true.
|
|
18
|
+
- either make a new Command for each call to parse, or stop storing options as properties`);this._name=this._savedState._name,this._scriptPath=null,this.rawArgs=[],this._optionValues={...this._savedState._optionValues},this._optionValueSources={...this._savedState._optionValueSources},this.args=[],this.processedArgs=[]}_checkForMissingExecutable(e,s,i){if(os.existsSync(e))return;let n=s?`searched for local subcommand relative to directory '${s}'`:"no directory for search for local subcommand, use .executableDir() to supply a custom directory",r=`'${e}' does not exist
|
|
19
19
|
- if '${i}' is not meant to be an executable command, remove description parameter from '.command()' and use '.description()' instead
|
|
20
20
|
- if the default executable name is not suitable, use the executableFile option to supply a custom name or path
|
|
21
|
-
- ${n}`;throw new Error(r)}_executeSubCommand(
|
|
21
|
+
- ${n}`;throw new Error(r)}_executeSubCommand(e,s){s=s.slice();let i=!1,n=[".js",".ts",".tsx",".mjs",".cjs"];function r(d,f){let g=rt.resolve(d,f);if(os.existsSync(g))return g;if(n.includes(rt.extname(f)))return;let $=n.find(w=>os.existsSync(`${g}${w}`));if($)return`${g}${$}`}this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let o=e._executableFile||`${this._name}-${e._name}`,a=this._executableDir||"";if(this._scriptPath){let d;try{d=os.realpathSync(this._scriptPath)}catch{d=this._scriptPath}a=rt.resolve(rt.dirname(d),a)}if(a){let d=r(a,o);if(!d&&!e._executableFile&&this._scriptPath){let f=rt.basename(this._scriptPath,rt.extname(this._scriptPath));f!==this._name&&(d=r(a,`${f}-${e._name}`))}o=d||o}i=n.includes(rt.extname(o));let l;se.platform!=="win32"?i?(s.unshift(o),s=ln(se.execArgv).concat(s),l=zs.spawn(se.argv[0],s,{stdio:"inherit"})):l=zs.spawn(o,s,{stdio:"inherit"}):(this._checkForMissingExecutable(o,a,e._name),s.unshift(o),s=ln(se.execArgv).concat(s),l=zs.spawn(se.execPath,s,{stdio:"inherit"})),l.killed||["SIGUSR1","SIGUSR2","SIGTERM","SIGINT","SIGHUP"].forEach(f=>{se.on(f,()=>{l.killed===!1&&l.exitCode===null&&l.kill(f)})});let c=this._exitCallback;l.on("close",d=>{d=d??1,c?c(new Xs(d,"commander.executeSubCommandAsync","(close)")):se.exit(d)}),l.on("error",d=>{if(d.code==="ENOENT")this._checkForMissingExecutable(o,a,e._name);else if(d.code==="EACCES")throw new Error(`'${o}' not executable`);if(!c)se.exit(1);else{let f=new Xs(1,"commander.executeSubCommandAsync","(error)");f.nestedError=d,c(f)}}),this.runningCommand=l}_dispatchSubcommand(e,s,i){let n=this._findCommand(e);n||this.help({error:!0}),n._prepareForParse();let r;return r=this._chainOrCallSubCommandHook(r,n,"preSubcommand"),r=this._chainOrCall(r,()=>{if(n._executableHandler)this._executeSubCommand(n,s.concat(i));else return n._parseCommand(s,i)}),r}_dispatchHelpCommand(e){e||this.help();let s=this._findCommand(e);return s&&!s._executableHandler&&s.help(),this._dispatchSubcommand(e,[],[this._getHelpOption()?.long??this._getHelpOption()?.short??"--help"])}_checkNumberOfArguments(){this.registeredArguments.forEach((e,s)=>{e.required&&this.args[s]==null&&this.missingArgument(e.name())}),!(this.registeredArguments.length>0&&this.registeredArguments[this.registeredArguments.length-1].variadic)&&this.args.length>this.registeredArguments.length&&this._excessArguments(this.args)}_processArguments(){let e=(i,n,r)=>{let o=n;if(n!==null&&i.parseArg){let a=`error: command-argument value '${n}' is invalid for argument '${i.name()}'.`;o=this._callParseArg(i,n,r,a)}return o};this._checkNumberOfArguments();let s=[];this.registeredArguments.forEach((i,n)=>{let r=i.defaultValue;i.variadic?n<this.args.length?(r=this.args.slice(n),i.parseArg&&(r=r.reduce((o,a)=>e(i,a,o),i.defaultValue))):r===void 0&&(r=[]):n<this.args.length&&(r=this.args[n],i.parseArg&&(r=e(i,r,i.defaultValue))),s[n]=r}),this.processedArgs=s}_chainOrCall(e,s){return e&&e.then&&typeof e.then=="function"?e.then(()=>s()):s()}_chainOrCallHooks(e,s){let i=e,n=[];return this._getCommandAndAncestors().reverse().filter(r=>r._lifeCycleHooks[s]!==void 0).forEach(r=>{r._lifeCycleHooks[s].forEach(o=>{n.push({hookedCommand:r,callback:o})})}),s==="postAction"&&n.reverse(),n.forEach(r=>{i=this._chainOrCall(i,()=>r.callback(r.hookedCommand,this))}),i}_chainOrCallSubCommandHook(e,s,i){let n=e;return this._lifeCycleHooks[i]!==void 0&&this._lifeCycleHooks[i].forEach(r=>{n=this._chainOrCall(n,()=>r(this,s))}),n}_parseCommand(e,s){let i=this.parseOptions(s);if(this._parseOptionsEnv(),this._parseOptionsImplied(),e=e.concat(i.operands),s=i.unknown,this.args=e.concat(s),e&&this._findCommand(e[0]))return this._dispatchSubcommand(e[0],e.slice(1),s);if(this._getHelpCommand()&&e[0]===this._getHelpCommand().name())return this._dispatchHelpCommand(e[1]);if(this._defaultCommandName)return this._outputHelpIfRequested(s),this._dispatchSubcommand(this._defaultCommandName,e,s);this.commands.length&&this.args.length===0&&!this._actionHandler&&!this._defaultCommandName&&this.help({error:!0}),this._outputHelpIfRequested(i.unknown),this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let n=()=>{i.unknown.length>0&&this.unknownOption(i.unknown[0])},r=`command:${this.name()}`;if(this._actionHandler){n(),this._processArguments();let o;return o=this._chainOrCallHooks(o,"preAction"),o=this._chainOrCall(o,()=>this._actionHandler(this.processedArgs)),this.parent&&(o=this._chainOrCall(o,()=>{this.parent.emit(r,e,s)})),o=this._chainOrCallHooks(o,"postAction"),o}if(this.parent&&this.parent.listenerCount(r))n(),this._processArguments(),this.parent.emit(r,e,s);else if(e.length){if(this._findCommand("*"))return this._dispatchSubcommand("*",e,s);this.listenerCount("command:*")?this.emit("command:*",e,s):this.commands.length?this.unknownCommand():(n(),this._processArguments())}else this.commands.length?(n(),this.help({error:!0})):(n(),this._processArguments())}_findCommand(e){if(e)return this.commands.find(s=>s._name===e||s._aliases.includes(e))}_findOption(e){return this.options.find(s=>s.is(e))}_checkForMissingMandatoryOptions(){this._getCommandAndAncestors().forEach(e=>{e.options.forEach(s=>{s.mandatory&&e.getOptionValue(s.attributeName())===void 0&&e.missingMandatoryOptionValue(s)})})}_checkForConflictingLocalOptions(){let e=this.options.filter(i=>{let n=i.attributeName();return this.getOptionValue(n)===void 0?!1:this.getOptionValueSource(n)!=="default"});e.filter(i=>i.conflictsWith.length>0).forEach(i=>{let n=e.find(r=>i.conflictsWith.includes(r.attributeName()));n&&this._conflictingOption(i,n)})}_checkForConflictingOptions(){this._getCommandAndAncestors().forEach(e=>{e._checkForConflictingLocalOptions()})}parseOptions(e){let s=[],i=[],n=s,r=e.slice();function o(l){return l.length>1&&l[0]==="-"}let a=null;for(;r.length;){let l=r.shift();if(l==="--"){n===i&&n.push(l),n.push(...r);break}if(a&&!o(l)){this.emit(`option:${a.name()}`,l);continue}if(a=null,o(l)){let c=this._findOption(l);if(c){if(c.required){let d=r.shift();d===void 0&&this.optionMissingArgument(c),this.emit(`option:${c.name()}`,d)}else if(c.optional){let d=null;r.length>0&&!o(r[0])&&(d=r.shift()),this.emit(`option:${c.name()}`,d)}else this.emit(`option:${c.name()}`);a=c.variadic?c:null;continue}}if(l.length>2&&l[0]==="-"&&l[1]!=="-"){let c=this._findOption(`-${l[1]}`);if(c){c.required||c.optional&&this._combineFlagAndOptionalValue?this.emit(`option:${c.name()}`,l.slice(2)):(this.emit(`option:${c.name()}`),r.unshift(`-${l.slice(2)}`));continue}}if(/^--[^=]+=/.test(l)){let c=l.indexOf("="),d=this._findOption(l.slice(0,c));if(d&&(d.required||d.optional)){this.emit(`option:${d.name()}`,l.slice(c+1));continue}}if(o(l)&&(n=i),(this._enablePositionalOptions||this._passThroughOptions)&&s.length===0&&i.length===0){if(this._findCommand(l)){s.push(l),r.length>0&&i.push(...r);break}else if(this._getHelpCommand()&&l===this._getHelpCommand().name()){s.push(l),r.length>0&&s.push(...r);break}else if(this._defaultCommandName){i.push(l),r.length>0&&i.push(...r);break}}if(this._passThroughOptions){n.push(l),r.length>0&&n.push(...r);break}n.push(l)}return{operands:s,unknown:i}}opts(){if(this._storeOptionsAsProperties){let e={},s=this.options.length;for(let i=0;i<s;i++){let n=this.options[i].attributeName();e[n]=n===this._versionOptionName?this._version:this[n]}return e}return this._optionValues}optsWithGlobals(){return this._getCommandAndAncestors().reduce((e,s)=>Object.assign(e,s.opts()),{})}error(e,s){this._outputConfiguration.outputError(`${e}
|
|
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 i=s||{},n=i.exitCode||1,r=i.code||"commander.error";this._exit(n,r,
|
|
25
|
-
`),this._exit(0,"commander.version",
|
|
26
|
-
Expecting one of '${i.join("', '")}'`);let n=`${
|
|
27
|
-
`)}),this}_outputHelpIfRequested(
|
|
28
|
-
|
|
29
|
-
`).
|
|
30
|
-
`)
|
|
31
|
-
|
|
32
|
-
`),i=t.split(`
|
|
33
|
-
`),
|
|
34
|
-
`).
|
|
35
|
-
`)
|
|
36
|
-
`),
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
`)
|
|
40
|
-
`).length-1;this.output.write(Oe.cursor.move(-999,t*-1))}render(){let t=pi(this._render(this)??"",process.stdout.columns,{hard:!0,trim:!1});if(t!==this._prevFrame){if(this.state==="initial")this.output.write(Oe.cursor.hide);else{let s=na(this._prevFrame,t),i=bi(this.output);if(this.restoreCursor(),s){let n=Math.max(0,s.numLinesAfter-i),r=Math.max(0,s.numLinesBefore-i),o=s.lines.find(a=>a>=n);if(o===void 0){this._prevFrame=t;return}if(s.lines.length===1){this.output.write(Oe.cursor.move(0,o-r)),this.output.write(Oe.erase.lines(1));let a=t.split(`
|
|
41
|
-
`);this.output.write(a[o]),this._prevFrame=t,this.output.write(Oe.cursor.move(0,a.length-o-1));return}else if(s.lines.length>1){if(n<r)o=n;else{let l=o-r;l>0&&this.output.write(Oe.cursor.move(0,l))}this.output.write(Oe.erase.down());let a=t.split(`
|
|
24
|
+
`),this.outputHelp({error:!0}));let i=s||{},n=i.exitCode||1,r=i.code||"commander.error";this._exit(n,r,e)}_parseOptionsEnv(){this.options.forEach(e=>{if(e.envVar&&e.envVar in se.env){let s=e.attributeName();(this.getOptionValue(s)===void 0||["default","config","env"].includes(this.getOptionValueSource(s)))&&(e.required||e.optional?this.emit(`optionEnv:${e.name()}`,se.env[e.envVar]):this.emit(`optionEnv:${e.name()}`))}})}_parseOptionsImplied(){let e=new Mo(this.options),s=i=>this.getOptionValue(i)!==void 0&&!["default","implied"].includes(this.getOptionValueSource(i));this.options.filter(i=>i.implied!==void 0&&s(i.attributeName())&&e.valueFromOption(this.getOptionValue(i.attributeName()),i)).forEach(i=>{Object.keys(i.implied).filter(n=>!s(n)).forEach(n=>{this.setOptionValueWithSource(n,i.implied[n],"implied")})})}missingArgument(e){let s=`error: missing required argument '${e}'`;this.error(s,{code:"commander.missingArgument"})}optionMissingArgument(e){let s=`error: option '${e.flags}' argument missing`;this.error(s,{code:"commander.optionMissingArgument"})}missingMandatoryOptionValue(e){let s=`error: required option '${e.flags}' not specified`;this.error(s,{code:"commander.missingMandatoryOptionValue"})}_conflictingOption(e,s){let i=o=>{let a=o.attributeName(),l=this.getOptionValue(a),c=this.options.find(f=>f.negate&&a===f.attributeName()),d=this.options.find(f=>!f.negate&&a===f.attributeName());return c&&(c.presetArg===void 0&&l===!1||c.presetArg!==void 0&&l===c.presetArg)?c:d||o},n=o=>{let a=i(o),l=a.attributeName();return this.getOptionValueSource(l)==="env"?`environment variable '${a.envVar}'`:`option '${a.flags}'`},r=`error: ${n(e)} cannot be used with ${n(s)}`;this.error(r,{code:"commander.conflictingOption"})}unknownOption(e){if(this._allowUnknownOption)return;let s="";if(e.startsWith("--")&&this._showSuggestionAfterError){let n=[],r=this;do{let o=r.createHelp().visibleOptions(r).filter(a=>a.long).map(a=>a.long);n=n.concat(o),r=r.parent}while(r&&!r._enablePositionalOptions);s=an(e,n)}let i=`error: unknown option '${e}'${s}`;this.error(i,{code:"commander.unknownOption"})}_excessArguments(e){if(this._allowExcessArguments)return;let s=this.registeredArguments.length,i=s===1?"":"s",r=`error: too many arguments${this.parent?` for '${this.name()}'`:""}. Expected ${s} argument${i} but got ${e.length}.`;this.error(r,{code:"commander.excessArguments"})}unknownCommand(){let e=this.args[0],s="";if(this._showSuggestionAfterError){let n=[];this.createHelp().visibleCommands(this).forEach(r=>{n.push(r.name()),r.alias()&&n.push(r.alias())}),s=an(e,n)}let i=`error: unknown command '${e}'${s}`;this.error(i,{code:"commander.unknownCommand"})}version(e,s,i){if(e===void 0)return this._version;this._version=e,s=s||"-V, --version",i=i||"output the version number";let n=this.createOption(s,i);return this._versionOptionName=n.attributeName(),this._registerOption(n),this.on("option:"+n.name(),()=>{this._outputConfiguration.writeOut(`${e}
|
|
25
|
+
`),this._exit(0,"commander.version",e)}),this}description(e,s){return e===void 0&&s===void 0?this._description:(this._description=e,s&&(this._argsDescription=s),this)}summary(e){return e===void 0?this._summary:(this._summary=e,this)}alias(e){if(e===void 0)return this._aliases[0];let s=this;if(this.commands.length!==0&&this.commands[this.commands.length-1]._executableHandler&&(s=this.commands[this.commands.length-1]),e===s._name)throw new Error("Command alias can't be the same as its name");let i=this.parent?._findCommand(e);if(i){let n=[i.name()].concat(i.aliases()).join("|");throw new Error(`cannot add alias '${e}' to command '${this.name()}' as already have command '${n}'`)}return s._aliases.push(e),this}aliases(e){return e===void 0?this._aliases:(e.forEach(s=>this.alias(s)),this)}usage(e){if(e===void 0){if(this._usage)return this._usage;let s=this.registeredArguments.map(i=>Fo(i));return[].concat(this.options.length||this._helpOption!==null?"[options]":[],this.commands.length?"[command]":[],this.registeredArguments.length?s:[]).join(" ")}return this._usage=e,this}name(e){return e===void 0?this._name:(this._name=e,this)}nameFromFilename(e){return this._name=rt.basename(e,rt.extname(e)),this}executableDir(e){return e===void 0?this._executableDir:(this._executableDir=e,this)}helpInformation(e){let s=this.createHelp(),i=this._getOutputContext(e);s.prepareContext({error:i.error,helpWidth:i.helpWidth,outputHasColors:i.hasColors});let n=s.formatHelp(this,s);return i.hasColors?n:this._outputConfiguration.stripColor(n)}_getOutputContext(e){e=e||{};let s=!!e.error,i,n,r;return s?(i=a=>this._outputConfiguration.writeErr(a),n=this._outputConfiguration.getErrHasColors(),r=this._outputConfiguration.getErrHelpWidth()):(i=a=>this._outputConfiguration.writeOut(a),n=this._outputConfiguration.getOutHasColors(),r=this._outputConfiguration.getOutHelpWidth()),{error:s,write:a=>(n||(a=this._outputConfiguration.stripColor(a)),i(a)),hasColors:n,helpWidth:r}}outputHelp(e){let s;typeof e=="function"&&(s=e,e=void 0);let i=this._getOutputContext(e),n={error:i.error,write:i.write,command:this};this._getCommandAndAncestors().reverse().forEach(o=>o.emit("beforeAllHelp",n)),this.emit("beforeHelp",n);let r=this.helpInformation({error:i.error});if(s&&(r=s(r),typeof r!="string"&&!Buffer.isBuffer(r)))throw new Error("outputHelp callback must return a string or a Buffer");i.write(r),this._getHelpOption()?.long&&this.emit(this._getHelpOption().long),this.emit("afterHelp",n),this._getCommandAndAncestors().forEach(o=>o.emit("afterAllHelp",n))}helpOption(e,s){return typeof e=="boolean"?(e?this._helpOption=this._helpOption??void 0:this._helpOption=null,this):(e=e??"-h, --help",s=s??"display help for command",this._helpOption=this.createOption(e,s),this)}_getHelpOption(){return this._helpOption===void 0&&this.helpOption(void 0,void 0),this._helpOption}addHelpOption(e){return this._helpOption=e,this}help(e){this.outputHelp(e);let s=Number(se.exitCode??0);s===0&&e&&typeof e!="function"&&e.error&&(s=1),this._exit(s,"commander.help","(outputHelp)")}addHelpText(e,s){let i=["beforeAll","before","after","afterAll"];if(!i.includes(e))throw new Error(`Unexpected value for position to addHelpText.
|
|
26
|
+
Expecting one of '${i.join("', '")}'`);let n=`${e}Help`;return this.on(n,r=>{let o;typeof s=="function"?o=s({error:r.error,command:r.command}):o=s,o&&r.write(`${o}
|
|
27
|
+
`)}),this}_outputHelpIfRequested(e){let s=this._getHelpOption();s&&e.find(n=>s.is(n))&&(this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)"))}};function ln(t){return t.map(e=>{if(!e.startsWith("--inspect"))return e;let s,i="127.0.0.1",n="9229",r;return(r=e.match(/^(--inspect(-brk)?)$/))!==null?s=r[1]:(r=e.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null?(s=r[1],/^\d+$/.test(r[3])?n=r[3]:i=r[3]):(r=e.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null&&(s=r[1],i=r[3],n=r[4]),s&&n!=="0"?`${s}=${i}:${parseInt(n)+1}`:e})}function Qs(){if(se.env.NO_COLOR||se.env.FORCE_COLOR==="0"||se.env.FORCE_COLOR==="false")return!1;if(se.env.FORCE_COLOR||se.env.CLICOLOR_FORCE!==void 0)return!0}ei.Command=Zs;ei.useColor=Qs});var fn=nt(Je=>{var{Argument:dn}=rs(),{Command:ti}=cn(),{CommanderError:Vo,InvalidArgumentError:un}=Ht(),{Help:qo}=Js(),{Option:mn}=Ks();Je.program=new ti;Je.createCommand=t=>new ti(t);Je.createOption=(t,e)=>new mn(t,e);Je.createArgument=(t,e)=>new dn(t,e);Je.Command=ti;Je.Option=mn;Je.Argument=dn;Je.Help=qo;Je.CommanderError=Vo;Je.InvalidArgumentError=un;Je.InvalidOptionArgumentError=un});var H=nt((Ic,si)=>{var ls=process||{},gn=ls.argv||[],as=ls.env||{},Wo=!(as.NO_COLOR||gn.includes("--no-color"))&&(!!as.FORCE_COLOR||gn.includes("--color")||ls.platform==="win32"||(ls.stdout||{}).isTTY&&as.TERM!=="dumb"||!!as.CI),Ho=(t,e,s=t)=>i=>{let n=""+i,r=n.indexOf(e,t.length);return~r?t+Jo(n,e,s,r)+e:t+n+e},Jo=(t,e,s,i)=>{let n="",r=0;do n+=t.substring(r,i)+s,r=i+e.length,i=t.indexOf(e,r);while(~i);return n+t.substring(r)},$n=(t=Wo)=>{let e=t?Ho:()=>String;return{isColorSupported:t,reset:e("\x1B[0m","\x1B[0m"),bold:e("\x1B[1m","\x1B[22m","\x1B[22m\x1B[1m"),dim:e("\x1B[2m","\x1B[22m","\x1B[22m\x1B[2m"),italic:e("\x1B[3m","\x1B[23m"),underline:e("\x1B[4m","\x1B[24m"),inverse:e("\x1B[7m","\x1B[27m"),hidden:e("\x1B[8m","\x1B[28m"),strikethrough:e("\x1B[9m","\x1B[29m"),black:e("\x1B[30m","\x1B[39m"),red:e("\x1B[31m","\x1B[39m"),green:e("\x1B[32m","\x1B[39m"),yellow:e("\x1B[33m","\x1B[39m"),blue:e("\x1B[34m","\x1B[39m"),magenta:e("\x1B[35m","\x1B[39m"),cyan:e("\x1B[36m","\x1B[39m"),white:e("\x1B[37m","\x1B[39m"),gray:e("\x1B[90m","\x1B[39m"),bgBlack:e("\x1B[40m","\x1B[49m"),bgRed:e("\x1B[41m","\x1B[49m"),bgGreen:e("\x1B[42m","\x1B[49m"),bgYellow:e("\x1B[43m","\x1B[49m"),bgBlue:e("\x1B[44m","\x1B[49m"),bgMagenta:e("\x1B[45m","\x1B[49m"),bgCyan:e("\x1B[46m","\x1B[49m"),bgWhite:e("\x1B[47m","\x1B[49m"),blackBright:e("\x1B[90m","\x1B[39m"),redBright:e("\x1B[91m","\x1B[39m"),greenBright:e("\x1B[92m","\x1B[39m"),yellowBright:e("\x1B[93m","\x1B[39m"),blueBright:e("\x1B[94m","\x1B[39m"),magentaBright:e("\x1B[95m","\x1B[39m"),cyanBright:e("\x1B[96m","\x1B[39m"),whiteBright:e("\x1B[97m","\x1B[39m"),bgBlackBright:e("\x1B[100m","\x1B[49m"),bgRedBright:e("\x1B[101m","\x1B[49m"),bgGreenBright:e("\x1B[102m","\x1B[49m"),bgYellowBright:e("\x1B[103m","\x1B[49m"),bgBlueBright:e("\x1B[104m","\x1B[49m"),bgMagentaBright:e("\x1B[105m","\x1B[49m"),bgCyanBright:e("\x1B[106m","\x1B[49m"),bgWhiteBright:e("\x1B[107m","\x1B[49m")}};si.exports=$n();si.exports.createColors=$n});var Nt,Jt,Bt=ke(()=>{"use strict";Nt="domani.run",Jt=`https://${Nt}`});function vn(t){bn=t}function ot(){try{let t=ht.default.readFileSync(ii,"utf-8");return JSON.parse(t)}catch{return{}}}function Ft(t){ht.default.mkdirSync(us,{recursive:!0,mode:448}),ht.default.writeFileSync(ii,JSON.stringify(t,null,2),{mode:384})}function _n(){try{ht.default.unlinkSync(ii)}catch{}}function ze(){return bn||ot().api_url||Jt}function pt(){return process.env.DOMANI_API_KEY||ot().token}function Go(){try{let t=ht.default.readFileSync(wn,"utf-8");return JSON.parse(t)}catch{return null}}function Yo(t){try{ht.default.mkdirSync(us,{recursive:!0,mode:448}),ht.default.writeFileSync(wn,JSON.stringify(t),{mode:384})}catch{}}function cs(t,e){let s=t.split(".").map(Number),i=e.split(".").map(Number);for(let n=0;n<3;n++){if((s[n]||0)>(i[n]||0))return 1;if((s[n]||0)<(i[n]||0))return-1}return 0}async function Sn(){let t=Go();if(t&&Date.now()-t.checkedAt<Bo)return cs(t.version,je)>0?{update:t.version,forced:cs(je,t.min)<0}:null;try{let e=ze(),s=await fetch(`${e}/api/cli/version`,{signal:AbortSignal.timeout(3e3)});if(!s.ok)return null;let i=await s.json();if(Yo({version:i.version,min:i.min,checkedAt:Date.now()}),cs(i.version,je)>0)return{update:i.version,forced:cs(je,i.min)<0}}catch{}return null}var ht,ds,yn,us,ii,bn,wn,Bo,ni,je,gt=ke(()=>{"use strict";ht=N(require("fs"),1),ds=N(require("path"),1),yn=N(require("os"),1);Bt();us=process.env.DOMANI_CONFIG_DIR||ds.default.join(yn.default.homedir(),".domani"),ii=ds.default.join(us,"config.json");wn=ds.default.join(us,"version-check.json"),Bo=1440*60*1e3;ni=process.stdout.isTTY??!1,je="0.3.12"});var xn,kn,jn,Cn=ke(()=>{xn=(()=>{let t=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g;return e=>{let s=0;for(t.lastIndex=0;t.test(e);)s+=1;return e.length-s}})(),kn=t=>t===12288||t>=65281&&t<=65376||t>=65504&&t<=65510,jn=t=>t===8987||t===9001||t>=12272&&t<=12287||t>=12289&&t<=12350||t>=12441&&t<=12543||t>=12549&&t<=12591||t>=12593&&t<=12686||t>=12688&&t<=12771||t>=12783&&t<=12830||t>=12832&&t<=12871||t>=12880&&t<=19903||t>=65040&&t<=65049||t>=65072&&t<=65106||t>=65108&&t<=65126||t>=65128&&t<=65131||t>=127488&&t<=127490||t>=127504&&t<=127547||t>=127552&&t<=127560||t>=131072&&t<=196605||t>=196608&&t<=262141});var Ko,zo,On,Xo,In,Zo,Qo,ea,Rn,An,Tn=ke(()=>{Cn();Ko=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]|\u001b\]8;[^;]*;.*?(?:\u0007|\u001b\u005c)/y,zo=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,On=/(?:(?![\uFF61-\uFF9F\uFF00-\uFFEF])[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Tangut}]){1,1000}/yu,Xo=/\t{1,1000}/y,In=new RegExp("[\\u{1F1E6}-\\u{1F1FF}]{2}|\\u{1F3F4}[\\u{E0061}-\\u{E007A}]{2}[\\u{E0030}-\\u{E0039}\\u{E0061}-\\u{E007A}]{1,3}\\u{E007F}|(?:\\p{Emoji}\\uFE0F\\u20E3?|\\p{Emoji_Modifier_Base}\\p{Emoji_Modifier}?|\\p{Emoji_Presentation})(?:\\u200D(?:\\p{Emoji_Modifier_Base}\\p{Emoji_Modifier}?|\\p{Emoji_Presentation}|\\p{Emoji}\\uFE0F\\u20E3?))*","yu"),Zo=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,Qo=new RegExp("\\p{M}+","gu"),ea={limit:1/0,ellipsis:""},Rn=(t,e={},s={})=>{let i=e.limit??1/0,n=e.ellipsis??"",r=e?.ellipsisWidth??(n?Rn(n,ea,s).width:0),o=0,a=s.controlWidth??0,l=s.tabWidth??8,c=s.emojiWidth??2,d=2,f=s.regularWidth??1,g=s.wideWidth??d,$=[[Zo,f],[Ko,o],[zo,a],[Xo,l],[In,c],[On,g]],w=0,p=0,_=t.length,S=0,O=!1,D=_,W=Math.max(0,i-r),V=0,ae=0,X=0,ee=0;e:for(;;){if(ae>V||p>=_&&p>w){let A=t.slice(V,ae)||t.slice(w,p);S=0;for(let B of A.replaceAll(Qo,"")){let G=B.codePointAt(0)||0;if(kn(G)?ee=d:jn(G)?ee=g:ee=f,X+ee>W&&(D=Math.min(D,Math.max(V,w)+S)),X+ee>i){O=!0;break e}S+=B.length,X+=ee}V=ae=0}if(p>=_)break e;for(let A=0,B=$.length;A<B;A++){let[G,P]=$[A];if(G.lastIndex=p,G.test(t)){if(S=G===On?xn(t.slice(p,G.lastIndex)):G===In?1:G.lastIndex-p,ee=S*P,X+ee>W&&(D=Math.min(D,p+Math.floor((W-X)/P))),X+ee>i){O=!0;break e}X+=ee,V=w,ae=p,p=w=G.lastIndex;continue e}}p+=1}return{width:O?W:X,index:O?D:_,truncated:O,ellipsed:O&&i>=r}},An=Rn});var ta,sa,be,ri=ke(()=>{Tn();ta={limit:1/0,ellipsis:"",ellipsisWidth:0},sa=(t,e={})=>An(t,ta,e).width,be=sa});function Xe(t,e,s){return String(t).normalize().split(aa).map(i=>oa(i,e,s)).join(`
|
|
28
|
+
`)}var ms,Fn,ia,ai,Ln,na,Un,li,En,Dn,Pn,Nn,oi,ra,oa,aa,ci=ke(()=>{ri();ms="\x1B",Fn="\x9B",ia=39,ai="\x07",Ln="[",na="]",Un="m",li=`${na}8;;`,En=new RegExp(`(?:\\${Ln}(?<code>\\d+)m|\\${li}(?<uri>.*)${ai})`,"y"),Dn=t=>{if(t>=30&&t<=37||t>=90&&t<=97)return 39;if(t>=40&&t<=47||t>=100&&t<=107)return 49;if(t===1||t===2)return 22;if(t===3)return 23;if(t===4)return 24;if(t===7)return 27;if(t===8)return 28;if(t===9)return 29;if(t===0)return 0},Pn=t=>`${ms}${Ln}${t}${Un}`,Nn=t=>`${ms}${li}${t}${ai}`,oi=(t,e,s)=>{let i=e[Symbol.iterator](),n=!1,r=!1,o=t.at(-1),a=o===void 0?0:be(o),l=i.next(),c=i.next(),d=0;for(;!l.done;){let f=l.value,g=be(f);a+g<=s?t[t.length-1]+=f:(t.push(f),a=0),(f===ms||f===Fn)&&(n=!0,r=e.startsWith(li,d+1)),n?r?f===ai&&(n=!1,r=!1):f===Un&&(n=!1):(a+=g,a===s&&!c.done&&(t.push(""),a=0)),l=c,c=i.next(),d+=f.length}o=t.at(-1),!a&&o!==void 0&&o.length&&t.length>1&&(t[t.length-2]+=t.pop())},ra=t=>{let e=t.split(" "),s=e.length;for(;s&&!be(e[s-1]);)s--;return s===e.length?t:e.slice(0,s).join(" ")+e.slice(s).join("")},oa=(t,e,s={})=>{if(s.trim!==!1&&t.trim()==="")return"";let i="",n,r,o=t.split(" "),a=[""],l=0;for(let f=0;f<o.length;f++){let g=o[f];if(s.trim!==!1){let w=a.at(-1)??"",p=w.trimStart();w.length!==p.length&&(a[a.length-1]=p,l=be(p))}f!==0&&(l>=e&&(s.wordWrap===!1||s.trim===!1)&&(a.push(""),l=0),(l||s.trim===!1)&&(a[a.length-1]+=" ",l++));let $=be(g);if(s.hard&&$>e){let w=e-l,p=1+Math.floor(($-w-1)/e);Math.floor(($-1)/e)<p&&a.push(""),oi(a,g,e),l=be(a.at(-1)??"");continue}if(l+$>e&&l&&$){if(s.wordWrap===!1&&l<e){oi(a,g,e),l=be(a.at(-1)??"");continue}a.push(""),l=0}if(l+$>e&&s.wordWrap===!1){oi(a,g,e),l=be(a.at(-1)??"");continue}a[a.length-1]+=g,l+=$}s.trim!==!1&&(a=a.map(f=>ra(f)));let c=a.join(`
|
|
29
|
+
`),d=!1;for(let f=0;f<c.length;f++){let g=c[f];if(i+=g,d)d=!1;else if(d=g>="\uD800"&&g<="\uDBFF",d)continue;if(g===ms||g===Fn){En.lastIndex=f+1;let w=En.exec(c)?.groups;if(w?.code!==void 0){let p=Number.parseFloat(w.code);n=p===ia?void 0:p}else w?.uri!==void 0&&(r=w.uri.length===0?void 0:w.uri)}if(c[f+1]===`
|
|
30
|
+
`){r&&(i+=Nn(""));let $=n?Dn(n):void 0;n&&$&&(i+=Pn($))}else g===`
|
|
31
|
+
`&&(n&&Dn(n)&&(i+=Pn(n)),r&&(i+=Nn(r)))}return i},aa=/\r?\n/});var ui=nt((Mc,Mn)=>{"use strict";var di={to(t,e){return e?`\x1B[${e+1};${t+1}H`:`\x1B[${t+1}G`},move(t,e){let s="";return t<0?s+=`\x1B[${-t}D`:t>0&&(s+=`\x1B[${t}C`),e<0?s+=`\x1B[${-e}A`:e>0&&(s+=`\x1B[${e}B`),s},up:(t=1)=>`\x1B[${t}A`,down:(t=1)=>`\x1B[${t}B`,forward:(t=1)=>`\x1B[${t}C`,backward:(t=1)=>`\x1B[${t}D`,nextLine:(t=1)=>"\x1B[E".repeat(t),prevLine:(t=1)=>"\x1B[F".repeat(t),left:"\x1B[G",hide:"\x1B[?25l",show:"\x1B[?25h",save:"\x1B7",restore:"\x1B8"},la={up:(t=1)=>"\x1B[S".repeat(t),down:(t=1)=>"\x1B[T".repeat(t)},ca={screen:"\x1B[2J",up:(t=1)=>"\x1B[1J".repeat(t),down:(t=1)=>"\x1B[J".repeat(t),line:"\x1B[2K",lineEnd:"\x1B[K",lineStart:"\x1B[1K",lines(t){let e="";for(let s=0;s<t;s++)e+=this.line+(s<t-1?di.up():"");return t&&(e+=di.left),e}};Mn.exports={cursor:di,scroll:la,erase:ca,beep:"\x07"}});function at(t,e,s){if(!s.some(o=>!o.disabled))return t;let i=t+e,n=Math.max(s.length-1,0),r=i<0?n:i>n?0:i;return s[r]?.disabled?at(r,e<0?-1:1,s):r}function fs(t,e,s,i){let n=i.split(`
|
|
32
|
+
`),r=0,o=t;for(let l of n){if(o<=l.length)break;o-=l.length+1,r++}for(r=Math.max(0,Math.min(n.length-1,r+s)),o=Math.min(o,n[r].length)+e;o<0&&r>0;)r--,o+=n[r].length+1;for(;o>n[r].length&&r<n.length-1;)o-=n[r].length+1,r++;o=Math.max(0,Math.min(n[r].length,o));let a=0;for(let l=0;l<r;l++)a+=n[l].length+1;return a+o}function Hn(t){if(t.aliases!==void 0){let e=t.aliases;for(let s in e){if(!Object.hasOwn(e,s))continue;let i=e[s];i===void 0||!M.actions.has(i)||M.aliases.has(s)||M.aliases.set(s,i)}}if(t.messages!==void 0){let e=t.messages;e.cancel!==void 0&&(M.messages.cancel=e.cancel),e.error!==void 0&&(M.messages.error=e.error)}if(t.withGuide!==void 0&&(M.withGuide=t.withGuide!==!1),t.date!==void 0){let e=t.date;e.monthNames!==void 0&&(M.date.monthNames=[...e.monthNames]),e.messages!==void 0&&(e.messages.required!==void 0&&(M.date.messages.required=e.messages.required),e.messages.invalidMonth!==void 0&&(M.date.messages.invalidMonth=e.messages.invalidMonth),e.messages.invalidDay!==void 0&&(M.date.messages.invalidDay=e.messages.invalidDay),e.messages.afterMin!==void 0&&(M.date.messages.afterMin=e.messages.afterMin),e.messages.beforeMax!==void 0&&(M.date.messages.beforeMax=e.messages.beforeMax))}}function gi(t,e){if(typeof t=="string")return M.aliases.get(t)===e;for(let s of t)if(s!==void 0&&gi(s,e))return!0;return!1}function ma(t,e){if(t===e)return;let s=t.split(`
|
|
33
|
+
`),i=e.split(`
|
|
34
|
+
`),n=Math.max(s.length,i.length),r=[];for(let o=0;o<n;o++)s[o]!==i[o]&&r.push(o);return{lines:r,numLinesBefore:s.length,numLinesAfter:i.length,numLines:n}}function oe(t){return t===hi}function hs(t,e){let s=t;s.isTTY&&s.setRawMode(e)}function Jn({input:t=St.stdin,output:e=St.stdout,overwrite:s=!0,hideCursor:i=!0}={}){let n=$t.createInterface({input:t,output:e,prompt:"",tabSize:1});$t.emitKeypressEvents(t,n),t instanceof fi.ReadStream&&t.isTTY&&t.setRawMode(!0);let r=(o,{name:a,sequence:l})=>{let c=String(o);if(gi([c,a,l],"cancel")){i&&e.write(Te.cursor.show),process.exit(0);return}if(!s)return;$t.moveCursor(e,a==="return"?0:-1,a==="return"?-1:0,()=>{$t.clearLine(e,1,()=>{t.once("keypress",r)})})};return i&&e.write(Te.cursor.hide),t.once("keypress",r),()=>{t.off("keypress",r),i&&e.write(Te.cursor.show),t instanceof fi.ReadStream&&t.isTTY&&!fa&&t.setRawMode(!1),n.terminal=!1,n.close()}}function ge(t,e,s,i=s,n=s,r){let o=xt(t??St.stdout);return Xe(e,o-s.length,{hard:!0,trim:!1}).split(`
|
|
35
|
+
`).map((a,l,c)=>{let d=r?r(a,l):a;return l===0?`${i}${d}`:l===c.length-1?`${n}${d}`:`${s}${d}`}).join(`
|
|
36
|
+
`)}function Gt(t,e){if("~standard"in t){let s=t["~standard"].validate(e);if(s instanceof Promise)throw new TypeError("Schema validation must be synchronous. Update `validate()` and remove any asynchronous logic.");return s.issues?.at(0)?.message}return t(e)}function ha(t,e){if(t===void 0||e.length===0)return 0;let s=e.findIndex(i=>i.value===t);return s!==-1?s:0}function pa(t,e){return(e.label??String(e.value)).toLowerCase().includes(t.toLowerCase())}function ga(t,e){if(e)return t?e:e[0]}function Vn(t){return[...t].map(e=>$a[e])}function ya(t){let e=new Intl.DateTimeFormat(t,{year:"numeric",month:"2-digit",day:"2-digit"}).formatToParts(new Date(2e3,0,15)),s=[],i="/";for(let n of e)n.type==="literal"?i=n.value.trim()||n.value:(n.type==="year"||n.type==="month"||n.type==="day")&&s.push({type:n.type,len:n.type==="year"?4:2});return{segments:s,separator:i}}function mi(t){return Number.parseInt((t||"0").replace(/_/g,"0"),10)||0}function ps(t){return{year:mi(t.year),month:mi(t.month),day:mi(t.day)}}function pi(t,e){return new Date(t||2001,e||1,0).getDate()}function Bn(t){let{year:e,month:s,day:i}=ps(t);if(!e||e<0||e>9999||!s||s<1||s>12||!i||i<1)return;let n=new Date(Date.UTC(e,s-1,i));if(!(n.getUTCFullYear()!==e||n.getUTCMonth()!==s-1||n.getUTCDate()!==i))return{year:e,month:s,day:i}}function qn(t){let e=Bn(t);return e?new Date(Date.UTC(e.year,e.month-1,e.day)):void 0}function ba(t,e,s,i){let n=s?{year:s.getUTCFullYear(),month:s.getUTCMonth()+1,day:s.getUTCDate()}:null,r=i?{year:i.getUTCFullYear(),month:i.getUTCMonth()+1,day:i.getUTCDate()}:null;return t==="year"?{min:n?.year??1,max:r?.year??9999}:t==="month"?{min:n&&e.year===n.year?n.month:1,max:r&&e.year===r.year?r.month:12}:{min:n&&e.year===n.year&&e.month===n.month?n.day:1,max:r&&e.year===r.year&&e.month===r.month?r.day:pi(e.year,e.month)}}var _t,St,$t,Wn,Te,fi,da,ua,M,fa,hi,xt,$i,Be,yi,gs,$a,$s,Gn,va,ys,bs,Yn,Kn,vs,ws,bi=ke(()=>{_t=require("node:util"),St=require("node:process"),$t=N(require("node:readline"),1),Wn=N(require("node:readline"),1);ci();Te=N(ui(),1),fi=require("node:tty");da=["up","down","left","right","space","enter","cancel"],ua=["January","February","March","April","May","June","July","August","September","October","November","December"],M={actions:new Set(da),aliases:new Map([["k","up"],["j","down"],["h","left"],["l","right"],["","cancel"],["escape","cancel"]]),messages:{cancel:"Canceled",error:"Something went wrong"},withGuide:!0,date:{monthNames:[...ua],messages:{required:"Please enter a valid date",invalidMonth:"There are only 12 months in a year",invalidDay:(t,e)=>`There are only ${t} days in ${e}`,afterMin:t=>`Date must be on or after ${t.toISOString().slice(0,10)}`,beforeMax:t=>`Date must be on or before ${t.toISOString().slice(0,10)}`}}};fa=globalThis.process.platform.startsWith("win"),hi=Symbol("clack:cancel");xt=t=>"columns"in t&&typeof t.columns=="number"?t.columns:80,$i=t=>"rows"in t&&typeof t.rows=="number"?t.rows:20;Be=class{input;output;_abortSignal;rl;opts;_render;_track=!1;_prevFrame="";_subscribers=new Map;_cursor=0;state="initial";error="";value;userInput="";constructor(e,s=!0){let{input:i=St.stdin,output:n=St.stdout,render:r,signal:o,...a}=e;this.opts=a,this.onKeypress=this.onKeypress.bind(this),this.close=this.close.bind(this),this.render=this.render.bind(this),this._render=r.bind(this),this._track=s,this._abortSignal=o,this.input=i,this.output=n}unsubscribe(){this._subscribers.clear()}setSubscriber(e,s){let i=this._subscribers.get(e)??[];i.push(s),this._subscribers.set(e,i)}on(e,s){this.setSubscriber(e,{cb:s})}once(e,s){this.setSubscriber(e,{cb:s,once:!0})}emit(e,...s){let i=this._subscribers.get(e)??[],n=[];for(let r of i)r.cb(...s),r.once&&n.push(()=>i.splice(i.indexOf(r),1));for(let r of n)r()}prompt(){return new Promise(e=>{if(this._abortSignal){if(this._abortSignal.aborted)return this.state="cancel",this.close(),e(hi);this._abortSignal.addEventListener("abort",()=>{this.state="cancel",this.close()},{once:!0})}this.rl=Wn.default.createInterface({input:this.input,tabSize:2,prompt:"",escapeCodeTimeout:50,terminal:!0}),this.rl.prompt(),this.opts.initialUserInput!==void 0&&this._setUserInput(this.opts.initialUserInput,!0),this.input.on("keypress",this.onKeypress),hs(this.input,!0),this.output.on("resize",this.render),this.render(),this.once("submit",()=>{this.output.write(Te.cursor.show),this.output.off("resize",this.render),hs(this.input,!1),e(this.value)}),this.once("cancel",()=>{this.output.write(Te.cursor.show),this.output.off("resize",this.render),hs(this.input,!1),e(hi)})})}_isActionKey(e,s){return e===" "}_shouldSubmit(e,s){return!0}_setValue(e){this.value=e,this.emit("value",this.value)}_setUserInput(e,s){this.userInput=e??"",this.emit("userInput",this.userInput),s&&this._track&&this.rl&&(this.rl.write(this.userInput),this._cursor=this.rl.cursor)}_clearUserInput(){this.rl?.write(null,{ctrl:!0,name:"u"}),this._setUserInput("")}onKeypress(e,s){if(this._track&&s.name!=="return"&&(s.name&&this._isActionKey(e,s)&&this.rl?.write(null,{ctrl:!0,name:"h"}),this._cursor=this.rl?.cursor??0,this._setUserInput(this.rl?.line)),this.state==="error"&&(this.state="active"),s?.name&&(!this._track&&M.aliases.has(s.name)&&this.emit("cursor",M.aliases.get(s.name)),M.actions.has(s.name)&&this.emit("cursor",s.name)),e&&(e.toLowerCase()==="y"||e.toLowerCase()==="n")&&this.emit("confirm",e.toLowerCase()==="y"),this.emit("key",e,s),s?.name==="return"&&this._shouldSubmit(e,s)){if(this.opts.validate){let i=Gt(this.opts.validate,this.value);i&&(this.error=i instanceof Error?i.message:i,this.state="error",this.rl?.write(this.userInput))}this.state!=="error"&&(this.state="submit")}gi([e,s?.name,s?.sequence],"cancel")&&(this.state="cancel"),(this.state==="submit"||this.state==="cancel")&&this.emit("finalize"),this.render(),(this.state==="submit"||this.state==="cancel")&&this.close()}close(){this.input.unpipe(),this.input.removeListener("keypress",this.onKeypress),this.output.write(`
|
|
37
|
+
`),hs(this.input,!1),this.rl?.close(),this.rl=void 0,this.emit(`${this.state}`,this.value),this.unsubscribe()}restoreCursor(){let e=Xe(this._prevFrame,process.stdout.columns,{hard:!0,trim:!1}).split(`
|
|
38
|
+
`).length-1;this.output.write(Te.cursor.move(-999,e*-1))}render(){let e=Xe(this._render(this)??"",process.stdout.columns,{hard:!0,trim:!1});if(e!==this._prevFrame){if(this.state==="initial")this.output.write(Te.cursor.hide);else{let s=ma(this._prevFrame,e),i=$i(this.output);if(this.restoreCursor(),s){let n=Math.max(0,s.numLinesAfter-i),r=Math.max(0,s.numLinesBefore-i),o=s.lines.find(a=>a>=n);if(o===void 0){this._prevFrame=e;return}if(s.lines.length===1){this.output.write(Te.cursor.move(0,o-r)),this.output.write(Te.erase.lines(1));let a=e.split(`
|
|
39
|
+
`);this.output.write(a[o]),this._prevFrame=e,this.output.write(Te.cursor.move(0,a.length-o-1));return}else if(s.lines.length>1){if(n<r)o=n;else{let l=o-r;l>0&&this.output.write(Te.cursor.move(0,l))}this.output.write(Te.erase.down());let a=e.split(`
|
|
42
40
|
`).slice(o);this.output.write(a.join(`
|
|
43
|
-
`)),this._prevFrame=
|
|
44
|
-
|
|
45
|
-
`).
|
|
46
|
-
`).
|
|
47
|
-
`)}function Wn(e){return e.label??String(e.value??"")}function nr(e,t){if(!e)return!0;let s=(t.label??String(t.value??"")).toLowerCase(),i=(t.hint??"").toLowerCase(),n=String(t.value).toLowerCase(),r=e.toLowerCase();return s.includes(r)||i.includes(r)||n.includes(r)}function xa(e,t){let s=[];for(let i of t)e.includes(i.value)&&s.push(i);return s}function Hn(e,t,s,i){let n=s,r=s;return i==="center"?n=Math.floor((t-e)/2):i==="right"&&(n=t-e-s),r=t-n-e,[n,r]}function Ma({style:e="heavy",max:t=100,size:s=40,...i}={}){let n=Xt(i),r=0,o="",a=Math.max(1,t),l=Math.max(1,s),c=x=>{switch(x){case"initial":case"active":return y=>(0,m.styleText)("magenta",y);case"error":case"cancel":return y=>(0,m.styleText)("red",y);case"submit":return y=>(0,m.styleText)("green",y);default:return y=>(0,m.styleText)("magenta",y)}},u=(x,y)=>{let f=Math.floor(r/a*l);return`${c(x)(Jn[e].repeat(f))}${(0,m.styleText)("dim",Jn[e].repeat(l-f))} ${y}`},p=(x="")=>{o=x,n.start(u("initial",x))},g=(x=1,y)=>{r=Math.min(a,x+r),n.message(u("active",y??o)),o=y??o};return{start:p,stop:n.stop,cancel:n.cancel,error:n.error,clear:n.clear,advance:g,isCancelled:n.isCancelled,message:x=>g(0,x)}}var m,Ne,kt,Kt,Nt,Cs,ki,Gn,ne,Yn,ji,Si,St,Ci,E,we,Kn,zn,zt,jt,Os,xt,Ft,Xn,Rs,Oi,Zn,Ri,Ai,Qn,Ei,Ii,Ti,Pi,Ge,Di,da,ua,ma,wi,xs,ks,_i,js,fa,pa,er,ha,Ee,As,tr,ga,Ni,sr,$a,ir,Fi,Un,ya,Mn,qn,ba,xi,va,wa,_a,Vt,rr,ka,ja,Sa,Ca,Oa,We,Ra,Aa,Fe,Ea,Ia,Ta,Yt,Pa,Da,Na,Fa,La,Va,Ua,Xt,Jn,Ss,Ye,qa,Bn,_t,Wa,Ha,Ja,Re,Ie=De(()=>{vi();vi();m=require("node:util"),Ne=V(require("node:process"),1),kt=require("node:fs"),Kt=require("node:path"),Nt=V(ci(),1);Cs=ca(),ki=()=>process.env.CI==="true",Gn=e=>e.isTTY===!0,ne=(e,t)=>Cs?e:t,Yn=ne("\u25C6","*"),ji=ne("\u25A0","x"),Si=ne("\u25B2","x"),St=ne("\u25C7","o"),Ci=ne("\u250C","T"),E=ne("\u2502","|"),we=ne("\u2514","\u2014"),Kn=ne("\u2510","T"),zn=ne("\u2518","\u2014"),zt=ne("\u25CF",">"),jt=ne("\u25CB"," "),Os=ne("\u25FB","[\u2022]"),xt=ne("\u25FC","[+]"),Ft=ne("\u25FB","[ ]"),Xn=ne("\u25AA","\u2022"),Rs=ne("\u2500","-"),Oi=ne("\u256E","+"),Zn=ne("\u251C","+"),Ri=ne("\u256F","+"),Ai=ne("\u2570","+"),Qn=ne("\u256D","+"),Ei=ne("\u25CF","\u2022"),Ii=ne("\u25C6","*"),Ti=ne("\u25B2","!"),Pi=ne("\u25A0","x"),Ge=e=>{switch(e){case"initial":case"active":return(0,m.styleText)("cyan",Yn);case"cancel":return(0,m.styleText)("red",ji);case"error":return(0,m.styleText)("yellow",Si);case"submit":return(0,m.styleText)("green",St)}},Di=e=>{switch(e){case"initial":case"active":return(0,m.styleText)("cyan",E);case"cancel":return(0,m.styleText)("red",E);case"error":return(0,m.styleText)("yellow",E);case"submit":return(0,m.styleText)("green",E)}},da=e=>e===161||e===164||e===167||e===168||e===170||e===173||e===174||e>=176&&e<=180||e>=182&&e<=186||e>=188&&e<=191||e===198||e===208||e===215||e===216||e>=222&&e<=225||e===230||e>=232&&e<=234||e===236||e===237||e===240||e===242||e===243||e>=247&&e<=250||e===252||e===254||e===257||e===273||e===275||e===283||e===294||e===295||e===299||e>=305&&e<=307||e===312||e>=319&&e<=322||e===324||e>=328&&e<=331||e===333||e===338||e===339||e===358||e===359||e===363||e===462||e===464||e===466||e===468||e===470||e===472||e===474||e===476||e===593||e===609||e===708||e===711||e>=713&&e<=715||e===717||e===720||e>=728&&e<=731||e===733||e===735||e>=768&&e<=879||e>=913&&e<=929||e>=931&&e<=937||e>=945&&e<=961||e>=963&&e<=969||e===1025||e>=1040&&e<=1103||e===1105||e===8208||e>=8211&&e<=8214||e===8216||e===8217||e===8220||e===8221||e>=8224&&e<=8226||e>=8228&&e<=8231||e===8240||e===8242||e===8243||e===8245||e===8251||e===8254||e===8308||e===8319||e>=8321&&e<=8324||e===8364||e===8451||e===8453||e===8457||e===8467||e===8470||e===8481||e===8482||e===8486||e===8491||e===8531||e===8532||e>=8539&&e<=8542||e>=8544&&e<=8555||e>=8560&&e<=8569||e===8585||e>=8592&&e<=8601||e===8632||e===8633||e===8658||e===8660||e===8679||e===8704||e===8706||e===8707||e===8711||e===8712||e===8715||e===8719||e===8721||e===8725||e===8730||e>=8733&&e<=8736||e===8739||e===8741||e>=8743&&e<=8748||e===8750||e>=8756&&e<=8759||e===8764||e===8765||e===8776||e===8780||e===8786||e===8800||e===8801||e>=8804&&e<=8807||e===8810||e===8811||e===8814||e===8815||e===8834||e===8835||e===8838||e===8839||e===8853||e===8857||e===8869||e===8895||e===8978||e>=9312&&e<=9449||e>=9451&&e<=9547||e>=9552&&e<=9587||e>=9600&&e<=9615||e>=9618&&e<=9621||e===9632||e===9633||e>=9635&&e<=9641||e===9650||e===9651||e===9654||e===9655||e===9660||e===9661||e===9664||e===9665||e>=9670&&e<=9672||e===9675||e>=9678&&e<=9681||e>=9698&&e<=9701||e===9711||e===9733||e===9734||e===9737||e===9742||e===9743||e===9756||e===9758||e===9792||e===9794||e===9824||e===9825||e>=9827&&e<=9829||e>=9831&&e<=9834||e===9836||e===9837||e===9839||e===9886||e===9887||e===9919||e>=9926&&e<=9933||e>=9935&&e<=9939||e>=9941&&e<=9953||e===9955||e===9960||e===9961||e>=9963&&e<=9969||e===9972||e>=9974&&e<=9977||e===9979||e===9980||e===9982||e===9983||e===10045||e>=10102&&e<=10111||e>=11094&&e<=11097||e>=12872&&e<=12879||e>=57344&&e<=63743||e>=65024&&e<=65039||e===65533||e>=127232&&e<=127242||e>=127248&&e<=127277||e>=127280&&e<=127337||e>=127344&&e<=127373||e===127375||e===127376||e>=127387&&e<=127404||e>=917760&&e<=917999||e>=983040&&e<=1048573||e>=1048576&&e<=1114109,ua=e=>e===12288||e>=65281&&e<=65376||e>=65504&&e<=65510,ma=e=>e>=4352&&e<=4447||e===8986||e===8987||e===9001||e===9002||e>=9193&&e<=9196||e===9200||e===9203||e===9725||e===9726||e===9748||e===9749||e>=9800&&e<=9811||e===9855||e===9875||e===9889||e===9898||e===9899||e===9917||e===9918||e===9924||e===9925||e===9934||e===9940||e===9962||e===9970||e===9971||e===9973||e===9978||e===9981||e===9989||e===9994||e===9995||e===10024||e===10060||e===10062||e>=10067&&e<=10069||e===10071||e>=10133&&e<=10135||e===10160||e===10175||e===11035||e===11036||e===11088||e===11093||e>=11904&&e<=11929||e>=11931&&e<=12019||e>=12032&&e<=12245||e>=12272&&e<=12287||e>=12289&&e<=12350||e>=12353&&e<=12438||e>=12441&&e<=12543||e>=12549&&e<=12591||e>=12593&&e<=12686||e>=12688&&e<=12771||e>=12783&&e<=12830||e>=12832&&e<=12871||e>=12880&&e<=19903||e>=19968&&e<=42124||e>=42128&&e<=42182||e>=43360&&e<=43388||e>=44032&&e<=55203||e>=63744&&e<=64255||e>=65040&&e<=65049||e>=65072&&e<=65106||e>=65108&&e<=65126||e>=65128&&e<=65131||e>=94176&&e<=94180||e===94192||e===94193||e>=94208&&e<=100343||e>=100352&&e<=101589||e>=101632&&e<=101640||e>=110576&&e<=110579||e>=110581&&e<=110587||e===110589||e===110590||e>=110592&&e<=110882||e===110898||e>=110928&&e<=110930||e===110933||e>=110948&&e<=110951||e>=110960&&e<=111355||e===126980||e===127183||e===127374||e>=127377&&e<=127386||e>=127488&&e<=127490||e>=127504&&e<=127547||e>=127552&&e<=127560||e===127568||e===127569||e>=127584&&e<=127589||e>=127744&&e<=127776||e>=127789&&e<=127797||e>=127799&&e<=127868||e>=127870&&e<=127891||e>=127904&&e<=127946||e>=127951&&e<=127955||e>=127968&&e<=127984||e===127988||e>=127992&&e<=128062||e===128064||e>=128066&&e<=128252||e>=128255&&e<=128317||e>=128331&&e<=128334||e>=128336&&e<=128359||e===128378||e===128405||e===128406||e===128420||e>=128507&&e<=128591||e>=128640&&e<=128709||e===128716||e>=128720&&e<=128722||e>=128725&&e<=128727||e>=128732&&e<=128735||e===128747||e===128748||e>=128756&&e<=128764||e>=128992&&e<=129003||e===129008||e>=129292&&e<=129338||e>=129340&&e<=129349||e>=129351&&e<=129535||e>=129648&&e<=129660||e>=129664&&e<=129672||e>=129680&&e<=129725||e>=129727&&e<=129733||e>=129742&&e<=129755||e>=129760&&e<=129768||e>=129776&&e<=129784||e>=131072&&e<=196605||e>=196608&&e<=262141,wi=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/y,xs=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,ks=/\t{1,1000}/y,_i=new RegExp("[\\u{1F1E6}-\\u{1F1FF}]{2}|\\u{1F3F4}[\\u{E0061}-\\u{E007A}]{2}[\\u{E0030}-\\u{E0039}\\u{E0061}-\\u{E007A}]{1,3}\\u{E007F}|(?:\\p{Emoji}\\uFE0F\\u20E3?|\\p{Emoji_Modifier_Base}\\p{Emoji_Modifier}?|\\p{Emoji_Presentation})(?:\\u200D(?:\\p{Emoji_Modifier_Base}\\p{Emoji_Modifier}?|\\p{Emoji_Presentation}|\\p{Emoji}\\uFE0F\\u20E3?))*","yu"),js=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,fa=new RegExp("\\p{M}+","gu"),pa={limit:1/0,ellipsis:""},er=(e,t={},s={})=>{let i=t.limit??1/0,n=t.ellipsis??"",r=t?.ellipsisWidth??(n?er(n,pa,s).width:0),o=s.ansiWidth??0,a=s.controlWidth??0,l=s.tabWidth??8,c=s.ambiguousWidth??1,u=s.emojiWidth??2,p=s.fullWidthWidth??2,g=s.regularWidth??1,x=s.wideWidth??2,y=0,f=0,b=e.length,_=0,C=!1,A=b,F=Math.max(0,i-r),L=0,G=0,I=0,P=0;e:for(;;){if(G>L||f>=b&&f>y){let D=e.slice(L,G)||e.slice(y,f);_=0;for(let Y of D.replaceAll(fa,"")){let Z=Y.codePointAt(0)||0;if(ua(Z)?P=p:ma(Z)?P=x:c!==g&&da(Z)?P=c:P=g,I+P>F&&(A=Math.min(A,Math.max(L,y)+_)),I+P>i){C=!0;break e}_+=Y.length,I+=P}L=G=0}if(f>=b)break;if(js.lastIndex=f,js.test(e)){if(_=js.lastIndex-f,P=_*g,I+P>F&&(A=Math.min(A,f+Math.floor((F-I)/g))),I+P>i){C=!0;break}I+=P,L=y,G=f,f=y=js.lastIndex;continue}if(wi.lastIndex=f,wi.test(e)){if(I+o>F&&(A=Math.min(A,f)),I+o>i){C=!0;break}I+=o,L=y,G=f,f=y=wi.lastIndex;continue}if(xs.lastIndex=f,xs.test(e)){if(_=xs.lastIndex-f,P=_*a,I+P>F&&(A=Math.min(A,f+Math.floor((F-I)/a))),I+P>i){C=!0;break}I+=P,L=y,G=f,f=y=xs.lastIndex;continue}if(ks.lastIndex=f,ks.test(e)){if(_=ks.lastIndex-f,P=_*l,I+P>F&&(A=Math.min(A,f+Math.floor((F-I)/l))),I+P>i){C=!0;break}I+=P,L=y,G=f,f=y=ks.lastIndex;continue}if(_i.lastIndex=f,_i.test(e)){if(I+u>F&&(A=Math.min(A,f)),I+u>i){C=!0;break}I+=u,L=y,G=f,f=y=_i.lastIndex;continue}f+=1}return{width:C?F:I,index:C?A:b,truncated:C,ellipsed:C&&i>=r}},ha={limit:1/0,ellipsis:"",ellipsisWidth:0},Ee=(e,t={})=>er(e,ha,t).width,As="\x1B",tr="\x9B",ga=39,Ni="\x07",sr="[",$a="]",ir="m",Fi=`${$a}8;;`,Un=new RegExp(`(?:\\${sr}(?<code>\\d+)m|\\${Fi}(?<uri>.*)${Ni})`,"y"),ya=e=>{if(e>=30&&e<=37||e>=90&&e<=97)return 39;if(e>=40&&e<=47||e>=100&&e<=107)return 49;if(e===1||e===2)return 22;if(e===3)return 23;if(e===4)return 24;if(e===7)return 27;if(e===8)return 28;if(e===9)return 29;if(e===0)return 0},Mn=e=>`${As}${sr}${e}${ir}`,qn=e=>`${As}${Fi}${e}${Ni}`,ba=e=>e.map(t=>Ee(t)),xi=(e,t,s)=>{let i=t[Symbol.iterator](),n=!1,r=!1,o=e.at(-1),a=o===void 0?0:Ee(o),l=i.next(),c=i.next(),u=0;for(;!l.done;){let p=l.value,g=Ee(p);a+g<=s?e[e.length-1]+=p:(e.push(p),a=0),(p===As||p===tr)&&(n=!0,r=t.startsWith(Fi,u+1)),n?r?p===Ni&&(n=!1,r=!1):p===ir&&(n=!1):(a+=g,a===s&&!c.done&&(e.push(""),a=0)),l=c,c=i.next(),u+=p.length}o=e.at(-1),!a&&o!==void 0&&o.length>0&&e.length>1&&(e[e.length-2]+=e.pop())},va=e=>{let t=e.split(" "),s=t.length;for(;s>0&&!(Ee(t[s-1])>0);)s--;return s===t.length?e:t.slice(0,s).join(" ")+t.slice(s).join("")},wa=(e,t,s={})=>{if(s.trim!==!1&&e.trim()==="")return"";let i="",n,r,o=e.split(" "),a=ba(o),l=[""];for(let[y,f]of o.entries()){s.trim!==!1&&(l[l.length-1]=(l.at(-1)??"").trimStart());let b=Ee(l.at(-1)??"");if(y!==0&&(b>=t&&(s.wordWrap===!1||s.trim===!1)&&(l.push(""),b=0),(b>0||s.trim===!1)&&(l[l.length-1]+=" ",b++)),s.hard&&a[y]>t){let _=t-b,C=1+Math.floor((a[y]-_-1)/t);Math.floor((a[y]-1)/t)<C&&l.push(""),xi(l,f,t);continue}if(b+a[y]>t&&b>0&&a[y]>0){if(s.wordWrap===!1&&b<t){xi(l,f,t);continue}l.push("")}if(b+a[y]>t&&s.wordWrap===!1){xi(l,f,t);continue}l[l.length-1]+=f}s.trim!==!1&&(l=l.map(y=>va(y)));let c=l.join(`
|
|
48
|
-
`),
|
|
49
|
-
|
|
50
|
-
`&&(n&&b&&(i+=Mn(n)),r&&(i+=qn(r))),x+=y.length,p=g,g=u.next()}return i};_a=(e,t,s,i,n)=>{let r=t,o=0;for(let a=s;a<i;a++){let l=e[a];if(r=r-l.length,o++,r<=n)break}return{lineCount:r,removals:o}},Vt=({cursor:e,options:t,style:s,output:i=process.stdout,maxItems:n=Number.POSITIVE_INFINITY,columnPadding:r=0,rowPadding:o=4})=>{let a=wt(i)-r,l=bi(i),c=(0,m.styleText)("dim","..."),u=Math.max(l-o,0),p=Math.max(Math.min(n,u),5),g=0;e>=p-3&&(g=Math.max(Math.min(e-p+3,t.length-p),0));let x=p<t.length&&g>0,y=p<t.length&&g+p<t.length,f=Math.min(g+p,t.length),b=[],_=0;x&&_++,y&&_++;let C=g+(x?1:0),A=f-(y?1:0);for(let L=C;L<A;L++){let G=Lt(s(t[L],L===e),a,{hard:!0,trim:!1}).split(`
|
|
51
|
-
`);b.push(G),_+=G.length}if(_>u){let L=0,G=0,I=_,P=e-C,D=(Y,Z)=>_a(b,I,Y,Z,u);x?({lineCount:I,removals:L}=D(0,P),I>u&&({lineCount:I,removals:G}=D(P+1,b.length))):({lineCount:I,removals:G}=D(P+1,b.length),I>u&&({lineCount:I,removals:L}=D(0,P))),L>0&&(x=!0,b.splice(0,L)),G>0&&(y=!0,b.splice(b.length-G,G))}let F=[];x&&F.push(c);for(let L of b)for(let G of L)F.push(G);return y&&F.push(c),F};rr=e=>new Gt({options:e.options,initialValue:e.initialValue?[e.initialValue]:void 0,initialUserInput:e.initialUserInput,filter:e.filter??((t,s)=>nr(t,s)),signal:e.signal,input:e.input,output:e.output,validate:e.validate,render(){let t=e.withGuide??re.withGuide,s=t?[`${(0,m.styleText)("gray",E)}`,`${Ge(this.state)} ${e.message}`]:[`${Ge(this.state)} ${e.message}`],i=this.userInput,n=this.options,r=e.placeholder,o=i===""&&r!==void 0,a=(l,c)=>{let u=Wn(l),p=l.hint&&l.value===this.focusedValue?(0,m.styleText)("dim",` (${l.hint})`):"";switch(c){case"active":return`${(0,m.styleText)("green",zt)} ${u}${p}`;case"inactive":return`${(0,m.styleText)("dim",jt)} ${(0,m.styleText)("dim",u)}`;case"disabled":return`${(0,m.styleText)("gray",jt)} ${(0,m.styleText)(["strikethrough","gray"],u)}`}};switch(this.state){case"submit":{let l=xa(this.selectedValues,n),c=l.length>0?` ${(0,m.styleText)("dim",l.map(Wn).join(", "))}`:"",u=t?(0,m.styleText)("gray",E):"";return`${s.join(`
|
|
41
|
+
`)),this._prevFrame=e;return}}this.output.write(Te.erase.down())}this.output.write(e),this.state==="initial"&&(this.state="active"),this._prevFrame=e}}};yi=class extends Be{filteredOptions;multiple;isNavigating=!1;selectedValues=[];focusedValue;#t=0;#n="";#e;#r;#a;get cursor(){return this.#t}get userInputWithCursor(){if(!this.userInput)return(0,_t.styleText)(["inverse","hidden"],"_");if(this._cursor>=this.userInput.length)return`${this.userInput}\u2588`;let e=this.userInput.slice(0,this.cursor),s=this.userInput.slice(this.cursor,this.cursor+1),i=this.userInput.slice(this.cursor+1);return`${e}${(0,_t.styleText)("inverse",s)}${i}`}get options(){return typeof this.#r=="function"?this.#r():this.#r}constructor(e){super(e),this.#r=e.options,this.#a=e.placeholder;let s=this.options;this.filteredOptions=[...s],this.multiple=e.multiple===!0,this.#e=typeof e.options=="function"?e.filter:e.filter??pa;let i;if(e.initialValue&&Array.isArray(e.initialValue)?this.multiple?i=e.initialValue:i=e.initialValue.slice(0,1):!this.multiple&&this.options.length>0&&(i=[this.options[0]?.value]),i)for(let n of i){let r=s.findIndex(o=>o.value===n);r!==-1&&(this.toggleSelected(n),this.#t=r)}this.focusedValue=this.options[this.#t]?.value,this.on("key",(n,r)=>this.#s(n,r)),this.on("userInput",n=>this.#i(n))}_isActionKey(e,s){return e===" "||this.multiple&&this.isNavigating&&s.name==="space"&&e!==void 0&&e!==""}#s(e,s){let i=s.name==="up",n=s.name==="down",r=s.name==="return",o=this.userInput===""||this.userInput===" ",a=this.#a,l=this.options,c=a!==void 0&&a!==""&&l.some(d=>!d.disabled&&(this.#e?this.#e(a,d):!0));if(s.name==="tab"&&o&&c){this.userInput===" "&&this._clearUserInput(),this._setUserInput(a,!0),this.isNavigating=!1;return}i||n?(this.#t=at(this.#t,i?-1:1,this.filteredOptions),this.focusedValue=this.filteredOptions[this.#t]?.value,this.multiple||(this.selectedValues=[this.focusedValue]),this.isNavigating=!0):r?this.value=ga(this.multiple,this.selectedValues):this.multiple?this.focusedValue!==void 0&&(s.name==="tab"||this.isNavigating&&s.name==="space")?this.toggleSelected(this.focusedValue):this.isNavigating=!1:(this.focusedValue&&(this.selectedValues=[this.focusedValue]),this.isNavigating=!1)}deselectAll(){this.selectedValues=[]}toggleSelected(e){this.filteredOptions.length!==0&&(this.multiple?this.selectedValues.includes(e)?this.selectedValues=this.selectedValues.filter(s=>s!==e):this.selectedValues=[...this.selectedValues,e]:this.selectedValues=[e])}#i(e){if(e!==this.#n){this.#n=e;let s=this.options;e&&this.#e?this.filteredOptions=s.filter(r=>this.#e?.(e,r)):this.filteredOptions=[...s];let i=ha(this.focusedValue,this.filteredOptions);this.#t=at(i,0,this.filteredOptions);let n=this.filteredOptions[this.#t];n&&!n.disabled?this.focusedValue=n.value:this.focusedValue=void 0,this.multiple||(this.focusedValue!==void 0?this.toggleSelected(this.focusedValue):this.deselectAll())}}},gs=class extends Be{get cursor(){return this.value?0:1}get _value(){return this.cursor===0}constructor(e){super(e,!1),this.value=!!e.initialValue,this.on("userInput",()=>{this.value=this._value}),this.on("confirm",s=>{this.output.write(Te.cursor.move(0,-1)),this.value=s,this.state="submit",this.close()}),this.on("cursor",()=>{this.value=!this.value})}},$a={Y:{type:"year",len:4},M:{type:"month",len:2},D:{type:"day",len:2}};$s=class extends Be{#t;#n;#e;#r;#a;#s={segmentIndex:0,positionInSegment:0};#i=!0;#o=null;inlineError="";get segmentCursor(){return{...this.#s}}get segmentValues(){return{...this.#e}}get segments(){return this.#t}get separator(){return this.#n}get formattedValue(){return this.#u(this.#e)}#u(e){return this.#t.map(s=>e[s.type]).join(this.#n)}#l(){this._setUserInput(this.#u(this.#e)),this._setValue(qn(this.#e)??void 0)}constructor(e){let s=e.format?{segments:Vn(e.format),separator:e.separator??"/"}:ya(e.locale),i=e.separator??s.separator,n=e.format?Vn(e.format):s.segments,r=e.initialValue??e.defaultValue,o=r?{year:String(r.getUTCFullYear()).padStart(4,"0"),month:String(r.getUTCMonth()+1).padStart(2,"0"),day:String(r.getUTCDate()).padStart(2,"0")}:{year:"____",month:"__",day:"__"},a=n.map(l=>o[l.type]).join(i);super({...e,initialUserInput:a},!1),this.#t=n,this.#n=i,this.#e=o,this.#r=e.minDate,this.#a=e.maxDate,this.#l(),this.on("cursor",l=>this.#h(l)),this.on("key",(l,c)=>this.#p(l,c)),this.on("finalize",()=>this.#g(e))}#c(){let e=Math.max(0,Math.min(this.#s.segmentIndex,this.#t.length-1)),s=this.#t[e];if(s)return this.#s.positionInSegment=Math.max(0,Math.min(this.#s.positionInSegment,s.len-1)),{segment:s,index:e}}#d(e){this.inlineError="",this.#o=null;let s=this.#c();s&&(this.#s.segmentIndex=Math.max(0,Math.min(this.#t.length-1,s.index+e)),this.#s.positionInSegment=0,this.#i=!0)}#m(e){let s=this.#c();if(!s)return;let{segment:i}=s,n=this.#e[i.type],r=!n||n.replace(/_/g,"")==="",o=Number.parseInt((n||"0").replace(/_/g,"0"),10)||0,a=ba(i.type,ps(this.#e),this.#r,this.#a),l;r?l=e===1?a.min:a.max:l=Math.max(Math.min(a.max,o+e),a.min),this.#e={...this.#e,[i.type]:l.toString().padStart(i.len,"0")},this.#i=!0,this.#o=null,this.#l()}#h(e){if(e)switch(e){case"right":return this.#d(1);case"left":return this.#d(-1);case"up":return this.#m(1);case"down":return this.#m(-1)}}#p(e,s){if(s?.name==="backspace"||s?.sequence==="\x7F"||s?.sequence==="\b"||e==="\x7F"||e==="\b"){this.inlineError="";let i=this.#c();if(!i)return;if(!this.#e[i.segment.type].replace(/_/g,"")){this.#d(-1);return}this.#e[i.segment.type]="_".repeat(i.segment.len),this.#i=!0,this.#s.positionInSegment=0,this.#l();return}if(s?.name==="tab"){this.inlineError="";let i=this.#c();if(!i)return;let n=s.shift?-1:1,r=i.index+n;r>=0&&r<this.#t.length&&(this.#s.segmentIndex=r,this.#s.positionInSegment=0,this.#i=!0);return}if(e&&/^[0-9]$/.test(e)){let i=this.#c();if(!i)return;let{segment:n}=i,r=!this.#e[n.type].replace(/_/g,"");if(this.#i&&this.#o!==null&&!r){let $=this.#o+e,w={...this.#e,[n.type]:$},p=this.#f(w,n);if(p){this.inlineError=p,this.#o=null,this.#i=!1;return}this.inlineError="",this.#e[n.type]=$,this.#o=null,this.#i=!1,this.#l(),i.index<this.#t.length-1&&(this.#s.segmentIndex=i.index+1,this.#s.positionInSegment=0,this.#i=!0);return}this.#i&&!r&&(this.#e[n.type]="_".repeat(n.len),this.#s.positionInSegment=0),this.#i=!1,this.#o=null;let o=this.#e[n.type],a=o.indexOf("_"),l=a>=0?a:Math.min(this.#s.positionInSegment,n.len-1);if(l<0||l>=n.len)return;let c=o.slice(0,l)+e+o.slice(l+1),d=!1;if(l===0&&o==="__"&&(n.type==="month"||n.type==="day")){let $=Number.parseInt(e,10);c=`0${e}`,d=$<=(n.type==="month"?1:2)}if(n.type==="year"&&(c=(o.replace(/_/g,"")+e).padStart(n.len,"_")),!c.includes("_")){let $={...this.#e,[n.type]:c},w=this.#f($,n);if(w){this.inlineError=w;return}}this.inlineError="",this.#e[n.type]=c;let f=c.includes("_")?void 0:Bn(this.#e);if(f){let{year:$,month:w}=f,p=pi($,w);this.#e={year:String(Math.max(0,Math.min(9999,$))).padStart(4,"0"),month:String(Math.max(1,Math.min(12,w))).padStart(2,"0"),day:String(Math.max(1,Math.min(p,f.day))).padStart(2,"0")}}this.#l();let g=c.indexOf("_");d?(this.#i=!0,this.#o=e):g>=0?this.#s.positionInSegment=g:a>=0&&i.index<this.#t.length-1?(this.#s.segmentIndex=i.index+1,this.#s.positionInSegment=0,this.#i=!0):this.#s.positionInSegment=Math.min(l+1,n.len-1)}}#f(e,s){let{month:i,day:n}=ps(e);if(s.type==="month"&&(i<0||i>12))return M.date.messages.invalidMonth;if(s.type==="day"&&(n<0||n>31))return M.date.messages.invalidDay(31,"any month")}#g(e){let{year:s,month:i,day:n}=ps(this.#e);if(s&&i&&n){let r=pi(s,i);this.#e={...this.#e,day:String(Math.min(n,r)).padStart(2,"0")}}this.value=qn(this.#e)??e.defaultValue??void 0}},Gn=class extends Be{options;cursor=0;#t;getGroupItems(e){return this.options.filter(s=>s.group===e)}isGroupSelected(e){let s=this.getGroupItems(e),i=this.value;return i===void 0?!1:s.every(n=>i.includes(n.value))}toggleValue(){let e=this.options[this.cursor];if(e!==void 0)if(this.value===void 0&&(this.value=[]),e.group===!0){let s=e.value,i=this.getGroupItems(s);this.isGroupSelected(s)?this.value=this.value.filter(n=>i.findIndex(r=>r.value===n)===-1):this.value=[...this.value,...i.map(n=>n.value)],this.value=Array.from(new Set(this.value))}else{let s=this.value.includes(e.value);this.value=s?this.value.filter(i=>i!==e.value):[...this.value,e.value]}}constructor(e){super(e,!1);let{options:s}=e;this.#t=e.selectableGroups!==!1,this.options=Object.entries(s).flatMap(([i,n])=>[{value:i,group:!0,label:i},...n.map(r=>({...r,group:i}))]),this.value=[...e.initialValues??[]],this.cursor=Math.max(this.options.findIndex(({value:i})=>i===e.cursorAt),this.#t?0:1),this.on("cursor",i=>{switch(i){case"left":case"up":{this.cursor=this.cursor===0?this.options.length-1:this.cursor-1;let n=this.options[this.cursor]?.group===!0;!this.#t&&n&&(this.cursor=this.cursor===0?this.options.length-1:this.cursor-1);break}case"down":case"right":{this.cursor=this.cursor===this.options.length-1?0:this.cursor+1;let n=this.options[this.cursor]?.group===!0;!this.#t&&n&&(this.cursor=this.cursor===this.options.length-1?0:this.cursor+1);break}case"space":this.toggleValue();break}})}},va=new Set(["up","down","left","right"]),ys=class extends Be{#t=!1;#n;focused="editor";get userInputWithCursor(){if(this.state==="submit")return this.userInput;let e=this.userInput;if(this.cursor>=e.length)return`${e}\u2588`;let s=e.slice(0,this.cursor),i=e.slice(this.cursor,this.cursor+1),n=e.slice(this.cursor+1);return i===`
|
|
42
|
+
`?`${s}\u2588
|
|
43
|
+
${n}`:`${s}${(0,_t.styleText)("inverse",i)}${n}`}get cursor(){return this._cursor}#e(e){if(this.userInput.length===0){this._setUserInput(e);return}this._setUserInput(this.userInput.slice(0,this.cursor)+e+this.userInput.slice(this.cursor))}#r(e){let s=this.value??"";switch(e){case"up":this._cursor=fs(this._cursor,0,-1,s);return;case"down":this._cursor=fs(this._cursor,0,1,s);return;case"left":this._cursor=fs(this._cursor,-1,0,s);return;case"right":this._cursor=fs(this._cursor,1,0,s);return}}_shouldSubmit(e,s){if(this.#n)return this.focused==="submit"?!0:(this.#e(`
|
|
44
|
+
`),this._cursor++,!1);let i=this.#t;return this.#t=!0,i&&this.cursor===this.userInput.length?(this.userInput[this.cursor-1]===`
|
|
45
|
+
`&&(this._setUserInput(this.userInput.slice(0,this.cursor-1)+this.userInput.slice(this.cursor)),this._cursor--),!0):(this.#e(`
|
|
46
|
+
`),this._cursor++,!1)}constructor(e){let s=e.initialUserInput??e.initialValue;super({...e,initialUserInput:s},!1),s!==void 0&&(this._cursor=s.length),this.#n=e.showSubmit??!1,this.on("key",(i,n)=>{if(n?.name&&va.has(n.name)){this.#t=!1,this.#r(n.name);return}if(i===" "&&this.#n){this.focused=this.focused==="editor"?"submit":"editor";return}if(n?.name!=="return"){if(this.#t=!1,n?.name==="backspace"&&this.cursor>0){this._setUserInput(this.userInput.slice(0,this.cursor-1)+this.userInput.slice(this.cursor)),this._cursor--;return}if(n?.name==="delete"&&this.cursor<this.userInput.length){this._setUserInput(this.userInput.slice(0,this.cursor)+this.userInput.slice(this.cursor+1));return}i&&(this.#n&&this.focused==="submit"&&(this.focused="editor"),this.#e(i??""),this._cursor++)}}),this.on("userInput",i=>{this._setValue(i)}),this.on("finalize",()=>{this.value||(this.value=e.defaultValue),this.value===void 0&&(this.value="")})}},bs=class extends Be{options;cursor=0;get _value(){return this.options[this.cursor]?.value}get _enabledOptions(){return this.options.filter(e=>e.disabled!==!0)}toggleAll(){let e=this._enabledOptions,s=this.value!==void 0&&this.value.length===e.length;this.value=s?[]:e.map(i=>i.value)}toggleInvert(){let e=this.value;if(!e)return;let s=this._enabledOptions.filter(i=>!e.includes(i.value));this.value=s.map(i=>i.value)}toggleValue(){this.value===void 0&&(this.value=[]);let e=this.value.includes(this._value);this.value=e?this.value.filter(s=>s!==this._value):[...this.value,this._value]}constructor(e){super(e,!1),this.options=e.options,this.value=[...e.initialValues??[]];let s=Math.max(this.options.findIndex(({value:i})=>i===e.cursorAt),0);this.cursor=this.options[s]?.disabled?at(s,1,this.options):s,this.on("key",(i,n)=>{n.name==="a"&&this.toggleAll(),n.name==="i"&&this.toggleInvert()}),this.on("cursor",i=>{switch(i){case"left":case"up":this.cursor=at(this.cursor,-1,this.options);break;case"down":case"right":this.cursor=at(this.cursor,1,this.options);break;case"space":this.toggleValue();break}})}},Yn=class extends Be{_mask="\u2022";get cursor(){return this._cursor}get masked(){return this.userInput.replaceAll(/./g,this._mask)}get userInputWithCursor(){if(this.state==="submit"||this.state==="cancel")return this.masked;let e=this.userInput;if(this.cursor>=e.length)return`${this.masked}${(0,_t.styleText)(["inverse","hidden"],"_")}`;let s=this.masked,i=s.slice(0,this.cursor),n=s.slice(this.cursor,this.cursor+1),r=s.slice(this.cursor+1);return`${i}${(0,_t.styleText)("inverse",n)}${r}`}clear(){this._clearUserInput()}constructor({mask:e,...s}){super(s),this._mask=e??"\u2022",this.on("userInput",i=>{this._setValue(i)}),this.on("finalize",()=>{this.value===void 0&&(this.value="")})}},Kn=class extends Be{options;cursor=0;get _selectedValue(){return this.options[this.cursor]}changeValue(){let e=this._selectedValue;this.value=e===void 0?void 0:e.value}constructor(e){super(e,!1),this.options=e.options;let s=this.options.findIndex(({value:n})=>n===e.initialValue),i=s===-1?0:s;this.cursor=this.options[i]?.disabled?at(i,1,this.options):i,this.changeValue(),this.on("cursor",n=>{switch(n){case"left":case"up":this.cursor=at(this.cursor,-1,this.options);break;case"down":case"right":this.cursor=at(this.cursor,1,this.options);break}this.changeValue()})}},vs=class extends Be{options;cursor=0;constructor(e){super(e,!1),this.options=e.options;let s=e.caseSensitive===!0,i=this.options.map(({value:[n]})=>s?n:n?.toLowerCase());this.cursor=Math.max(i.indexOf(e.initialValue),0),this.on("key",n=>{if(!n)return;let r=s?n:n.toLowerCase();if(!i.includes(r))return;let o=this.options.find(({value:[a]})=>s?a===r:a?.toLowerCase()===r);o&&(this.value=o.value,this.state="submit",this.emit("submit"))})}},ws=class extends Be{get userInputWithCursor(){if(this.state==="submit")return this.userInput;let e=this.userInput;if(this.cursor>=e.length)return`${this.userInput}\u2588`;let s=e.slice(0,this.cursor),i=e.slice(this.cursor,this.cursor+1),n=e.slice(this.cursor+1);return`${s}${(0,_t.styleText)("inverse",i)}${n}`}get cursor(){return this._cursor}constructor(e){super({...e,initialUserInput:e.initialUserInput??e.initialValue}),this.on("userInput",s=>{this._setValue(s)}),this.on("finalize",()=>{this.value||(this.value=e.defaultValue),this.value===void 0&&(this.value="")})}}});var Ei={};Pt(Ei,{MULTISELECT_INSTRUCTIONS:()=>Ti,SELECT_INSTRUCTIONS:()=>dr,S_BAR:()=>C,S_BAR_END:()=>fe,S_BAR_END_RIGHT:()=>nr,S_BAR_H:()=>ks,S_BAR_START:()=>Si,S_BAR_START_RIGHT:()=>ir,S_CHECKBOX_ACTIVE:()=>xs,S_CHECKBOX_INACTIVE:()=>Ut,S_CHECKBOX_SELECTED:()=>jt,S_CONNECT_LEFT:()=>or,S_CORNER_BOTTOM_LEFT:()=>ji,S_CORNER_BOTTOM_RIGHT:()=>ki,S_CORNER_TOP_LEFT:()=>ar,S_CORNER_TOP_RIGHT:()=>xi,S_ERROR:()=>Ri,S_INFO:()=>Ci,S_PASSWORD_MASK:()=>rr,S_RADIO_ACTIVE:()=>zt,S_RADIO_INACTIVE:()=>Ot,S_STEP_ACTIVE:()=>sr,S_STEP_CANCEL:()=>wi,S_STEP_ERROR:()=>_i,S_STEP_SUBMIT:()=>It,S_SUCCESS:()=>Oi,S_WARN:()=>Ii,autocomplete:()=>cr,autocompleteMultiselect:()=>Sa,box:()=>Ca,cancel:()=>Pa,confirm:()=>Ge,date:()=>Oa,formatInstructionFooter:()=>js,group:()=>Ta,groupMultiselect:()=>Da,intro:()=>Na,isCI:()=>vi,isCancel:()=>oe,isTTY:()=>tr,limitOptions:()=>yt,log:()=>Ue,multiline:()=>La,multiselect:()=>Ea,note:()=>Va,outro:()=>Fa,password:()=>qa,path:()=>Wa,progress:()=>Ja,select:()=>Ze,selectKey:()=>Ba,settings:()=>M,spinner:()=>Xt,stream:()=>kt,symbol:()=>Me,symbolBar:()=>Ai,taskLog:()=>Ka,tasks:()=>Ga,text:()=>Ee,unicode:()=>Ss,unicodeOr:()=>re,updateSettings:()=>Hn});function wa(){return Le.default.platform!=="win32"?Le.default.env.TERM!=="linux":!!Le.default.env.CI||!!Le.default.env.WT_SESSION||!!Le.default.env.TERMINUS_SUBLIME||Le.default.env.ConEmuTask==="{cmd::Cmder}"||Le.default.env.TERM_PROGRAM==="Terminus-Sublime"||Le.default.env.TERM_PROGRAM==="vscode"||Le.default.env.TERM==="xterm-256color"||Le.default.env.TERM==="alacritty"||Le.default.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}function js(t,e){let s=[`${e?`${(0,u.styleText)("cyan",C)} `:""}${t.join(" \u2022 ")}`];return e&&s.push((0,u.styleText)("cyan",fe)),s}function Xn(t){return t.label??String(t.value??"")}function lr(t,e){if(!t)return!0;let s=(e.label??String(e.value??"")).toLowerCase(),i=(e.hint??"").toLowerCase(),n=String(e.value).toLowerCase(),r=t.toLowerCase();return s.includes(r)||i.includes(r)||n.includes(r)}function _a(t,e){let s=[];for(let i of e)t.includes(i.value)&&s.push(i);return s}function Zn(t,e,s,i){let n=s,r=s;return i==="center"?n=Math.floor((e-t)/2):i==="right"&&(n=e-t-s),r=e-n-t,[n,r]}function Ia(t,e){let s=t.segmentValues,i=t.segmentCursor;if(e==="submit"||e==="cancel")return t.formattedValue;let n=(0,u.styleText)("gray",t.separator);return t.segments.map((r,o)=>{let a=o===i.segmentIndex&&!["submit","cancel"].includes(e),l=Aa[r.type];return Ra(s[r.type],{isActive:a,label:l})}).join(n)}function Ra(t,e){let s=!t||t.replace(/_/g,"")==="";return e.isActive?(0,u.styleText)("inverse",s?e.label:t.replace(/_/g," ")):s?(0,u.styleText)("dim",e.label):t.replace(/_/g,(0,u.styleText)("dim"," "))}function Ja({style:t="heavy",max:e=100,size:s=40,...i}={}){let n=Xt(i),r=0,o="",a=Math.max(1,e),l=Math.max(1,s),c=$=>{switch($){case"initial":case"active":return w=>(0,u.styleText)("magenta",w);case"error":case"cancel":return w=>(0,u.styleText)("red",w);case"submit":return w=>(0,u.styleText)("green",w);default:return w=>(0,u.styleText)("magenta",w)}},d=($,w)=>{let p=Math.floor(r/a*l);return`${c($)(Qn[t].repeat(p))}${(0,u.styleText)("dim",Qn[t].repeat(l-p))} ${w}`},f=($="")=>{o=$,n.start(d("initial",$))},g=($=1,w)=>{r=Math.min(a,$+r),n.message(d("active",w??o)),o=w??o};return{start:f,stop:n.stop,cancel:n.cancel,error:n.error,clear:n.clear,advance:g,isCancelled:n.isCancelled,message:$=>g(0,$)}}var u,Le,Ct,Kt,Lt,Ss,vi,tr,re,sr,wi,_i,It,Si,C,fe,ir,nr,zt,Ot,xs,jt,Ut,rr,ks,xi,or,ki,ji,ar,Ci,Oi,Ii,Ri,Me,Ai,zn,yt,cr,Sa,xa,ka,ja,Ca,Ge,Oa,Aa,Ta,Ti,Yt,Ea,Da,Ue,Pa,Na,Fa,La,Ua,Ma,Va,qa,Wa,Ha,Xt,Qn,dr,_s,Ze,Ba,er,kt,Ga,Ya,Ka,Ee,Pe=ke(()=>{bi();bi();u=require("node:util"),Le=N(require("node:process"),1);ci();ri();Ct=require("node:fs"),Kt=require("node:path"),Lt=N(ui(),1);Ss=wa(),vi=()=>process.env.CI==="true",tr=t=>t.isTTY===!0,re=(t,e)=>Ss?t:e,sr=re("\u25C6","*"),wi=re("\u25A0","x"),_i=re("\u25B2","x"),It=re("\u25C7","o"),Si=re("\u250C","T"),C=re("\u2502","|"),fe=re("\u2514","\u2014"),ir=re("\u2510","T"),nr=re("\u2518","\u2014"),zt=re("\u25CF",">"),Ot=re("\u25CB"," "),xs=re("\u25FB","[\u2022]"),jt=re("\u25FC","[+]"),Ut=re("\u25FB","[ ]"),rr=re("\u25AA","\u2022"),ks=re("\u2500","-"),xi=re("\u256E","+"),or=re("\u251C","+"),ki=re("\u256F","+"),ji=re("\u2570","+"),ar=re("\u256D","+"),Ci=re("\u25CF","\u2022"),Oi=re("\u25C6","*"),Ii=re("\u25B2","!"),Ri=re("\u25A0","x"),Me=t=>{switch(t){case"initial":case"active":return(0,u.styleText)("cyan",sr);case"cancel":return(0,u.styleText)("red",wi);case"error":return(0,u.styleText)("yellow",_i);case"submit":return(0,u.styleText)("green",It)}},Ai=t=>{switch(t){case"initial":case"active":return(0,u.styleText)("cyan",C);case"cancel":return(0,u.styleText)("red",C);case"error":return(0,u.styleText)("yellow",C);case"submit":return(0,u.styleText)("green",C)}};zn=(t,e,s,i,n,r=!1)=>{let o=e,a=0;if(r)for(let l=i-1;l>=s;l--){let c=t[l];if(c&&(o-=c.length),a++,o<=n)break}else for(let l=s;l<i;l++){let c=t[l];if(c&&(o-=c.length),a++,o<=n)break}return{lineCount:o,removals:a}},yt=({cursor:t,options:e,style:s,output:i=process.stdout,maxItems:n=Number.POSITIVE_INFINITY,columnPadding:r=0,rowPadding:o=4})=>{let a=xt(i)-r,l=$i(i),c=(0,u.styleText)("dim","..."),d=Math.max(l-o,0),f=Math.max(Math.min(n,d),5),g=0;t>=f-3&&(g=Math.max(Math.min(t-f+3,e.length-f),0));let $=f<e.length&&g>0,w=f<e.length&&g+f<e.length,p=Math.min(g+f,e.length),_=[],S=0;$&&S++,w&&S++;let O=g+($?1:0),D=p-(w?1:0);for(let V=O;V<D;V++){let ae=e[V],X=ae?s(ae,V===t):"",ee=Xe(X,a,{hard:!0,trim:!1}).split(`
|
|
47
|
+
`);_.push(ee),S+=ee.length}if(S>d){let V=0,ae=0,X=S,ee=t-O,A=d,B=()=>zn(_,X,0,ee,A),G=()=>zn(_,X,ee+1,_.length,A,!0);$?({lineCount:X,removals:V}=B(),X>A&&(w||(A-=1),{lineCount:X,removals:ae}=G())):(w||(A-=1),{lineCount:X,removals:ae}=G(),X>A&&(A-=1,{lineCount:X,removals:V}=B())),V>0&&($=!0,_.splice(0,V)),ae>0&&(w=!0,_.splice(_.length-ae,ae))}let W=[];$&&W.push(c);for(let V of _)for(let ae of V)W.push(ae);return w&&W.push(c),W};cr=t=>new yi({options:t.options,initialValue:t.initialValue?[t.initialValue]:void 0,initialUserInput:t.initialUserInput,placeholder:t.placeholder,filter:t.filter??((e,s)=>lr(e,s)),signal:t.signal,input:t.input,output:t.output,validate:t.validate,render(){let e=t.withGuide??M.withGuide,s=e?[`${(0,u.styleText)("gray",C)}`,`${Me(this.state)} ${t.message}`]:[`${Me(this.state)} ${t.message}`],i=this.userInput,n=this.options,r=t.placeholder,o=i===""&&r!==void 0,a=(l,c)=>{let d=Xn(l),f=l.hint&&l.value===this.focusedValue?(0,u.styleText)("dim",` (${l.hint})`):"";switch(c){case"active":return`${(0,u.styleText)("green",zt)} ${d}${f}`;case"inactive":return`${(0,u.styleText)("dim",Ot)} ${(0,u.styleText)("dim",d)}`;case"disabled":return`${(0,u.styleText)("gray",Ot)} ${(0,u.styleText)(["strikethrough","gray"],d)}`}};switch(this.state){case"submit":{let l=_a(this.selectedValues,n),c=l.length>0?` ${(0,u.styleText)("dim",l.map(Xn).join(", "))}`:"",d=e?(0,u.styleText)("gray",C):"";return`${s.join(`
|
|
52
48
|
`)}
|
|
53
|
-
${
|
|
49
|
+
${d}${c}`}case"cancel":{let l=i?` ${(0,u.styleText)(["strikethrough","dim"],i)}`:"",c=e?(0,u.styleText)("gray",C):"";return`${s.join(`
|
|
54
50
|
`)}
|
|
55
|
-
${c}${l}`}default:{let l=this.state==="error"?"yellow":"cyan",c=
|
|
56
|
-
`)}}}}).prompt(),
|
|
57
|
-
${
|
|
58
|
-
`,
|
|
59
|
-
`),`${
|
|
60
|
-
`)}}}});return s.prompt()},
|
|
61
|
-
`),
|
|
62
|
-
`);let
|
|
63
|
-
`);for(let
|
|
64
|
-
`)}i.write(`${c}${
|
|
65
|
-
`)},
|
|
66
|
-
`:""}${
|
|
67
|
-
`,
|
|
68
|
-
${(0,
|
|
69
|
-
${(0,
|
|
70
|
-
`:` ${(0,
|
|
71
|
-
${
|
|
72
|
-
`}}}}).prompt()},
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
${
|
|
76
|
-
|
|
77
|
-
${(0,
|
|
78
|
-
`)
|
|
79
|
-
|
|
80
|
-
${
|
|
81
|
-
|
|
82
|
-
`
|
|
83
|
-
`)
|
|
84
|
-
${(0,
|
|
85
|
-
|
|
86
|
-
${(0,
|
|
87
|
-
|
|
88
|
-
`)
|
|
51
|
+
${c}${l}`}default:{let l=this.state==="error"?"yellow":"cyan",c=e?`${(0,u.styleText)(l,C)} `:"",d=e?(0,u.styleText)(l,fe):"",f="";if(this.isNavigating||o){let O=o?r:i;f=O!==""?` ${(0,u.styleText)("dim",O)}`:""}else f=` ${this.userInputWithCursor}`;let g=this.filteredOptions.length!==n.length?(0,u.styleText)("dim",` (${this.filteredOptions.length} match${this.filteredOptions.length===1?"":"es"})`):"",$=this.filteredOptions.length===0&&i?[`${c}${(0,u.styleText)("yellow","No matches found")}`]:[],w=this.state==="error"?[`${c}${(0,u.styleText)("yellow",this.error)}`]:[];e&&s.push(`${c.trimEnd()}`),s.push(`${c}${(0,u.styleText)("dim","Search:")}${f}${g}`,...$,...w);let p=[`${(0,u.styleText)("dim","\u2191/\u2193")} to select`,`${(0,u.styleText)("dim","Enter:")} confirm`,`${(0,u.styleText)("dim","Type:")} to search`],_=[`${c}${p.join(" \u2022 ")}`,d],S=this.filteredOptions.length===0?[]:yt({cursor:this.cursor,options:this.filteredOptions,columnPadding:e?3:0,rowPadding:s.length+_.length,style:(O,D)=>a(O,O.disabled?"disabled":D?"active":"inactive"),maxItems:t.maxItems,output:t.output});return[...s,...S.map(O=>`${c}${O}`),..._].join(`
|
|
52
|
+
`)}}}}).prompt(),Sa=t=>{let e=(i,n,r,o)=>{let a=r.includes(i.value),l=i.label??String(i.value??""),c=i.hint&&o!==void 0&&i.value===o?(0,u.styleText)("dim",` (${i.hint})`):"",d=a?(0,u.styleText)("green",jt):(0,u.styleText)("dim",Ut);return i.disabled?`${(0,u.styleText)("gray",Ut)} ${(0,u.styleText)(["strikethrough","gray"],l)}`:n?`${d} ${l}${c}`:`${d} ${(0,u.styleText)("dim",l)}`},s=new yi({options:t.options,multiple:!0,placeholder:t.placeholder,filter:t.filter??((i,n)=>lr(i,n)),validate:()=>{if(t.required&&s.selectedValues.length===0)return"Please select at least one item"},initialValue:t.initialValues,signal:t.signal,input:t.input,output:t.output,render(){let i=t.withGuide??M.withGuide,n=`${i?`${(0,u.styleText)("gray",C)}
|
|
53
|
+
`:""}${Me(this.state)} ${t.message}
|
|
54
|
+
`,r=this.userInput,o=t.placeholder,a=r===""&&o!==void 0,l=this.isNavigating||a?(0,u.styleText)("dim",a?o:r):this.userInputWithCursor,c=this.options,d=this.filteredOptions.length!==c.length?(0,u.styleText)("dim",` (${this.filteredOptions.length} match${this.filteredOptions.length===1?"":"es"})`):"";switch(this.state){case"submit":return`${n}${i?`${(0,u.styleText)("gray",C)} `:""}${(0,u.styleText)("dim",`${this.selectedValues.length} items selected`)}`;case"cancel":return`${n}${i?`${(0,u.styleText)("gray",C)} `:""}${(0,u.styleText)(["strikethrough","dim"],r)}`;default:{let f=this.state==="error"?"yellow":"cyan",g=i?`${(0,u.styleText)(f,C)} `:"",$=i?(0,u.styleText)(f,fe):"",w=[`${(0,u.styleText)("dim","\u2191/\u2193")} to navigate`,`${(0,u.styleText)("dim",this.isNavigating?"Space/Tab:":"Tab:")} select`,`${(0,u.styleText)("dim","Enter:")} confirm`,`${(0,u.styleText)("dim","Type:")} to search`],p=this.filteredOptions.length===0&&r?[`${g}${(0,u.styleText)("yellow","No matches found")}`]:[],_=this.state==="error"?[`${g}${(0,u.styleText)("yellow",this.error)}`]:[],S=[...`${n}${i?(0,u.styleText)(f,C):""}`.split(`
|
|
55
|
+
`),`${g}${(0,u.styleText)("dim","Search:")} ${l}${d}`,...p,..._],O=[`${g}${w.join(" \u2022 ")}`,$],D=yt({cursor:this.cursor,options:this.filteredOptions,style:(W,V)=>e(W,V,this.selectedValues,this.focusedValue),maxItems:t.maxItems,output:t.output,rowPadding:S.length+O.length});return[...S,...D.map(W=>`${g}${W}`),...O].join(`
|
|
56
|
+
`)}}}});return s.prompt()},xa=[ar,xi,ji,ki],ka=[Si,ir,fe,nr];ja=t=>t,Ca=(t="",e="",s)=>{let i=s?.output??process.stdout,n=xt(i),r=2,o=s?.titlePadding??1,a=s?.contentPadding??2,l=s?.width===void 0||s.width==="auto"?1:Math.min(1,s.width),c=s?.withGuide??M.withGuide?`${C} `:"",d=s?.formatBorder??ja,f=(s?.rounded?xa:ka).map(d),g=d(ks),$=d(C),w=be(c),p=be(e),_=n-w,S=Math.floor(n*l)-w;if(s?.width==="auto"){let A=t.split(`
|
|
57
|
+
`),B=p+o*2;for(let P of A){let te=be(P)+a*2;te>B&&(B=te)}let G=B+r;G<S&&(S=G)}S%2!==0&&(S<_?S++:S--);let O=S-r,D=O-o*2,W=p>D?`${e.slice(0,D-3)}...`:e,[V,ae]=Zn(be(W),O,o,s?.titleAlign),X=Xe(t,O-a*2,{hard:!0,trim:!1});i.write(`${c}${f[0]}${g.repeat(V)}${W}${g.repeat(ae)}${f[1]}
|
|
58
|
+
`);let ee=X.split(`
|
|
59
|
+
`);for(let A of ee){let[B,G]=Zn(be(A),O,a,s?.contentAlign);i.write(`${c}${$}${" ".repeat(B)}${A}${" ".repeat(G)}${$}
|
|
60
|
+
`)}i.write(`${c}${f[2]}${g.repeat(O)}${f[3]}
|
|
61
|
+
`)},Ge=t=>{let e=t.active??"Yes",s=t.inactive??"No";return new gs({active:e,inactive:s,signal:t.signal,input:t.input,output:t.output,initialValue:t.initialValue??!0,render(){let i=t.withGuide??M.withGuide,n=`${Me(this.state)} `,r=i?`${(0,u.styleText)("gray",C)} `:"",o=ge(t.output,t.message,r,n),a=`${i?`${(0,u.styleText)("gray",C)}
|
|
62
|
+
`:""}${o}
|
|
63
|
+
`,l=this.value?e:s;switch(this.state){case"submit":{let c=i?`${(0,u.styleText)("gray",C)} `:"";return`${a}${c}${(0,u.styleText)("dim",l)}`}case"cancel":{let c=i?`${(0,u.styleText)("gray",C)} `:"";return`${a}${c}${(0,u.styleText)(["strikethrough","dim"],l)}${i?`
|
|
64
|
+
${(0,u.styleText)("gray",C)}`:""}`}default:{let c=i?`${(0,u.styleText)("cyan",C)} `:"",d=i?(0,u.styleText)("cyan",fe):"";return`${a}${c}${this.value?`${(0,u.styleText)("green",zt)} ${e}`:`${(0,u.styleText)("dim",Ot)} ${(0,u.styleText)("dim",e)}`}${t.vertical?i?`
|
|
65
|
+
${(0,u.styleText)("cyan",C)} `:`
|
|
66
|
+
`:` ${(0,u.styleText)("dim","/")} `}${this.value?`${(0,u.styleText)("dim",Ot)} ${(0,u.styleText)("dim",s)}`:`${(0,u.styleText)("green",zt)} ${s}`}
|
|
67
|
+
${d}
|
|
68
|
+
`}}}}).prompt()},Oa=t=>{let e=t.validate;return new $s({...t,validate(s){if(s===void 0)return t.defaultValue!==void 0?void 0:e?Gt(e,s):M.date.messages.required;let i=n=>n.toISOString().slice(0,10);if(t.minDate&&i(s)<i(t.minDate))return M.date.messages.afterMin(t.minDate);if(t.maxDate&&i(s)>i(t.maxDate))return M.date.messages.beforeMax(t.maxDate);if(e)return Gt(e,s)},render(){let s=(t?.withGuide??M.withGuide)!==!1,i=`${`${s?`${(0,u.styleText)("gray",C)}
|
|
69
|
+
`:""}${Me(this.state)} `}${t.message}
|
|
70
|
+
`,n=this.state!=="initial"?this.state:"active",r=Ia(this,n),o=this.value instanceof Date?this.formattedValue:"";switch(this.state){case"error":{let a=this.error?` ${(0,u.styleText)("yellow",this.error)}`:"",l=s?`${(0,u.styleText)("yellow",C)} `:"",c=s?(0,u.styleText)("yellow",fe):"";return`${i.trim()}
|
|
71
|
+
${l}${r}
|
|
72
|
+
${c}${a}
|
|
73
|
+
`}case"submit":{let a=o?` ${(0,u.styleText)("dim",o)}`:"",l=s?(0,u.styleText)("gray",C):"";return`${i}${l}${a}`}case"cancel":{let a=o?` ${(0,u.styleText)(["strikethrough","dim"],o)}`:"",l=s?(0,u.styleText)("gray",C):"";return`${i}${l}${a}${o.trim()?`
|
|
74
|
+
${l}`:""}`}default:{let a=s?`${(0,u.styleText)("cyan",C)} `:"",l=s?(0,u.styleText)("cyan",fe):"",c=s?`${(0,u.styleText)("cyan",C)} `:"",d=this.inlineError?`
|
|
75
|
+
${c}${(0,u.styleText)("yellow",this.inlineError)}`:"";return`${i}${a}${r}${d}
|
|
76
|
+
${l}
|
|
77
|
+
`}}}}).prompt()};Aa={year:"yyyy",month:"mm",day:"dd"},Ta=async(t,e)=>{let s={},i=Object.keys(t);for(let n of i){let r=t[n],o=await r({results:s})?.catch(a=>{throw a});if(typeof e?.onCancel=="function"&&oe(o)){s[n]="canceled",e.onCancel({results:s});continue}s[n]=o}return s},Ti=[`${(0,u.styleText)("dim","\u2191/\u2193")} to navigate`,`${(0,u.styleText)("dim","Space:")} select`,`${(0,u.styleText)("dim","Enter:")} confirm`],Yt=(t,e)=>t.split(`
|
|
78
|
+
`).map(s=>e(s)).join(`
|
|
79
|
+
`),Ea=t=>{let e=(n,r)=>{let o=n.label??String(n.value);return r==="disabled"?`${(0,u.styleText)("gray",Ut)} ${Yt(o,a=>(0,u.styleText)(["strikethrough","gray"],a))}${n.hint?` ${(0,u.styleText)("dim",`(${n.hint??"disabled"})`)}`:""}`:r==="active"?`${(0,u.styleText)("cyan",xs)} ${o}${n.hint?` ${(0,u.styleText)("dim",`(${n.hint})`)}`:""}`:r==="selected"?`${(0,u.styleText)("green",jt)} ${Yt(o,a=>(0,u.styleText)("dim",a))}${n.hint?` ${(0,u.styleText)("dim",`(${n.hint})`)}`:""}`:r==="cancelled"?`${Yt(o,a=>(0,u.styleText)(["strikethrough","dim"],a))}`:r==="active-selected"?`${(0,u.styleText)("green",jt)} ${o}${n.hint?` ${(0,u.styleText)("dim",`(${n.hint})`)}`:""}`:r==="submitted"?`${Yt(o,a=>(0,u.styleText)("dim",a))}`:`${(0,u.styleText)("dim",Ut)} ${Yt(o,a=>(0,u.styleText)("dim",a))}`},s=t.required??!0,i=t.showInstructions??!0;return new bs({options:t.options,signal:t.signal,input:t.input,output:t.output,initialValues:t.initialValues,required:s,cursorAt:t.cursorAt,validate(n){if(s&&(n===void 0||n.length===0))return`Please select at least one option.
|
|
80
|
+
${(0,u.styleText)("reset",(0,u.styleText)("dim",`Press ${(0,u.styleText)(["gray","bgWhite","inverse"]," space ")} to select, ${(0,u.styleText)("gray",(0,u.styleText)("bgWhite",(0,u.styleText)("inverse"," enter ")))} to submit`))}`},render(){let n=t.withGuide??M.withGuide,r=ge(t.output,t.message,n?`${Ai(this.state)} `:"",`${Me(this.state)} `),o=`${n?`${(0,u.styleText)("gray",C)}
|
|
81
|
+
`:""}${r}
|
|
82
|
+
`,a=this.value??[],l=(c,d)=>{if(c.disabled)return e(c,"disabled");let f=a.includes(c.value);return d&&f?e(c,"active-selected"):f?e(c,"selected"):e(c,d?"active":"inactive")};switch(this.state){case"submit":{let c=this.options.filter(({value:f})=>a.includes(f)).map(f=>e(f,"submitted")).join((0,u.styleText)("dim",", "))||(0,u.styleText)("dim","none"),d=ge(t.output,c,n?`${(0,u.styleText)("gray",C)} `:"");return`${o}${d}`}case"cancel":{let c=this.options.filter(({value:f})=>a.includes(f)).map(f=>e(f,"cancelled")).join((0,u.styleText)("dim",", "));if(c.trim()==="")return`${o}${(0,u.styleText)("gray",C)}`;let d=ge(t.output,c,n?`${(0,u.styleText)("gray",C)} `:"");return`${o}${d}${n?`
|
|
83
|
+
${(0,u.styleText)("gray",C)}`:""}`}case"error":{let c=n?`${(0,u.styleText)("yellow",C)} `:"",d=this.error.split(`
|
|
84
|
+
`).map(($,w)=>w===0?`${n?`${(0,u.styleText)("yellow",fe)} `:""}${(0,u.styleText)("yellow",$)}`:` ${$}`).join(`
|
|
85
|
+
`),f=o.split(`
|
|
86
|
+
`).length,g=d.split(`
|
|
87
|
+
`).length+1;return`${o}${c}${yt({output:t.output,options:this.options,cursor:this.cursor,maxItems:t.maxItems,columnPadding:c.length,rowPadding:f+g,style:l}).join(`
|
|
88
|
+
${c}`)}
|
|
89
|
+
${d}
|
|
90
|
+
`}default:{let c=n?`${(0,u.styleText)("cyan",C)} `:"",d=o.split(`
|
|
91
|
+
`).length,f=i?js(Ti,n):n?[(0,u.styleText)("cyan",fe)]:[],g=f.join(`
|
|
92
|
+
`),$=f.length+1;return`${o}${c}${yt({output:t.output,options:this.options,cursor:this.cursor,maxItems:t.maxItems,columnPadding:c.length,rowPadding:d+$,style:l}).join(`
|
|
93
|
+
${c}`)}
|
|
94
|
+
${g}
|
|
95
|
+
`}}}}).prompt()},Da=t=>{let{selectableGroups:e=!0,groupSpacing:s=0}=t,i=(o,a,l=[])=>{let c=o.label??String(o.value),d=typeof o.group=="string",f=d&&(l[l.indexOf(o)+1]??{group:!0}),g=d&&f&&f.group===!0,$="",w="";d&&(e?($=g?`${fe} `:`${C} `,w=g?" ":`${C} `):$=" ");let p="";if(s>0&&!d&&(p=`
|
|
96
|
+
`.repeat(s)),a==="active")return ge(t.output,`${c}${o.hint?` ${(0,u.styleText)("dim",`(${o.hint})`)}`:""}`,`${p}${(0,u.styleText)("dim",$)} `,`${p}${(0,u.styleText)("dim",$)}${(0,u.styleText)("cyan",xs)} `,`${p}${(0,u.styleText)("dim",w)} `);if(a==="group-active")return ge(t.output,c,`${p}${$} `,`${p}${$}${(0,u.styleText)("cyan",xs)} `,`${p}${w} `,S=>(0,u.styleText)("dim",S));if(a==="group-active-selected")return ge(t.output,c,`${p}${$} `,`${p}${$}${(0,u.styleText)("green",jt)} `,`${p}${w} `,S=>(0,u.styleText)("dim",S));if(a==="selected"){let S=d||e?(0,u.styleText)("green",jt):"";return ge(t.output,`${c}${o.hint?` (${o.hint})`:""}`,`${p}${(0,u.styleText)("dim",$)} `,`${p}${(0,u.styleText)("dim",$)}${S} `,`${p}${(0,u.styleText)("dim",w)} `,O=>(0,u.styleText)("dim",O))}if(a==="cancelled")return`${(0,u.styleText)(["strikethrough","dim"],c)}`;if(a==="active-selected")return ge(t.output,`${c}${o.hint?` ${(0,u.styleText)("dim",`(${o.hint})`)}`:""}`,`${p}${(0,u.styleText)("dim",$)} `,`${p}${(0,u.styleText)("dim",$)}${(0,u.styleText)("green",jt)} `,`${p}${(0,u.styleText)("dim",w)} `);if(a==="submitted")return`${(0,u.styleText)("dim",c)}`;let _=d||e?(0,u.styleText)("dim",Ut):"";return ge(t.output,c,`${p}${(0,u.styleText)("dim",$)} `,`${p}${(0,u.styleText)("dim",$)}${_} `,`${p}${(0,u.styleText)("dim",w)} `,S=>(0,u.styleText)("dim",S))},n=t.required??!0,r=t.showInstructions??!0;return new Gn({options:t.options,signal:t.signal,input:t.input,output:t.output,initialValues:t.initialValues,required:n,cursorAt:t.cursorAt,selectableGroups:e,validate(o){if(n&&(o===void 0||o.length===0))return`Please select at least one option.
|
|
97
|
+
${(0,u.styleText)("reset",(0,u.styleText)("dim",`Press ${(0,u.styleText)(["gray","bgWhite","inverse"]," space ")} to select, ${(0,u.styleText)("gray",(0,u.styleText)(["bgWhite","inverse"]," enter "))} to submit`))}`},render(){let o=t.withGuide??M.withGuide,a=`${o?`${(0,u.styleText)("gray",C)}
|
|
98
|
+
`:""}${Me(this.state)} ${t.message}
|
|
99
|
+
`,l=this.value??[],c=(d,f)=>{let g=this.options,$=l.includes(d.value)||d.group===!0&&this.isGroupSelected(`${d.value}`);return!f&&typeof d.group=="string"&&this.options[this.cursor]?.value===d.group?i(d,$?"group-active-selected":"group-active",g):f&&$?i(d,"active-selected",g):$?i(d,"selected",g):i(d,f?"active":"inactive",g)};switch(this.state){case"submit":{let d=this.options.filter(({value:g})=>l.includes(g)).map(g=>i(g,"submitted")),f=d.length===0?"":` ${d.join((0,u.styleText)("dim",", "))}`;return`${a}${o?(0,u.styleText)("gray",C):""}${f}`}case"cancel":{let d=this.options.filter(({value:f})=>l.includes(f)).map(f=>i(f,"cancelled")).join((0,u.styleText)("dim",", "));return`${a}${o?`${(0,u.styleText)("gray",C)} `:""}${d.trim()?`${d}${o?`
|
|
100
|
+
${(0,u.styleText)("gray",C)}`:""}`:""}`}case"error":{let d=o?`${(0,u.styleText)("yellow",C)} `:"",f=this.error.split(`
|
|
101
|
+
`).map((p,_)=>_===0?`${o?`${(0,u.styleText)("yellow",fe)} `:""}${(0,u.styleText)("yellow",p)}`:` ${p}`).join(`
|
|
102
|
+
`),g=a.split(`
|
|
103
|
+
`).length,$=f.split(`
|
|
104
|
+
`).length+1,w=yt({output:t.output,options:this.options,cursor:this.cursor,maxItems:t.maxItems,columnPadding:d.length,rowPadding:g+$,style:c}).join(`
|
|
105
|
+
${d}`);return`${a}${d}${w}
|
|
106
|
+
${f}
|
|
107
|
+
`}default:{let d=o?`${(0,u.styleText)("cyan",C)} `:"",f=a.split(`
|
|
108
|
+
`).length,g=r?js(Ti,o):o?[(0,u.styleText)("cyan",fe)]:[],$=g.join(`
|
|
109
|
+
`),w=g.length+1,p=yt({output:t.output,options:this.options,cursor:this.cursor,maxItems:t.maxItems,columnPadding:d.length,rowPadding:f+w,style:c}).join(`
|
|
110
|
+
${d}`);return`${a}${d}${p}
|
|
111
|
+
${$}
|
|
112
|
+
`}}}}).prompt()},Ue={message:(t=[],{symbol:e=(0,u.styleText)("gray",C),secondarySymbol:s=(0,u.styleText)("gray",C),output:i=process.stdout,spacing:n=1,withGuide:r}={})=>{let o=[],a=r??M.withGuide,l=a?s:"",c=a?`${e} `:"",d=a?`${s} `:"";for(let g=0;g<n;g++)o.push(l);let f=Array.isArray(t)?t:t.split(`
|
|
113
|
+
`);if(f.length>0){let[g,...$]=f;g.length>0?o.push(`${c}${g}`):o.push(a?e:"");for(let w of $)w.length>0?o.push(`${d}${w}`):o.push(a?s:"")}i.write(`${o.join(`
|
|
89
114
|
`)}
|
|
90
|
-
`)},info:(e
|
|
115
|
+
`)},info:(t,e)=>{Ue.message(t,{...e,symbol:(0,u.styleText)("blue",Ci)})},success:(t,e)=>{Ue.message(t,{...e,symbol:(0,u.styleText)("green",Oi)})},step:(t,e)=>{Ue.message(t,{...e,symbol:(0,u.styleText)("green",It)})},warn:(t,e)=>{Ue.message(t,{...e,symbol:(0,u.styleText)("yellow",Ii)})},warning:(t,e)=>{Ue.warn(t,e)},error:(t,e)=>{Ue.message(t,{...e,symbol:(0,u.styleText)("red",Ri)})}},Pa=(t="",e)=>{let s=e?.output??process.stdout,i=e?.withGuide??M.withGuide?`${(0,u.styleText)("gray",fe)} `:"";s.write(`${i}${(0,u.styleText)("red",t)}
|
|
91
116
|
|
|
92
|
-
`)},
|
|
93
|
-
`)},
|
|
94
|
-
${(0,
|
|
117
|
+
`)},Na=(t="",e)=>{let s=e?.output??process.stdout,i=e?.withGuide??M.withGuide?`${(0,u.styleText)("gray",Si)} `:"";s.write(`${i}${t}
|
|
118
|
+
`)},Fa=(t="",e)=>{let s=e?.output??process.stdout,i=e?.withGuide??M.withGuide?`${(0,u.styleText)("gray",C)}
|
|
119
|
+
${(0,u.styleText)("gray",fe)} `:"";s.write(`${i}${t}
|
|
95
120
|
|
|
96
|
-
`)},
|
|
97
|
-
`
|
|
98
|
-
|
|
99
|
-
${(0,
|
|
100
|
-
${
|
|
101
|
-
|
|
102
|
-
${
|
|
103
|
-
`).
|
|
104
|
-
`),c=n.split(`
|
|
105
|
-
`).
|
|
106
|
-
`)
|
|
107
|
-
${
|
|
108
|
-
${l}
|
|
109
|
-
`}default:{let a=`${(0,m.styleText)("cyan",E)} `,l=n.split(`
|
|
110
|
-
`).length;return`${n}${a}${Vt({output:e.output,options:this.options,cursor:this.cursor,maxItems:e.maxItems,columnPadding:a.length,rowPadding:l+2,style:o}).join(`
|
|
111
|
-
${a}`)}
|
|
112
|
-
${(0,m.styleText)("cyan",we)}
|
|
113
|
-
`}}}}).prompt()},Da=e=>(0,m.styleText)("dim",e),Na=(e,t,s)=>{let i={hard:!0,trim:!1},n=Lt(e,t,i).split(`
|
|
114
|
-
`),r=n.reduce((l,c)=>Math.max(Ee(c),l),0),o=n.map(s).reduce((l,c)=>Math.max(Ee(c),l),0),a=t-(o-r);return Lt(e,a,i)},Fa=(e="",t="",s)=>{let i=s?.output??Ne.default.stdout,n=s?.withGuide??re.withGuide,r=s?.format??Da,o=["",...Na(e,wt(i)-6,r).split(`
|
|
115
|
-
`).map(r),""],a=Ee(t),l=Math.max(o.reduce((g,x)=>{let y=Ee(x);return y>g?y:g},0),a)+2,c=o.map(g=>`${(0,m.styleText)("gray",E)} ${g}${" ".repeat(l-Ee(g))}${(0,m.styleText)("gray",E)}`).join(`
|
|
116
|
-
`),u=n?`${(0,m.styleText)("gray",E)}
|
|
117
|
-
`:"",p=n?Zn:Ai;i.write(`${u}${(0,m.styleText)("green",St)} ${(0,m.styleText)("reset",t)} ${(0,m.styleText)("gray",Rs.repeat(Math.max(l-a-1,1))+Oi)}
|
|
121
|
+
`)},La=t=>new ys({validate:t.validate,placeholder:t.placeholder,defaultValue:t.defaultValue,initialValue:t.initialValue,showSubmit:t.showSubmit,output:t.output,signal:t.signal,input:t.input,render(){let e=t?.withGuide??M.withGuide,s=`${`${e?`${(0,u.styleText)("gray",C)}
|
|
122
|
+
`:""}${Me(this.state)} `}${t.message}
|
|
123
|
+
`,i=t.placeholder&&t.placeholder.length>0?(0,u.styleText)("inverse",t.placeholder[0])+(0,u.styleText)("dim",t.placeholder.slice(1)):(0,u.styleText)(["inverse","hidden"],"_"),n=this.userInput?this.userInputWithCursor:i,r=this.value??"",o=t.showSubmit?`
|
|
124
|
+
${(0,u.styleText)(this.focused==="submit"?"cyan":"dim","[ submit ]")}`:"";switch(this.state){case"error":{let a=`${(0,u.styleText)("yellow",C)} `,l=e?ge(t.output,n,a,void 0):n,c=(0,u.styleText)("yellow",fe);return`${s}${l}
|
|
125
|
+
${c} ${(0,u.styleText)("yellow",this.error)}${o}
|
|
126
|
+
`}case"submit":{let a=`${(0,u.styleText)("gray",C)} `,l=e?ge(t.output,r,a,void 0,void 0,c=>(0,u.styleText)("dim",c)):r?(0,u.styleText)("dim",r):"";return`${s}${l}`}case"cancel":{let a=`${(0,u.styleText)("gray",C)} `,l=e?ge(t.output,r,a,void 0,void 0,c=>(0,u.styleText)(["strikethrough","dim"],c)):r?(0,u.styleText)(["strikethrough","dim"],r):"";return`${s}${l}`}default:{let a=e?`${(0,u.styleText)("cyan",C)} `:"",l=e?(0,u.styleText)("cyan",fe):"",c=e?ge(t.output,n,a):n;return`${s}${c}
|
|
127
|
+
${l}${o}
|
|
128
|
+
`}}}}).prompt(),Ua=t=>t,Ma=(t,e,s)=>{let i={hard:!0,trim:!1},n=Xe(t,e,i).split(`
|
|
129
|
+
`),r=n.reduce((l,c)=>Math.max(be(c),l),0),o=n.map(s).reduce((l,c)=>Math.max(be(c),l),0),a=e-(o-r);return Xe(t,a,i)},Va=(t="",e="",s)=>{let i=s?.output??Le.default.stdout,n=s?.withGuide??M.withGuide,r=s?.format??Ua,o=["",...Ma(t,xt(i)-6,r).split(`
|
|
130
|
+
`).map(r),""],a=be(e),l=Math.max(o.reduce((g,$)=>{let w=be($);return w>g?w:g},0),a)+2,c=o.map(g=>`${(0,u.styleText)("gray",C)} ${g}${" ".repeat(l-be(g))}${(0,u.styleText)("gray",C)}`).join(`
|
|
131
|
+
`),d=n?`${(0,u.styleText)("gray",C)}
|
|
132
|
+
`:"",f=n?or:ji;i.write(`${d}${(0,u.styleText)("green",It)} ${(0,u.styleText)("reset",e)} ${(0,u.styleText)("gray",ks.repeat(Math.max(l-a-1,1))+xi)}
|
|
118
133
|
${c}
|
|
119
|
-
${(0,
|
|
120
|
-
`)},
|
|
121
|
-
`:""}${
|
|
122
|
-
`,i=this.userInputWithCursor,n=this.masked;switch(this.state){case"error":{let r=
|
|
134
|
+
${(0,u.styleText)("gray",f+ks.repeat(l+2)+ki)}
|
|
135
|
+
`)},qa=t=>new Yn({validate:t.validate,mask:t.mask??rr,signal:t.signal,input:t.input,output:t.output,render(){let e=t.withGuide??M.withGuide,s=`${e?`${(0,u.styleText)("gray",C)}
|
|
136
|
+
`:""}${Me(this.state)} ${t.message}
|
|
137
|
+
`,i=this.userInputWithCursor,n=this.masked;switch(this.state){case"error":{let r=e?`${(0,u.styleText)("yellow",C)} `:"",o=e?`${(0,u.styleText)("yellow",fe)} `:"",a=n??"";return t.clearOnError&&this.clear(),`${s.trim()}
|
|
123
138
|
${r}${a}
|
|
124
|
-
${o}${(0,
|
|
125
|
-
`}case"submit":{let r=
|
|
126
|
-
${(0,
|
|
139
|
+
${o}${(0,u.styleText)("yellow",this.error)}
|
|
140
|
+
`}case"submit":{let r=e?`${(0,u.styleText)("gray",C)} `:"",o=n?(0,u.styleText)("dim",n):"";return`${s}${r}${o}`}case"cancel":{let r=e?`${(0,u.styleText)("gray",C)} `:"",o=n?(0,u.styleText)(["strikethrough","dim"],n):"";return`${s}${r}${o}${n&&e?`
|
|
141
|
+
${(0,u.styleText)("gray",C)}`:""}`}default:{let r=e?`${(0,u.styleText)("cyan",C)} `:"",o=e?(0,u.styleText)("cyan",fe):"";return`${s}${r}${i}
|
|
127
142
|
${o}
|
|
128
|
-
`}}}}).prompt(),
|
|
129
|
-
`);let
|
|
130
|
-
`);
|
|
131
|
-
`);let le=0,
|
|
132
|
-
`):s.write(`${
|
|
133
|
-
`)),
|
|
134
|
-
`)?
|
|
135
|
-
`).map(s=>
|
|
136
|
-
`):t
|
|
137
|
-
`:""}${
|
|
138
|
-
`;switch(this.state){case"submit":{let
|
|
139
|
-
${(0,
|
|
140
|
-
`).length,
|
|
141
|
-
|
|
142
|
-
${l}
|
|
143
|
-
|
|
144
|
-
`:""}${
|
|
145
|
-
|
|
146
|
-
|
|
143
|
+
`}}}}).prompt(),Wa=t=>{let e=t.validate;return cr({...t,initialUserInput:t.initialValue??t.root??process.cwd(),maxItems:5,validate(s){if(!Array.isArray(s)){if(!s)return"Please select a path";if(e)return Gt(e,s)}},options(){let s=this.userInput;if(s==="")return[];try{let i;(0,Ct.existsSync)(s)?(0,Ct.lstatSync)(s).isDirectory()&&(!t.directory||s.endsWith("/"))?i=s:i=(0,Kt.dirname)(s):i=(0,Kt.dirname)(s);let n=s.length>1&&s.endsWith("/")?s.slice(0,-1):s;return(0,Ct.readdirSync)(i).map(r=>{let o=(0,Kt.join)(i,r),a=(0,Ct.lstatSync)(o);return{name:r,path:o,isDirectory:a.isDirectory()}}).filter(({path:r,isDirectory:o})=>r.startsWith(n)&&(o||!t.directory)).map(r=>({value:r.path}))}catch{return[]}}})},Ha=t=>(0,u.styleText)("magenta",t),Xt=({indicator:t="dots",onCancel:e,output:s=process.stdout,cancelMessage:i,errorMessage:n,frames:r=Ss?["\u25D2","\u25D0","\u25D3","\u25D1"]:["\u2022","o","O","0"],delay:o=Ss?80:120,signal:a,...l}={})=>{let c=vi(),d,f,g=!1,$=!1,w="",p,_=performance.now(),S=xt(s),O=l?.styleFrame??Ha,D=z=>{let le=z>1?n??M.messages.error:i??M.messages.cancel;$=z===1,g&&(te(le,z),$&&typeof e=="function"&&e())},W=()=>D(2),V=()=>D(1),ae=()=>{process.on("uncaughtExceptionMonitor",W),process.on("unhandledRejection",W),process.on("SIGINT",V),process.on("SIGTERM",V),process.on("exit",D),a&&a.addEventListener("abort",V)},X=()=>{process.removeListener("uncaughtExceptionMonitor",W),process.removeListener("unhandledRejection",W),process.removeListener("SIGINT",V),process.removeListener("SIGTERM",V),process.removeListener("exit",D),a&&a.removeEventListener("abort",V)},ee=()=>{if(p===void 0)return;c&&s.write(`
|
|
144
|
+
`);let z=Xe(p,S,{hard:!0,trim:!1}).split(`
|
|
145
|
+
`);z.length>1&&s.write(Lt.cursor.up(z.length-1)),s.write(Lt.cursor.to(0)),s.write(Lt.erase.down())},A=z=>z.replace(/\.+$/,""),B=z=>{let le=(performance.now()-z)/1e3,L=Math.floor(le/60),Y=Math.floor(le%60);return L>0?`[${L}m ${Y}s]`:`[${Y}s]`},G=l.withGuide??M.withGuide,P=(z="")=>{g=!0,d=Jn({output:s}),w=A(z),_=performance.now(),G&&s.write(`${(0,u.styleText)("gray",C)}
|
|
146
|
+
`);let le=0,L=0;ae(),f=setInterval(()=>{if(c&&w===p)return;ee(),p=w;let Y=O(r[le]),de;if(c)de=`${Y} ${w}...`;else if(t==="timer")de=`${Y} ${w} ${B(_)}`;else{let Ae=".".repeat(Math.floor(L)).slice(0,3);de=`${Y} ${w}${Ae}`}let me=Xe(de,S,{hard:!0,trim:!1});s.write(me),le=le+1<r.length?le+1:0,L=L<4?L+.125:0},o)},te=(z="",le=0,L=!1)=>{if(!g)return;g=!1,clearInterval(f),ee();let Y=le===0?(0,u.styleText)("green",It):le===1?(0,u.styleText)("red",wi):(0,u.styleText)("red",_i);w=z??w,L||(t==="timer"?s.write(`${Y} ${w} ${B(_)}
|
|
147
|
+
`):s.write(`${Y} ${w}
|
|
148
|
+
`)),X(),d()};return{start:P,stop:(z="")=>te(z,0),message:(z="")=>{w=A(z??w)},cancel:(z="")=>te(z,1),error:(z="")=>te(z,2),clear:()=>te("",0,!0),get isCancelled(){return $}}},Qn={light:re("\u2500","-"),heavy:re("\u2501","="),block:re("\u2588","#")};dr=[`${(0,u.styleText)("dim","\u2191/\u2193")} to navigate`,`${(0,u.styleText)("dim","Enter:")} confirm`],_s=(t,e)=>t.includes(`
|
|
149
|
+
`)?t.split(`
|
|
150
|
+
`).map(s=>e(s)).join(`
|
|
151
|
+
`):e(t),Ze=t=>{let e=(i,n)=>{if(i===void 0)return"";let r=i.label??String(i.value);switch(n){case"disabled":return`${(0,u.styleText)("gray",Ot)} ${_s(r,o=>(0,u.styleText)("gray",o))}${i.hint?` ${(0,u.styleText)("dim",`(${i.hint??"disabled"})`)}`:""}`;case"selected":return`${_s(r,o=>(0,u.styleText)("dim",o))}`;case"active":return`${(0,u.styleText)("green",zt)} ${r}${i.hint?` ${(0,u.styleText)("dim",`(${i.hint})`)}`:""}`;case"cancelled":return`${_s(r,o=>(0,u.styleText)(["strikethrough","dim"],o))}`;default:return`${(0,u.styleText)("dim",Ot)} ${_s(r,o=>(0,u.styleText)("dim",o))}`}},s=t.showInstructions??!0;return new Kn({options:t.options,signal:t.signal,input:t.input,output:t.output,initialValue:t.initialValue,render(){let i=t.withGuide??M.withGuide,n=`${Me(this.state)} `,r=`${Ai(this.state)} `,o=ge(t.output,t.message,r,n),a=`${i?`${(0,u.styleText)("gray",C)}
|
|
152
|
+
`:""}${o}
|
|
153
|
+
`;switch(this.state){case"submit":{let l=i?`${(0,u.styleText)("gray",C)} `:"",c=ge(t.output,e(this.options[this.cursor],"selected"),l);return`${a}${c}`}case"cancel":{let l=i?`${(0,u.styleText)("gray",C)} `:"",c=ge(t.output,e(this.options[this.cursor],"cancelled"),l);return`${a}${c}${i?`
|
|
154
|
+
${(0,u.styleText)("gray",C)}`:""}`}default:{let l=i?`${(0,u.styleText)("cyan",C)} `:"",c=a.split(`
|
|
155
|
+
`).length,d=s?js(dr,i):i?[(0,u.styleText)("cyan",fe)]:[],f=d.join(`
|
|
156
|
+
`),g=d.length+1;return`${a}${l}${yt({output:t.output,cursor:this.cursor,options:this.options,maxItems:t.maxItems,columnPadding:l.length,rowPadding:c+g,style:($,w)=>e($,$.disabled?"disabled":w?"active":"inactive")}).join(`
|
|
157
|
+
${l}`)}
|
|
158
|
+
${f}
|
|
159
|
+
`}}}}).prompt()},Ba=t=>{let e=(s,i="inactive")=>{if(s===void 0)return"";let n=s.label??String(s.value);return i==="selected"?`${(0,u.styleText)("dim",n)}`:i==="cancelled"?`${(0,u.styleText)(["strikethrough","dim"],n)}`:i==="active"?`${(0,u.styleText)(["bgCyan","gray"],` ${s.value} `)} ${n}${s.hint?` ${(0,u.styleText)("dim",`(${s.hint})`)}`:""}`:`${(0,u.styleText)(["gray","bgWhite","inverse"],` ${s.value} `)} ${n}${s.hint?` ${(0,u.styleText)("dim",`(${s.hint})`)}`:""}`};return new vs({options:t.options,signal:t.signal,input:t.input,output:t.output,initialValue:t.initialValue,caseSensitive:t.caseSensitive,render(){let s=t.withGuide??M.withGuide,i=`${s?`${(0,u.styleText)("gray",C)}
|
|
160
|
+
`:""}${Me(this.state)} ${t.message}
|
|
161
|
+
`;switch(this.state){case"submit":{let n=s?`${(0,u.styleText)("gray",C)} `:"",r=this.options.find(a=>a.value===this.value)??t.options[0],o=ge(t.output,e(r,"selected"),n);return`${i}${o}`}case"cancel":{let n=s?`${(0,u.styleText)("gray",C)} `:"",r=ge(t.output,e(this.options[0],"cancelled"),n);return`${i}${r}${s?`
|
|
162
|
+
${(0,u.styleText)("gray",C)}`:""}`}default:{let n=s?`${(0,u.styleText)("cyan",C)} `:"",r=s?(0,u.styleText)("cyan",fe):"",o=this.options.map((a,l)=>ge(t.output,e(a,l===this.cursor?"active":"inactive"),n)).join(`
|
|
147
163
|
`);return`${i}${o}
|
|
148
164
|
${r}
|
|
149
|
-
`}}}}).prompt()},
|
|
150
|
-
${
|
|
151
|
-
${
|
|
152
|
-
`)&&(s=3+(0,
|
|
153
|
-
`))).length);let n=(0,
|
|
154
|
-
${
|
|
155
|
-
`)},info:
|
|
156
|
-
`),
|
|
157
|
-
`);for(let
|
|
158
|
-
`);let l=[{value:"",full:""}],c=!1,
|
|
159
|
-
${
|
|
160
|
-
`).reduce((
|
|
161
|
-
${
|
|
162
|
-
`).map(
|
|
163
|
-
`).map(
|
|
164
|
-
`),
|
|
165
|
-
`),
|
|
166
|
-
`)+
|
|
167
|
-
`))}
|
|
168
|
-
`)}a&&
|
|
169
|
-
`:""}${
|
|
170
|
-
`,i=
|
|
165
|
+
`}}}}).prompt()},er=`${(0,u.styleText)("gray",C)} `,kt={message:async(t,{symbol:e=(0,u.styleText)("gray",C)}={})=>{process.stdout.write(`${(0,u.styleText)("gray",C)}
|
|
166
|
+
${e} `);let s=3;for await(let i of t){i=i.replace(/\n/g,`
|
|
167
|
+
${er}`),i.includes(`
|
|
168
|
+
`)&&(s=3+(0,u.stripVTControlCharacters)(i.slice(i.lastIndexOf(`
|
|
169
|
+
`))).length);let n=(0,u.stripVTControlCharacters)(i).length;s+n<process.stdout.columns?(s+=n,process.stdout.write(i)):(process.stdout.write(`
|
|
170
|
+
${er}${i.trimStart()}`),s=3+(0,u.stripVTControlCharacters)(i.trimStart()).length)}process.stdout.write(`
|
|
171
|
+
`)},info:t=>kt.message(t,{symbol:(0,u.styleText)("blue",Ci)}),success:t=>kt.message(t,{symbol:(0,u.styleText)("green",Oi)}),step:t=>kt.message(t,{symbol:(0,u.styleText)("green",It)}),warn:t=>kt.message(t,{symbol:(0,u.styleText)("yellow",Ii)}),warning:t=>kt.warn(t),error:t=>kt.message(t,{symbol:(0,u.styleText)("red",Ri)})},Ga=async(t,e)=>{for(let s of t){if(s.enabled===!1)continue;let i=Xt(e);i.start(s.title);let n=await s.task(i.message);i.stop(n||s.title)}},Ya=t=>t.replace(/\x1b\[(?:\d+;)*\d*[ABCDEFGHfJKSTsu]|\x1b\[(s|u)/g,""),Ka=t=>{let e=t.output??process.stdout,s=xt(e),i=(0,u.styleText)("gray",C),n=t.spacing??1,r=3,o=t.retainLog===!0,a=!vi()&&tr(e);e.write(`${i}
|
|
172
|
+
`),e.write(`${(0,u.styleText)("green",It)} ${t.title}
|
|
173
|
+
`);for(let _=0;_<n;_++)e.write(`${i}
|
|
174
|
+
`);let l=[{value:"",full:""}],c=!1,d=_=>{if(l.length===0)return;let S=0;_&&(S+=n+2);for(let O of l){let{value:D,result:W}=O,V=W?.message??D;if(V.length===0)continue;W===void 0&&O.header!==void 0&&O.header!==""&&(V+=`
|
|
175
|
+
${O.header}`);let ae=V.split(`
|
|
176
|
+
`).reduce((X,ee)=>ee===""?X+1:X+Math.ceil((ee.length+r)/s),0);S+=ae}S>0&&(S+=1,e.write(Lt.erase.lines(S)))},f=(_,S,O)=>{let D=O?`${_.full}
|
|
177
|
+
${_.value}`:_.value;_.header!==void 0&&_.header!==""&&Ue.message(_.header.split(`
|
|
178
|
+
`).map(W=>(0,u.styleText)("bold",W)),{output:e,secondarySymbol:i,symbol:i,spacing:0}),Ue.message(D.split(`
|
|
179
|
+
`).map(W=>(0,u.styleText)("dim",W)),{output:e,secondarySymbol:i,symbol:i,spacing:S??n})},g=()=>{for(let _ of l){let{header:S,value:O,full:D}=_;(S===void 0||S.length===0)&&O.length===0||f(_,void 0,o===!0&&D.length>0)}},$=(_,S,O)=>{if(d(!1),(O?.raw!==!0||!c)&&_.value!==""&&(_.value+=`
|
|
180
|
+
`),_.value+=Ya(S),c=O?.raw===!0,t.limit!==void 0){let D=_.value.split(`
|
|
181
|
+
`),W=D.length-t.limit;if(W>0){let V=D.splice(0,W);o&&(_.full+=(_.full===""?"":`
|
|
182
|
+
`)+V.join(`
|
|
183
|
+
`))}_.value=D.join(`
|
|
184
|
+
`)}a&&w()},w=()=>{for(let _ of l)_.result?_.result.status==="error"?Ue.error(_.result.message,{output:e,secondarySymbol:i,spacing:0}):Ue.success(_.result.message,{output:e,secondarySymbol:i,spacing:0}):_.value!==""&&f(_,0)},p=(_,S)=>{d(!1),_.result=S,a&&w()};return{message(_,S){$(l[0],_,S)},group(_){let S={header:_,value:"",full:""};return l.push(S),{message(O,D){$(S,O,D)},error(O){p(S,{status:"error",message:O})},success(O){p(S,{status:"success",message:O})}}},error(_,S){d(!0),Ue.error(_,{output:e,secondarySymbol:i,spacing:1}),S?.showLog!==!1&&g(),l.splice(1,l.length-1),l[0].value="",l[0].full=""},success(_,S){d(!0),Ue.success(_,{output:e,secondarySymbol:i,spacing:1}),S?.showLog===!0&&g(),l.splice(1,l.length-1),l[0].value="",l[0].full=""}}},Ee=t=>new ws({validate:t.validate,placeholder:t.placeholder,defaultValue:t.defaultValue,initialValue:t.initialValue,output:t.output,signal:t.signal,input:t.input,render(){let e=t?.withGuide??M.withGuide,s=`${`${e?`${(0,u.styleText)("gray",C)}
|
|
185
|
+
`:""}${Me(this.state)} `}${t.message}
|
|
186
|
+
`,i=t.placeholder&&t.placeholder.length>0?(0,u.styleText)("inverse",t.placeholder[0])+(0,u.styleText)("dim",t.placeholder.slice(1)):(0,u.styleText)(["inverse","hidden"],"_"),n=this.userInput?this.userInputWithCursor:i,r=this.value??"";switch(this.state){case"error":{let o=this.error?` ${(0,u.styleText)("yellow",this.error)}`:"",a=e?`${(0,u.styleText)("yellow",C)} `:"",l=e?(0,u.styleText)("yellow",fe):"";return`${s.trim()}
|
|
171
187
|
${a}${n}
|
|
172
188
|
${l}${o}
|
|
173
|
-
`}case"submit":{let o=r?` ${(0,
|
|
174
|
-
${a}`:""}`}default:{let o=
|
|
189
|
+
`}case"submit":{let o=r?` ${(0,u.styleText)("dim",r)}`:"",a=e?(0,u.styleText)("gray",C):"";return`${s}${a}${o}`}case"cancel":{let o=r?` ${(0,u.styleText)(["strikethrough","dim"],r)}`:"",a=e?(0,u.styleText)("gray",C):"";return`${s}${a}${o}${r.trim()?`
|
|
190
|
+
${a}`:""}`}default:{let o=e?`${(0,u.styleText)("cyan",C)} `:"",a=e?(0,u.styleText)("cyan",fe):"";return`${s}${o}${n}
|
|
175
191
|
${a}
|
|
176
|
-
`}}}}).prompt()});function
|
|
177
|
-
`)}else{for(let x of g)console.log(x);c=!0}}return{start(){n&&(process.stdout.write("\x1B[?25l"),process.on("exit",u)),p(),n&&(o=setInterval(()=>{r++,p()},80))},markDone(g,x){t[g].status="done",x!==void 0&&(t[g].icon=x),n&&p()},stop(){o&&clearInterval(o);for(let g of t)g.status="done";p(),n&&(process.stdout.write("\x1B[?25h"),process.removeListener("exit",u))}}}var M,lr,xe,v,w,Ga,Ya,za,ar,H=De(()=>{"use strict";M=V(J(),1),lr=require("child_process");Ie();xe=process.stdout.isTTY??!1;v={success:M.default.green("\u2713"),error:M.default.red("\u2717"),warning:M.default.yellow("!"),info:M.default.cyan("\u25CF"),arrow:M.default.dim("\u2192"),dot:M.default.dim("\xB7"),dash:M.default.dim("\u2500")},w={domain:e=>M.default.bold(M.default.white(e)),price:e=>M.default.green(`$${e}`),label:e=>M.default.dim(e),value:e=>M.default.white(e),dim:e=>M.default.dim(e),bold:e=>M.default.bold(e),success:e=>M.default.green(e),error:e=>M.default.red(e),warn:e=>M.default.yellow(e),cyan:e=>M.default.cyan(e),url:e=>`\x1B]8;;${e}\x1B\\${M.default.underline(M.default.cyan(e))}\x1B]8;;\x1B\\`};Ga={start:()=>{},stop:()=>{},message:()=>{}};Ya=/\x1b\]8;;[^\x1b]*\x1b\\|\x1b\[[0-9;]*m/g;za={auth_required:"domani login",payment_required:"domani card add",contact_required:"domani contact set"};ar=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"]});function pr(e){return e.json=async()=>{let t=await e.clone().text();try{return JSON.parse(t)}catch{return{error:`Server error (${e.status})`,hint:"The server returned an unexpected response. Try again later."}}},e}async function S(e,t={}){let s=bt(),i=`${Xe()}${e}`,n=await fetch(i,{...t,headers:{Authorization:`Bearer ${s}`,"Content-Type":"application/json","User-Agent":`domani-cli/${_e}`,...t.headers}});return pr(n)}async function $e(e,t={}){let s=`${Xe()}${e}`,i=bt(),n=await fetch(s,{...t,headers:{"Content-Type":"application/json","User-Agent":`domani-cli/${_e}`,...i?{Authorization:`Bearer ${i}`}:{},...t.headers}});return pr(n)}var Q=De(()=>{"use strict";pt()});function $t(){return{ok:!0}}function at(e,t,s){return{ok:!1,error:{message:e,code:t,hint:s}}}function $r(e){return Za.test(e)?at("Input contains control characters","invalid_input","Remove non-printable characters from the input"):$t()}function nl(e){return Qa.test(e)?at("Input contains path traversal","invalid_input","Domain names cannot contain '../' or '..\\'"):$t()}function rl(e){return el.test(e)?at("Input contains query string or fragment","invalid_input","Remove '?' or '#' from the domain name"):$t()}function ol(e){return tl.test(e)?at("Input contains percent-encoded characters","invalid_input","Use plain text, not URL-encoded values (e.g. 'example.com' not 'example%2Ecom')"):$t()}function yr(e){if(!e)return at("Domain name is required","validation_error");if(e.length>gr)return at(`Domain name too long (${e.length} chars, max ${gr})`,"validation_error");for(let t of[$r,nl,rl,ol]){let s=t(e);if(!s.ok)return s}return sl.test(e)?$t():at(`Invalid domain name: ${e}`,"validation_error","Domain names can only contain letters, digits, hyphens, and dots")}function al(e){if(!e)return at("TLD is required","validation_error");let t=$r(e);return t.ok?il.test(e)?$t():at(`Invalid TLD: ${e}`,"validation_error","TLDs contain only letters (e.g. 'com', '.dev', 'ai')"):t}function ll(e){for(let t of e){let s=yr(t);if(!s.ok)return s}return $t()}function cl(e){for(let t of e){let s=al(t);if(!s.ok)return s}return $t()}function ee(e,t){let s=yr(e);s.ok||h(s.error.message,{code:s.error.code,hint:s.error.hint,json:t?.json,fields:t?.fields})}function br(e,t){let s=ll(e);s.ok||h(s.error.message,{code:s.error.code,hint:s.error.hint,json:t?.json,fields:t?.fields})}function Is(e,t){let s=cl(e);s.ok||h(s.error.message,{code:s.error.code,hint:s.error.hint,json:t?.json,fields:t?.fields})}var Za,Qa,el,tl,sl,il,gr,ye=De(()=>{"use strict";H();Za=/[\x00-\x08\x0b\x0c\x0e-\x1f]/,Qa=/\.\.[/\\]/,el=/[?#]/,tl=/%[0-9a-fA-F]{2}/,sl=/^[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?(\.[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?)*\.?$/,il=/^\.?[a-zA-Z]{2,63}$/,gr=253});async function ue(){xe||h("Missing required argument: domain",{hint:"Pass the domain as an argument, e.g. 'domani settings example.com'",code:"missing_argument",json:!0});let e=j(!0);e.start("Loading your domains");let t=await S("/api/domains"),s=await t.json();t.ok||(e.stop("Failed"),Ui(s.error,s.hint),process.exit(1));let i=s.domains||[];i.length===0&&(e.stop("No domains"),d(),console.log(` ${Wi.default.dim("No domains yet.")} Use: ${Wi.default.cyan("domani buy <domain>")}`),d(),process.exit(0)),e.stop(`${i.length} domain(s)`);let n=await Ye({message:"Which domain?",options:i.map(r=>({value:r.domain,label:r.domain,hint:r.status!=="active"?r.status:void 0}))});return oe(n)&&process.exit(0),n}var Wi,Je=De(()=>{"use strict";Q();Ie();Wi=V(J(),1);H()});var wr={};It(wr,{connect:()=>Hi});async function Hi(e,t,s){e||(e=await ue()),ee(e,s);let i;if(t&&!s.provider?t.includes(".")?i=t:s.provider=t:i=t,!i&&!s.provider&&!s.list&&s.dryRun)return z("connect",{domain:e,note:"No provider specified. Pass --provider <name> to connect."},s.json,s.fields);if(!i&&!s.provider&&!s.list){let n=j(!s.json);n.start(`Loading providers for ${w.domain(e)}`);let r=await S(`/api/domains/${encodeURIComponent(e)}/connect`),o=await r.json();if(r.ok||(n.stop("Failed"),h(o.error||o.message,{hint:o.hint,status:r.status,json:s.json,fields:s.fields})),n.stop("Providers loaded"),s.json){k(o,s.fields);return}let a=[];for(let f of["hosting","email"]){let b=o.providers?.[f]||[];for(let _ of b)a.push({value:`${f}:${_.name}`,label:_.name,hint:f})}a.length===0&&h("No providers available",{code:"not_found",json:s.json,fields:s.fields});let l=await Ye({message:"Choose a provider",options:a});oe(l)&&process.exit(0);let[c,u]=l.split(":"),g=(o.providers?.[c]||[]).find(f=>f.name===u),x;if(g&&g.methods.length>1){let f=await Ye({message:"Choose a method",options:g.methods.map(b=>({value:b.name,label:b.name,hint:b.default?"default":void 0}))});oe(f)&&process.exit(0),x=f}let y;if(c==="hosting"&&g?.requires_target){g.notes?.setup&&Ut(g.notes.setup);let f=await Re({message:"Target hostname or IP"});oe(f)&&process.exit(0),y=f.trim()}return vr(e,{target:y,provider:u,method:x,dryRun:s.dryRun,json:!1})}if(s.list){let n=j(!s.json);n.start(`Loading providers for ${w.domain(e)}`);let r=await S(`/api/domains/${encodeURIComponent(e)}/connect`),o=await r.json();if(r.ok||(n.stop("Failed"),h(o.error||o.message,{hint:o.hint,status:r.status,json:s.json,fields:s.fields})),n.stop("Providers loaded"),s.json){k(o,s.fields);return}R(`Providers for ${w.domain(o.domain)}`);for(let a of["hosting","email"]){let l=o.providers?.[a];if(l?.length){d(),console.log(` ${ce.default.bold(a.toUpperCase())}`);for(let c of l){let u=c.methods.map(p=>p.default?ce.default.green(`${p.name} (default)`):ce.default.dim(p.name)).join(ce.default.dim(", "));console.log(` ${ce.default.cyan(c.name.padEnd(20))} ${u}`)}}}d();return}return vr(e,s)}async function vr(e,t){let s={};if(t.target&&(s.target=t.target),t.provider&&(s.provider=t.provider),t.method&&(s.method=t.method),t.dryRun)return z("connect",{domain:e,...s},t.json,t.fields);let i=j(!t.json);i.start(`Connecting ${w.domain(e)}`);let n=await S(`/api/domains/${encodeURIComponent(e)}/connect`,{method:"POST",body:JSON.stringify(s)}),r=await n.json();n.ok||(i.stop("Connection failed"),h(r.error||r.message,{hint:r.hint,status:n.status,json:t.json,fields:t.fields}));let o=r.status==="manual_setup_required";if(i.stop(o?`${v.success} DNS instructions for ${ce.default.cyan(r.provider)}`:`${v.success} Connected to ${ce.default.cyan(r.provider)}`),t.json){k(r,t.fields);return}if(R(o?`Add these records at your registrar for ${w.domain(r.domain)}`:`Connected ${w.domain(r.domain)}`),$("Provider",ce.default.cyan(r.provider)),$("Method",r.method),r.records?.length){let a=[8,22,40];d(),console.log(` ${ce.default.bold("DNS Records")}`);let l=["Type","Name","Value"].map((u,p)=>ce.default.dim(u.padEnd(a[p]))).join(" "),c=a.map(u=>ce.default.dim("\u2500".repeat(u))).join(" ");console.log(` ${l}`),console.log(` ${c}`);for(let u of r.records){let p=u.record,g=u.status!=="already_set";process.stdout.isTTY&&g&&await Ot(50);let y=[ce.default.yellow(p.type),p.name,ce.default.cyan(p.value)+(p.priority?ce.default.dim(` pri=${p.priority}`):"")].map((_,C)=>Es(_,a[C])).join(" "),f=u.status==="already_set"?ce.default.dim("\u2713"):u.status==="updated"?ce.default.yellow("\u21BA"):u.status==="pending"?ce.default.yellow("\u2192"):v.success,b=u.status==="already_set"?ce.default.dim(" already set"):u.status==="updated"?ce.default.dim(" updated"):u.status==="pending"?ce.default.dim(" add this"):"";console.log(` ${f} ${y}${b}`)}}d(),r.next_steps?.length?(console.log(` ${ce.default.bold("Next steps")}`),r.next_steps.forEach((a,l)=>{console.log(` ${ce.default.dim(`${l+1}.`)} ${a}`)})):r.hint&&console.log(` ${ce.default.dim(r.hint)}`),r.docs&&console.log(` ${ce.default.dim("Docs:")} ${w.url(r.docs)}`),d()}var ce,Ji=De(()=>{"use strict";Q();ce=V(J(),1);Ie();H();ye();Je()});var Cr={};It(Cr,{email:()=>Qt});function ml(e){return[N.default.yellow(e.type),e.name,N.default.cyan(e.value)+(e.priority?N.default.dim(` pri=${e.priority}`):"")]}function Bi(e){return ul[e]||e}function fl(e,t){if(e&&e.includes("@")){let[s,i]=e.split("@",2);!t.slug&&s&&(t.slug=s),!t.domain&&i&&(t.domain=i)}}async function lt(e){return e.domain?(ee(e.domain,e),e.domain):ue()}async function Qt(e,t,s){if(e&&e.includes(".")&&!dl.includes(e))return s.check?xr(e,!!s.json,s.fields):t?kr(e,t,!!s.json,s.fields):jr(e,!!s.json,s.fields);if(fl(t,s),s.body&&!s.text&&(s.text=s.body),s.title&&!s.subject&&(s.subject=s.title),s.from&&s.from.includes("@")){let[i,n]=s.from.split("@",2);!s.slug&&i&&(s.slug=i),!s.domain&&n&&(s.domain=n)}switch(e){case void 0:return _r(s);case"list":return _r(s);case"inbox":return vl(s);case"setup":return pl(s);case"status":return hl(s);case"remove":return gl(s);case"create":return $l(s);case"delete":return yl(s);case"send":return bl(s);case"webhook":return wl(s);case"forward":return _l(s);case"check":return xr(s.domain||await ue(),!!s.json,s.fields);case"connect":return kr(s.domain||await ue(),t||void 0,!!s.json,s.fields);default:h(`Unknown action: ${e}`,{hint:"Actions: list, inbox, create, delete, send, forward, webhook, setup, status, check, connect",code:"validation_error",json:s.json,fields:s.fields})}}async function pl(e){let t=await lt(e);if(e.dryRun)return z("email_setup",{domain:t},e.json,e.fields);let s=j(!e.json);s.start(`Setting up email on ${w.domain(t)}`);let i=await S(`/api/domains/${encodeURIComponent(t)}/email/setup`,{method:"POST"}),n=await i.json();if(i.ok||(s.stop("Failed"),h(n.error||n.message,{hint:n.hint,status:i.status,json:e.json,fields:e.fields})),s.stop(`${v.success} Email ${n.status==="already_configured"?"already configured":"configured"}`),e.json){k(n,e.fields);return}if(n.records?.length){d(),R(`Email DNS Records ${w.domain(t)}`);let r=n.records.map(o=>[N.default.yellow(o.type),o.name,o.value.length>40?o.value.slice(0,40)+"...":o.value,o.status==="verified"||o.status==="created"?N.default.green(o.status):N.default.yellow(o.status)]);me(["Type","Name","Value","Status"],r,[8,28,44,12])}d(),n.hint&&Ut(n.hint),O("Check status:",`domani email status --domain ${t}`),d()}async function hl(e){let t=await lt(e),s=j(!e.json);s.start(`Checking email status for ${w.domain(t)}`);let i=await S(`/api/domains/${encodeURIComponent(t)}/email/status`),n=await i.json();if(i.ok||(s.stop("Failed"),h(n.error||n.message,{hint:n.hint,status:i.status,json:e.json,fields:e.fields})),s.stop(`${v.success} Status loaded`),e.json){k(n,e.fields);return}if(R(`Email ${w.domain(t)}`),$("Enabled",n.enabled?N.default.green("yes"):N.default.dim("no")),n.enabled&&($("Verified",n.verified?N.default.green("yes"):N.default.yellow("pending")),$("Mailboxes",String(n.mailbox_count))),d(),!n.enabled)O("Set up email:",`domani email setup --domain ${t}`),d();else if(!n.verified&&n.records?.length){console.log(` ${N.default.yellow("!")} Add these DNS records to verify:`);for(let r of n.records)console.log(` ${N.default.yellow(r.type)} ${r.name} ${N.default.dim("\u2192")} ${r.value.length>50?r.value.slice(0,50)+"...":r.value}`);d()}}async function gl(e){let t=await lt(e);if(e.dryRun)return z("email_remove",{domain:t},e.json,e.fields);let s=j(!e.json);s.start(`Removing email from ${w.domain(t)}`);let i=await S(`/api/domains/${encodeURIComponent(t)}/email/setup`,{method:"DELETE"}),n=await i.json();if(i.ok||(s.stop("Failed"),h(n.error||n.message,{hint:n.hint,status:i.status,json:e.json,fields:e.fields})),s.stop(`${v.success} Email disabled`),e.json){k(n,e.fields);return}n.mailboxes_deleted>0&&console.log(` ${N.default.dim(`${n.mailboxes_deleted} mailbox(es) deleted.`)}`),d()}async function _r(e){let t=j(!e.json);t.start("Loading mailboxes");let s=e.domain?`?domain=${encodeURIComponent(e.domain)}`:"",i=await S(`/api/emails${s}`),n=await i.json();i.ok||(t.stop("Failed"),h(n.error||n.message,{hint:n.hint,status:i.status,json:e.json,fields:e.fields}));let r=n.mailboxes||[];if(t.stop(`${v.success} ${r.length} mailbox(es)`),e.json){k(n,e.fields);return}if(r.length===0){d(),console.log(` ${N.default.dim("No mailboxes.")}`),d(),O("Create one:","domani email create hello@example.com"),d();return}d(),R("Mailboxes");let o=r.map(a=>[N.default.cyan(a.address),String(a.message_count),a.webhook_url?w.url(a.webhook_url):N.default.dim("-"),N.default.dim(new Date(a.created_at).toLocaleDateString())]);me(["Address","Messages","Webhook","Created"],o,[32,10,36,14]),d()}async function $l(e){let t=await lt(e);if(e.dryRun)return z("email_create_mailbox",{domain:t,slug:e.slug},e.json,e.fields);let s=e.slug;if(!s&&!e.json){let c=await Re({message:`Email handle for @${t}:`,placeholder:"hello"});oe(c)&&process.exit(0),s=c}s||h("Slug required",{hint:`Usage: domani email create hello@${t}`,code:"validation_error",json:e.json,fields:e.fields});let i=`${s}@${t}`,n=j(!e.json);n.start("Creating mailbox");let r=await S("/api/emails",{method:"POST",body:JSON.stringify({address:i})}),o=await r.json();if(r.status===202&&!e.json){n.stop("");let c=o.txt_record,u=o.email_records||[],p=[{type:"TXT",name:c?.name||"@",value:c?.value||"",note:"ownership proof"},...u];d(),console.log(" Add these records at your DNS provider:"),d();for(let _ of p){let C=_.priority!==void 0?` ${N.default.dim(`priority: ${_.priority}`)}`:"",A=_.note?` ${N.default.dim(`(${_.note})`)}`:"";console.log(` ${N.default.yellow(_.type)} ${N.default.bold(_.name)}${C}${A}`),console.log(` ${N.default.dim("\u2192")} ${N.default.cyan(_.value)}`),d()}Ut("DNS propagation typically takes 5\u201330 minutes. Checking automatically..."),d();let g=p.map(_=>({cells:[N.default.yellow(_.type),_.name,_.note?N.default.dim(`(${_.note})`):""],status:"pending"})),x=Rt(["Type","Name",""],g,[6,24,16]);x.start();let y=0;for(;r.status===202&&y<60;)await Ot(15e3),y++,r=await S("/api/emails",{method:"POST",body:JSON.stringify({address:i})}),o=await r.json(),r.status!==202&&!r.ok&&(x.stop(),h(o.error||o.message,{hint:o.hint,status:r.status,json:e.json,fields:e.fields}));r.status===202&&(x.stop(),h("TXT record not detected after 15 minutes.",{hint:`Check the record is set, then retry: domani email create ${i}`,code:"timeout",json:e.json,fields:e.fields})),x.markDone(0);let f=_=>`${_.type}:${_.name}`,b=new Map;p.slice(1).forEach((_,C)=>b.set(f(_),C+1));for(let _=0;_<60;_++){await Ot(15e3);let C=await S(`/api/domains/${encodeURIComponent(t)}/email/status`),A=await C.json();if(C.ok&&A.records){for(let F of A.records)if(F.status==="verified"||F.status==="created"){let L=b.get(f(F));L!==void 0&&x.markDone(L)}}if(C.ok&&A.verified)break}x.stop(),d()}if(r.ok||(n.stop("Failed"),h(o.error||o.message,{hint:o.hint,status:r.status,json:e.json,fields:e.fields})),n.stop(`${v.success} ${N.default.cyan(o.address)} created`),e.json){k(o,e.fields);return}let a=await S(`/api/domains/${encodeURIComponent(t)}/email/status`),l=await a.json();d(),a.ok&&l.verified?(O("Read inbox:",`domani email inbox ${o.address}`),O("Web inbox:",`${Ht}/inbox?address=${encodeURIComponent(o.address)}`)):(O("Check propagation:",`domani email status --domain ${t}`),O("Web inbox:",`${Ht}/inbox?address=${encodeURIComponent(o.address)}`)),d()}async function yl(e){let t=await lt(e);if(e.slug||h("Slug required",{hint:"Usage: domani email delete hello@example.com",code:"validation_error",json:e.json,fields:e.fields}),e.dryRun)return z("email_delete_mailbox",{domain:t,address:`${e.slug}@${t}`},e.json,e.fields);let s=j(!e.json);s.start(`Deleting ${e.slug}@${t}`);let i=encodeURIComponent(`${e.slug}@${t}`),n=await S(`/api/emails/${i}`,{method:"DELETE",body:JSON.stringify({confirm:!0})}),r=await n.json();if(n.ok||(s.stop("Failed"),h(r.error||r.message,{hint:r.hint,status:n.status,json:e.json,fields:e.fields})),s.stop(`${v.success} Mailbox deleted`),e.json){k(r,e.fields);return}console.log(` ${N.default.dim(`${r.address} and all messages deleted.`)}`),d()}async function bl(e){let t=await lt(e);if(e.slug||h("Slug required",{hint:'Usage: domani email send hello@example.com --to user@test.com --subject "Hi" --body "Hello"',code:"validation_error",json:e.json,fields:e.fields}),e.to||h("Recipient required",{hint:"Usage: domani email send hello@example.com --to user@test.com",code:"validation_error",json:e.json,fields:e.fields}),e.dryRun)return z("email_send",{from:`${e.slug}@${t}`,to:e.to,subject:e.subject},e.json,e.fields);let s=j(!e.json);s.start(`Sending from ${e.slug}@${t}`);let i={to:e.to};e.cc&&(i.cc=e.cc),e.bcc&&(i.bcc=e.bcc),e.subject&&(i.subject=e.subject),e.text&&(i.text=e.text),e.inReplyTo&&(i.in_reply_to=e.inReplyTo),e.references&&(i.references=e.references);let n=encodeURIComponent(`${e.slug}@${t}`),r=await S(`/api/emails/${n}/send`,{method:"POST",body:JSON.stringify(i)}),o=await r.json();if(!r.ok){s.stop("Failed");let l=o.code==="MONTHLY_LIMIT_EXCEEDED"?`Run ${N.default.cyan("domani upgrade")} to switch to Pro (10,000 emails/month).`:o.hint;h(o.error||o.message,{hint:l,status:r.status,json:e.json,fields:e.fields})}let a=Array.isArray(o.to)?o.to.join(", "):o.to;if(s.stop(`${v.success} Sent to ${N.default.cyan(a)}`),e.json){k(o,e.fields);return}}async function vl(e){let t=await lt(e);e.slug||h("Slug required",{hint:"Usage: domani email inbox hello@example.com [--direction in|out] [--limit 20]",code:"validation_error",json:e.json,fields:e.fields});let s=new URLSearchParams;e.direction&&s.set("direction",e.direction),e.limit&&s.set("limit",e.limit);let i=s.toString()?`?${s}`:"",n=j(!e.json);n.start(`Loading messages for ${e.slug}@${t}`);let r=encodeURIComponent(`${e.slug}@${t}`),o=await S(`/api/emails/${r}/messages${i}`),a=await o.json();o.ok||(n.stop("Failed"),h(a.error||a.message,{hint:a.hint,status:o.status,json:e.json,fields:e.fields}));let l=a.messages||[];if(e.json){n.stop(`${v.success} ${l.length} message(s)`),k(a,e.fields);return}if(l.length===0){n.stop(`${N.default.dim("No messages")}`);return}let c=l.length>1?"s":"";n.stop(`${v.success} ${N.default.cyan(`${e.slug}@${t}`)} ${N.default.dim("\xB7 "+l.length+" message"+c)}`);for(let u of l){let p=u.direction==="in"?N.default.green("in "):N.default.dim("out"),g=u.direction==="in"?u.from:u.to,x=u.subject||"(no subject)",y=N.default.dim(new Date(u.created_at).toLocaleString()),f=x;if(u.text){let b=u.text.replace(/\s+/g," ").trim(),_=b.length>60?b.slice(0,60)+"\u2026":b;f=`${x} ${N.default.dim("- "+_)}`}console.log(` ${p} ${g.padEnd(30)} ${f} ${y}`)}a.next_cursor&&console.log(` ${N.default.dim("\u2026 more available, use --limit to paginate")}`)}async function wl(e){let t=await lt(e);e.slug||h("Slug required",{hint:"Usage: domani email webhook hello@example.com --url https://...",code:"validation_error",json:e.json,fields:e.fields});let s=`${e.slug}@${t}`,i=encodeURIComponent(s);if(e.dryRun)return z("email_webhook",{address:s,webhook_url:e.url||null},e.json,e.fields);let n=j(!e.json);if(e.url){n.start(`Setting webhook for ${s}`);let r=await S(`/api/emails/${i}/webhook`,{method:"PUT",body:JSON.stringify({url:e.url})}),o=await r.json();if(r.ok||(n.stop("Failed"),h(o.error||o.message,{hint:o.hint,status:r.status,json:e.json,fields:e.fields})),n.stop(`${v.success} Webhook set`),e.json){k(o,e.fields);return}R(`Mailbox ${o.address}`),$("Webhook",w.url(o.webhook_url)),$("Signing secret",N.default.dim(o.signing_secret)),d()}else{n.start(`Removing webhook for ${s}`);let r=await S(`/api/emails/${i}/webhook`,{method:"DELETE"}),o=await r.json();if(r.ok||(n.stop("Failed"),h(o.error||o.message,{hint:o.hint,status:r.status,json:e.json,fields:e.fields})),n.stop(`${v.success} Webhook removed`),e.json){k(o,e.fields);return}R(`Mailbox ${o.address}`),$("Webhook",N.default.dim("none")),d()}}async function _l(e){let t=await lt(e);if(e.slug||h("Slug required",{hint:"Usage: domani email forward hello@example.com --forward-to me@gmail.com",code:"validation_error",json:e.json,fields:e.fields}),e.dryRun)return z("email_forward",{address:`${e.slug}@${t}`,forward_to:e.forwardTo||null},e.json,e.fields);let s=j(!e.json),i=e.forwardTo||null;s.start(`Updating forward for ${e.slug}@${t}`);let n=encodeURIComponent(`${e.slug}@${t}`),r=await S(`/api/emails/${n}`,{method:"PATCH",body:JSON.stringify({forward_to:i})}),o=await r.json();if(r.ok||(s.stop("Failed"),h(o.error||o.message,{hint:o.hint,status:r.status,json:e.json,fields:e.fields})),s.stop(`${v.success} Forward ${i?"set":"removed"}`),e.json){k(o,e.fields);return}R(`Mailbox ${o.address}`),$("Forward to",o.forward_to?N.default.cyan(o.forward_to):N.default.dim("none")),d()}async function xr(e,t,s){let i=j(!t);i.start(`Checking email health for ${w.domain(e)}`);let n=await S(`/api/domains/${encodeURIComponent(e)}/email/check`),r=await n.json();if(n.ok||(i.stop("Failed"),h(r.error||r.message,{hint:r.hint,status:n.status,json:t,fields:s})),i.stop("Email health checked"),t){k(r,s);return}if(R(`Email Health ${w.domain(r.domain)}`),r.provider?$("Provider",N.default.cyan(Bi(r.provider))):$("Provider",N.default.dim("unknown")),r.mx.configured?$("MX",`${v.success} ${N.default.green("propagated")} ${N.default.dim(`(${r.mx.records.length} record${r.mx.records.length!==1?"s":""})`)}`):$("MX",`${v.error} ${N.default.red("not configured")}`),r.spf.configured?$("SPF",`${v.success} ${N.default.green(r.spf.value)}`):$("SPF",`${v.error} ${N.default.red("missing")}`),r.dmarc.configured){let o=r.dmarc.value.length>50?r.dmarc.value.slice(0,50)+"...":r.dmarc.value;$("DMARC",`${v.success} ${N.default.green(o)}`)}else $("DMARC",`${v.error} ${N.default.red("missing")}`);r.dkim.configured?$("DKIM",`${v.success} ${N.default.green("found")} ${N.default.dim(`(${r.dkim.selectors.join(", ")})`)}`):$("DKIM",`${v.warning} ${N.default.yellow("not found")}`),d(),r.mx.configured?(!r.spf.configured||!r.dmarc.configured)&&(Ut("SPF and DMARC protect against email spoofing. Re-run email setup to add them."),d()):(O("Set up email:",`domani email ${e} google`),d())}async function kr(e,t,s,i){return t?Sr(e,t,s,i):jr(e,s,i)}async function jr(e,t,s){let i=j(!t);i.start("Loading email providers");let n=await S(`/api/domains/${encodeURIComponent(e)}/connect`),r=await n.json();n.ok||(i.stop("Failed"),h(r.error||r.message,{hint:r.hint,status:n.status,json:t,fields:s})),i.stop("Providers loaded");let o=r.providers?.email||[];o.length===0&&h("No email providers available",{code:"not_found",json:t,fields:s});let a=await Ye({message:"Choose an email provider",options:o.map(l=>({value:l.name,label:Bi(l.name)}))});return oe(a)&&process.exit(0),Sr(e,a,t,s)}async function Sr(e,t,s,i){if(s){let c=await S(`/api/domains/${encodeURIComponent(e)}/connect`,{method:"POST",body:JSON.stringify({target:t})}),u=await c.json();c.ok||h(u.error||u.message,{hint:u.hint,status:c.status,json:s,fields:i}),k(u,i);return}let n=await S(`/api/domains/${encodeURIComponent(e)}/connect?provider=${encodeURIComponent(t)}`);if(!n.ok){let c=await n.json();h(c.error||c.message,{hint:c.hint,status:n.status,json:s,fields:i})}let r=await n.json(),o=r.preview?.records??[],a=r.preview?.provider??t,l=Bi(a);if(R(`Email ${w.domain(e)}`),$("Provider",N.default.cyan(l)),o.length){d(),console.log(` ${N.default.bold("DNS Records")}`);let c=[8,24,40],u=Rt(["Type","Name","Value"],o.map(_=>({cells:ml(_),status:"pending"})),c);u.start();let p=await S(`/api/domains/${encodeURIComponent(e)}/connect`,{method:"POST",body:JSON.stringify({target:t})}),g=await p.json();p.ok||(u.stop(),d(),h(g.error||g.message,{hint:g.hint,status:p.status,json:s,fields:i}));let x=g.records||[];for(let _=0;_<o.length;_++)x.find(A=>A.record.type===o[_].type&&A.record.name===o[_].name&&A.record.value===o[_].value)?.status==="already_set"||await Ot(60),u.markDone(_);await Ot(80),u.stop();let y=x.filter(_=>_.status==="created"||_.status==="updated").length,f=x.filter(_=>_.status==="already_set").length,b;f===x.length?b=`All ${f} records already set`:f>0?b=`${y} created, ${f} already set`:b=`${y} DNS records set`,d(),console.log(` ${v.success} ${N.default.green(`Email configured - ${b}`)}`)}else{let c=j(!0);c.start("Setting DNS records");let u=await S(`/api/domains/${encodeURIComponent(e)}/connect`,{method:"POST",body:JSON.stringify({target:t})}),p=await u.json();u.ok||(c.stop("Failed"),h(p.error||p.message,{hint:p.hint,status:u.status,json:s,fields:i})),c.stop(`${v.success} Email configured via ${N.default.cyan(l)}`)}d(),O("Verify propagation:",`domani email ${e} --check`),d()}var N,dl,ul,Gi=De(()=>{"use strict";Q();Jt();N=V(J(),1);Ie();H();ye();Je();dl=["setup","status","remove","list","create","delete","send","inbox","webhook","forward","check","connect"],ul={"google-workspace":"Google Workspace",fastmail:"Fastmail",proton:"Proton Mail"}});var Or={};It(Or,{dns:()=>Ki});async function Ki(e,t,s,i,n,r){e||(e=await ue()),ee(e,r);let o=r?.json??!1,a=r?.type||s,l=r?.name||i,c=r?.value||n;if(!t||t==="get"){let u=j(!o);u.start(`Loading DNS for ${w.domain(e)}`);let p=await S(`/api/domains/${encodeURIComponent(e)}/dns`),g=await p.json();if(p.ok||(u.stop("Failed"),h(g.error||g.message,{hint:g.hint,status:p.status,json:o,fields:r?.fields})),u.stop(`${g.records.length} record(s)`),o){k(g,r?.fields);return}if(g.records.length===0){d(),console.log(` ${ke.default.dim(`No DNS records for ${e}`)}`),d(),O("Auto-configure DNS:",`domani connect ${e}`),d();return}let x=[8,24,40,8];R(`DNS ${w.domain(e)}`,x.reduce((f,b)=>f+b,0)+x.length-1);let y=g.records.map(f=>{let b=f.priority?ke.default.dim(` pri=${f.priority}`):"";return[ke.default.yellow(f.type),f.name,ke.default.cyan(f.value)+b,ke.default.dim(String(f.ttl))]});me(["Type","Name","Value","TTL"],y,x),d();return}if(t==="set"){if((!a||!l||!c)&&h("Missing arguments for dns set",{hint:"Usage: domani dns <domain> set --type A --name www --value 1.2.3.4",code:"validation_error",json:o,fields:r?.fields}),r?.dryRun)return z("dns_set",{domain:e,record:{type:a.toUpperCase(),name:l,value:c,ttl:3600}},o,r?.fields);let u=j(!o);u.start(`Setting ${ke.default.yellow(a.toUpperCase())} record`);let p=await S(`/api/domains/${encodeURIComponent(e)}/dns`),g=await p.json(),y=(p.ok?g.records:[]).filter(_=>!(_.type===a.toUpperCase()&&_.name===l));y.push({type:a.toUpperCase(),name:l,value:c,ttl:3600});let f=await S(`/api/domains/${encodeURIComponent(e)}/dns`,{method:"PUT",body:JSON.stringify({records:y})}),b=await f.json();f.ok||(u.stop("Failed"),h(b.error||b.message,{hint:b.hint,status:f.status,json:o,fields:r?.fields})),u.stop(`${v.success} ${ke.default.yellow(a.toUpperCase())} ${l} ${v.arrow} ${ke.default.cyan(c)}`),o?k(b,r?.fields):(d(),O("Check propagation:",`domani status ${e}`),d());return}if(t==="delete"){if((!a||!l)&&h("Missing arguments for dns delete",{hint:"Usage: domani dns <domain> delete --type A --name www",code:"validation_error",json:o,fields:r?.fields}),r?.dryRun)return z("dns_delete",{domain:e,record:{type:a.toUpperCase(),name:l}},o,r?.fields);let u=j(!o);u.start(`Deleting ${ke.default.yellow(a.toUpperCase())} ${l}`);let p=await S(`/api/domains/${encodeURIComponent(e)}/dns?type=${encodeURIComponent(a.toUpperCase())}&name=${encodeURIComponent(l)}`,{method:"DELETE"}),g=await p.json();p.ok||(u.stop("Failed"),h(g.error||g.message,{hint:g.hint,status:p.status,json:o,fields:r?.fields})),u.stop(`${v.success} Deleted ${ke.default.yellow(a.toUpperCase())} ${l}`),o?k(g,r?.fields):(d(),O("Check propagation:",`domani status ${e}`),d());return}if(t==="snapshot"){if(r?.dryRun)return z("dns_snapshot",{domain:e},o,r?.fields);let u=j(!o);u.start(`Capturing DNS snapshot for ${w.domain(e)}`);let p=await S(`/api/domains/${encodeURIComponent(e)}/dns/snapshot`,{method:"POST"}),g=await p.json();p.ok||(u.stop("Failed"),h(g.error||g.message,{hint:g.hint,status:p.status,json:o,fields:r?.fields}));let x=g.records?.length??0;if(u.stop(`${v.success} Captured ${x} record(s)`),o){k(g,r?.fields);return}let y=`${e}.dns.json`,f=(0,Yi.resolve)(process.cwd(),y);(0,Ts.writeFileSync)(f,JSON.stringify(g,null,2)+`
|
|
178
|
-
`),R("DNS Snapshot")
|
|
179
|
-
`);o=g.pop()??"";for(let
|
|
180
|
-
`);a=p.pop()??"";for(let g of p)if(g.startsWith("event: "))l=g.slice(7).trim();else if(g.startsWith("data: ")){let x=JSON.parse(g.slice(6));l==="checking"?i.message(`Checking ${w.domain(x.domain)}`):l==="payment"?i.message(`Charging ${w.price(x.total)}`):l==="registering"?i.message(`Registering ${w.domain(x.domain)}`):l==="registered"?r=x:l==="error"&&(i.stop("Purchase failed"),h(x.error,{hint:x.hint,fixUrl:x.setup_url,status:n.status,json:t.json,fields:t.fields}))}}let c=r.expires?Te.default.dim(` \xB7 expires ${new Date(r.expires).toLocaleDateString()}`):"";if(i.stop(`${v.success} ${w.domain(r.domain)} is yours!${c}`),t.json){k(r,t.fields);return}xe?await Qi(r.domain):(O("Connect to a service:",`domani connect ${r.domain}`),O("Set up email:",`domani email setup ${r.domain}`),O("Configure DNS:",`domani dns ${r.domain}`),d())}async function Sl(e,t){br(e,t);let s=!!t.json,i=j(!s);i.start(`Checking ${e.length} domains`);let n=await Promise.all(e.map(async f=>{try{let b=await S(`/api/domains/search?q=${encodeURIComponent(f)}`),_=await b.json();return{domain:f,available:b.ok&&_.available,price:_.price}}catch{return{domain:f,available:!1,price:void 0}}})),r=n.filter(f=>f.available),o=n.filter(f=>!f.available);r.length===0&&(i.stop(`${v.error} None of the ${e.length} domains are available`),process.exit(1));let a=r.reduce((f,b)=>f+(b.price||0),0);if(i.stop(`${v.success} ${r.length}/${e.length} available ${v.dot} ${w.price(a.toFixed(2))} total`),o.length>0)for(let f of o)console.log(` ${v.error} ${w.domain(f.domain)} ${Te.default.dim("not available")}`);if(t.dryRun)return z("buy_bulk",{domains:r.map(f=>({domain:f.domain,price:f.price})),unavailable:o.map(f=>f.domain),total_price:parseFloat(a.toFixed(2))},t.json,t.fields);if(!Ct(t)){let f=await We({message:`Purchase ${Te.default.bold(String(r.length))} domain${r.length>1?"s":""} for ${w.price(a.toFixed(2))}?`});if(!f||typeof f=="symbol"){console.log(` ${Te.default.dim("Cancelled.")}`);return}}d();let l=r.map(f=>({cells:[w.domain(f.domain),f.price?`${w.price(f.price.toFixed(2))}/yr`:""],status:"pending"})),c=Rt(["Domain","Price"],l,[30,12],!s);c.start();let p=await(await S("/api/domains/buy",{method:"POST",body:JSON.stringify({domains:r.map(f=>f.domain)})})).json(),g=new Set((p.results||[]).map(f=>f.domain));for(let f=0;f<r.length;f++){let b=r[f].domain.toLowerCase().trim();g.has(b)?c.markDone(f,v.success):c.markDone(f,v.error)}if(c.stop(),s){k(p,t.fields);return}d();let x=p.summary?.succeeded??0,y=p.summary?.failed??0;if(x>0&&console.log(` ${v.success} ${Te.default.green(`${x} domain${x>1?"s":""} registered`)}`),y>0){console.log(` ${v.error} ${Te.default.red(`${y} failed`)}`);for(let f of p.errors||[])console.log(` ${Te.default.dim("\u2500")} ${w.domain(f.domain)}: ${Te.default.dim(f.error)}${f.hint?` ${Te.default.dim(`(${f.hint})`)}`:""}`)}if(d(),x>0&&xe){let f=(p.results||[]).filter(b=>b.success).map(b=>b.domain);if(f.length===1)await Qi(f[0]);else{let b=await Ye({message:"Set up one of your new domains?",options:[...f.map(_=>({value:_,label:Te.default.cyan(_)})),{value:"done",label:"Done"}]});!oe(b)&&b!=="done"?(d(),await Qi(b)):d()}}else x>0&&(O("Connect to a service:","domani connect <domain>"),O("Set up email:","domani email setup <domain>"),d())}async function en(e,t){let s=e.filter(Boolean);if(s.length===0){xe||h("Missing required argument: domain(s)",{hint:"Usage: domani buy <domain> [domain2 ...]",code:"missing_argument",json:t.json});let i=await Re({message:"Domain to purchase",placeholder:"e.g. myapp.dev (space-separated for multiple)"});(oe(i)||!i)&&process.exit(0),s=i.split(/\s+/).filter(Boolean)}return s.length===1?jl(s[0],t):Sl(s,t)}var Te,Mt=De(()=>{"use strict";Q();Ie();Te=V(J(),1);H();ye()});var $n=V(gn(),1),{program:pc,createCommand:hc,createArgument:gc,createOption:$c,CommanderError:yc,InvalidArgumentError:bc,InvalidOptionArgumentError:vc,Command:yn,Argument:wc,Option:_c,Help:xc}=$n.default;var st=V(J(),1);pt();var He=V(J(),1);pt();H();var Mi=!1;async function ur(){if(Mi||bt()){Mi=!0;return}(process.argv.includes("--json")||!Sn)&&(console.log(JSON.stringify({error:"Not logged in",code:"auth_required",hint:"Run 'domani login' or set DOMANI_API_KEY environment variable",fix_command:"domani login"},null,2)),process.exit(1)),d(),console.log(` ${He.default.dim("You're not logged in.")} Starting authentication...`),d();let t=Xe(),s=j(!0);s.start("Requesting auth code");let i;try{i=await fetch(`${t}/api/auth/cli`,{method:"POST",headers:{"Content-Type":"application/json"}})}catch{s.stop("Failed"),console.error(` ${He.default.red("\u2717")} Could not reach ${t}. Check your connection.`),process.exit(1)}if(!i.ok){s.stop("Failed");let o=`Server error (${i.status})`;try{let a=await i.json();o=a.error||a.message||o}catch{}console.error(` ${He.default.red("\u2717")} ${o}`),process.exit(1)}let n,r;try{({code:n,auth_url:r}=await i.json())}catch{s.stop("Failed"),console.error(` ${He.default.red("\u2717")} Invalid response from server.`),process.exit(1)}s.stop(`${v.success} Auth code ready`),d(),console.log(` ${He.default.dim("Verification code:")} ${He.default.bold(He.default.cyan(n))}`),console.log(` ${He.default.dim("Opening browser")} ${v.arrow} ${w.url(r)}`),et(r),d(),s.start("Waiting for browser approval");for(let o=0;o<120;o++){await new Promise(c=>setTimeout(c,5e3));let a=await fetch(`${t}/api/auth/cli/poll?code=${n}`).catch(()=>null);if(!a||!a.ok&&a.status!==202)continue;let l=await a.json().catch(()=>({}));if(l.status==="complete"){Pt({...rt(),token:l.token,email:l.email,api_url:t}),Mi=!0,s.stop(`${v.success} Logged in as ${He.default.bold(l.email)}`),d();return}}s.stop("Timed out"),console.error(` ${He.default.red("\u2717")} No approval received. Run ${He.default.cyan("domani login")} to try again.`),process.exit(1)}H();Jt();pt();var gt=V(J(),1);H();async function mr(e){let t=Xe(),s=j(!e.json),i=rt();if(i.token){s.start("Checking session");try{let c=await fetch(`${t}/api/me`,{headers:{Authorization:`Bearer ${i.token}`}});if(c.ok){let u=await c.json();s.stop(`Already logged in as ${gt.default.bold(u.email)}`),e.json&&k({status:"already_logged_in",email:u.email});return}}catch{}s.stop("Session expired, re-authenticating"),d()}s.start("Requesting auth code");let n=await fetch(`${t}/api/auth/cli`,{method:"POST",headers:{"Content-Type":"application/json"}});if(!n.ok){s.stop("Failed to initiate login");try{let c=await n.json();h(c.error||c.message||`Server error (${n.status})`,{hint:c.hint,code:"login_failed",json:e.json})}catch{h(`Could not reach ${t}. Check your connection and try again.`,{code:"network_error",json:e.json})}}let{code:r,auth_url:o,expires_in:a}=await n.json();if(s.stop("Auth code received"),e.json){k({status:"awaiting_approval",code:r,auth_url:o,expires_in:a});return}d(),console.log(` ${gt.default.dim("Verification code:")} ${gt.default.bold(gt.default.cyan(r))}`),e.open!==!1?(console.log(` ${gt.default.dim("Opening browser")} ${v.arrow} ${w.url(o)}`),et(o)):console.log(` ${gt.default.dim("Open this URL to approve:")} ${w.url(o)}`),d(),s.start("Waiting for approval");let l=120;for(let c=0;c<l;c++){await new Promise(g=>setTimeout(g,5e3));let u=await fetch(`${t}/api/auth/cli/poll?code=${r}`);!u.ok&&u.status!==202&&(s.stop("Login failed"),h(`Server error (${u.status})`,{code:"login_failed"}));let p=await u.json();if(p.status==="complete"){Pt({...rt(),token:p.token,email:p.email,api_url:t}),s.stop(`Logged in as ${gt.default.bold(p.email)}`),d(),O("Get started:","domani search"),d();return}p.error&&(s.stop("Login failed"),h(p.error||p.message,{hint:p.hint,code:"login_failed"}))}s.stop("Login timed out"),h("No approval received within 10 minutes",{hint:"Run 'domani login' to try again",code:"timeout"})}pt();var qi=V(J(),1);H();async function fr(e){let t=rt();if(!t.token){e.json?k({status:"not_logged_in"}):console.log(` ${qi.default.dim("Not logged in.")}`);return}let{api_url:s}=t;jn(),s&&Pt({api_url:s}),e.json?k({status:"logged_out",email:t.email||null}):console.log(` ${v.success} Logged out${t.email?` ${qi.default.dim(`(${t.email})`)}`:""}`)}Q();var Zt=V(J(),1);H();async function hr(e){let t=await S("/api/me"),s=await t.json();if(t.ok||h(s.error||s.message,{hint:s.hint,status:t.status,json:e.json,fields:e.fields}),e.json){k(s,e.fields);return}R("Account"),$("Email",Zt.default.bold(s.email)),$("Payment",s.has_payment_method?`${v.success} ${Zt.default.green("active")}`:`${v.error} ${Zt.default.dim("none")}`),$("Domains",String(s.domain_count)),$("API tokens",String(s.token_count)),$("Referral code",s.referral_code||Zt.default.dim("-")),$("Created",new Date(s.created_at).toLocaleDateString()),d()}Q();Ie();var T=V(J(),1);H();ye();var Le=10,Ps=["com","io","ai","dev","app","co","net","org","xyz","sh","me","cc","tech","run","cloud","so","gg","fm","tv","pro","one","inc","ltd","llc","biz","group","global","ventures","capital","fund","agency","store","shop","market","sale","deals","auction","trade","studio","design","art","space","style","fashion","luxury","brand","media","digital","site","online","live","show","world","zone","land","place","city","town","blog","news","social","chat","link","page","fun","lol","meme","wtf","tools","build","works","work","team","solutions","services","systems","network","software","music","video","photo","photos","game","games","club","stream","film","movie","pizza","coffee","beer","bar","pub","restaurant","cafe","kitchen","food","wine","health","care","clinic","dental","fitness","yoga","bio","life","lifestyle","finance","money","legal","law","cash","academy","university","education","training","courses","science","wiki","guide","us","uk","eu","ca","au","de","fr","it","es","nl","jp","sg","nz","mx","house","homes","realty","estate","garden","nyc","london","berlin","paris","guru","ninja","rocks","fail","party","vip","gold","black","pink","red","events","travel","sport","jobs","careers","consulting","energy","eco","green","support","help","info","new","now","today","day"],Ds=null;async function Ar(){if(Ds)return Ds;try{let e=await $e("/api/tlds?sort=price&order=asc&limit=1000");if(e.ok){let s=(await e.json()).tlds.map(i=>i.tld);if(s.length>0){let i=new Set(Ps),n=new Set(s),r=[...Ps.filter(o=>n.has(o)),...s.filter(o=>!i.has(o))];return Ds=r,r}}}catch{}return Ds=Ps,Ps}async function Cl(e,t,s,i,n){let r=[],o=[],a=Le,l=0,c=!0,u=0,p=0,g=0,x=0,y=!1,f=!1,b=null,_="",C=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"],A=0,F=setInterval(()=>{f||!c||(A=(A+1)%C.length,Y())},80);function L(){u>0&&(process.stdout.write(`\x1B[${u}A\x1B[0J`),u=0)}function G(){if(c)return[];let q=Le+x*Le;return r.length>a||i&&q<n.length?["more","new","skip"]:["new","skip"]}function I(){return r.slice(0,a)}function P(){let q=G();return Math.max(0,I().length+q.length-1)}let D=6;function Y(){L();let q=[],K=I(),de=!c&&K.length===0&&o.length>0,fe=de?o.slice(0,D):K,Ce=fe.reduce((ge,ae)=>Math.max(ge,ae.domain.length),0),Me=G();for(let ge=0;ge<fe.length;ge++){let ae=fe[ge];if(de)q.push(`${T.default.dim("\u2502")} ${T.default.dim("\u2715")} ${T.default.dim(ae.domain.padEnd(Ce))} ${T.default.dim("taken")}`);else{let W=ge===l,Be=W?T.default.green("\u25CF"):T.default.dim("\u25CB"),mt=ae.domain.padEnd(Ce),Us=W?T.default.bold(T.default.cyan(mt)):mt,Ms=ae.for_sale?T.default.cyan(`$${ae.for_sale.price} (for sale)`):T.default.dim(`$${ae.price}/yr`);q.push(`${T.default.dim("\u2502")} ${Be} ${Us} ${Ms}`)}}if(de&&o.length>D&&q.push(`${T.default.dim("\u2502")} ${T.default.dim(`\u2026 and ${o.length-D} more taken`)}`),c){let ge=_?T.default.dim(`checking ${_}\u2026`):T.default.dim("searching\u2026");q.push(`${T.default.dim("\u2502")} ${T.default.cyan(C[A])} ${ge}`)}else{let ge=Le+x*Le;i&&ge>=n.length&&q.push(`${T.default.dim("\u2502")} ${T.default.dim(`All ${Math.min(ge,n.length)} TLDs searched`)}`);for(let W=0;W<Me.length;W++){let Us=I().length+W===l?T.default.green("\u25CF"):T.default.dim("\u25CB"),Ms=Me[W]==="more"?T.default.dim("More \u2192"):Me[W]==="new"?T.default.dim("New search \u2192"):T.default.dim("Skip");q.push(`${T.default.dim("\u2502")} ${Us} ${Ms}`)}q.push(T.default.dim("\u2514"))}process.stdout.write(q.join(`
|
|
192
|
+
`}}}}).prompt()});function za(t){return!!(t.json||!Ce)}function R(t,e=50){console.log(),console.log(` ${F.default.bold(t)}`),console.log(` ${F.default.dim("\u2500".repeat(e))}`)}function y(t,e,s=2){let i=" ".repeat(s);console.log(`${i}${F.default.dim(t.padEnd(16))} ${e}`)}function m(){console.log()}function Mt(t){console.log(` ${F.default.dim(t)}`)}function I(t,e){console.log(` ${F.default.dim(t)} ${F.default.cyan(e)}`)}function hr(t){return t.split(/(https?:\/\/[^\s]+)/g).map(s=>/^https?:\/\//.test(s)?`\x1B]8;;${s}\x1B\\${F.default.underline(F.default.cyan(s))}\x1B]8;;\x1B\\`:F.default.dim(s)).join("")}function Pi(t,e){console.error(` ${b.error} ${F.default.red(t)}`),e&&console.error(` ${hr(e)}`)}function k(t=!0){return t?Xt():Xa}function pr(t){return t.replace(Za,"")}function Cs(t,e){let s=pr(t).length,i=Math.max(0,e-s);return t+" ".repeat(i)}function he(t,e,s){let i=s||t.map((o,a)=>{let l=e.reduce((c,d)=>Math.max(c,pr(d[a]||"").length),0);return Math.max(o.length,l)+2}),n=t.map((o,a)=>F.default.dim(o.padEnd(i[a]))).join(" "),r=i.map(o=>F.default.dim("\u2500".repeat(o))).join(" ");console.log(` ${n}`),console.log(` ${r}`);for(let o of e){let a=o.map((l,c)=>Cs(l,i[c])).join(" ");console.log(` ${a}`)}}function Qa(t){return t.replace(/[A-Z]/g,e=>`_${e.toLowerCase()}`)}function Di(t){if(Array.isArray(t))return t.map(Di);if(t&&typeof t=="object"&&!(t instanceof Date)){let e={};for(let[s,i]of Object.entries(t))e[Qa(s)]=Di(i);return e}return t}function x(t,e){let s=Di(t);if(!e){console.log(JSON.stringify(s,null,2));return}let i=e.split(",").map(n=>n.trim()).filter(Boolean);if(Array.isArray(s)){let n=s.map(r=>ur(r,i));console.log(JSON.stringify(n,null,2))}else console.log(JSON.stringify(s&&typeof s=="object"?ur(s,i):s,null,2))}function ur(t,e){let s={};for(let i of e)i in t&&(s[i]=t[i]);if(Object.keys(s).length===0){for(let[i,n]of Object.entries(t))if(Array.isArray(n)&&n.length>0&&typeof n[0]=="object"){let r=n.map(o=>{let a={};for(let l of e)l in o&&(a[l]=o[l]);return a});Object.keys(r[0]).length>0&&(s[i]=r)}}return s}function Rt(t){return!!(t.yes||za(t))}function K(t,e,s,i){if(s){x({dry_run:!0,action:t,...e},i);return}console.log(),console.log(` ${F.default.yellow("\u25B8 DRY RUN")} ${F.default.dim("- no changes made")}`),console.log(` ${F.default.dim("Action:")} ${F.default.bold(t)}`);for(let[n,r]of Object.entries(e))r!=null&&(Array.isArray(r)?console.log(` ${F.default.dim(n+":")} ${r.map(String).join(", ")}`):console.log(typeof r=="object"?` ${F.default.dim(n+":")} ${JSON.stringify(r)}`:` ${F.default.dim(n+":")} ${String(r)}`));console.log()}function tl(t,e,s){return e===401||e===403?"auth_required":e===402||s?"payment_required":e===404?"not_found":e===409?"conflict":e===422?"validation_error":e===429?"rate_limited":/contact/i.test(t)?"contact_required":"error"}function h(t,e){let s=t||`Request failed${e?.status?` (${e.status})`:""}`,i=e?.code||tl(s,e?.status,e?.fixUrl),n=e?.fixCommand||el[i];if(e?.json){let r={error:s,code:i};e.hint&&(r.hint=e.hint),n&&(r.fix_command=n),e.fixUrl&&(r.fix_url=e.fixUrl),x(r,e.fields)}else Pi(s,e?.hint),n?console.error(` ${F.default.dim("Or run:")} ${F.default.cyan(n)}`):e?.fixUrl&&console.error(` ${hr(`Add a payment method at ${e.fixUrl}`)}`);process.exit(1)}function Qe(t){let e=process.platform==="darwin"?"open":process.platform==="win32"?"start":"xdg-open";(0,fr.execFile)(e,[t])}function At(t){return new Promise(e=>setTimeout(e,t))}function Tt(t,e,s,i=!0){let n=process.stdout.isTTY??!1;if(!i)return{start(){},markDone(){},stop(){}};let r=0,o=null,a=2+e.length;function l(){let g=" "+t.map((p,_)=>F.default.dim(p.padEnd(s[_]))).join(" "),$=" "+s.map(p=>F.default.dim("\u2500".repeat(p))).join(" "),w=[g,$];for(let p of e){let _=p.status==="done"?p.icon??b.success:F.default.cyan(mr[r%mr.length]),S=p.cells.map((O,D)=>Cs(O,s[D])).join(" ");w.push(` ${_} ${S}`)}return w}let c=!1,d=()=>process.stdout.write("\x1B[?25h");function f(){let g=l();if(c&&n){process.stdout.write(`\x1B[${a}A`);for(let $ of g)process.stdout.write(`\x1B[2K${$}
|
|
193
|
+
`)}else{for(let $ of g)console.log($);c=!0}}return{start(){n&&(process.stdout.write("\x1B[?25l"),process.on("exit",d)),f(),n&&(o=setInterval(()=>{r++,f()},80))},markDone(g,$){e[g].status="done",$!==void 0&&(e[g].icon=$),n&&f()},stop(){o&&clearInterval(o);for(let g of e)g.status="done";f(),n&&(process.stdout.write("\x1B[?25h"),process.removeListener("exit",d))}}}var F,fr,Ce,b,v,Xa,Za,el,mr,q=ke(()=>{"use strict";F=N(H(),1),fr=require("child_process");Pe();Ce=process.stdout.isTTY??!1;b={success:F.default.green("\u2713"),error:F.default.red("\u2717"),warning:F.default.yellow("!"),info:F.default.cyan("\u25CF"),arrow:F.default.dim("\u2192"),dot:F.default.dim("\xB7"),dash:F.default.dim("\u2500")},v={domain:t=>F.default.bold(F.default.white(t)),price:t=>F.default.green(`$${t}`),label:t=>F.default.dim(t),value:t=>F.default.white(t),dim:t=>F.default.dim(t),bold:t=>F.default.bold(t),success:t=>F.default.green(t),error:t=>F.default.red(t),warn:t=>F.default.yellow(t),cyan:t=>F.default.cyan(t),url:t=>`\x1B]8;;${t}\x1B\\${F.default.underline(F.default.cyan(t))}\x1B]8;;\x1B\\`};Xa={start:()=>{},stop:()=>{},message:()=>{}};Za=/\x1b\]8;;[^\x1b]*\x1b\\|\x1b\[[0-9;]*m/g;el={auth_required:"domani login",payment_required:"domani card add",contact_required:"domani contact set"};mr=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"]});async function gr(){if(Fi)return;let t=process.argv.includes("--json")||!ni,e=ze(),s=pt();try{if((await(await fetch(`${e}/api/me`,{headers:{Authorization:`Bearer ${s}`}})).json()).plan==="pro"){Fi=!0;return}}catch{}t&&(console.log(JSON.stringify({error:"Pro plan required",code:"upgrade_required",hint:"Upgrade at https://domani.run/settings",fix_command:"domani upgrade"},null,2)),process.exit(1)),m(),console.log(` ${we.default.dim("This feature requires")} ${we.default.bold("Pro")} ${we.default.dim("($9/month).")}`),console.log(` ${we.default.dim("Opening billing page")} ${b.arrow} ${we.default.cyan("domani.run/settings")}`),Qe(`${e.replace("http://localhost:3000","https://domani.run")}/settings`),m();let i=k(!0);i.start("Waiting for upgrade...");for(let n=0;n<120;n++){await new Promise(r=>setTimeout(r,5e3));try{if((await(await fetch(`${e}/api/me`,{headers:{Authorization:`Bearer ${s}`}})).json()).plan==="pro"){Fi=!0,i.stop(`${b.success} Upgraded to Pro! Continuing...`),m();return}}catch{}}i.stop("Timed out"),console.error(` ${we.default.red("\u2717")} No upgrade detected. Visit ${we.default.cyan("domani.run/settings")} to upgrade.`),process.exit(1)}async function $r(){if(Ni||pt()){Ni=!0;return}(process.argv.includes("--json")||!ni)&&(console.log(JSON.stringify({error:"Not logged in",code:"auth_required",hint:"Run 'domani login' or set DOMANI_API_KEY environment variable",fix_command:"domani login"},null,2)),process.exit(1)),m(),console.log(` ${we.default.dim("You're not logged in.")} Starting authentication...`),m();let e=ze(),s=k(!0);s.start("Requesting auth code");let i;try{i=await fetch(`${e}/api/auth/cli`,{method:"POST",headers:{"Content-Type":"application/json"}})}catch{s.stop("Failed"),console.error(` ${we.default.red("\u2717")} Could not reach ${e}. Check your connection.`),process.exit(1)}if(!i.ok){s.stop("Failed");let o=`Server error (${i.status})`;try{let a=await i.json();o=a.error||a.message||o}catch{}console.error(` ${we.default.red("\u2717")} ${o}`),process.exit(1)}let n,r;try{({code:n,auth_url:r}=await i.json())}catch{s.stop("Failed"),console.error(` ${we.default.red("\u2717")} Invalid response from server.`),process.exit(1)}s.stop(`${b.success} Auth code ready`),m(),console.log(` ${we.default.dim("Verification code:")} ${we.default.bold(we.default.cyan(n))}`),console.log(` ${we.default.dim("Opening browser")} ${b.arrow} ${v.url(r)}`),Qe(r),m(),s.start("Waiting for browser approval");for(let o=0;o<120;o++){await new Promise(c=>setTimeout(c,5e3));let a=await fetch(`${e}/api/auth/cli/poll?code=${n}`).catch(()=>null);if(!a||!a.ok&&a.status!==202)continue;let l=await a.json().catch(()=>({}));if(l.status==="complete"){Ft({...ot(),token:l.token,email:l.email,api_url:e}),Ni=!0,s.stop(`${b.success} Logged in as ${we.default.bold(l.email)}`),m();return}}s.stop("Timed out"),console.error(` ${we.default.red("\u2717")} No approval received. Run ${we.default.cyan("domani login")} to try again.`),process.exit(1)}var we,Ni,Fi,Li=ke(()=>{"use strict";we=N(H(),1);gt();q();Ni=!1,Fi=!1});function vr(t){return t.json=async()=>{let e=await t.clone().text();try{return JSON.parse(e)}catch{let s=e.trim().slice(0,120);return t.ok?(Object.defineProperty(t,"ok",{value:!1}),{error:`Unexpected non-JSON response (HTTP ${t.status})`,hint:`The server replied but not with JSON${s?` (got: "${s}")`:""}. This is usually transient (deploy or proxy) - retry in a few seconds.`}):{error:`Server error (${t.status})`,hint:"The server returned an unexpected response. Try again later."}}},t}async function j(t,e={},s=!1){let i=pt(),n=`${ze()}${t}`,r=await fetch(n,{...e,headers:{Authorization:`Bearer ${i}`,"Content-Type":"application/json","User-Agent":`domani-cli/${je}`,...e.headers}});if(!s){let o=await r.clone().text();try{if(JSON.parse(o).code==="UPGRADE_REQUIRED")return await gr(),j(t,e,!0)}catch{}}return vr(r)}async function ve(t,e={}){let s=`${ze()}${t}`,i=pt(),n=await fetch(s,{...e,headers:{"Content-Type":"application/json","User-Agent":`domani-cli/${je}`,...i?{Authorization:`Bearer ${i}`}:{},...e.headers}});return vr(n)}var Z=ke(()=>{"use strict";gt();Li()});function vt(){return{ok:!0}}function lt(t,e,s){return{ok:!1,error:{message:t,code:e,hint:s}}}function Sr(t){return sl.test(t)?lt("Input contains control characters","invalid_input","Remove non-printable characters from the input"):vt()}function ll(t){return il.test(t)?lt("Input contains path traversal","invalid_input","Domain names cannot contain '../' or '..\\'"):vt()}function cl(t){return nl.test(t)?lt("Input contains query string or fragment","invalid_input","Remove '?' or '#' from the domain name"):vt()}function dl(t){return rl.test(t)?lt("Input contains percent-encoded characters","invalid_input","Use plain text, not URL-encoded values (e.g. 'example.com' not 'example%2Ecom')"):vt()}function xr(t){if(!t)return lt("Domain name is required","validation_error");if(t.length>_r)return lt(`Domain name too long (${t.length} chars, max ${_r})`,"validation_error");for(let e of[Sr,ll,cl,dl]){let s=e(t);if(!s.ok)return s}return ol.test(t)?vt():lt(`Invalid domain name: ${t}`,"validation_error","Domain names can only contain letters, digits, hyphens, and dots")}function ul(t){if(!t)return lt("TLD is required","validation_error");let e=Sr(t);return e.ok?al.test(t)?vt():lt(`Invalid TLD: ${t}`,"validation_error","TLDs contain only letters (e.g. 'com', '.dev', 'ai')"):e}function ml(t){for(let e of t){let s=xr(e);if(!s.ok)return s}return vt()}function fl(t){for(let e of t){let s=ul(e);if(!s.ok)return s}return vt()}function Q(t,e){let s=xr(t);s.ok||h(s.error.message,{code:s.error.code,hint:s.error.hint,json:e?.json,fields:e?.fields})}function kr(t,e){let s=ml(t);s.ok||h(s.error.message,{code:s.error.code,hint:s.error.hint,json:e?.json,fields:e?.fields})}function Os(t,e){let s=fl(t);s.ok||h(s.error.message,{code:s.error.code,hint:s.error.hint,json:e?.json,fields:e?.fields})}var sl,il,nl,rl,ol,al,_r,_e=ke(()=>{"use strict";q();sl=/[\x00-\x08\x0b\x0c\x0e-\x1f]/,il=/\.\.[/\\]/,nl=/[?#]/,rl=/%[0-9a-fA-F]{2}/,ol=/^[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?(\.[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?)*\.?$/,al=/^\.?[a-zA-Z]{2,63}$/,_r=253});async function ue(){Ce||h("Missing required argument: domain",{hint:"Pass the domain as an argument, e.g. 'domani settings example.com'",code:"missing_argument",json:!0});let t=k(!0);t.start("Loading your domains");let e=await j("/api/domains"),s=await e.json();e.ok||(t.stop("Failed"),Pi(s.error,s.hint),process.exit(1));let i=s.domains||[];i.length===0&&(t.stop("No domains"),m(),console.log(` ${Mi.default.dim("No domains yet.")} Use: ${Mi.default.cyan("domani buy <domain>")}`),m(),process.exit(0)),t.stop(`${i.length} domain(s)`);let n=await Ze({message:"Which domain?",options:i.map(r=>({value:r.domain,label:r.domain,hint:r.status!=="active"?r.status:void 0}))});return oe(n)&&process.exit(0),n}var Mi,Ye=ke(()=>{"use strict";Z();Pe();Mi=N(H(),1);q()});var Cr={};Pt(Cr,{connect:()=>Vi});async function Vi(t,e,s){t||(t=await ue()),Q(t,s);let i;if(e&&!s.provider?e.includes(".")?i=e:s.provider=e:i=e,!i&&!s.provider&&!s.list&&s.dryRun)return K("connect",{domain:t,note:"No provider specified. Pass --provider <name> to connect."},s.json,s.fields);if(!i&&!s.provider&&!s.list){let n=k(!s.json);n.start(`Loading providers for ${v.domain(t)}`);let r=await j(`/api/domains/${encodeURIComponent(t)}/connect`),o=await r.json();if(r.ok||(n.stop("Failed"),h(o.error||o.message,{hint:o.hint,status:r.status,json:s.json,fields:s.fields})),n.stop("Providers loaded"),s.json){x(o,s.fields);return}let a=[];for(let p of["hosting","email"]){let _=o.providers?.[p]||[];for(let S of _)a.push({value:`${p}:${S.name}`,label:S.name,hint:p})}a.length===0&&h("No providers available",{code:"not_found",json:s.json,fields:s.fields});let l=await Ze({message:"Choose a provider",options:a});oe(l)&&process.exit(0);let[c,d]=l.split(":"),g=(o.providers?.[c]||[]).find(p=>p.name===d),$;if(g&&g.methods.length>1){let p=await Ze({message:"Choose a method",options:g.methods.map(_=>({value:_.name,label:_.name,hint:_.default?"default":void 0}))});oe(p)&&process.exit(0),$=p}let w;if(c==="hosting"&&g?.requires_target){g.notes?.setup&&Mt(g.notes.setup);let p=await Ee({message:"Target hostname or IP"});oe(p)&&process.exit(0),w=p.trim()}return jr(t,{target:w,provider:d,method:$,dryRun:s.dryRun,json:!1})}if(s.list){let n=k(!s.json);n.start(`Loading providers for ${v.domain(t)}`);let r=await j(`/api/domains/${encodeURIComponent(t)}/connect`),o=await r.json();if(r.ok||(n.stop("Failed"),h(o.error||o.message,{hint:o.hint,status:r.status,json:s.json,fields:s.fields})),n.stop("Providers loaded"),s.json){x(o,s.fields);return}R(`Providers for ${v.domain(o.domain)}`);for(let a of["hosting","email"]){let l=o.providers?.[a];if(l?.length){m(),console.log(` ${ce.default.bold(a.toUpperCase())}`);for(let c of l){let d=c.methods.map(f=>f.default?ce.default.green(`${f.name} (default)`):ce.default.dim(f.name)).join(ce.default.dim(", "));console.log(` ${ce.default.cyan(c.name.padEnd(20))} ${d}`)}}}m();return}return jr(t,s)}async function jr(t,e){let s={};if(e.target&&(s.target=e.target),e.provider&&(s.provider=e.provider),e.method&&(s.method=e.method),e.dryRun)return K("connect",{domain:t,...s},e.json,e.fields);let i=k(!e.json);i.start(`Connecting ${v.domain(t)}`);let n=await j(`/api/domains/${encodeURIComponent(t)}/connect`,{method:"POST",body:JSON.stringify(s)}),r=await n.json();n.ok||(i.stop("Connection failed"),h(r.error||r.message,{hint:r.hint,status:n.status,json:e.json,fields:e.fields}));let o=r.status==="manual_setup_required";if(i.stop(o?`${b.success} DNS instructions for ${ce.default.cyan(r.provider)}`:`${b.success} Connected to ${ce.default.cyan(r.provider)}`),e.json){x(r,e.fields);return}if(R(o?`Add these records at your registrar for ${v.domain(r.domain)}`:`Connected ${v.domain(r.domain)}`),y("Provider",ce.default.cyan(r.provider)),y("Method",r.method),r.records?.length){let a=[8,22,40];m(),console.log(` ${ce.default.bold("DNS Records")}`);let l=["Type","Name","Value"].map((d,f)=>ce.default.dim(d.padEnd(a[f]))).join(" "),c=a.map(d=>ce.default.dim("\u2500".repeat(d))).join(" ");console.log(` ${l}`),console.log(` ${c}`);for(let d of r.records){let f=d.record,g=d.status!=="already_set";process.stdout.isTTY&&g&&await At(50);let w=[ce.default.yellow(f.type),f.name,ce.default.cyan(f.value)+(f.priority?ce.default.dim(` pri=${f.priority}`):"")].map((S,O)=>Cs(S,a[O])).join(" "),p=d.status==="already_set"?ce.default.dim("\u2713"):d.status==="updated"?ce.default.yellow("\u21BA"):d.status==="pending"?ce.default.yellow("\u2192"):b.success,_=d.status==="already_set"?ce.default.dim(" already set"):d.status==="updated"?ce.default.dim(" updated"):d.status==="pending"?ce.default.dim(" add this"):"";console.log(` ${p} ${w}${_}`)}}m(),r.next_steps?.length?(console.log(` ${ce.default.bold("Next steps")}`),r.next_steps.forEach((a,l)=>{console.log(` ${ce.default.dim(`${l+1}.`)} ${a}`)})):r.hint&&console.log(` ${ce.default.dim(r.hint)}`),r.docs&&console.log(` ${ce.default.dim("Docs:")} ${v.url(r.docs)}`),m()}var ce,qi=ke(()=>{"use strict";Z();ce=N(H(),1);Pe();q();_e();Ye()});var Er={};Pt(Er,{email:()=>Qt});function gl(t){return[E.default.yellow(t.type),t.name,E.default.cyan(t.value)+(t.priority?E.default.dim(` pri=${t.priority}`):"")]}function Wi(t){return pl[t]||t}function $l(t,e){if(t&&t.includes("@")){let[s,i]=t.split("@",2);!e.slug&&s&&(e.slug=s),!e.domain&&i&&(e.domain=i)}}async function ct(t){return t.domain?(Q(t.domain,t),t.domain):ue()}async function Qt(t,e,s){if(t&&t.includes(".")&&!hl.includes(t))return s.check?Ir(t,!!s.json,s.fields):e?Rr(t,e,!!s.json,s.fields):Ar(t,!!s.json,s.fields);if($l(e,s),s.body&&!s.text&&(s.text=s.body),s.title&&!s.subject&&(s.subject=s.title),s.from&&s.from.includes("@")){let[i,n]=s.from.split("@",2);!s.slug&&i&&(s.slug=i),!s.domain&&n&&(s.domain=n)}switch(t){case void 0:return Or(s);case"list":return Or(s);case"inbox":return xl(s);case"setup":return yl(s);case"status":return bl(s);case"remove":return vl(s);case"create":return wl(s);case"delete":return _l(s);case"send":return Sl(s);case"webhook":return kl(s);case"forward":return jl(s);case"check":return Ir(s.domain||await ue(),!!s.json,s.fields);case"connect":return Rr(s.domain||await ue(),e||void 0,!!s.json,s.fields);default:h(`Unknown action: ${t}`,{hint:"Actions: list, inbox, create, delete, send, forward, webhook, setup, status, check, connect",code:"validation_error",json:s.json,fields:s.fields})}}async function yl(t){let e=await ct(t);if(t.dryRun)return K("email_setup",{domain:e},t.json,t.fields);let s=k(!t.json);s.start(`Setting up email on ${v.domain(e)}`);let i=await j(`/api/domains/${encodeURIComponent(e)}/email/setup`,{method:"POST"}),n=await i.json();if(i.ok||(s.stop("Failed"),h(n.error||n.message,{hint:n.hint,status:i.status,json:t.json,fields:t.fields})),s.stop(`${b.success} Email ${n.status==="already_configured"?"already configured":"configured"}`),t.json){x(n,t.fields);return}if(n.records?.length){m(),R(`Email DNS Records ${v.domain(e)}`);let r=n.records.map(o=>[E.default.yellow(o.type),o.name,o.value.length>40?o.value.slice(0,40)+"...":o.value,o.status==="verified"||o.status==="created"?E.default.green(o.status):E.default.yellow(o.status)]);he(["Type","Name","Value","Status"],r,[8,28,44,12])}m(),n.hint&&Mt(n.hint),I("Check status:",`domani email status --domain ${e}`),m()}async function bl(t){let e=await ct(t),s=k(!t.json);s.start(`Checking email status for ${v.domain(e)}`);let i=await j(`/api/domains/${encodeURIComponent(e)}/email/status`),n=await i.json();if(i.ok||(s.stop("Failed"),h(n.error||n.message,{hint:n.hint,status:i.status,json:t.json,fields:t.fields})),s.stop(`${b.success} Status loaded`),t.json){x(n,t.fields);return}if(R(`Email ${v.domain(e)}`),y("Enabled",n.enabled?E.default.green("yes"):E.default.dim("no")),n.enabled&&(y("Verified",n.verified?E.default.green("yes"):E.default.yellow("pending")),y("Mailboxes",String(n.mailbox_count))),m(),!n.enabled)I("Set up email:",`domani email setup --domain ${e}`),m();else if(!n.verified&&n.records?.length){console.log(` ${E.default.yellow("!")} Add these DNS records to verify:`);for(let r of n.records)console.log(` ${E.default.yellow(r.type)} ${r.name} ${E.default.dim("\u2192")} ${r.value.length>50?r.value.slice(0,50)+"...":r.value}`);m()}}async function vl(t){let e=await ct(t);if(t.dryRun)return K("email_remove",{domain:e},t.json,t.fields);let s=k(!t.json);s.start(`Removing email from ${v.domain(e)}`);let i=await j(`/api/domains/${encodeURIComponent(e)}/email/setup`,{method:"DELETE"}),n=await i.json();if(i.ok||(s.stop("Failed"),h(n.error||n.message,{hint:n.hint,status:i.status,json:t.json,fields:t.fields})),s.stop(`${b.success} Email disabled`),t.json){x(n,t.fields);return}n.mailboxes_deleted>0&&console.log(` ${E.default.dim(`${n.mailboxes_deleted} mailbox(es) deleted.`)}`),m()}async function Or(t){let e=k(!t.json);e.start("Loading mailboxes");let s=t.domain?`?domain=${encodeURIComponent(t.domain)}`:"",i=await j(`/api/emails${s}`),n=await i.json();i.ok||(e.stop("Failed"),h(n.error||n.message,{hint:n.hint,status:i.status,json:t.json,fields:t.fields}));let r=n.mailboxes||[];if(e.stop(`${b.success} ${r.length} mailbox(es)`),t.json){x(n,t.fields);return}if(r.length===0){m(),console.log(` ${E.default.dim("No mailboxes.")}`),m(),I("Create one:","domani email create hello@example.com"),m();return}m(),R("Mailboxes");let o=r.map(a=>[E.default.cyan(a.address),String(a.message_count),a.webhook_url?v.url(a.webhook_url):E.default.dim("-"),E.default.dim(new Date(a.created_at).toLocaleDateString())]);he(["Address","Messages","Webhook","Created"],o,[32,10,36,14]),m()}async function wl(t){let e=await ct(t);if(t.dryRun)return K("email_create_mailbox",{domain:e,slug:t.slug},t.json,t.fields);let s=t.slug;if(!s&&!t.json){let c=await Ee({message:`Email handle for @${e}:`,placeholder:"hello"});oe(c)&&process.exit(0),s=c}s||h("Slug required",{hint:`Usage: domani email create hello@${e}`,code:"validation_error",json:t.json,fields:t.fields});let i=`${s}@${e}`,n=k(!t.json);n.start("Creating mailbox");let r=await j("/api/emails",{method:"POST",body:JSON.stringify({address:i})}),o=await r.json();if(r.status===202&&!t.json){n.stop("");let c=o.txt_record,d=o.email_records||[],f=[{type:"TXT",name:c?.name||"@",value:c?.value||"",note:"ownership proof"},...d];m(),console.log(" Add these records at your DNS provider:"),m();for(let S of f){let O=S.priority!==void 0?` ${E.default.dim(`priority: ${S.priority}`)}`:"",D=S.note?` ${E.default.dim(`(${S.note})`)}`:"";console.log(` ${E.default.yellow(S.type)} ${E.default.bold(S.name)}${O}${D}`),console.log(` ${E.default.dim("\u2192")} ${E.default.cyan(S.value)}`),m()}Mt("DNS propagation typically takes 5\u201330 minutes. Checking automatically..."),m();let g=f.map(S=>({cells:[E.default.yellow(S.type),S.name,S.note?E.default.dim(`(${S.note})`):""],status:"pending"})),$=Tt(["Type","Name",""],g,[6,24,16]);$.start();let w=0;for(;r.status===202&&w<60;)await At(15e3),w++,r=await j("/api/emails",{method:"POST",body:JSON.stringify({address:i})}),o=await r.json(),r.status!==202&&!r.ok&&($.stop(),h(o.error||o.message,{hint:o.hint,status:r.status,json:t.json,fields:t.fields}));r.status===202&&($.stop(),h("TXT record not detected after 15 minutes.",{hint:`Check the record is set, then retry: domani email create ${i}`,code:"timeout",json:t.json,fields:t.fields})),$.markDone(0);let p=S=>`${S.type}:${S.name}`,_=new Map;f.slice(1).forEach((S,O)=>_.set(p(S),O+1));for(let S=0;S<60;S++){await At(15e3);let O=await j(`/api/domains/${encodeURIComponent(e)}/email/status`),D=await O.json();if(O.ok&&D.records){for(let W of D.records)if(W.status==="verified"||W.status==="created"){let V=_.get(p(W));V!==void 0&&$.markDone(V)}}if(O.ok&&D.verified)break}$.stop(),m()}if(r.ok||(n.stop("Failed"),h(o.error||o.message,{hint:o.hint,status:r.status,json:t.json,fields:t.fields})),n.stop(`${b.success} ${E.default.cyan(o.address)} created`),t.json){x(o,t.fields);return}let a=await j(`/api/domains/${encodeURIComponent(e)}/email/status`),l=await a.json();m(),a.ok&&l.verified?(I("Read inbox:",`domani email inbox ${o.address}`),I("Web inbox:",`${Jt}/inbox?address=${encodeURIComponent(o.address)}`)):(I("Check propagation:",`domani email status --domain ${e}`),I("Web inbox:",`${Jt}/inbox?address=${encodeURIComponent(o.address)}`)),m()}async function _l(t){let e=await ct(t);if(t.slug||h("Slug required",{hint:"Usage: domani email delete hello@example.com",code:"validation_error",json:t.json,fields:t.fields}),t.dryRun)return K("email_delete_mailbox",{domain:e,address:`${t.slug}@${e}`},t.json,t.fields);let s=k(!t.json);s.start(`Deleting ${t.slug}@${e}`);let i=encodeURIComponent(`${t.slug}@${e}`),n=await j(`/api/emails/${i}`,{method:"DELETE",body:JSON.stringify({confirm:!0})}),r=await n.json();if(n.ok||(s.stop("Failed"),h(r.error||r.message,{hint:r.hint,status:n.status,json:t.json,fields:t.fields})),s.stop(`${b.success} Mailbox deleted`),t.json){x(r,t.fields);return}console.log(` ${E.default.dim(`${r.address} and all messages deleted.`)}`),m()}async function Sl(t){let e=await ct(t);if(t.slug||h("Slug required",{hint:'Usage: domani email send hello@example.com --to user@test.com --subject "Hi" --body "Hello"',code:"validation_error",json:t.json,fields:t.fields}),t.to||h("Recipient required",{hint:"Usage: domani email send hello@example.com --to user@test.com",code:"validation_error",json:t.json,fields:t.fields}),t.dryRun)return K("email_send",{from:`${t.slug}@${e}`,to:t.to,subject:t.subject},t.json,t.fields);let s=k(!t.json);s.start(`Sending from ${t.slug}@${e}`);let i={to:t.to};t.cc&&(i.cc=t.cc),t.bcc&&(i.bcc=t.bcc),t.subject&&(i.subject=t.subject),t.text&&(i.text=t.text),t.inReplyTo&&(i.in_reply_to=t.inReplyTo),t.references&&(i.references=t.references);let n=encodeURIComponent(`${t.slug}@${e}`),r=await j(`/api/emails/${n}/send`,{method:"POST",body:JSON.stringify(i)}),o=await r.json();if(!r.ok){s.stop("Failed");let l=o.code==="MONTHLY_LIMIT_EXCEEDED"?`Run ${E.default.cyan("domani upgrade")} to switch to Pro (10,000 emails/month).`:o.hint;h(o.error||o.message,{hint:l,status:r.status,json:t.json,fields:t.fields})}let a=Array.isArray(o.to)?o.to.join(", "):o.to;if(s.stop(`${b.success} Sent to ${E.default.cyan(a)}`),t.json){x(o,t.fields);return}}async function xl(t){let e=await ct(t);t.slug||h("Slug required",{hint:"Usage: domani email inbox hello@example.com [--direction in|out] [--limit 20]",code:"validation_error",json:t.json,fields:t.fields});let s=new URLSearchParams;t.direction&&s.set("direction",t.direction),t.limit&&s.set("limit",t.limit);let i=s.toString()?`?${s}`:"",n=k(!t.json);n.start(`Loading messages for ${t.slug}@${e}`);let r=encodeURIComponent(`${t.slug}@${e}`),o=await j(`/api/emails/${r}/messages${i}`),a=await o.json();o.ok||(n.stop("Failed"),h(a.error||a.message,{hint:a.hint,status:o.status,json:t.json,fields:t.fields}));let l=a.messages||[];if(t.json){n.stop(`${b.success} ${l.length} message(s)`),x(a,t.fields);return}if(l.length===0){n.stop(`${E.default.dim("No messages")}`);return}let c=l.length>1?"s":"";n.stop(`${b.success} ${E.default.cyan(`${t.slug}@${e}`)} ${E.default.dim("\xB7 "+l.length+" message"+c)}`);for(let d of l){let f=d.direction==="in"?E.default.green("in "):E.default.dim("out"),g=d.direction==="in"?d.from:d.to,$=d.subject||"(no subject)",w=E.default.dim(new Date(d.created_at).toLocaleString()),p=$;if(d.text){let _=d.text.replace(/\s+/g," ").trim(),S=_.length>60?_.slice(0,60)+"\u2026":_;p=`${$} ${E.default.dim("- "+S)}`}console.log(` ${f} ${g.padEnd(30)} ${p} ${w}`)}a.next_cursor&&console.log(` ${E.default.dim("\u2026 more available, use --limit to paginate")}`)}async function kl(t){let e=await ct(t);t.slug||h("Slug required",{hint:"Usage: domani email webhook hello@example.com --url https://...",code:"validation_error",json:t.json,fields:t.fields});let s=`${t.slug}@${e}`,i=encodeURIComponent(s);if(t.dryRun)return K("email_webhook",{address:s,webhook_url:t.url||null},t.json,t.fields);let n=k(!t.json);if(t.url){n.start(`Setting webhook for ${s}`);let r=await j(`/api/emails/${i}/webhook`,{method:"PUT",body:JSON.stringify({url:t.url})}),o=await r.json();if(r.ok||(n.stop("Failed"),h(o.error||o.message,{hint:o.hint,status:r.status,json:t.json,fields:t.fields})),n.stop(`${b.success} Webhook set`),t.json){x(o,t.fields);return}R(`Mailbox ${o.address}`),y("Webhook",v.url(o.webhook_url)),y("Signing secret",E.default.dim(o.signing_secret)),m()}else{n.start(`Removing webhook for ${s}`);let r=await j(`/api/emails/${i}/webhook`,{method:"DELETE"}),o=await r.json();if(r.ok||(n.stop("Failed"),h(o.error||o.message,{hint:o.hint,status:r.status,json:t.json,fields:t.fields})),n.stop(`${b.success} Webhook removed`),t.json){x(o,t.fields);return}R(`Mailbox ${o.address}`),y("Webhook",E.default.dim("none")),m()}}async function jl(t){let e=await ct(t);if(t.slug||h("Slug required",{hint:"Usage: domani email forward hello@example.com --forward-to me@gmail.com",code:"validation_error",json:t.json,fields:t.fields}),t.dryRun)return K("email_forward",{address:`${t.slug}@${e}`,forward_to:t.forwardTo||null},t.json,t.fields);let s=k(!t.json),i=t.forwardTo||null;s.start(`Updating forward for ${t.slug}@${e}`);let n=encodeURIComponent(`${t.slug}@${e}`),r=await j(`/api/emails/${n}`,{method:"PATCH",body:JSON.stringify({forward_to:i})}),o=await r.json();if(r.ok||(s.stop("Failed"),h(o.error||o.message,{hint:o.hint,status:r.status,json:t.json,fields:t.fields})),s.stop(`${b.success} Forward ${i?"set":"removed"}`),t.json){x(o,t.fields);return}R(`Mailbox ${o.address}`),y("Forward to",o.forward_to?E.default.cyan(o.forward_to):E.default.dim("none")),m()}async function Ir(t,e,s){let i=k(!e);i.start(`Checking email health for ${v.domain(t)}`);let n=await j(`/api/domains/${encodeURIComponent(t)}/email/check`),r=await n.json();if(n.ok||(i.stop("Failed"),h(r.error||r.message,{hint:r.hint,status:n.status,json:e,fields:s})),i.stop("Email health checked"),e){x(r,s);return}if(R(`Email Health ${v.domain(r.domain)}`),r.provider?y("Provider",E.default.cyan(Wi(r.provider))):y("Provider",E.default.dim("unknown")),r.mx.configured?y("MX",`${b.success} ${E.default.green("propagated")} ${E.default.dim(`(${r.mx.records.length} record${r.mx.records.length!==1?"s":""})`)}`):y("MX",`${b.error} ${E.default.red("not configured")}`),r.spf.configured?y("SPF",`${b.success} ${E.default.green(r.spf.value)}`):y("SPF",`${b.error} ${E.default.red("missing")}`),r.dmarc.configured){let o=r.dmarc.value.length>50?r.dmarc.value.slice(0,50)+"...":r.dmarc.value;y("DMARC",`${b.success} ${E.default.green(o)}`)}else y("DMARC",`${b.error} ${E.default.red("missing")}`);r.dkim.configured?y("DKIM",`${b.success} ${E.default.green("found")} ${E.default.dim(`(${r.dkim.selectors.join(", ")})`)}`):y("DKIM",`${b.warning} ${E.default.yellow("not found")}`),m(),r.mx.configured?(!r.spf.configured||!r.dmarc.configured)&&(Mt("SPF and DMARC protect against email spoofing. Re-run email setup to add them."),m()):(I("Set up email:",`domani email ${t} google`),m())}async function Rr(t,e,s,i){return e?Tr(t,e,s,i):Ar(t,s,i)}async function Ar(t,e,s){let i=k(!e);i.start("Loading email providers");let n=await j(`/api/domains/${encodeURIComponent(t)}/connect`),r=await n.json();n.ok||(i.stop("Failed"),h(r.error||r.message,{hint:r.hint,status:n.status,json:e,fields:s})),i.stop("Providers loaded");let o=r.providers?.email||[];o.length===0&&h("No email providers available",{code:"not_found",json:e,fields:s});let a=await Ze({message:"Choose an email provider",options:o.map(l=>({value:l.name,label:Wi(l.name)}))});return oe(a)&&process.exit(0),Tr(t,a,e,s)}async function Tr(t,e,s,i){if(s){let c=await j(`/api/domains/${encodeURIComponent(t)}/connect`,{method:"POST",body:JSON.stringify({target:e})}),d=await c.json();c.ok||h(d.error||d.message,{hint:d.hint,status:c.status,json:s,fields:i}),x(d,i);return}let n=await j(`/api/domains/${encodeURIComponent(t)}/connect?provider=${encodeURIComponent(e)}`);if(!n.ok){let c=await n.json();h(c.error||c.message,{hint:c.hint,status:n.status,json:s,fields:i})}let r=await n.json(),o=r.preview?.records??[],a=r.preview?.provider??e,l=Wi(a);if(R(`Email ${v.domain(t)}`),y("Provider",E.default.cyan(l)),o.length){m(),console.log(` ${E.default.bold("DNS Records")}`);let c=[8,24,40],d=Tt(["Type","Name","Value"],o.map(S=>({cells:gl(S),status:"pending"})),c);d.start();let f=await j(`/api/domains/${encodeURIComponent(t)}/connect`,{method:"POST",body:JSON.stringify({target:e})}),g=await f.json();f.ok||(d.stop(),m(),h(g.error||g.message,{hint:g.hint,status:f.status,json:s,fields:i}));let $=g.records||[];for(let S=0;S<o.length;S++)$.find(D=>D.record.type===o[S].type&&D.record.name===o[S].name&&D.record.value===o[S].value)?.status==="already_set"||await At(60),d.markDone(S);await At(80),d.stop();let w=$.filter(S=>S.status==="created"||S.status==="updated").length,p=$.filter(S=>S.status==="already_set").length,_;p===$.length?_=`All ${p} records already set`:p>0?_=`${w} created, ${p} already set`:_=`${w} DNS records set`,m(),console.log(` ${b.success} ${E.default.green(`Email configured - ${_}`)}`)}else{let c=k(!0);c.start("Setting DNS records");let d=await j(`/api/domains/${encodeURIComponent(t)}/connect`,{method:"POST",body:JSON.stringify({target:e})}),f=await d.json();d.ok||(c.stop("Failed"),h(f.error||f.message,{hint:f.hint,status:d.status,json:s,fields:i})),c.stop(`${b.success} Email configured via ${E.default.cyan(l)}`)}m(),I("Verify propagation:",`domani email ${t} --check`),m()}var E,hl,pl,Hi=ke(()=>{"use strict";Z();Bt();E=N(H(),1);Pe();q();_e();Ye();hl=["setup","status","remove","list","create","delete","send","inbox","webhook","forward","check","connect"],pl={"google-workspace":"Google Workspace",fastmail:"Fastmail",proton:"Proton Mail"}});var Dr={};Pt(Dr,{dns:()=>Bi});async function Bi(t,e,s,i,n,r){t||(t=await ue()),Q(t,r);let o=r?.json??!1,a=r?.type||s,l=r?.name||i,c=r?.value||n;if(!e||e==="get"){let d=k(!o);d.start(`Loading DNS for ${v.domain(t)}`);let f=await j(`/api/domains/${encodeURIComponent(t)}/dns`),g=await f.json();if(f.ok||(d.stop("Failed"),h(g.error||g.message,{hint:g.hint,status:f.status,json:o,fields:r?.fields})),d.stop(`${g.records.length} record(s)`),o){x(g,r?.fields);return}if(g.records.length===0){m(),console.log(` ${Oe.default.dim(`No DNS records for ${t}`)}`),m(),I("Auto-configure DNS:",`domani connect ${t}`),m();return}let $=[8,24,40,8];R(`DNS ${v.domain(t)}`,$.reduce((p,_)=>p+_,0)+$.length-1);let w=g.records.map(p=>{let _=p.priority?Oe.default.dim(` pri=${p.priority}`):"";return[Oe.default.yellow(p.type),p.name,Oe.default.cyan(p.value)+_,Oe.default.dim(String(p.ttl))]});he(["Type","Name","Value","TTL"],w,$),m();return}if(e==="set"){if((!a||!l||!c)&&h("Missing arguments for dns set",{hint:"Usage: domani dns <domain> set --type A --name www --value 1.2.3.4",code:"validation_error",json:o,fields:r?.fields}),r?.dryRun)return K("dns_set",{domain:t,record:{type:a.toUpperCase(),name:l,value:c,ttl:3600}},o,r?.fields);let d=k(!o);d.start(`Setting ${Oe.default.yellow(a.toUpperCase())} record`);let f=await j(`/api/domains/${encodeURIComponent(t)}/dns`),g=await f.json(),w=(f.ok?g.records:[]).filter(S=>!(S.type===a.toUpperCase()&&S.name===l));w.push({type:a.toUpperCase(),name:l,value:c,ttl:3600});let p=await j(`/api/domains/${encodeURIComponent(t)}/dns`,{method:"PUT",body:JSON.stringify({records:w})}),_=await p.json();p.ok||(d.stop("Failed"),h(_.error||_.message,{hint:_.hint,status:p.status,json:o,fields:r?.fields})),d.stop(`${b.success} ${Oe.default.yellow(a.toUpperCase())} ${l} ${b.arrow} ${Oe.default.cyan(c)}`),o?x(_,r?.fields):(m(),I("Check propagation:",`domani status ${t}`),m());return}if(e==="delete"){if((!a||!l)&&h("Missing arguments for dns delete",{hint:"Usage: domani dns <domain> delete --type A --name www",code:"validation_error",json:o,fields:r?.fields}),r?.dryRun)return K("dns_delete",{domain:t,record:{type:a.toUpperCase(),name:l}},o,r?.fields);let d=k(!o);d.start(`Deleting ${Oe.default.yellow(a.toUpperCase())} ${l}`);let f=await j(`/api/domains/${encodeURIComponent(t)}/dns?type=${encodeURIComponent(a.toUpperCase())}&name=${encodeURIComponent(l)}`,{method:"DELETE"}),g=await f.json();f.ok||(d.stop("Failed"),h(g.error||g.message,{hint:g.hint,status:f.status,json:o,fields:r?.fields})),d.stop(`${b.success} Deleted ${Oe.default.yellow(a.toUpperCase())} ${l}`),o?x(g,r?.fields):(m(),I("Check propagation:",`domani status ${t}`),m());return}if(e==="snapshot"){if(r?.dryRun)return K("dns_snapshot",{domain:t},o,r?.fields);let d=k(!o);d.start(`Capturing DNS snapshot for ${v.domain(t)}`);let f=await j(`/api/domains/${encodeURIComponent(t)}/dns/snapshot`,{method:"POST"}),g=await f.json();f.ok||(d.stop("Failed"),h(g.error||g.message,{hint:g.hint,status:f.status,json:o,fields:r?.fields}));let $=g.records?.length??0;if(d.stop(`${b.success} Captured ${$} record(s)`),o){x(g,r?.fields);return}let w=`${t}.dns.json`,p=(0,Ji.resolve)(process.cwd(),w);(0,Is.writeFileSync)(p,JSON.stringify(g,null,2)+`
|
|
194
|
+
`),R("DNS Snapshot"),y("Domain",v.domain(g.domain)),y("Records",String($)),y("Subdomains",String(g.subdomains?.length??0)),y("Sources",(g.sources||[]).join(", ")||"none"),y("Captured",g.capturedAt||g.captured_at||"now"),y("Saved to",Oe.default.cyan(w)),m(),I("Restore from this snapshot:",`domani dns ${t} restore --file ${w}`),m();return}if(e==="restore"){if(r?.dryRun)return K("dns_restore",{domain:t,source:r?.file||"server_backup"},o,r?.fields);let d=k(!o),f;if(r?.file){let w=(0,Ji.resolve)(process.cwd(),r.file);w.startsWith(process.cwd())||h("File path must be within the current directory",{hint:`Got: ${r.file}`,code:"validation_error",json:o,fields:r?.fields});try{let p=(0,Is.readFileSync)(w,"utf-8"),_=JSON.parse(p);f=JSON.stringify({snapshot:_}),d.start(`Restoring DNS for ${v.domain(t)} from ${Oe.default.cyan(r.file)}`)}catch(p){h(`Failed to read snapshot file: ${p instanceof Error?p.message:"unknown"}`,{hint:`Make sure ${r.file} exists and contains valid JSON.`,code:"validation_error",json:o,fields:r?.fields})}}else d.start(`Restoring DNS for ${v.domain(t)} from server backup`);let g=await j(`/api/domains/${encodeURIComponent(t)}/dns/restore`,{method:"POST",...f?{body:f}:{}}),$=await g.json();if(g.ok||(d.stop("Failed"),h($.error||$.message,{hint:$.hint,status:g.status,json:o,fields:r?.fields})),d.stop(`${b.success} Restored DNS`),o){x($,r?.fields);return}if(R("DNS Restored"),y("Domain",v.domain($.domain)),y("Applied",Oe.default.green(String($.applied??0))),y("Skipped",Oe.default.dim(String($.skipped??0))),$.errors?.length>0){y("Errors",Oe.default.red(String($.errors.length)));for(let w of $.errors)console.log(` ${Oe.default.red("\u2022")} ${w}`)}m(),I("Verify DNS records:",`domani dns ${t}`),m();return}h(`Unknown action: ${e}`,{hint:"Use 'get', 'set', 'delete', 'snapshot', or 'restore'.",code:"validation_error",json:o,fields:r?.fields})}var Oe,Is,Ji,Gi=ke(()=>{"use strict";Z();Oe=N(H(),1);q();_e();Ye();Is=require("node:fs"),Ji=require("node:path")});var Pr={};Pt(Pr,{status:()=>Yi});function Cl(t){return[et.default.yellow(t.type),t.name,et.default.cyan(t.value)+(t.priority?et.default.dim(` pri=${t.priority}`):"")]}function Ol(t){if(R(`Status ${v.domain(t.domain)}`),t.expires){let e=new Date(t.expires).toLocaleDateString(),s=t.days_until_expiry,i=s!=null&&s<30?et.default.red:s!=null&&s<90?et.default.yellow:et.default.green;y("Expires",`${e} ${et.default.dim("(")}${i(`${s} days`)}${et.default.dim(")")}`)}}async function Yi(t,e){if(t||(t=await ue()),Q(t,e),e.json){let f=await j(`/api/domains/${encodeURIComponent(t)}/status`),g=await f.json();f.ok||h(g.error||g.message,{hint:g.hint,status:f.status,json:e.json,fields:e.fields}),x(g,e.fields);return}let s=k(!0);s.start(`Checking ${v.domain(t)}`);let i;try{i=await j(`/api/domains/${encodeURIComponent(t)}/status`,{headers:{Accept:"text/event-stream"},signal:AbortSignal.timeout(e.timeout?parseInt(e.timeout,10)*1e3:3e4)})}catch{s.stop("Failed"),h("Request timed out",{hint:"The status check took too long. Try again.",code:"timeout",json:e.json,fields:e.fields})}if(!i.ok){s.stop("Failed");try{let f=await i.json();h(f.error||f.message,{hint:f.hint,status:i.status,json:e.json,fields:e.fields})}catch{h(`Server error (${i.status})`,{status:i.status,json:e.json,fields:e.fields})}}let n=i.body;n||(s.stop("Failed"),h("Empty response"));let r=new TextDecoder,o="",a=null,l=[],c=!1,d="";try{for await(let f of n){o+=r.decode(f,{stream:!0});let g=o.split(`
|
|
195
|
+
`);o=g.pop()??"";for(let $ of g)if($.startsWith("event: "))d=$.slice(7);else if($.startsWith("data: ")){let w=JSON.parse($.slice(6));if(d==="info"&&(s.stop("Status retrieved"),c=!0,Ol(w)),d==="records")if(l=w,l.length>0){m(),console.log(` ${et.default.bold("DNS Records")}`);let p=[8,10,34];a=Tt(["Type","Name","Value"],l.map(_=>({cells:Cl(_),status:"pending"})),p),a.start()}else m(),y("DNS",et.default.dim("no records")),I("Auto-configure DNS:",`domani connect ${t}`);if(d==="propagation"&&a){let{index:p,propagated:_}=w,S=_?b.success:`${b.warning}`;a.markDone(p,S)}d==="done"&&a&&a.stop(),d==="error"&&(c||s.stop("Failed"),a&&a.stop(),h(w.message||"Status check failed"))}}}catch{c||s.stop("Failed"),a&&a.stop(),h("Connection lost",{hint:"The status check was interrupted. Try again.",code:"connection_lost",json:e.json,fields:e.fields})}c||s.stop("Done"),m()}var et,Ki=ke(()=>{"use strict";Z();et=N(H(),1);q();_e();Ye()});var es={};Pt(es,{buy:()=>Xi});async function zi(t){let e=await Ze({message:`What's next for ${Ne.default.cyan(t)}?`,options:[{value:"connect",label:"Connect to a service",hint:"domani connect"},{value:"email",label:"Set up email",hint:"domani email setup"},{value:"dns",label:"Configure DNS",hint:"domani dns"},{value:"status",label:"Check status & DNS propagation",hint:"domani status"},{value:"done",label:"Done"}]});if(oe(e)||e==="done"){m();return}if(m(),e==="connect"){let{connect:s}=await Promise.resolve().then(()=>(qi(),Cr));await s(t,void 0,{})}else if(e==="email"){let s=await Ee({message:`Mailbox name for ${Ne.default.cyan(t)}`,placeholder:"e.g. hey, hello, contact"});if(oe(s)||!s){m();return}m();let{email:i}=await Promise.resolve().then(()=>(Hi(),Er));await i("create",void 0,{domain:t,slug:s})}else if(e==="dns"){let{dns:s}=await Promise.resolve().then(()=>(Gi(),Dr));await s(t)}else if(e==="status"){let{status:s}=await Promise.resolve().then(()=>(Ki(),Pr));await s(t,{})}}async function Il(t,e){Q(t,e);let s;if(e.preChecked)s={available:!0,...e.preChecked};else{let d=k(!e.json);d.start(`Checking ${v.domain(t)}`);let f=await j(`/api/domains/search?q=${encodeURIComponent(t)}`);s=await f.json(),f.ok||(d.stop("Search failed"),h(s.error,{hint:s.hint,status:f.status,json:e.json,fields:e.fields})),s.available||(d.stop(`${b.error} ${v.domain(t)} is not available`),h(`${t} is not available`,{code:"not_available",json:e.json,fields:e.fields})),d.stop(`${b.success} ${v.domain(t)} ${b.dot} available ${b.dot} ${v.price(s.price)}/yr`)}if(e.dryRun)return K("buy",{domain:t,available:!0,price:s.price,currency:s.currency||"USD"},e.json,e.fields);if(!Rt(e)){let d=await Ge({message:`Purchase ${Ne.default.bold(t)} for ${v.price(s.price)}/yr?`});if(!d||typeof d=="symbol"){console.log(` ${Ne.default.dim("Cancelled.")}`);return}}let i=k(!e.json);i.start("Purchasing");let n=await j("/api/domains/buy",{method:"POST",headers:{Accept:"text/event-stream"},body:JSON.stringify({domain:t})});if(!n.ok||!n.body){i.stop("Purchase failed");let d=await n.json().catch(()=>({}));h(d.error||d.message,{hint:d.hint,fixUrl:d.setup_url||d.payment_options?.card?.setup_url,status:n.status,json:e.json,fields:e.fields})}let r={},o=new TextDecoder,a="",l="";for await(let d of n.body){a+=o.decode(d,{stream:!0});let f=a.split(`
|
|
196
|
+
`);a=f.pop()??"";for(let g of f)if(g.startsWith("event: "))l=g.slice(7).trim();else if(g.startsWith("data: ")){let $=JSON.parse(g.slice(6));l==="checking"?i.message(`Checking ${v.domain($.domain)}`):l==="payment"?i.message(`Charging ${v.price($.total)}`):l==="registering"?i.message(`Registering ${v.domain($.domain)}`):l==="registered"?r=$:l==="error"&&(i.stop("Purchase failed"),h($.error,{hint:$.hint,fixUrl:$.setup_url,status:n.status,json:e.json,fields:e.fields}))}}let c=r.expires?Ne.default.dim(` \xB7 expires ${new Date(r.expires).toLocaleDateString()}`):"";if(i.stop(`${b.success} ${v.domain(r.domain)} is yours!${c}`),e.json){x(r,e.fields);return}Ce?await zi(r.domain):(I("Connect to a service:",`domani connect ${r.domain}`),I("Set up email:",`domani email setup ${r.domain}`),I("Configure DNS:",`domani dns ${r.domain}`),m())}async function Rl(t,e){kr(t,e);let s=!!e.json,i=k(!s);i.start(`Checking ${t.length} domains`);let n=await Promise.all(t.map(async p=>{try{let _=await j(`/api/domains/search?q=${encodeURIComponent(p)}`),S=await _.json();return{domain:p,available:_.ok&&S.available,price:S.price}}catch{return{domain:p,available:!1,price:void 0}}})),r=n.filter(p=>p.available),o=n.filter(p=>!p.available);r.length===0&&(i.stop(`${b.error} None of the ${t.length} domains are available`),process.exit(1));let a=r.reduce((p,_)=>p+(_.price||0),0);if(i.stop(`${b.success} ${r.length}/${t.length} available ${b.dot} ${v.price(a.toFixed(2))} total`),o.length>0)for(let p of o)console.log(` ${b.error} ${v.domain(p.domain)} ${Ne.default.dim("not available")}`);if(e.dryRun)return K("buy_bulk",{domains:r.map(p=>({domain:p.domain,price:p.price})),unavailable:o.map(p=>p.domain),total_price:parseFloat(a.toFixed(2))},e.json,e.fields);if(!Rt(e)){let p=await Ge({message:`Purchase ${Ne.default.bold(String(r.length))} domain${r.length>1?"s":""} for ${v.price(a.toFixed(2))}?`});if(!p||typeof p=="symbol"){console.log(` ${Ne.default.dim("Cancelled.")}`);return}}m();let l=r.map(p=>({cells:[v.domain(p.domain),p.price?`${v.price(p.price.toFixed(2))}/yr`:""],status:"pending"})),c=Tt(["Domain","Price"],l,[30,12],!s);c.start();let f=await(await j("/api/domains/buy",{method:"POST",body:JSON.stringify({domains:r.map(p=>p.domain)})})).json(),g=new Set((f.results||[]).map(p=>p.domain));for(let p=0;p<r.length;p++){let _=r[p].domain.toLowerCase().trim();g.has(_)?c.markDone(p,b.success):c.markDone(p,b.error)}if(c.stop(),s){x(f,e.fields);return}m();let $=f.summary?.succeeded??0,w=f.summary?.failed??0;if($>0&&console.log(` ${b.success} ${Ne.default.green(`${$} domain${$>1?"s":""} registered`)}`),w>0){console.log(` ${b.error} ${Ne.default.red(`${w} failed`)}`);for(let p of f.errors||[])console.log(` ${Ne.default.dim("\u2500")} ${v.domain(p.domain)}: ${Ne.default.dim(p.error)}${p.hint?` ${Ne.default.dim(`(${p.hint})`)}`:""}`)}if(m(),$>0&&Ce){let p=(f.results||[]).filter(_=>_.success).map(_=>_.domain);if(p.length===1)await zi(p[0]);else{let _=await Ze({message:"Set up one of your new domains?",options:[...p.map(S=>({value:S,label:Ne.default.cyan(S)})),{value:"done",label:"Done"}]});!oe(_)&&_!=="done"?(m(),await zi(_)):m()}}else $>0&&(I("Connect to a service:","domani connect <domain>"),I("Set up email:","domani email setup <domain>"),m())}async function Xi(t,e){let s=t.filter(Boolean);if(s.length===0){Ce||h("Missing required argument: domain(s)",{hint:"Usage: domani buy <domain> [domain2 ...]",code:"missing_argument",json:e.json});let i=await Ee({message:"Domain to purchase",placeholder:"e.g. myapp.dev (space-separated for multiple)"});(oe(i)||!i)&&process.exit(0),s=i.split(/\s+/).filter(Boolean)}return s.length===1?Il(s[0],e):Rl(s,e)}var Ne,Vt=ke(()=>{"use strict";Z();Pe();Ne=N(H(),1);q();_e()});var hn=N(fn(),1),{program:yc,createCommand:bc,createArgument:vc,createOption:wc,CommanderError:_c,InvalidArgumentError:Sc,InvalidOptionArgumentError:xc,Command:pn,Argument:kc,Option:jc,Help:Cc}=hn.default;var it=N(H(),1);gt();Li();q();Bt();gt();var bt=N(H(),1);q();async function yr(t){let e=ze(),s=k(!t.json),i=ot();if(i.token){s.start("Checking session");try{let c=await fetch(`${e}/api/me`,{headers:{Authorization:`Bearer ${i.token}`}});if(c.ok){let d=await c.json();s.stop(`Already logged in as ${bt.default.bold(d.email)}`),t.json&&x({status:"already_logged_in",email:d.email});return}}catch{}s.stop("Session expired, re-authenticating"),m()}s.start("Requesting auth code");let n=await fetch(`${e}/api/auth/cli`,{method:"POST",headers:{"Content-Type":"application/json"}});if(!n.ok){s.stop("Failed to initiate login");try{let c=await n.json();h(c.error||c.message||`Server error (${n.status})`,{hint:c.hint,code:"login_failed",json:t.json})}catch{h(`Could not reach ${e}. Check your connection and try again.`,{code:"network_error",json:t.json})}}let{code:r,auth_url:o,expires_in:a}=await n.json();if(s.stop("Auth code received"),t.json){x({status:"awaiting_approval",code:r,auth_url:o,expires_in:a});return}m(),console.log(` ${bt.default.dim("Verification code:")} ${bt.default.bold(bt.default.cyan(r))}`),t.open!==!1?(console.log(` ${bt.default.dim("Opening browser")} ${b.arrow} ${v.url(o)}`),Qe(o)):console.log(` ${bt.default.dim("Open this URL to approve:")} ${v.url(o)}`),m(),s.start("Waiting for approval");let l=120;for(let c=0;c<l;c++){await new Promise(g=>setTimeout(g,5e3));let d=await fetch(`${e}/api/auth/cli/poll?code=${r}`);!d.ok&&d.status!==202&&(s.stop("Login failed"),h(`Server error (${d.status})`,{code:"login_failed"}));let f=await d.json();if(f.status==="complete"){Ft({...ot(),token:f.token,email:f.email,api_url:e}),s.stop(`Logged in as ${bt.default.bold(f.email)}`),m(),I("Get started:","domani search"),m();return}f.error&&(s.stop("Login failed"),h(f.error||f.message,{hint:f.hint,code:"login_failed"}))}s.stop("Login timed out"),h("No approval received within 10 minutes",{hint:"Run 'domani login' to try again",code:"timeout"})}gt();var Ui=N(H(),1);q();async function br(t){let e=ot();if(!e.token){t.json?x({status:"not_logged_in"}):console.log(` ${Ui.default.dim("Not logged in.")}`);return}let{api_url:s}=e;_n(),s&&Ft({api_url:s}),t.json?x({status:"logged_out",email:e.email||null}):console.log(` ${b.success} Logged out${e.email?` ${Ui.default.dim(`(${e.email})`)}`:""}`)}Z();var Zt=N(H(),1);q();async function wr(t){let e=await j("/api/me"),s=await e.json();if(e.ok||h(s.error||s.message,{hint:s.hint,status:e.status,json:t.json,fields:t.fields}),t.json){x(s,t.fields);return}R("Account"),y("Email",Zt.default.bold(s.email)),y("Payment",s.has_payment_method?`${b.success} ${Zt.default.green("active")}`:`${b.error} ${Zt.default.dim("none")}`),y("Domains",String(s.domain_count)),y("API tokens",String(s.token_count)),y("Referral code",s.referral_code||Zt.default.dim("-")),y("Created",new Date(s.created_at).toLocaleDateString()),m()}Z();Pe();var T=N(H(),1);q();_e();var Ve=10,qt=200,Rs=["com","io","ai","dev","app","co","net","org","xyz","sh","me","cc","tech","run","cloud","so","gg","fm","tv","pro","one","inc","ltd","llc","biz","group","global","ventures","capital","fund","agency","store","shop","market","sale","deals","auction","trade","studio","design","art","space","style","fashion","luxury","brand","media","digital","site","online","live","show","world","zone","land","place","city","town","blog","news","social","chat","link","page","fun","lol","meme","wtf","tools","build","works","work","team","solutions","services","systems","network","software","music","video","photo","photos","game","games","club","stream","film","movie","pizza","coffee","beer","bar","pub","restaurant","cafe","kitchen","food","wine","health","care","clinic","dental","fitness","yoga","bio","life","lifestyle","finance","money","legal","law","cash","academy","university","education","training","courses","science","wiki","guide","us","uk","eu","ca","au","de","fr","it","es","nl","jp","sg","nz","mx","house","homes","realty","estate","garden","nyc","london","berlin","paris","guru","ninja","rocks","fail","party","vip","gold","black","pink","red","events","travel","sport","jobs","careers","consulting","energy","eco","green","support","help","info","new","now","today","day"],As=null;async function Nr(){if(As)return As;try{let t=await ve("/api/tlds?sort=price&order=asc&limit=1000");if(t.ok){let s=(await t.json()).tlds.map(i=>i.tld);if(s.length>0){let i=new Set(Rs),n=new Set(s),r=[...Rs.filter(o=>n.has(o)),...s.filter(o=>!i.has(o))];return As=r,r}}}catch{}return As=Rs,Rs}async function Al(t,e,s,i,n){let r=[],o=[],a=Ve,l=0,c=!0,d=0,f=0,g=0,$=0,w=!1,p=!1,_=null,S="",O=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"],D=0,W=setInterval(()=>{p||!c||(D=(D+1)%O.length,B())},80);function V(){d>0&&(process.stdout.write(`\x1B[${d}A\x1B[0J`),d=0)}function ae(){if(c)return[];let L=Ve+$*Ve;return r.length>a||i&&L<n.length?["more","new","skip"]:["new","skip"]}function X(){return r.slice(0,a)}function ee(){let L=ae();return Math.max(0,X().length+L.length-1)}let A=6;function B(){V();let L=[],Y=X(),de=!c&&Y.length===0&&o.length>0,me=de?o.slice(0,A):Y,Ae=me.reduce((ye,ne)=>Math.max(ye,ne.domain.length),0),He=ae();for(let ye=0;ye<me.length;ye++){let ne=me[ye];if(de)L.push(`${T.default.dim("\u2502")} ${T.default.dim("\u2715")} ${T.default.dim(ne.domain.padEnd(Ae))} ${T.default.dim("taken")}`);else{let U=ye===l,Ke=U?T.default.green("\u25CF"):T.default.dim("\u25CB"),ft=ne.domain.padEnd(Ae),Ns=U?T.default.bold(T.default.cyan(ft)):ft,Fs=ne.for_sale?T.default.cyan(`$${ne.for_sale.price} (for sale)`):T.default.dim(`$${ne.price}/yr`);L.push(`${T.default.dim("\u2502")} ${Ke} ${Ns} ${Fs}`)}}if(de&&o.length>A&&L.push(`${T.default.dim("\u2502")} ${T.default.dim(`\u2026 and ${o.length-A} more taken`)}`),c){let ye=S?T.default.dim(`checking ${S}\u2026`):T.default.dim("searching\u2026");L.push(`${T.default.dim("\u2502")} ${T.default.cyan(O[D])} ${ye}`)}else{let ye=Ve+$*Ve;i&&ye>=n.length&&L.push(`${T.default.dim("\u2502")} ${T.default.dim(`All ${Math.min(ye,n.length)} TLDs searched`)}`);for(let U=0;U<He.length;U++){let Ns=X().length+U===l?T.default.green("\u25CF"):T.default.dim("\u25CB"),Fs=He[U]==="more"?T.default.dim("More \u2192"):He[U]==="new"?T.default.dim("New search \u2192"):T.default.dim("Skip");L.push(`${T.default.dim("\u2502")} ${Ns} ${Fs}`)}L.push(T.default.dim("\u2514"))}process.stdout.write(L.join(`
|
|
181
197
|
`)+`
|
|
182
|
-
`),
|
|
183
|
-
`),process.stdout.write("\x1B[?25l"),process.stdin.setRawMode(!0),process.stdin.resume();let
|
|
184
|
-
`);de=
|
|
185
|
-
${T.default.dim("\u2502")} ${T.default.bold(T.default.cyan(
|
|
198
|
+
`),d=L.length}process.stdout.write(`${T.default.cyan("\u25C6")} Register a domain?
|
|
199
|
+
`),process.stdout.write("\x1B[?25l"),process.stdin.setRawMode(!0),process.stdin.resume();let G=L=>{let Y=L.toString();if(Y==="\x1B[A")l=Math.max(0,l-1),B();else if(Y==="\x1B[B")l=Math.min(ee(),l+1),B();else if(Y==="\r"){let de=X();if(c&&de.length===0)return;if(l<de.length)_=de[l]?.domain??null,p=!0;else{let Ae=ae()[l-de.length];Ae==="more"?(a+=Ve,r.length<a?w=!0:(l=Math.min(l,ee()),B())):(Ae==="new"&&(_="__new__"),p=!0)}}else(Y===""||Y==="\x1B")&&(p=!0)};process.stdin.on("data",G),B();async function P(L){let Y=new TextDecoder,de="",me="";for await(let Ae of L){if(p)break;de+=Y.decode(Ae,{stream:!0});let He=de.split(`
|
|
200
|
+
`);de=He.pop()??"";for(let ye of He)if(ye.startsWith("event: "))me=ye.slice(7);else if(ye.startsWith("data: ")){let ne=JSON.parse(ye.slice(6));if(me==="error"&&(process.stdin.isTTY&&process.stdin.setRawMode(!1),process.stdout.write("\x1B[?25h"),h(ne.message||ne.error||"Search failed",{code:ne.code||"error"})),me==="result"&&(S=ne.domain),me==="result"&&(ne.available||ne.for_sale||s)){if($===0){let U=r.findIndex(Ke=>Ke.price>ne.price);U===-1?r.push(ne):(r.splice(U,0,ne),U<=l&&l++)}else r.push(ne);B()}else if(me==="result"&&!ne.available&&!ne.error)o.length<8&&o.push(ne);else if(me==="done"){f+=ne.total,g+=ne.available,c=!1,l=Math.min(l,ee());let U=Ve+$*Ve;r.length<a&&i&&U<n.length&&(w=!0),w||B()}}}c=!1}for(await P(t);!p;)if(await new Promise(L=>{let Y=setInterval(()=>{(p||w)&&(clearInterval(Y),L())},16)}),w&&!p){w=!1;let L=Ve+$*Ve,Y=n.slice(L,L+Ve);$++,c=!0,l=Math.min(l,Math.max(0,r.length-1)),B();let de=new URLSearchParams;de.set("domains",Y.map(me=>`${e}.${me}`).join(","));try{let me=await ve(`/api/domains/search?${de}`,{headers:{Accept:"text/event-stream"}});me.ok&&me.body?await P(me.body):(c=!1,B())}catch{c=!1,B()}}clearInterval(W),process.stdin.removeListener("data",G),process.stdin.isTTY&&process.stdin.setRawMode(!1),process.stdin.pause(),process.stdout.write("\x1B[?25h"),V();let te=_==="__new__",z=te?null:_,le=z?r.find(L=>L.domain===z)??null:null;return z?process.stdout.write(`${T.default.dim("\u25C7")} Register a domain?
|
|
201
|
+
${T.default.dim("\u2502")} ${T.default.bold(T.default.cyan(z))}
|
|
186
202
|
${T.default.dim("\u2514")}
|
|
187
203
|
`):process.stdout.write(`${T.default.dim("\u2514")}
|
|
188
|
-
`),{chosen:
|
|
189
|
-
`);te=
|
|
190
|
-
`);
|
|
191
|
-
`)
|
|
192
|
-
domani import <domain> --verify`,code:"validation_error",json:
|
|
193
|
-
Run 'domani tokens list' to see your tokens.`,code:"validation_error",json:e.json,fields:e.fields});let t=j(!e.json);t.start("Revoking token");let s=await S(`/api/tokens/${encodeURIComponent(e.tokenId)}`,{method:"DELETE"}),i=await s.json();if(s.ok||(t.stop("Failed"),h(i.error||i.message,{hint:i.hint,status:s.status,json:e.json,fields:e.fields})),t.stop(`${v.success} Token revoked`),e.json){k(i,e.fields);return}console.log(` ${Ve.default.dim("Any applications using this key will need a new one.")}`),d()}Q();var Se=V(J(),1);H();ye();Je();async function Mr(e,t){e||(e=await ue()),ee(e,t);let s=t.autoRenew!==void 0,i=t.whoisPrivacy!==void 0,n=t.securityLock!==void 0;if(!s&&!i&&!n)return El(e,t.json,t.fields);let r={};if(s){let c=tn(t.autoRenew);c===null&&h("--auto-renew must be on or off",{code:"validation_error",json:t.json,fields:t.fields}),r.auto_renew=c}if(i){let c=tn(t.whoisPrivacy);c===null&&h("--whois-privacy must be on or off",{code:"validation_error",json:t.json,fields:t.fields}),r.whois_privacy=c}if(n){let c=tn(t.securityLock);c===null&&h("--security-lock must be on or off",{code:"validation_error",json:t.json,fields:t.fields}),r.security_lock=c}if(t.dryRun)return z("settings_update",{domain:e,...r},t.json,t.fields);let o=j(!t.json);o.start(`Updating ${w.domain(e)}`);let a=await S(`/api/domains/${encodeURIComponent(e)}/settings`,{method:"PUT",body:JSON.stringify(r)}),l=await a.json();if(a.ok||(o.stop("Failed"),h(l.error||l.message,{hint:l.hint,status:a.status,json:t.json,fields:t.fields})),o.stop(`${v.success} Settings updated`),t.json){k(l,t.fields);return}R("Settings Updated"),$("Domain",w.domain(l.domain)),l.auto_renew!==void 0&&$("Auto-renew",l.auto_renew?Se.default.green("on"):Se.default.dim("off")),l.whois_privacy!==void 0&&$("WHOIS privacy",l.whois_privacy?Se.default.green("on"):Se.default.dim("off")),l.security_lock!==void 0&&$("Security lock",l.security_lock?Se.default.green("locked"):Se.default.dim("unlocked")),l.hint&&$("",Se.default.dim(l.hint)),d()}async function El(e,t,s){let i=j(!t);i.start(`Loading ${w.domain(e)}`);let n=await S(`/api/domains/${encodeURIComponent(e)}`),r=await n.json();if(n.ok||(i.stop("Failed"),h(r.error||r.message,{hint:r.hint,status:n.status,json:t,fields:s})),i.stop(`${v.success} ${w.domain(e)}`),t){k(r,s);return}R("Domain Settings"),$("Domain",w.domain(r.domain)),$("Status",r.status==="active"?Se.default.green(r.status):Se.default.yellow(r.status)),$("Auto-renew",r.auto_renew?Se.default.green("on"):Se.default.dim("off")),r.registrar&&($("WHOIS privacy",r.registrar.whois_privacy?Se.default.green("on"):Se.default.dim("off")),$("Security lock",r.registrar.security_lock?Se.default.green("locked"):Se.default.dim("unlocked"))),$("Expires",new Date(r.expires_at).toLocaleDateString()+Se.default.dim(` (${r.days_until_expiry} days)`)),d(),O("Toggle auto-renew:",`domani settings ${e} --auto-renew off`),O("Toggle WHOIS privacy:",`domani settings ${e} --whois-privacy off`),O("Toggle security lock:",`domani settings ${e} --security-lock off`),O("Get transfer auth code:",`domani auth-code ${e}`),d()}function tn(e){let t=e.toLowerCase();return t==="on"||t==="true"||t==="1"||t==="enable"?!0:t==="off"||t==="false"||t==="0"||t==="disable"?!1:null}Q();var Et=V(J(),1);H();ye();Je();async function qr(e,t){e||(e=await ue()),ee(e,t);let s=j(!t.json);s.start(`Getting auth code for ${w.domain(e)}`);let i=await S(`/api/domains/${encodeURIComponent(e)}/auth-code`),n=await i.json();if(i.ok||(s.stop("Failed"),h(n.error||n.message,{hint:n.hint,status:i.status,json:t.json,fields:t.fields})),s.stop(`${v.success} Auth code retrieved`),t.json){k(n,t.fields);return}if(R("Auth Code"),$("Domain",w.domain(n.domain)),$("Auth code",Et.default.bold(Et.default.green(n.auth_code))),n.was_unlocked&&$("",Et.default.yellow("Domain was automatically unlocked to allow transfer.")),n.hint&&(d(),console.log(` ${Et.default.dim(n.hint)}`)),n.next_steps?.length){d();for(let r of n.next_steps)console.log(` ${Et.default.dim("\u2192")} ${Et.default.dim(r)}`)}d(),O("Check transfer status:",`domani transfer-away ${e}`),O("Re-lock domain:",`domani settings ${e} --security-lock on`),d()}Q();var ut=V(J(),1);H();ye();Je();var Il={none:ut.default.dim,pending:ut.default.yellow,approved:ut.default.yellow,completed:ut.default.green,rejected:ut.default.red,expired:ut.default.red};async function Wr(e,t){e||(e=await ue()),ee(e,t);let s=j(!t.json);s.start(`Checking transfer status for ${w.domain(e)}`);let i=await S(`/api/domains/${encodeURIComponent(e)}/transfer-away`),n=await i.json();if(i.ok||(s.stop("Failed"),h(n.error||n.message,{hint:n.hint,status:i.status,json:t.json,fields:t.fields})),s.stop(`${v.success} ${w.domain(e)}`),t.json){k(n,t.fields);return}R("Transfer Away Status"),$("Domain",w.domain(n.domain));let r=Il[n.status]||ut.default.dim;$("Status",r(n.status)),n.gaining_registrar&&$("New registrar",n.gaining_registrar),n.request_date&&$("Requested",new Date(n.request_date).toLocaleDateString()),n.hint&&(d(),console.log(` ${ut.default.dim(n.hint)}`)),d(),n.status==="none"?O("Get auth code to start:",`domani auth-code ${e}`):n.status==="pending"||n.status==="approved"?O("Check again later:",`domani transfer-away ${e}`):n.status==="completed"?O("Search for a new domain:","domani search <name>"):(n.status==="rejected"||n.status==="expired")&&O("Retry with a new auth code:",`domani auth-code ${e}`),d()}Q();Ie();var Fs=V(J(),1);H();async function Hr(e,t){return e==="set"?Pl(t):Tl(t)}async function Tl(e){let t=j(!e.json);t.start("Loading contact info");let s=await S("/api/me/contact"),i=await s.json();if(s.ok||(t.stop("Failed"),h(i.error||i.message,{hint:i.hint,status:s.status,json:e.json,fields:e.fields})),t.stop(`${v.success} Contact info`),e.json){k(i,e.fields);return}if(R("Contact Info"),!i.has_contact){console.log(` ${v.warning} ${Fs.default.yellow("No contact info set.")} Run ${Fs.default.bold("domani contact set")} to add.`),d(),console.log(` ${Fs.default.dim("Contact info is required before purchasing domains.")}`),d();return}let n=i.contact;$("Name",`${n.first_name} ${n.last_name}`),n.org_name&&$("Organization",n.org_name),$("Address",n.address1),n.address2&&$("",n.address2),$("",`${n.city}, ${n.state} ${n.postal_code}`),$("Country",n.country),$("Phone",n.phone),$("Email",n.email),d()}async function Pl(e){let t={},s=e.firstName||e.lastName||e.address1;if(!xe&&!s&&h("Missing required flags for contact set",{hint:"Usage: domani contact set --first-name John --last-name Doe --address1 '123 Main St' --city SF --state CA --postal-code 94105 --country US --phone +1.5551234567 --email john@example.com",code:"missing_argument",json:e.json}),s){let a=["firstName","lastName","address1","city","state","postalCode","country","phone","email"],l={firstName:"first_name",lastName:"last_name",orgName:"org_name",address1:"address1",address2:"address2",city:"city",state:"state",postalCode:"postal_code",country:"country",phone:"phone",email:"email"},c=a.filter(u=>!e[u]);c.length>0&&h(`Missing required flags: ${c.map(u=>`--${u.replace(/[A-Z]/g,p=>`-${p.toLowerCase()}`)}`).join(", ")}`,{code:"missing_argument",json:e.json});for(let[u,p]of Object.entries(l)){let g=e[u];g&&(t[p]=g)}}else{let a=await S("/api/me/contact"),c=(a.ok?await a.json():null)?.contact,u=[{key:"first_name",message:"First name",placeholder:"John",required:!0},{key:"last_name",message:"Last name",placeholder:"Doe",required:!0},{key:"org_name",message:"Organization (optional, press Enter to skip)",placeholder:"Acme Inc.",required:!1},{key:"address1",message:"Address line 1",placeholder:"123 Main St",required:!0},{key:"address2",message:"Address line 2 (optional)",placeholder:"Suite 100",required:!1},{key:"city",message:"City",placeholder:"San Francisco",required:!0},{key:"state",message:"State / Province",placeholder:"CA",required:!0},{key:"postal_code",message:"Postal / ZIP code",placeholder:"94105",required:!0},{key:"country",message:"Country code (ISO 3166-1 alpha-2)",placeholder:"US",required:!0},{key:"phone",message:"Phone (+CC.NUMBER)",placeholder:"+1.5551234567",required:!0},{key:"email",message:"Contact email",placeholder:"john@example.com",required:!0}];for(let p of u){let g=c?.[p.key]||"",x=await Re({message:p.message,placeholder:p.placeholder,defaultValue:g,validate:p.required?f=>f?.trim()?void 0:`${p.message} is required`:void 0});oe(x)&&process.exit(0);let y=x.trim();y&&(t[p.key]=y)}}if(e.dryRun)return z("contact_set",t,e.json,e.fields);let i=j(!e.json);i.start("Saving contact info");let n=await S("/api/me/contact",{method:"PUT",body:JSON.stringify(t)}),r=await n.json();if(n.ok||(i.stop("Failed"),h(r.error||r.message,{hint:r.hint,status:n.status,json:e.json,fields:e.fields})),i.stop(`${v.success} Contact info saved`),e.json){k(r,e.fields);return}R("Contact Saved");let o=r.contact;$("Name",`${o.first_name} ${o.last_name}`),o.org_name&&$("Organization",o.org_name),$("Address",o.address1),o.address2&&$("",o.address2),$("",`${o.city}, ${o.state} ${o.postal_code}`),$("Country",o.country),$("Phone",o.phone),$("Email",o.email),d(),O("Search for a domain:","domani search <name>"),d()}Q();var Ae=V(J(),1);H();ye();Je();async function Gr(e,t,s,i){if(e||(e=await ue()),ee(e,i),!t)return Dl(e,i.json,i.fields);switch(t){case"enable":case"on":return i.dryRun?z("parking_enable",{domain:e},i.json,i.fields):Jr(e,!0,i.json,i.fields);case"disable":case"off":return i.dryRun?z("parking_disable",{domain:e},i.json,i.fields):Jr(e,!1,i.json,i.fields);case"price":{s||h("Price required",{hint:"Usage: domani parking <domain> price <amount>",code:"validation_error",json:i.json,fields:i.fields});let n=parseFloat(s);return(isNaN(n)||n<=0)&&h("Price must be a positive number",{hint:`Got: "${s}"`,code:"validation_error",json:i.json,fields:i.fields}),i.dryRun?z("parking_price",{domain:e,price:n},i.json,i.fields):Br(e,n,i.json,i.fields)}case"unprice":case"unlist":return i.dryRun?z("parking_unlist",{domain:e},i.json,i.fields):Br(e,null,i.json,i.fields);default:h(`Unknown action: ${t}`,{hint:"Actions: enable, disable, price <amount>, unprice",code:"validation_error",json:i.json,fields:i.fields})}}async function Dl(e,t,s){let i=j(!t);i.start(`Loading ${w.domain(e)}`);let n=await S(`/api/domains/${encodeURIComponent(e)}`),r=await n.json();if(n.ok||(i.stop("Failed"),h(r.error||r.message,{hint:r.hint,status:n.status,json:t,fields:s})),i.stop(`${v.success} ${w.domain(e)}`),t){k({domain:r.domain,parking_enabled:r.parking_enabled,listing_price:r.listing_price},s);return}R("Parking"),$("Domain",w.domain(r.domain)),$("Parking",r.parking_enabled?Ae.default.green("enabled"):Ae.default.dim("disabled")),$("Listing",r.listing_price?`${w.price(r.listing_price)} ${Ae.default.dim("(for sale)")}`:Ae.default.dim("not listed")),d(),O("Enable parking:",`domani parking ${e} enable`),O("Set sale price:",`domani parking ${e} price 499`),O("View analytics:",`domani analytics ${e}`),d()}async function Jr(e,t,s,i){let n=j(!s);n.start(`${t?"Enabling":"Disabling"} parking for ${w.domain(e)}`);let r=await S(`/api/domains/${encodeURIComponent(e)}/parking`,{method:"PUT",body:JSON.stringify({enabled:t})}),o=await r.json();if(r.status===409&&o.requires_confirmation){if(n.stop(`${v.warning} DNS records will be replaced`),s){k(o,i);return}console.log(`
|
|
194
|
-
${
|
|
195
|
-
${
|
|
196
|
-
Run 'domani webhooks events' to see available event types.`,code:"validation_error",json:
|
|
204
|
+
`),{chosen:z,chosenResult:le,searchAgain:te,allTaken:r.length===0&&o.length>0,expanded:$>0}}async function Fr(t,e,s){if(!t){Ce||h("Missing required argument: domain",{hint:"Usage: domani search <domain> [tlds...]",code:"missing_argument",json:s.json});let A=await Ee({message:"Search for a domain",placeholder:"e.g. myapp or myapp.dev"});(oe(A)||!A)&&process.exit(0),t=A}let i=e.map(A=>A.replace(/^\./,"")),n=s.tlds?.split(",").map(A=>A.trim())||[],r=[...new Set([...i,...n])];if(r.length>0&&Os(r,s),Q(t,s),t.includes(".")&&r.length===0){let A=k(!s.json);A.start(`Checking ${v.domain(t)}`);let[B,G]=await Promise.all([ve(`/api/domains/search?q=${encodeURIComponent(t)}`),ve(`/api/domains/${encodeURIComponent(t)}/og`).catch(()=>null)]),P=await B.json();if(B.ok||(A.stop("Search failed"),h(P.error||P.message,{hint:P.hint,status:B.status,json:s.json,fields:s.fields})),s.json){let te=P.domain.split(".")[0];x({name:te,results:[P],total:1,available:P.available?1:0},s.fields);return}if(P.available)if(A.stop(`${b.success} ${v.domain(P.domain)} ${b.dot} available ${b.dot} ${v.price(P.price)}/yr`),Ce&&!s.json){let{buy:te}=await Promise.resolve().then(()=>(Vt(),es));await te([P.domain],{preChecked:{price:P.price,currency:P.currency}})}else m(),I("Register it:",`domani buy ${P.domain}`),m();else if(P.for_sale?.buyable)if(A.stop(`${b.info} ${v.domain(P.domain)} ${b.dot} ${T.default.cyan("for sale")} ${b.dot} ${v.price(P.for_sale.price)}`),Ce&&!s.json){let{buy:te}=await Promise.resolve().then(()=>(Vt(),es));await te([P.domain],{preChecked:{price:P.for_sale.price,currency:P.for_sale.currency,marketplace:!0}})}else m(),I("Buy it:",`domani buy ${P.domain}`),m();else if(P.error)A.stop(`${T.default.dim("?")} ${v.domain(P.domain)} ${b.dot} ${T.default.dim("lookup failed")}`);else{let te;try{if(G?.ok){let le=await G.json();le?.title&&(te=le.title)}}catch{}let z=te?` ${b.dot} ${T.default.dim(`"${te}"`)}`:"";A.stop(`${b.error} ${v.domain(P.domain)} ${b.dot} ${T.default.red("taken")}${z}`)}return}let o=t.split(".")[0];if(Ce&&!s.json&&r.length>0){let A=new URLSearchParams;A.set("domains",r.map(U=>`${o}.${U}`).join(",")),s.maxPrice&&A.set("max_price",s.maxPrice);let B=await ve(`/api/domains/search?${A}`,{headers:{Accept:"text/event-stream"}});if(!B.ok||!B.body){h("Search failed",{json:s.json});return}let G=[],P=new TextDecoder,te="",z="",le=k(!0);le.start(`Checking ${r.length} TLD${r.length>1?"s":""}`);for await(let U of B.body){te+=P.decode(U,{stream:!0});let Ke=te.split(`
|
|
205
|
+
`);te=Ke.pop()??"";for(let ft of Ke)ft.startsWith("event: ")?z=ft.slice(7):ft.startsWith("data: ")&&z==="result"&&G.push(JSON.parse(ft.slice(6)))}le.stop("");let L=Math.max(...r.map(U=>`${o}.${U}`.length))+2,Y=G.filter(U=>U.available),de=G.filter(U=>!U.available&&!U.error),me=G.filter(U=>!U.available&&U.for_sale);for(let U of[...Y,...me,...de.filter(Ke=>!Ke.for_sale)])U.available?console.log(` ${T.default.green("\u2713")} ${T.default.bold(T.default.white(U.domain.padEnd(L)))} ${T.default.green(v.price(U.price)+"/yr")}`):U.for_sale?console.log(` ${T.default.cyan("$")} ${T.default.bold(T.default.white(U.domain.padEnd(L)))} ${T.default.cyan(v.price(U.for_sale.price))} ${T.default.dim("(for sale)")}`):console.log(` ${T.default.dim("\u2717")} ${T.default.dim(U.domain.padEnd(L))} ${T.default.dim("taken")}`);if(Y.length===0){console.log(` ${T.default.dim("No domains available")}`),m();return}let{buy:Ae}=await Promise.resolve().then(()=>(Vt(),es));if(Y.length===1){await Ae([Y[0].domain],{preChecked:{price:Y[0].price,currency:Y[0].currency}});return}let{select:He,isCancel:ye}=await Promise.resolve().then(()=>(Pe(),Ei)),ne=await He({message:"Register one?",options:[...Y.map(U=>({value:U.domain,label:v.domain(U.domain),hint:v.price(U.price)+"/yr"})),{value:"__skip__",label:"Skip"}]});if(!ye(ne)&&ne!=="__skip__"){m();let U=Y.find(Ke=>Ke.domain===ne);await Ae([ne],{preChecked:U?{price:U.price,currency:U.currency}:void 0})}else m();return}if(Ce&&!s.json){let A=await Nr();for(s.expand&&A.length>qt&&console.error(T.default.dim(` (--expand: checking the first ${qt} of ${A.length} TLDs - server limit per request)`));;){let B=s.expand?A.slice(0,qt):A.slice(0,Ve),G=new URLSearchParams;G.set("domains",B.map(He=>`${o}.${He}`).join(",")),s.maxPrice&&G.set("max_price",s.maxPrice);let P=k(!0);P.start(`Searching available domains for ${T.default.bold(o)}`);let te=await ve(`/api/domains/search?${G}`,{headers:{Accept:"text/event-stream"}});if(!te.ok||!te.body){P.stop("Search failed");break}P.stop("");let z=!s.expand,{chosen:le,chosenResult:L,searchAgain:Y}=await Al(te.body,o,s.all??!1,z,A);if(le){m();let{buy:He}=await Promise.resolve().then(()=>(Vt(),es)),ye=L?{price:L.price,currency:L.currency}:void 0;await He([le],{preChecked:ye});return}if(!Y)break;let{text:de,isCancel:me}=await Promise.resolve().then(()=>(Pe(),Ei)),Ae=await de({message:"Search for a domain",placeholder:"e.g. myapp or myapp.dev"});if(me(Ae)||!Ae)break;o=Ae.split(".")[0]}m();return}let a=o,l=await Nr(),c=r.length>0?r:s.expand?l.slice(0,qt):l.slice(0,Ve);s.expand&&r.length===0&&l.length>qt&&console.error(`(--expand: checking the first ${qt} of ${l.length} TLDs - server limit per request; use --tlds to target others)`);let d=c.map(A=>`${a}.${A}`),f=new URLSearchParams;f.set("domains",d.join(",")),s.maxPrice&&f.set("max_price",s.maxPrice);let g=k(!s.json);g.start(`Searching available domains for ${T.default.bold(a)}`);let $=await ve(`/api/domains/search?${f}`,{headers:{Accept:"text/event-stream"}});if(!$.ok){g.stop("Search failed");try{let A=await $.json();h(A.error||A.message||`Server error (${$.status})`,{hint:A.hint,status:$.status,json:s.json,fields:s.fields})}catch{h(`Server error (${$.status})`,{status:$.status,json:s.json,fields:s.fields})}}let w=$.body;w||(g.stop("Search failed"),h("Empty response",{code:"error",json:s.json,fields:s.fields}));let p=[],_=!1,S=0,O=s.all??!1;function D(){_||(_=!0,g.stop(`Checking TLDs for ${T.default.bold(a)}`),m())}function W(A){D(),A.available?console.log(` ${b.success} ${v.domain(A.domain).padEnd(37)} ${v.price(A.price)}${T.default.dim("/yr")}`):A.for_sale?console.log(` ${b.info} ${v.domain(A.domain).padEnd(37)} ${T.default.cyan(v.price(A.for_sale.price))} ${T.default.dim("(for sale)")}`):A.error||console.log(` ${b.error} ${T.default.dim(A.domain.padEnd(38))} ${T.default.red("taken")}`)}function V(){_||g.message(`Checking TLDs for ${T.default.bold(a)} ${T.default.dim(`(${S} checked)`)}`)}let ae=new TextDecoder,X="",ee="";for await(let A of w){X+=ae.decode(A,{stream:!0});let B=X.split(`
|
|
206
|
+
`);X=B.pop()??"";for(let G of B)if(G.startsWith("event: "))ee=G.slice(7);else if(G.startsWith("data: ")){let P=JSON.parse(G.slice(6));if(ee==="error")g.stop("Search failed"),h(P.message||P.error||"Search failed",{code:P.code||"error",json:s.json,fields:s.fields});else if(ee==="result")S++,P.available||P.for_sale||O?(s.json||W(P),p.push(P)):s.json||V();else if(ee==="done"){if(s.json){p.sort((L,Y)=>L.price-Y.price),x({name:a,results:p,total:P.total,available:P.available},s.fields);return}_&&console.log(` ${T.default.dim("\u2500".repeat(50))}`);let te=P.total-P.available,z=P.total>=5&&te/P.total>=.5,le=`Checked ${P.total} TLDs \xB7 ${P.available} available${z?" \xB7 popular name":""}`;console.log(` ${T.default.dim(le)}`),P.available===0&&!s.expand&&r.length===0&&(m(),I("Try more TLDs:",`domani search ${a} --expand`))}}}m()}Vt();Z();var dt=N(H(),1);q();async function Lr(t){let e=k(!t.json);e.start("Loading domains");let s=await j("/api/domains"),i=await s.json();if(s.ok||(e.stop("Failed"),h(i.error||i.message,{hint:i.hint,status:s.status,json:t.json,fields:t.fields})),e.stop(`${i.domains.length} domain(s)`),t.json){x({...i,count:i.domains.length},t.fields);return}if(i.domains.length===0){m(),console.log(` ${dt.default.dim("No domains yet.")} Use: ${dt.default.cyan("domani buy <domain>")}`),m();return}let n=[30,12,12,14];R(`Your Domains (${i.domains.length})`,n.reduce((o,a)=>o+a,0)+n.length-1);let r=i.domains.map(o=>{let a=new Date(o.expiresAt).toLocaleDateString(),l=o.status==="active"?dt.default.green:o.status==="pending"?dt.default.yellow:dt.default.red,c=o.autoRenew?dt.default.green("on"):dt.default.dim("off");return[v.domain(o.domain),l(o.status),c,dt.default.dim(a)]});he(["Domain","Status","Auto-renew","Expires"],r,n),m()}Gi();Z();var Et=N(H(),1);q();async function Ur(t){let e=new URLSearchParams;t.maxPrice&&e.set("max_price",t.maxPrice),t.minPrice&&e.set("min_price",t.minPrice),t.sort&&e.set("sort",t.sort),t.search&&e.set("search",t.search),t.limit&&e.set("limit",t.limit),e.set("order","asc");let s=k(!t.json);s.start("Loading TLDs");let i=await ve(`/api/tlds?${e}`),n=await i.json();if(i.ok||(s.stop("Failed"),h(n.error||n.message,{hint:n.hint,status:i.status,json:t.json,fields:t.fields})),s.stop(`${n.total} TLDs loaded`),t.json){x(n,t.fields);return}let r=n.tlds;if(r.length===0){m(),console.log(` ${Et.default.dim("No TLDs match your filters.")}`),m();return}R("TLD Pricing");let o=r.map(a=>[Et.default.bold(`.${a.tld}`),v.price(a.registration.toFixed(2))+Et.default.dim("/yr"),Et.default.dim("renew ")+v.price(a.renewal.toFixed(2))+Et.default.dim("/yr")]);he(["TLD","Register","Renewal"],o,[22,16,20]),m(),console.log(` ${Et.default.dim(`${n.total} TLDs total`)}`),m()}Z();var Ie=N(H(),1);q();_e();async function Mr(t,e){Q(t,e);let s=k(!e.json);s.start(`Looking up ${v.domain(t)}`);let[i,n]=await Promise.all([ve(`/api/domains/whois?q=${encodeURIComponent(t)}`),ve(`/api/domains/${encodeURIComponent(t)}/og`).catch(()=>null)]),r=await i.json(),o=null;try{n?.ok&&(o=await n.json())}catch{}if(i.ok||(s.stop("Lookup failed"),h(r.error||r.message,{hint:r.hint,status:i.status,json:e.json,fields:e.fields})),s.stop("WHOIS data retrieved"),e.json){x({...r,...o?{og:o}:{}},e.fields);return}if(R(`WHOIS ${v.domain(r.domain)}`),!r.registered){y("Status",`${b.success} ${Ie.default.green("not registered")}`),m(),I("Register it:",`domani buy ${r.domain}`),m();return}if(y("Status",`${b.error} ${Ie.default.red("registered")}`),(o?.title||o?.description)&&(m(),console.log(` ${Ie.default.bold("Website preview")}`),console.log(` ${Ie.default.dim("\u2500".repeat(50))}`),o.title&&y("Title",o.title),o.description&&y("Description",Ie.default.dim(o.description.length>80?o.description.slice(0,80)+"\u2026":o.description)),m()),r.registrar&&y("Registrar",r.registrar),r.created&&y("Created",r.created),r.expires&&y("Expires",r.expires),r.days_until_expiry!=null){let l=r.days_until_expiry,c=l<30?Ie.default.red:l<90?Ie.default.yellow:Ie.default.green;y("Days left",c(String(l)))}r.updated&&y("Updated",r.updated),y("DNSSEC",r.dnssec?Ie.default.green("yes"):Ie.default.dim("no")),r.nameservers?.length>0&&y("Nameservers",r.nameservers.map(l=>Ie.default.cyan(l)).join(Ie.default.dim(", "))),r.status?.length>0&&y("Status codes",Ie.default.dim(r.status.join(", ")));let a=r.contacts?.registrant;a&&!r.redacted?(m(),console.log(` ${Ie.default.bold("Registrant")}`),console.log(` ${Ie.default.dim("\u2500".repeat(50))}`),a.name&&y("Name",a.name),a.organization&&y("Organization",a.organization),a.email&&y("Email",v.url(a.email)),a.country&&y("Country",a.country)):r.redacted&&y("Contact",Ie.default.dim("redacted (WHOIS privacy)")),m()}Z();Pe();var ut=N(H(),1);q();_e();async function Vr(t,e){if(!t){Ce||h("Missing required argument: prompt",{hint:'Usage: domani suggest "describe your project"',code:"missing_argument",json:e.json});let p=await Ee({message:"Describe your project or idea",placeholder:"e.g. AI coding assistant, pet food delivery..."});(oe(p)||!p)&&process.exit(0),t=p}let s=new URLSearchParams({prompt:t});if(e.count&&s.set("count",e.count),e.tlds&&s.set("tlds",e.tlds),e.tlds&&Os(e.tlds.split(",").map(p=>p.trim()),e),e.style&&s.set("style",e.style),e.lang&&s.set("lang",e.lang),e.json){let p=k(!1);p.start("Finding available domains");let _=e.timeout?parseInt(e.timeout,10)*1e3:6e4,S;try{S=await ve(`/api/domains/suggest?${s}`,{signal:AbortSignal.timeout(_)})}catch{p.stop("Failed"),h("Request timed out",{hint:"Suggest took too long. Try --timeout <seconds> to increase.",code:"timeout",json:e.json,fields:e.fields})}let O=await S.json();S.ok||(p.stop("Failed"),h(O.error||O.message,{hint:O.hint,status:S.status,json:e.json,fields:e.fields})),x(O,e.fields);return}let i=k(!0);i.start("Finding available domains");let n=e.timeout?parseInt(e.timeout,10)*1e3:6e4,r;try{r=await ve(`/api/domains/suggest?${s}`,{headers:{Accept:"text/event-stream"},signal:AbortSignal.timeout(n)})}catch{i.stop("Failed"),h("Request timed out",{hint:"Suggest took too long. Try --timeout <seconds> to increase.",code:"timeout"})}if(!r.ok){i.stop("Failed");try{let p=await r.json();h(p.error||p.message||`Server error (${r.status})`,{hint:p.hint,status:r.status})}catch{h(`Server error (${r.status})`,{status:r.status})}}let o=r.body;o||(i.stop("Failed"),h("Empty response"));let a=[],l=[],c=!1,d=0;function f(){c||(c=!0,i.stop("Finding available domains"),m())}let g=new TextDecoder,$="",w="";for await(let p of o){$+=g.decode(p,{stream:!0});let _=$.split(`
|
|
207
|
+
`);$=_.pop()??"";for(let S of _)if(S.startsWith("event: "))w=S.slice(7);else if(S.startsWith("data: "))try{let O=JSON.parse(S.slice(6));if(w==="result")d++,O.available?a.push(O):l.push(O),c||i.message(`Finding available domains ${ut.default.dim(`(${d} checked, ${a.length} available)`)}`);else if(w==="iteration")c||i.message(`Finding available domains ${ut.default.dim(`(round ${O.n})`)}`);else if(w==="done"){f();for(let D of a){let W=D.reason?` ${ut.default.dim(D.reason)}`:"";console.log(` ${b.success} ${v.domain(D.domain).padEnd(37)} ${v.price(D.price)}${ut.default.dim("/yr")}${W}`)}for(let D of l)console.log(` ${b.error} ${ut.default.dim(D.domain.padEnd(38))} ${ut.default.red("taken")}`);console.log(` ${ut.default.dim("\u2500".repeat(50))}`),console.log(` ${ut.default.dim(`Found ${O.total} available \xB7 checked ${O.checked} \xB7 ${O.iterations} round${O.iterations>1?"s":""}`)}`)}else w==="error"&&(c||i.stop("Failed"),h(O.message))}catch{}}a.length===0&&l.length===0&&(c||i.stop("No results"),h("Could not find available domains for this prompt.")),m(),a.length>0&&(I("Register one:",`domani buy ${a[0].domain}`),m())}qi();Ki();Z();Pe();var Wt=N(H(),1);q();_e();Bt();async function qr(t,e){if(Q(t,e),!e.authCode){(e.json||!process.stdout.isTTY)&&h("--auth-code is required",{hint:"Get the EPP/auth code from your current registrar.",code:"validation_error",json:e.json,fields:e.fields});let a=await Ee({message:"Enter the EPP/auth code from your current registrar:",validate:l=>!l||l.trim().length===0?"Auth code is required":void 0});oe(a)&&process.exit(0),e.authCode=a}let s=k(!e.json);s.start(`Checking transfer eligibility for ${v.domain(t)}`);let i=await j(`/api/domains/transfer-check?domain=${encodeURIComponent(t)}`),n=await i.json();if(i.ok||(s.stop("Check failed"),h(n.error,{hint:n.hint,status:i.status,json:e.json,fields:e.fields})),n.eligible||(s.stop(`${b.error} Not eligible`),h(n.reason||"Domain is not eligible for transfer.",{hint:n.hint,code:"not_eligible",json:e.json,fields:e.fields})),s.stop(`${b.success} Eligible for transfer`),e.dryRun)return K("transfer",{domain:t,eligible:!0,price:n.price,currency:n.currency||"USD",includes_renewal:!0},e.json,e.fields);if(!Rt(e)){let a=n.price!=null?` for ${v.price(n.price.toFixed(2))}`:"",l=await Ge({message:`Transfer ${Wt.default.bold(t)} to ${Nt}${a}? (includes 1 year renewal)`});if(!l||typeof l=="symbol"){console.log(` ${Wt.default.dim("Cancelled.")}`);return}}s.start(`Initiating transfer for ${v.domain(t)}`);let r=await j("/api/domains/transfer",{method:"POST",body:JSON.stringify({domain:t,auth_code:e.authCode})}),o=await r.json();if(r.ok||(s.stop("Transfer failed"),h(o.error||o.message,{hint:o.hint,fixUrl:o.setup_url||o.payment_options?.card?.setup_url,status:r.status,json:e.json,fields:e.fields})),s.stop(`${b.success} Transfer initiated`),e.json){x(o,e.fields);return}R("Transfer Initiated"),y("Domain",v.domain(o.domain)),y("Status",Wt.default.yellow(o.status||"pending")),o.price&&y("Price",v.price(o.price)+Wt.default.dim(` ${o.currency||"USD"}`)),o.payment_method&&y("Payment",o.payment_method),o.expires&&y("Expires",new Date(o.expires).toLocaleDateString()),o.hint&&(m(),console.log(` ${Wt.default.dim(o.hint)}`)),m(),I("Check transfer progress:",`domani status ${o.domain}`),m()}Z();Pe();var Ts=N(H(),1);q();_e();Ye();async function Wr(t,e){t||(t=await ue()),Q(t,e);let s=e.years?parseInt(e.years,10):1;if((isNaN(s)||s<1||s>10)&&h("--years must be between 1 and 10",{code:"validation_error",json:e.json,fields:e.fields}),e.dryRun)return K("renew",{domain:t,years:s},e.json,e.fields);if(!Rt(e)){let o=await Ge({message:`Renew ${Ts.default.bold(t)} for ${s} year${s>1?"s":""}? You will be charged.`});if(!o||typeof o=="symbol"){console.log(` ${Ts.default.dim("Cancelled.")}`);return}}let i=k(!e.json);i.start(`Renewing ${v.domain(t)}`);let n=await j(`/api/domains/${encodeURIComponent(t)}/renew`,{method:"POST",body:JSON.stringify({years:s})}),r=await n.json();if(n.ok||(i.stop("Renewal failed"),h(r.error||r.message,{hint:r.hint,fixUrl:r.setup_url||r.payment_options?.card?.setup_url,status:n.status,json:e.json,fields:e.fields})),i.stop(`${b.success} Domain renewed`),e.json){x(r,e.fields);return}R("Renewal Complete"),y("Domain",v.domain(r.domain)),y("Years",String(r.renewed_years)),y("New expiry",new Date(r.new_expiry).toLocaleDateString()),r.price&&y("Price",v.price(r.price)+Ts.default.dim(` ${r.currency||"USD"}`)),r.payment_method&&y("Payment",r.payment_method),m(),I("Verify renewal:",`domani status ${r.domain}`),m()}Z();var st=N(H(),1);q();_e();async function Hr(t,e){t||h("Domain is required",{hint:`Usage: domani import <domain>
|
|
208
|
+
domani import <domain> --verify`,code:"validation_error",json:e.json,fields:e.fields}),Q(t,e);let s=e.verify?"/api/domains/import/verify":"/api/domains/import",i=k(!e.json);i.start(e.verify?`Verifying ownership of ${v.domain(t)}`:`Initiating import for ${v.domain(t)}`);let n=await j(s,{method:"POST",body:JSON.stringify({domain:t})}),r=await n.json();if(n.ok||(i.stop(e.verify?"Verification failed":"Import failed"),h(r.error||r.message,{hint:r.hint,status:n.status,json:e.json,fields:e.fields})),e.json){i.stop(""),x(r,e.fields);return}e.verify?(i.stop(`${b.success} ${v.domain(t)} imported!`),R("Domain Imported"),y("Domain",v.domain(r.domain)),y("Status",st.default.green(r.status||"active")),r.expires_at&&y("Expires",new Date(r.expires_at).toLocaleDateString()),r.registrar&&y("Registrar",r.registrar),m(),I("Check domain health:",`domani status ${r.domain}`),m()):(i.stop(`${b.success} Verification record ready`),R("Import Domain"),y("Domain",v.domain(r.domain)),y("Status",st.default.yellow("pending verification")),m(),console.log(" Add this TXT record at your DNS provider:"),m(),console.log(` ${st.default.dim("Type:")} ${st.default.bold("TXT")}`),console.log(` ${st.default.dim("Name:")} ${st.default.bold(r.txt_record?.name||"@")}`),console.log(` ${st.default.dim("Value:")} ${st.default.bold(r.txt_record?.value||`domani-verify=${r.token}`)}`),m(),console.log(` ${st.default.dim("DNS propagation may take a few minutes to 48 hours.")}`),m(),I("Once the record is set, verify:",`domani import ${t} --verify`),m())}Hi();gt();q();function Jr(t){let e=pt();e||(m(),h("Not logged in",{hint:"Run 'domani login' first",code:"auth_required",json:t.json})),t.json?x({token:e}):console.log(e)}Z();var qe=N(H(),1);q();async function Br(t,e){switch(t){case void 0:case"list":return Tl(e.json,e.fields);case"create":return El(e);case"revoke":return Dl(e);default:h(`Unknown action: ${t}`,{hint:"Actions: list, create, revoke",code:"validation_error",json:e.json,fields:e.fields})}}async function Tl(t,e){let s=k(!t);s.start("Loading tokens");let i=await j("/api/tokens"),n=await i.json();if(i.ok||(s.stop("Failed"),h(n.error||n.message,{hint:n.hint,status:i.status,json:t,fields:e})),s.stop(`${b.success} ${n.tokens.length} token(s)`),t){x(n,e);return}if(n.tokens.length===0){m(),console.log(` ${qe.default.dim("No tokens.")}`),m(),I("Create one:",'domani tokens create --name "My App"'),m();return}m(),R("API Tokens");let r=n.tokens.map(o=>{let a;o.expired?a=qe.default.red("Expired"):o.expiresAt?a=qe.default.dim(`Expires ${new Date(o.expiresAt).toLocaleDateString()}`):a=qe.default.dim("No expiration");let l=o.scopes.includes("*")?qe.default.dim("all"):qe.default.dim(o.scopes.join(", "));return[qe.default.dim(o.id),qe.default.bold(o.name),l,a]});he(["ID","Name","Scopes","Expiration"],r,[28,16,32,20]),m()}async function El(t){let e={};if(t.name&&(e.name=t.name),t.scopes&&(e.scopes=t.scopes.split(",").map(r=>r.trim())),t.expiresIn){let r=Number(t.expiresIn);(isNaN(r)||r<3600||r>31536e3)&&h("Invalid --expires-in value",{hint:"Must be between 3600 (1 hour) and 31536000 (1 year) seconds",code:"validation_error",json:t.json,fields:t.fields}),e.expires_in=r}let s=k(!t.json);s.start("Creating token");let i=await j("/api/tokens",{method:"POST",body:JSON.stringify(e)}),n=await i.json();if(i.ok||(s.stop("Failed"),h(n.error||n.message,{hint:n.hint,status:i.status,json:t.json,fields:t.fields})),s.stop(`${b.success} Token created`),t.json){x(n,t.fields);return}m(),R("Token Created"),y("ID",n.id),y("Name",n.name),y("Scopes",n.scopes?.includes("*")?"All (full access)":n.scopes?.join(", ")||"All"),y("Expires",n.expiresAt?new Date(n.expiresAt).toLocaleString():"Never"),m(),console.log(` ${qe.default.yellow("!")} ${qe.default.bold("Key:")} ${n.key}`),console.log(` ${qe.default.dim("Save this key - it will not be shown again.")}`),m()}async function Dl(t){t.tokenId||h("Token ID required",{hint:`Usage: domani tokens revoke --token-id <id>
|
|
209
|
+
Run 'domani tokens list' to see your tokens.`,code:"validation_error",json:t.json,fields:t.fields});let e=k(!t.json);e.start("Revoking token");let s=await j(`/api/tokens/${encodeURIComponent(t.tokenId)}`,{method:"DELETE"}),i=await s.json();if(s.ok||(e.stop("Failed"),h(i.error||i.message,{hint:i.hint,status:s.status,json:t.json,fields:t.fields})),e.stop(`${b.success} Token revoked`),t.json){x(i,t.fields);return}console.log(` ${qe.default.dim("Any applications using this key will need a new one.")}`),m()}Z();var Re=N(H(),1);q();_e();Ye();async function Gr(t,e){t||(t=await ue()),Q(t,e);let s=e.autoRenew!==void 0,i=e.whoisPrivacy!==void 0,n=e.securityLock!==void 0;if(!s&&!i&&!n)return Pl(t,e.json,e.fields);let r={};if(s){let c=Zi(e.autoRenew);c===null&&h("--auto-renew must be on or off",{code:"validation_error",json:e.json,fields:e.fields}),r.auto_renew=c}if(i){let c=Zi(e.whoisPrivacy);c===null&&h("--whois-privacy must be on or off",{code:"validation_error",json:e.json,fields:e.fields}),r.whois_privacy=c}if(n){let c=Zi(e.securityLock);c===null&&h("--security-lock must be on or off",{code:"validation_error",json:e.json,fields:e.fields}),r.security_lock=c}if(e.dryRun)return K("settings_update",{domain:t,...r},e.json,e.fields);let o=k(!e.json);o.start(`Updating ${v.domain(t)}`);let a=await j(`/api/domains/${encodeURIComponent(t)}/settings`,{method:"PUT",body:JSON.stringify(r)}),l=await a.json();if(a.ok||(o.stop("Failed"),h(l.error||l.message,{hint:l.hint,status:a.status,json:e.json,fields:e.fields})),o.stop(`${b.success} Settings updated`),e.json){x(l,e.fields);return}R("Settings Updated"),y("Domain",v.domain(l.domain)),l.auto_renew!==void 0&&y("Auto-renew",l.auto_renew?Re.default.green("on"):Re.default.dim("off")),l.whois_privacy!==void 0&&y("WHOIS privacy",l.whois_privacy?Re.default.green("on"):Re.default.dim("off")),l.security_lock!==void 0&&y("Security lock",l.security_lock?Re.default.green("locked"):Re.default.dim("unlocked")),l.hint&&y("",Re.default.dim(l.hint)),m()}async function Pl(t,e,s){let i=k(!e);i.start(`Loading ${v.domain(t)}`);let n=await j(`/api/domains/${encodeURIComponent(t)}`),r=await n.json();if(n.ok||(i.stop("Failed"),h(r.error||r.message,{hint:r.hint,status:n.status,json:e,fields:s})),i.stop(`${b.success} ${v.domain(t)}`),e){x(r,s);return}R("Domain Settings"),y("Domain",v.domain(r.domain)),y("Status",r.status==="active"?Re.default.green(r.status):Re.default.yellow(r.status)),y("Auto-renew",r.auto_renew?Re.default.green("on"):Re.default.dim("off")),r.registrar&&(y("WHOIS privacy",r.registrar.whois_privacy?Re.default.green("on"):Re.default.dim("off")),y("Security lock",r.registrar.security_lock?Re.default.green("locked"):Re.default.dim("unlocked"))),y("Expires",new Date(r.expires_at).toLocaleDateString()+Re.default.dim(` (${r.days_until_expiry} days)`)),m(),I("Toggle auto-renew:",`domani settings ${t} --auto-renew off`),I("Toggle WHOIS privacy:",`domani settings ${t} --whois-privacy off`),I("Toggle security lock:",`domani settings ${t} --security-lock off`),I("Get transfer auth code:",`domani auth-code ${t}`),m()}function Zi(t){let e=t.toLowerCase();return e==="on"||e==="true"||e==="1"||e==="enable"?!0:e==="off"||e==="false"||e==="0"||e==="disable"?!1:null}Z();var Dt=N(H(),1);q();_e();Ye();async function Yr(t,e){t||(t=await ue()),Q(t,e);let s=k(!e.json);s.start(`Getting auth code for ${v.domain(t)}`);let i=await j(`/api/domains/${encodeURIComponent(t)}/auth-code`),n=await i.json();if(i.ok||(s.stop("Failed"),h(n.error||n.message,{hint:n.hint,status:i.status,json:e.json,fields:e.fields})),s.stop(`${b.success} Auth code retrieved`),e.json){x(n,e.fields);return}if(R("Auth Code"),y("Domain",v.domain(n.domain)),y("Auth code",Dt.default.bold(Dt.default.green(n.auth_code))),n.was_unlocked&&y("",Dt.default.yellow("Domain was automatically unlocked to allow transfer.")),n.hint&&(m(),console.log(` ${Dt.default.dim(n.hint)}`)),n.next_steps?.length){m();for(let r of n.next_steps)console.log(` ${Dt.default.dim("\u2192")} ${Dt.default.dim(r)}`)}m(),I("Check transfer status:",`domani transfer-away ${t}`),I("Re-lock domain:",`domani settings ${t} --security-lock on`),m()}Z();var mt=N(H(),1);q();_e();Ye();var Nl={none:mt.default.dim,pending:mt.default.yellow,approved:mt.default.yellow,completed:mt.default.green,rejected:mt.default.red,expired:mt.default.red};async function Kr(t,e){t||(t=await ue()),Q(t,e);let s=k(!e.json);s.start(`Checking transfer status for ${v.domain(t)}`);let i=await j(`/api/domains/${encodeURIComponent(t)}/transfer-away`),n=await i.json();if(i.ok||(s.stop("Failed"),h(n.error||n.message,{hint:n.hint,status:i.status,json:e.json,fields:e.fields})),s.stop(`${b.success} ${v.domain(t)}`),e.json){x(n,e.fields);return}R("Transfer Away Status"),y("Domain",v.domain(n.domain));let r=Nl[n.status]||mt.default.dim;y("Status",r(n.status)),n.gaining_registrar&&y("New registrar",n.gaining_registrar),n.request_date&&y("Requested",new Date(n.request_date).toLocaleDateString()),n.hint&&(m(),console.log(` ${mt.default.dim(n.hint)}`)),m(),n.status==="none"?I("Get auth code to start:",`domani auth-code ${t}`):n.status==="pending"||n.status==="approved"?I("Check again later:",`domani transfer-away ${t}`):n.status==="completed"?I("Search for a new domain:","domani search <name>"):(n.status==="rejected"||n.status==="expired")&&I("Retry with a new auth code:",`domani auth-code ${t}`),m()}Z();Pe();var Es=N(H(),1);q();async function zr(t,e){return t==="set"?Ll(e):Fl(e)}async function Fl(t){let e=k(!t.json);e.start("Loading contact info");let s=await j("/api/me/contact"),i=await s.json();if(s.ok||(e.stop("Failed"),h(i.error||i.message,{hint:i.hint,status:s.status,json:t.json,fields:t.fields})),e.stop(`${b.success} Contact info`),t.json){x(i,t.fields);return}if(R("Contact Info"),!i.has_contact){console.log(` ${b.warning} ${Es.default.yellow("No contact info set.")} Run ${Es.default.bold("domani contact set")} to add.`),m(),console.log(` ${Es.default.dim("Contact info is required before purchasing domains.")}`),m();return}let n=i.contact;y("Name",`${n.first_name} ${n.last_name}`),n.org_name&&y("Organization",n.org_name),y("Address",n.address1),n.address2&&y("",n.address2),y("",`${n.city}, ${n.state} ${n.postal_code}`),y("Country",n.country),y("Phone",n.phone),y("Email",n.email),m()}async function Ll(t){let e={},s=t.firstName||t.lastName||t.address1;if(!Ce&&!s&&h("Missing required flags for contact set",{hint:"Usage: domani contact set --first-name John --last-name Doe --address1 '123 Main St' --city SF --state CA --postal-code 94105 --country US --phone +1.5551234567 --email john@example.com",code:"missing_argument",json:t.json}),s){let a=["firstName","lastName","address1","city","state","postalCode","country","phone","email"],l={firstName:"first_name",lastName:"last_name",orgName:"org_name",address1:"address1",address2:"address2",city:"city",state:"state",postalCode:"postal_code",country:"country",phone:"phone",email:"email"},c=a.filter(d=>!t[d]);c.length>0&&h(`Missing required flags: ${c.map(d=>`--${d.replace(/[A-Z]/g,f=>`-${f.toLowerCase()}`)}`).join(", ")}`,{code:"missing_argument",json:t.json});for(let[d,f]of Object.entries(l)){let g=t[d];g&&(e[f]=g)}}else{let a=await j("/api/me/contact"),c=(a.ok?await a.json():null)?.contact,d=[{key:"first_name",message:"First name",placeholder:"John",required:!0},{key:"last_name",message:"Last name",placeholder:"Doe",required:!0},{key:"org_name",message:"Organization (optional, press Enter to skip)",placeholder:"Acme Inc.",required:!1},{key:"address1",message:"Address line 1",placeholder:"123 Main St",required:!0},{key:"address2",message:"Address line 2 (optional)",placeholder:"Suite 100",required:!1},{key:"city",message:"City",placeholder:"San Francisco",required:!0},{key:"state",message:"State / Province",placeholder:"CA",required:!0},{key:"postal_code",message:"Postal / ZIP code",placeholder:"94105",required:!0},{key:"country",message:"Country code (ISO 3166-1 alpha-2)",placeholder:"US",required:!0},{key:"phone",message:"Phone (+CC.NUMBER)",placeholder:"+1.5551234567",required:!0},{key:"email",message:"Contact email",placeholder:"john@example.com",required:!0}];for(let f of d){let g=c?.[f.key]||"",$=await Ee({message:f.message,placeholder:f.placeholder,defaultValue:g,validate:f.required?p=>p?.trim()?void 0:`${f.message} is required`:void 0});oe($)&&process.exit(0);let w=$.trim();w&&(e[f.key]=w)}}if(t.dryRun)return K("contact_set",e,t.json,t.fields);let i=k(!t.json);i.start("Saving contact info");let n=await j("/api/me/contact",{method:"PUT",body:JSON.stringify(e)}),r=await n.json();if(n.ok||(i.stop("Failed"),h(r.error||r.message,{hint:r.hint,status:n.status,json:t.json,fields:t.fields})),i.stop(`${b.success} Contact info saved`),t.json){x(r,t.fields);return}R("Contact Saved");let o=r.contact;y("Name",`${o.first_name} ${o.last_name}`),o.org_name&&y("Organization",o.org_name),y("Address",o.address1),o.address2&&y("",o.address2),y("",`${o.city}, ${o.state} ${o.postal_code}`),y("Country",o.country),y("Phone",o.phone),y("Email",o.email),m(),I("Search for a domain:","domani search <name>"),m()}Z();var De=N(H(),1);q();_e();Ye();async function Qr(t,e,s,i){if(t||(t=await ue()),Q(t,i),!e)return Ul(t,i.json,i.fields);switch(e){case"enable":case"on":return i.dryRun?K("parking_enable",{domain:t},i.json,i.fields):Xr(t,!0,i.json,i.fields);case"disable":case"off":return i.dryRun?K("parking_disable",{domain:t},i.json,i.fields):Xr(t,!1,i.json,i.fields);case"price":{s||h("Price required",{hint:"Usage: domani parking <domain> price <amount>",code:"validation_error",json:i.json,fields:i.fields});let n=parseFloat(s);return(isNaN(n)||n<=0)&&h("Price must be a positive number",{hint:`Got: "${s}"`,code:"validation_error",json:i.json,fields:i.fields}),i.dryRun?K("parking_price",{domain:t,price:n},i.json,i.fields):Zr(t,n,i.json,i.fields)}case"unprice":case"unlist":return i.dryRun?K("parking_unlist",{domain:t},i.json,i.fields):Zr(t,null,i.json,i.fields);default:h(`Unknown action: ${e}`,{hint:"Actions: enable, disable, price <amount>, unprice",code:"validation_error",json:i.json,fields:i.fields})}}async function Ul(t,e,s){let i=k(!e);i.start(`Loading ${v.domain(t)}`);let n=await j(`/api/domains/${encodeURIComponent(t)}`),r=await n.json();if(n.ok||(i.stop("Failed"),h(r.error||r.message,{hint:r.hint,status:n.status,json:e,fields:s})),i.stop(`${b.success} ${v.domain(t)}`),e){x({domain:r.domain,parking_enabled:r.parking_enabled,listing_price:r.listing_price},s);return}R("Parking"),y("Domain",v.domain(r.domain)),y("Parking",r.parking_enabled?De.default.green("enabled"):De.default.dim("disabled")),y("Listing",r.listing_price?`${v.price(r.listing_price)} ${De.default.dim("(for sale)")}`:De.default.dim("not listed")),m(),I("Enable parking:",`domani parking ${t} enable`),I("Set sale price:",`domani parking ${t} price 499`),I("View analytics:",`domani analytics ${t}`),m()}async function Xr(t,e,s,i){let n=k(!s);n.start(`${e?"Enabling":"Disabling"} parking for ${v.domain(t)}`);let r=await j(`/api/domains/${encodeURIComponent(t)}/parking`,{method:"PUT",body:JSON.stringify({enabled:e})}),o=await r.json();if(r.status===409&&o.requires_confirmation){if(n.stop(`${b.warning} DNS records will be replaced`),s){x(o,i);return}console.log(`
|
|
210
|
+
${De.default.yellow("Enabling parking will replace these DNS records:")}`);for(let a of o.existing_dns||[])console.log(` ${De.default.dim(a.type)} ${a.name} ${De.default.dim("\u2192")} ${a.value}`);console.log(`
|
|
211
|
+
${De.default.dim("Run again with --confirm to proceed (not implemented yet).")}`),console.log(` ${De.default.dim("Or use the dashboard to confirm.")}`),m();return}if(r.ok||(n.stop("Failed"),h(o.error||o.message,{hint:o.hint,status:r.status,json:s,fields:i})),n.stop(`${b.success} Parking ${e?"enabled":"disabled"}`),s){x(o,i);return}R("Parking Updated"),y("Domain",v.domain(o.domain)),y("Parking",o.parking_enabled?De.default.green("enabled"):De.default.dim("disabled")),o.hint&&y("",De.default.dim(o.hint)),m()}async function Zr(t,e,s,i){let n=k(!s);n.start(e!==null?`Setting price for ${v.domain(t)} to ${v.price(e)}`:`Removing listing for ${v.domain(t)}`);let r=await j(`/api/domains/${encodeURIComponent(t)}/parking`,{method:"PUT",body:JSON.stringify({listing_price:e})}),o=await r.json();if(r.ok||(n.stop("Failed"),h(o.error||o.message,{hint:o.hint,status:r.status,json:s,fields:i})),n.stop(`${b.success} ${e!==null?"Price set":"Listing removed"}`),s){x(o,i);return}R("Listing Updated"),y("Domain",v.domain(o.domain)),y("Listing",o.listing_price?`${v.price(o.listing_price)} ${De.default.dim("(for sale)")}`:De.default.dim("not listed")),o.hint&&y("",De.default.dim(o.hint)),m()}Z();var We=N(H(),1);q();_e();Ye();var Ml=" \u2581\u2582\u2583\u2584\u2585\u2586\u2587\u2588";function Vl(t){let e=Math.max(...t,1);return t.map(s=>Ml[Math.min(Math.round(s/e*8),8)]).join("")}async function eo(t,e){t||(t=await ue()),Q(t,e);let s=k(!e.json);s.start(`Loading analytics for ${v.domain(t)}`);let i=await j(`/api/domains/${encodeURIComponent(t)}/analytics`),n=await i.json();if(i.ok||(s.stop("Failed"),h(n.error||n.message,{hint:n.hint,status:i.status,json:e.json,fields:e.fields})),s.stop("Analytics loaded"),e.json){x(n,e.fields);return}if(m(),R(`Analytics: ${v.domain(t)}`),y("Views (7d)",We.default.cyan(n.views_7d.toLocaleString())),y("Views (30d)",We.default.cyan(n.views_30d.toLocaleString())),y("Inquiries",We.default.cyan(String(n.inquiries_30d))),y("Conversion",n.conversion_rate>0?We.default.green(`${n.conversion_rate}%`):We.default.dim("0%")),n.daily_views&&n.daily_views.length>0){let r=n.daily_views.map(c=>c.views),o=Vl(r),a=n.daily_views[0].date.slice(5),l=n.daily_views[n.daily_views.length-1].date.slice(5);m(),console.log(` ${We.default.dim(a)} ${We.default.cyan(o)} ${We.default.dim(l)}`)}if(n.recent_inquiries&&n.recent_inquiries.length>0){m(),console.log(` ${We.default.bold("Recent Inquiries")}`);let r=n.recent_inquiries.map(o=>[We.default.dim(o.email),o.offer?v.price(o.offer):We.default.dim("-"),We.default.dim(new Date(o.date).toLocaleDateString())]);he(["Email","Offer","Date"],r,[30,12,14])}m(),I("Set a listing price:",`domani parking ${t} price <amount>`),I("Set up email:",`domani email setup ${t}`),I("Domain settings:",`domani settings ${t}`),m()}Z();var $e=N(H(),1);q();async function to(t,e){switch(t){case void 0:case"list":return ql(e.json,e.fields);case"create":return Wl(e);case"update":return Hl(e);case"delete":return Jl(e);case"deliveries":return Bl(e);case"events":return Gl(e.json,e.fields);default:h(`Unknown action: ${t}`,{hint:"Actions: list, create, update, delete, deliveries, events",code:"validation_error",json:e.json,fields:e.fields})}}async function ql(t,e){let s=k(!t);s.start("Loading webhooks");let i=await j("/api/webhooks"),n=await i.json();if(i.ok||(s.stop("Failed"),h(n.error||n.message,{hint:n.hint,status:i.status,json:t,fields:e})),s.stop(`${b.success} ${n.webhooks.length} webhook(s)`),t){x(n,e);return}if(n.webhooks.length===0){m(),console.log(` ${$e.default.dim("No webhooks configured.")}`),m(),I("Create one:","domani webhooks create --url https://... --events domain.purchased,dns.updated"),I("List events:","domani webhooks events"),m();return}m(),R("Webhooks");let r=n.webhooks.map(o=>[$e.default.dim(o.id),v.url(o.url),o.events.length<=3?o.events.join(", "):`${o.events.length} events`,o.active?$e.default.green("active"):$e.default.dim("paused")]);he(["ID","URL","Events","Status"],r,[28,40,24,10]),m()}async function Wl(t){t.url||h("URL required",{hint:"Usage: domani webhooks create --url https://example.com/hook --events domain.purchased,dns.updated",code:"validation_error",json:t.json,fields:t.fields}),t.events||h("Events required",{hint:`Usage: domani webhooks create --url https://... --events domain.purchased,dns.updated
|
|
212
|
+
Run 'domani webhooks events' to see available event types.`,code:"validation_error",json:t.json,fields:t.fields});let e=t.events.split(",").map(r=>r.trim());if(t.dryRun)return K("webhook_create",{url:t.url,events:e},t.json,t.fields);let s=k(!t.json);s.start("Creating webhook");let i=await j("/api/webhooks",{method:"POST",body:JSON.stringify({url:t.url,events:e})}),n=await i.json();if(i.ok||(s.stop("Failed"),h(n.error||n.message,{hint:n.hint,status:i.status,json:t.json,fields:t.fields})),s.stop(`${b.success} Webhook created`),t.json){x(n,t.fields);return}m(),R("Webhook Created"),y("ID",n.id),y("URL",v.url(n.url)),y("Events",n.events.join(", ")),y("Status",$e.default.green("active")),m(),console.log(` ${$e.default.yellow("!")} ${$e.default.bold("Secret:")} ${n.secret}`),console.log(` ${$e.default.dim("Save this secret - it won't be shown again.")}`),console.log(` ${$e.default.dim("Use it to verify payloads with HMAC-SHA256.")}`),m()}async function Hl(t){t.webhookId||h("Webhook ID required",{hint:"Usage: domani webhooks update --webhook-id <id> [--url ...] [--events ...] [--active on|off]",code:"validation_error",json:t.json,fields:t.fields});let e={};if(t.url&&(e.url=t.url),t.events&&(e.events=t.events.split(",").map(r=>r.trim())),t.active!==void 0&&(e.active=t.active==="on"||t.active==="true"),t.dryRun)return K("webhook_update",{webhook_id:t.webhookId,...e},t.json,t.fields);let s=k(!t.json);s.start("Updating webhook");let i=await j(`/api/webhooks/${encodeURIComponent(t.webhookId)}`,{method:"PATCH",body:JSON.stringify(e)}),n=await i.json();if(i.ok||(s.stop("Failed"),h(n.error||n.message,{hint:n.hint,status:i.status,json:t.json,fields:t.fields})),s.stop(`${b.success} Webhook updated`),t.json){x(n,t.fields);return}R("Webhook Updated"),y("ID",n.id),y("URL",v.url(n.url)),y("Events",n.events.join(", ")),y("Status",n.active?$e.default.green("active"):$e.default.dim("paused")),m()}async function Jl(t){if(t.webhookId||h("Webhook ID required",{hint:"Usage: domani webhooks delete --webhook-id <id>",code:"validation_error",json:t.json,fields:t.fields}),t.dryRun)return K("webhook_delete",{webhook_id:t.webhookId},t.json,t.fields);let e=k(!t.json);e.start("Deleting webhook");let s=await j(`/api/webhooks/${encodeURIComponent(t.webhookId)}`,{method:"DELETE"}),i=await s.json();if(s.ok||(e.stop("Failed"),h(i.error||i.message,{hint:i.hint,status:s.status,json:t.json,fields:t.fields})),e.stop(`${b.success} Webhook deleted`),t.json){x(i,t.fields);return}console.log(` ${$e.default.dim("Pending deliveries have been cancelled.")}`),m()}async function Bl(t){t.webhookId||h("Webhook ID required",{hint:"Usage: domani webhooks deliveries --webhook-id <id> [--limit 20]",code:"validation_error",json:t.json,fields:t.fields});let e=t.limit?`?limit=${t.limit}`:"",s=k(!t.json);s.start("Loading deliveries");let i=await j(`/api/webhooks/${encodeURIComponent(t.webhookId)}/deliveries${e}`),n=await i.json();if(i.ok||(s.stop("Failed"),h(n.error||n.message,{hint:n.hint,status:i.status,json:t.json,fields:t.fields})),s.stop(`${b.success} ${n.deliveries.length} delivery(ies)`),t.json){x(n,t.fields);return}if(n.deliveries.length===0){m(),console.log(` ${$e.default.dim("No deliveries yet.")}`),m();return}m(),R("Deliveries");let r=n.deliveries.map(o=>{let a=o.status==="delivered"?$e.default.green("delivered"):o.status==="failed"?$e.default.red("failed"):$e.default.yellow("pending");return[o.event_type,a,o.http_status?String(o.http_status):$e.default.dim("-"),String(o.attempts),$e.default.dim(new Date(o.created_at).toLocaleString())]});he(["Event","Status","HTTP","Tries","Date"],r,[22,12,6,6,22]),m()}async function Gl(t,e){let s=k(!t);s.start("Loading event types");let i=await ve("/api/webhooks/events"),n=await i.json();if(i.ok||(s.stop("Failed"),h(n.error||n.message,{hint:n.hint,status:i.status,json:t,fields:e})),s.stop(`${b.success} ${n.events.length} event type(s)`),t){x(n,e);return}m(),R("Webhook Event Types");let r=n.events.map(o=>[$e.default.cyan(o.type),$e.default.dim(o.description)]);he(["Event","Description"],r,[24,50]),m()}Z();var Se=N(H(),1);q();_e();async function so(t,e){if(t||h("Domain is required",{hint:`Usage: domani sell <domain> --price <amount>
|
|
197
213
|
domani sell <domain> --verify
|
|
198
214
|
domani sell <domain> --status
|
|
199
|
-
domani sell <domain> --cancel`,code:"validation_error",json:
|
|
215
|
+
domani sell <domain> --cancel`,code:"validation_error",json:e.json,fields:e.fields}),Q(t,e),e.status)return zl(t,e);if(e.verify)return Kl(t,e);if(e.cancel)return Xl(t,e);if(e.transferCode)return Zl(t,e.transferCode,e);if(e.price)return Yl(t,e);h("No action specified",{hint:`Usage: domani sell <domain> --price <amount>
|
|
200
216
|
domani sell <domain> --verify
|
|
201
217
|
domani sell <domain> --status
|
|
202
218
|
domani sell <domain> --cancel
|
|
203
|
-
domani sell <domain> --transfer-code <code>`,code:"validation_error",json:
|
|
204
|
-
Run 'domani deals --role seller' to see your deals.`,code:"not_found",json:s.json,fields:s.fields}));let l=a[0].id;i.message(`Submitting transfer code for deal ${be.default.dim(l)}`);let c=await S(`/api/deals/${encodeURIComponent(l)}`,{method:"PATCH",body:JSON.stringify({auth_code:t})}),u=await c.json();if(c.ok||(i.stop("Failed"),h(u.error||u.message,{hint:u.hint,status:c.status,json:s.json,fields:s.fields})),s.json){i.stop(""),k(u,s.fields);return}i.stop(`${v.success} Transfer code submitted for ${w.domain(e)}`),R("Transfer Code Submitted"),$("Domain",w.domain(e)),$("Deal",be.default.dim(l)),$("Status",be.default.green(u.status||"code_submitted")),d(),O("Track the deal:",`domani deals ${l}`),d()}Q();var ve=V(J(),1);H();async function Xr(e,t){return e?zl(e,t):Kl(t)}async function Kl(e){let t=j(!e.json);t.start("Loading deals");let s=new URLSearchParams;e.role&&s.set("role",e.role),e.status&&s.set("status",e.status);let i=s.toString()?`?${s.toString()}`:"",n=await S(`/api/deals${i}`),r=await n.json();n.ok||(t.stop("Failed"),h(r.error||r.message,{hint:r.hint,status:n.status,json:e.json,fields:e.fields}));let o=r.deals||r.data||[];if(t.stop(`${v.success} ${o.length} deal(s)`),e.json){k(r,e.fields);return}if(o.length===0){d(),console.log(` ${ve.default.dim("No deals found.")}`),d(),O("List a domain for sale:","domani sell <domain> --price <amount>"),d();return}d(),R("Deals");let a=o.map(l=>{let c=l.status==="completed"?ve.default.green:l.status==="active"?ve.default.cyan:l.status==="cancelled"?ve.default.red:ve.default.yellow;return[w.domain(l.domain),w.price(l.price),c(l.status),ve.default.dim(l.role||"-"),ve.default.dim(new Date(l.created_at).toLocaleDateString())]});me(["Domain","Price","Status","Role","Created"],a,[28,12,14,10,14]),d()}async function zl(e,t){let s=j(!t.json);s.start(`Loading deal ${ve.default.dim(e)}`);let i=await S(`/api/deals/${encodeURIComponent(e)}`),n=await i.json();if(i.ok||(s.stop("Failed"),h(n.error||n.message,{hint:n.hint,status:i.status,json:t.json,fields:t.fields})),s.stop(`${v.success} Deal loaded`),t.json){k(n,t.fields);return}let r=n.deal||n;R("Deal Details"),$("ID",ve.default.dim(r.id)),$("Domain",w.domain(r.domain)),$("Price",w.price(r.price));let o=r.status==="completed"?ve.default.green:r.status==="active"?ve.default.cyan:r.status==="cancelled"?ve.default.red:ve.default.yellow;$("Status",o(r.status)),r.role&&$("Your Role",r.role),r.buyer&&$("Buyer",ve.default.dim(r.buyer)),r.seller&&$("Seller",ve.default.dim(r.seller)),r.created_at&&$("Created",ve.default.dim(new Date(r.created_at).toLocaleDateString())),r.updated_at&&$("Updated",ve.default.dim(new Date(r.updated_at).toLocaleDateString())),d();let a=r.events||[];if(a.length>0){R("Timeline");for(let l of a){let c=ve.default.dim(new Date(l.created_at).toLocaleString()),u=l.status==="completed"?v.success:l.status==="expired"||l.status==="refunded"?v.error:v.info;console.log(` ${u} ${c} ${l.detail||l.status}`)}d()}(r.status==="escrow_held"||r.status==="epp_pending")&&r.role==="seller"&&(O("Submit transfer code:",`domani sell ${r.domain} --transfer-code <code>`),d())}Q();var pe=V(J(),1);H();async function Qr(e){return e.read?Zl(e):Xl(e)}async function Xl(e){let t=j(!e.json);t.start("Loading notifications");let s=new URLSearchParams;e.unread&&s.set("unread","true"),e.limit&&s.set("limit",e.limit);let i=s.toString()?`?${s.toString()}`:"",n=await S(`/api/notifications${i}`),r=await n.json();n.ok||(t.stop("Failed"),h(r.error||r.message,{hint:r.hint,status:n.status,json:e.json,fields:e.fields}));let o=r.notifications||r.data||[],a=r.unread_count??o.filter(c=>!c.read).length;if(t.stop(`${v.success} ${o.length} notification(s)${a>0?` ${v.dot} ${pe.default.yellow(`${a} unread`)}`:""}`),e.json){k(r,e.fields);return}if(o.length===0){d(),console.log(` ${pe.default.dim("No notifications.")}`),d();return}d(),R("Notifications");let l=o.map(c=>{let u=c.read?pe.default.dim(v.dot):pe.default.cyan(v.info),p=Ql(c.type),g=c.read?pe.default.dim(c.title):pe.default.white(c.title),x=c.body?c.read?pe.default.dim(Zr(c.body,40)):pe.default.dim(Zr(c.body,40)):pe.default.dim("-"),y=pe.default.dim(new Date(c.created_at).toLocaleDateString());return[u,p,g,x,y]});me(["","Type","Title","Body","Date"],l,[3,16,28,42,14]),d(),a>0&&(console.log(` ${pe.default.dim("Mark all as read:")} ${pe.default.cyan("domani notifications --read")}`),d())}async function Zl(e){let t=j(!e.json);t.start("Marking all notifications as read");let s=await S("/api/notifications/read-all",{method:"POST"}),i=await s.json();if(s.ok||(t.stop("Failed"),h(i.error||i.message,{hint:i.hint,status:s.status,json:e.json,fields:e.fields})),e.json){t.stop(""),k(i,e.fields);return}let n=i.count??0;t.stop(`${v.success} ${n} notification(s) marked as read`),d()}function Ql(e){let t={deal:pe.default.cyan,sale:pe.default.green,purchase:pe.default.green,transfer:pe.default.yellow,expiry:pe.default.red,security:pe.default.red,billing:pe.default.yellow,email:pe.default.blue},s=e.split(".")[0].split("_")[0];return(t[s]||pe.default.dim)(e)}function Zr(e,t){return e.length<=t?e:e.slice(0,t-1)+"\u2026"}Q();var yt=V(J(),1);H();async function eo(e){let t=e.limit?Number(e.limit):20,s=await S(`/api/billing/invoices?limit=${t}`),i=await s.json();if(s.ok||h(i.error||i.message,{hint:i.hint,status:s.status,json:e.json,fields:e.fields}),e.json){k({...i,count:i.invoices.length},e.fields);return}if(i.invoices.length===0){console.log(` ${yt.default.dim("No invoices yet.")}`);return}R(`Invoices (${i.invoices.length})`),d();for(let n of i.invoices){let r=`$${(n.amount_paid/100).toFixed(2)}`,o=new Date(n.created).toLocaleDateString(),a=n.number||n.id;console.log(` ${v.success} ${yt.default.bold(a)} ${yt.default.green(r)} ${yt.default.dim(o)}`),n.description&&console.log(` ${yt.default.dim(n.description)}`),n.hosted_invoice_url&&console.log(` ${yt.default.dim(n.hosted_invoice_url)}`)}d(),i.has_more&&(console.log(` ${yt.default.dim(`Showing ${i.invoices.length} most recent. Use --limit to see more.`)}`),d())}Q();var ts=V(J(),1);H();async function to(e){let t=j(!e?.json);t.start("Setting up billing session");let s=await S("/api/billing/setup",{method:"POST",body:JSON.stringify({mode:"checkout"})}),i=await s.json();if(s.ok||(t.stop("Failed"),h(i.error||i.message,{hint:i.hint,status:s.status,json:e?.json})),i.url||(t.stop("Failed"),h("No checkout URL returned",{hint:"Try again or add a payment method at the dashboard.",json:e?.json})),t.stop("Checkout ready"),e?.json){k({url:i.url});return}d(),console.log(` ${ts.default.dim("Opening browser")} ${v.arrow} ${w.url(i.url)}`),d(),et(i.url),console.log(` ${v.info} ${ts.default.dim("Complete payment setup in your browser.")}`),console.log(` ${ts.default.dim(" After setup, you can purchase domains with")} ${ts.default.cyan("domani buy")}`),d()}Q();var sn=V(J(),1);H();async function so(e){let t=j(!e?.json);t.start("Creating upgrade session");let s=await S("/api/billing/subscribe",{method:"POST"}),i=await s.json();if(!s.ok){t.stop("Failed"),i.code==="ALREADY_PRO"?h("You're already on the Pro plan.",{json:e?.json}):h(i.error||i.message,{hint:i.hint,status:s.status,json:e?.json});return}if(t.stop("Ready"),e?.json){k({url:i.url},e?.fields);return}d(),console.log(` ${sn.default.dim("Opening browser")} ${v.arrow} ${w.url(i.url)}`),d(),et(i.url),console.log(` ${v.info} ${sn.default.dim("Complete your Pro upgrade in the browser.")}`),d()}Q();var nn=V(J(),1);H();async function io(e){let t=j(!e?.json);t.start("Cancelling subscription");let s=await S("/api/billing/cancel",{method:"POST"}),i=await s.json();if(!s.ok){t.stop("Failed"),i.code==="NOT_PRO"?h("You're not on the Pro plan.",{json:e?.json}):h(i.error||i.message,{hint:i.hint,status:s.status,json:e?.json});return}if(t.stop("Done"),e?.json){k(i,e?.fields);return}d();let n=i.cancel_at?new Date(i.cancel_at).toLocaleDateString():"end of billing period";console.log(` ${v.success} ${nn.default.dim("Subscription cancelled.")} Access continues until ${nn.default.cyan(n)}.`),d()}Q();var ze=V(J(),1);H();ye();Je();async function no(e,t,s){e||(e=await ue()),ee(e,s);let i=[];if(t?.length&&i.push(...t),s.set&&i.push(...s.set.split(",").map(n=>n.trim()).filter(Boolean)),i.length>0||s.reset){await tc(e,i,s);return}await ec(e,s)}async function ec(e,t){let s=j(!t.json);s.start(`Fetching nameservers for ${w.domain(e)}`);let i=await S(`/api/domains/${encodeURIComponent(e)}/nameservers`),n=await i.json();if(i.ok||(s.stop("Failed"),h(n.error||n.message,{hint:n.hint,status:i.status,json:t.json,fields:t.fields})),s.stop(`Nameservers for ${w.domain(e)}`),t.json){k(n,t.fields);return}if(d(),n.nameservers.length===0)console.log(` ${v.warning} ${ze.default.yellow("No nameservers configured.")}`),console.log(` ${ze.default.dim("DNS operations (parking, email, connect) will not work.")}`),d(),O("Set default nameservers:",`domani nameservers ${e} --reset`);else{R("Nameservers");for(let r of n.nameservers)console.log(` ${v.success} ${ze.default.cyan(r)}`);n.default_nameservers&&n.nameservers.length===n.default_nameservers.length&&n.nameservers.every(o=>n.default_nameservers.includes(o))&&(d(),console.log(` ${ze.default.dim("Using default nameservers.")}`))}n.default_nameservers?.length&&(d(),$("Defaults",n.default_nameservers.map(r=>ze.default.dim(r)).join(ze.default.dim(", ")))),d()}async function tc(e,t,s){let i=j(!s.json);if(s.reset){i.start(`Fetching default nameservers for ${w.domain(e)}`);let o=await S(`/api/domains/${encodeURIComponent(e)}/nameservers`),a=await o.json();o.ok||(i.stop("Failed"),h(a.error,{hint:a.hint,status:o.status,json:s.json,fields:s.fields})),a.default_nameservers?.length||(i.stop("No defaults"),h("No default nameservers available for this domain's registrar.",{code:"not_found",json:s.json,fields:s.fields})),t=a.default_nameservers,i.stop(`Using defaults: ${t.map(l=>ze.default.cyan(l)).join(ze.default.dim(", "))}`)}if(t.length<2&&h("At least 2 nameservers required.",{hint:"Example: domani nameservers example.com ns1.dns.com ns2.dns.com",code:"validation_error",json:s.json,fields:s.fields}),s.dryRun)return z("nameservers_set",{domain:e,nameservers:t},s.json,s.fields);i.start(`Setting nameservers for ${w.domain(e)}`);let n=await S(`/api/domains/${encodeURIComponent(e)}/nameservers`,{method:"PUT",body:JSON.stringify({nameservers:t})}),r=await n.json();if(n.ok||(i.stop("Failed"),h(r.error||r.message,{hint:r.hint,status:n.status,json:s.json,fields:s.fields})),i.stop(`${v.success} Nameservers updated`),s.json){k(r,s.fields);return}d();for(let o of r.nameservers)console.log(` ${v.success} ${ze.default.cyan(o)}`);d(),console.log(` ${ze.default.dim("Changes may take up to 48 hours to propagate.")}`),d(),O("Check propagation:",`domani status ${e}`),d()}var ro=require("crypto"),Ls=V(require("fs"),1);pt();var ss=V(J(),1);H();function sc(e,t){let s=e.split(".").map(Number),i=t.split(".").map(Number);for(let n=0;n<3;n++){if((s[n]||0)>(i[n]||0))return 1;if((s[n]||0)<(i[n]||0))return-1}return 0}async function oo(e){let t=j(!e?.json);t.start("Checking for updates");let s=Xe();try{let i=await fetch(`${s}/api/cli/version`);i.ok||(t.stop("Failed"),h("Could not check for updates"));let n=await i.json(),r=n.version,o=n.sha256;if(sc(r,_e)<=0){t.stop(`${v.success} Already up to date (v${_e})`),e?.json&&k({current:_e,latest:r,up_to_date:!0});return}if(e?.json){t.stop(""),k({current:_e,latest:r,up_to_date:!1,hint:"Run `domani update` to upgrade."});return}t.stop(`New version available: ${ss.default.cyan(_e)} ${v.arrow} ${ss.default.green(r)}`);let a=j();a.start("Downloading update");let l=`${s}/cli/domani.js`,c=await fetch(l);c.ok||(a.stop("Download failed"),h(`Failed to download from ${l}`));let u=await c.text();o&&(0,ro.createHash)("sha256").update(u).digest("hex")!==o&&(a.stop("Integrity check failed"),h("Downloaded file does not match expected hash - update aborted"));let p=process.argv[1];p||(a.stop("Failed"),h("Could not determine binary path"));let g=Ls.default.realpathSync(p),x=g+".tmp";Ls.default.writeFileSync(x,u,{mode:493}),Ls.default.renameSync(x,g),a.stop(`${v.success} Updated to v${r}`),d(),console.log(` ${ss.default.dim("Restart your terminal or run")} domani --version ${ss.default.dim("to verify")}`),d()}catch(i){h(`Update failed: ${i instanceof Error?i.message:String(i)}`)}}var Vs=V(require("fs"),1),ao=V(require("path"),1),lo=V(require("os"),1);Ie();var is=V(J(),1);H();async function co(){let e=process.argv[1],t=e?Vs.default.realpathSync(e):null,s=ao.default.join(lo.default.homedir(),".domani");if(d(),console.log(` ${is.default.bold("This will remove:")}`),t&&console.log(` ${v.dot} CLI binary: ${is.default.dim(t)}`),console.log(` ${v.dot} Config dir: ${is.default.dim(s)}`),d(),await We({message:"Uninstall domani?"})!==!0){console.log(` ${is.default.dim("Cancelled.")}`);return}Vs.default.rmSync(s,{recursive:!0,force:!0}),t&&Vs.default.unlinkSync(t),d(),console.log(` ${v.success} domani uninstalled.`),d()}Q();var ie=V(J(),1);H();async function mo(e,t){let s=t?.json,i=t?.fields,n=e?`/api/schema?command=${encodeURIComponent(e)}`:"/api/schema",r=j(!s);r.start("Loading schema");let o=await $e(n),a=await o.json();if(o.ok||(r.stop("Failed"),h(a.error||a.message,{hint:a.hint,status:o.status,json:s,fields:i})),r.stop("Schema loaded"),s){k(a,i);return}e?nc(e,a):ic(a.commands)}function ic(e){R("Commands");let t=Object.entries(e).map(([s,i])=>[ie.default.bold(ie.default.cyan(s)),i.description]);me(["Command","Description"],t,[20,50]),d(),console.log(` ${ie.default.dim("Run")} ${ie.default.cyan("domani schema <command>")} ${ie.default.dim("for full details")}`),d()}function nc(e,t){if(R(`domani ${e}`),console.log(` ${t.description}`),d(),console.log(` ${w.label("Usage:")} ${ie.default.cyan(t.usage)}`),t.arguments&&Object.keys(t.arguments).length>0){d(),console.log(` ${ie.default.bold("Arguments")}`);for(let[s,i]of Object.entries(t.arguments)){let n=i.required?ie.default.red("*"):"",r=ie.default.dim(`(${i.type}${i.variadic?", variadic":""})`);console.log(` ${ie.default.cyan(s)}${n} ${r}`),i.description&&console.log(` ${ie.default.dim(i.description)}`)}}if(t.options&&Object.keys(t.options).length>0){d(),console.log(` ${ie.default.bold("Options")}`);for(let[s,i]of Object.entries(t.options)){let n=i.required?ie.default.red("*"):"",r=ie.default.dim(`(${i.type})`),o=i.choices?ie.default.dim(` [${i.choices.join(", ")}]`):"";console.log(` ${ie.default.cyan(`--${s}`)}${n} ${r}${o}`),console.log(` ${ie.default.dim(i.description)}`)}}if(t.api)if(d(),console.log(` ${ie.default.bold("API")}`),rc(t.api))uo(t.api);else for(let[s,i]of Object.entries(t.api))console.log(` ${ie.default.bold(ie.default.yellow(s))}`),uo(i,6);t.errors&&t.errors.length>0&&(d(),console.log(` ${ie.default.bold("Errors")}`),console.log(` ${t.errors.map(s=>ie.default.dim(s)).join(ie.default.dim(", "))}`)),d()}function rc(e){return typeof e=="object"&&e!==null&&"method"in e&&"path"in e}function uo(e,t=4){let s=" ".repeat(t);if(console.log(`${s}${ie.default.green(e.method)} ${ie.default.white(e.path)}`),e.parameters&&Object.keys(e.parameters).length>0)for(let[i,n]of Object.entries(e.parameters)){let r=n.required?ie.default.red("*"):"",o=[n.type];n.enum&&o.push(`enum: ${n.enum.join(", ")}`),n.minimum!==void 0&&o.push(`min: ${n.minimum}`),n.maximum!==void 0&&o.push(`max: ${n.maximum}`),n.maxItems!==void 0&&o.push(`maxItems: ${n.maxItems}`),n.items&&o.push(`items: ${n.items}`),n.in==="path"&&o.push("in: path");let a=ie.default.dim(`(${o.join(", ")})`);console.log(`${s} ${ie.default.cyan(i)}${r} ${a}`),n.description&&console.log(`${s} ${ie.default.dim(n.description)}`)}}Q();var Pe=V(J(),1);Ie();H();async function fo(e){let t=j(!e.json);t.start("Loading payment method");let s=await S("/api/me"),i=await s.json();if(s.ok||(t.stop("Failed"),h(i.error||i.message,{hint:i.hint,status:s.status,json:e.json,fields:e.fields})),e.json){t.stop(""),k(i.card?{has_payment_method:i.has_payment_method,card:i.card}:{has_payment_method:!1},e.fields);return}if(!i.has_payment_method||!i.card){t.stop("No payment method on file"),d(),console.log(` ${Pe.default.dim("Add a card with")} ${Pe.default.cyan("domani card add")}`),d();return}let{brand:n,last4:r,exp_month:o,exp_year:a}=i.card,l=`${String(o).padStart(2,"0")}/${a}`,c=n.charAt(0).toUpperCase()+n.slice(1);t.stop("Payment method loaded"),R("Payment method"),$("Card",`${Pe.default.bold(c)} \u2022\u2022\u2022\u2022 ${Pe.default.bold(r)}`),$("Expires",l),d(),console.log(` ${Pe.default.dim("Update with")} ${Pe.default.cyan("domani card add")}`),d()}async function po(e){let t=j(!e?.json);t.start("Setting up payment session");let s=await S("/api/billing/setup",{method:"POST",body:JSON.stringify({mode:"checkout"})}),i=await s.json();if(s.ok||(t.stop("Failed"),h(i.error||i.message,{hint:i.hint,status:s.status,json:e?.json})),i.url||(t.stop("Failed"),h("No checkout URL returned",{json:e?.json})),t.stop("Checkout ready"),e?.json){k({url:i.url},e?.fields);return}d(),console.log(` ${Pe.default.dim("Opening browser")} ${v.arrow} ${w.url(i.url)}`),d(),et(i.url),console.log(` ${v.info} ${Pe.default.dim("Complete payment setup in your browser.")}`),console.log(` ${Pe.default.dim(" After setup, you can purchase domains with")} ${Pe.default.cyan("domani buy")}`),d()}async function ho(e){if(!e?.yes&&!e?.json){let n=await We({message:"Remove your saved payment method?"});if(oe(n)||!n){console.log(` ${Pe.default.dim("Cancelled.")}`);return}}let t=j(!e?.json);t.start("Removing payment method");let s=await S("/api/billing/card",{method:"DELETE"}),i=await s.json();if(s.ok||(t.stop("Failed"),h(i.error||i.message,{hint:i.hint,status:s.status,json:e?.json})),t.stop(`${v.success} Payment method removed`),e?.json){k({removed:!0},e?.fields);return}d(),console.log(` ${Pe.default.dim("Add a new card with")} ${Pe.default.cyan("domani card add")}`),d()}process.stdin.setMaxListeners(50);var B=new yn;B.name("domani").description(`Domain names for developers and AI agents - ${Tt}`).version(_e).option("--api-url <url>","Override API base URL").configureOutput({outputError:(e,t)=>{let s=e.replace(/^error:\s*/i,"").trimEnd();if(t(`${st.default.red("\u2717")} ${s}
|
|
205
|
-
`),/unknown option|missing required|expected argument/i.test(s)){let i=process.argv[2],n=i&&!i.startsWith("-")?`domani ${i} --help`:"domani --help";
|
|
206
|
-
`)}}}).hook("preAction",async(e
|
|
219
|
+
domani sell <domain> --transfer-code <code>`,code:"validation_error",json:e.json,fields:e.fields})}async function Yl(t,e){let s=parseFloat(e.price);(isNaN(s)||s<=0)&&h("Invalid price",{hint:"Price must be a positive number, e.g. --price 5000",code:"validation_error",json:e.json,fields:e.fields});let i=k(!e.json);i.start(`Listing ${v.domain(t)} for sale`);let n={domain:t,price:s};e.description&&(n.description=e.description);let r=await j("/api/domains/sell",{method:"POST",body:JSON.stringify(n)}),o=await r.json();if(r.ok||(i.stop("Listing failed"),h(o.error||o.message,{hint:o.hint,status:r.status,json:e.json,fields:e.fields})),e.json){i.stop(""),x(o,e.fields);return}(o.listing?.status??"pending_verification")==="active"?(i.stop(`${b.success} Listed for sale`),R("Sell Domain"),y("Domain",v.domain(o.listing?.domain||t)),y("Price",v.price(s)),y("Status",Se.default.green("active")),m(),console.log(` ${Se.default.dim("Your listing is live on the marketplace.")}`),m()):(i.stop(`${b.success} Verification record ready`),R("Sell Domain"),y("Domain",v.domain(o.listing?.domain||t)),y("Price",v.price(s)),y("Status",Se.default.yellow("pending verification")),m(),console.log(" Add this TXT record at your DNS provider:"),m(),console.log(` ${Se.default.dim("Type:")} ${Se.default.bold("TXT")}`),console.log(` ${Se.default.dim("Name:")} ${Se.default.bold(o.txt_record?.name||"@")}`),console.log(` ${Se.default.dim("Value:")} ${Se.default.bold(o.txt_record?.value||`domani-verify=${o.token}`)}`),m(),console.log(` ${Se.default.dim("DNS propagation may take a few minutes to 48 hours.")}`),m(),I("Once the record is set, verify:",`domani sell ${t} --verify`),m())}async function Kl(t,e){let s=k(!e.json);s.start(`Verifying ownership of ${v.domain(t)}`);let i=await j("/api/domains/sell/verify",{method:"POST",body:JSON.stringify({domain:t})}),n=await i.json();if(i.ok||(s.stop("Verification failed"),h(n.error||n.message,{hint:n.hint,status:i.status,json:e.json,fields:e.fields})),e.json){s.stop(""),x(n,e.fields);return}s.stop(`${b.success} ${v.domain(t)} is now listed for sale!`),R("Domain Listed"),y("Domain",v.domain(n.domain||t)),y("Status",Se.default.green(n.status||"active")),n.price&&y("Price",v.price(n.price)),m(),I("Check listing status:",`domani sell ${t} --status`),I("View your deals:","domani deals"),m()}async function zl(t,e){let s=k(!e.json);s.start(`Checking listing status for ${v.domain(t)}`);let i=await j(`/api/domains/sell/status?domain=${encodeURIComponent(t)}`),n=await i.json();if(i.ok||(s.stop("Failed"),h(n.error||n.message,{hint:n.hint,status:i.status,json:e.json,fields:e.fields})),s.stop(`${b.success} Listing status loaded`),e.json){x(n,e.fields);return}let r=n.listing;if(R("Listing Status"),y("Domain",v.domain(n.domain||t)),r){let o=r.status;y("Status",o==="active"?Se.default.green(o):Se.default.yellow(o||"unknown")),r.price&&y("Price",v.price(r.price)),r.description&&y("Description",r.description),r.created_at&&y("Listed",Se.default.dim(new Date(r.created_at).toLocaleDateString()))}else y("Status",Se.default.dim("No listing found"));n.deal&&y("Deal",`${n.deal.status} ($${n.deal.price})`),m()}async function Xl(t,e){let s=k(!e.json);s.start(`Removing ${v.domain(t)} from sale`);let i=await j(`/api/domains/sell?domain=${encodeURIComponent(t)}`,{method:"DELETE"}),n=await i.json();if(i.ok||(s.stop("Failed"),h(n.error||n.message,{hint:n.hint,status:i.status,json:e.json,fields:e.fields})),e.json){s.stop(""),x(n,e.fields);return}s.stop(`${b.success} ${v.domain(t)} removed from sale`),m()}async function Zl(t,e,s){let i=k(!s.json);i.start(`Looking up active deal for ${v.domain(t)}`);let n=await j(`/api/deals?role=seller&domain=${encodeURIComponent(t)}&status=active`),r=await n.json();n.ok||(i.stop("Failed"),h(r.error||r.message,{hint:r.hint,status:n.status,json:s.json,fields:s.fields}));let a=(r.deals||r.data||[]).filter(f=>f.domain.toLowerCase()===t.toLowerCase());a.length===0&&(i.stop("No active deal found"),h(`No active deal found for ${t}`,{hint:`Make sure you have an active sale for this domain.
|
|
220
|
+
Run 'domani deals --role seller' to see your deals.`,code:"not_found",json:s.json,fields:s.fields}));let l=a[0].id;i.message(`Submitting transfer code for deal ${Se.default.dim(l)}`);let c=await j(`/api/deals/${encodeURIComponent(l)}`,{method:"PATCH",body:JSON.stringify({auth_code:e})}),d=await c.json();if(c.ok||(i.stop("Failed"),h(d.error||d.message,{hint:d.hint,status:c.status,json:s.json,fields:s.fields})),s.json){i.stop(""),x(d,s.fields);return}i.stop(`${b.success} Transfer code submitted for ${v.domain(t)}`),R("Transfer Code Submitted"),y("Domain",v.domain(t)),y("Deal",Se.default.dim(l)),y("Status",Se.default.green(d.status||"code_submitted")),m(),I("Track the deal:",`domani deals ${l}`),m()}Z();var xe=N(H(),1);q();async function io(t,e){return t?ec(t,e):Ql(e)}async function Ql(t){let e=k(!t.json);e.start("Loading deals");let s=new URLSearchParams;t.role&&s.set("role",t.role),t.status&&s.set("status",t.status);let i=s.toString()?`?${s.toString()}`:"",n=await j(`/api/deals${i}`),r=await n.json();n.ok||(e.stop("Failed"),h(r.error||r.message,{hint:r.hint,status:n.status,json:t.json,fields:t.fields}));let o=r.deals||r.data||[];if(e.stop(`${b.success} ${o.length} deal(s)`),t.json){x(r,t.fields);return}if(o.length===0){m(),console.log(` ${xe.default.dim("No deals found.")}`),m(),I("List a domain for sale:","domani sell <domain> --price <amount>"),m();return}m(),R("Deals");let a=o.map(l=>{let c=l.status==="completed"?xe.default.green:l.status==="active"?xe.default.cyan:l.status==="cancelled"?xe.default.red:xe.default.yellow;return[v.domain(l.domain),v.price(l.price),c(l.status),xe.default.dim(l.role||"-"),xe.default.dim(new Date(l.created_at).toLocaleDateString())]});he(["Domain","Price","Status","Role","Created"],a,[28,12,14,10,14]),m()}async function ec(t,e){let s=k(!e.json);s.start(`Loading deal ${xe.default.dim(t)}`);let i=await j(`/api/deals/${encodeURIComponent(t)}`),n=await i.json();if(i.ok||(s.stop("Failed"),h(n.error||n.message,{hint:n.hint,status:i.status,json:e.json,fields:e.fields})),s.stop(`${b.success} Deal loaded`),e.json){x(n,e.fields);return}let r=n.deal||n;R("Deal Details"),y("ID",xe.default.dim(r.id)),y("Domain",v.domain(r.domain)),y("Price",v.price(r.price));let o=r.status==="completed"?xe.default.green:r.status==="active"?xe.default.cyan:r.status==="cancelled"?xe.default.red:xe.default.yellow;y("Status",o(r.status)),r.role&&y("Your Role",r.role),r.buyer&&y("Buyer",xe.default.dim(r.buyer)),r.seller&&y("Seller",xe.default.dim(r.seller)),r.created_at&&y("Created",xe.default.dim(new Date(r.created_at).toLocaleDateString())),r.updated_at&&y("Updated",xe.default.dim(new Date(r.updated_at).toLocaleDateString())),m();let a=r.events||[];if(a.length>0){R("Timeline");for(let l of a){let c=xe.default.dim(new Date(l.created_at).toLocaleString()),d=l.status==="completed"?b.success:l.status==="expired"||l.status==="refunded"?b.error:b.info;console.log(` ${d} ${c} ${l.detail||l.status}`)}m()}(r.status==="escrow_held"||r.status==="epp_pending")&&r.role==="seller"&&(I("Submit transfer code:",`domani sell ${r.domain} --transfer-code <code>`),m())}Z();var pe=N(H(),1);q();async function ro(t){return t.read?sc(t):tc(t)}async function tc(t){let e=k(!t.json);e.start("Loading notifications");let s=new URLSearchParams;t.unread&&s.set("unread","true"),t.limit&&s.set("limit",t.limit);let i=s.toString()?`?${s.toString()}`:"",n=await j(`/api/notifications${i}`),r=await n.json();n.ok||(e.stop("Failed"),h(r.error||r.message,{hint:r.hint,status:n.status,json:t.json,fields:t.fields}));let o=r.notifications||r.data||[],a=r.unread_count??o.filter(c=>!c.read).length;if(e.stop(`${b.success} ${o.length} notification(s)${a>0?` ${b.dot} ${pe.default.yellow(`${a} unread`)}`:""}`),t.json){x(r,t.fields);return}if(o.length===0){m(),console.log(` ${pe.default.dim("No notifications.")}`),m();return}m(),R("Notifications");let l=o.map(c=>{let d=c.read?pe.default.dim(b.dot):pe.default.cyan(b.info),f=ic(c.type),g=c.read?pe.default.dim(c.title):pe.default.white(c.title),$=c.body?c.read?pe.default.dim(no(c.body,40)):pe.default.dim(no(c.body,40)):pe.default.dim("-"),w=pe.default.dim(new Date(c.created_at).toLocaleDateString());return[d,f,g,$,w]});he(["","Type","Title","Body","Date"],l,[3,16,28,42,14]),m(),a>0&&(console.log(` ${pe.default.dim("Mark all as read:")} ${pe.default.cyan("domani notifications --read")}`),m())}async function sc(t){let e=k(!t.json);e.start("Marking all notifications as read");let s=await j("/api/notifications/read-all",{method:"POST"}),i=await s.json();if(s.ok||(e.stop("Failed"),h(i.error||i.message,{hint:i.hint,status:s.status,json:t.json,fields:t.fields})),t.json){e.stop(""),x(i,t.fields);return}let n=i.count??0;e.stop(`${b.success} ${n} notification(s) marked as read`),m()}function ic(t){let e={deal:pe.default.cyan,sale:pe.default.green,purchase:pe.default.green,transfer:pe.default.yellow,expiry:pe.default.red,security:pe.default.red,billing:pe.default.yellow,email:pe.default.blue},s=t.split(".")[0].split("_")[0];return(e[s]||pe.default.dim)(t)}function no(t,e){return t.length<=e?t:t.slice(0,e-1)+"\u2026"}Z();var wt=N(H(),1);q();async function oo(t){let e=t.limit?Number(t.limit):20,s=await j(`/api/billing/invoices?limit=${e}`),i=await s.json();if(s.ok||h(i.error||i.message,{hint:i.hint,status:s.status,json:t.json,fields:t.fields}),t.json){x({...i,count:i.invoices.length},t.fields);return}if(i.invoices.length===0){console.log(` ${wt.default.dim("No invoices yet.")}`);return}R(`Invoices (${i.invoices.length})`),m();for(let n of i.invoices){let r=`$${(n.amount_paid/100).toFixed(2)}`,o=new Date(n.created).toLocaleDateString(),a=n.number||n.id;console.log(` ${b.success} ${wt.default.bold(a)} ${wt.default.green(r)} ${wt.default.dim(o)}`),n.description&&console.log(` ${wt.default.dim(n.description)}`),n.hosted_invoice_url&&console.log(` ${wt.default.dim(n.hosted_invoice_url)}`)}m(),i.has_more&&(console.log(` ${wt.default.dim(`Showing ${i.invoices.length} most recent. Use --limit to see more.`)}`),m())}Z();var ts=N(H(),1);q();async function ao(t){let e=k(!t?.json);e.start("Setting up billing session");let s=await j("/api/billing/setup",{method:"POST",body:JSON.stringify({mode:"checkout"})}),i=await s.json();if(s.ok||(e.stop("Failed"),h(i.error||i.message,{hint:i.hint,status:s.status,json:t?.json})),i.url||(e.stop("Failed"),h("No checkout URL returned",{hint:"Try again or add a payment method at the dashboard.",json:t?.json})),e.stop("Checkout ready"),t?.json){x({url:i.url});return}m(),console.log(` ${ts.default.dim("Opening browser")} ${b.arrow} ${v.url(i.url)}`),m(),Qe(i.url),console.log(` ${b.info} ${ts.default.dim("Complete payment setup in your browser.")}`),console.log(` ${ts.default.dim(" After setup, you can purchase domains with")} ${ts.default.cyan("domani buy")}`),m()}Z();var Qi=N(H(),1);q();async function lo(t){let e=k(!t?.json);e.start("Creating upgrade session");let s=await j("/api/billing/subscribe",{method:"POST"}),i=await s.json();if(!s.ok){e.stop("Failed"),i.code==="ALREADY_PRO"?h("You're already on the Pro plan.",{json:t?.json}):h(i.error||i.message,{hint:i.hint,status:s.status,json:t?.json});return}if(e.stop("Ready"),t?.json){x({url:i.url},t?.fields);return}m(),console.log(` ${Qi.default.dim("Opening browser")} ${b.arrow} ${v.url(i.url)}`),m(),Qe(i.url),console.log(` ${b.info} ${Qi.default.dim("Complete your Pro upgrade in the browser.")}`),m()}Z();var en=N(H(),1);q();async function co(t){let e=k(!t?.json);e.start("Cancelling subscription");let s=await j("/api/billing/cancel",{method:"POST"}),i=await s.json();if(!s.ok){e.stop("Failed"),i.code==="NOT_PRO"?h("You're not on the Pro plan.",{json:t?.json}):h(i.error||i.message,{hint:i.hint,status:s.status,json:t?.json});return}if(e.stop("Done"),t?.json){x(i,t?.fields);return}m();let n=i.cancel_at?new Date(i.cancel_at).toLocaleDateString():"end of billing period";console.log(` ${b.success} ${en.default.dim("Subscription cancelled.")} Access continues until ${en.default.cyan(n)}.`),m()}Z();var tt=N(H(),1);q();_e();Ye();async function uo(t,e,s){t||(t=await ue()),Q(t,s);let i=[];if(e?.length&&i.push(...e),s.set&&i.push(...s.set.split(",").map(n=>n.trim()).filter(Boolean)),i.length>0||s.reset){await rc(t,i,s);return}await nc(t,s)}async function nc(t,e){let s=k(!e.json);s.start(`Fetching nameservers for ${v.domain(t)}`);let i=await j(`/api/domains/${encodeURIComponent(t)}/nameservers`),n=await i.json();if(i.ok||(s.stop("Failed"),h(n.error||n.message,{hint:n.hint,status:i.status,json:e.json,fields:e.fields})),s.stop(`Nameservers for ${v.domain(t)}`),e.json){x(n,e.fields);return}if(m(),n.nameservers.length===0)console.log(` ${b.warning} ${tt.default.yellow("No nameservers configured.")}`),console.log(` ${tt.default.dim("DNS operations (parking, email, connect) will not work.")}`),m(),I("Set default nameservers:",`domani nameservers ${t} --reset`);else{R("Nameservers");for(let r of n.nameservers)console.log(` ${b.success} ${tt.default.cyan(r)}`);n.default_nameservers&&n.nameservers.length===n.default_nameservers.length&&n.nameservers.every(o=>n.default_nameservers.includes(o))&&(m(),console.log(` ${tt.default.dim("Using default nameservers.")}`))}n.default_nameservers?.length&&(m(),y("Defaults",n.default_nameservers.map(r=>tt.default.dim(r)).join(tt.default.dim(", ")))),m()}async function rc(t,e,s){let i=k(!s.json);if(s.reset){i.start(`Fetching default nameservers for ${v.domain(t)}`);let o=await j(`/api/domains/${encodeURIComponent(t)}/nameservers`),a=await o.json();o.ok||(i.stop("Failed"),h(a.error,{hint:a.hint,status:o.status,json:s.json,fields:s.fields})),a.default_nameservers?.length||(i.stop("No defaults"),h("No default nameservers available for this domain's registrar.",{code:"not_found",json:s.json,fields:s.fields})),e=a.default_nameservers,i.stop(`Using defaults: ${e.map(l=>tt.default.cyan(l)).join(tt.default.dim(", "))}`)}if(e.length<2&&h("At least 2 nameservers required.",{hint:"Example: domani nameservers example.com ns1.dns.com ns2.dns.com",code:"validation_error",json:s.json,fields:s.fields}),s.dryRun)return K("nameservers_set",{domain:t,nameservers:e},s.json,s.fields);i.start(`Setting nameservers for ${v.domain(t)}`);let n=await j(`/api/domains/${encodeURIComponent(t)}/nameservers`,{method:"PUT",body:JSON.stringify({nameservers:e})}),r=await n.json();if(n.ok||(i.stop("Failed"),h(r.error||r.message,{hint:r.hint,status:n.status,json:s.json,fields:s.fields})),i.stop(`${b.success} Nameservers updated`),s.json){x(r,s.fields);return}m();for(let o of r.nameservers)console.log(` ${b.success} ${tt.default.cyan(o)}`);m(),console.log(` ${tt.default.dim("Changes may take up to 48 hours to propagate.")}`),m(),I("Check propagation:",`domani status ${t}`),m()}var mo=require("crypto"),Ds=N(require("fs"),1);gt();var ss=N(H(),1);q();function oc(t,e){let s=t.split(".").map(Number),i=e.split(".").map(Number);for(let n=0;n<3;n++){if((s[n]||0)>(i[n]||0))return 1;if((s[n]||0)<(i[n]||0))return-1}return 0}async function fo(t){let e=k(!t?.json);e.start("Checking for updates");let s=ze();try{let i=await fetch(`${s}/api/cli/version`);i.ok||(e.stop("Failed"),h("Could not check for updates"));let n=await i.json(),r=n.version,o=n.sha256;if(oc(r,je)<=0){e.stop(`${b.success} Already up to date (v${je})`),t?.json&&x({current:je,latest:r,up_to_date:!0});return}if(t?.json){e.stop(""),x({current:je,latest:r,up_to_date:!1,hint:"Run `domani update` to upgrade."});return}e.stop(`New version available: ${ss.default.cyan(je)} ${b.arrow} ${ss.default.green(r)}`);let a=k();a.start("Downloading update");let l=`${s}/cli/domani.js`,c=await fetch(l);c.ok||(a.stop("Download failed"),h(`Failed to download from ${l}`));let d=await c.text();o&&(0,mo.createHash)("sha256").update(d).digest("hex")!==o&&(a.stop("Integrity check failed"),h("Downloaded file does not match expected hash - update aborted"));let f=process.argv[1];f||(a.stop("Failed"),h("Could not determine binary path"));let g=Ds.default.realpathSync(f),$=g+".tmp";Ds.default.writeFileSync($,d,{mode:493}),Ds.default.renameSync($,g),a.stop(`${b.success} Updated to v${r}`),m(),console.log(` ${ss.default.dim("Restart your terminal or run")} domani --version ${ss.default.dim("to verify")}`),m()}catch(i){h(`Update failed: ${i instanceof Error?i.message:String(i)}`)}}var Ps=N(require("fs"),1),ho=N(require("path"),1),po=N(require("os"),1);Pe();var is=N(H(),1);q();async function go(){let t=process.argv[1],e=t?Ps.default.realpathSync(t):null,s=ho.default.join(po.default.homedir(),".domani");if(m(),console.log(` ${is.default.bold("This will remove:")}`),e&&console.log(` ${b.dot} CLI binary: ${is.default.dim(e)}`),console.log(` ${b.dot} Config dir: ${is.default.dim(s)}`),m(),await Ge({message:"Uninstall domani?"})!==!0){console.log(` ${is.default.dim("Cancelled.")}`);return}Ps.default.rmSync(s,{recursive:!0,force:!0}),e&&Ps.default.unlinkSync(e),m(),console.log(` ${b.success} domani uninstalled.`),m()}Z();var ie=N(H(),1);q();async function yo(t,e){let s=e?.json,i=e?.fields,n=t?`/api/schema?command=${encodeURIComponent(t)}`:"/api/schema",r=k(!s);r.start("Loading schema");let o=await ve(n),a=await o.json();if(o.ok||(r.stop("Failed"),h(a.error||a.message,{hint:a.hint,status:o.status,json:s,fields:i})),r.stop("Schema loaded"),s){x(a,i);return}t?lc(t,a):ac(a.commands)}function ac(t){R("Commands");let e=Object.entries(t).map(([s,i])=>[ie.default.bold(ie.default.cyan(s)),i.description]);he(["Command","Description"],e,[20,50]),m(),console.log(` ${ie.default.dim("Run")} ${ie.default.cyan("domani schema <command>")} ${ie.default.dim("for full details")}`),m()}function lc(t,e){if(R(`domani ${t}`),console.log(` ${e.description}`),m(),console.log(` ${v.label("Usage:")} ${ie.default.cyan(e.usage)}`),e.arguments&&Object.keys(e.arguments).length>0){m(),console.log(` ${ie.default.bold("Arguments")}`);for(let[s,i]of Object.entries(e.arguments)){let n=i.required?ie.default.red("*"):"",r=ie.default.dim(`(${i.type}${i.variadic?", variadic":""})`);console.log(` ${ie.default.cyan(s)}${n} ${r}`),i.description&&console.log(` ${ie.default.dim(i.description)}`)}}if(e.options&&Object.keys(e.options).length>0){m(),console.log(` ${ie.default.bold("Options")}`);for(let[s,i]of Object.entries(e.options)){let n=i.required?ie.default.red("*"):"",r=ie.default.dim(`(${i.type})`),o=i.choices?ie.default.dim(` [${i.choices.join(", ")}]`):"";console.log(` ${ie.default.cyan(`--${s}`)}${n} ${r}${o}`),console.log(` ${ie.default.dim(i.description)}`)}}if(e.api)if(m(),console.log(` ${ie.default.bold("API")}`),cc(e.api))$o(e.api);else for(let[s,i]of Object.entries(e.api))console.log(` ${ie.default.bold(ie.default.yellow(s))}`),$o(i,6);e.errors&&e.errors.length>0&&(m(),console.log(` ${ie.default.bold("Errors")}`),console.log(` ${e.errors.map(s=>ie.default.dim(s)).join(ie.default.dim(", "))}`)),m()}function cc(t){return typeof t=="object"&&t!==null&&"method"in t&&"path"in t}function $o(t,e=4){let s=" ".repeat(e);if(console.log(`${s}${ie.default.green(t.method)} ${ie.default.white(t.path)}`),t.parameters&&Object.keys(t.parameters).length>0)for(let[i,n]of Object.entries(t.parameters)){let r=n.required?ie.default.red("*"):"",o=[n.type];n.enum&&o.push(`enum: ${n.enum.join(", ")}`),n.minimum!==void 0&&o.push(`min: ${n.minimum}`),n.maximum!==void 0&&o.push(`max: ${n.maximum}`),n.maxItems!==void 0&&o.push(`maxItems: ${n.maxItems}`),n.items&&o.push(`items: ${n.items}`),n.in==="path"&&o.push("in: path");let a=ie.default.dim(`(${o.join(", ")})`);console.log(`${s} ${ie.default.cyan(i)}${r} ${a}`),n.description&&console.log(`${s} ${ie.default.dim(n.description)}`)}}Z();var Fe=N(H(),1);Pe();q();async function bo(t){let e=k(!t.json);e.start("Loading payment method");let s=await j("/api/me"),i=await s.json();if(s.ok||(e.stop("Failed"),h(i.error||i.message,{hint:i.hint,status:s.status,json:t.json,fields:t.fields})),t.json){e.stop(""),x(i.card?{has_payment_method:i.has_payment_method,card:i.card}:{has_payment_method:!1},t.fields);return}if(!i.has_payment_method||!i.card){e.stop("No payment method on file"),m(),console.log(` ${Fe.default.dim("Add a card with")} ${Fe.default.cyan("domani card add")}`),m();return}let{brand:n,last4:r,exp_month:o,exp_year:a}=i.card,l=`${String(o).padStart(2,"0")}/${a}`,c=n.charAt(0).toUpperCase()+n.slice(1);e.stop("Payment method loaded"),R("Payment method"),y("Card",`${Fe.default.bold(c)} \u2022\u2022\u2022\u2022 ${Fe.default.bold(r)}`),y("Expires",l),m(),console.log(` ${Fe.default.dim("Update with")} ${Fe.default.cyan("domani card add")}`),m()}async function vo(t){let e=k(!t?.json);e.start("Setting up payment session");let s=await j("/api/billing/setup",{method:"POST",body:JSON.stringify({mode:"checkout"})}),i=await s.json();if(s.ok||(e.stop("Failed"),h(i.error||i.message,{hint:i.hint,status:s.status,json:t?.json})),i.url||(e.stop("Failed"),h("No checkout URL returned",{json:t?.json})),e.stop("Checkout ready"),t?.json){x({url:i.url},t?.fields);return}m(),console.log(` ${Fe.default.dim("Opening browser")} ${b.arrow} ${v.url(i.url)}`),m(),Qe(i.url),console.log(` ${b.info} ${Fe.default.dim("Complete payment setup in your browser.")}`),console.log(` ${Fe.default.dim(" After setup, you can purchase domains with")} ${Fe.default.cyan("domani buy")}`),m()}async function wo(t){if(!t?.yes&&!t?.json){let n=await Ge({message:"Remove your saved payment method?"});if(oe(n)||!n){console.log(` ${Fe.default.dim("Cancelled.")}`);return}}let e=k(!t?.json);e.start("Removing payment method");let s=await j("/api/billing/card",{method:"DELETE"}),i=await s.json();if(s.ok||(e.stop("Failed"),h(i.error||i.message,{hint:i.hint,status:s.status,json:t?.json})),e.stop(`${b.success} Payment method removed`),t?.json){x({removed:!0},t?.fields);return}m(),console.log(` ${Fe.default.dim("Add a new card with")} ${Fe.default.cyan("domani card add")}`),m()}process.stdin.setMaxListeners(50);var J=new pn;J.name("domani").description(`Domain names for developers and AI agents - ${Nt}`).version(je).option("--api-url <url>","Override API base URL").configureOutput({outputError:(t,e)=>{let s=t.replace(/^error:\s*/i,"").trimEnd();if(e(`${it.default.red("\u2717")} ${s}
|
|
221
|
+
`),/unknown option|missing required|expected argument/i.test(s)){let i=process.argv[2],n=i&&!i.startsWith("-")?`domani ${i} --help`:"domani --help";e(`${it.default.dim(` Run \`${n}\` to see available options.`)}
|
|
222
|
+
`)}}}).hook("preAction",async(t,e)=>{let s=t.opts();s.apiUrl&&vn(s.apiUrl),process.stdout.isTTY||e.options.some(r=>r.long==="--json")&&e.setOptionValue("json",!0),["login","logout","search","suggest","tlds","whois","schema","update","uninstall"].includes(e.name())||await $r()});J.command("login").description(`Log in to ${Nt} (opens browser)`).option("--json","Output as JSON (returns auth_url for non-interactive approval)").option("--no-open","Don't open browser (print URL instead)").addHelpText("after",`
|
|
207
223
|
Examples:
|
|
208
224
|
domani login # interactive login (opens browser)
|
|
209
225
|
domani login --json # non-interactive (returns auth_url)
|
|
210
226
|
domani login --no-open # print login URL without opening browser
|
|
211
|
-
DOMANI_API_KEY=domani_sk_xxx domani list # skip login, use env var`).action(
|
|
227
|
+
DOMANI_API_KEY=domani_sk_xxx domani list # skip login, use env var`).action(yr);J.command("logout").description("Clear saved credentials").option("--yes","Skip confirmation").option("--json","Output as JSON").action(br);J.command("me").description("Show account info").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").addHelpText("after",`
|
|
212
228
|
Examples:
|
|
213
229
|
domani me # show account overview
|
|
214
230
|
domani me --json # machine-readable account info
|
|
215
|
-
domani me --json --fields email,plan # just email and plan`).action(
|
|
231
|
+
domani me --json --fields email,plan # just email and plan`).action(wr);J.command("invoices").description("List payment invoices").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").option("--limit <n>","Max invoices to show (default 20)").action(oo);J.command("card [action]").description("Manage payment methods (list, add, remove)").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").option("--yes","Skip confirmation prompt (for remove)").action(async(t,e)=>{if(!t||t==="list")return bo(e);if(t==="add")return vo(e);if(t==="remove")return wo(e);h(`Unknown action: ${t}`,{hint:"Use: domani card list, domani card add, or domani card remove"})});J.command("upgrade").description("Upgrade to Pro \u2014 10,000 emails/month, unlimited mailboxes, API/MCP/CLI access").option("--json","Output as JSON (returns checkout URL)").action(lo);J.command("cancel").description("Cancel Pro subscription (access continues until end of billing period)").option("--json","Output as JSON").action(co);J.command("billing",{hidden:!0}).option("--json","Output as JSON (returns checkout URL)").action(ao);J.command("token").description("Print your API key").option("--json","Output as JSON").action(Jr);J.command("tokens [action]").description("Manage API tokens (list/create/revoke)").option("--name <name>","Token name (for create)").option("--scopes <scopes>","Comma-separated permission scopes (for create)").option("--expires-in <seconds>","Token lifetime in seconds (for create, min 3600)").option("--token-id <id>","Token ID (for revoke)").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").addHelpText("after",`
|
|
216
232
|
Examples:
|
|
217
233
|
domani tokens list # list all tokens
|
|
218
234
|
domani tokens create --name "CI" --scopes "domains:read,search"
|
|
219
|
-
domani tokens revoke --token-id tok_abc123`).action(
|
|
235
|
+
domani tokens revoke --token-id tok_abc123`).action(Br);J.command("search [domain] [tlds...]").description("Check availability - domani search myapp .io .fm .xyz").option("--tlds <tlds>","Comma-separated TLDs (e.g. com,io,dev)").option("--max-price <price>","Maximum price filter").option("--all","Show taken domains too").option("--expand","Check 30+ TLDs including creative/exotic extensions").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").addHelpText("after",`
|
|
220
236
|
Examples:
|
|
221
237
|
domani search myapp # check popular TLDs
|
|
222
238
|
domani search myapp .io .fm .xyz # specific TLDs
|
|
223
239
|
domani search myapp --expand # check 30+ TLDs
|
|
224
240
|
domani search myapp --max-price 20 # only affordable options
|
|
225
|
-
domani search myapp --json # machine-readable output`).action(
|
|
241
|
+
domani search myapp --json # machine-readable output`).action(Fr);J.command("tlds").description("List all TLDs with pricing").option("--max-price <price>","Maximum registration price").option("--min-price <price>","Minimum registration price").option("--sort <field>","Sort by: price, tld, renewal (default: tld)").option("--search <term>","Filter TLDs by name").option("--limit <n>","Limit results").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").action(Ur);J.command("whois <domain>").description("WHOIS/RDAP lookup for any domain").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").action(Mr);J.command("suggest [prompt]").description("AI-powered domain name suggestions").option("--count <n>","Number of suggestions (1-20, default 10)").option("--tlds <tlds>","Preferred TLDs, comma-separated (e.g. com,dev,ai)").option("--style <style>","Name style: single, creative, short, brandable, keyword").option("--lang <lang>","Language inspiration: japanese, spanish, french, italian, latin, nordic, arabic, sanskrit").option("--timeout <seconds>","Request timeout in seconds (default: 60)").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").addHelpText("after",`
|
|
226
242
|
Examples:
|
|
227
243
|
domani suggest "cat sitting marketplace"
|
|
228
244
|
domani suggest "AI code editor" --style creative --tlds ai,dev
|
|
229
|
-
domani suggest "meditation app" --lang japanese --count 5`).action(
|
|
245
|
+
domani suggest "meditation app" --lang japanese --count 5`).action(Vr);J.command("buy [domains...]").description("Purchase one or more domains").option("--yes","Skip confirmation prompt").option("--dry-run","Show what would happen without executing").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").addHelpText("after",`
|
|
230
246
|
Examples:
|
|
231
247
|
domani buy myapp.dev # buy one domain
|
|
232
248
|
domani buy myapp.dev myapp.com myapp.ai # buy multiple
|
|
233
249
|
domani buy myapp.dev --dry-run # preview without buying
|
|
234
250
|
domani buy myapp.dev --yes # skip confirmation
|
|
235
|
-
domani buy myapp.dev --json # machine-readable output`).action(
|
|
251
|
+
domani buy myapp.dev --json # machine-readable output`).action(Xi);J.command("transfer <domain>").description("Transfer a domain from another registrar").option("--auth-code <code>","EPP/auth code from current registrar").option("--yes","Skip confirmation prompt").option("--dry-run","Show what would happen without executing").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").addHelpText("after",`
|
|
236
252
|
Examples:
|
|
237
253
|
domani transfer myapp.com --auth-code ABC123XYZ
|
|
238
254
|
domani transfer myapp.com --auth-code ABC123XYZ --dry-run
|
|
239
|
-
domani transfer myapp.com --auth-code ABC123XYZ --yes`).action(
|
|
255
|
+
domani transfer myapp.com --auth-code ABC123XYZ --yes`).action(qr);J.command("renew [domain]").description("Renew a domain").option("--years <n>","Number of years (1-10, default: 1)").option("--yes","Skip confirmation prompt").option("--dry-run","Show what would happen without executing").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").action(Wr);J.command("import <domain>").description("Import a domain you own at another registrar").option("--verify","Verify DNS ownership and complete import").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").addHelpText("after",`
|
|
240
256
|
Examples:
|
|
241
257
|
domani import myapp.com # start import (shows TXT record to add)
|
|
242
|
-
domani import myapp.com --verify # verify TXT record and complete import`).action(
|
|
258
|
+
domani import myapp.com --verify # verify TXT record and complete import`).action(Hr);J.command("sell <domain>").description("List a domain for sale (verify ownership via TXT record)").option("--price <amount>","Sale price in USD").option("--verify","Verify DNS ownership and activate listing").option("--transfer-code <code>","Submit transfer/auth code for an active deal").option("--cancel","Remove domain from sale").option("--status","Check listing status").option("--description <text>","Listing description").option("--yes","Skip confirmation").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").addHelpText("after",`
|
|
243
259
|
Examples:
|
|
244
260
|
domani sell myapp.dev --price 5000 # list for $5,000
|
|
245
261
|
domani sell myapp.dev --price 5000 --description "Great brand name"
|
|
@@ -247,16 +263,16 @@ Examples:
|
|
|
247
263
|
domani sell external.com --verify # verify TXT record
|
|
248
264
|
domani sell myapp.dev --status # check listing status
|
|
249
265
|
domani sell myapp.dev --cancel # remove from sale
|
|
250
|
-
domani sell myapp.dev --transfer-code ABC123 # provide EPP code for a deal`).action(
|
|
266
|
+
domani sell myapp.dev --transfer-code ABC123 # provide EPP code for a deal`).action(so);J.command("list").alias("domains").description("List your domains").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").addHelpText("after",`
|
|
251
267
|
Examples:
|
|
252
268
|
domani list # list all domains
|
|
253
269
|
domani domains # alias for list
|
|
254
|
-
domani list --json --fields domain,expires_at`).action(
|
|
270
|
+
domani list --json --fields domain,expires_at`).action(Lr);J.command("status [domain]").description("Check domain health (DNS, SSL, email, expiry)").option("--timeout <seconds>","Request timeout in seconds (default: 30)").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").action(Yi);J.command("connect [domain] [target]").description("Connect domain to a hosting/email provider").option("--provider <name>","Provider name (e.g. vercel, google-workspace)").option("--method <name>","Connection method (e.g. cname-only)").option("--list","List available providers").option("--dry-run","Show what would happen without executing").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").addHelpText("after",`
|
|
255
271
|
Examples:
|
|
256
272
|
domani connect --list # list providers
|
|
257
273
|
domani connect myapp.dev vercel # connect to Vercel
|
|
258
274
|
domani connect myapp.dev --provider google-workspace # connect Google Workspace
|
|
259
|
-
domani connect myapp.dev vercel --dry-run # preview DNS changes`).action(
|
|
275
|
+
domani connect myapp.dev vercel --dry-run # preview DNS changes`).action(Vi);J.command("email [action] [arg2]").description("Manage email: list, inbox, create, delete, send, forward, webhook, setup, status, check, connect").addHelpText("after",`
|
|
260
276
|
Examples:
|
|
261
277
|
domani email list # list all mailboxes
|
|
262
278
|
domani email create --domain myapp.dev --slug hi # create hi@myapp.dev
|
|
@@ -264,41 +280,41 @@ Examples:
|
|
|
264
280
|
domani email send --from hi@myapp.dev --to bob@x.com --subject "Hello" --text "Hi Bob"
|
|
265
281
|
domani email setup myapp.dev # setup email for domain
|
|
266
282
|
domani email status myapp.dev # check email DNS health
|
|
267
|
-
domani email delete --domain myapp.dev --slug hi # delete mailbox`).option("--domain <domain>","Domain name").option("--slug <slug>","Mailbox slug (local part before @)").option("--from <email>","Sender address user@domain (alternative to --domain + --slug)").option("--to <email>","Recipient email address (for send)").option("--cc <emails>","CC recipients, comma-separated (for send)").option("--bcc <emails>","BCC recipients, comma-separated (for send)").option("--subject <s>","Email subject (for send)").option("--title <s>","Email subject (alias for --subject)").option("--text <t>","Email body text (for send)").option("--body <t>","Email body text (alias for --text)").option("--in-reply-to <message-id>","Message-ID of email being replied to (for threading)").option("--references <message-ids>","Space-separated Message-ID chain (for threading)").option("--url <url>","Webhook URL (for webhook)").option("--forward-to <email>","Email address to forward inbound emails to (for forward)").option("--direction <dir>","Filter messages: in or out").option("--limit <n>","Limit results").option("--check","Verify email DNS health (MX, SPF, DKIM, DMARC)").option("--dry-run","Show what would happen without executing").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").action(Qt);
|
|
283
|
+
domani email delete --domain myapp.dev --slug hi # delete mailbox`).option("--domain <domain>","Domain name").option("--slug <slug>","Mailbox slug (local part before @)").option("--from <email>","Sender address user@domain (alternative to --domain + --slug)").option("--to <email>","Recipient email address (for send)").option("--cc <emails>","CC recipients, comma-separated (for send)").option("--bcc <emails>","BCC recipients, comma-separated (for send)").option("--subject <s>","Email subject (for send)").option("--title <s>","Email subject (alias for --subject)").option("--text <t>","Email body text (for send)").option("--body <t>","Email body text (alias for --text)").option("--in-reply-to <message-id>","Message-ID of email being replied to (for threading)").option("--references <message-ids>","Space-separated Message-ID chain (for threading)").option("--url <url>","Webhook URL (for webhook)").option("--forward-to <email>","Email address to forward inbound emails to (for forward)").option("--direction <dir>","Filter messages: in or out").option("--limit <n>","Limit results").option("--check","Verify email DNS health (MX, SPF, DKIM, DMARC)").option("--dry-run","Show what would happen without executing").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").action(Qt);J.command("dns [domain] [action] [type] [name] [value]").description("Manage DNS records (get/set/delete/snapshot/restore)").option("--type <type>","Record type: A, AAAA, CNAME, MX, TXT, NS, SRV").option("--name <name>","Record name (e.g. www, @, _dmarc)").option("--value <value>","Record value").option("--file <path>","Snapshot file path (for restore)").option("--dry-run","Show what would happen without executing").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").addHelpText("after",`
|
|
268
284
|
Examples:
|
|
269
285
|
domani dns myapp.dev get # list all records
|
|
270
286
|
domani dns myapp.dev set --type A --name @ --value 76.76.21.21 # add A record
|
|
271
287
|
domani dns myapp.dev set --type CNAME --name www --value cname.vercel-dns.com
|
|
272
288
|
domani dns myapp.dev delete --type A --name @
|
|
273
289
|
domani dns myapp.dev snapshot # export DNS as JSON
|
|
274
|
-
domani dns myapp.dev restore --file dns-backup.json # restore from snapshot`).action(
|
|
290
|
+
domani dns myapp.dev restore --file dns-backup.json # restore from snapshot`).action(Bi);J.command("nameservers [domain] [ns...]").alias("ns").description("Get or set nameservers (--reset for defaults)").option("--set <ns>","Comma-separated nameservers to set").option("--reset","Reset to registrar default nameservers").option("--dry-run","Show what would happen without executing").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").action(uo);J.command("settings [domain]").description("View or update domain settings (auto-renew, WHOIS privacy, security lock)").option("--auto-renew <on|off>","Enable or disable auto-renew").option("--whois-privacy <on|off>","Enable or disable WHOIS privacy").option("--security-lock <on|off>","Lock or unlock domain transfers").option("--dry-run","Show what would happen without executing").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").addHelpText("after",`
|
|
275
291
|
Examples:
|
|
276
292
|
domani settings myapp.dev # view current settings
|
|
277
293
|
domani settings myapp.dev --auto-renew on # enable auto-renew
|
|
278
294
|
domani settings myapp.dev --whois-privacy on # enable WHOIS privacy
|
|
279
|
-
domani settings myapp.dev --security-lock off # unlock for transfer`).action(
|
|
295
|
+
domani settings myapp.dev --security-lock off # unlock for transfer`).action(Gr);J.command("auth-code [domain]").description("Get EPP auth code to transfer domain to another registrar").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").action(Yr);J.command("transfer-away [domain]").description("Check status of an outbound domain transfer").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").action(Kr);J.command("contact [action]").description("View or set WHOIS contact info (required for purchases)").addHelpText("after",`
|
|
280
296
|
Examples:
|
|
281
297
|
domani contact # view current contact info
|
|
282
298
|
domani contact set --first-name John --last-name Doe --address1 "123 Main St" \\
|
|
283
|
-
--city "San Francisco" --state CA --postal-code 94102 --country US --phone +1.5551234567 --email john@example.com`).option("--first-name <name>","First name (for set)").option("--last-name <name>","Last name (for set)").option("--org-name <name>","Organization name (for set, optional)").option("--address1 <addr>","Address line 1 (for set)").option("--address2 <addr>","Address line 2 (for set, optional)").option("--city <city>","City (for set)").option("--state <state>","State/Province (for set)").option("--postal-code <code>","Postal/ZIP code (for set)").option("--country <code>","Country code ISO 3166-1 alpha-2 (for set)").option("--phone <phone>","Phone +CC.NUMBER (for set)").option("--email <email>","Contact email (for set)").option("--dry-run","Show what would happen without executing").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").action(
|
|
299
|
+
--city "San Francisco" --state CA --postal-code 94102 --country US --phone +1.5551234567 --email john@example.com`).option("--first-name <name>","First name (for set)").option("--last-name <name>","Last name (for set)").option("--org-name <name>","Organization name (for set, optional)").option("--address1 <addr>","Address line 1 (for set)").option("--address2 <addr>","Address line 2 (for set, optional)").option("--city <city>","City (for set)").option("--state <state>","State/Province (for set)").option("--postal-code <code>","Postal/ZIP code (for set)").option("--country <code>","Country code ISO 3166-1 alpha-2 (for set)").option("--phone <phone>","Phone +CC.NUMBER (for set)").option("--email <email>","Contact email (for set)").option("--dry-run","Show what would happen without executing").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").action(zr);J.command("parking [domain] [action] [value]").description("Manage parking page (enable/disable/price)").option("--dry-run","Show what would happen without executing").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").addHelpText("after",`
|
|
284
300
|
Examples:
|
|
285
301
|
domani parking myapp.dev # view parking status
|
|
286
302
|
domani parking myapp.dev enable # enable parking page
|
|
287
303
|
domani parking myapp.dev disable # disable parking page
|
|
288
|
-
domani parking myapp.dev price 500 # set for-sale price to $500`).action(
|
|
304
|
+
domani parking myapp.dev price 500 # set for-sale price to $500`).action(Qr);J.command("analytics [domain]").alias("stats").description("View parking analytics (views, inquiries, conversion)").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").action(eo);J.command("webhooks [action]").alias("webhook").description("Manage webhook endpoints (list/create/update/delete/deliveries/events)").addHelpText("after",`
|
|
289
305
|
Examples:
|
|
290
306
|
domani webhooks list
|
|
291
307
|
domani webhooks create --url https://example.com/hook --events domain.purchased,domain.expiring
|
|
292
308
|
domani webhooks update --webhook-id wh_abc --active off
|
|
293
309
|
domani webhooks delete --webhook-id wh_abc
|
|
294
310
|
domani webhooks deliveries --webhook-id wh_abc
|
|
295
|
-
domani webhooks events # list available event types`).option("--url <url>","Webhook HTTPS URL").option("--events <events>","Comma-separated event types").option("--webhook-id <id>","Webhook ID (for update/delete/deliveries)").option("--active <on|off>","Enable or disable webhook").option("--limit <n>","Limit deliveries returned").option("--dry-run","Show what would happen without executing").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").action(
|
|
311
|
+
domani webhooks events # list available event types`).option("--url <url>","Webhook HTTPS URL").option("--events <events>","Comma-separated event types").option("--webhook-id <id>","Webhook ID (for update/delete/deliveries)").option("--active <on|off>","Enable or disable webhook").option("--limit <n>","Limit deliveries returned").option("--dry-run","Show what would happen without executing").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").action(to);J.command("deals [id]").description("List marketplace deals or view deal details").option("--role <role>","Filter by role: buyer or seller").option("--status <status>","Filter by status: active, completed, or all").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").addHelpText("after",`
|
|
296
312
|
Examples:
|
|
297
313
|
domani deals # list all your deals
|
|
298
314
|
domani deals --role seller --status active # your active sales
|
|
299
315
|
domani deals deal_abc123 # view specific deal
|
|
300
|
-
domani deals --json # machine-readable output`).action(
|
|
301
|
-
${
|
|
302
|
-
`),process.exit(1)):
|
|
303
|
-
${
|
|
316
|
+
domani deals --json # machine-readable output`).action(io);J.command("notifications").alias("notifs").description("View notifications or mark all as read").option("--read","Mark all notifications as read").option("--unread","Show only unread notifications").option("--limit <n>","Limit results").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").action(ro);J.command("send [arg2]").description("Send an email - shortcut for: domani email send").option("--from <email>","Sender address user@domain").option("--to <email>","Recipient email address").option("--cc <emails>","CC recipients, comma-separated").option("--bcc <emails>","BCC recipients, comma-separated").option("--subject <s>","Email subject").option("--title <s>","Email subject (alias for --subject)").option("--text <t>","Email body text").option("--body <t>","Email body text (alias for --text)").option("--in-reply-to <message-id>","Message-ID of email being replied to").option("--references <message-ids>","Space-separated Message-ID chain").option("--domain <domain>","Domain name").option("--slug <slug>","Mailbox slug").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").action((t,e)=>Qt("send",t,e));J.command("inbox [arg2]").description("View email inbox - shortcut for: domani email inbox").option("--from <email>","Sender address user@domain").option("--domain <domain>","Domain name").option("--slug <slug>","Mailbox slug").option("--direction <dir>","Filter messages: in or out").option("--limit <n>","Limit results").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").action((t,e)=>Qt("inbox",t,e));J.command("schema [command]").description("Show command schemas for AI agent integration").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").action(yo);J.command("update").description("Update domani CLI to the latest version").option("--json","Output as JSON (check version without updating)").action(fo);J.command("uninstall").description("Remove domani CLI and config from this machine").action(go);(async()=>{let t=Sn();await J.parseAsync();let e=await t;e?.forced?(console.error(`
|
|
317
|
+
${it.default.red("!")} CLI v${je} is no longer supported. Run ${it.default.bold("domani update")} to upgrade to v${e.update}
|
|
318
|
+
`),process.exit(1)):e?.update&&console.error(`
|
|
319
|
+
${it.default.yellow("!")} Update available: ${it.default.dim(je)} ${it.default.dim("\u2192")} ${it.default.green(e.update)} Run ${it.default.bold("domani update")}
|
|
304
320
|
`)})();
|