omo-ai 5.1.42 → 5.1.43

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.
Files changed (38) hide show
  1. package/bin/lib/service-auth.generated.js +13 -7
  2. package/bin/omo.js +9 -0
  3. package/package.json +1 -1
  4. package/plugin/CHANGELOG.md +48 -0
  5. package/plugin/extensions/dream-persona.md +2 -0
  6. package/plugin/extensions/facts-persona.md +10 -2
  7. package/plugin/extensions/gateway-rules-extension.mjs +1 -1
  8. package/plugin/extensions/gateway-store-worker.mjs +1 -1
  9. package/plugin/extensions/kibitzer-persona.md +1 -1
  10. package/plugin/extensions/memory-run-supervisor.mjs +11 -2
  11. package/plugin/extensions/omo-claim-receipt.js +1 -1
  12. package/plugin/extensions/omo-computer-use.js +1 -1
  13. package/plugin/extensions/omo-feedback.js +2 -2
  14. package/plugin/extensions/omo-init-deep-advisor.js +2 -2
  15. package/plugin/extensions/omo-member.js +1 -1
  16. package/plugin/extensions/omo-memory-doctor.js +11 -2
  17. package/plugin/extensions/omo-memory-memfs.js +11 -2
  18. package/plugin/extensions/omo-memory-palace.js +11 -2
  19. package/plugin/extensions/omo-memory-sync.js +2 -2
  20. package/plugin/extensions/omo-onboarding-scan.js +11 -2
  21. package/plugin/extensions/omo-recall-store.js +2 -2
  22. package/plugin/extensions/omo-session-history.js +1 -1
  23. package/plugin/extensions/omo-side-panel.js +11 -2
  24. package/plugin/extensions/omo-task.js +2 -2
  25. package/plugin/extensions/omo-telemetry-posthog.js +1 -1
  26. package/plugin/extensions/omo-thread-client.js +2 -2
  27. package/plugin/extensions/omo.js +11 -2
  28. package/plugin/extensions/reflection-persona.md +2 -0
  29. package/plugin/package.json +1 -1
  30. package/plugin/runtime/agent-toolkit-sdk/sdk.js +2 -2
  31. package/plugin/runtime/ast-grep-mcp/manifest.json +1 -1
  32. package/plugin/runtime/lsp-daemon/dist/.omo-runtime-manifest.json +4 -4
  33. package/plugin/runtime/lsp-daemon/dist/cli.js +363 -35
  34. package/plugin/runtime/lsp-daemon/dist/client.js +341 -13
  35. package/plugin/runtime/lsp-daemon/dist/index.js +344 -16
  36. package/plugin/runtime/rollback-migrate.js +2 -2
  37. package/plugin/runtime/thread-sdk/sdk.js +2 -2
  38. package/plugin/skills/browser/runtime/omowright/manifest.json +1 -1
@@ -1,17 +1,17 @@
1
1
  // Generated by bun script/build-service-auth.ts; do not edit.
2
- var __create=Object.create;var{getPrototypeOf:__getProtoOf,defineProperty:__defProp,getOwnPropertyNames:__getOwnPropNames}=Object;var __hasOwnProp=Object.prototype.hasOwnProperty;function __accessProp(key){return this[key]}var __toESMCache_node,__toESMCache_esm,__toESM=(mod,isNodeMode,target)=>{var canCache=mod!=null&&typeof mod==="object";if(canCache){var cache=isNodeMode?__toESMCache_node??=new WeakMap:__toESMCache_esm??=new WeakMap,cached=cache.get(mod);if(cached)return cached}target=mod!=null?__create(__getProtoOf(mod)):{};let to=isNodeMode||!mod||!mod.__esModule||!__hasOwnProp.call(mod,"default")?__defProp(target,"default",{value:mod,enumerable:!0}):target;if(mod&&typeof mod==="object"||typeof mod==="function"){for(let key of __getOwnPropNames(mod))if(!__hasOwnProp.call(to,key))__defProp(to,key,{get:__accessProp.bind(mod,key),enumerable:!0})}if(canCache)cache.set(mod,to);return to};var __commonJS=(cb,mod)=>()=>(mod||cb((mod={exports:{}}).exports,mod),mod.exports);var require_src=__commonJS(function(exports,module){var cursor={to(x,y){if(!y)return`\x1B[${x+1}G`;return`\x1B[${y+1};${x+1}H`},move(x,y){let ret="";if(x<0)ret+=`\x1B[${-x}D`;else if(x>0)ret+=`\x1B[${x}C`;if(y<0)ret+=`\x1B[${-y}A`;else if(y>0)ret+=`\x1B[${y}B`;return ret},up:(count=1)=>`\x1B[${count}A`,down:(count=1)=>`\x1B[${count}B`,forward:(count=1)=>`\x1B[${count}C`,backward:(count=1)=>`\x1B[${count}D`,nextLine:(count=1)=>"\x1B[E".repeat(count),prevLine:(count=1)=>"\x1B[F".repeat(count),left:"\x1B[G",hide:"\x1B[?25l",show:"\x1B[?25h",save:"\x1B7",restore:"\x1B8"},scroll={up:(count=1)=>"\x1B[S".repeat(count),down:(count=1)=>"\x1B[T".repeat(count)},erase={screen:"\x1B[2J",up:(count=1)=>"\x1B[1J".repeat(count),down:(count=1)=>"\x1B[J".repeat(count),line:"\x1B[2K",lineEnd:"\x1B[K",lineStart:"\x1B[1K",lines(count){let clear="";for(let i=0;i<count;i++)clear+=this.line+(i<count-1?cursor.up():"");if(count)clear+=cursor.left;return clear}};module.exports={cursor,scroll,erase,beep:"\x07"}});class CommanderError extends Error{constructor(exitCode,code,message){super(message);Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.code=code,this.exitCode=exitCode,this.nestedError=void 0}}class InvalidArgumentError extends CommanderError{constructor(message){super(1,"commander.invalidArgument",message);Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}}class Argument{constructor(name,description){switch(this.description=description||"",this.variadic=!1,this.parseArg=void 0,this.defaultValue=void 0,this.defaultValueDescription=void 0,this.argChoices=void 0,name[0]){case"<":this.required=!0,this._name=name.slice(1,-1);break;case"[":this.required=!1,this._name=name.slice(1,-1);break;default:this.required=!0,this._name=name;break}if(this._name.endsWith("..."))this.variadic=!0,this._name=this._name.slice(0,-3)}name(){return this._name}_collectValue(value,previous){if(previous===this.defaultValue||!Array.isArray(previous))return[value];return previous.push(value),previous}default(value,description){return this.defaultValue=value,this.defaultValueDescription=description,this}argParser(fn){return this.parseArg=fn,this}choices(values){return this.argChoices=values.slice(),this.parseArg=(arg,previous)=>{if(!this.argChoices.includes(arg))throw new InvalidArgumentError(`Allowed choices are ${this.argChoices.join(", ")}.`);if(this.variadic)return this._collectValue(arg,previous);return arg},this}argRequired(){return this.required=!0,this}argOptional(){return this.required=!1,this}}function humanReadableArgName(arg){let nameOutput=arg.name()+(arg.variadic===!0?"...":"");return arg.required?"<"+nameOutput+">":"["+nameOutput+"]"}import{EventEmitter}from"node:events";import childProcess from"node:child_process";import path from"node:path";import fs from"node:fs";import process2 from"node:process";import{stripVTControlCharacters as stripVTControlCharacters2}from"node:util";import{stripVTControlCharacters}from"node:util";class Help{constructor(){this.helpWidth=void 0,this.minWidthToWrap=40,this.sortSubcommands=!1,this.sortOptions=!1,this.showGlobalOptions=!1}prepareContext(contextOptions){this.helpWidth=this.helpWidth??contextOptions.helpWidth??80}visibleCommands(cmd){let visibleCommands=cmd.commands.filter((cmd)=>!cmd._hidden),helpCommand=cmd._getHelpCommand();if(helpCommand&&!helpCommand._hidden)visibleCommands.push(helpCommand);if(this.sortSubcommands)visibleCommands.sort((a,b)=>a.name().localeCompare(b.name()));return visibleCommands}compareOptions(a,b){let getSortKey=(option)=>option.short?option.short.replace(/^-/,""):option.long.replace(/^--/,"");return getSortKey(a).localeCompare(getSortKey(b))}visibleOptions(cmd){let visibleOptions=cmd.options.filter((option)=>!option.hidden),helpOption=cmd._getHelpOption();if(helpOption&&!helpOption.hidden){let removeShort=helpOption.short&&cmd._findOption(helpOption.short),removeLong=helpOption.long&&cmd._findOption(helpOption.long);if(!removeShort&&!removeLong)visibleOptions.push(helpOption);else if(helpOption.long&&!removeLong)visibleOptions.push(cmd.createOption(helpOption.long,helpOption.description));else if(helpOption.short&&!removeShort)visibleOptions.push(cmd.createOption(helpOption.short,helpOption.description))}if(this.sortOptions)visibleOptions.sort(this.compareOptions);return visibleOptions}visibleGlobalOptions(cmd){if(!this.showGlobalOptions)return[];let globalOptions=[];for(let ancestorCmd=cmd.parent;ancestorCmd;ancestorCmd=ancestorCmd.parent){let visibleOptions=ancestorCmd.options.filter((option)=>!option.hidden);globalOptions.push(...visibleOptions)}if(this.sortOptions)globalOptions.sort(this.compareOptions);return globalOptions}visibleArguments(cmd){if(cmd._argsDescription)cmd.registeredArguments.forEach((argument)=>{argument.description=argument.description||cmd._argsDescription[argument.name()]||""});if(cmd.registeredArguments.find((argument)=>argument.description))return cmd.registeredArguments;return[]}subcommandTerm(cmd){let args=cmd.registeredArguments.map((arg)=>humanReadableArgName(arg)).join(" ");return cmd._name+(cmd._aliases[0]?"|"+cmd._aliases[0]:"")+(cmd.options.length?" [options]":"")+(args?" "+args:"")}optionTerm(option){return option.flags}argumentTerm(argument){return argument.name()}longestSubcommandTermLength(cmd,helper){return helper.visibleCommands(cmd).reduce((max,command)=>Math.max(max,this.displayWidth(helper.styleSubcommandTerm(helper.subcommandTerm(command)))),0)}longestOptionTermLength(cmd,helper){return helper.visibleOptions(cmd).reduce((max,option)=>Math.max(max,this.displayWidth(helper.styleOptionTerm(helper.optionTerm(option)))),0)}longestGlobalOptionTermLength(cmd,helper){return helper.visibleGlobalOptions(cmd).reduce((max,option)=>Math.max(max,this.displayWidth(helper.styleOptionTerm(helper.optionTerm(option)))),0)}longestArgumentTermLength(cmd,helper){return helper.visibleArguments(cmd).reduce((max,argument)=>Math.max(max,this.displayWidth(helper.styleArgumentTerm(helper.argumentTerm(argument)))),0)}commandUsage(cmd){let cmdName=cmd._name;if(cmd._aliases[0])cmdName=cmdName+"|"+cmd._aliases[0];let ancestorCmdNames="";for(let ancestorCmd=cmd.parent;ancestorCmd;ancestorCmd=ancestorCmd.parent)ancestorCmdNames=ancestorCmd.name()+" "+ancestorCmdNames;return ancestorCmdNames+cmdName+" "+cmd.usage()}commandDescription(cmd){return cmd.description()}subcommandDescription(cmd){return cmd.summary()||cmd.description()}optionDescription(option){let extraInfo=[];if(option.argChoices)extraInfo.push(`choices: ${option.argChoices.map((choice)=>JSON.stringify(choice)).join(", ")}`);if(option.defaultValue!==void 0){if(option.required||option.optional||option.isBoolean()&&typeof option.defaultValue==="boolean")extraInfo.push(`default: ${option.defaultValueDescription||JSON.stringify(option.defaultValue)}`)}if(option.presetArg!==void 0&&option.optional)extraInfo.push(`preset: ${JSON.stringify(option.presetArg)}`);if(option.envVar!==void 0)extraInfo.push(`env: ${option.envVar}`);if(extraInfo.length>0){let extraDescription=`(${extraInfo.join(", ")})`;if(option.description)return`${option.description} ${extraDescription}`;return extraDescription}return option.description}argumentDescription(argument){let extraInfo=[];if(argument.argChoices)extraInfo.push(`choices: ${argument.argChoices.map((choice)=>JSON.stringify(choice)).join(", ")}`);if(argument.defaultValue!==void 0)extraInfo.push(`default: ${argument.defaultValueDescription||JSON.stringify(argument.defaultValue)}`);if(extraInfo.length>0){let extraDescription=`(${extraInfo.join(", ")})`;if(argument.description)return`${argument.description} ${extraDescription}`;return extraDescription}return argument.description}formatItemList(heading,items,helper){if(items.length===0)return[];return[helper.styleTitle(heading),...items,""]}groupItems(unsortedItems,visibleItems,getGroup){let result=new Map;return unsortedItems.forEach((item)=>{let group=getGroup(item);if(!result.has(group))result.set(group,[])}),visibleItems.forEach((item)=>{let group=getGroup(item);if(!result.has(group))result.set(group,[]);result.get(group).push(item)}),result}formatHelp(cmd,helper){let termWidth=helper.padWidth(cmd,helper),helpWidth=helper.helpWidth??80;function callFormatItem(term,description){return helper.formatItem(term,termWidth,description,helper)}let output=[`${helper.styleTitle("Usage:")} ${helper.styleUsage(helper.commandUsage(cmd))}`,""],commandDescription=helper.commandDescription(cmd);if(commandDescription.length>0)output=output.concat([helper.boxWrap(helper.styleCommandDescription(commandDescription),helpWidth),""]);let argumentList=helper.visibleArguments(cmd).map((argument)=>callFormatItem(helper.styleArgumentTerm(helper.argumentTerm(argument)),helper.styleArgumentDescription(helper.argumentDescription(argument))));if(output=output.concat(this.formatItemList("Arguments:",argumentList,helper)),this.groupItems(cmd.options,helper.visibleOptions(cmd),(option)=>option.helpGroupHeading??"Options:").forEach((options,group)=>{let optionList=options.map((option)=>callFormatItem(helper.styleOptionTerm(helper.optionTerm(option)),helper.styleOptionDescription(helper.optionDescription(option))));output=output.concat(this.formatItemList(group,optionList,helper))}),helper.showGlobalOptions){let globalOptionList=helper.visibleGlobalOptions(cmd).map((option)=>callFormatItem(helper.styleOptionTerm(helper.optionTerm(option)),helper.styleOptionDescription(helper.optionDescription(option))));output=output.concat(this.formatItemList("Global Options:",globalOptionList,helper))}return this.groupItems(cmd.commands,helper.visibleCommands(cmd),(sub)=>sub.helpGroup()||"Commands:").forEach((commands,group)=>{let commandList=commands.map((sub)=>callFormatItem(helper.styleSubcommandTerm(helper.subcommandTerm(sub)),helper.styleSubcommandDescription(helper.subcommandDescription(sub))));output=output.concat(this.formatItemList(group,commandList,helper))}),output.join(`
2
+ var __create=Object.create;var{getPrototypeOf:__getProtoOf,defineProperty:__defProp,getOwnPropertyNames:__getOwnPropNames}=Object;var __hasOwnProp=Object.prototype.hasOwnProperty;function __accessProp(key){return this[key]}var __toESMCache_node,__toESMCache_esm,__toESM=(mod,isNodeMode,target)=>{var canCache=mod!=null&&typeof mod==="object";if(canCache){var cache=isNodeMode?__toESMCache_node??=new WeakMap:__toESMCache_esm??=new WeakMap,cached=cache.get(mod);if(cached)return cached}target=mod!=null?__create(__getProtoOf(mod)):{};let to=isNodeMode||!mod||!mod.__esModule||!__hasOwnProp.call(mod,"default")?__defProp(target,"default",{value:mod,enumerable:!0}):target;if(mod&&typeof mod==="object"||typeof mod==="function"){for(let key of __getOwnPropNames(mod))if(!__hasOwnProp.call(to,key))__defProp(to,key,{get:__accessProp.bind(mod,key),enumerable:!0})}if(canCache)cache.set(mod,to);return to};var __commonJS=(cb,mod)=>()=>(mod||cb((mod={exports:{}}).exports,mod),mod.exports);var __esm=(fn,res,err)=>()=>{if(fn)try{res=fn(fn=0)}catch(e){err=[e]}if(err)throw err[0];return res};var CommanderError,InvalidArgumentError;var init_error=__esm(()=>{CommanderError=class CommanderError extends Error{constructor(exitCode,code,message){super(message);Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.code=code,this.exitCode=exitCode,this.nestedError=void 0}};InvalidArgumentError=class InvalidArgumentError extends CommanderError{constructor(message){super(1,"commander.invalidArgument",message);Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}}});class Argument{constructor(name,description){switch(this.description=description||"",this.variadic=!1,this.parseArg=void 0,this.defaultValue=void 0,this.defaultValueDescription=void 0,this.argChoices=void 0,name[0]){case"<":this.required=!0,this._name=name.slice(1,-1);break;case"[":this.required=!1,this._name=name.slice(1,-1);break;default:this.required=!0,this._name=name;break}if(this._name.endsWith("..."))this.variadic=!0,this._name=this._name.slice(0,-3)}name(){return this._name}_collectValue(value,previous){if(previous===this.defaultValue||!Array.isArray(previous))return[value];return previous.push(value),previous}default(value,description){return this.defaultValue=value,this.defaultValueDescription=description,this}argParser(fn){return this.parseArg=fn,this}choices(values){return this.argChoices=values.slice(),this.parseArg=(arg,previous)=>{if(!this.argChoices.includes(arg))throw new InvalidArgumentError(`Allowed choices are ${this.argChoices.join(", ")}.`);if(this.variadic)return this._collectValue(arg,previous);return arg},this}argRequired(){return this.required=!0,this}argOptional(){return this.required=!1,this}}function humanReadableArgName(arg){let nameOutput=arg.name()+(arg.variadic===!0?"...":"");return arg.required?"<"+nameOutput+">":"["+nameOutput+"]"}var init_argument=__esm(()=>{init_error()});import{stripVTControlCharacters}from"node:util";class Help{constructor(){this.helpWidth=void 0,this.minWidthToWrap=40,this.sortSubcommands=!1,this.sortOptions=!1,this.showGlobalOptions=!1}prepareContext(contextOptions){this.helpWidth=this.helpWidth??contextOptions.helpWidth??80}visibleCommands(cmd){let visibleCommands=cmd.commands.filter((cmd)=>!cmd._hidden),helpCommand=cmd._getHelpCommand();if(helpCommand&&!helpCommand._hidden)visibleCommands.push(helpCommand);if(this.sortSubcommands)visibleCommands.sort((a,b)=>a.name().localeCompare(b.name()));return visibleCommands}compareOptions(a,b){let getSortKey=(option)=>option.short?option.short.replace(/^-/,""):option.long.replace(/^--/,"");return getSortKey(a).localeCompare(getSortKey(b))}visibleOptions(cmd){let visibleOptions=cmd.options.filter((option)=>!option.hidden),helpOption=cmd._getHelpOption();if(helpOption&&!helpOption.hidden){let removeShort=helpOption.short&&cmd._findOption(helpOption.short),removeLong=helpOption.long&&cmd._findOption(helpOption.long);if(!removeShort&&!removeLong)visibleOptions.push(helpOption);else if(helpOption.long&&!removeLong)visibleOptions.push(cmd.createOption(helpOption.long,helpOption.description));else if(helpOption.short&&!removeShort)visibleOptions.push(cmd.createOption(helpOption.short,helpOption.description))}if(this.sortOptions)visibleOptions.sort(this.compareOptions);return visibleOptions}visibleGlobalOptions(cmd){if(!this.showGlobalOptions)return[];let globalOptions=[];for(let ancestorCmd=cmd.parent;ancestorCmd;ancestorCmd=ancestorCmd.parent){let visibleOptions=ancestorCmd.options.filter((option)=>!option.hidden);globalOptions.push(...visibleOptions)}if(this.sortOptions)globalOptions.sort(this.compareOptions);return globalOptions}visibleArguments(cmd){if(cmd._argsDescription)cmd.registeredArguments.forEach((argument)=>{argument.description=argument.description||cmd._argsDescription[argument.name()]||""});if(cmd.registeredArguments.find((argument)=>argument.description))return cmd.registeredArguments;return[]}subcommandTerm(cmd){let args=cmd.registeredArguments.map((arg)=>humanReadableArgName(arg)).join(" ");return cmd._name+(cmd._aliases[0]?"|"+cmd._aliases[0]:"")+(cmd.options.length?" [options]":"")+(args?" "+args:"")}optionTerm(option){return option.flags}argumentTerm(argument){return argument.name()}longestSubcommandTermLength(cmd,helper){return helper.visibleCommands(cmd).reduce((max,command)=>Math.max(max,this.displayWidth(helper.styleSubcommandTerm(helper.subcommandTerm(command)))),0)}longestOptionTermLength(cmd,helper){return helper.visibleOptions(cmd).reduce((max,option)=>Math.max(max,this.displayWidth(helper.styleOptionTerm(helper.optionTerm(option)))),0)}longestGlobalOptionTermLength(cmd,helper){return helper.visibleGlobalOptions(cmd).reduce((max,option)=>Math.max(max,this.displayWidth(helper.styleOptionTerm(helper.optionTerm(option)))),0)}longestArgumentTermLength(cmd,helper){return helper.visibleArguments(cmd).reduce((max,argument)=>Math.max(max,this.displayWidth(helper.styleArgumentTerm(helper.argumentTerm(argument)))),0)}commandUsage(cmd){let cmdName=cmd._name;if(cmd._aliases[0])cmdName=cmdName+"|"+cmd._aliases[0];let ancestorCmdNames="";for(let ancestorCmd=cmd.parent;ancestorCmd;ancestorCmd=ancestorCmd.parent)ancestorCmdNames=ancestorCmd.name()+" "+ancestorCmdNames;return ancestorCmdNames+cmdName+" "+cmd.usage()}commandDescription(cmd){return cmd.description()}subcommandDescription(cmd){return cmd.summary()||cmd.description()}optionDescription(option){let extraInfo=[];if(option.argChoices)extraInfo.push(`choices: ${option.argChoices.map((choice)=>JSON.stringify(choice)).join(", ")}`);if(option.defaultValue!==void 0){if(option.required||option.optional||option.isBoolean()&&typeof option.defaultValue==="boolean")extraInfo.push(`default: ${option.defaultValueDescription||JSON.stringify(option.defaultValue)}`)}if(option.presetArg!==void 0&&option.optional)extraInfo.push(`preset: ${JSON.stringify(option.presetArg)}`);if(option.envVar!==void 0)extraInfo.push(`env: ${option.envVar}`);if(extraInfo.length>0){let extraDescription=`(${extraInfo.join(", ")})`;if(option.description)return`${option.description} ${extraDescription}`;return extraDescription}return option.description}argumentDescription(argument){let extraInfo=[];if(argument.argChoices)extraInfo.push(`choices: ${argument.argChoices.map((choice)=>JSON.stringify(choice)).join(", ")}`);if(argument.defaultValue!==void 0)extraInfo.push(`default: ${argument.defaultValueDescription||JSON.stringify(argument.defaultValue)}`);if(extraInfo.length>0){let extraDescription=`(${extraInfo.join(", ")})`;if(argument.description)return`${argument.description} ${extraDescription}`;return extraDescription}return argument.description}formatItemList(heading,items,helper){if(items.length===0)return[];return[helper.styleTitle(heading),...items,""]}groupItems(unsortedItems,visibleItems,getGroup){let result=new Map;return unsortedItems.forEach((item)=>{let group=getGroup(item);if(!result.has(group))result.set(group,[])}),visibleItems.forEach((item)=>{let group=getGroup(item);if(!result.has(group))result.set(group,[]);result.get(group).push(item)}),result}formatHelp(cmd,helper){let termWidth=helper.padWidth(cmd,helper),helpWidth=helper.helpWidth??80;function callFormatItem(term,description){return helper.formatItem(term,termWidth,description,helper)}let output=[`${helper.styleTitle("Usage:")} ${helper.styleUsage(helper.commandUsage(cmd))}`,""],commandDescription=helper.commandDescription(cmd);if(commandDescription.length>0)output=output.concat([helper.boxWrap(helper.styleCommandDescription(commandDescription),helpWidth),""]);let argumentList=helper.visibleArguments(cmd).map((argument)=>callFormatItem(helper.styleArgumentTerm(helper.argumentTerm(argument)),helper.styleArgumentDescription(helper.argumentDescription(argument))));if(output=output.concat(this.formatItemList("Arguments:",argumentList,helper)),this.groupItems(cmd.options,helper.visibleOptions(cmd),(option)=>option.helpGroupHeading??"Options:").forEach((options,group)=>{let optionList=options.map((option)=>callFormatItem(helper.styleOptionTerm(helper.optionTerm(option)),helper.styleOptionDescription(helper.optionDescription(option))));output=output.concat(this.formatItemList(group,optionList,helper))}),helper.showGlobalOptions){let globalOptionList=helper.visibleGlobalOptions(cmd).map((option)=>callFormatItem(helper.styleOptionTerm(helper.optionTerm(option)),helper.styleOptionDescription(helper.optionDescription(option))));output=output.concat(this.formatItemList("Global Options:",globalOptionList,helper))}return this.groupItems(cmd.commands,helper.visibleCommands(cmd),(sub)=>sub.helpGroup()||"Commands:").forEach((commands,group)=>{let commandList=commands.map((sub)=>callFormatItem(helper.styleSubcommandTerm(helper.subcommandTerm(sub)),helper.styleSubcommandDescription(helper.subcommandDescription(sub))));output=output.concat(this.formatItemList(group,commandList,helper))}),output.join(`
3
3
  `)}displayWidth(str){return stripVTControlCharacters(str).length}styleTitle(str){return str}styleUsage(str){return str.split(" ").map((word)=>{if(word==="[options]")return this.styleOptionText(word);if(word==="[command]")return this.styleSubcommandText(word);if(word[0]==="["||word[0]==="<")return this.styleArgumentText(word);return this.styleCommandText(word)}).join(" ")}styleCommandDescription(str){return this.styleDescriptionText(str)}styleOptionDescription(str){return this.styleDescriptionText(str)}styleSubcommandDescription(str){return this.styleDescriptionText(str)}styleArgumentDescription(str){return this.styleDescriptionText(str)}styleDescriptionText(str){return str}styleOptionTerm(str){return this.styleOptionText(str)}styleSubcommandTerm(str){return str.split(" ").map((word)=>{if(word==="[options]")return this.styleOptionText(word);if(word[0]==="["||word[0]==="<")return this.styleArgumentText(word);return this.styleSubcommandText(word)}).join(" ")}styleArgumentTerm(str){return this.styleArgumentText(str)}styleOptionText(str){return str}styleArgumentText(str){return str}styleSubcommandText(str){return str}styleCommandText(str){return str}padWidth(cmd,helper){return Math.max(helper.longestOptionTermLength(cmd,helper),helper.longestGlobalOptionTermLength(cmd,helper),helper.longestSubcommandTermLength(cmd,helper),helper.longestArgumentTermLength(cmd,helper))}preformatted(str){return/\n[^\S\r\n]/.test(str)}formatItem(term,termWidth,description,helper){let itemIndentStr=" ".repeat(2);if(!description)return itemIndentStr+term;let paddedTerm=term.padEnd(termWidth+term.length-helper.displayWidth(term)),spacerWidth=2,remainingWidth=(this.helpWidth??80)-termWidth-spacerWidth-2,formattedDescription;if(remainingWidth<this.minWidthToWrap||helper.preformatted(description))formattedDescription=description;else formattedDescription=helper.boxWrap(description,remainingWidth).replace(/\n/g,`
4
4
  `+" ".repeat(termWidth+spacerWidth));return itemIndentStr+paddedTerm+" ".repeat(spacerWidth)+formattedDescription.replace(/\n/g,`
5
5
  ${itemIndentStr}`)}boxWrap(str,width){if(width<this.minWidthToWrap)return str;let rawLines=str.split(/\r\n|\n/),chunkPattern=/[\s]*[^\s]+/g,wrappedLines=[];return rawLines.forEach((line)=>{let chunks=line.match(chunkPattern);if(chunks===null){wrappedLines.push("");return}let sumChunks=[chunks.shift()],sumWidth=this.displayWidth(sumChunks[0]);chunks.forEach((chunk)=>{let visibleWidth=this.displayWidth(chunk);if(sumWidth+visibleWidth<=width){sumChunks.push(chunk),sumWidth+=visibleWidth;return}wrappedLines.push(sumChunks.join(""));let nextChunk=chunk.trimStart();sumChunks=[nextChunk],sumWidth=this.displayWidth(nextChunk)}),wrappedLines.push(sumChunks.join(""))}),wrappedLines.join(`
6
- `)}}class Option{constructor(flags,description){this.flags=flags,this.description=description||"",this.required=flags.includes("<"),this.optional=flags.includes("["),this.variadic=/\w\.\.\.[>\]]$/.test(flags),this.mandatory=!1;let optionFlags=splitOptionFlags(flags);if(this.short=optionFlags.shortFlag,this.long=optionFlags.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,this.helpGroupHeading=void 0}default(value,description){return this.defaultValue=value,this.defaultValueDescription=description,this}preset(arg){return this.presetArg=arg,this}conflicts(names){return this.conflictsWith=this.conflictsWith.concat(names),this}implies(impliedOptionValues){let newImplied=impliedOptionValues;if(typeof impliedOptionValues==="string")newImplied={[impliedOptionValues]:!0};return this.implied=Object.assign(this.implied||{},newImplied),this}env(name){return this.envVar=name,this}argParser(fn){return this.parseArg=fn,this}makeOptionMandatory(mandatory=!0){return this.mandatory=!!mandatory,this}hideHelp(hide=!0){return this.hidden=!!hide,this}_collectValue(value,previous){if(previous===this.defaultValue||!Array.isArray(previous))return[value];return previous.push(value),previous}choices(values){return this.argChoices=values.slice(),this.parseArg=(arg,previous)=>{if(!this.argChoices.includes(arg))throw new InvalidArgumentError(`Allowed choices are ${this.argChoices.join(", ")}.`);if(this.variadic)return this._collectValue(arg,previous);return arg},this}name(){if(this.long)return this.long.replace(/^--/,"");return this.short.replace(/^-/,"")}attributeName(){if(this.negate)return camelcase(this.name().replace(/^no-/,""));return camelcase(this.name())}helpGroup(heading){return this.helpGroupHeading=heading,this}is(arg){return this.short===arg||this.long===arg}isBoolean(){return!this.required&&!this.optional&&!this.negate}}class DualOptions{constructor(options){this.positiveOptions=new Map,this.negativeOptions=new Map,this.dualOptions=new Set,options.forEach((option)=>{if(option.negate)this.negativeOptions.set(option.attributeName(),option);else this.positiveOptions.set(option.attributeName(),option)}),this.negativeOptions.forEach((value,key)=>{if(this.positiveOptions.has(key))this.dualOptions.add(key)})}valueFromOption(value,option){let optionKey=option.attributeName();if(!this.dualOptions.has(optionKey))return!0;let preset=this.negativeOptions.get(optionKey).presetArg,negativeValue=preset!==void 0?preset:!1;return option.negate===(negativeValue===value)}}function camelcase(str){return str.split("-").reduce((str,word)=>str+word[0].toUpperCase()+word.slice(1))}function splitOptionFlags(flags){let shortFlag,longFlag,shortFlagExp=/^-[^-]$/,longFlagExp=/^--[^-]/,flagParts=flags.split(/[ |,]+/).concat("guard");if(shortFlagExp.test(flagParts[0]))shortFlag=flagParts.shift();if(longFlagExp.test(flagParts[0]))longFlag=flagParts.shift();if(!shortFlag&&shortFlagExp.test(flagParts[0]))shortFlag=flagParts.shift();if(!shortFlag&&longFlagExp.test(flagParts[0]))shortFlag=longFlag,longFlag=flagParts.shift();if(flagParts[0].startsWith("-")){let unsupportedFlag=flagParts[0],baseError=`option creation failed due to '${unsupportedFlag}' in option flags '${flags}'`;if(/^-[^-][^-]/.test(unsupportedFlag))throw Error(`${baseError}
6
+ `)}}var init_help=__esm(()=>{init_argument()});class Option{constructor(flags,description){this.flags=flags,this.description=description||"",this.required=flags.includes("<"),this.optional=flags.includes("["),this.variadic=/\w\.\.\.[>\]]$/.test(flags),this.mandatory=!1;let optionFlags=splitOptionFlags(flags);if(this.short=optionFlags.shortFlag,this.long=optionFlags.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,this.helpGroupHeading=void 0}default(value,description){return this.defaultValue=value,this.defaultValueDescription=description,this}preset(arg){return this.presetArg=arg,this}conflicts(names){return this.conflictsWith=this.conflictsWith.concat(names),this}implies(impliedOptionValues){let newImplied=impliedOptionValues;if(typeof impliedOptionValues==="string")newImplied={[impliedOptionValues]:!0};return this.implied=Object.assign(this.implied||{},newImplied),this}env(name){return this.envVar=name,this}argParser(fn){return this.parseArg=fn,this}makeOptionMandatory(mandatory=!0){return this.mandatory=!!mandatory,this}hideHelp(hide=!0){return this.hidden=!!hide,this}_collectValue(value,previous){if(previous===this.defaultValue||!Array.isArray(previous))return[value];return previous.push(value),previous}choices(values){return this.argChoices=values.slice(),this.parseArg=(arg,previous)=>{if(!this.argChoices.includes(arg))throw new InvalidArgumentError(`Allowed choices are ${this.argChoices.join(", ")}.`);if(this.variadic)return this._collectValue(arg,previous);return arg},this}name(){if(this.long)return this.long.replace(/^--/,"");return this.short.replace(/^-/,"")}attributeName(){if(this.negate)return camelcase(this.name().replace(/^no-/,""));return camelcase(this.name())}helpGroup(heading){return this.helpGroupHeading=heading,this}is(arg){return this.short===arg||this.long===arg}isBoolean(){return!this.required&&!this.optional&&!this.negate}}class DualOptions{constructor(options){this.positiveOptions=new Map,this.negativeOptions=new Map,this.dualOptions=new Set,options.forEach((option)=>{if(option.negate)this.negativeOptions.set(option.attributeName(),option);else this.positiveOptions.set(option.attributeName(),option)}),this.negativeOptions.forEach((value,key)=>{if(this.positiveOptions.has(key))this.dualOptions.add(key)})}valueFromOption(value,option){let optionKey=option.attributeName();if(!this.dualOptions.has(optionKey))return!0;let preset=this.negativeOptions.get(optionKey).presetArg,negativeValue=preset!==void 0?preset:!1;return option.negate===(negativeValue===value)}}function camelcase(str){return str.split("-").reduce((str,word)=>str+word[0].toUpperCase()+word.slice(1))}function splitOptionFlags(flags){let shortFlag,longFlag,shortFlagExp=/^-[^-]$/,longFlagExp=/^--[^-]/,flagParts=flags.split(/[ |,]+/).concat("guard");if(shortFlagExp.test(flagParts[0]))shortFlag=flagParts.shift();if(longFlagExp.test(flagParts[0]))longFlag=flagParts.shift();if(!shortFlag&&shortFlagExp.test(flagParts[0]))shortFlag=flagParts.shift();if(!shortFlag&&longFlagExp.test(flagParts[0]))shortFlag=longFlag,longFlag=flagParts.shift();if(flagParts[0].startsWith("-")){let unsupportedFlag=flagParts[0],baseError=`option creation failed due to '${unsupportedFlag}' in option flags '${flags}'`;if(/^-[^-][^-]/.test(unsupportedFlag))throw Error(`${baseError}
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')`);if(shortFlagExp.test(unsupportedFlag))throw Error(`${baseError}
10
10
  - too many short flags`);if(longFlagExp.test(unsupportedFlag))throw Error(`${baseError}
11
11
  - too many long flags`);throw Error(`${baseError}
12
- - unrecognised flag format`)}if(shortFlag===void 0&&longFlag===void 0)throw Error(`option creation failed due to no flags found in '${flags}'.`);return{shortFlag,longFlag}}function editDistance(a,b){if(Math.abs(a.length-b.length)>3)return Math.max(a.length,b.length);let d=[];for(let i=0;i<=a.length;i++)d[i]=[i];for(let j=0;j<=b.length;j++)d[0][j]=j;for(let j=1;j<=b.length;j++)for(let i=1;i<=a.length;i++){let cost;if(a[i-1]===b[j-1])cost=0;else cost=1;if(d[i][j]=Math.min(d[i-1][j]+1,d[i][j-1]+1,d[i-1][j-1]+cost),i>1&&j>1&&a[i-1]===b[j-2]&&a[i-2]===b[j-1])d[i][j]=Math.min(d[i][j],d[i-2][j-2]+1)}return d[a.length][b.length]}function suggestSimilar(word,candidates){if(!candidates||candidates.length===0)return"";candidates=Array.from(new Set(candidates));let searchingOptions=word.startsWith("--");if(searchingOptions)word=word.slice(2),candidates=candidates.map((candidate)=>candidate.slice(2));let similar=[],bestDistance=3,minSimilarity=0.4;if(candidates.forEach((candidate)=>{if(candidate.length<=1)return;let distance=editDistance(word,candidate),length=Math.max(word.length,candidate.length);if((length-distance)/length>minSimilarity){if(distance<bestDistance)bestDistance=distance,similar=[candidate];else if(distance===bestDistance)similar.push(candidate)}}),similar.sort((a,b)=>a.localeCompare(b)),searchingOptions)similar=similar.map((candidate)=>`--${candidate}`);if(similar.length>1)return`
12
+ - unrecognised flag format`)}if(shortFlag===void 0&&longFlag===void 0)throw Error(`option creation failed due to no flags found in '${flags}'.`);return{shortFlag,longFlag}}var init_option=__esm(()=>{init_error()});function editDistance(a,b){if(Math.abs(a.length-b.length)>3)return Math.max(a.length,b.length);let d=[];for(let i=0;i<=a.length;i++)d[i]=[i];for(let j=0;j<=b.length;j++)d[0][j]=j;for(let j=1;j<=b.length;j++)for(let i=1;i<=a.length;i++){let cost;if(a[i-1]===b[j-1])cost=0;else cost=1;if(d[i][j]=Math.min(d[i-1][j]+1,d[i][j-1]+1,d[i-1][j-1]+cost),i>1&&j>1&&a[i-1]===b[j-2]&&a[i-2]===b[j-1])d[i][j]=Math.min(d[i][j],d[i-2][j-2]+1)}return d[a.length][b.length]}function suggestSimilar(word,candidates){if(!candidates||candidates.length===0)return"";candidates=Array.from(new Set(candidates));let searchingOptions=word.startsWith("--");if(searchingOptions)word=word.slice(2),candidates=candidates.map((candidate)=>candidate.slice(2));let similar=[],bestDistance=3,minSimilarity=0.4;if(candidates.forEach((candidate)=>{if(candidate.length<=1)return;let distance=editDistance(word,candidate),length=Math.max(word.length,candidate.length);if((length-distance)/length>minSimilarity){if(distance<bestDistance)bestDistance=distance,similar=[candidate];else if(distance===bestDistance)similar.push(candidate)}}),similar.sort((a,b)=>a.localeCompare(b)),searchingOptions)similar=similar.map((candidate)=>`--${candidate}`);if(similar.length>1)return`
13
13
  (Did you mean one of ${similar.join(", ")}?)`;if(similar.length===1)return`
14
- (Did you mean ${similar[0]}?)`;return""}class Command extends EventEmitter{constructor(name){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=name||"",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:(str)=>process2.stdout.write(str),writeErr:(str)=>process2.stderr.write(str),outputError:(str,write)=>write(str),getOutHelpWidth:()=>process2.stdout.isTTY?process2.stdout.columns:void 0,getErrHelpWidth:()=>process2.stderr.isTTY?process2.stderr.columns:void 0,getOutHasColors:()=>useColor()??(process2.stdout.isTTY&&process2.stdout.hasColors?.()),getErrHasColors:()=>useColor()??(process2.stderr.isTTY&&process2.stderr.hasColors?.()),stripColor:(str)=>stripVTControlCharacters2(str)},this._hidden=!1,this._helpOption=void 0,this._addImplicitHelpCommand=void 0,this._helpCommand=void 0,this._helpConfiguration={},this._helpGroupHeading=void 0,this._defaultCommandGroup=void 0,this._defaultOptionGroup=void 0}copyInheritedSettings(sourceCommand){return this._outputConfiguration=sourceCommand._outputConfiguration,this._helpOption=sourceCommand._helpOption,this._helpCommand=sourceCommand._helpCommand,this._helpConfiguration=sourceCommand._helpConfiguration,this._exitCallback=sourceCommand._exitCallback,this._storeOptionsAsProperties=sourceCommand._storeOptionsAsProperties,this._combineFlagAndOptionalValue=sourceCommand._combineFlagAndOptionalValue,this._allowExcessArguments=sourceCommand._allowExcessArguments,this._enablePositionalOptions=sourceCommand._enablePositionalOptions,this._showHelpAfterError=sourceCommand._showHelpAfterError,this._showSuggestionAfterError=sourceCommand._showSuggestionAfterError,this}_getCommandAndAncestors(){let result=[];for(let command=this;command;command=command.parent)result.push(command);return result}command(nameAndArgs,actionOptsOrExecDesc,execOpts){let desc=actionOptsOrExecDesc,opts=execOpts;if(typeof desc==="object"&&desc!==null)opts=desc,desc=null;opts=opts||{};let[,name,args]=nameAndArgs.match(/([^ ]+) *(.*)/),cmd=this.createCommand(name);if(desc)cmd.description(desc),cmd._executableHandler=!0;if(opts.isDefault)this._defaultCommandName=cmd._name;if(cmd._hidden=!!(opts.noHelp||opts.hidden),cmd._executableFile=opts.executableFile||null,args)cmd.arguments(args);if(this._registerCommand(cmd),cmd.parent=this,cmd.copyInheritedSettings(this),desc)return this;return cmd}createCommand(name){return new Command(name)}createHelp(){return Object.assign(new Help,this.configureHelp())}configureHelp(configuration){if(configuration===void 0)return this._helpConfiguration;return this._helpConfiguration=configuration,this}configureOutput(configuration){if(configuration===void 0)return this._outputConfiguration;return this._outputConfiguration={...this._outputConfiguration,...configuration},this}showHelpAfterError(displayHelp=!0){if(typeof displayHelp!=="string")displayHelp=!!displayHelp;return this._showHelpAfterError=displayHelp,this}showSuggestionAfterError(displaySuggestion=!0){return this._showSuggestionAfterError=!!displaySuggestion,this}addCommand(cmd,opts){if(!cmd._name)throw Error(`Command passed to .addCommand() must have a name
14
+ (Did you mean ${similar[0]}?)`;return""}import{EventEmitter}from"node:events";import childProcess from"node:child_process";import path from"node:path";import fs from"node:fs";import process2 from"node:process";import{stripVTControlCharacters as stripVTControlCharacters2}from"node:util";function incrementNodeInspectorPort(args){return args.map((arg)=>{if(!arg.startsWith("--inspect"))return arg;let debugOption,debugHost="127.0.0.1",debugPort="9229",match;if((match=arg.match(/^(--inspect(-brk)?)$/))!==null)debugOption=match[1];else if((match=arg.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null)if(debugOption=match[1],/^\d+$/.test(match[3]))debugPort=match[3];else debugHost=match[3];else if((match=arg.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null)debugOption=match[1],debugHost=match[3],debugPort=match[4];if(debugOption&&debugPort!=="0")return`${debugOption}=${debugHost}:${parseInt(debugPort)+1}`;return arg})}function useColor(){if(process2.env.NO_COLOR||process2.env.FORCE_COLOR==="0"||process2.env.FORCE_COLOR==="false")return!1;if(process2.env.FORCE_COLOR||process2.env.CLICOLOR_FORCE!==void 0)return!0;return}var Command;var init_command=__esm(()=>{init_argument();init_error();init_help();init_option();Command=class Command extends EventEmitter{constructor(name){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=name||"",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:(str)=>process2.stdout.write(str),writeErr:(str)=>process2.stderr.write(str),outputError:(str,write)=>write(str),getOutHelpWidth:()=>process2.stdout.isTTY?process2.stdout.columns:void 0,getErrHelpWidth:()=>process2.stderr.isTTY?process2.stderr.columns:void 0,getOutHasColors:()=>useColor()??(process2.stdout.isTTY&&process2.stdout.hasColors?.()),getErrHasColors:()=>useColor()??(process2.stderr.isTTY&&process2.stderr.hasColors?.()),stripColor:(str)=>stripVTControlCharacters2(str)},this._hidden=!1,this._helpOption=void 0,this._addImplicitHelpCommand=void 0,this._helpCommand=void 0,this._helpConfiguration={},this._helpGroupHeading=void 0,this._defaultCommandGroup=void 0,this._defaultOptionGroup=void 0}copyInheritedSettings(sourceCommand){return this._outputConfiguration=sourceCommand._outputConfiguration,this._helpOption=sourceCommand._helpOption,this._helpCommand=sourceCommand._helpCommand,this._helpConfiguration=sourceCommand._helpConfiguration,this._exitCallback=sourceCommand._exitCallback,this._storeOptionsAsProperties=sourceCommand._storeOptionsAsProperties,this._combineFlagAndOptionalValue=sourceCommand._combineFlagAndOptionalValue,this._allowExcessArguments=sourceCommand._allowExcessArguments,this._enablePositionalOptions=sourceCommand._enablePositionalOptions,this._showHelpAfterError=sourceCommand._showHelpAfterError,this._showSuggestionAfterError=sourceCommand._showSuggestionAfterError,this}_getCommandAndAncestors(){let result=[];for(let command=this;command;command=command.parent)result.push(command);return result}command(nameAndArgs,actionOptsOrExecDesc,execOpts){let desc=actionOptsOrExecDesc,opts=execOpts;if(typeof desc==="object"&&desc!==null)opts=desc,desc=null;opts=opts||{};let[,name,args]=nameAndArgs.match(/([^ ]+) *(.*)/),cmd=this.createCommand(name);if(desc)cmd.description(desc),cmd._executableHandler=!0;if(opts.isDefault)this._defaultCommandName=cmd._name;if(cmd._hidden=!!(opts.noHelp||opts.hidden),cmd._executableFile=opts.executableFile||null,args)cmd.arguments(args);if(this._registerCommand(cmd),cmd.parent=this,cmd.copyInheritedSettings(this),desc)return this;return cmd}createCommand(name){return new Command(name)}createHelp(){return Object.assign(new Help,this.configureHelp())}configureHelp(configuration){if(configuration===void 0)return this._helpConfiguration;return this._helpConfiguration=configuration,this}configureOutput(configuration){if(configuration===void 0)return this._outputConfiguration;return this._outputConfiguration={...this._outputConfiguration,...configuration},this}showHelpAfterError(displayHelp=!0){if(typeof displayHelp!=="string")displayHelp=!!displayHelp;return this._showHelpAfterError=displayHelp,this}showSuggestionAfterError(displaySuggestion=!0){return this._showSuggestionAfterError=!!displaySuggestion,this}addCommand(cmd,opts){if(!cmd._name)throw Error(`Command passed to .addCommand() must have a name
15
15
  - specify the name in Command constructor or using .name()`);if(opts=opts||{},opts.isDefault)this._defaultCommandName=cmd._name;if(opts.noHelp||opts.hidden)cmd._hidden=!0;return this._registerCommand(cmd),cmd.parent=this,cmd._checkForBrokenPassThrough(),this}createArgument(name,description){return new Argument(name,description)}argument(name,description,parseArg,defaultValue){let argument=this.createArgument(name,description);if(typeof parseArg==="function")argument.default(defaultValue).argParser(parseArg);else argument.default(parseArg);return this.addArgument(argument),this}arguments(names){return names.trim().split(/ +/).forEach((detail)=>{this.argument(detail)}),this}addArgument(argument){let previousArgument=this.registeredArguments.slice(-1)[0];if(previousArgument?.variadic)throw Error(`only the last argument can be variadic '${previousArgument.name()}'`);if(argument.required&&argument.defaultValue!==void 0&&argument.parseArg===void 0)throw Error(`a default value for a required argument is never used: '${argument.name()}'`);return this.registeredArguments.push(argument),this}helpCommand(enableOrNameAndArgs,description){if(typeof enableOrNameAndArgs==="boolean"){if(this._addImplicitHelpCommand=enableOrNameAndArgs,enableOrNameAndArgs&&this._defaultCommandGroup)this._initCommandGroup(this._getHelpCommand());return this}let nameAndArgs=enableOrNameAndArgs??"help [command]",[,helpName,helpArgs]=nameAndArgs.match(/([^ ]+) *(.*)/),helpDescription=description??"display help for command",helpCommand=this.createCommand(helpName);if(helpCommand.helpOption(!1),helpArgs)helpCommand.arguments(helpArgs);if(helpDescription)helpCommand.description(helpDescription);if(this._addImplicitHelpCommand=!0,this._helpCommand=helpCommand,enableOrNameAndArgs||description)this._initCommandGroup(helpCommand);return this}addHelpCommand(helpCommand,deprecatedDescription){if(typeof helpCommand!=="object")return this.helpCommand(helpCommand,deprecatedDescription),this;return this._addImplicitHelpCommand=!0,this._helpCommand=helpCommand,this._initCommandGroup(helpCommand),this}_getHelpCommand(){if(this._addImplicitHelpCommand??(this.commands.length&&!this._actionHandler&&!this._findCommand("help"))){if(this._helpCommand===void 0)this.helpCommand(void 0,void 0);return this._helpCommand}return null}hook(event,listener){let allowedValues=["preSubcommand","preAction","postAction"];if(!allowedValues.includes(event))throw Error(`Unexpected value for event passed to hook : '${event}'.
16
16
  Expecting one of '${allowedValues.join("', '")}'`);if(this._lifeCycleHooks[event])this._lifeCycleHooks[event].push(listener);else this._lifeCycleHooks[event]=[listener];return this}exitOverride(fn){if(fn)this._exitCallback=fn;else this._exitCallback=(err)=>{if(err.code!=="commander.executeSubCommandAsync")throw err};return this}_exit(exitCode,code,message){if(this._exitCallback)this._exitCallback(new CommanderError(exitCode,code,message));process2.exit(exitCode)}action(fn){let listener=(args)=>{let expectedArgsCount=this.registeredArguments.length,actionArgs=args.slice(0,expectedArgsCount);if(this._storeOptionsAsProperties)actionArgs[expectedArgsCount]=this;else actionArgs[expectedArgsCount]=this.opts();return actionArgs.push(this),fn.apply(this,actionArgs)};return this._actionHandler=listener,this}createOption(flags,description){return new Option(flags,description)}_callParseArg(target,value,previous,invalidArgumentMessage){try{return target.parseArg(value,previous)}catch(err){if(err.code==="commander.invalidArgument"){let message=`${invalidArgumentMessage} ${err.message}`;this.error(message,{exitCode:err.exitCode,code:err.code})}throw err}}_registerOption(option){let matchingOption=option.short&&this._findOption(option.short)||option.long&&this._findOption(option.long);if(matchingOption){let matchingFlag=option.long&&this._findOption(option.long)?option.long:option.short;throw Error(`Cannot add option '${option.flags}'${this._name&&` to command '${this._name}'`} due to conflicting flag '${matchingFlag}'
17
17
  - already used by option '${matchingOption.flags}'`)}this._initOptionGroup(option),this.options.push(option)}_registerCommand(command){let knownBy=(cmd)=>[cmd.name()].concat(cmd.aliases()),alreadyUsed=knownBy(command).find((name)=>this._findCommand(name));if(alreadyUsed){let existingCmd=knownBy(this._findCommand(alreadyUsed)).join("|"),newCmd=knownBy(command).join("|");throw Error(`cannot add command '${newCmd}' as already have command '${existingCmd}'`)}this._initCommandGroup(command),this.commands.push(command)}addOption(option){this._registerOption(option);let oname=option.name(),name=option.attributeName();if(option.defaultValue!==void 0)this.setOptionValueWithSource(name,option.defaultValue,"default");let handleOptionValue=(val,invalidValueMessage,valueSource)=>{if(val==null&&option.presetArg!==void 0)val=option.presetArg;let oldValue=this.getOptionValue(name);if(val!==null&&option.parseArg)val=this._callParseArg(option,val,oldValue,invalidValueMessage);else if(val!==null&&option.variadic)val=option._collectValue(val,oldValue);if(val==null)if(option.negate)val=!1;else if(option.isBoolean()||option.optional)val=!0;else val="";this.setOptionValueWithSource(name,val,valueSource)};if(this.on("option:"+oname,(val)=>{let invalidValueMessage=`error: option '${option.flags}' argument '${val}' is invalid.`;handleOptionValue(val,invalidValueMessage,"cli")}),option.envVar)this.on("optionEnv:"+oname,(val)=>{let invalidValueMessage=`error: option '${option.flags}' value '${val}' from env '${option.envVar}' is invalid.`;handleOptionValue(val,invalidValueMessage,"env")});return this}_optionEx(config,flags,description,fn,defaultValue){if(typeof flags==="object"&&flags instanceof Option)throw Error("To add an Option object use addOption() instead of option() or requiredOption()");let option=this.createOption(flags,description);if(option.makeOptionMandatory(!!config.mandatory),typeof fn==="function")option.default(defaultValue).argParser(fn);else if(fn instanceof RegExp){let regex=fn;fn=(val,def)=>{let m=regex.exec(val);return m?m[0]:def},option.default(defaultValue).argParser(fn)}else option.default(fn);return this.addOption(option)}option(flags,description,parseArg,defaultValue){return this._optionEx({},flags,description,parseArg,defaultValue)}requiredOption(flags,description,parseArg,defaultValue){return this._optionEx({mandatory:!0},flags,description,parseArg,defaultValue)}combineFlagAndOptionalValue(combine=!0){return this._combineFlagAndOptionalValue=!!combine,this}allowUnknownOption(allowUnknown=!0){return this._allowUnknownOption=!!allowUnknown,this}allowExcessArguments(allowExcess=!0){return this._allowExcessArguments=!!allowExcess,this}enablePositionalOptions(positional=!0){return this._enablePositionalOptions=!!positional,this}passThroughOptions(passThrough=!0){return this._passThroughOptions=!!passThrough,this._checkForBrokenPassThrough(),this}_checkForBrokenPassThrough(){if(this.parent&&this._passThroughOptions&&!this.parent._enablePositionalOptions)throw Error(`passThroughOptions cannot be used for '${this._name}' without turning on enablePositionalOptions for parent command(s)`)}storeOptionsAsProperties(storeAsProperties=!0){if(this.options.length)throw Error("call .storeOptionsAsProperties() before adding options");if(Object.keys(this._optionValues).length)throw Error("call .storeOptionsAsProperties() before setting option values");return this._storeOptionsAsProperties=!!storeAsProperties,this}getOptionValue(key){if(this._storeOptionsAsProperties)return this[key];return this._optionValues[key]}setOptionValue(key,value){return this.setOptionValueWithSource(key,value,void 0)}setOptionValueWithSource(key,value,source){if(this._storeOptionsAsProperties)this[key]=value;else this._optionValues[key]=value;return this._optionValueSources[key]=source,this}getOptionValueSource(key){return this._optionValueSources[key]}getOptionValueSourceWithGlobals(key){let source;return this._getCommandAndAncestors().forEach((cmd)=>{if(cmd.getOptionValueSource(key)!==void 0)source=cmd.getOptionValueSource(key)}),source}_prepareUserArgs(argv,parseOptions){if(argv!==void 0&&!Array.isArray(argv))throw Error("first parameter to parse must be array or undefined");if(parseOptions=parseOptions||{},argv===void 0&&parseOptions.from===void 0){if(process2.versions?.electron)parseOptions.from="electron";let execArgv=process2.execArgv??[];if(execArgv.includes("-e")||execArgv.includes("--eval")||execArgv.includes("-p")||execArgv.includes("--print"))parseOptions.from="eval"}if(argv===void 0)argv=process2.argv;this.rawArgs=argv.slice();let userArgs;switch(parseOptions.from){case void 0:case"node":this._scriptPath=argv[1],userArgs=argv.slice(2);break;case"electron":if(process2.defaultApp)this._scriptPath=argv[1],userArgs=argv.slice(2);else userArgs=argv.slice(1);break;case"user":userArgs=argv.slice(0);break;case"eval":userArgs=argv.slice(1);break;default:throw Error(`unexpected parse option { from: '${parseOptions.from}' }`)}if(!this._name&&this._scriptPath)this.nameFromFilename(this._scriptPath);return this._name=this._name||"program",userArgs}parse(argv,parseOptions){this._prepareForParse();let userArgs=this._prepareUserArgs(argv,parseOptions);return this._parseCommand([],userArgs),this}async parseAsync(argv,parseOptions){this._prepareForParse();let userArgs=this._prepareUserArgs(argv,parseOptions);return await this._parseCommand([],userArgs),this}_prepareForParse(){if(this._savedState===null)this.options.filter((option)=>option.negate&&option.defaultValue===void 0&&this.getOptionValue(option.attributeName())===void 0).forEach((option)=>{let positiveLongFlag=option.long.replace(/^--no-/,"--");if(!this._findOption(positiveLongFlag))this.setOptionValueWithSource(option.attributeName(),!0,"default")}),this.saveStateBeforeParse();else this.restoreStateBeforeParse()}saveStateBeforeParse(){this._savedState={_name:this._name,_optionValues:{...this._optionValues},_optionValueSources:{...this._optionValueSources}}}restoreStateBeforeParse(){if(this._storeOptionsAsProperties)throw Error(`Can not call parse again when storeOptionsAsProperties is true.
@@ -24,7 +24,7 @@ Expecting one of '${allowedValues.join("', '")}'`);if(this._lifeCycleHooks[event
24
24
  `),this.outputHelp({error:!0});let config=errorOptions||{},exitCode=config.exitCode||1,code=config.code||"commander.error";this._exit(exitCode,code,message)}_parseOptionsEnv(){this.options.forEach((option)=>{if(option.envVar&&option.envVar in process2.env){let optionKey=option.attributeName();if(this.getOptionValue(optionKey)===void 0||["default","config","env"].includes(this.getOptionValueSource(optionKey)))if(option.required||option.optional)this.emit(`optionEnv:${option.name()}`,process2.env[option.envVar]);else this.emit(`optionEnv:${option.name()}`)}})}_parseOptionsImplied(){let dualHelper=new DualOptions(this.options),hasCustomOptionValue=(optionKey)=>this.getOptionValue(optionKey)!==void 0&&!["default","implied"].includes(this.getOptionValueSource(optionKey));this.options.filter((option)=>option.implied!==void 0&&hasCustomOptionValue(option.attributeName())&&dualHelper.valueFromOption(this.getOptionValue(option.attributeName()),option)).forEach((option)=>{Object.keys(option.implied).filter((impliedKey)=>!hasCustomOptionValue(impliedKey)).forEach((impliedKey)=>{this.setOptionValueWithSource(impliedKey,option.implied[impliedKey],"implied")})})}missingArgument(name){let message=`error: missing required argument '${name}'`;this.error(message,{code:"commander.missingArgument"})}optionMissingArgument(option){let message=`error: option '${option.flags}' argument missing`;this.error(message,{code:"commander.optionMissingArgument"})}missingMandatoryOptionValue(option){let message=`error: required option '${option.flags}' not specified`;this.error(message,{code:"commander.missingMandatoryOptionValue"})}_conflictingOption(option,conflictingOption){let findBestOptionFromValue=(option)=>{let optionKey=option.attributeName(),optionValue=this.getOptionValue(optionKey),negativeOption=this.options.find((target)=>target.negate&&optionKey===target.attributeName()),positiveOption=this.options.find((target)=>!target.negate&&optionKey===target.attributeName());if(negativeOption&&(negativeOption.presetArg===void 0&&optionValue===!1||negativeOption.presetArg!==void 0&&optionValue===negativeOption.presetArg))return negativeOption;return positiveOption||option},getErrorMessage=(option)=>{let bestOption=findBestOptionFromValue(option),optionKey=bestOption.attributeName();if(this.getOptionValueSource(optionKey)==="env")return`environment variable '${bestOption.envVar}'`;return`option '${bestOption.flags}'`},message=`error: ${getErrorMessage(option)} cannot be used with ${getErrorMessage(conflictingOption)}`;this.error(message,{code:"commander.conflictingOption"})}unknownOption(flag){if(this._allowUnknownOption)return;let suggestion="";if(flag.startsWith("--")&&this._showSuggestionAfterError){let candidateFlags=[],command=this;do{let moreFlags=command.createHelp().visibleOptions(command).filter((option)=>option.long).map((option)=>option.long);candidateFlags=candidateFlags.concat(moreFlags),command=command.parent}while(command&&!command._enablePositionalOptions);suggestion=suggestSimilar(flag,candidateFlags)}let message=`error: unknown option '${flag}'${suggestion}`;this.error(message,{code:"commander.unknownOption"})}_excessArguments(receivedArgs){if(this._allowExcessArguments)return;let expected=this.registeredArguments.length,s=expected===1?"":"s",received=receivedArgs.length,forSubcommand=this.parent?` for '${this.name()}'`:"",details=receivedArgs.join(", "),message=`error: too many arguments${forSubcommand}. Expected ${expected} argument${s} but got ${received}: ${details}.`;this.error(message,{code:"commander.excessArguments"})}unknownCommand(){let unknownName=this.args[0],suggestion="";if(this._showSuggestionAfterError){let candidateNames=[];this.createHelp().visibleCommands(this).forEach((command)=>{if(candidateNames.push(command.name()),command.alias())candidateNames.push(command.alias())}),suggestion=suggestSimilar(unknownName,candidateNames)}let message=`error: unknown command '${unknownName}'${suggestion}`;this.error(message,{code:"commander.unknownCommand"})}version(str,flags,description){if(str===void 0)return this._version;this._version=str,flags=flags||"-V, --version",description=description||"output the version number";let versionOption=this.createOption(flags,description);return this._versionOptionName=versionOption.attributeName(),this._registerOption(versionOption),this.on("option:"+versionOption.name(),()=>{this._outputConfiguration.writeOut(`${str}
25
25
  `),this._exit(0,"commander.version",str)}),this}description(str,argsDescription){if(str===void 0&&argsDescription===void 0)return this._description;if(this._description=str,argsDescription)this._argsDescription=argsDescription;return this}summary(str){if(str===void 0)return this._summary;return this._summary=str,this}alias(alias){if(alias===void 0)return this._aliases[0];let command=this;if(this.commands.length!==0&&this.commands[this.commands.length-1]._executableHandler)command=this.commands[this.commands.length-1];if(alias===command._name)throw Error("Command alias can't be the same as its name");let matchingCommand=this.parent?._findCommand(alias);if(matchingCommand){let existingCmd=[matchingCommand.name()].concat(matchingCommand.aliases()).join("|");throw Error(`cannot add alias '${alias}' to command '${this.name()}' as already have command '${existingCmd}'`)}return command._aliases.push(alias),this}aliases(aliases){if(aliases===void 0)return this._aliases;return aliases.forEach((alias)=>this.alias(alias)),this}usage(str){if(str===void 0){if(this._usage)return this._usage;let args=this.registeredArguments.map((arg)=>humanReadableArgName(arg));return[].concat(this.options.length||this._helpOption!==null?"[options]":[],this.commands.length?"[command]":[],this.registeredArguments.length?args:[]).join(" ")}return this._usage=str,this}name(str){if(str===void 0)return this._name;return this._name=str,this}helpGroup(heading){if(heading===void 0)return this._helpGroupHeading??"";return this._helpGroupHeading=heading,this}commandsGroup(heading){if(heading===void 0)return this._defaultCommandGroup??"";return this._defaultCommandGroup=heading,this}optionsGroup(heading){if(heading===void 0)return this._defaultOptionGroup??"";return this._defaultOptionGroup=heading,this}_initOptionGroup(option){if(this._defaultOptionGroup&&!option.helpGroupHeading)option.helpGroup(this._defaultOptionGroup)}_initCommandGroup(cmd){if(this._defaultCommandGroup&&!cmd.helpGroup())cmd.helpGroup(this._defaultCommandGroup)}nameFromFilename(filename){return this._name=path.basename(filename,path.extname(filename)),this}executableDir(path2){if(path2===void 0)return this._executableDir;return this._executableDir=path2,this}helpInformation(contextOptions){let helper=this.createHelp(),context=this._getOutputContext(contextOptions);helper.prepareContext({error:context.error,helpWidth:context.helpWidth,outputHasColors:context.hasColors});let text=helper.formatHelp(this,helper);if(context.hasColors)return text;return this._outputConfiguration.stripColor(text)}_getOutputContext(contextOptions){contextOptions=contextOptions||{};let error=!!contextOptions.error,baseWrite,hasColors,helpWidth;if(error)baseWrite=(str)=>this._outputConfiguration.writeErr(str),hasColors=this._outputConfiguration.getErrHasColors(),helpWidth=this._outputConfiguration.getErrHelpWidth();else baseWrite=(str)=>this._outputConfiguration.writeOut(str),hasColors=this._outputConfiguration.getOutHasColors(),helpWidth=this._outputConfiguration.getOutHelpWidth();return{error,write:(str)=>{if(!hasColors)str=this._outputConfiguration.stripColor(str);return baseWrite(str)},hasColors,helpWidth}}outputHelp(contextOptions){let deprecatedCallback;if(typeof contextOptions==="function")deprecatedCallback=contextOptions,contextOptions=void 0;let outputContext=this._getOutputContext(contextOptions),eventContext={error:outputContext.error,write:outputContext.write,command:this};this._getCommandAndAncestors().reverse().forEach((command)=>command.emit("beforeAllHelp",eventContext)),this.emit("beforeHelp",eventContext);let helpInformation=this.helpInformation({error:outputContext.error});if(deprecatedCallback){if(helpInformation=deprecatedCallback(helpInformation),typeof helpInformation!=="string"&&!Buffer.isBuffer(helpInformation))throw Error("outputHelp callback must return a string or a Buffer")}if(outputContext.write(helpInformation),this._getHelpOption()?.long)this.emit(this._getHelpOption().long);this.emit("afterHelp",eventContext),this._getCommandAndAncestors().forEach((command)=>command.emit("afterAllHelp",eventContext))}helpOption(flags,description){if(typeof flags==="boolean"){if(flags){if(this._helpOption===null)this._helpOption=void 0;if(this._defaultOptionGroup)this._initOptionGroup(this._getHelpOption())}else this._helpOption=null;return this}if(this._helpOption=this.createOption(flags??"-h, --help",description??"display help for command"),flags||description)this._initOptionGroup(this._helpOption);return this}_getHelpOption(){if(this._helpOption===void 0)this.helpOption(void 0,void 0);return this._helpOption}addHelpOption(option){return this._helpOption=option,this._initOptionGroup(option),this}help(contextOptions){this.outputHelp(contextOptions);let exitCode=Number(process2.exitCode??0);if(exitCode===0&&contextOptions&&typeof contextOptions!=="function"&&contextOptions.error)exitCode=1;this._exit(exitCode,"commander.help","(outputHelp)")}addHelpText(position,text){let allowedValues=["beforeAll","before","after","afterAll"];if(!allowedValues.includes(position))throw Error(`Unexpected value for position to addHelpText.
26
26
  Expecting one of '${allowedValues.join("', '")}'`);let helpEvent=`${position}Help`;return this.on(helpEvent,(context)=>{let helpStr;if(typeof text==="function")helpStr=text({error:context.error,command:context.command});else helpStr=text;if(helpStr)context.write(`${helpStr}
27
- `)}),this}_outputHelpIfRequested(args){let helpOption=this._getHelpOption();if(helpOption&&args.find((arg)=>helpOption.is(arg)))this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)")}}function incrementNodeInspectorPort(args){return args.map((arg)=>{if(!arg.startsWith("--inspect"))return arg;let debugOption,debugHost="127.0.0.1",debugPort="9229",match;if((match=arg.match(/^(--inspect(-brk)?)$/))!==null)debugOption=match[1];else if((match=arg.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null)if(debugOption=match[1],/^\d+$/.test(match[3]))debugPort=match[3];else debugHost=match[3];else if((match=arg.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null)debugOption=match[1],debugHost=match[3],debugPort=match[4];if(debugOption&&debugPort!=="0")return`${debugOption}=${debugHost}:${parseInt(debugPort)+1}`;return arg})}function useColor(){if(process2.env.NO_COLOR||process2.env.FORCE_COLOR==="0"||process2.env.FORCE_COLOR==="false")return!1;if(process2.env.FORCE_COLOR||process2.env.CLICOLOR_FORCE!==void 0)return!0;return}var program=new Command;import{stdout,stdin}from"node:process";import l__default from"node:readline";var getCodePointsLength=(()=>{let SURROGATE_PAIR_RE=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g;return(input)=>{let surrogatePairsNr=0;SURROGATE_PAIR_RE.lastIndex=0;while(SURROGATE_PAIR_RE.test(input))surrogatePairsNr+=1;return input.length-surrogatePairsNr}})(),isFullWidth=(x)=>x===12288||x>=65281&&x<=65376||x>=65504&&x<=65510,isWideNotCJKTNotEmoji=(x)=>x===8987||x===9001||x>=12272&&x<=12287||x>=12289&&x<=12350||x>=12441&&x<=12543||x>=12549&&x<=12591||x>=12593&&x<=12686||x>=12688&&x<=12771||x>=12783&&x<=12830||x>=12832&&x<=12871||x>=12880&&x<=19903||x>=65040&&x<=65049||x>=65072&&x<=65106||x>=65108&&x<=65126||x>=65128&&x<=65131||x>=127488&&x<=127490||x>=127504&&x<=127547||x>=127552&&x<=127560||x>=131072&&x<=196605||x>=196608&&x<=262141;var ANSI_RE=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]|\u001b\]8;[^;]*;.*?(?:\u0007|\u001b\u005c)/y,CONTROL_RE=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,CJKT_WIDE_RE=/(?:(?![\uFF61-\uFF9F\uFF00-\uFFEF])[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Tangut}]){1,1000}/yu,TAB_RE=/\t{1,1000}/y,EMOJI_RE=/[\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,LATIN_RE=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,MODIFIER_RE=/\p{M}+/gu,NO_TRUNCATION={limit:1/0,ellipsis:""},getStringTruncatedWidth=(input,truncationOptions={},widthOptions={})=>{let LIMIT=truncationOptions.limit??1/0,ELLIPSIS=truncationOptions.ellipsis??"",ELLIPSIS_WIDTH=truncationOptions?.ellipsisWidth??(ELLIPSIS?getStringTruncatedWidth(ELLIPSIS,NO_TRUNCATION,widthOptions).width:0),ANSI_WIDTH=0,CONTROL_WIDTH=widthOptions.controlWidth??0,TAB_WIDTH=widthOptions.tabWidth??8,EMOJI_WIDTH=widthOptions.emojiWidth??2,FULL_WIDTH_WIDTH=2,REGULAR_WIDTH=widthOptions.regularWidth??1,WIDE_WIDTH=widthOptions.wideWidth??2,PARSE_BLOCKS=[[LATIN_RE,REGULAR_WIDTH],[ANSI_RE,0],[CONTROL_RE,CONTROL_WIDTH],[TAB_RE,TAB_WIDTH],[EMOJI_RE,EMOJI_WIDTH],[CJKT_WIDE_RE,WIDE_WIDTH]],indexPrev=0,index=0,length=input.length,lengthExtra=0,truncationEnabled=!1,truncationIndex=length,truncationLimit=Math.max(0,LIMIT-ELLIPSIS_WIDTH),unmatchedStart=0,unmatchedEnd=0,width=0,widthExtra=0;outer:while(!0){if(unmatchedEnd>unmatchedStart||index>=length&&index>indexPrev){let unmatched=input.slice(unmatchedStart,unmatchedEnd)||input.slice(indexPrev,index);lengthExtra=0;for(let char of unmatched.replaceAll(MODIFIER_RE,"")){let codePoint=char.codePointAt(0)||0;if(isFullWidth(codePoint))widthExtra=2;else if(isWideNotCJKTNotEmoji(codePoint))widthExtra=WIDE_WIDTH;else widthExtra=REGULAR_WIDTH;if(width+widthExtra>truncationLimit)truncationIndex=Math.min(truncationIndex,Math.max(unmatchedStart,indexPrev)+lengthExtra);if(width+widthExtra>LIMIT){truncationEnabled=!0;break outer}lengthExtra+=char.length,width+=widthExtra}unmatchedStart=unmatchedEnd=0}if(index>=length)break outer;for(let i=0,l=PARSE_BLOCKS.length;i<l;i++){let[BLOCK_RE,BLOCK_WIDTH]=PARSE_BLOCKS[i];if(BLOCK_RE.lastIndex=index,BLOCK_RE.test(input)){if(lengthExtra=BLOCK_RE===CJKT_WIDE_RE?getCodePointsLength(input.slice(index,BLOCK_RE.lastIndex)):BLOCK_RE===EMOJI_RE?1:BLOCK_RE.lastIndex-index,widthExtra=lengthExtra*BLOCK_WIDTH,width+widthExtra>truncationLimit)truncationIndex=Math.min(truncationIndex,index+Math.floor((truncationLimit-width)/BLOCK_WIDTH));if(width+widthExtra>LIMIT){truncationEnabled=!0;break outer}width+=widthExtra,unmatchedStart=indexPrev,unmatchedEnd=index,index=indexPrev=BLOCK_RE.lastIndex;continue outer}}index+=1}return{width:truncationEnabled?truncationLimit:width,index:truncationEnabled?truncationIndex:length,truncated:truncationEnabled,ellipsed:truncationEnabled&&LIMIT>=ELLIPSIS_WIDTH}},dist_default=getStringTruncatedWidth;var NO_TRUNCATION2={limit:1/0,ellipsis:"",ellipsisWidth:0},fastStringWidth=(input,options={})=>dist_default(input,NO_TRUNCATION2,options).width,dist_default2=fastStringWidth;var ESC="\x1B",CSI="›",END_CODE=39,ANSI_ESCAPE_BELL="\x07",ANSI_CSI="[",ANSI_OSC="]",ANSI_SGR_TERMINATOR="m",ANSI_ESCAPE_LINK=`${ANSI_OSC}8;;`,GROUP_REGEX=new RegExp(`(?:\\${ANSI_CSI}(?<code>\\d+)m|\\${ANSI_ESCAPE_LINK}(?<uri>.*)${ANSI_ESCAPE_BELL})`,"y"),getClosingCode=(openingCode)=>{if(openingCode>=30&&openingCode<=37)return 39;if(openingCode>=90&&openingCode<=97)return 39;if(openingCode>=40&&openingCode<=47)return 49;if(openingCode>=100&&openingCode<=107)return 49;if(openingCode===1||openingCode===2)return 22;if(openingCode===3)return 23;if(openingCode===4)return 24;if(openingCode===7)return 27;if(openingCode===8)return 28;if(openingCode===9)return 29;if(openingCode===0)return 0;return},wrapAnsiCode=(code)=>`${ESC}${ANSI_CSI}${code}${ANSI_SGR_TERMINATOR}`,wrapAnsiHyperlink=(url)=>`${ESC}${ANSI_ESCAPE_LINK}${url}${ANSI_ESCAPE_BELL}`,wrapWord=(rows,word,columns)=>{let characters=word[Symbol.iterator](),isInsideEscape=!1,isInsideLinkEscape=!1,lastRow=rows.at(-1),visible=lastRow===void 0?0:dist_default2(lastRow),currentCharacter=characters.next(),nextCharacter=characters.next(),rawCharacterIndex=0;while(!currentCharacter.done){let character=currentCharacter.value,characterLength=dist_default2(character);if(visible+characterLength<=columns)rows[rows.length-1]+=character;else rows.push(character),visible=0;if(character===ESC||character===CSI)isInsideEscape=!0,isInsideLinkEscape=word.startsWith(ANSI_ESCAPE_LINK,rawCharacterIndex+1);if(isInsideEscape){if(isInsideLinkEscape){if(character===ANSI_ESCAPE_BELL)isInsideEscape=!1,isInsideLinkEscape=!1}else if(character===ANSI_SGR_TERMINATOR)isInsideEscape=!1}else if(visible+=characterLength,visible===columns&&!nextCharacter.done)rows.push(""),visible=0;currentCharacter=nextCharacter,nextCharacter=characters.next(),rawCharacterIndex+=character.length}if(lastRow=rows.at(-1),!visible&&lastRow!==void 0&&lastRow.length&&rows.length>1)rows[rows.length-2]+=rows.pop()},stringVisibleTrimSpacesRight=(string)=>{let words=string.split(" "),last=words.length;while(last){if(dist_default2(words[last-1]))break;last--}if(last===words.length)return string;return words.slice(0,last).join(" ")+words.slice(last).join("")},exec=(string,columns,options={})=>{if(options.trim!==!1&&string.trim()==="")return"";let returnValue="",escapeCode,escapeUrl,words=string.split(" "),rows=[""],rowLength=0;for(let index=0;index<words.length;index++){let word=words[index];if(options.trim!==!1){let row=rows.at(-1)??"",trimmed=row.trimStart();if(row.length!==trimmed.length)rows[rows.length-1]=trimmed,rowLength=dist_default2(trimmed)}if(index!==0){if(rowLength>=columns&&(options.wordWrap===!1||options.trim===!1))rows.push(""),rowLength=0;if(rowLength||options.trim===!1)rows[rows.length-1]+=" ",rowLength++}let wordLength=dist_default2(word);if(options.hard&&wordLength>columns){let remainingColumns=columns-rowLength,breaksStartingThisLine=1+Math.floor((wordLength-remainingColumns-1)/columns);if(Math.floor((wordLength-1)/columns)<breaksStartingThisLine)rows.push("");wrapWord(rows,word,columns),rowLength=dist_default2(rows.at(-1)??"");continue}if(rowLength+wordLength>columns&&rowLength&&wordLength){if(options.wordWrap===!1&&rowLength<columns){wrapWord(rows,word,columns),rowLength=dist_default2(rows.at(-1)??"");continue}rows.push(""),rowLength=0}if(rowLength+wordLength>columns&&options.wordWrap===!1){wrapWord(rows,word,columns),rowLength=dist_default2(rows.at(-1)??"");continue}rows[rows.length-1]+=word,rowLength+=wordLength}if(options.trim!==!1)rows=rows.map((row)=>stringVisibleTrimSpacesRight(row));let preString=rows.join(`
27
+ `)}),this}_outputHelpIfRequested(args){let helpOption=this._getHelpOption();if(helpOption&&args.find((arg)=>helpOption.is(arg)))this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)")}}});var program;var init_commander=__esm(()=>{init_argument();init_command();init_error();init_help();init_option();program=new Command});var require_src=__commonJS(function(exports,module){var cursor={to(x,y){if(!y)return`\x1B[${x+1}G`;return`\x1B[${y+1};${x+1}H`},move(x,y){let ret="";if(x<0)ret+=`\x1B[${-x}D`;else if(x>0)ret+=`\x1B[${x}C`;if(y<0)ret+=`\x1B[${-y}A`;else if(y>0)ret+=`\x1B[${y}B`;return ret},up:(count=1)=>`\x1B[${count}A`,down:(count=1)=>`\x1B[${count}B`,forward:(count=1)=>`\x1B[${count}C`,backward:(count=1)=>`\x1B[${count}D`,nextLine:(count=1)=>"\x1B[E".repeat(count),prevLine:(count=1)=>"\x1B[F".repeat(count),left:"\x1B[G",hide:"\x1B[?25l",show:"\x1B[?25h",save:"\x1B7",restore:"\x1B8"},scroll={up:(count=1)=>"\x1B[S".repeat(count),down:(count=1)=>"\x1B[T".repeat(count)},erase={screen:"\x1B[2J",up:(count=1)=>"\x1B[1J".repeat(count),down:(count=1)=>"\x1B[J".repeat(count),line:"\x1B[2K",lineEnd:"\x1B[K",lineStart:"\x1B[1K",lines(count){let clear="";for(let i=0;i<count;i++)clear+=this.line+(i<count-1?cursor.up():"");if(count)clear+=cursor.left;return clear}};module.exports={cursor,scroll,erase,beep:"\x07"}});init_commander();import{stdout,stdin}from"node:process";import l__default from"node:readline";var getCodePointsLength=(()=>{let SURROGATE_PAIR_RE=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g;return(input)=>{let surrogatePairsNr=0;SURROGATE_PAIR_RE.lastIndex=0;while(SURROGATE_PAIR_RE.test(input))surrogatePairsNr+=1;return input.length-surrogatePairsNr}})(),isFullWidth=(x)=>x===12288||x>=65281&&x<=65376||x>=65504&&x<=65510,isWideNotCJKTNotEmoji=(x)=>x===8987||x===9001||x>=12272&&x<=12287||x>=12289&&x<=12350||x>=12441&&x<=12543||x>=12549&&x<=12591||x>=12593&&x<=12686||x>=12688&&x<=12771||x>=12783&&x<=12830||x>=12832&&x<=12871||x>=12880&&x<=19903||x>=65040&&x<=65049||x>=65072&&x<=65106||x>=65108&&x<=65126||x>=65128&&x<=65131||x>=127488&&x<=127490||x>=127504&&x<=127547||x>=127552&&x<=127560||x>=131072&&x<=196605||x>=196608&&x<=262141;var ANSI_RE=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]|\u001b\]8;[^;]*;.*?(?:\u0007|\u001b\u005c)/y,CONTROL_RE=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,CJKT_WIDE_RE=/(?:(?![\uFF61-\uFF9F\uFF00-\uFFEF])[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Tangut}]){1,1000}/yu,TAB_RE=/\t{1,1000}/y,EMOJI_RE=/[\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,LATIN_RE=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,MODIFIER_RE=/\p{M}+/gu,NO_TRUNCATION={limit:1/0,ellipsis:""},getStringTruncatedWidth=(input,truncationOptions={},widthOptions={})=>{let LIMIT=truncationOptions.limit??1/0,ELLIPSIS=truncationOptions.ellipsis??"",ELLIPSIS_WIDTH=truncationOptions?.ellipsisWidth??(ELLIPSIS?getStringTruncatedWidth(ELLIPSIS,NO_TRUNCATION,widthOptions).width:0),ANSI_WIDTH=0,CONTROL_WIDTH=widthOptions.controlWidth??0,TAB_WIDTH=widthOptions.tabWidth??8,EMOJI_WIDTH=widthOptions.emojiWidth??2,FULL_WIDTH_WIDTH=2,REGULAR_WIDTH=widthOptions.regularWidth??1,WIDE_WIDTH=widthOptions.wideWidth??2,PARSE_BLOCKS=[[LATIN_RE,REGULAR_WIDTH],[ANSI_RE,0],[CONTROL_RE,CONTROL_WIDTH],[TAB_RE,TAB_WIDTH],[EMOJI_RE,EMOJI_WIDTH],[CJKT_WIDE_RE,WIDE_WIDTH]],indexPrev=0,index=0,length=input.length,lengthExtra=0,truncationEnabled=!1,truncationIndex=length,truncationLimit=Math.max(0,LIMIT-ELLIPSIS_WIDTH),unmatchedStart=0,unmatchedEnd=0,width=0,widthExtra=0;outer:while(!0){if(unmatchedEnd>unmatchedStart||index>=length&&index>indexPrev){let unmatched=input.slice(unmatchedStart,unmatchedEnd)||input.slice(indexPrev,index);lengthExtra=0;for(let char of unmatched.replaceAll(MODIFIER_RE,"")){let codePoint=char.codePointAt(0)||0;if(isFullWidth(codePoint))widthExtra=2;else if(isWideNotCJKTNotEmoji(codePoint))widthExtra=WIDE_WIDTH;else widthExtra=REGULAR_WIDTH;if(width+widthExtra>truncationLimit)truncationIndex=Math.min(truncationIndex,Math.max(unmatchedStart,indexPrev)+lengthExtra);if(width+widthExtra>LIMIT){truncationEnabled=!0;break outer}lengthExtra+=char.length,width+=widthExtra}unmatchedStart=unmatchedEnd=0}if(index>=length)break outer;for(let i=0,l=PARSE_BLOCKS.length;i<l;i++){let[BLOCK_RE,BLOCK_WIDTH]=PARSE_BLOCKS[i];if(BLOCK_RE.lastIndex=index,BLOCK_RE.test(input)){if(lengthExtra=BLOCK_RE===CJKT_WIDE_RE?getCodePointsLength(input.slice(index,BLOCK_RE.lastIndex)):BLOCK_RE===EMOJI_RE?1:BLOCK_RE.lastIndex-index,widthExtra=lengthExtra*BLOCK_WIDTH,width+widthExtra>truncationLimit)truncationIndex=Math.min(truncationIndex,index+Math.floor((truncationLimit-width)/BLOCK_WIDTH));if(width+widthExtra>LIMIT){truncationEnabled=!0;break outer}width+=widthExtra,unmatchedStart=indexPrev,unmatchedEnd=index,index=indexPrev=BLOCK_RE.lastIndex;continue outer}}index+=1}return{width:truncationEnabled?truncationLimit:width,index:truncationEnabled?truncationIndex:length,truncated:truncationEnabled,ellipsed:truncationEnabled&&LIMIT>=ELLIPSIS_WIDTH}},dist_default=getStringTruncatedWidth;var NO_TRUNCATION2={limit:1/0,ellipsis:"",ellipsisWidth:0},fastStringWidth=(input,options={})=>dist_default(input,NO_TRUNCATION2,options).width,dist_default2=fastStringWidth;var ESC="\x1B",CSI="›",END_CODE=39,ANSI_ESCAPE_BELL="\x07",ANSI_CSI="[",ANSI_OSC="]",ANSI_SGR_TERMINATOR="m",ANSI_ESCAPE_LINK=`${ANSI_OSC}8;;`,GROUP_REGEX=new RegExp(`(?:\\${ANSI_CSI}(?<code>\\d+)m|\\${ANSI_ESCAPE_LINK}(?<uri>.*)${ANSI_ESCAPE_BELL})`,"y"),getClosingCode=(openingCode)=>{if(openingCode>=30&&openingCode<=37)return 39;if(openingCode>=90&&openingCode<=97)return 39;if(openingCode>=40&&openingCode<=47)return 49;if(openingCode>=100&&openingCode<=107)return 49;if(openingCode===1||openingCode===2)return 22;if(openingCode===3)return 23;if(openingCode===4)return 24;if(openingCode===7)return 27;if(openingCode===8)return 28;if(openingCode===9)return 29;if(openingCode===0)return 0;return},wrapAnsiCode=(code)=>`${ESC}${ANSI_CSI}${code}${ANSI_SGR_TERMINATOR}`,wrapAnsiHyperlink=(url)=>`${ESC}${ANSI_ESCAPE_LINK}${url}${ANSI_ESCAPE_BELL}`,wrapWord=(rows,word,columns)=>{let characters=word[Symbol.iterator](),isInsideEscape=!1,isInsideLinkEscape=!1,lastRow=rows.at(-1),visible=lastRow===void 0?0:dist_default2(lastRow),currentCharacter=characters.next(),nextCharacter=characters.next(),rawCharacterIndex=0;while(!currentCharacter.done){let character=currentCharacter.value,characterLength=dist_default2(character);if(visible+characterLength<=columns)rows[rows.length-1]+=character;else rows.push(character),visible=0;if(character===ESC||character===CSI)isInsideEscape=!0,isInsideLinkEscape=word.startsWith(ANSI_ESCAPE_LINK,rawCharacterIndex+1);if(isInsideEscape){if(isInsideLinkEscape){if(character===ANSI_ESCAPE_BELL)isInsideEscape=!1,isInsideLinkEscape=!1}else if(character===ANSI_SGR_TERMINATOR)isInsideEscape=!1}else if(visible+=characterLength,visible===columns&&!nextCharacter.done)rows.push(""),visible=0;currentCharacter=nextCharacter,nextCharacter=characters.next(),rawCharacterIndex+=character.length}if(lastRow=rows.at(-1),!visible&&lastRow!==void 0&&lastRow.length&&rows.length>1)rows[rows.length-2]+=rows.pop()},stringVisibleTrimSpacesRight=(string)=>{let words=string.split(" "),last=words.length;while(last){if(dist_default2(words[last-1]))break;last--}if(last===words.length)return string;return words.slice(0,last).join(" ")+words.slice(last).join("")},exec=(string,columns,options={})=>{if(options.trim!==!1&&string.trim()==="")return"";let returnValue="",escapeCode,escapeUrl,words=string.split(" "),rows=[""],rowLength=0;for(let index=0;index<words.length;index++){let word=words[index];if(options.trim!==!1){let row=rows.at(-1)??"",trimmed=row.trimStart();if(row.length!==trimmed.length)rows[rows.length-1]=trimmed,rowLength=dist_default2(trimmed)}if(index!==0){if(rowLength>=columns&&(options.wordWrap===!1||options.trim===!1))rows.push(""),rowLength=0;if(rowLength||options.trim===!1)rows[rows.length-1]+=" ",rowLength++}let wordLength=dist_default2(word);if(options.hard&&wordLength>columns){let remainingColumns=columns-rowLength,breaksStartingThisLine=1+Math.floor((wordLength-remainingColumns-1)/columns);if(Math.floor((wordLength-1)/columns)<breaksStartingThisLine)rows.push("");wrapWord(rows,word,columns),rowLength=dist_default2(rows.at(-1)??"");continue}if(rowLength+wordLength>columns&&rowLength&&wordLength){if(options.wordWrap===!1&&rowLength<columns){wrapWord(rows,word,columns),rowLength=dist_default2(rows.at(-1)??"");continue}rows.push(""),rowLength=0}if(rowLength+wordLength>columns&&options.wordWrap===!1){wrapWord(rows,word,columns),rowLength=dist_default2(rows.at(-1)??"");continue}rows[rows.length-1]+=word,rowLength+=wordLength}if(options.trim!==!1)rows=rows.map((row)=>stringVisibleTrimSpacesRight(row));let preString=rows.join(`
28
28
  `),inSurrogate=!1;for(let i=0;i<preString.length;i++){let character=preString[i];if(returnValue+=character,!inSurrogate){if(inSurrogate=character>="\uD800"&&character<="\uDBFF",inSurrogate)continue}else inSurrogate=!1;if(character===ESC||character===CSI){GROUP_REGEX.lastIndex=i+1;let groups=GROUP_REGEX.exec(preString)?.groups;if(groups?.code!==void 0){let code=Number.parseFloat(groups.code);escapeCode=code===END_CODE?void 0:code}else if(groups?.uri!==void 0)escapeUrl=groups.uri.length===0?void 0:groups.uri}if(preString[i+1]===`
29
29
  `){if(escapeUrl)returnValue+=wrapAnsiHyperlink("");let closingCode=escapeCode?getClosingCode(escapeCode):void 0;if(escapeCode&&closingCode)returnValue+=wrapAnsiCode(closingCode)}else if(character===`
30
30
  `){if(escapeCode&&getClosingCode(escapeCode))returnValue+=wrapAnsiCode(escapeCode);if(escapeUrl)returnValue+=wrapAnsiHyperlink(escapeUrl)}}return returnValue},CRLF_OR_LF=/\r?\n/;function wrapAnsi(string,columns,options){return String(string).normalize().split(CRLF_OR_LF).map((line)=>exec(line,columns,options)).join(`
@@ -112,8 +112,14 @@ ${content.join(`
112
112
  }
113
113
  `)}return doc.write("payload.value = newResult;"),doc.write("return payload;"),doc.compile()},fastpass,isObject2=isObject,jit=!globalConfig.jitless,fastEnabled=jit&&allowsEval.value,catchall=def.catchall,value;inst._zod.parse=(payload,ctx)=>{value??(value=_normalized.value);let input=payload.value;if(!isObject2(input))return payload.issues.push({expected:"object",code:"invalid_type",input,inst}),payload;if(jit&&fastEnabled&&ctx?.async===!1&&ctx.jitless!==!0){if(!fastpass)fastpass=generateFastpass(def.shape);if(payload=fastpass(payload,ctx),!catchall)return payload;return handleCatchall([],input,payload,ctx,value,inst,ctx?.abortEarly===!0)}return superParse(payload,ctx)}});function handleUnionResults(results,final,inst,ctx){for(let result of results)if(result.issues.length===0)return final.value=result.value,final;let nonaborted=results.filter((r)=>!aborted(r));if(nonaborted.length===1)return final.value=nonaborted[0].value,nonaborted[0];return final.issues.push({code:"invalid_union",input:final.value,inst,errors:results.map((result)=>result.issues.map((iss)=>finalizeIssue(iss,ctx,config())))}),final}var $ZodUnion=$constructor("$ZodUnion",(inst,def)=>{$ZodType.init(inst,def),defineLazyInternal(inst,"optin",(zod)=>zod.def.options.some((o)=>o._zod.optin==="defaulted")?"defaulted":zod.def.options.some((o)=>o._zod.optin!==void 0)?"optional":void 0),defineLazyInternal(inst,"optout",(zod)=>zod.def.options.some((o)=>o._zod.optout==="optional")?"optional":void 0),defineLazyInternal(inst,"values",(zod)=>{if(zod.def.options.every((o)=>o._zod.values))return new Set(zod.def.options.flatMap((option)=>Array.from(option._zod.values)));return}),defineLazyInternal(inst,"pattern",(zod)=>{if(zod.def.options.every((o)=>o._zod.pattern)){let patterns=zod.def.options.map((o)=>o._zod.pattern);return new RegExp(`^(${patterns.map((p)=>cleanRegex(p.source)).join("|")})$`)}return});let first=def.options.length===1?def.options[0]._zod.run:null;inst._zod.parse=(payload,ctx)=>{if(first)return first(payload,ctx);let async=!1,results=[];for(let option of def.options){let result=option._zod.run({value:payload.value,issues:[]},ctx);if(result instanceof Promise)results.push(result),async=!0;else{if(result.issues.length===0)return result;results.push(result)}}if(!async)return handleUnionResults(results,payload,inst,ctx);return Promise.all(results).then((results)=>handleUnionResults(results,payload,inst,ctx))}});var $ZodIntersection=$constructor("$ZodIntersection",(inst,def)=>{$ZodType.init(inst,def),inst._zod.parse=(payload,ctx)=>{let input=payload.value,left=def.left._zod.run({value:input,issues:[]},ctx),right=def.right._zod.run({value:input,issues:[]},ctx);if(left instanceof Promise||right instanceof Promise)return Promise.all([left,right]).then(([left,right])=>handleIntersectionResults(payload,left,right));return handleIntersectionResults(payload,left,right)}});function mergeValues(a,b){if(a===b)return{valid:!0,data:a};if(a instanceof Date&&b instanceof Date&&+a===+b)return{valid:!0,data:a};if(isPlainObject(a)&&isPlainObject(b)){let bKeys=Object.keys(b),sharedKeys=Object.keys(a).filter((key)=>bKeys.indexOf(key)!==-1),newObj={...a,...b};if(Object.prototype.hasOwnProperty.call(newObj,"__proto__"))delete newObj.__proto__;for(let key of sharedKeys){if(key==="__proto__")continue;let sharedValue=mergeValues(a[key],b[key]);if(!sharedValue.valid)return{valid:!1,mergeErrorPath:[key,...sharedValue.mergeErrorPath]};newObj[key]=sharedValue.data}return{valid:!0,data:newObj}}if(Array.isArray(a)&&Array.isArray(b)){if(a.length!==b.length)return{valid:!1,mergeErrorPath:[]};let newArray=[];for(let index=0;index<a.length;index++){let itemA=a[index],itemB=b[index],sharedValue=mergeValues(itemA,itemB);if(!sharedValue.valid)return{valid:!1,mergeErrorPath:[index,...sharedValue.mergeErrorPath]};newArray.push(sharedValue.data)}return{valid:!0,data:newArray}}return{valid:!1,mergeErrorPath:[]}}function handleIntersectionResults(result,left,right){let unrecKeys=new Map,unrecIssue,keyIssues=new Map,collect=(iss,side)=>{let keys;if(iss.code==="unrecognized_keys"&&!iss.path?.length)unrecIssue??(unrecIssue=iss),keys=iss.keys;else if(iss.code==="invalid_key"&&iss.origin==="record"&&iss.path?.length===1){let k=String(iss.path[0]);if(!keyIssues.has(k))keyIssues.set(k,iss);keys=[k]}else return!1;for(let k of keys){if(!unrecKeys.has(k))unrecKeys.set(k,{});unrecKeys.get(k)[side]=!0}return!0};for(let iss of left.issues)if(!collect(iss,"l"))result.issues.push(iss);for(let iss of right.issues)if(!collect(iss,"r"))result.issues.push(iss);let bothKeys=[...unrecKeys].filter(([,f])=>f.l&&f.r).map(([k])=>k);if(bothKeys.length){let aggregated=unrecIssue?bothKeys.filter((k)=>unrecIssue.keys.includes(k)):[];if(aggregated.length)result.issues.push({...unrecIssue,keys:aggregated});for(let k of bothKeys)if(!aggregated.includes(k)&&keyIssues.has(k))result.issues.push(keyIssues.get(k))}let merged=mergeValues(left.value,right.value);if(!merged.valid){if(aborted(result))return result;throw Error(`Unmergable intersection. Error path: ${JSON.stringify(merged.mergeErrorPath)}`)}return result.value=merged.data,result}var $ZodEnum=$constructor("$ZodEnum",(inst,def)=>{$ZodType.init(inst,def);let values=getEnumValues(def.entries),valuesSet=new Set(values);inst._zod.values=valuesSet,defineLazyInternal(inst,"pattern",(zod)=>{let patternValues=getEnumValues(zod.def.entries).filter((k)=>propertyKeyTypes.has(typeof k));return new RegExp(patternValues.length?`^(${patternValues.map((o)=>escapeRegex(o.toString())).join("|")})$`:"^[^\\s\\S]$")}),inst._zod.parse=(payload,_ctx)=>{let input=payload.value;if(valuesSet.has(input))return payload;return payload.issues.push({code:"invalid_value",values,input,inst}),payload}}),$ZodLiteral=$constructor("$ZodLiteral",(inst,def)=>{$ZodType.init(inst,def);let values=new Set(def.values);inst._zod.values=values,defineLazyInternal(inst,"pattern",(zod)=>{let vals=zod.def.values;return new RegExp(vals.length?`^(${vals.map((o)=>typeof o==="string"?escapeRegex(o):o?escapeRegex(o.toString()):String(o)).join("|")})$`:"^[^\\s\\S]$")}),inst._zod.parse=(payload,_ctx)=>{let input=payload.value;if(values.has(input))return payload;return payload.issues.push({code:"invalid_value",values:def.values,input,inst}),payload}});var $ZodTransform=$constructor("$ZodTransform",(inst,def)=>{$ZodType.init(inst,def),inst._zod.optin="optional",globalConfig.memoizer?.guard(inst),inst._zod.parse=(payload,ctx)=>{if(ctx.direction==="backward")throw new $ZodEncodeError(inst.constructor.name);let _out=def.transform(payload.value,payload);if(ctx.async)return(_out instanceof Promise?_out:Promise.resolve(_out)).then((output)=>(payload.value=output,payload));if(_out instanceof Promise)throw new $ZodAsyncError;return payload.value=_out,payload}});function handleOptionalResult(payload,result){return payload.value=result.issues.length?void 0:result.value,payload}var $ZodOptional=$constructor("$ZodOptional",(inst,def)=>{$ZodType.init(inst,def),defineLazyInternal(inst,"optin",(zod)=>zod.def.innerType._zod.optin==="defaulted"?"defaulted":"optional"),inst._zod.optout="optional",defineLazyInternal(inst,"values",(zod)=>{let values=zod.def.innerType._zod.values;return values?new Set([...values,void 0]):void 0}),defineLazyInternal(inst,"pattern",(zod)=>{let pattern=zod.def.innerType._zod.pattern;return pattern?new RegExp(`^(${cleanRegex(pattern.source)})?$`):void 0}),inst._zod.parse=(payload,ctx)=>{if(payload.value===void 0){if(def.innerType._zod.optin!=="defaulted")return payload;let result=def.innerType._zod.run({value:payload.value,issues:[]},ctx);if(result instanceof Promise)return result.then((result)=>handleOptionalResult(payload,result));return handleOptionalResult(payload,result)}return def.innerType._zod.run(payload,ctx)}}),$ZodExactOptional=$constructor("$ZodExactOptional",(inst,def)=>{$ZodOptional.init(inst,def),defineLazyInternal(inst,"values",(zod)=>zod.def.innerType._zod.values),defineLazyInternal(inst,"pattern",(zod)=>zod.def.innerType._zod.pattern),inst._zod.parse=(payload,ctx)=>def.innerType._zod.run(payload,ctx)}),$ZodNullable=$constructor("$ZodNullable",(inst,def)=>{$ZodType.init(inst,def),defineLazyInternal(inst,"optin",(zod)=>zod.def.innerType._zod.optin),defineLazyInternal(inst,"optout",(zod)=>zod.def.innerType._zod.optout),defineLazyInternal(inst,"pattern",(zod)=>{let pattern=zod.def.innerType._zod.pattern;return pattern?new RegExp(`^(${cleanRegex(pattern.source)}|null)$`):void 0}),defineLazyInternal(inst,"values",(zod)=>zod.def.innerType._zod.values?new Set([...zod.def.innerType._zod.values,null]):void 0),inst._zod.parse=(payload,ctx)=>{if(payload.value===null)return payload;return def.innerType._zod.run(payload,ctx)}}),$ZodDefault=$constructor("$ZodDefault",(inst,def)=>{$ZodType.init(inst,def),inst._zod.optin="defaulted",defineLazyInternal(inst,"values",(zod)=>zod.def.innerType._zod.values),inst._zod.parse=(payload,ctx)=>{if(ctx.direction==="backward")return def.innerType._zod.run(payload,ctx);if(payload.value===void 0)return payload.value=def.defaultValue,payload;let result=def.innerType._zod.run(payload,ctx);if(result instanceof Promise)return result.then((result)=>handleDefaultResult(result,def));return handleDefaultResult(result,def)}});function handleDefaultResult(payload,def){if(payload.value===void 0)payload.value=def.defaultValue;return payload}var $ZodPrefault=$constructor("$ZodPrefault",(inst,def)=>{$ZodType.init(inst,def),inst._zod.optin="defaulted",defineLazyInternal(inst,"values",(zod)=>zod.def.innerType._zod.values),inst._zod.parse=(payload,ctx)=>{if(ctx.direction==="backward")return def.innerType._zod.run(payload,ctx);if(payload.value===void 0)payload.value=def.defaultValue;return def.innerType._zod.run(payload,ctx)}}),$ZodNonOptional=$constructor("$ZodNonOptional",(inst,def)=>{$ZodType.init(inst,def),defineLazyInternal(inst,"values",(zod)=>{let v=zod.def.innerType._zod.values;return v?new Set([...v].filter((x)=>x!==void 0)):void 0}),inst._zod.parse=(payload,ctx)=>{let result=def.innerType._zod.run(payload,ctx);if(result instanceof Promise)return result.then((result)=>handleNonOptionalResult(result,inst));return handleNonOptionalResult(result,inst)}});function handleNonOptionalResult(payload,inst){if(!payload.issues.length&&payload.value===void 0)payload.issues.push({code:"invalid_type",expected:"nonoptional",input:payload.value,inst});return payload}function handleCatchResult(payload,result,def,ctx){if(!result.issues.length){if(payload.value=result.value,result.memo)payload.memo=!0;return payload}return payload.value=def.catchValue({...result,value:payload.value,error:{issues:result.issues.map((iss)=>finalizeIssue(iss,ctx,config()))},input:payload.value}),payload}var $ZodCatch=$constructor("$ZodCatch",(inst,def)=>{$ZodType.init(inst,def),defineLazyInternal(inst,"optin",(zod)=>zod.def.innerType._zod.optin==="defaulted"?"defaulted":"optional"),defineLazyInternal(inst,"optout",(zod)=>zod.def.innerType._zod.optout),defineLazyInternal(inst,"values",(zod)=>zod.def.innerType._zod.values),inst._zod.parse=(payload,ctx)=>{if(ctx.direction==="backward")return def.innerType._zod.run(payload,ctx);let result=def.innerType._zod.run({value:payload.value,issues:[]},ctx);if(result instanceof Promise)return result.then((result)=>handleCatchResult(payload,result,def,ctx));return handleCatchResult(payload,result,def,ctx)}});var $ZodPipe=$constructor("$ZodPipe",(inst,def)=>{$ZodType.init(inst,def),defineLazyInternal(inst,"values",(zod)=>zod.def.in._zod.values),defineLazyInternal(inst,"optin",(zod)=>zod.def.in._zod.optin),defineLazyInternal(inst,"optout",(zod)=>zod.def.out._zod.optout),defineLazyInternal(inst,"propValues",(zod)=>zod.def.in._zod.propValues),inst._zod.parse=(payload,ctx)=>{if(ctx.direction==="backward"){let right=def.out._zod.run(payload,ctx);if(right instanceof Promise)return right.then((right)=>handlePipeResult(right,def.in,ctx));return handlePipeResult(right,def.in,ctx)}let left=def.in._zod.run(payload,ctx);if(left instanceof Promise)return left.then((left)=>handlePipeResult(left,def.out,ctx));return handlePipeResult(left,def.out,ctx)}});function handlePipeResult(left,next,ctx){if(left.issues.some((iss)=>iss.code!=="unrecognized_keys"))return left.aborted=!0,left;return next._zod.run({value:left.value,issues:left.issues},ctx)}var $ZodReadonly=$constructor("$ZodReadonly",(inst,def)=>{$ZodType.init(inst,def),defineLazyInternal(inst,"propValues",(zod)=>zod.def.innerType._zod.propValues),defineLazyInternal(inst,"values",(zod)=>zod.def.innerType._zod.values),defineLazyInternal(inst,"optin",(zod)=>zod.def.innerType?._zod?.optin),defineLazyInternal(inst,"optout",(zod)=>zod.def.innerType?._zod?.optout),inst._zod.parse=(payload,ctx)=>{if(ctx.direction==="backward")return def.innerType._zod.run(payload,ctx);let result=def.innerType._zod.run(payload,ctx);if(result instanceof Promise)return result.then(handleReadonlyResult);return handleReadonlyResult(result)}});function handleReadonlyResult(payload){if(!payload.memo)payload.value=Object.freeze(payload.value);return payload}var $ZodCustom=$constructor("$ZodCustom",(inst,def)=>{$ZodCheck.init(inst,def),$ZodType.init(inst,def),inst._zod.parse=(payload,_)=>payload,inst._zod.check=(payload)=>{let input=payload.value,r=def.fn(input);if(r instanceof Promise)return r.then((r)=>handleRefineResult(r,payload,input,inst));handleRefineResult(r,payload,input,inst);return}});function handleRefineResult(result,payload,input,inst){if(!result){let _iss={code:"custom",input,inst,path:[...inst._zod.def.path??[]],continue:!inst._zod.def.abort};if(inst._zod.def.params)_iss.params=inst._zod.def.params;payload.issues.push(issue(_iss))}}class $ZodCyclicError extends Error{constructor(){super("Cannot parse a reference cycle that closes through a transform");this.name="ZodCyclicError"}}var STATE="~memo",NO_ISSUES=[];function isRef(value){return value!==null&&typeof value==="object"}function cloneIssues(issues){return issues.map((iss)=>iss.path?{...iss,path:iss.path.slice()}:{...iss})}var recursive=new WeakMap,NONE=0,ASSUMED=1,PROVEN=2;function isRecursive(inst,stack,resolve){let cached=recursive.get(inst);if(cached!==void 0)return cached?PROVEN:NONE;if(stack.has(inst))return PROVEN;stack.add(inst);let result=NONE,check=(child)=>{if(result!==PROVEN&&child?._zod){let answer=isRecursive(child,stack,resolve);if(answer>result)result=answer}},shape=(sh,spread)=>{let answer=NONE;for(let key of Reflect.ownKeys(sh)){let desc=Object.getOwnPropertyDescriptor(sh,key);if(spread&&!desc.enumerable)continue;let child=desc.get?ASSUMED:desc.value?._zod?isRecursive(desc.value,stack,resolve):NONE;if(child>answer)answer=child}return answer},merge=(answer)=>{if(answer>result)result=answer},def=inst._zod.def,kind=def.type;switch(kind){case"object":{let raw=rawShape(def);merge(raw?shape(raw,!0):ASSUMED),check(def.catchall);break}case"array":check(def.element);break;case"tuple":for(let el of def.items)check(el);check(def.rest);break;case"record":case"map":check(def.keyType),check(def.valueType);break;case"set":check(def.valueType);break;case"union":for(let el of def.options)check(el);break;case"intersection":check(def.left),check(def.right);break;case"optional":case"nullable":case"default":case"prefault":case"catch":case"readonly":case"nonoptional":case"promise":case"success":check(def.innerType);break;case"pipe":check(def.in),check(def.out);break;case"function":check(def.input),check(def.output);break;case"lazy":{let inner=def._cachedInner??(resolve?inst._zod.innerType:void 0);merge(inner?isRecursive(inner,stack,!1):ASSUMED);break}case"template_literal":case"string":case"number":case"int":case"boolean":case"bigint":case"symbol":case"undefined":case"null":case"void":case"never":case"any":case"unknown":case"date":case"nan":case"enum":case"literal":case"file":case"transform":case"custom":break;default:for(let key in def){let desc=Object.getOwnPropertyDescriptor(def,key);if(!desc||desc.get)continue;let value=desc.value;if(!value||typeof value!=="object")continue;if(value._zod)check(value);else if(Array.isArray(value))for(let el of value)check(el)}}return stack.delete(inst),settle(inst,result)}function settle(inst,answer){if(answer!==ASSUMED)recursive.set(inst,answer===PROVEN);return answer}function bucketFor(state,inst){let bucket=state.buckets.get(inst);if(!bucket)bucket=new WeakMap,state.buckets.set(inst,bucket);return bucket}var handoff,open=[],memo={alloc(_inst,payload,empty){let bucket=handoff;if(!bucket)return empty;handoff=void 0;let entry={value:empty,issues:null};return bucket.set(payload.value,entry),open.push(entry),empty},guard(inst){var _a;(_a=inst._zod).deferred??(_a.deferred=[]),inst._zod.deferred.push(()=>{let base=inst._zod.parse,wrapped=(payload,ctx)=>{if(ctx.direction!=="backward"&&isBackEdge(ctx,payload.value))throw new $ZodCyclicError;return base(payload,ctx)};if(inst._zod.parse=wrapped,inst._zod.run===base)inst._zod.run=wrapped})},attach(inst){var _a;let isRecursiveInst,rechecked=!1,lastCtx,lastBucket;(_a=inst._zod).deferred??(_a.deferred=[]),inst._zod.deferred.push(()=>{let base=inst._zod.parse,wrapped=(payload,ctx)=>{if(isRecursiveInst===void 0){let walked=isRecursive(inst,new Set,!1);if(walked===NONE){if(inst._zod.parse=base,inst._zod.run===wrapped)inst._zod.run=base;return base(payload,ctx)}if(walked===PROVEN||rechecked)isRecursiveInst=!0;else rechecked=!0}let input=payload.value;if(!isRef(input))return base(payload,ctx);let state=ctx[STATE];if(!state)state={buckets:new WeakMap,backEdges:void 0},ctx[STATE]=state;let bucket;if(lastCtx===ctx)bucket=lastBucket;else bucket=bucketFor(state,inst),lastCtx=ctx,lastBucket=bucket;let hit=bucket.get(input);if(hit){if(payload.value=hit.value,hit.issues){if(hit.issues.length)payload.issues.push(...cloneIssues(hit.issues))}else payload.memo=!0,state.backEdges??(state.backEdges=new WeakSet),state.backEdges.add(hit.value);return payload}handoff=bucket;let depth=open.length,result=base(payload,ctx);handoff=void 0;let entry=open.length>depth?open.pop():void 0;if(result instanceof Promise)return result.then((r)=>{if(entry)entry.issues=r.issues.length?cloneIssues(r.issues):NO_ISSUES;return r});if(entry)entry.issues=result.issues.length?cloneIssues(result.issues):NO_ISSUES;return result};if(inst._zod.parse=wrapped,inst._zod.run===base)inst._zod.run=wrapped})}};function memoizer(){return memo}function isBackEdge(ctx,value){let backEdges=ctx[STATE]?.backEdges;return backEdges!==void 0&&isRef(value)&&backEdges.has(value)}var error=()=>{let Sizable={string:{unit:"characters",verb:"to have"},file:{unit:"bytes",verb:"to have"},array:{unit:"items",verb:"to have"},set:{unit:"items",verb:"to have"},map:{unit:"entries",verb:"to have"}};function getSizing(origin){return Sizable[origin]??null}let FormatDictionary={regex:"input",email:"email address",url:"URL",emoji:"emoji",uuid:"UUID",uuidv4:"UUIDv4",uuidv6:"UUIDv6",nanoid:"nanoid",guid:"GUID",cuid:"cuid",cuid2:"cuid2",ulid:"ULID",xid:"XID",ksuid:"KSUID",datetime:"ISO datetime",date:"ISO date",time:"ISO time",duration:"ISO duration",ipv4:"IPv4 address",ipv6:"IPv6 address",mac:"MAC address",cidrv4:"IPv4 range",cidrv6:"IPv6 range",base64:"base64-encoded string",base64url:"base64url-encoded string",json_string:"JSON string",e164:"E.164 number",currency_code:"currency code",credit_card:"credit card number",iban:"IBAN",jwt:"JWT",template_literal:"input"},TypeDictionary={nan:"NaN"};function getTypeName(type,input){if(type==="number"&&typeof input==="number"&&!Number.isFinite(input))return String(input);return TypeDictionary[type]??type}return(issue)=>{switch(issue.code){case"invalid_type":{let expected=getTypeName(issue.expected),receivedType=parsedType(issue.input),received=getTypeName(receivedType,issue.input);return`Invalid input: expected ${expected}, received ${received}`}case"invalid_value":if(issue.values.length===1)return`Invalid input: expected ${stringifyPrimitive(issue.values[0])}`;return`Invalid option: expected one of ${joinValues(issue.values,"|")}`;case"too_big":{let adj=issue.exact?"exactly ":issue.inclusive?"<=":"<",sizing=getSizing(issue.origin);if(sizing)return`Too big: expected ${issue.origin??"value"} to have ${adj}${issue.maximum.toString()} ${sizing.unit??"elements"}`;return`Too big: expected ${issue.origin??"value"} to be ${adj}${issue.maximum.toString()}`}case"too_small":{let adj=issue.exact?"exactly ":issue.inclusive?">=":">",sizing=getSizing(issue.origin);if(sizing)return`Too small: expected ${issue.origin} to have ${adj}${issue.minimum.toString()} ${sizing.unit}`;return`Too small: expected ${issue.origin} to be ${adj}${issue.minimum.toString()}`}case"invalid_format":{let _issue=issue;if(_issue.format==="starts_with")return`Invalid string: must start with "${_issue.prefix}"`;if(_issue.format==="ends_with")return`Invalid string: must end with "${_issue.suffix}"`;if(_issue.format==="includes")return`Invalid string: must include "${_issue.includes}"`;if(_issue.format==="regex")return`Invalid string: must match pattern ${_issue.pattern}`;return`Invalid ${FormatDictionary[_issue.format]??issue.format}`}case"not_multiple_of":return`Invalid number: must be a multiple of ${issue.divisor}`;case"unrecognized_keys":return`Unrecognized key${issue.keys.length>1?"s":""}: ${joinValues(issue.keys,", ")}`;case"invalid_key":return`Invalid key in ${issue.origin}`;case"invalid_union":if(issue.options&&Array.isArray(issue.options)&&issue.options.length>0)return`Invalid discriminator value. Expected ${issue.options.map((o)=>`'${o}'`).join(" | ")}`;if(issue.inclusive===!1)return"Invalid input: more than one option matched";return"Invalid input";case"invalid_element":return`Invalid value in ${issue.origin}`;default:return"Invalid input"}}};function en_default(){return{localeError:error()}}var _a2;class $ZodRegistry{constructor(){this._map=new WeakMap,this._idmap=new Map}add(schema,..._meta){let meta=_meta[0];if(this._map.set(schema,meta),meta&&typeof meta==="object"&&"id"in meta)this._idmap.set(meta.id,schema);return this}clear(){return this._map=new WeakMap,this._idmap=new Map,this}remove(schema){let meta=this._map.get(schema);if(meta&&typeof meta==="object"&&"id"in meta)this._idmap.delete(meta.id);return this._map.delete(schema),this}get(schema){let p=schema._zod.parent;if(p){let pm={...this.get(p)??{}};delete pm.id;let f={...pm,...this._map.get(schema)};return Object.keys(f).length?f:void 0}return this._map.get(schema)}has(schema){return this._map.has(schema)}}function registry(){return new $ZodRegistry}(_a2=globalThis).__zod_globalRegistry??(_a2.__zod_globalRegistry=registry());var globalRegistry=globalThis.__zod_globalRegistry;function snapshotChecks(def){if(def.checks)def.checks=[...def.checks];return def}function _string(Class,params){return new Class(snapshotChecks({type:"string",...normalizeParams(params)}))}function _email(Class,params){return new Class({type:"string",format:"email",check:"string_format",abort:!1,...normalizeParams(params)})}function _guid(Class,params){return new Class({type:"string",format:"guid",check:"string_format",abort:!1,...normalizeParams(params)})}function _uuid(Class,params){return new Class({type:"string",format:"uuid",check:"string_format",abort:!1,...normalizeParams(params)})}function _uuidv4(Class,params){return new Class({type:"string",format:"uuid",check:"string_format",abort:!1,version:"v4",...normalizeParams(params)})}function _uuidv6(Class,params){return new Class({type:"string",format:"uuid",check:"string_format",abort:!1,version:"v6",...normalizeParams(params)})}function _uuidv7(Class,params){return new Class({type:"string",format:"uuid",check:"string_format",abort:!1,version:"v7",...normalizeParams(params)})}function _url(Class,params){return new Class({type:"string",format:"url",check:"string_format",abort:!1,...normalizeParams(params)})}function _emoji2(Class,params){return new Class({type:"string",format:"emoji",check:"string_format",abort:!1,...normalizeParams(params)})}function _nanoid(Class,params){return new Class({type:"string",format:"nanoid",check:"string_format",abort:!1,...normalizeParams(params)})}function _cuid(Class,params){return new Class({type:"string",format:"cuid",check:"string_format",abort:!1,...normalizeParams(params)})}function _cuid2(Class,params){return new Class({type:"string",format:"cuid2",check:"string_format",abort:!1,...normalizeParams(params)})}function _ulid(Class,params){return new Class({type:"string",format:"ulid",check:"string_format",abort:!1,...normalizeParams(params)})}function _xid(Class,params){return new Class({type:"string",format:"xid",check:"string_format",abort:!1,...normalizeParams(params)})}function _ksuid(Class,params){return new Class({type:"string",format:"ksuid",check:"string_format",abort:!1,...normalizeParams(params)})}function _ipv4(Class,params){return new Class({type:"string",format:"ipv4",check:"string_format",abort:!1,...normalizeParams(params)})}function _ipv6(Class,params){return new Class({type:"string",format:"ipv6",check:"string_format",abort:!1,...normalizeParams(params)})}function _cidrv4(Class,params){return new Class({type:"string",format:"cidrv4",check:"string_format",abort:!1,...normalizeParams(params)})}function _cidrv6(Class,params){return new Class({type:"string",format:"cidrv6",check:"string_format",abort:!1,...normalizeParams(params)})}function _base64(Class,params){return new Class({type:"string",format:"base64",check:"string_format",abort:!1,...normalizeParams(params)})}function _base64url(Class,params){return new Class({type:"string",format:"base64url",check:"string_format",abort:!1,...normalizeParams(params)})}function _e164(Class,params){return new Class({type:"string",format:"e164",check:"string_format",abort:!1,...normalizeParams(params)})}function _jwt(Class,params){return new Class({type:"string",format:"jwt",check:"string_format",abort:!1,...normalizeParams(params)})}function _isoDateTime(Class,params){return new Class({type:"string",format:"datetime",check:"string_format",offset:!1,local:!1,precision:null,...normalizeParams(params)})}function _isoDate(Class,params){return new Class({type:"string",format:"date",check:"string_format",...normalizeParams(params)})}function _isoTime(Class,params){return new Class({type:"string",format:"time",check:"string_format",precision:null,...normalizeParams(params)})}function _isoDuration(Class,params){return new Class({type:"string",format:"duration",check:"string_format",...normalizeParams(params)})}function _number(Class,params){return new Class(snapshotChecks({type:"number",checks:[],...normalizeParams(params)}))}function _int(Class,params){return new Class({type:"number",check:"number_format",abort:!1,format:"safeint",...normalizeParams(params)})}function _boolean(Class,params){return new Class({type:"boolean",...normalizeParams(params)})}function _unknown(Class){return new Class({type:"unknown"})}function _never(Class,params){return new Class({type:"never",...normalizeParams(params)})}function _lt(value,params){return new $ZodCheckLessThan({check:"less_than",...normalizeParams(params),value,inclusive:!1})}function _lte(value,params){return new $ZodCheckLessThan({check:"less_than",...normalizeParams(params),value,inclusive:!0})}function _gt(value,params){return new $ZodCheckGreaterThan({check:"greater_than",...normalizeParams(params),value,inclusive:!1})}function _gte(value,params){return new $ZodCheckGreaterThan({check:"greater_than",...normalizeParams(params),value,inclusive:!0})}function _multipleOf(value,params){return new $ZodCheckMultipleOf({check:"multiple_of",...normalizeParams(params),value})}function _maxLength(maximum,params){return new $ZodCheckMaxLength({check:"max_length",...normalizeParams(params),maximum})}function _minLength(minimum,params){return new $ZodCheckMinLength({check:"min_length",...normalizeParams(params),minimum})}function _length(length,params){return new $ZodCheckLengthEquals({check:"length_equals",...normalizeParams(params),length})}function _regex(pattern,params){return new $ZodCheckRegex({check:"string_format",format:"regex",...normalizeParams(params),pattern})}function _lowercase(params){return new $ZodCheckLowerCase({check:"string_format",format:"lowercase",...normalizeParams(params)})}function _uppercase(params){return new $ZodCheckUpperCase({check:"string_format",format:"uppercase",...normalizeParams(params)})}function _includes(includes,params){return new $ZodCheckIncludes({check:"string_format",format:"includes",...normalizeParams(params),includes})}function _startsWith(prefix,params){return new $ZodCheckStartsWith({check:"string_format",format:"starts_with",...normalizeParams(params),prefix})}function _endsWith(suffix,params){return new $ZodCheckEndsWith({check:"string_format",format:"ends_with",...normalizeParams(params),suffix})}function _overwrite(tx){return new $ZodCheckOverwrite({check:"overwrite",tx})}function _normalize(form){return _overwrite((input)=>input.normalize(form))}function _trim(){return _overwrite((input)=>input.trim())}function _toLowerCase(){return _overwrite((input)=>input.toLowerCase())}function _toUpperCase(){return _overwrite((input)=>input.toUpperCase())}function _slugify(){return _overwrite((input)=>slugify(input))}function _array(Class,element,params){return new Class({type:"array",element,...normalizeParams(params)})}function _refine(Class,fn,_params){return new Class({type:"custom",check:"custom",fn,...normalizeParams(_params)})}function _superRefine(fn,params){let ch=_check((payload)=>(payload.addIssue=(issue2)=>{if(typeof issue2==="string")payload.issues.push(issue(issue2,payload.value,ch._zod.def));else{let _issue=issue2;if(_issue.fatal)_issue.continue=!1;if(_issue.code??(_issue.code="custom"),!("input"in _issue))_issue.input=payload.value;_issue.inst??(_issue.inst=ch),_issue.continue??(_issue.continue=!ch._zod.def.abort),payload.issues.push(issue(_issue))}},fn(payload.value,payload)),params);return ch}function _check(fn,params){let ch=new $ZodCheck({check:"custom",...normalizeParams(params)});return ch._zod.check=fn,ch}function assignProps(target,...sources){for(let source of sources)for(let key of Reflect.ownKeys(source))if(Object.prototype.propertyIsEnumerable.call(source,key))assignProp(target,key,source[key]);return target}function initializeContext(params){let target=params?.target??"draft-2020-12";if(target==="draft-4")target="draft-04";if(target==="draft-7")target="draft-07";return{processors:params.processors??{},metadataRegistry:params?.metadata??globalRegistry,target,unrepresentable:params?.unrepresentable??"throw",override:params?.override??(()=>{}),io:params?.io??"output",counter:0,seen:new Map,sharedDefsExtractedFor:void 0,sharedEmitDoneFor:void 0,cycles:params?.cycles??"ref",reused:params?.reused??"inline",intersections:[],deferred:[],external:params?.external??void 0}}function handleUnrepresentable(schema,ctx,json,params,message){let result=typeof ctx.unrepresentable==="function"?ctx.unrepresentable({zodSchema:schema,path:params.path,message}):ctx.unrepresentable;if(result==="any")return!1;if(result===void 0||result==="throw")throw Error(message);return Object.assign(json,result),!0}function processSchema(schema,ctx,_params={path:[],schemaPath:[]}){var _a;let def=schema._zod.def,seen=ctx.seen.get(schema);if(seen){if(seen.count++,_params.schemaPath.includes(schema))seen.cycle=_params.path;return seen.schema}let result={schema:{},count:1,cycle:void 0,path:_params.path};ctx.seen.set(schema,result),ctx.sharedDefsExtractedFor=void 0,ctx.sharedEmitDoneFor=void 0;let overrideSchema=schema._zod.toJSONSchema?.();if(overrideSchema)result.schema=overrideSchema;else{let params={..._params,schemaPath:[..._params.schemaPath,schema],path:_params.path};if(schema._zod.processJSONSchema)schema._zod.processJSONSchema(ctx,result.schema,params);else{let _json=result.schema,processor=ctx.processors[def.type];if(!processor)throw Error(`[toJSONSchema]: Non-representable type encountered: ${def.type}`);processor(schema,ctx,_json,params)}let parent=schema._zod.parent;if(parent){if(!result.ref)result.ref=parent;processSchema(parent,ctx,params),ctx.seen.get(parent).isParent=!0}}let meta=ctx.metadataRegistry.get(schema);if(meta)assignProps(result.schema,meta);if(ctx.io==="input"&&isTransforming(schema))delete result.schema.examples,delete result.schema.default;if(ctx.io==="input"&&"_prefault"in result.schema)(_a=result.schema).default??(_a.default=result.schema._prefault);return delete result.schema._prefault,ctx.seen.get(schema).schema}function encodeJSONPointerSegment(segment){return segment.replace(/~/g,"~0").replace(/\//g,"~1")}function extractDefs(ctx,schema){let root=ctx.seen.get(schema);if(!root)throw Error("Unprocessed schema. This is a bug in Zod.");if(ctx.external&&ctx.sharedDefsExtractedFor===ctx.external)return;let idToSchema=new Map;for(let entry of ctx.seen.entries()){let id=ctx.metadataRegistry.get(entry[0])?.id;if(id){let existing=idToSchema.get(id);if(existing&&existing!==entry[0])throw Error(`Duplicate schema id "${id}" detected during JSON Schema conversion. Two different schemas cannot share the same id when converted together.`);idToSchema.set(id,entry[0])}}let makeURI=(entry)=>{let defsSegment=ctx.target==="draft-2020-12"?"$defs":"definitions";if(ctx.external){let externalId=ctx.external.registry.get(entry[0])?.id,uriGenerator=ctx.external.uri??((id)=>id);if(externalId)return{ref:uriGenerator(externalId)};let id=entry[1].defId??entry[1].schema.id??`schema${ctx.counter++}`;return entry[1].defId=id,{defId:id,ref:`${uriGenerator("__shared")}#/${defsSegment}/${encodeJSONPointerSegment(id)}`}}let uriPrefix="#",defUriPrefix=`${uriPrefix}/${defsSegment}/`;if(entry[1]===root&&!entry[1].schema.id)return{ref:uriPrefix};let defId=entry[1].schema.id??`__schema${ctx.counter++}`;return{defId,ref:defUriPrefix+encodeJSONPointerSegment(defId)}},extractToDef=(entry)=>{if(entry[1].schema.$ref)return;let seen=entry[1],{ref,defId}=makeURI(entry);if(seen.def={...seen.schema},defId)seen.defId=defId;let schema=seen.schema;for(let key in schema)delete schema[key];schema.$ref=ref};if(ctx.cycles==="throw")for(let entry of ctx.seen.entries()){let seen=entry[1];if(seen.cycle)throw Error(`Cycle detected: #/${seen.cycle?.join("/")}/<root>
114
114
 
115
- Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.`)}for(let entry of ctx.seen.entries()){let seen=entry[1];if(schema===entry[0]){extractToDef(entry);continue}if(ctx.external){let ext=ctx.external.registry.get(entry[0])?.id;if(schema!==entry[0]&&ext){extractToDef(entry);continue}}if(ctx.metadataRegistry.get(entry[0])?.id){extractToDef(entry);continue}if(seen.cycle){extractToDef(entry);continue}if(seen.count>1){if(ctx.reused==="ref")extractToDef(entry)}}if(ctx.external)ctx.sharedDefsExtractedFor=ctx.external}function compactTypeUnion(schema){let options=schema.anyOf;if(!Array.isArray(options)||options.length===0||schema.type!==void 0)return;let types=[];for(let option of options){if(!option||typeof option!=="object")return;compactTypeUnion(option);let keys=Object.keys(option);if(keys.length!==1||keys[0]!=="type")return;let type=option.type;for(let member of Array.isArray(type)?type:[type]){if(typeof member!=="string")return;if(!types.includes(member))types.push(member)}}delete schema.anyOf,schema.type=types.length===1?types[0]:types}var FOLDABLE_KEYS=new Set(["type","properties","required","additionalProperties"]),UNION_KEYS=["oneOf","anyOf"];function undeclaredConstraint(member){let extra=member.additionalProperties;if(extra===void 0||extra===!1||typeof extra!=="object"||extra===null)return null;return Object.keys(extra).length?extra:null}function foldObjects(members){let objects=[];for(let member of members){if(typeof member!=="object"||member.type!=="object")return null;for(let key in member)if(!FOLDABLE_KEYS.has(key))return null;objects.push(member)}let properties={},required=new Set;for(let object of objects){for(let key in object.properties){if(Object.prototype.hasOwnProperty.call(properties,key))continue;let parts=[];for(let other of objects){let part=other.properties?.[key]??undeclaredConstraint(other);if(part===null||part===void 0)continue;if(!parts.some((seen)=>JSON.stringify(seen)===JSON.stringify(part)))parts.push(part)}let merged=parts.length===1?parts[0]:foldObjects(parts)??{allOf:parts};assignProp(properties,key,merged)}for(let key of object.required??[])required.add(key)}let folded={type:"object",properties};if(required.size)folded.required=[...required];if(objects.every((object)=>object.additionalProperties===!1))folded.additionalProperties=!1;else{let constraints=[];for(let object of objects){let constraint=undeclaredConstraint(object);if(constraint&&!constraints.some((seen)=>JSON.stringify(seen)===JSON.stringify(constraint)))constraints.push(constraint)}if(constraints.length===1)folded.additionalProperties=constraints[0];else if(constraints.length>1)folded.additionalProperties={allOf:constraints}}return folded}function foldIntersection(json){let allOf=json.allOf;if(!Array.isArray(allOf)||allOf.length<2)return;for(let key of FOLDABLE_KEYS)if(key in json)return;let unions=allOf.filter((m)=>UNION_KEYS.some((k)=>Array.isArray(m[k]))),folded=null;if(!unions.length)folded=foldObjects(allOf);else{let union=unions[0],keyword=UNION_KEYS.find((k)=>Array.isArray(union[k]));if(Object.keys(union).length!==1)return;let rest=allOf.filter((m)=>m!==union),branches=union[keyword].map((branch)=>foldObjects([...rest,branch]));if(branches.some((b)=>!b))return;folded={[keyword]:branches}}if(!folded)return;delete json.allOf,assignProps(json,folded)}function finalize(ctx,schema){let root=ctx.seen.get(schema);if(!root)throw Error("Unprocessed schema. This is a bug in Zod.");let flattenRef=(zodSchema)=>{let seen=ctx.seen.get(zodSchema);if(seen.ref===null)return;let schema=seen.def??seen.schema,_cached={...schema},ref=seen.ref;if(seen.ref=null,ref){flattenRef(ref);let refSeen=ctx.seen.get(ref),refSchema=refSeen.schema;if(refSchema.$ref&&(ctx.target==="draft-07"||ctx.target==="draft-04"||ctx.target==="openapi-3.0"))schema.allOf=schema.allOf??[],schema.allOf.push(refSchema);else assignProps(schema,refSchema);if(assignProps(schema,_cached),zodSchema._zod.parent===ref)for(let key in schema){if(key==="$ref"||key==="allOf")continue;if(!(key in _cached))delete schema[key]}if(refSchema.$ref&&refSeen.def)for(let key in schema){if(key==="$ref"||key==="allOf")continue;if(key in refSeen.def&&JSON.stringify(schema[key])===JSON.stringify(refSeen.def[key]))delete schema[key]}}let parent=zodSchema._zod.parent;if(parent&&parent!==ref){flattenRef(parent);let parentSeen=ctx.seen.get(parent);if(parentSeen?.schema.$ref){if(schema.$ref=parentSeen.schema.$ref,parentSeen.def)for(let key in schema){if(key==="$ref"||key==="allOf")continue;if(key in parentSeen.def&&JSON.stringify(schema[key])===JSON.stringify(parentSeen.def[key]))delete schema[key]}}}ctx.override({zodSchema,jsonSchema:schema,path:seen.path??[]})};if(!ctx.external||ctx.sharedEmitDoneFor!==ctx.external){for(let entry of[...ctx.seen.entries()].reverse())flattenRef(entry[0]);if(ctx.target!=="openapi-3.0")for(let entry of ctx.seen.entries())compactTypeUnion(entry[1].def??entry[1].schema);for(let rewrite of ctx.deferred)rewrite();if(ctx.intersections.length){let carriers=new Map;for(let seen of ctx.seen.values())for(let json of[seen.schema,seen.def]){let allOf=json?.allOf;if(!Array.isArray(allOf))continue;let existing=carriers.get(allOf);if(existing)existing.push(json);else carriers.set(allOf,[json])}for(let allOf of ctx.intersections)for(let json of carriers.get(allOf)??[])foldIntersection(json)}}let result={};if(ctx.target==="draft-2020-12")result.$schema="https://json-schema.org/draft/2020-12/schema";else if(ctx.target==="draft-07")result.$schema="http://json-schema.org/draft-07/schema#";else if(ctx.target==="draft-04")result.$schema="http://json-schema.org/draft-04/schema#";else if(ctx.target==="openapi-3.0");if(ctx.external?.uri){let id=ctx.external.registry.get(schema)?.id;if(!id)throw Error("Schema is missing an `id` property");result.$id=ctx.external.uri(id)}assignProps(result,root.defId?root.schema:root.def??root.schema);let rootMetaId=ctx.metadataRegistry.get(schema)?.id;if(rootMetaId!==void 0&&result.id===rootMetaId)delete result.id;let defs=ctx.external?.defs??{};if(!ctx.external||ctx.sharedEmitDoneFor!==ctx.external)for(let entry of ctx.seen.entries()){let seen=entry[1];if(seen.def&&seen.defId){if(seen.def.id===seen.defId)delete seen.def.id;assignProp(defs,seen.defId,seen.def)}}if(ctx.external)ctx.sharedEmitDoneFor=ctx.external;if(ctx.external);else if(Object.keys(defs).length>0)if(ctx.target==="draft-2020-12")result.$defs=defs;else result.definitions=defs;try{let finalized=JSON.parse(JSON.stringify(result));return Object.defineProperty(finalized,"~standard",{value:{...schema["~standard"],jsonSchema:{input:createStandardJSONSchemaMethod(schema,"input",ctx.processors),output:createStandardJSONSchemaMethod(schema,"output",ctx.processors)}},enumerable:!1,writable:!1}),finalized}catch(_err){throw Error("Error converting schema to JSON.")}}function isTransforming(_schema,_ctx){let ctx=_ctx??{seen:new Set};if(ctx.seen.has(_schema))return!1;ctx.seen.add(_schema);let def=_schema._zod.def;if(def.type==="transform")return!0;if(def.type==="array")return isTransforming(def.element,ctx);if(def.type==="set")return isTransforming(def.valueType,ctx);if(def.type==="lazy")return isTransforming(def.getter(),ctx);if(def.type==="promise"||def.type==="optional"||def.type==="nonoptional"||def.type==="nullable"||def.type==="readonly"||def.type==="default"||def.type==="prefault"||def.type==="catch")return isTransforming(def.innerType,ctx);if(def.type==="intersection")return isTransforming(def.left,ctx)||isTransforming(def.right,ctx);if(def.type==="record"||def.type==="map")return isTransforming(def.keyType,ctx)||isTransforming(def.valueType,ctx);if(def.type==="pipe"){if(_schema._zod.traits.has("$ZodCodec"))return!0;return isTransforming(def.in,ctx)||isTransforming(def.out,ctx)}if(def.type==="object"){for(let key in def.shape)if(isTransforming(def.shape[key],ctx))return!0;return!1}if(def.type==="union"){for(let option of def.options)if(isTransforming(option,ctx))return!0;return!1}if(def.type==="tuple"){for(let item of def.items)if(isTransforming(item,ctx))return!0;if(def.rest&&isTransforming(def.rest,ctx))return!0;return!1}return!1}var createToJSONSchemaMethod=(schema,processors={})=>(params)=>{let ctx=initializeContext({...params,processors});return processSchema(schema,ctx),extractDefs(ctx,schema),finalize(ctx,schema)},createStandardJSONSchemaMethod=(schema,io,processors={})=>(params)=>{let{libraryOptions,target}=params??{},ctx=initializeContext({...libraryOptions??{},target,io,processors});return processSchema(schema,ctx),extractDefs(ctx,schema),finalize(ctx,schema)};var narrowMin=(agg,key,value)=>{if(agg[key]===void 0||value>agg[key])agg[key]=value},narrowMax=(agg,key,value)=>{if(agg[key]===void 0||value<agg[key])agg[key]=value},narrowBoth=(agg,value)=>{narrowMin(agg,"minimum",value),narrowMax(agg,"maximum",value)},addDivisor=(agg,value)=>{if(agg.multipleOf??(agg.multipleOf=[]),!agg.multipleOf.includes(value))agg.multipleOf.push(value)},addPattern=(agg,pattern)=>{agg.patterns??(agg.patterns=new Set),agg.patterns.add(pattern)},intersectMime=(agg,mime)=>{agg.mime=agg.mime?agg.mime.filter((m)=>mime.includes(m)):[...mime]},setFormat=(agg,format)=>{if(agg.format=format,format.includes("int"))agg.isInt=!0},minContributor=(agg,def)=>narrowMin(agg,"minimum",def.minimum),maxContributor=(agg,def)=>narrowMax(agg,"maximum",def.maximum),formatContributor=(ranges)=>(agg,def)=>{setFormat(agg,def.format);let[minimum,maximum]=ranges[def.format];narrowMin(agg,"minimum",minimum),narrowMax(agg,"maximum",maximum)},contributors={greater_than:(agg,def)=>narrowMin(agg,def.inclusive?"minimum":"exclusiveMinimum",def.value),less_than:(agg,def)=>narrowMax(agg,def.inclusive?"maximum":"exclusiveMaximum",def.value),multiple_of:(agg,def)=>addDivisor(agg,def.value),number_format:formatContributor(NUMBER_FORMAT_RANGES),bigint_format:formatContributor(BIGINT_FORMAT_RANGES),min_length:minContributor,max_length:maxContributor,length_equals:(agg,def)=>narrowBoth(agg,def.length),min_size:minContributor,max_size:maxContributor,size_equals:(agg,def)=>narrowBoth(agg,def.size),string_format:(agg,def)=>{if(setFormat(agg,def.format),def.pattern)addPattern(agg,def.pattern);if(def.format==="base64"||def.format==="base64url")agg.contentEncoding=def.format;if(def.local||def.precision===-1)agg.laxFormat=!0},mime_type:(agg,def)=>intersectMime(agg,def.mime)};function aggregateChecks(schema){let agg={},def=schema._zod.def,list=schema._zod.traits.has("$ZodCheck")?[schema,...def.checks??[]]:def.checks??[];for(let ch of list)contributors[ch._zod.def.check]?.(agg,ch._zod.def);let bag=schema._zod.bag;if(bag.minimum!==void 0)narrowMin(agg,"minimum",bag.minimum);if(bag.exclusiveMinimum!==void 0)narrowMin(agg,"exclusiveMinimum",bag.exclusiveMinimum);if(bag.maximum!==void 0)narrowMax(agg,"maximum",bag.maximum);if(bag.exclusiveMaximum!==void 0)narrowMax(agg,"exclusiveMaximum",bag.exclusiveMaximum);if(bag.multipleOf!==void 0)addDivisor(agg,bag.multipleOf);if(bag.format!==void 0){if(agg.format??(agg.format=bag.format),bag.format.includes("int"))agg.isInt=!0}if(bag.mime)intersectMime(agg,bag.mime);for(let pattern of bag.patterns??[])addPattern(agg,pattern);return agg}var formatMap={guid:"uuid",url:"uri",datetime:"date-time",json_string:"json-string",regex:""},exactPatterns=new Map([[base64Charset,base64],[base64urlCharset,base64url]]),exactPattern=(p)=>exactPatterns.get(p)??p,stringProcessor=(schema,ctx,_json,_params)=>{let json=_json;json.type="string";let{minimum,maximum,format,patterns,contentEncoding,laxFormat}=aggregateChecks(schema);if(typeof minimum==="number")json.minLength=minimum;if(typeof maximum==="number")json.maxLength=maximum;if(format){if(json.format=formatMap[format]??format,json.format==="")delete json.format;if(format==="time"||laxFormat)delete json.format}if(contentEncoding)json.contentEncoding=contentEncoding;if(patterns&&patterns.size>0){let patternList=[...patterns].map(exactPattern);if(patternList.length===1)json.pattern=patternList[0].source;else if(patternList.length>1)json.allOf=[...patternList.map((regex)=>({...ctx.target==="draft-07"||ctx.target==="draft-04"||ctx.target==="openapi-3.0"?{type:"string"}:{},pattern:regex.source}))]}},numberProcessor=(schema,ctx,_json,params)=>{let json=_json,{minimum,maximum,multipleOf,exclusiveMaximum,exclusiveMinimum,isInt}=aggregateChecks(schema);json.type=isInt?"integer":"number";let exMin=typeof exclusiveMinimum==="number"&&exclusiveMinimum>=(minimum??Number.NEGATIVE_INFINITY),exMax=typeof exclusiveMaximum==="number"&&exclusiveMaximum<=(maximum??Number.POSITIVE_INFINITY),legacy=ctx.target==="draft-04"||ctx.target==="openapi-3.0";if(exMin)if(legacy)json.minimum=exclusiveMinimum,json.exclusiveMinimum=!0;else json.exclusiveMinimum=exclusiveMinimum;else if(typeof minimum==="number")json.minimum=minimum;if(exMax)if(legacy)json.maximum=exclusiveMaximum,json.exclusiveMaximum=!0;else json.exclusiveMaximum=exclusiveMaximum;else if(typeof maximum==="number")json.maximum=maximum;if(multipleOf){let divisors=new Set;for(let divisor of multipleOf)if(Number.isFinite(divisor)&&divisor!==0)divisors.add(Math.abs(divisor));else handleUnrepresentable(schema,ctx,json,params,`A multipleOf divisor of ${divisor} cannot be represented in JSON Schema`);let[first,...rest]=divisors;if(first!==void 0)json.multipleOf=first;if(rest.length)json.allOf=[...json.allOf??[],...rest.map((m)=>({multipleOf:m}))]}},booleanProcessor=(_schema,_ctx,json,_params)=>{json.type="boolean"};var neverProcessor=(_schema,_ctx,json,_params)=>{json.not={}};var unknownProcessor=(_schema,_ctx,_json,_params)=>{};var enumProcessor=(schema,_ctx,json,_params)=>{let def=schema._zod.def,values=getEnumValues(def.entries);if(values.length===0){json.not={};return}if(values.every((v)=>typeof v==="number"))json.type="number";if(values.every((v)=>typeof v==="string"))json.type="string";json.enum=values},literalProcessor=(schema,ctx,json,params)=>{let def=schema._zod.def;if(def.values.length===0){json.not={};return}let vals=[];for(let val of def.values)if(val===void 0){if(handleUnrepresentable(schema,ctx,json,params,"Literal `undefined` cannot be represented in JSON Schema"))return}else if(typeof val==="bigint"){if(handleUnrepresentable(schema,ctx,json,params,"BigInt literals cannot be represented in JSON Schema"))return;vals.push(Number(val))}else vals.push(val);if(vals.length===0);else if(vals.length===1){let val=vals[0];if(json.type=val===null?"null":typeof val,ctx.target==="draft-04"||ctx.target==="openapi-3.0")json.enum=[val];else json.const=val}else{if(vals.every((v)=>typeof v==="number"))json.type="number";if(vals.every((v)=>typeof v==="string"))json.type="string";if(vals.every((v)=>typeof v==="boolean"))json.type="boolean";if(vals.every((v)=>v===null))json.type="null";json.enum=vals}};var customProcessor=(schema,ctx,json,params)=>{handleUnrepresentable(schema,ctx,json,params,"Custom types cannot be represented in JSON Schema")};var transformProcessor=(schema,ctx,json,params)=>{handleUnrepresentable(schema,ctx,json,params,"Transforms cannot be represented in JSON Schema")};var arrayProcessor=(schema,ctx,_json,params)=>{let json=_json,def=schema._zod.def,{minimum,maximum}=aggregateChecks(schema);if(typeof minimum==="number")json.minItems=minimum;if(typeof maximum==="number")json.maxItems=maximum;json.type="array",json.items=processSchema(def.element,ctx,{...params,path:[...params.path,"items"]})};function inputOptin(schema){let def=schema._zod.def;if(def.type==="pipe"&&def.in._zod.traits.has("$ZodTransform"))return inputOptin(def.out);if(def.type==="catch")return inputOptin(def.innerType);return schema._zod.optin}var objectProcessor=(schema,ctx,_json,params)=>{let json=_json,def=schema._zod.def,shape=def.shape;if(Object.getOwnPropertySymbols(shape).length&&handleUnrepresentable(schema,ctx,json,params,"Symbol keys cannot be represented in JSON Schema"))return;json.type="object",json.properties={};for(let key in shape)assignProp(json.properties,key,processSchema(shape[key],ctx,{...params,path:[...params.path,"properties",key]}));let requiredKeys=[];for(let key of Object.keys(shape)){let field=def.shape[key];if(ctx.io==="input"?inputOptin(field)===void 0:field._zod.optout===void 0)requiredKeys.push(key)}if(requiredKeys.length>0)json.required=requiredKeys;if(def.catchall?._zod.def.type==="never")json.additionalProperties=!1;else if(!def.catchall){if(ctx.io==="output")json.additionalProperties=!1}else if(def.catchall)json.additionalProperties=processSchema(def.catchall,ctx,{...params,path:[...params.path,"additionalProperties"]})},unionProcessor=(schema,ctx,json,params)=>{let def=schema._zod.def,isExclusive=def.inclusive===!1,options=def.options.map((x,i)=>processSchema(x,ctx,{...params,path:[...params.path,isExclusive?"oneOf":"anyOf",i]}));if(isExclusive)json.oneOf=options;else json.anyOf=options},intersectionProcessor=(schema,ctx,json,params)=>{let def=schema._zod.def,a=processSchema(def.left,ctx,{...params,path:[...params.path,"allOf",0]}),b=processSchema(def.right,ctx,{...params,path:[...params.path,"allOf",1]}),isSimpleIntersection=(val)=>("allOf"in val)&&Object.keys(val).length===1,allOf=[...isSimpleIntersection(a)?a.allOf:[a],...isSimpleIntersection(b)?b.allOf:[b]];json.allOf=allOf,ctx.intersections.push(allOf)};var nullableProcessor=(schema,ctx,json,params)=>{let def=schema._zod.def,inner=processSchema(def.innerType,ctx,params),seen=ctx.seen.get(schema);if(ctx.target==="openapi-3.0")seen.ref=def.innerType,json.nullable=!0;else json.anyOf=[inner,{type:"null"}]},nonoptionalProcessor=(schema,ctx,_json,params)=>{let def=schema._zod.def;processSchema(def.innerType,ctx,params);let seen=ctx.seen.get(schema);seen.ref=def.innerType},UNREPRESENTABLE_DEFAULT=Symbol();function serializeDefaultValue(value,schema,ctx,json,params){let unrepresentable=!1,serialized=JSON.stringify(value,(_,val)=>{if(typeof val!=="bigint")return val;return unrepresentable=!0,null});if(!unrepresentable)return JSON.parse(serialized);return handleUnrepresentable(schema,ctx,json,params,"BigInt defaults cannot be represented in JSON Schema"),UNREPRESENTABLE_DEFAULT}var defaultProcessor=(schema,ctx,json,params)=>{let def=schema._zod.def;processSchema(def.innerType,ctx,params);let seen=ctx.seen.get(schema);seen.ref=def.innerType;let value=serializeDefaultValue(def.defaultValue,schema,ctx,json,params);if(value!==UNREPRESENTABLE_DEFAULT)json.default=value},prefaultProcessor=(schema,ctx,json,params)=>{let def=schema._zod.def;processSchema(def.innerType,ctx,params);let seen=ctx.seen.get(schema);if(seen.ref=def.innerType,ctx.io!=="input")return;let value=serializeDefaultValue(def.defaultValue,schema,ctx,json,params);if(value!==UNREPRESENTABLE_DEFAULT)json._prefault=value},catchProcessor=(schema,ctx,json,params)=>{let def=schema._zod.def;processSchema(def.innerType,ctx,params);let seen=ctx.seen.get(schema);seen.ref=def.innerType;let catchValue;try{catchValue=def.catchValue(void 0)}catch{handleUnrepresentable(schema,ctx,json,params,"Dynamic catch values are not supported in JSON Schema");return}json.default=catchValue},pipeProcessor=(schema,ctx,_json,params)=>{let def=schema._zod.def,inIsTransform=def.in._zod.traits.has("$ZodTransform"),innerType=ctx.io==="input"?inIsTransform?def.out:def.in:def.out;processSchema(innerType,ctx,params);let seen=ctx.seen.get(schema);seen.ref=innerType},readonlyProcessor=(schema,ctx,json,params)=>{let def=schema._zod.def;processSchema(def.innerType,ctx,params);let seen=ctx.seen.get(schema);seen.ref=def.innerType,json.readOnly=!0};var optionalProcessor=(schema,ctx,_json,params)=>{let def=schema._zod.def;processSchema(def.innerType,ctx,params);let seen=ctx.seen.get(schema);seen.ref=def.innerType};var _installedErrorProtos=new WeakSet([Object.prototype,Error.prototype]);function _lazyMethod(proto,key,make){Object.defineProperty(proto,key,{configurable:!0,enumerable:!1,get(){let value=make(this);return Object.defineProperty(this,key,{value,configurable:!0,writable:!0}),value},set(value){Object.defineProperty(this,key,{value,configurable:!0,writable:!0})}})}var initializer2=(inst,issues)=>{$ZodError.init(inst,issues),inst.name="ZodError";let proto=Object.getPrototypeOf(inst);if(_installedErrorProtos.has(proto))return;_installedErrorProtos.add(proto),_lazyMethod(proto,"format",(self)=>(mapper)=>formatError(self,mapper)),_lazyMethod(proto,"flatten",(self)=>(mapper)=>flattenError(self,mapper)),_lazyMethod(proto,"addIssue",(self)=>(issue)=>{self.issues.push(issue),self.message=JSON.stringify(self.issues,jsonStringifyReplacer,2)}),_lazyMethod(proto,"addIssues",(self)=>(issues)=>{self.issues.push(...issues),self.message=JSON.stringify(self.issues,jsonStringifyReplacer,2)}),Object.defineProperty(proto,"isEmpty",{configurable:!0,enumerable:!1,get(){return this.issues.length===0}})};var ZodRealError=$constructor("ZodError",initializer2,void 0,{Parent:Error});var parse2=_parse(ZodRealError),parseAsync=_parseAsync(ZodRealError),safeParse=_safeParse(ZodRealError),safeParseAsync=_safeParseAsync(ZodRealError),encode=_encode(ZodRealError),decode=_decode(ZodRealError),encodeAsync=_encodeAsync(ZodRealError),decodeAsync=_decodeAsync(ZodRealError),safeEncode=_safeEncode(ZodRealError),safeDecode=_safeDecode(ZodRealError),safeEncodeAsync=_safeEncodeAsync(ZodRealError),safeDecodeAsync=_safeDecodeAsync(ZodRealError);function _ensureDefaultLocale(){if(!globalConfig.localeError)config(en_default())}function _ensureDefaultMemoizer(){if(!globalConfig.memoizer)config({memoizer:memoizer()})}var ZodType=$constructor("ZodType",(inst,def)=>(_ensureDefaultLocale(),$ZodType.init(inst,def),inst.def=def,inst.type=def.type,inst),{check(...chks){let def=this.def;return this.clone(mergeDefs(def,{checks:[...def.checks??[],...chks.map((ch)=>typeof ch==="function"?{_zod:{check:ch,def:{check:"custom"},onattach:[]}}:ch)]}),{parent:!0})},with(...chks){return this.check(...chks)},clone(def,params){return clone(this,def,params)},brand(){return this},register(reg,meta){return reg.add(this,meta),this},refine(check,params){return this.check(refine(check,params))},superRefine(refinement,params){return this.check(superRefine(refinement,params))},overwrite(fn){return this.check(_overwrite(fn))},optional(){return optional(this)},exactOptional(){return exactOptional(this)},nullable(){return nullable(this)},nullish(){return optional(nullable(this))},nonoptional(params){return nonoptional(this,params)},array(){return array(this)},or(arg){return union([this,arg])},and(arg){return intersection(this,arg)},transform(tx){return pipe(this,transform(tx))},default(d){return _default(this,d)},prefault(d){return prefault(this,d)},catch(params){return _catch(this,params)},pipe(target){return pipe(this,target)},readonly(){return readonly(this)},describe(description){let cl=this.clone();return globalRegistry.add(cl,{description}),cl},meta(...args){if(args.length===0)return globalRegistry.get(this);let cl=this.clone();return globalRegistry.add(cl,args[0]),cl},isOptional(){return this.safeParse(void 0).success},isNullable(){return this.safeParse(null).success},apply(fn,...args){return args.length===0?fn(this):fn(this,...args)},get "~standard"(){return hide(this,"~standard",{...standardProps(this),jsonSchema:{input:createStandardJSONSchemaMethod(this,"input"),output:createStandardJSONSchemaMethod(this,"output")}})},set "~standard"(value){own(this,"~standard",value)},parse:function _parse(data,params){return parse2(this,data,params,{callee:_parse})},parseAsync:async function _parseAsync(data,params){return await parseAsync(this,data,params,{callee:_parseAsync})},safeParse(data,params){return safeParse(this,data,params)},async safeParseAsync(data,params){return safeParseAsync(this,data,params)},get spa(){return this?.safeParseAsync},set spa(value){own(this,"spa",value)},validate(data,params){return validate(this,data,params)},validateAsync(data,params){return validateAsync(this,data,params)},encode:function _encode(data,params){return encode(this,data,params,{callee:_encode})},decode:function _decode(data,params){return decode(this,data,params,{callee:_decode})},encodeAsync:async function _encodeAsync(data,params){return await encodeAsync(this,data,params,{callee:_encodeAsync})},decodeAsync:async function _decodeAsync(data,params){return await decodeAsync(this,data,params,{callee:_decodeAsync})},safeEncode(data,params){return safeEncode(this,data,params)},safeDecode(data,params){return safeDecode(this,data,params)},async safeEncodeAsync(data,params){return safeEncodeAsync(this,data,params)},async safeDecodeAsync(data,params){return safeDecodeAsync(this,data,params)},toJSONSchema(params){return createToJSONSchemaMethod(this,{})(params)},get description(){return globalRegistry.get(this)?.description},get _def(){return this._zod.def}}),_ZodString=$constructor("_ZodString",(inst,def)=>{$ZodString.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>stringProcessor(inst,ctx,json,params)},derived({format:(inst)=>aggregateChecks(inst).format??null,minLength:(inst)=>aggregateChecks(inst).minimum??null,maxLength:(inst)=>aggregateChecks(inst).maximum??null},{regex(...args){return this.check(_regex(...args))},includes(...args){return this.check(_includes(...args))},startsWith(...args){return this.check(_startsWith(...args))},endsWith(...args){return this.check(_endsWith(...args))},min(...args){return this.check(_minLength(...args))},max(...args){return this.check(_maxLength(...args))},length(...args){return this.check(_length(...args))},nonempty(...args){return this.check(_minLength(1,...args))},lowercase(params){return this.check(_lowercase(params))},uppercase(params){return this.check(_uppercase(params))},trim(){return this.check(_trim())},normalize(...args){return this.check(_normalize(...args))},toLowerCase(){return this.check(_toLowerCase())},toUpperCase(){return this.check(_toUpperCase())},slugify(){return this.check(_slugify())}})),ZodString=$constructor("ZodString",(inst,def)=>{$ZodString.init(inst,def),_ZodString.init(inst,def)},{email(params){return this.check(_email(ZodEmail,params))},url(params){return this.check(_url(ZodURL,params))},jwt(params){return this.check(_jwt(ZodJWT,params))},emoji(params){return this.check(_emoji2(ZodEmoji,params))},guid(params){return this.check(_guid(ZodGUID,params))},uuid(params){return this.check(_uuid(ZodUUID,params))},uuidv4(params){return this.check(_uuidv4(ZodUUID,params))},uuidv6(params){return this.check(_uuidv6(ZodUUID,params))},uuidv7(params){return this.check(_uuidv7(ZodUUID,params))},nanoid(params){return this.check(_nanoid(ZodNanoID,params))},cuid(params){return this.check(_cuid(ZodCUID,params))},cuid2(params){return this.check(_cuid2(ZodCUID2,params))},ulid(params){return this.check(_ulid(ZodULID,params))},base64(params){return this.check(_base64(ZodBase64,params))},base64url(params){return this.check(_base64url(ZodBase64URL,params))},xid(params){return this.check(_xid(ZodXID,params))},ksuid(params){return this.check(_ksuid(ZodKSUID,params))},ipv4(params){return this.check(_ipv4(ZodIPv4,params))},ipv6(params){return this.check(_ipv6(ZodIPv6,params))},cidrv4(params){return this.check(_cidrv4(ZodCIDRv4,params))},cidrv6(params){return this.check(_cidrv6(ZodCIDRv6,params))},e164(params){return this.check(_e164(ZodE164,params))},datetime(params){return this.check(_isoDateTime(ZodISODateTime,params))},date(params){return this.check(_isoDate(ZodISODate,params))},time(params){return this.check(_isoTime(ZodISOTime,params))},duration(params){return this.check(_isoDuration(ZodISODuration,params))}});function string2(params){return _string(ZodString,params)}var ZodStringFormat=$constructor("ZodStringFormat",(inst,def)=>{$ZodStringFormat.init(inst,def),_ZodString.init(inst,def)}),ZodISODateTime=$constructor("ZodISODateTime",(inst,def)=>{$ZodISODateTime.init(inst,def),ZodStringFormat.init(inst,def)}),ZodISODate=$constructor("ZodISODate",(inst,def)=>{$ZodISODate.init(inst,def),ZodStringFormat.init(inst,def)}),ZodISOTime=$constructor("ZodISOTime",(inst,def)=>{$ZodISOTime.init(inst,def),ZodStringFormat.init(inst,def)}),ZodISODuration=$constructor("ZodISODuration",(inst,def)=>{$ZodISODuration.init(inst,def),ZodStringFormat.init(inst,def)}),ZodEmail=$constructor("ZodEmail",(inst,def)=>{$ZodEmail.init(inst,def),ZodStringFormat.init(inst,def)});var ZodGUID=$constructor("ZodGUID",(inst,def)=>{$ZodGUID.init(inst,def),ZodStringFormat.init(inst,def)});var ZodUUID=$constructor("ZodUUID",(inst,def)=>{$ZodUUID.init(inst,def),ZodStringFormat.init(inst,def)});var ZodURL=$constructor("ZodURL",(inst,def)=>{$ZodURL.init(inst,def),ZodStringFormat.init(inst,def)});var ZodEmoji=$constructor("ZodEmoji",(inst,def)=>{$ZodEmoji.init(inst,def),ZodStringFormat.init(inst,def)});var ZodNanoID=$constructor("ZodNanoID",(inst,def)=>{$ZodNanoID.init(inst,def),ZodStringFormat.init(inst,def)});var ZodCUID=$constructor("ZodCUID",(inst,def)=>{$ZodCUID.init(inst,def),ZodStringFormat.init(inst,def)});var ZodCUID2=$constructor("ZodCUID2",(inst,def)=>{$ZodCUID2.init(inst,def),ZodStringFormat.init(inst,def)});var ZodULID=$constructor("ZodULID",(inst,def)=>{$ZodULID.init(inst,def),ZodStringFormat.init(inst,def)});var ZodXID=$constructor("ZodXID",(inst,def)=>{$ZodXID.init(inst,def),ZodStringFormat.init(inst,def)});var ZodKSUID=$constructor("ZodKSUID",(inst,def)=>{$ZodKSUID.init(inst,def),ZodStringFormat.init(inst,def)});var ZodIPv4=$constructor("ZodIPv4",(inst,def)=>{$ZodIPv4.init(inst,def),ZodStringFormat.init(inst,def)});var ZodIPv6=$constructor("ZodIPv6",(inst,def)=>{$ZodIPv6.init(inst,def),ZodStringFormat.init(inst,def)});var ZodCIDRv4=$constructor("ZodCIDRv4",(inst,def)=>{$ZodCIDRv4.init(inst,def),ZodStringFormat.init(inst,def)});var ZodCIDRv6=$constructor("ZodCIDRv6",(inst,def)=>{$ZodCIDRv6.init(inst,def),ZodStringFormat.init(inst,def)});var ZodBase64=$constructor("ZodBase64",(inst,def)=>{$ZodBase64.init(inst,def),ZodStringFormat.init(inst,def)});var ZodBase64URL=$constructor("ZodBase64URL",(inst,def)=>{$ZodBase64URL.init(inst,def),ZodStringFormat.init(inst,def)});var ZodE164=$constructor("ZodE164",(inst,def)=>{$ZodE164.init(inst,def),ZodStringFormat.init(inst,def)});var ZodJWT=$constructor("ZodJWT",(inst,def)=>{$ZodJWT.init(inst,def),ZodStringFormat.init(inst,def)});var ZodNumber=$constructor("ZodNumber",(inst,def)=>{$ZodNumber.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>numberProcessor(inst,ctx,json,params),inst.isFinite=!0},derived({minValue:(inst)=>{let{minimum,exclusiveMinimum}=aggregateChecks(inst);return Math.max(minimum??Number.NEGATIVE_INFINITY,exclusiveMinimum??Number.NEGATIVE_INFINITY)},maxValue:(inst)=>{let{maximum,exclusiveMaximum}=aggregateChecks(inst);return Math.min(maximum??Number.POSITIVE_INFINITY,exclusiveMaximum??Number.POSITIVE_INFINITY)},isInt:(inst)=>{let{isInt,multipleOf}=aggregateChecks(inst);return!!isInt||!!multipleOf?.some(Number.isSafeInteger)},format:(inst)=>aggregateChecks(inst).format??null},{gt(value,params){return this.check(_gt(value,params))},gte(value,params){return this.check(_gte(value,params))},min(value,params){return this.check(_gte(value,params))},lt(value,params){return this.check(_lt(value,params))},lte(value,params){return this.check(_lte(value,params))},max(value,params){return this.check(_lte(value,params))},int(params){return this.check(int(params))},safe(params){return this.check(int(params))},positive(params){return this.check(_gt(0,params))},nonnegative(params){return this.check(_gte(0,params))},negative(params){return this.check(_lt(0,params))},nonpositive(params){return this.check(_lte(0,params))},multipleOf(value,params){return this.check(_multipleOf(value,params))},step(value,params){return this.check(_multipleOf(value,params))},finite(){return this}}));function number2(params){return _number(ZodNumber,params)}var ZodNumberFormat=$constructor("ZodNumberFormat",(inst,def)=>{$ZodNumberFormat.init(inst,def),ZodNumber.init(inst,def)});function int(params){return _int(ZodNumberFormat,params)}var ZodBoolean=$constructor("ZodBoolean",(inst,def)=>{$ZodBoolean.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>booleanProcessor(inst,ctx,json,params)});function boolean2(params){return _boolean(ZodBoolean,params)}var ZodUnknown=$constructor("ZodUnknown",(inst,def)=>{$ZodUnknown.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>unknownProcessor(inst,ctx,json,params)});function unknown(){return _unknown(ZodUnknown)}var ZodNever=$constructor("ZodNever",(inst,def)=>{$ZodNever.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>neverProcessor(inst,ctx,json,params)});function never(params){return _never(ZodNever,params)}var ZodArray=$constructor("ZodArray",(inst,def)=>{_ensureDefaultMemoizer(),$ZodArray.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>arrayProcessor(inst,ctx,json,params),inst.element=def.element},{min(n,params){return this.check(_minLength(n,params))},nonempty(params){return this.check(_minLength(1,params))},max(n,params){return this.check(_maxLength(n,params))},length(n,params){return this.check(_length(n,params))},unwrap(){return this.element}});function array(element,params){return _array(ZodArray,element,params)}var ZodObject=$constructor("ZodObject",(inst,def)=>{_ensureDefaultMemoizer(),$ZodObjectJIT.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>objectProcessor(inst,ctx,json,params),installLazyProp(inst,"shape",(self)=>self._zod.def.shape,!1)},{keyof(){return _enum(Object.keys(this._zod.def.shape))},catchall(catchall){return this.clone(mergeDefs(this._zod.def,{catchall}))},passthrough(){return this.clone(mergeDefs(this._zod.def,{catchall:unknown()}))},loose(){return this.clone(mergeDefs(this._zod.def,{catchall:unknown()}))},strict(){return this.clone(mergeDefs(this._zod.def,{catchall:never()}))},strip(){return this.clone(mergeDefs(this._zod.def,{catchall:void 0}))},extend(incoming){return extend(this,incoming)},safeExtend(incoming){return safeExtend(this,incoming)},merge(other){return merge(this,other)},pick(mask){return pick(this,mask)},omit(mask){return omit(this,mask)},partial(...args){return partial(ZodOptional,this,args[0])},exactPartial(...args){return partial(ZodExactOptional,this,args[0],"exactPartial")},required(...args){return required(ZodNonOptional,this,args[0])}});function object(shape,params){let def={type:"object",shape:shape??{},...normalizeParams(params)};return new ZodObject(def)}var ZodUnion=$constructor("ZodUnion",(inst,def)=>{$ZodUnion.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>unionProcessor(inst,ctx,json,params),inst.options=def.options});function union(options,params){return new ZodUnion({type:"union",options,...normalizeParams(params)})}var ZodIntersection=$constructor("ZodIntersection",(inst,def)=>{$ZodIntersection.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>intersectionProcessor(inst,ctx,json,params)});function intersection(left,right){return new ZodIntersection({type:"intersection",left,right})}var ZodEnum=$constructor("ZodEnum",(inst,def)=>{$ZodEnum.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>enumProcessor(inst,ctx,json,params),inst.enum=def.entries,inst.options=[...inst._zod.values];let keys=new Set(Object.keys(def.entries));inst.extract=(values,params)=>{let newEntries={};for(let value of values)if(keys.has(value))newEntries[value]=def.entries[value];else throw Error(`Key ${value} not found in enum`);return new ZodEnum({...def,checks:[],...normalizeParams(params),entries:newEntries})},inst.exclude=(values,params)=>{let newEntries={...def.entries};for(let value of values)if(keys.has(value))delete newEntries[value];else throw Error(`Key ${value} not found in enum`);return new ZodEnum({...def,checks:[],...normalizeParams(params),entries:newEntries})}});function _enum(values,params){let entries=Array.isArray(values)?Object.fromEntries(values.map((v)=>[v,v])):values;return new ZodEnum({type:"enum",entries,...normalizeParams(params)})}var ZodLiteral=$constructor("ZodLiteral",(inst,def)=>{$ZodLiteral.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>literalProcessor(inst,ctx,json,params),inst.values=new Set(def.values),Object.defineProperty(inst,"value",{get(){if(def.values.length>1)throw Error("This schema contains multiple valid literal values. Use `.values` instead.");return def.values[0]}})});function literal(value,params){return new ZodLiteral({type:"literal",values:Array.isArray(value)?value:[value],...normalizeParams(params)})}var ZodTransform=$constructor("ZodTransform",(inst,def)=>{_ensureDefaultMemoizer(),$ZodTransform.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>transformProcessor(inst,ctx,json,params),inst._zod.parse=(payload,_ctx)=>{if(_ctx.direction==="backward")throw new $ZodEncodeError(inst.constructor.name);payload.addIssue=(issue2)=>{if(typeof issue2==="string")payload.issues.push(issue(issue2,payload.value,def));else{let _issue=issue2;if(_issue.fatal)_issue.continue=!1;if(_issue.code??(_issue.code="custom"),!("input"in _issue))_issue.input=payload.value;_issue.inst??(_issue.inst=inst),payload.issues.push(issue(_issue))}};let output=def.transform(payload.value,payload);if(output instanceof Promise)return output.then((output)=>(payload.value=output,payload));return payload.value=output,payload}});function transform(fn){return new ZodTransform({type:"transform",transform:fn})}var ZodOptional=$constructor("ZodOptional",(inst,def)=>{$ZodOptional.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>optionalProcessor(inst,ctx,json,params),inst.unwrap=()=>inst._zod.def.innerType});function optional(innerType){return new ZodOptional({type:"optional",innerType})}var ZodExactOptional=$constructor("ZodExactOptional",(inst,def)=>{$ZodExactOptional.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>optionalProcessor(inst,ctx,json,params),inst.unwrap=()=>inst._zod.def.innerType});function exactOptional(innerType){return new ZodExactOptional({type:"optional",innerType})}var ZodNullable=$constructor("ZodNullable",(inst,def)=>{$ZodNullable.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>nullableProcessor(inst,ctx,json,params),inst.unwrap=()=>inst._zod.def.innerType});function nullable(innerType){return new ZodNullable({type:"nullable",innerType})}var ZodDefault=$constructor("ZodDefault",(inst,def)=>{$ZodDefault.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>defaultProcessor(inst,ctx,json,params),inst.unwrap=()=>inst._zod.def.innerType,inst.removeDefault=inst.unwrap});function _default(innerType,defaultValue){return new ZodDefault({type:"default",innerType,get defaultValue(){return typeof defaultValue==="function"?defaultValue():shallowClone(defaultValue)}})}var ZodPrefault=$constructor("ZodPrefault",(inst,def)=>{$ZodPrefault.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>prefaultProcessor(inst,ctx,json,params),inst.unwrap=()=>inst._zod.def.innerType});function prefault(innerType,defaultValue){return new ZodPrefault({type:"prefault",innerType,get defaultValue(){return typeof defaultValue==="function"?defaultValue():shallowClone(defaultValue)}})}var ZodNonOptional=$constructor("ZodNonOptional",(inst,def)=>{$ZodNonOptional.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>nonoptionalProcessor(inst,ctx,json,params),inst.unwrap=()=>inst._zod.def.innerType});function nonoptional(innerType,params){return new ZodNonOptional({type:"nonoptional",innerType,...normalizeParams(params)})}var ZodCatch=$constructor("ZodCatch",(inst,def)=>{$ZodCatch.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>catchProcessor(inst,ctx,json,params),inst.unwrap=()=>inst._zod.def.innerType,inst.removeCatch=inst.unwrap});function _catch(innerType,catchValue){return new ZodCatch({type:"catch",innerType,catchValue:typeof catchValue==="function"?catchValue:constantCatch(catchValue)})}var ZodPipe=$constructor("ZodPipe",(inst,def)=>{$ZodPipe.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>pipeProcessor(inst,ctx,json,params),inst.in=def.in,inst.out=def.out});function pipe(in_,out){return new ZodPipe({type:"pipe",in:in_,out})}var ZodReadonly=$constructor("ZodReadonly",(inst,def)=>{$ZodReadonly.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>readonlyProcessor(inst,ctx,json,params),inst.unwrap=()=>inst._zod.def.innerType});function readonly(innerType){return new ZodReadonly({type:"readonly",innerType})}var ZodCustom=$constructor("ZodCustom",(inst,def)=>{$ZodCustom.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>customProcessor(inst,ctx,json,params)});function refine(fn,_params={}){return _refine(ZodCustom,fn,_params)}function superRefine(fn,params){return _superRefine(fn,params)}import{stripVTControlCharacters as stripVTControlCharacters4}from"node:util";function terminalText(value){return stripVTControlCharacters4(value).replace(/[\p{C}\p{Zl}\p{Zp}]/gu,"")}class SignInError extends Error{retryable;name="SignInError";constructor(message,retryable=!1){super(message);this.retryable=retryable}}class RequestFailure extends SignInError{notSent;constructor(notSent){super("Unable to complete the service request. Check the connection and retry.",!0);this.notSent=notSent}}var platformSchema=_enum(["macos","linux","windows"]),nonempty=string2().min(1),timestamp=string2().datetime({offset:!0}),tokenSchema=object({accessToken:nonempty,accessTokenExpiresAt:timestamp,refreshToken:nonempty}),grantSchema=tokenSchema.extend({device:object({id:nonempty,name:nonempty}),offlineGrant:nonempty.optional()}),credentialSchema=grantSchema.extend({signingPrivateKey:nonempty,sealingPrivateKey:nonempty,refreshState:literal("uncertain").optional()}),deviceCodeSchema=object({deviceCode:string2().regex(/^dc\.[A-Za-z0-9_-]{43}$/),userCode:string2().regex(/^[BCDFGHJKLMNPQRSTVWXZ]{4}-[BCDFGHJKLMNPQRSTVWXZ]{4}$/),matchingCode:string2().regex(/^\d{3} \d{3}$/),verificationUri:string2().transform(terminalText).pipe(string2().url()),expiresAt:timestamp,intervalSeconds:number2().int().min(1).max(60)}),envelopeSchema=object({error:object({code:nonempty,message:string2(),retryable:boolean2(),requestId:string2(),detail:unknown().optional()})}),limitSchema=object({reason:literal("device_limit"),managementToken:nonempty,used:number2().int().nonnegative(),limit:number2().int().nonnegative()}),deviceListSchema=object({devices:array(object({id:nonempty,name:nonempty,revokedAt:timestamp.nullable()}))});class ApiRefusal extends SignInError{status;code;#detail;#retryAfter;constructor(code,status,detail,retryAfter=null){super("The service refused this request. Sign in again or check your account.",status===429||status>=500);this.status=status;this.code=["unauthorized","account_deleted","reauth_required","invalid_grant","entitlement_required","authorization_pending","slow_down","access_denied","expired_token","rate_limited","internal","unavailable","forbidden","invalid_request","not_found"].includes(code)?code:"unknown",this.#detail=detail,this.#retryAfter=retryAfter}get detail(){return this.#detail}retryDelay(now,fallback){let raw=this.#retryAfter,delay=raw===null?Number.NaN:/^\d+$/.test(raw)?Number(raw)*1000:Date.parse(raw)-now;return Math.min(60000,Math.max(fallback,Number.isFinite(delay)?delay:fallback))}}function parseReply(schema,value){let result=schema.safeParse(value);if(!result.success)throw new SignInError("The service returned an invalid response.");return result.data}function serviceOrigin(value){let url;try{url=new URL(value)}catch{throw new SignInError("Invalid service URL.")}let loopback=url.protocol==="http:"&&url.hostname==="127.0.0.1"&&url.port!=="";if(url.protocol!=="https:"&&!loopback||url.username||url.password||url.search||url.hash||url.pathname!=="/")throw new SignInError("Service URLs must be HTTPS origins, or http://127.0.0.1:<port> for local testing.");return url.origin}async function requestApi(api,path,init,signal){let response,body;try{response=await fetch(`${api}${path}`,{...init,redirect:"error",signal:signal?AbortSignal.any([signal,AbortSignal.timeout(30000)]):AbortSignal.timeout(30000)})}catch(error){let cause=error instanceof Error&&error.cause instanceof Error?error.cause:error,code=cause instanceof Error?Reflect.get(cause,"code"):void 0;throw new RequestFailure(typeof code==="string"&&["ENOTFOUND","ECONNREFUSED","ENETUNREACH","EHOSTUNREACH","EAI_AGAIN","ConnectionRefused","EADDRNOTAVAIL","ENETDOWN","EHOSTDOWN","UND_ERR_CONNECT_TIMEOUT","ERR_TLS_HANDSHAKE_TIMEOUT","DEPTH_ZERO_SELF_SIGNED_CERT","CERT_HAS_EXPIRED","ERR_TLS_CERT_ALTNAME_INVALID","UNABLE_TO_VERIFY_LEAF_SIGNATURE","SELF_SIGNED_CERT_IN_CHAIN","CERT_NOT_YET_VALID","UNABLE_TO_GET_ISSUER_CERT","UNABLE_TO_GET_ISSUER_CERT_LOCALLY","CERT_SIGNATURE_FAILURE","CERT_UNTRUSTED","CERT_REJECTED"].includes(code))}if(response.status===204)return null;try{body=await response.json()}catch{throw new RequestFailure(!1)}if(response.ok)return body;let envelope=envelopeSchema.safeParse(body);if(!envelope.success)throw new SignInError("The service returned an invalid error response.");let error=envelope.data.error,detail=limitSchema.safeParse(error.detail);throw new ApiRefusal(error.code,response.status,error.code==="entitlement_required"&&detail.success?detail.data:void 0,response.headers.get("retry-after"))}var jsonRequest=(body)=>({method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(body)});function deviceName(host=hostname()){return[...`omo CLI on ${host}`.replace(/[\p{Cc}\p{Zl}\p{Zp}\p{Cf}\u3164\u115F\u1160\uFFA0]/gu,"").trim()].slice(0,64).join("").trim()}function devicePlatform(){switch(process.platform){case"darwin":return"macos";case"linux":return"linux";case"win32":return"windows";default:throw new SignInError("This platform is not supported for OmO sign-in.")}}import{setTimeout as setTimeout2}from"node:timers/promises";import{generateKeyPairSync}from"node:crypto";function generateDeviceKeys(){let signing=generateKeyPairSync("ed25519"),sealing=generateKeyPairSync("x25519"),signingKey=signing.publicKey.export({format:"jwk"}).x,sealingKey=sealing.publicKey.export({format:"jwk"}).x;if(!signingKey||!sealingKey)throw new SignInError("Unable to generate device keys.");return{public:{signingKey,sealingKey},private:{signingPrivateKey:signing.privateKey.export({format:"der",type:"pkcs8"}).toString("base64"),sealingPrivateKey:sealing.privateKey.export({format:"der",type:"pkcs8"}).toString("base64")}}}async function loginDevice(session,options){await session.ready();let keys=generateDeviceKeys(),minted=parseReply(deviceCodeSchema,await session.request("/v1/device/code",jsonRequest({client:{name:options.name,platform:options.platform}}))),uri=new URL(minted.verificationUri);if(uri.protocol!=="https:"&&!(uri.protocol==="http:"&&uri.hostname==="127.0.0.1"&&uri.port!==""))throw new SignInError("The service returned an unsafe verification URL.");options.show({verificationUri:minted.verificationUri,userCode:minted.userCode,matchingCode:minted.matchingCode});let now=options.now??Date.now,sleep=options.sleep??((ms)=>setTimeout2(ms,void 0,{signal:session.signal})),expiresAt=Date.parse(minted.expiresAt),interval=minted.intervalSeconds*1000;while(now()<expiresAt){if(await sleep(Math.min(interval,expiresAt-now())),session.signal?.throwIfAborted(),now()>=expiresAt)break;try{let grant=parseReply(grantSchema,await session.request("/v1/device/token",jsonRequest({deviceCode:minted.deviceCode,...keys.public})));await session.save({...grant,...keys.private});return}catch(error){if(!(error instanceof ApiRefusal))throw error;if(error.status===400&&error.code==="authorization_pending")continue;if(error.status===400&&error.code==="slow_down"){interval+=5000;continue}if(error.status===429){interval=error.retryDelay(now(),Math.min(60000,interval+5000));continue}if(error.detail!==void 0){if(await session.removeForLimit(error,options.chooseDevice))continue;throw new SignInError("Sign-in cancelled. No device was removed.")}if(["access_denied","expired_token","invalid_grant"].includes(error.code))throw new SignInError("Device sign-in was denied or expired. Run omo login again for a new code.");throw error}}throw new SignInError("Device sign-in expired. Run omo login again for a new code.")}import{createHash}from"node:crypto";function credentialId(api){return createHash("sha256").update(serviceOrigin(api)).digest("hex")}function createCredentialStore(api,secrets=typeof Bun>"u"?null:Bun.secrets,platform=process.platform){if(!secrets)throw new SignInError("OmO sign-in needs Bun 1.4 or newer with OS credential storage. No file fallback is available.");let platformName=platform==="darwin"?"macOS Keychain":platform==="linux"?"Linux Secret Service (libsecret and an unlocked keyring)":platform==="win32"?"Windows Credential Manager":null;if(platformName===null)throw new SignInError("This platform has no supported OS credential store.");let key={service:"omo-cli",name:credentialId(api)},unavailable=()=>new SignInError(`Cannot access ${platformName}. Unlock or enable the OS credential store and try again. Credentials are never saved to a file.`);return{async read(){let value;try{value=await secrets.get(key)}catch{throw unavailable()}if(value===null)return null;try{return credentialSchema.parse(JSON.parse(value))}catch{throw new SignInError("Stored sign-in data is invalid. Run omo logout, then omo login.")}},async write(value){try{await secrets.set({...key,value:JSON.stringify(credentialSchema.parse(value))})}catch{throw unavailable()}},async clear(){try{await secrets.delete(key)}catch{throw unavailable()}}}}import{createHash as createHash2,randomBytes,timingSafeEqual}from"node:crypto";import{createServer}from"node:http";class BrowserUnavailable extends SignInError{}async function authorize(options){let verifier=randomBytes(32).toString("base64url"),state=randomBytes(32).toString("base64url"),answer=Promise.withResolvers(),abort=()=>answer.reject(new SignInError("Browser sign-in cancelled or timed out.")),accepted=!1,origin="",server=createServer((request,response)=>{response.setHeader("cache-control","no-store"),response.setHeader("referrer-policy","no-referrer"),response.setHeader("content-type","text/plain; charset=utf-8");let url=new URL(request.url??"/",origin);if(request.method!=="GET"||request.headers.host!==new URL(origin).host||url.origin!==origin||url.pathname!=="/callback"||request.headers.forwarded||request.headers["x-forwarded-for"]){response.writeHead(404).end("Not found");return}let code=url.searchParams.get("code"),suppliedState=Buffer.from(url.searchParams.get("state")??""),expectedState=Buffer.from(state);if(accepted||url.searchParams.getAll("state").length!==1||suppliedState.length!==expectedState.length||!timingSafeEqual(suppliedState,expectedState)||url.searchParams.getAll("code").length!==1||!code){response.writeHead(400).end("Invalid sign-in response");return}accepted=!0,response.writeHead(200).end("Return to the terminal to finish signing in."),answer.resolve(code)});try{await new Promise((resolve,reject)=>{server.once("error",reject),server.listen(0,"127.0.0.1",()=>{server.off("error",reject),resolve()})});let address=server.address();if(!address||typeof address==="string")throw new SignInError("Unable to start the sign-in callback.");origin=`http://127.0.0.1:${address.port}`;let url=new URL(serviceOrigin(options.accounts));url.search=new URLSearchParams({redirect_uri:`${origin}/callback`,code_challenge:createHash2("sha256").update(verifier).digest("base64url"),code_challenge_method:"S256",state}).toString();let timer=setTimeout(abort,300000);options.signal?.addEventListener("abort",abort,{once:!0});try{options.signal?.throwIfAborted();let openerFailed=()=>{if(!accepted)throw new BrowserUnavailable("No browser is available; use device sign-in.")},[code]=await Promise.all([answer.promise,options.open(url.href).then((opened)=>{if(!opened)openerFailed()},openerFailed)]);return{code,codeVerifier:verifier}}finally{clearTimeout(timer),options.signal?.removeEventListener("abort",abort)}}finally{server.closeAllConnections(),await new Promise((resolve)=>server.close(()=>resolve()))}}async function loginLoopback(session,options){await session.ready();let keys=generateDeviceKeys();for(;;){let authorization=await authorize({accounts:options.accounts,open:options.open,signal:session.signal});try{let grant=parseReply(grantSchema,await session.request("/v1/session/exchange",jsonRequest({...authorization,kind:"cli",deviceName:options.name,platform:options.platform,...keys.public})));await session.save({...grant,...keys.private});return}catch(error){if(await session.removeForLimit(error,options.chooseDevice))continue;throw new SignInError("Sign-in cancelled. No device was removed.")}}}import{mkdir}from"node:fs/promises";import{homedir}from"node:os";import{join}from"node:path";import{access,open as open2,unlink}from"node:fs/promises";import{dirname}from"node:path";import{randomUUID}from"node:crypto";import{readFile,stat}from"node:fs/promises";var lockOwnerInstanceId=randomUUID(),heldLockRecords=new Set;function buildLockRecord(ownerTag){return`${ownerTag} ${randomUUID()}
115
+ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.`)}for(let entry of ctx.seen.entries()){let seen=entry[1];if(schema===entry[0]){extractToDef(entry);continue}if(ctx.external){let ext=ctx.external.registry.get(entry[0])?.id;if(schema!==entry[0]&&ext){extractToDef(entry);continue}}if(ctx.metadataRegistry.get(entry[0])?.id){extractToDef(entry);continue}if(seen.cycle){extractToDef(entry);continue}if(seen.count>1){if(ctx.reused==="ref")extractToDef(entry)}}if(ctx.external)ctx.sharedDefsExtractedFor=ctx.external}function compactTypeUnion(schema){let options=schema.anyOf;if(!Array.isArray(options)||options.length===0||schema.type!==void 0)return;let types=[];for(let option of options){if(!option||typeof option!=="object")return;compactTypeUnion(option);let keys=Object.keys(option);if(keys.length!==1||keys[0]!=="type")return;let type=option.type;for(let member of Array.isArray(type)?type:[type]){if(typeof member!=="string")return;if(!types.includes(member))types.push(member)}}delete schema.anyOf,schema.type=types.length===1?types[0]:types}var FOLDABLE_KEYS=new Set(["type","properties","required","additionalProperties"]),UNION_KEYS=["oneOf","anyOf"];function undeclaredConstraint(member){let extra=member.additionalProperties;if(extra===void 0||extra===!1||typeof extra!=="object"||extra===null)return null;return Object.keys(extra).length?extra:null}function foldObjects(members){let objects=[];for(let member of members){if(typeof member!=="object"||member.type!=="object")return null;for(let key in member)if(!FOLDABLE_KEYS.has(key))return null;objects.push(member)}let properties={},required=new Set;for(let object of objects){for(let key in object.properties){if(Object.prototype.hasOwnProperty.call(properties,key))continue;let parts=[];for(let other of objects){let part=other.properties?.[key]??undeclaredConstraint(other);if(part===null||part===void 0)continue;if(!parts.some((seen)=>JSON.stringify(seen)===JSON.stringify(part)))parts.push(part)}let merged=parts.length===1?parts[0]:foldObjects(parts)??{allOf:parts};assignProp(properties,key,merged)}for(let key of object.required??[])required.add(key)}let folded={type:"object",properties};if(required.size)folded.required=[...required];if(objects.every((object)=>object.additionalProperties===!1))folded.additionalProperties=!1;else{let constraints=[];for(let object of objects){let constraint=undeclaredConstraint(object);if(constraint&&!constraints.some((seen)=>JSON.stringify(seen)===JSON.stringify(constraint)))constraints.push(constraint)}if(constraints.length===1)folded.additionalProperties=constraints[0];else if(constraints.length>1)folded.additionalProperties={allOf:constraints}}return folded}function foldIntersection(json){let allOf=json.allOf;if(!Array.isArray(allOf)||allOf.length<2)return;for(let key of FOLDABLE_KEYS)if(key in json)return;let unions=allOf.filter((m)=>UNION_KEYS.some((k)=>Array.isArray(m[k]))),folded=null;if(!unions.length)folded=foldObjects(allOf);else{let union=unions[0],keyword=UNION_KEYS.find((k)=>Array.isArray(union[k]));if(Object.keys(union).length!==1)return;let rest=allOf.filter((m)=>m!==union),branches=union[keyword].map((branch)=>foldObjects([...rest,branch]));if(branches.some((b)=>!b))return;folded={[keyword]:branches}}if(!folded)return;delete json.allOf,assignProps(json,folded)}function finalize(ctx,schema){let root=ctx.seen.get(schema);if(!root)throw Error("Unprocessed schema. This is a bug in Zod.");let flattenRef=(zodSchema)=>{let seen=ctx.seen.get(zodSchema);if(seen.ref===null)return;let schema=seen.def??seen.schema,_cached={...schema},ref=seen.ref;if(seen.ref=null,ref){flattenRef(ref);let refSeen=ctx.seen.get(ref),refSchema=refSeen.schema;if(refSchema.$ref&&(ctx.target==="draft-07"||ctx.target==="draft-04"||ctx.target==="openapi-3.0"))schema.allOf=schema.allOf??[],schema.allOf.push(refSchema);else assignProps(schema,refSchema);if(assignProps(schema,_cached),zodSchema._zod.parent===ref)for(let key in schema){if(key==="$ref"||key==="allOf")continue;if(!(key in _cached))delete schema[key]}if(refSchema.$ref&&refSeen.def)for(let key in schema){if(key==="$ref"||key==="allOf")continue;if(key in refSeen.def&&JSON.stringify(schema[key])===JSON.stringify(refSeen.def[key]))delete schema[key]}}let parent=zodSchema._zod.parent;if(parent&&parent!==ref){flattenRef(parent);let parentSeen=ctx.seen.get(parent);if(parentSeen?.schema.$ref){if(schema.$ref=parentSeen.schema.$ref,parentSeen.def)for(let key in schema){if(key==="$ref"||key==="allOf")continue;if(key in parentSeen.def&&JSON.stringify(schema[key])===JSON.stringify(parentSeen.def[key]))delete schema[key]}}}ctx.override({zodSchema,jsonSchema:schema,path:seen.path??[]})};if(!ctx.external||ctx.sharedEmitDoneFor!==ctx.external){for(let entry of[...ctx.seen.entries()].reverse())flattenRef(entry[0]);if(ctx.target!=="openapi-3.0")for(let entry of ctx.seen.entries())compactTypeUnion(entry[1].def??entry[1].schema);for(let rewrite of ctx.deferred)rewrite();if(ctx.intersections.length){let carriers=new Map;for(let seen of ctx.seen.values())for(let json of[seen.schema,seen.def]){let allOf=json?.allOf;if(!Array.isArray(allOf))continue;let existing=carriers.get(allOf);if(existing)existing.push(json);else carriers.set(allOf,[json])}for(let allOf of ctx.intersections)for(let json of carriers.get(allOf)??[])foldIntersection(json)}}let result={};if(ctx.target==="draft-2020-12")result.$schema="https://json-schema.org/draft/2020-12/schema";else if(ctx.target==="draft-07")result.$schema="http://json-schema.org/draft-07/schema#";else if(ctx.target==="draft-04")result.$schema="http://json-schema.org/draft-04/schema#";else if(ctx.target==="openapi-3.0");if(ctx.external?.uri){let id=ctx.external.registry.get(schema)?.id;if(!id)throw Error("Schema is missing an `id` property");result.$id=ctx.external.uri(id)}assignProps(result,root.defId?root.schema:root.def??root.schema);let rootMetaId=ctx.metadataRegistry.get(schema)?.id;if(rootMetaId!==void 0&&result.id===rootMetaId)delete result.id;let defs=ctx.external?.defs??{};if(!ctx.external||ctx.sharedEmitDoneFor!==ctx.external)for(let entry of ctx.seen.entries()){let seen=entry[1];if(seen.def&&seen.defId){if(seen.def.id===seen.defId)delete seen.def.id;assignProp(defs,seen.defId,seen.def)}}if(ctx.external)ctx.sharedEmitDoneFor=ctx.external;if(ctx.external);else if(Object.keys(defs).length>0)if(ctx.target==="draft-2020-12")result.$defs=defs;else result.definitions=defs;try{let finalized=JSON.parse(JSON.stringify(result));return Object.defineProperty(finalized,"~standard",{value:{...schema["~standard"],jsonSchema:{input:createStandardJSONSchemaMethod(schema,"input",ctx.processors),output:createStandardJSONSchemaMethod(schema,"output",ctx.processors)}},enumerable:!1,writable:!1}),finalized}catch(_err){throw Error("Error converting schema to JSON.")}}function isTransforming(_schema,_ctx){let ctx=_ctx??{seen:new Set};if(ctx.seen.has(_schema))return!1;ctx.seen.add(_schema);let def=_schema._zod.def;if(def.type==="transform")return!0;if(def.type==="array")return isTransforming(def.element,ctx);if(def.type==="set")return isTransforming(def.valueType,ctx);if(def.type==="lazy")return isTransforming(def.getter(),ctx);if(def.type==="promise"||def.type==="optional"||def.type==="nonoptional"||def.type==="nullable"||def.type==="readonly"||def.type==="default"||def.type==="prefault"||def.type==="catch")return isTransforming(def.innerType,ctx);if(def.type==="intersection")return isTransforming(def.left,ctx)||isTransforming(def.right,ctx);if(def.type==="record"||def.type==="map")return isTransforming(def.keyType,ctx)||isTransforming(def.valueType,ctx);if(def.type==="pipe"){if(_schema._zod.traits.has("$ZodCodec"))return!0;return isTransforming(def.in,ctx)||isTransforming(def.out,ctx)}if(def.type==="object"){for(let key in def.shape)if(isTransforming(def.shape[key],ctx))return!0;return!1}if(def.type==="union"){for(let option of def.options)if(isTransforming(option,ctx))return!0;return!1}if(def.type==="tuple"){for(let item of def.items)if(isTransforming(item,ctx))return!0;if(def.rest&&isTransforming(def.rest,ctx))return!0;return!1}return!1}var createToJSONSchemaMethod=(schema,processors={})=>(params)=>{let ctx=initializeContext({...params,processors});return processSchema(schema,ctx),extractDefs(ctx,schema),finalize(ctx,schema)},createStandardJSONSchemaMethod=(schema,io,processors={})=>(params)=>{let{libraryOptions,target}=params??{},ctx=initializeContext({...libraryOptions??{},target,io,processors});return processSchema(schema,ctx),extractDefs(ctx,schema),finalize(ctx,schema)};var narrowMin=(agg,key,value)=>{if(agg[key]===void 0||value>agg[key])agg[key]=value},narrowMax=(agg,key,value)=>{if(agg[key]===void 0||value<agg[key])agg[key]=value},narrowBoth=(agg,value)=>{narrowMin(agg,"minimum",value),narrowMax(agg,"maximum",value)},addDivisor=(agg,value)=>{if(agg.multipleOf??(agg.multipleOf=[]),!agg.multipleOf.includes(value))agg.multipleOf.push(value)},addPattern=(agg,pattern)=>{agg.patterns??(agg.patterns=new Set),agg.patterns.add(pattern)},intersectMime=(agg,mime)=>{agg.mime=agg.mime?agg.mime.filter((m)=>mime.includes(m)):[...mime]},setFormat=(agg,format)=>{if(agg.format=format,format.includes("int"))agg.isInt=!0},minContributor=(agg,def)=>narrowMin(agg,"minimum",def.minimum),maxContributor=(agg,def)=>narrowMax(agg,"maximum",def.maximum),formatContributor=(ranges)=>(agg,def)=>{setFormat(agg,def.format);let[minimum,maximum]=ranges[def.format];narrowMin(agg,"minimum",minimum),narrowMax(agg,"maximum",maximum)},contributors={greater_than:(agg,def)=>narrowMin(agg,def.inclusive?"minimum":"exclusiveMinimum",def.value),less_than:(agg,def)=>narrowMax(agg,def.inclusive?"maximum":"exclusiveMaximum",def.value),multiple_of:(agg,def)=>addDivisor(agg,def.value),number_format:formatContributor(NUMBER_FORMAT_RANGES),bigint_format:formatContributor(BIGINT_FORMAT_RANGES),min_length:minContributor,max_length:maxContributor,length_equals:(agg,def)=>narrowBoth(agg,def.length),min_size:minContributor,max_size:maxContributor,size_equals:(agg,def)=>narrowBoth(agg,def.size),string_format:(agg,def)=>{if(setFormat(agg,def.format),def.pattern)addPattern(agg,def.pattern);if(def.format==="base64"||def.format==="base64url")agg.contentEncoding=def.format;if(def.local||def.precision===-1)agg.laxFormat=!0},mime_type:(agg,def)=>intersectMime(agg,def.mime)};function aggregateChecks(schema){let agg={},def=schema._zod.def,list=schema._zod.traits.has("$ZodCheck")?[schema,...def.checks??[]]:def.checks??[];for(let ch of list)contributors[ch._zod.def.check]?.(agg,ch._zod.def);let bag=schema._zod.bag;if(bag.minimum!==void 0)narrowMin(agg,"minimum",bag.minimum);if(bag.exclusiveMinimum!==void 0)narrowMin(agg,"exclusiveMinimum",bag.exclusiveMinimum);if(bag.maximum!==void 0)narrowMax(agg,"maximum",bag.maximum);if(bag.exclusiveMaximum!==void 0)narrowMax(agg,"exclusiveMaximum",bag.exclusiveMaximum);if(bag.multipleOf!==void 0)addDivisor(agg,bag.multipleOf);if(bag.format!==void 0){if(agg.format??(agg.format=bag.format),bag.format.includes("int"))agg.isInt=!0}if(bag.mime)intersectMime(agg,bag.mime);for(let pattern of bag.patterns??[])addPattern(agg,pattern);return agg}var formatMap={guid:"uuid",url:"uri",datetime:"date-time",json_string:"json-string",regex:""},exactPatterns=new Map([[base64Charset,base64],[base64urlCharset,base64url]]),exactPattern=(p)=>exactPatterns.get(p)??p,stringProcessor=(schema,ctx,_json,_params)=>{let json=_json;json.type="string";let{minimum,maximum,format,patterns,contentEncoding,laxFormat}=aggregateChecks(schema);if(typeof minimum==="number")json.minLength=minimum;if(typeof maximum==="number")json.maxLength=maximum;if(format){if(json.format=formatMap[format]??format,json.format==="")delete json.format;if(format==="time"||laxFormat)delete json.format}if(contentEncoding)json.contentEncoding=contentEncoding;if(patterns&&patterns.size>0){let patternList=[...patterns].map(exactPattern);if(patternList.length===1)json.pattern=patternList[0].source;else if(patternList.length>1)json.allOf=[...patternList.map((regex)=>({...ctx.target==="draft-07"||ctx.target==="draft-04"||ctx.target==="openapi-3.0"?{type:"string"}:{},pattern:regex.source}))]}},numberProcessor=(schema,ctx,_json,params)=>{let json=_json,{minimum,maximum,multipleOf,exclusiveMaximum,exclusiveMinimum,isInt}=aggregateChecks(schema);json.type=isInt?"integer":"number";let exMin=typeof exclusiveMinimum==="number"&&exclusiveMinimum>=(minimum??Number.NEGATIVE_INFINITY),exMax=typeof exclusiveMaximum==="number"&&exclusiveMaximum<=(maximum??Number.POSITIVE_INFINITY),legacy=ctx.target==="draft-04"||ctx.target==="openapi-3.0";if(exMin)if(legacy)json.minimum=exclusiveMinimum,json.exclusiveMinimum=!0;else json.exclusiveMinimum=exclusiveMinimum;else if(typeof minimum==="number")json.minimum=minimum;if(exMax)if(legacy)json.maximum=exclusiveMaximum,json.exclusiveMaximum=!0;else json.exclusiveMaximum=exclusiveMaximum;else if(typeof maximum==="number")json.maximum=maximum;if(multipleOf){let divisors=new Set;for(let divisor of multipleOf)if(Number.isFinite(divisor)&&divisor!==0)divisors.add(Math.abs(divisor));else handleUnrepresentable(schema,ctx,json,params,`A multipleOf divisor of ${divisor} cannot be represented in JSON Schema`);let[first,...rest]=divisors;if(first!==void 0)json.multipleOf=first;if(rest.length)json.allOf=[...json.allOf??[],...rest.map((m)=>({multipleOf:m}))]}},booleanProcessor=(_schema,_ctx,json,_params)=>{json.type="boolean"};var neverProcessor=(_schema,_ctx,json,_params)=>{json.not={}};var unknownProcessor=(_schema,_ctx,_json,_params)=>{};var enumProcessor=(schema,_ctx,json,_params)=>{let def=schema._zod.def,values=getEnumValues(def.entries);if(values.length===0){json.not={};return}if(values.every((v)=>typeof v==="number"))json.type="number";if(values.every((v)=>typeof v==="string"))json.type="string";json.enum=values},literalProcessor=(schema,ctx,json,params)=>{let def=schema._zod.def;if(def.values.length===0){json.not={};return}let vals=[];for(let val of def.values)if(val===void 0){if(handleUnrepresentable(schema,ctx,json,params,"Literal `undefined` cannot be represented in JSON Schema"))return}else if(typeof val==="bigint"){if(handleUnrepresentable(schema,ctx,json,params,"BigInt literals cannot be represented in JSON Schema"))return;vals.push(Number(val))}else vals.push(val);if(vals.length===0);else if(vals.length===1){let val=vals[0];if(json.type=val===null?"null":typeof val,ctx.target==="draft-04"||ctx.target==="openapi-3.0")json.enum=[val];else json.const=val}else{if(vals.every((v)=>typeof v==="number"))json.type="number";if(vals.every((v)=>typeof v==="string"))json.type="string";if(vals.every((v)=>typeof v==="boolean"))json.type="boolean";if(vals.every((v)=>v===null))json.type="null";json.enum=vals}};var customProcessor=(schema,ctx,json,params)=>{handleUnrepresentable(schema,ctx,json,params,"Custom types cannot be represented in JSON Schema")};var transformProcessor=(schema,ctx,json,params)=>{handleUnrepresentable(schema,ctx,json,params,"Transforms cannot be represented in JSON Schema")};var arrayProcessor=(schema,ctx,_json,params)=>{let json=_json,def=schema._zod.def,{minimum,maximum}=aggregateChecks(schema);if(typeof minimum==="number")json.minItems=minimum;if(typeof maximum==="number")json.maxItems=maximum;json.type="array",json.items=processSchema(def.element,ctx,{...params,path:[...params.path,"items"]})};function inputOptin(schema){let def=schema._zod.def;if(def.type==="pipe"&&def.in._zod.traits.has("$ZodTransform"))return inputOptin(def.out);if(def.type==="catch")return inputOptin(def.innerType);return schema._zod.optin}var objectProcessor=(schema,ctx,_json,params)=>{let json=_json,def=schema._zod.def,shape=def.shape;if(Object.getOwnPropertySymbols(shape).length&&handleUnrepresentable(schema,ctx,json,params,"Symbol keys cannot be represented in JSON Schema"))return;json.type="object",json.properties={};for(let key in shape)assignProp(json.properties,key,processSchema(shape[key],ctx,{...params,path:[...params.path,"properties",key]}));let requiredKeys=[];for(let key of Object.keys(shape)){let field=def.shape[key];if(ctx.io==="input"?inputOptin(field)===void 0:field._zod.optout===void 0)requiredKeys.push(key)}if(requiredKeys.length>0)json.required=requiredKeys;if(def.catchall?._zod.def.type==="never")json.additionalProperties=!1;else if(!def.catchall){if(ctx.io==="output")json.additionalProperties=!1}else if(def.catchall)json.additionalProperties=processSchema(def.catchall,ctx,{...params,path:[...params.path,"additionalProperties"]})},unionProcessor=(schema,ctx,json,params)=>{let def=schema._zod.def,isExclusive=def.inclusive===!1,options=def.options.map((x,i)=>processSchema(x,ctx,{...params,path:[...params.path,isExclusive?"oneOf":"anyOf",i]}));if(isExclusive)json.oneOf=options;else json.anyOf=options},intersectionProcessor=(schema,ctx,json,params)=>{let def=schema._zod.def,a=processSchema(def.left,ctx,{...params,path:[...params.path,"allOf",0]}),b=processSchema(def.right,ctx,{...params,path:[...params.path,"allOf",1]}),isSimpleIntersection=(val)=>("allOf"in val)&&Object.keys(val).length===1,allOf=[...isSimpleIntersection(a)?a.allOf:[a],...isSimpleIntersection(b)?b.allOf:[b]];json.allOf=allOf,ctx.intersections.push(allOf)};var nullableProcessor=(schema,ctx,json,params)=>{let def=schema._zod.def,inner=processSchema(def.innerType,ctx,params),seen=ctx.seen.get(schema);if(ctx.target==="openapi-3.0")seen.ref=def.innerType,json.nullable=!0;else json.anyOf=[inner,{type:"null"}]},nonoptionalProcessor=(schema,ctx,_json,params)=>{let def=schema._zod.def;processSchema(def.innerType,ctx,params);let seen=ctx.seen.get(schema);seen.ref=def.innerType},UNREPRESENTABLE_DEFAULT=Symbol();function serializeDefaultValue(value,schema,ctx,json,params){let unrepresentable=!1,serialized=JSON.stringify(value,(_,val)=>{if(typeof val!=="bigint")return val;return unrepresentable=!0,null});if(!unrepresentable)return JSON.parse(serialized);return handleUnrepresentable(schema,ctx,json,params,"BigInt defaults cannot be represented in JSON Schema"),UNREPRESENTABLE_DEFAULT}var defaultProcessor=(schema,ctx,json,params)=>{let def=schema._zod.def;processSchema(def.innerType,ctx,params);let seen=ctx.seen.get(schema);seen.ref=def.innerType;let value=serializeDefaultValue(def.defaultValue,schema,ctx,json,params);if(value!==UNREPRESENTABLE_DEFAULT)json.default=value},prefaultProcessor=(schema,ctx,json,params)=>{let def=schema._zod.def;processSchema(def.innerType,ctx,params);let seen=ctx.seen.get(schema);if(seen.ref=def.innerType,ctx.io!=="input")return;let value=serializeDefaultValue(def.defaultValue,schema,ctx,json,params);if(value!==UNREPRESENTABLE_DEFAULT)json._prefault=value},catchProcessor=(schema,ctx,json,params)=>{let def=schema._zod.def;processSchema(def.innerType,ctx,params);let seen=ctx.seen.get(schema);seen.ref=def.innerType;let catchValue;try{catchValue=def.catchValue(void 0)}catch{handleUnrepresentable(schema,ctx,json,params,"Dynamic catch values are not supported in JSON Schema");return}json.default=catchValue},pipeProcessor=(schema,ctx,_json,params)=>{let def=schema._zod.def,inIsTransform=def.in._zod.traits.has("$ZodTransform"),innerType=ctx.io==="input"?inIsTransform?def.out:def.in:def.out;processSchema(innerType,ctx,params);let seen=ctx.seen.get(schema);seen.ref=innerType},readonlyProcessor=(schema,ctx,json,params)=>{let def=schema._zod.def;processSchema(def.innerType,ctx,params);let seen=ctx.seen.get(schema);seen.ref=def.innerType,json.readOnly=!0};var optionalProcessor=(schema,ctx,_json,params)=>{let def=schema._zod.def;processSchema(def.innerType,ctx,params);let seen=ctx.seen.get(schema);seen.ref=def.innerType};var _installedErrorProtos=new WeakSet([Object.prototype,Error.prototype]);function _lazyMethod(proto,key,make){Object.defineProperty(proto,key,{configurable:!0,enumerable:!1,get(){let value=make(this);return Object.defineProperty(this,key,{value,configurable:!0,writable:!0}),value},set(value){Object.defineProperty(this,key,{value,configurable:!0,writable:!0})}})}var initializer2=(inst,issues)=>{$ZodError.init(inst,issues),inst.name="ZodError";let proto=Object.getPrototypeOf(inst);if(_installedErrorProtos.has(proto))return;_installedErrorProtos.add(proto),_lazyMethod(proto,"format",(self)=>(mapper)=>formatError(self,mapper)),_lazyMethod(proto,"flatten",(self)=>(mapper)=>flattenError(self,mapper)),_lazyMethod(proto,"addIssue",(self)=>(issue)=>{self.issues.push(issue),self.message=JSON.stringify(self.issues,jsonStringifyReplacer,2)}),_lazyMethod(proto,"addIssues",(self)=>(issues)=>{self.issues.push(...issues),self.message=JSON.stringify(self.issues,jsonStringifyReplacer,2)}),Object.defineProperty(proto,"isEmpty",{configurable:!0,enumerable:!1,get(){return this.issues.length===0}})};var ZodRealError=$constructor("ZodError",initializer2,void 0,{Parent:Error});var parse2=_parse(ZodRealError),parseAsync=_parseAsync(ZodRealError),safeParse=_safeParse(ZodRealError),safeParseAsync=_safeParseAsync(ZodRealError),encode=_encode(ZodRealError),decode=_decode(ZodRealError),encodeAsync=_encodeAsync(ZodRealError),decodeAsync=_decodeAsync(ZodRealError),safeEncode=_safeEncode(ZodRealError),safeDecode=_safeDecode(ZodRealError),safeEncodeAsync=_safeEncodeAsync(ZodRealError),safeDecodeAsync=_safeDecodeAsync(ZodRealError);function _ensureDefaultLocale(){if(!globalConfig.localeError)config(en_default())}function _ensureDefaultMemoizer(){if(!globalConfig.memoizer)config({memoizer:memoizer()})}var ZodType=$constructor("ZodType",(inst,def)=>(_ensureDefaultLocale(),$ZodType.init(inst,def),inst.def=def,inst.type=def.type,inst),{check(...chks){let def=this.def;return this.clone(mergeDefs(def,{checks:[...def.checks??[],...chks.map((ch)=>typeof ch==="function"?{_zod:{check:ch,def:{check:"custom"},onattach:[]}}:ch)]}),{parent:!0})},with(...chks){return this.check(...chks)},clone(def,params){return clone(this,def,params)},brand(){return this},register(reg,meta){return reg.add(this,meta),this},refine(check,params){return this.check(refine(check,params))},superRefine(refinement,params){return this.check(superRefine(refinement,params))},overwrite(fn){return this.check(_overwrite(fn))},optional(){return optional(this)},exactOptional(){return exactOptional(this)},nullable(){return nullable(this)},nullish(){return optional(nullable(this))},nonoptional(params){return nonoptional(this,params)},array(){return array(this)},or(arg){return union([this,arg])},and(arg){return intersection(this,arg)},transform(tx){return pipe(this,transform(tx))},default(d){return _default(this,d)},prefault(d){return prefault(this,d)},catch(params){return _catch(this,params)},pipe(target){return pipe(this,target)},readonly(){return readonly(this)},describe(description){let cl=this.clone();return globalRegistry.add(cl,{description}),cl},meta(...args){if(args.length===0)return globalRegistry.get(this);let cl=this.clone();return globalRegistry.add(cl,args[0]),cl},isOptional(){return this.safeParse(void 0).success},isNullable(){return this.safeParse(null).success},apply(fn,...args){return args.length===0?fn(this):fn(this,...args)},get "~standard"(){return hide(this,"~standard",{...standardProps(this),jsonSchema:{input:createStandardJSONSchemaMethod(this,"input"),output:createStandardJSONSchemaMethod(this,"output")}})},set "~standard"(value){own(this,"~standard",value)},parse:function _parse(data,params){return parse2(this,data,params,{callee:_parse})},parseAsync:async function _parseAsync(data,params){return await parseAsync(this,data,params,{callee:_parseAsync})},safeParse(data,params){return safeParse(this,data,params)},async safeParseAsync(data,params){return safeParseAsync(this,data,params)},get spa(){return this?.safeParseAsync},set spa(value){own(this,"spa",value)},validate(data,params){return validate(this,data,params)},validateAsync(data,params){return validateAsync(this,data,params)},encode:function _encode(data,params){return encode(this,data,params,{callee:_encode})},decode:function _decode(data,params){return decode(this,data,params,{callee:_decode})},encodeAsync:async function _encodeAsync(data,params){return await encodeAsync(this,data,params,{callee:_encodeAsync})},decodeAsync:async function _decodeAsync(data,params){return await decodeAsync(this,data,params,{callee:_decodeAsync})},safeEncode(data,params){return safeEncode(this,data,params)},safeDecode(data,params){return safeDecode(this,data,params)},async safeEncodeAsync(data,params){return safeEncodeAsync(this,data,params)},async safeDecodeAsync(data,params){return safeDecodeAsync(this,data,params)},toJSONSchema(params){return createToJSONSchemaMethod(this,{})(params)},get description(){return globalRegistry.get(this)?.description},get _def(){return this._zod.def}}),_ZodString=$constructor("_ZodString",(inst,def)=>{$ZodString.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>stringProcessor(inst,ctx,json,params)},derived({format:(inst)=>aggregateChecks(inst).format??null,minLength:(inst)=>aggregateChecks(inst).minimum??null,maxLength:(inst)=>aggregateChecks(inst).maximum??null},{regex(...args){return this.check(_regex(...args))},includes(...args){return this.check(_includes(...args))},startsWith(...args){return this.check(_startsWith(...args))},endsWith(...args){return this.check(_endsWith(...args))},min(...args){return this.check(_minLength(...args))},max(...args){return this.check(_maxLength(...args))},length(...args){return this.check(_length(...args))},nonempty(...args){return this.check(_minLength(1,...args))},lowercase(params){return this.check(_lowercase(params))},uppercase(params){return this.check(_uppercase(params))},trim(){return this.check(_trim())},normalize(...args){return this.check(_normalize(...args))},toLowerCase(){return this.check(_toLowerCase())},toUpperCase(){return this.check(_toUpperCase())},slugify(){return this.check(_slugify())}})),ZodString=$constructor("ZodString",(inst,def)=>{$ZodString.init(inst,def),_ZodString.init(inst,def)},{email(params){return this.check(_email(ZodEmail,params))},url(params){return this.check(_url(ZodURL,params))},jwt(params){return this.check(_jwt(ZodJWT,params))},emoji(params){return this.check(_emoji2(ZodEmoji,params))},guid(params){return this.check(_guid(ZodGUID,params))},uuid(params){return this.check(_uuid(ZodUUID,params))},uuidv4(params){return this.check(_uuidv4(ZodUUID,params))},uuidv6(params){return this.check(_uuidv6(ZodUUID,params))},uuidv7(params){return this.check(_uuidv7(ZodUUID,params))},nanoid(params){return this.check(_nanoid(ZodNanoID,params))},cuid(params){return this.check(_cuid(ZodCUID,params))},cuid2(params){return this.check(_cuid2(ZodCUID2,params))},ulid(params){return this.check(_ulid(ZodULID,params))},base64(params){return this.check(_base64(ZodBase64,params))},base64url(params){return this.check(_base64url(ZodBase64URL,params))},xid(params){return this.check(_xid(ZodXID,params))},ksuid(params){return this.check(_ksuid(ZodKSUID,params))},ipv4(params){return this.check(_ipv4(ZodIPv4,params))},ipv6(params){return this.check(_ipv6(ZodIPv6,params))},cidrv4(params){return this.check(_cidrv4(ZodCIDRv4,params))},cidrv6(params){return this.check(_cidrv6(ZodCIDRv6,params))},e164(params){return this.check(_e164(ZodE164,params))},datetime(params){return this.check(_isoDateTime(ZodISODateTime,params))},date(params){return this.check(_isoDate(ZodISODate,params))},time(params){return this.check(_isoTime(ZodISOTime,params))},duration(params){return this.check(_isoDuration(ZodISODuration,params))}});function string2(params){return _string(ZodString,params)}var ZodStringFormat=$constructor("ZodStringFormat",(inst,def)=>{$ZodStringFormat.init(inst,def),_ZodString.init(inst,def)}),ZodISODateTime=$constructor("ZodISODateTime",(inst,def)=>{$ZodISODateTime.init(inst,def),ZodStringFormat.init(inst,def)}),ZodISODate=$constructor("ZodISODate",(inst,def)=>{$ZodISODate.init(inst,def),ZodStringFormat.init(inst,def)}),ZodISOTime=$constructor("ZodISOTime",(inst,def)=>{$ZodISOTime.init(inst,def),ZodStringFormat.init(inst,def)}),ZodISODuration=$constructor("ZodISODuration",(inst,def)=>{$ZodISODuration.init(inst,def),ZodStringFormat.init(inst,def)}),ZodEmail=$constructor("ZodEmail",(inst,def)=>{$ZodEmail.init(inst,def),ZodStringFormat.init(inst,def)});var ZodGUID=$constructor("ZodGUID",(inst,def)=>{$ZodGUID.init(inst,def),ZodStringFormat.init(inst,def)});var ZodUUID=$constructor("ZodUUID",(inst,def)=>{$ZodUUID.init(inst,def),ZodStringFormat.init(inst,def)});var ZodURL=$constructor("ZodURL",(inst,def)=>{$ZodURL.init(inst,def),ZodStringFormat.init(inst,def)});var ZodEmoji=$constructor("ZodEmoji",(inst,def)=>{$ZodEmoji.init(inst,def),ZodStringFormat.init(inst,def)});var ZodNanoID=$constructor("ZodNanoID",(inst,def)=>{$ZodNanoID.init(inst,def),ZodStringFormat.init(inst,def)});var ZodCUID=$constructor("ZodCUID",(inst,def)=>{$ZodCUID.init(inst,def),ZodStringFormat.init(inst,def)});var ZodCUID2=$constructor("ZodCUID2",(inst,def)=>{$ZodCUID2.init(inst,def),ZodStringFormat.init(inst,def)});var ZodULID=$constructor("ZodULID",(inst,def)=>{$ZodULID.init(inst,def),ZodStringFormat.init(inst,def)});var ZodXID=$constructor("ZodXID",(inst,def)=>{$ZodXID.init(inst,def),ZodStringFormat.init(inst,def)});var ZodKSUID=$constructor("ZodKSUID",(inst,def)=>{$ZodKSUID.init(inst,def),ZodStringFormat.init(inst,def)});var ZodIPv4=$constructor("ZodIPv4",(inst,def)=>{$ZodIPv4.init(inst,def),ZodStringFormat.init(inst,def)});var ZodIPv6=$constructor("ZodIPv6",(inst,def)=>{$ZodIPv6.init(inst,def),ZodStringFormat.init(inst,def)});var ZodCIDRv4=$constructor("ZodCIDRv4",(inst,def)=>{$ZodCIDRv4.init(inst,def),ZodStringFormat.init(inst,def)});var ZodCIDRv6=$constructor("ZodCIDRv6",(inst,def)=>{$ZodCIDRv6.init(inst,def),ZodStringFormat.init(inst,def)});var ZodBase64=$constructor("ZodBase64",(inst,def)=>{$ZodBase64.init(inst,def),ZodStringFormat.init(inst,def)});var ZodBase64URL=$constructor("ZodBase64URL",(inst,def)=>{$ZodBase64URL.init(inst,def),ZodStringFormat.init(inst,def)});var ZodE164=$constructor("ZodE164",(inst,def)=>{$ZodE164.init(inst,def),ZodStringFormat.init(inst,def)});var ZodJWT=$constructor("ZodJWT",(inst,def)=>{$ZodJWT.init(inst,def),ZodStringFormat.init(inst,def)});var ZodNumber=$constructor("ZodNumber",(inst,def)=>{$ZodNumber.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>numberProcessor(inst,ctx,json,params),inst.isFinite=!0},derived({minValue:(inst)=>{let{minimum,exclusiveMinimum}=aggregateChecks(inst);return Math.max(minimum??Number.NEGATIVE_INFINITY,exclusiveMinimum??Number.NEGATIVE_INFINITY)},maxValue:(inst)=>{let{maximum,exclusiveMaximum}=aggregateChecks(inst);return Math.min(maximum??Number.POSITIVE_INFINITY,exclusiveMaximum??Number.POSITIVE_INFINITY)},isInt:(inst)=>{let{isInt,multipleOf}=aggregateChecks(inst);return!!isInt||!!multipleOf?.some(Number.isSafeInteger)},format:(inst)=>aggregateChecks(inst).format??null},{gt(value,params){return this.check(_gt(value,params))},gte(value,params){return this.check(_gte(value,params))},min(value,params){return this.check(_gte(value,params))},lt(value,params){return this.check(_lt(value,params))},lte(value,params){return this.check(_lte(value,params))},max(value,params){return this.check(_lte(value,params))},int(params){return this.check(int(params))},safe(params){return this.check(int(params))},positive(params){return this.check(_gt(0,params))},nonnegative(params){return this.check(_gte(0,params))},negative(params){return this.check(_lt(0,params))},nonpositive(params){return this.check(_lte(0,params))},multipleOf(value,params){return this.check(_multipleOf(value,params))},step(value,params){return this.check(_multipleOf(value,params))},finite(){return this}}));function number2(params){return _number(ZodNumber,params)}var ZodNumberFormat=$constructor("ZodNumberFormat",(inst,def)=>{$ZodNumberFormat.init(inst,def),ZodNumber.init(inst,def)});function int(params){return _int(ZodNumberFormat,params)}var ZodBoolean=$constructor("ZodBoolean",(inst,def)=>{$ZodBoolean.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>booleanProcessor(inst,ctx,json,params)});function boolean2(params){return _boolean(ZodBoolean,params)}var ZodUnknown=$constructor("ZodUnknown",(inst,def)=>{$ZodUnknown.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>unknownProcessor(inst,ctx,json,params)});function unknown(){return _unknown(ZodUnknown)}var ZodNever=$constructor("ZodNever",(inst,def)=>{$ZodNever.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>neverProcessor(inst,ctx,json,params)});function never(params){return _never(ZodNever,params)}var ZodArray=$constructor("ZodArray",(inst,def)=>{_ensureDefaultMemoizer(),$ZodArray.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>arrayProcessor(inst,ctx,json,params),inst.element=def.element},{min(n,params){return this.check(_minLength(n,params))},nonempty(params){return this.check(_minLength(1,params))},max(n,params){return this.check(_maxLength(n,params))},length(n,params){return this.check(_length(n,params))},unwrap(){return this.element}});function array(element,params){return _array(ZodArray,element,params)}var ZodObject=$constructor("ZodObject",(inst,def)=>{_ensureDefaultMemoizer(),$ZodObjectJIT.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>objectProcessor(inst,ctx,json,params),installLazyProp(inst,"shape",(self)=>self._zod.def.shape,!1)},{keyof(){return _enum(Object.keys(this._zod.def.shape))},catchall(catchall){return this.clone(mergeDefs(this._zod.def,{catchall}))},passthrough(){return this.clone(mergeDefs(this._zod.def,{catchall:unknown()}))},loose(){return this.clone(mergeDefs(this._zod.def,{catchall:unknown()}))},strict(){return this.clone(mergeDefs(this._zod.def,{catchall:never()}))},strip(){return this.clone(mergeDefs(this._zod.def,{catchall:void 0}))},extend(incoming){return extend(this,incoming)},safeExtend(incoming){return safeExtend(this,incoming)},merge(other){return merge(this,other)},pick(mask){return pick(this,mask)},omit(mask){return omit(this,mask)},partial(...args){return partial(ZodOptional,this,args[0])},exactPartial(...args){return partial(ZodExactOptional,this,args[0],"exactPartial")},required(...args){return required(ZodNonOptional,this,args[0])}});function object(shape,params){let def={type:"object",shape:shape??{},...normalizeParams(params)};return new ZodObject(def)}var ZodUnion=$constructor("ZodUnion",(inst,def)=>{$ZodUnion.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>unionProcessor(inst,ctx,json,params),inst.options=def.options});function union(options,params){return new ZodUnion({type:"union",options,...normalizeParams(params)})}var ZodIntersection=$constructor("ZodIntersection",(inst,def)=>{$ZodIntersection.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>intersectionProcessor(inst,ctx,json,params)});function intersection(left,right){return new ZodIntersection({type:"intersection",left,right})}var ZodEnum=$constructor("ZodEnum",(inst,def)=>{$ZodEnum.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>enumProcessor(inst,ctx,json,params),inst.enum=def.entries,inst.options=[...inst._zod.values];let keys=new Set(Object.keys(def.entries));inst.extract=(values,params)=>{let newEntries={};for(let value of values)if(keys.has(value))newEntries[value]=def.entries[value];else throw Error(`Key ${value} not found in enum`);return new ZodEnum({...def,checks:[],...normalizeParams(params),entries:newEntries})},inst.exclude=(values,params)=>{let newEntries={...def.entries};for(let value of values)if(keys.has(value))delete newEntries[value];else throw Error(`Key ${value} not found in enum`);return new ZodEnum({...def,checks:[],...normalizeParams(params),entries:newEntries})}});function _enum(values,params){let entries=Array.isArray(values)?Object.fromEntries(values.map((v)=>[v,v])):values;return new ZodEnum({type:"enum",entries,...normalizeParams(params)})}var ZodLiteral=$constructor("ZodLiteral",(inst,def)=>{$ZodLiteral.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>literalProcessor(inst,ctx,json,params),inst.values=new Set(def.values),Object.defineProperty(inst,"value",{get(){if(def.values.length>1)throw Error("This schema contains multiple valid literal values. Use `.values` instead.");return def.values[0]}})});function literal(value,params){return new ZodLiteral({type:"literal",values:Array.isArray(value)?value:[value],...normalizeParams(params)})}var ZodTransform=$constructor("ZodTransform",(inst,def)=>{_ensureDefaultMemoizer(),$ZodTransform.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>transformProcessor(inst,ctx,json,params),inst._zod.parse=(payload,_ctx)=>{if(_ctx.direction==="backward")throw new $ZodEncodeError(inst.constructor.name);payload.addIssue=(issue2)=>{if(typeof issue2==="string")payload.issues.push(issue(issue2,payload.value,def));else{let _issue=issue2;if(_issue.fatal)_issue.continue=!1;if(_issue.code??(_issue.code="custom"),!("input"in _issue))_issue.input=payload.value;_issue.inst??(_issue.inst=inst),payload.issues.push(issue(_issue))}};let output=def.transform(payload.value,payload);if(output instanceof Promise)return output.then((output)=>(payload.value=output,payload));return payload.value=output,payload}});function transform(fn){return new ZodTransform({type:"transform",transform:fn})}var ZodOptional=$constructor("ZodOptional",(inst,def)=>{$ZodOptional.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>optionalProcessor(inst,ctx,json,params),inst.unwrap=()=>inst._zod.def.innerType});function optional(innerType){return new ZodOptional({type:"optional",innerType})}var ZodExactOptional=$constructor("ZodExactOptional",(inst,def)=>{$ZodExactOptional.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>optionalProcessor(inst,ctx,json,params),inst.unwrap=()=>inst._zod.def.innerType});function exactOptional(innerType){return new ZodExactOptional({type:"optional",innerType})}var ZodNullable=$constructor("ZodNullable",(inst,def)=>{$ZodNullable.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>nullableProcessor(inst,ctx,json,params),inst.unwrap=()=>inst._zod.def.innerType});function nullable(innerType){return new ZodNullable({type:"nullable",innerType})}var ZodDefault=$constructor("ZodDefault",(inst,def)=>{$ZodDefault.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>defaultProcessor(inst,ctx,json,params),inst.unwrap=()=>inst._zod.def.innerType,inst.removeDefault=inst.unwrap});function _default(innerType,defaultValue){return new ZodDefault({type:"default",innerType,get defaultValue(){return typeof defaultValue==="function"?defaultValue():shallowClone(defaultValue)}})}var ZodPrefault=$constructor("ZodPrefault",(inst,def)=>{$ZodPrefault.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>prefaultProcessor(inst,ctx,json,params),inst.unwrap=()=>inst._zod.def.innerType});function prefault(innerType,defaultValue){return new ZodPrefault({type:"prefault",innerType,get defaultValue(){return typeof defaultValue==="function"?defaultValue():shallowClone(defaultValue)}})}var ZodNonOptional=$constructor("ZodNonOptional",(inst,def)=>{$ZodNonOptional.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>nonoptionalProcessor(inst,ctx,json,params),inst.unwrap=()=>inst._zod.def.innerType});function nonoptional(innerType,params){return new ZodNonOptional({type:"nonoptional",innerType,...normalizeParams(params)})}var ZodCatch=$constructor("ZodCatch",(inst,def)=>{$ZodCatch.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>catchProcessor(inst,ctx,json,params),inst.unwrap=()=>inst._zod.def.innerType,inst.removeCatch=inst.unwrap});function _catch(innerType,catchValue){return new ZodCatch({type:"catch",innerType,catchValue:typeof catchValue==="function"?catchValue:constantCatch(catchValue)})}var ZodPipe=$constructor("ZodPipe",(inst,def)=>{$ZodPipe.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>pipeProcessor(inst,ctx,json,params),inst.in=def.in,inst.out=def.out});function pipe(in_,out){return new ZodPipe({type:"pipe",in:in_,out})}var ZodReadonly=$constructor("ZodReadonly",(inst,def)=>{$ZodReadonly.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>readonlyProcessor(inst,ctx,json,params),inst.unwrap=()=>inst._zod.def.innerType});function readonly(innerType){return new ZodReadonly({type:"readonly",innerType})}var ZodCustom=$constructor("ZodCustom",(inst,def)=>{$ZodCustom.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>customProcessor(inst,ctx,json,params)});function refine(fn,_params={}){return _refine(ZodCustom,fn,_params)}function superRefine(fn,params){return _superRefine(fn,params)}import{stripVTControlCharacters as stripVTControlCharacters4}from"node:util";function terminalText(value){return stripVTControlCharacters4(value).replace(/[\p{C}\p{Zl}\p{Zp}]/gu,"")}class SignInError extends Error{retryable;name="SignInError";constructor(message,retryable=!1){super(message);this.retryable=retryable}}class RequestFailure extends SignInError{notSent;constructor(notSent){super("Unable to complete the service request. Check the connection and retry.",!0);this.notSent=notSent}}var platformSchema=_enum(["macos","linux","windows"]),nonempty=string2().min(1),timestamp=string2().datetime({offset:!0}),tokenSchema=object({accessToken:nonempty,accessTokenExpiresAt:timestamp,refreshToken:nonempty}),grantSchema=tokenSchema.extend({device:object({id:nonempty,name:nonempty}),offlineGrant:nonempty.optional()}),credentialSchema=grantSchema.extend({signingPrivateKey:nonempty,sealingPrivateKey:nonempty,refreshState:literal("uncertain").optional()}),deviceCodeSchema=object({deviceCode:string2().regex(/^dc\.[A-Za-z0-9_-]{43}$/),userCode:string2().regex(/^[BCDFGHJKLMNPQRSTVWXZ]{4}-[BCDFGHJKLMNPQRSTVWXZ]{4}$/),matchingCode:string2().regex(/^\d{3} \d{3}$/),verificationUri:string2().transform(terminalText).pipe(string2().url()),expiresAt:timestamp,intervalSeconds:number2().int().min(1).max(60)}),envelopeSchema=object({error:object({code:nonempty,message:string2(),retryable:boolean2(),requestId:string2(),detail:unknown().optional()})}),limitSchema=object({reason:literal("device_limit"),managementToken:nonempty,used:number2().int().nonnegative(),limit:number2().int().nonnegative()}),deviceListSchema=object({devices:array(object({id:nonempty,name:nonempty,revokedAt:timestamp.nullable()}))});class ApiRefusal extends SignInError{status;code;#detail;#retryAfter;constructor(code,status,detail,retryAfter=null){super("The service refused this request. Sign in again or check your account.",status===429||status>=500);this.status=status;this.code=["unauthorized","account_deleted","reauth_required","invalid_grant","entitlement_required","authorization_pending","slow_down","access_denied","expired_token","rate_limited","internal","unavailable","forbidden","invalid_request","not_found"].includes(code)?code:"unknown",this.#detail=detail,this.#retryAfter=retryAfter}get detail(){return this.#detail}retryDelay(now,fallback){let raw=this.#retryAfter,delay=raw===null?Number.NaN:/^\d+$/.test(raw)?Number(raw)*1000:Date.parse(raw)-now;return Math.min(60000,Math.max(fallback,Number.isFinite(delay)?delay:fallback))}}function parseReply(schema,value){let result=schema.safeParse(value);if(!result.success)throw new SignInError("The service returned an invalid response.");return result.data}function serviceOrigin(value){let url;try{url=new URL(value)}catch{throw new SignInError("Invalid service URL.")}let loopback=url.protocol==="http:"&&url.hostname==="127.0.0.1"&&url.port!=="";if(url.protocol!=="https:"&&!loopback||url.username||url.password||url.search||url.hash||url.pathname!=="/")throw new SignInError("Service URLs must be HTTPS origins, or http://127.0.0.1:<port> for local testing.");return url.origin}async function requestApi(api,path,init,signal){let response,body;try{response=await fetch(`${api}${path}`,{...init,redirect:"error",signal:signal?AbortSignal.any([signal,AbortSignal.timeout(30000)]):AbortSignal.timeout(30000)})}catch(error){let cause=error instanceof Error&&error.cause instanceof Error?error.cause:error,code=cause instanceof Error?Reflect.get(cause,"code"):void 0;throw new RequestFailure(typeof code==="string"&&["ENOTFOUND","ECONNREFUSED","ENETUNREACH","EHOSTUNREACH","EAI_AGAIN","ConnectionRefused","EADDRNOTAVAIL","ENETDOWN","EHOSTDOWN","UND_ERR_CONNECT_TIMEOUT","ERR_TLS_HANDSHAKE_TIMEOUT","DEPTH_ZERO_SELF_SIGNED_CERT","CERT_HAS_EXPIRED","ERR_TLS_CERT_ALTNAME_INVALID","UNABLE_TO_VERIFY_LEAF_SIGNATURE","SELF_SIGNED_CERT_IN_CHAIN","CERT_NOT_YET_VALID","UNABLE_TO_GET_ISSUER_CERT","UNABLE_TO_GET_ISSUER_CERT_LOCALLY","CERT_SIGNATURE_FAILURE","CERT_UNTRUSTED","CERT_REJECTED"].includes(code))}if(response.status===204)return null;try{body=await response.json()}catch{throw new RequestFailure(!1)}if(response.ok)return body;let envelope=envelopeSchema.safeParse(body);if(!envelope.success)throw new SignInError("The service returned an invalid error response.");let error=envelope.data.error,detail=limitSchema.safeParse(error.detail);throw new ApiRefusal(error.code,response.status,error.code==="entitlement_required"&&detail.success?detail.data:void 0,response.headers.get("retry-after"))}var jsonRequest=(body)=>({method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(body)});function deviceName(host=hostname()){return[...`omo CLI on ${host}`.replace(/[\p{Cc}\p{Zl}\p{Zp}\p{Cf}\u3164\u115F\u1160\uFFA0]/gu,"").trim()].slice(0,64).join("").trim()}function devicePlatform(){switch(process.platform){case"darwin":return"macos";case"linux":return"linux";case"win32":return"windows";default:throw new SignInError("This platform is not supported for OmO sign-in.")}}import{setTimeout as setTimeout2}from"node:timers/promises";import{generateKeyPairSync}from"node:crypto";function generateDeviceKeys(){let signing=generateKeyPairSync("ed25519"),sealing=generateKeyPairSync("x25519"),signingKey=signing.publicKey.export({format:"jwk"}).x,sealingKey=sealing.publicKey.export({format:"jwk"}).x;if(!signingKey||!sealingKey)throw new SignInError("Unable to generate device keys.");return{public:{signingKey,sealingKey},private:{signingPrivateKey:signing.privateKey.export({format:"der",type:"pkcs8"}).toString("base64"),sealingPrivateKey:sealing.privateKey.export({format:"der",type:"pkcs8"}).toString("base64")}}}async function loginDevice(session,options){await session.ready();let keys=generateDeviceKeys(),minted=parseReply(deviceCodeSchema,await session.request("/v1/device/code",jsonRequest({client:{name:options.name,platform:options.platform}}))),uri=new URL(minted.verificationUri);if(uri.protocol!=="https:"&&!(uri.protocol==="http:"&&uri.hostname==="127.0.0.1"&&uri.port!==""))throw new SignInError("The service returned an unsafe verification URL.");options.show({verificationUri:minted.verificationUri,userCode:minted.userCode,matchingCode:minted.matchingCode});let now=options.now??Date.now,sleep=options.sleep??((ms)=>setTimeout2(ms,void 0,{signal:session.signal})),expiresAt=Date.parse(minted.expiresAt),interval=minted.intervalSeconds*1000;while(now()<expiresAt){if(await sleep(Math.min(interval,expiresAt-now())),session.signal?.throwIfAborted(),now()>=expiresAt)break;try{let grant=parseReply(grantSchema,await session.request("/v1/device/token",jsonRequest({deviceCode:minted.deviceCode,...keys.public})));await session.save({...grant,...keys.private});return}catch(error){if(!(error instanceof ApiRefusal))throw error;if(error.status===400&&error.code==="authorization_pending")continue;if(error.status===400&&error.code==="slow_down"){interval+=5000;continue}if(error.status===429){interval=error.retryDelay(now(),Math.min(60000,interval+5000));continue}if(error.detail!==void 0){if(await session.removeForLimit(error,options.chooseDevice))continue;throw new SignInError("Sign-in cancelled. No device was removed.")}if(["access_denied","expired_token","invalid_grant"].includes(error.code))throw new SignInError("Device sign-in was denied or expired. Run omo login again for a new code.");throw error}}throw new SignInError("Device sign-in expired. Run omo login again for a new code.")}import{createHash}from"node:crypto";import{spawn}from"node:child_process";var DEFAULT_COLLECTION="/org/freedesktop/secrets/aliases/default",PROBE_TIMEOUT_MS=1e4,parseLockedReply=(stdout)=>{let match=/<\s*(true|false)\s*>/.exec(stdout);if(match===null)return null;return match[1]==="true"?"locked":"unlocked"},probeSecretServiceLock=()=>new Promise((resolve)=>{let child=spawn("gdbus",["call","--session","--dest","org.freedesktop.secrets","--object-path",DEFAULT_COLLECTION,"--method","org.freedesktop.DBus.Properties.Get","org.freedesktop.Secret.Collection","Locked"],{stdio:["ignore","pipe","ignore"]}),stdout="",timer=setTimeout(()=>{child.kill(),resolve("unknown")},PROBE_TIMEOUT_MS);child.stdout.on("data",(chunk)=>{stdout+=chunk.toString()}),child.on("error",()=>{clearTimeout(timer),resolve("unknown")}),child.on("close",(code)=>{clearTimeout(timer),resolve(code===0?parseLockedReply(stdout)??"absent":"absent")})});class KeychainLockedError extends SignInError{}class SecretServiceUnavailableError extends SignInError{}var LOCKED=/-25308|errSecInteractionNotAllowed|interaction is not allowed|locked collection/i,UNLOCKED_REUSE_MS=30000,fallbackNoticed=!1,stderrNoticeOncePerProcess=(message)=>{if(fallbackNoticed)return;fallbackNoticed=!0,process.stderr.write(`${message}
116
+ `)};var isLocked=(error)=>error instanceof Error&&(LOCKED.test(error.message)||LOCKED.test(String(error.code??"")));function credentialId(api){return createHash("sha256").update(serviceOrigin(api)).digest("hex")}function createCredentialStore(api,secrets=typeof Bun>"u"?null:Bun.secrets,platform=process.platform,lockProbe=probeSecretServiceLock,notice=stderrNoticeOncePerProcess){if(!secrets)throw new SignInError("OmO sign-in needs Bun 1.4 or newer with OS credential storage. No file fallback is available.");let platformName=platform==="darwin"?"macOS Keychain":platform==="linux"?"Linux Secret Service (libsecret and an unlocked keyring)":platform==="win32"?"Windows Credential Manager":null;if(platformName===null)throw new SignInError("This platform has no supported OS credential store.");let key={service:"omo-cli",name:credentialId(api)},unavailable=(error)=>isLocked(error)?new KeychainLockedError(`${platformName} is locked. Unlock it, then try again. Credentials are never saved to a file.`):new SignInError(`Cannot access ${platformName}. Unlock or enable the OS credential store and try again. Credentials are never saved to a file.`),unlockedUntil=0,noticed=!1,assertUsable=async()=>{if(platform!=="linux"||Date.now()<unlockedUntil)return;let lock=await lockProbe();if(lock==="locked")throw new KeychainLockedError(`${platformName} is locked. Unlock it, then try again. Credentials are never saved to a file.`);if(lock==="unlocked"){unlockedUntil=Date.now()+UNLOCKED_REUSE_MS;return}if(!noticed)noticed=!0,notice("omo: could not check whether the keyring is locked (gdbus or the Secret Service did not answer); using libsecret directly.")};return{async read(){await assertUsable();let value;try{value=await secrets.get(key)}catch(error){throw unavailable(error)}if(value===null)return null;try{return credentialSchema.parse(JSON.parse(value))}catch{throw new SignInError("Stored sign-in data is invalid. Run omo logout, then omo login.")}},async write(value){await assertUsable();try{await secrets.set({...key,value:JSON.stringify(credentialSchema.parse(value))})}catch(error){throw unavailable(error)}},async clear(){await assertUsable();try{await secrets.delete(key)}catch(error){throw unavailable(error)}}}}import{createHash as createHash2,randomBytes,timingSafeEqual}from"node:crypto";import{createServer}from"node:http";class BrowserUnavailable extends SignInError{}async function authorize(options){let verifier=randomBytes(32).toString("base64url"),state=randomBytes(32).toString("base64url"),answer=Promise.withResolvers(),abort=()=>answer.reject(new SignInError("Browser sign-in cancelled or timed out.")),accepted=!1,origin="",server=createServer((request,response)=>{response.setHeader("cache-control","no-store"),response.setHeader("referrer-policy","no-referrer"),response.setHeader("content-type","text/plain; charset=utf-8");let url=new URL(request.url??"/",origin);if(request.method!=="GET"||request.headers.host!==new URL(origin).host||url.origin!==origin||url.pathname!=="/callback"||request.headers.forwarded||request.headers["x-forwarded-for"]){response.writeHead(404).end("Not found");return}let code=url.searchParams.get("code"),suppliedState=Buffer.from(url.searchParams.get("state")??""),expectedState=Buffer.from(state);if(accepted||url.searchParams.getAll("state").length!==1||suppliedState.length!==expectedState.length||!timingSafeEqual(suppliedState,expectedState)||url.searchParams.getAll("code").length!==1||!code){response.writeHead(400).end("Invalid sign-in response");return}accepted=!0,response.writeHead(200).end("Return to the terminal to finish signing in."),answer.resolve(code)});try{await new Promise((resolve,reject)=>{server.once("error",reject),server.listen(0,"127.0.0.1",()=>{server.off("error",reject),resolve()})});let address=server.address();if(!address||typeof address==="string")throw new SignInError("Unable to start the sign-in callback.");origin=`http://127.0.0.1:${address.port}`;let url=new URL(serviceOrigin(options.accounts));url.search=new URLSearchParams({redirect_uri:`${origin}/callback`,code_challenge:createHash2("sha256").update(verifier).digest("base64url"),code_challenge_method:"S256",state}).toString();let timer=setTimeout(abort,300000);options.signal?.addEventListener("abort",abort,{once:!0});try{options.signal?.throwIfAborted();let openerFailed=()=>{if(!accepted)throw new BrowserUnavailable("No browser is available; use device sign-in.")},[code]=await Promise.all([answer.promise,options.open(url.href).then((opened)=>{if(!opened)openerFailed()},openerFailed)]);return{code,codeVerifier:verifier}}finally{clearTimeout(timer),options.signal?.removeEventListener("abort",abort)}}finally{server.closeAllConnections(),await new Promise((resolve)=>server.close(()=>resolve()))}}async function loginLoopback(session,options){await session.ready();let keys=generateDeviceKeys();for(;;){let authorization=await authorize({accounts:options.accounts,open:options.open,signal:session.signal});try{let grant=parseReply(grantSchema,await session.request("/v1/session/exchange",jsonRequest({...authorization,kind:"cli",deviceName:options.name,platform:options.platform,...keys.public})));await session.save({...grant,...keys.private});return}catch(error){if(await session.removeForLimit(error,options.chooseDevice))continue;throw new SignInError("Sign-in cancelled. No device was removed.")}}}import{mkdir}from"node:fs/promises";import{homedir}from"node:os";import{join}from"node:path";import{access,open as open2,unlink}from"node:fs/promises";import{dirname}from"node:path";import{randomUUID}from"node:crypto";import{readFile,stat}from"node:fs/promises";var lockOwnerInstanceId=randomUUID(),heldLockRecords=new Set;function buildLockRecord(ownerTag){return`${ownerTag} ${randomUUID()}
116
117
  ${process.pid}
117
118
  ${Date.now()}
118
119
  ${lockOwnerInstanceId}
119
- `}function markLockRecordHeld(content){heldLockRecords.add(content)}function markLockRecordReleased(content){heldLockRecords.delete(content)}function errorCode(error){if(!(error instanceof Error)||!("code"in error))return null;return typeof error.code==="string"?error.code:null}function isPathAbsenceError(error){let code=errorCode(error);return code==="ENOENT"||code==="ENOTDIR"}function parseLockOwner(content){let lines=content.split(/\r?\n/).filter((line)=>line.length>0);if(lines.length!==3&&lines.length!==4)return null;let ownerPid=Number.parseInt(lines[1]??"",10),acquiredAtEpochMs=Number.parseInt(lines[2]??"",10);if(!Number.isInteger(ownerPid)||ownerPid<=0)return null;if(!Number.isInteger(acquiredAtEpochMs)||acquiredAtEpochMs<=0)return null;return{ownerPid,acquiredAtEpochMs,instanceId:lines.length===4?lines[3]??null:null}}function isPidAlive(pid){try{return process.kill(pid,0),!0}catch(error){if(!(error instanceof Error))throw error;return!1}}async function readLockRecord(lockPath){try{let content=await readFile(lockPath,"utf8"),{mtimeMs}=await stat(lockPath);return{content,modifiedAtEpochMs:mtimeMs}}catch(error){if(!(error instanceof Error))throw error;return null}}function isLockRecordStale(record,staleAfterMs){let owner=parseLockOwner(record.content);if(owner===null)return Date.now()-record.modifiedAtEpochMs>staleAfterMs;if(owner.instanceId!==null&&owner.ownerPid===process.pid)return owner.instanceId!==lockOwnerInstanceId||!heldLockRecords.has(record.content);if(isPidAlive(owner.ownerPid))return!1;if(owner.instanceId!==null)return!0;return Date.now()-owner.acquiredAtEpochMs>staleAfterMs}async function pathMayExist(path,deps={}){let accessPath=deps.access??access;try{return await accessPath(path),!0}catch(error){if(!(error instanceof Error))throw error;return!isPathAbsenceError(error)}}async function assertRetryableLockOpenError(lockPath,error,deps){let code=errorCode(error);if(code==="EEXIST")return;if(code==="EPERM"){if(await pathMayExist(lockPath,deps))return;if((deps?.platform??process.platform)==="win32"&&await pathMayExist(dirname(lockPath),deps))return}throw error}async function publishLockRecord(lockPath,record){markLockRecordHeld(record);let fileHandle;try{fileHandle=await open2(lockPath,"wx")}catch(error){return markLockRecordReleased(record),await assertRetryableLockOpenError(lockPath,error),!1}try{await fileHandle.writeFile(record)}catch(error){throw markLockRecordReleased(record),await fileHandle.close(),await unlink(lockPath).catch(()=>{return}),error}return await fileHandle.close(),!0}import{createHash as createHash3}from"node:crypto";import{unlink as unlink2}from"node:fs/promises";var RECLAIM_UNLINK_ATTEMPTS=3,RECLAIM_UNLINK_RETRY_MS=25;function delay(ms){return new Promise((resolve)=>{setTimeout(resolve,ms)})}function reclaimGuardPath(lockPath,record){return`${lockPath}.reclaim-${createHash3("sha256").update(record).digest("hex").slice(0,16)}`}async function unlinkWithRetry(path,deps){let wait=deps.delay??delay,unlinkFile=deps.unlink??unlink2;for(let attempt=1;;attempt+=1)try{return await unlinkFile(path),"removed"}catch(error){if(!(error instanceof Error))throw error;if(isPathAbsenceError(error))return"absent";let code=errorCode(error);if(code!=="EPERM"&&code!=="EBUSY"||attempt===RECLAIM_UNLINK_ATTEMPTS)return"stuck";await wait(RECLAIM_UNLINK_RETRY_MS)}}async function removeLockRecordIfUnchanged(lockPath,expectedRecord,staleAfterMs,deps={}){let guardPath=reclaimGuardPath(lockPath,expectedRecord),guardRecord=buildLockRecord("lock-reclaim");if(!await publishLockRecord(guardPath,guardRecord)){let guard=await readLockRecord(guardPath);if(guard!==null&&isLockRecordStale(guard,staleAfterMs))await removeLockRecordIfUnchanged(guardPath,guard.content,staleAfterMs,deps);return"busy"}try{let current=await readLockRecord(lockPath);if(current===null)return"absent";if(current.content!==expectedRecord||!isLockRecordStale(current,staleAfterMs))return"changed";let unlinked=await unlinkWithRetry(lockPath,deps);return unlinked==="absent"?"absent":unlinked}finally{markLockRecordReleased(guardRecord),await unlinkWithRetry(guardPath,deps)}}var LOCK_RETRY_MS=50,LOCK_WAIT_TIMEOUT_MS=15000,DEFAULT_STALE_AFTER_MS=300000;function delay2(ms){return new Promise((resolve)=>{setTimeout(resolve,ms)})}async function acquireLock(lockPath,ownerTag,staleAfterMs){let startedAt=Date.now();for(;;){if(Date.now()-startedAt>LOCK_WAIT_TIMEOUT_MS)throw Error(`Timed out acquiring lock: ${lockPath}`);let record=buildLockRecord(ownerTag);if(await publishLockRecord(lockPath,record))return record;let outcome=await reapStaleLock(lockPath,staleAfterMs);if(outcome==="removed"||outcome==="absent")continue;await delay2(LOCK_RETRY_MS)}}async function withLock(lockPath,fn,opts){let staleAfterMs=opts?.staleAfterMs??DEFAULT_STALE_AFTER_MS,ownerTag=opts?.ownerTag??"owner",record=await acquireLock(lockPath,ownerTag,staleAfterMs);try{return await fn()}finally{markLockRecordReleased(record),await removeLockRecordIfUnchanged(lockPath,record,staleAfterMs)}}async function reapStaleLock(lockPath,staleAfterMs=DEFAULT_STALE_AFTER_MS,deps={}){let observed=await readLockRecord(lockPath);if(observed===null)return"absent";if(!isLockRecordStale(observed,staleAfterMs))return"changed";return await removeLockRecordIfUnchanged(lockPath,observed.content,staleAfterMs,deps)}class SessionEnded extends SignInError{deviceRevoked;constructor(message,deviceRevoked){super(message);this.deviceRevoked=deviceRevoked}}var DEVICE_REVOKING_REFUSALS=new Set(["account_deleted","reauth_required"]);function createSession(options){let api=serviceOrigin(options.api),{store,signal}=options,directory=join(options.home??homedir(),".omo","session-locks"),lockPath=join(directory,`${credentialId(api)}.lock`);async function locked(action){return await mkdir(directory,{recursive:!0,mode:448}),signal?.throwIfAborted(),withLock(lockPath,async()=>(signal?.throwIfAborted(),action()),{ownerTag:"cli-session",staleAfterMs:Number.POSITIVE_INFINITY})}let request=(path,init)=>requestApi(api,path,init,signal),uncertain=()=>new SignInError("The refresh outcome is unknown. Saved credentials and keys were retained, but this refresh token will not be sent again. Retry sign-in with omo login.",!0);async function refreshedAccess(current){if(current.refreshState==="uncertain")throw uncertain();if(Date.parse(current.accessTokenExpiresAt)>Date.now()+30000)return current.accessToken;await store.write({...current,refreshState:"uncertain"});try{let tokens=parseReply(tokenSchema,await request("/v1/session/refresh",jsonRequest({refreshToken:current.refreshToken})));return await store.write({...current,...tokens}),tokens.accessToken}catch(error){if(error instanceof ApiRefusal&&error.status<500&&["unauthorized","account_deleted","reauth_required","invalid_grant"].includes(error.code))throw await store.clear(),new SessionEnded(error.code==="reauth_required"?"This session was ended because its refresh token was reused. Sign in again with omo login.":"Sign in again with omo login.",DEVICE_REVOKING_REFUSALS.has(error.code));if(error instanceof RequestFailure&&error.notSent||error instanceof ApiRefusal&&error.status===429&&error.code==="rate_limited")throw await store.write(current),error;throw uncertain()}}return{request,signal,async ready(){await store.read()},async save(value){await locked(()=>store.write(value))},async logout(){return locked(async()=>{try{let current=await store.read();if(current!==null){if(current.refreshState==="uncertain")return!1;let access=Date.parse(current.accessTokenExpiresAt)<=Date.now()?await refreshedAccess(current):current.accessToken;await request(`/v1/devices/${encodeURIComponent(current.device.id)}`,{method:"DELETE",headers:{authorization:`Bearer ${access}`}})}return!0}catch(error){if(error instanceof SessionEnded)return error.deviceRevoked;if(error instanceof SignInError)return!1;throw error}finally{await store.clear()}})},async accessToken(){return locked(async()=>{let current=await store.read();if(current===null)throw new SignInError("Not signed in. Run omo login.");return refreshedAccess(current)})},async removeForLimit(error,choose){if(!(error instanceof ApiRefusal)||error.detail===void 0)throw error;let headers={authorization:`Bearer ${error.detail.managementToken}`},devices=parseReply(deviceListSchema,await request("/v1/devices",{headers})).devices.filter((device)=>device.revokedAt===null),chosen=await choose(devices);if(chosen===null)return!1;if(!devices.some((device)=>device.id===chosen))throw new SignInError("No matching device was selected.");return await request(`/v1/devices/${encodeURIComponent(chosen)}`,{method:"DELETE",headers}),!0}}}async function ensureServiceAvailable(session,api){try{await session.request("/v1/health",{method:"GET"})}catch(error){if(!(error instanceof SignInError))throw error;if(error instanceof RequestFailure)throw new SignInError(`Can't reach OmO accounts at ${api}. The service may not be available yet, or your network, proxy or certificate settings are blocking it.`);throw new SignInError(`OmO accounts at ${api} aren't available right now. Try again later.`)}}function deviceChoices(devices){return devices.map((device)=>({value:device.id,label:terminalText(device.name)}))}var chooseDevice=async(devices)=>{if(!process.stdin.isTTY||devices.length===0)return console.error("Device limit reached. Run omo login in an interactive terminal to choose a device to remove."),null;let chosen=await select({message:"Device limit reached. Remove a device to sign in?",options:[{value:"",label:"Cancel (keep all devices)"},...deviceChoices(devices)]});if(isCancel(chosen)||chosen==="")return null;return await confirm({message:"Sign out the selected device?",initialValue:!1})===!0?chosen:null},DEFAULT_ACCOUNTS_ORIGIN="https://signin.omo.dev";function accountsOrigin(options,env){return serviceOrigin(options.accounts??env.OMO_SERVICE_ACCOUNTS_URL??DEFAULT_ACCOUNTS_ORIGIN)}async function run(action,options){let controller=new AbortController,cancel=()=>controller.abort();process.once("SIGINT",cancel),process.once("SIGTERM",cancel);try{let api=serviceOrigin(options.api??process.env.OMO_SERVICE_API_URL??"https://api.omo.dev"),store=createCredentialStore(api),session=createSession({api,store,signal:controller.signal});if(action==="logout"){let revoked=await session.logout();if(console.log("Signed out of OmO. Stored credentials and device keys were removed."),!revoked)console.error("Server device revocation could not be confirmed. Remove this device from the Devices page of your OmO account when connected.");return}if(action==="whoami"){await session.accessToken();let saved=await store.read();console.log(saved?`Signed in to ${api} as ${terminalText(saved.device.name)}.`:"Not signed in.");return}await ensureServiceAvailable(session,api);let name=deviceName(),platform=devicePlatform();if(!options.device&&options.browser!==!1)try{await loginLoopback(session,{accounts:accountsOrigin(options,process.env),name,platform,open:openSignInBrowser,chooseDevice}),console.log("Signed in to OmO.");return}catch(error){if(!(error instanceof BrowserUnavailable))throw error}await loginDevice(session,{name,platform,chooseDevice,show:(code)=>{console.log(`Open ${code.verificationUri}`),console.log(`User code: ${code.userCode}`),console.log(`Matching code: ${code.matchingCode}`)}}),console.log("Signed in to OmO.")}catch(error){console.error(controller.signal.aborted?"Sign-in cancelled.":error instanceof SignInError?error.message:"Unable to complete OmO sign-in. Check the OS credential store and try again."),process.exitCode=1}finally{process.removeListener("SIGINT",cancel),process.removeListener("SIGTERM",cancel)}}var SERVICE_ACCOUNTS_OPEN=!1,SERVICE_ACCOUNTS_CLOSED_MESSAGE="OmO accounts aren't available yet.",SERVICE_AUTH_COMMANDS=["login","logout","whoami"],testOpenKey=Symbol.for("omo.test.serviceAccountsOpen");function serviceAccountsOpen(){return SERVICE_ACCOUNTS_OPEN||globalThis[testOpenKey]===!0}function refuseClosedServiceAuth(){console.error(SERVICE_ACCOUNTS_CLOSED_MESSAGE),process.exit(1)}function configureClosedServiceAuthCommands(program){for(let name of SERVICE_AUTH_COMMANDS){let command=program.command(name,{hidden:!0}).helpOption(!1).allowUnknownOption().allowExcessArguments().action(()=>{console.error(SERVICE_ACCOUNTS_CLOSED_MESSAGE),process.exitCode=1});command.help=refuseClosedServiceAuth}}function configureServiceAuthCommands(program,open=serviceAccountsOpen()){if(!open){configureClosedServiceAuthCommands(program);return}program.command("login").description("Sign in to OmO using the OS credential store").option("--device","Use a device code instead of a browser callback").option("--no-browser","Sign in by device code without opening a browser").option("--api <url>","OmO API origin (or OMO_SERVICE_API_URL)").option("--accounts <url>","OmO sign-in page origin (or OMO_SERVICE_ACCOUNTS_URL)").action((options)=>run("login",options));for(let action of["logout","whoami"])program.command(action).description(action==="logout"?"Remove stored OmO credentials and device keys":"Show the current OmO device sign-in").option("--api <url>","OmO API origin (or OMO_SERVICE_API_URL)").action((options)=>run(action,options))}async function runServiceAuthCommand(args){let program=new Command("omo");configureServiceAuthCommands(program),await program.parseAsync([...args],{from:"user"})}export{DEFAULT_ACCOUNTS_ORIGIN,SERVICE_ACCOUNTS_CLOSED_MESSAGE,SERVICE_ACCOUNTS_OPEN,accountsOrigin,configureServiceAuthCommands,deviceChoices,runServiceAuthCommand};
120
+ `}function markLockRecordHeld(content){heldLockRecords.add(content)}function markLockRecordReleased(content){heldLockRecords.delete(content)}function errorCode(error){if(!(error instanceof Error)||!("code"in error))return null;return typeof error.code==="string"?error.code:null}function isPathAbsenceError(error){let code=errorCode(error);return code==="ENOENT"||code==="ENOTDIR"}function parseLockOwner(content){let lines=content.split(/\r?\n/).filter((line)=>line.length>0);if(lines.length!==3&&lines.length!==4)return null;let ownerPid=Number.parseInt(lines[1]??"",10),acquiredAtEpochMs=Number.parseInt(lines[2]??"",10);if(!Number.isInteger(ownerPid)||ownerPid<=0)return null;if(!Number.isInteger(acquiredAtEpochMs)||acquiredAtEpochMs<=0)return null;return{ownerPid,acquiredAtEpochMs,instanceId:lines.length===4?lines[3]??null:null}}function isPidAlive(pid){try{return process.kill(pid,0),!0}catch(error){if(!(error instanceof Error))throw error;return!1}}async function readLockRecord(lockPath){try{let content=await readFile(lockPath,"utf8"),{mtimeMs}=await stat(lockPath);return{content,modifiedAtEpochMs:mtimeMs}}catch(error){if(!(error instanceof Error))throw error;return null}}function isLockRecordStale(record,staleAfterMs){let owner=parseLockOwner(record.content);if(owner===null)return Date.now()-record.modifiedAtEpochMs>staleAfterMs;if(owner.instanceId!==null&&owner.ownerPid===process.pid)return owner.instanceId!==lockOwnerInstanceId||!heldLockRecords.has(record.content);if(isPidAlive(owner.ownerPid))return!1;if(owner.instanceId!==null)return!0;return Date.now()-owner.acquiredAtEpochMs>staleAfterMs}async function pathMayExist(path,deps={}){let accessPath=deps.access??access;try{return await accessPath(path),!0}catch(error){if(!(error instanceof Error))throw error;return!isPathAbsenceError(error)}}async function assertRetryableLockOpenError(lockPath,error,deps){let code=errorCode(error);if(code==="EEXIST")return;if(code==="EPERM"){if(await pathMayExist(lockPath,deps))return;if((deps?.platform??process.platform)==="win32"&&await pathMayExist(dirname(lockPath),deps))return}throw error}async function publishLockRecord(lockPath,record){markLockRecordHeld(record);let fileHandle;try{fileHandle=await open2(lockPath,"wx")}catch(error){return markLockRecordReleased(record),await assertRetryableLockOpenError(lockPath,error),!1}try{await fileHandle.writeFile(record)}catch(error){throw markLockRecordReleased(record),await fileHandle.close(),await unlink(lockPath).catch(()=>{return}),error}return await fileHandle.close(),!0}import{createHash as createHash3}from"node:crypto";import{unlink as unlink2}from"node:fs/promises";var RECLAIM_UNLINK_ATTEMPTS=3,RECLAIM_UNLINK_RETRY_MS=25;function delay(ms){return new Promise((resolve)=>{setTimeout(resolve,ms)})}function reclaimGuardPath(lockPath,record){return`${lockPath}.reclaim-${createHash3("sha256").update(record).digest("hex").slice(0,16)}`}async function unlinkWithRetry(path,deps){let wait=deps.delay??delay,unlinkFile=deps.unlink??unlink2;for(let attempt=1;;attempt+=1)try{return await unlinkFile(path),"removed"}catch(error){if(!(error instanceof Error))throw error;if(isPathAbsenceError(error))return"absent";let code=errorCode(error);if(code!=="EPERM"&&code!=="EBUSY"||attempt===RECLAIM_UNLINK_ATTEMPTS)return"stuck";await wait(RECLAIM_UNLINK_RETRY_MS)}}async function removeLockRecordIfUnchanged(lockPath,expectedRecord,staleAfterMs,deps={}){let guardPath=reclaimGuardPath(lockPath,expectedRecord),guardRecord=buildLockRecord("lock-reclaim");if(!await publishLockRecord(guardPath,guardRecord)){let guard=await readLockRecord(guardPath);if(guard!==null&&isLockRecordStale(guard,staleAfterMs))await removeLockRecordIfUnchanged(guardPath,guard.content,staleAfterMs,deps);return"busy"}try{let current=await readLockRecord(lockPath);if(current===null)return"absent";if(current.content!==expectedRecord||!isLockRecordStale(current,staleAfterMs))return"changed";let unlinked=await unlinkWithRetry(lockPath,deps);return unlinked==="absent"?"absent":unlinked}finally{markLockRecordReleased(guardRecord),await unlinkWithRetry(guardPath,deps)}}var LOCK_RETRY_MS=50,LOCK_WAIT_TIMEOUT_MS=15000,DEFAULT_STALE_AFTER_MS=300000;function delay2(ms){return new Promise((resolve)=>{setTimeout(resolve,ms)})}async function acquireLock(lockPath,ownerTag,staleAfterMs){let startedAt=Date.now();for(;;){if(Date.now()-startedAt>LOCK_WAIT_TIMEOUT_MS)throw Error(`Timed out acquiring lock: ${lockPath}`);let record=buildLockRecord(ownerTag);if(await publishLockRecord(lockPath,record))return record;let outcome=await reapStaleLock(lockPath,staleAfterMs);if(outcome==="removed"||outcome==="absent")continue;await delay2(LOCK_RETRY_MS)}}async function withLock(lockPath,fn,opts){let staleAfterMs=opts?.staleAfterMs??DEFAULT_STALE_AFTER_MS,ownerTag=opts?.ownerTag??"owner",record=await acquireLock(lockPath,ownerTag,staleAfterMs);try{return await fn()}finally{markLockRecordReleased(record),await removeLockRecordIfUnchanged(lockPath,record,staleAfterMs)}}async function reapStaleLock(lockPath,staleAfterMs=DEFAULT_STALE_AFTER_MS,deps={}){let observed=await readLockRecord(lockPath);if(observed===null)return"absent";if(!isLockRecordStale(observed,staleAfterMs))return"changed";return await removeLockRecordIfUnchanged(lockPath,observed.content,staleAfterMs,deps)}class SessionEnded extends SignInError{deviceRevoked;code;constructor(message,deviceRevoked,code){super(message);this.deviceRevoked=deviceRevoked;this.code=code}}var DEVICE_REVOKING_REFUSALS=new Set(["account_deleted","reauth_required"]);function createSession(options){let api=serviceOrigin(options.api),{store,signal}=options,directory=join(options.home??homedir(),".omo","session-locks"),lockPath=join(directory,`${credentialId(api)}.lock`);async function locked(action){return await mkdir(directory,{recursive:!0,mode:448}),signal?.throwIfAborted(),withLock(lockPath,async()=>(signal?.throwIfAborted(),action()),{ownerTag:"cli-session",staleAfterMs:Number.POSITIVE_INFINITY})}let request=(path,init)=>requestApi(api,path,init,signal),uncertain=()=>new SignInError("The refresh outcome is unknown. Saved credentials and keys were retained, but this refresh token will not be sent again. Retry sign-in with omo login.",!0);async function refreshedAccess(current){if(current.refreshState==="uncertain")throw uncertain();if(Date.parse(current.accessTokenExpiresAt)>Date.now()+30000)return current.accessToken;await store.write({...current,refreshState:"uncertain"});try{let tokens=parseReply(tokenSchema,await request("/v1/session/refresh",jsonRequest({refreshToken:current.refreshToken})));return await store.write({...current,...tokens}),tokens.accessToken}catch(error){if(error instanceof ApiRefusal&&error.status<500&&["unauthorized","account_deleted","reauth_required","invalid_grant"].includes(error.code))throw await store.clear(),new SessionEnded(error.code==="reauth_required"?"This session was ended because its refresh token was reused. Sign in again with omo login.":"Sign in again with omo login.",DEVICE_REVOKING_REFUSALS.has(error.code),error.code);if(error instanceof RequestFailure&&error.notSent||error instanceof ApiRefusal&&error.status===429&&error.code==="rate_limited")throw await store.write(current),error;throw uncertain()}}return{request,signal,async ready(){await store.read()},async save(value){await locked(()=>store.write(value))},async update(action){return locked(async()=>action(await store.read()))},async logout(){return locked(async()=>{try{let current=await store.read();if(current!==null){if(current.refreshState==="uncertain")return!1;let access=Date.parse(current.accessTokenExpiresAt)<=Date.now()?await refreshedAccess(current):current.accessToken;await request(`/v1/devices/${encodeURIComponent(current.device.id)}`,{method:"DELETE",headers:{authorization:`Bearer ${access}`}})}return!0}catch(error){if(error instanceof SessionEnded)return error.deviceRevoked;if(error instanceof SignInError)return!1;throw error}finally{await store.clear()}})},async accessToken(){return locked(async()=>{let current=await store.read();if(current===null)throw new SignInError("Not signed in. Run omo login.");return refreshedAccess(current)})},async removeForLimit(error,choose){if(!(error instanceof ApiRefusal)||error.detail===void 0)throw error;let headers={authorization:`Bearer ${error.detail.managementToken}`},devices=parseReply(deviceListSchema,await request("/v1/devices",{headers})).devices.filter((device)=>device.revokedAt===null),chosen=await choose(devices);if(chosen===null)return!1;if(!devices.some((device)=>device.id===chosen))throw new SignInError("No matching device was selected.");return await request(`/v1/devices/${encodeURIComponent(chosen)}`,{method:"DELETE",headers}),!0}}}async function ensureServiceAvailable(session,api){try{await session.request("/v1/health",{method:"GET"})}catch(error){if(!(error instanceof SignInError))throw error;if(error instanceof RequestFailure)throw new SignInError(`Can't reach OmO accounts at ${api}. The service may not be available yet, or your network, proxy or certificate settings are blocking it.`);throw new SignInError(`OmO accounts at ${api} aren't available right now. Try again later.`)}}function deviceChoices(devices){return devices.map((device)=>({value:device.id,label:terminalText(device.name)}))}var chooseDevice=async(devices)=>{if(!process.stdin.isTTY||devices.length===0)return console.error("Device limit reached. Run omo login in an interactive terminal to choose a device to remove."),null;let chosen=await select({message:"Device limit reached. Remove a device to sign in?",options:[{value:"",label:"Cancel (keep all devices)"},...deviceChoices(devices)]});if(isCancel(chosen)||chosen==="")return null;return await confirm({message:"Sign out the selected device?",initialValue:!1})===!0?chosen:null},DEFAULT_ACCOUNTS_ORIGIN="https://signin.omo.dev";function accountsOrigin(options,env){return serviceOrigin(options.accounts??env.OMO_SERVICE_ACCOUNTS_URL??DEFAULT_ACCOUNTS_ORIGIN)}async function run(action,options){let controller=new AbortController,cancel=()=>controller.abort();process.once("SIGINT",cancel),process.once("SIGTERM",cancel);try{let api=serviceOrigin(options.api??process.env.OMO_SERVICE_API_URL??"https://api.omo.dev"),store=createCredentialStore(api),session=createSession({api,store,signal:controller.signal});if(action==="logout"){let revoked=await session.logout();if(console.log("Signed out of OmO. Stored credentials and device keys were removed."),!revoked)console.error("Server device revocation could not be confirmed. Remove this device from the Devices page of your OmO account when connected.");return}if(action==="whoami"){await session.accessToken();let saved=await store.read();console.log(saved?`Signed in to ${api} as ${terminalText(saved.device.name)}.`:"Not signed in.");return}await ensureServiceAvailable(session,api);let name=deviceName(),platform=devicePlatform();if(!options.device&&options.browser!==!1)try{await loginLoopback(session,{accounts:accountsOrigin(options,process.env),name,platform,open:openSignInBrowser,chooseDevice}),console.log("Signed in to OmO.");return}catch(error){if(!(error instanceof BrowserUnavailable))throw error}await loginDevice(session,{name,platform,chooseDevice,show:(code)=>{console.log(`Open ${code.verificationUri}`),console.log(`User code: ${code.userCode}`),console.log(`Matching code: ${code.matchingCode}`)}}),console.log("Signed in to OmO.")}catch(error){console.error(controller.signal.aborted?"Sign-in cancelled.":error instanceof SignInError?error.message:"Unable to complete OmO sign-in. Check the OS credential store and try again."),process.exitCode=1}finally{process.removeListener("SIGINT",cancel),process.removeListener("SIGTERM",cancel)}}var SERVICE_ACCOUNTS_OPEN=!1,SERVICE_ACCOUNTS_CLOSED_MESSAGE="OmO accounts aren't available yet.",SERVICE_AUTH_COMMANDS=["login","logout","whoami"],testOpenKey=Symbol.for("omo.test.serviceAccountsOpen");function serviceAccountsOpen(){return SERVICE_ACCOUNTS_OPEN||globalThis[testOpenKey]===!0}function refuseClosedServiceAuth(){console.error(SERVICE_ACCOUNTS_CLOSED_MESSAGE),process.exit(1)}function configureClosedServiceAuthCommands(program){for(let name of SERVICE_AUTH_COMMANDS){let command=program.command(name,{hidden:!0}).helpOption(!1).allowUnknownOption().allowExcessArguments().action(()=>{console.error(SERVICE_ACCOUNTS_CLOSED_MESSAGE),process.exitCode=1});command.help=refuseClosedServiceAuth}}function configureServiceAuthCommands(program,open=serviceAccountsOpen()){if(!open){configureClosedServiceAuthCommands(program);return}program.command("login").description("Sign in to OmO using the OS credential store").option("--device","Use a device code instead of a browser callback").option("--no-browser","Sign in by device code without opening a browser").option("--api <url>","OmO API origin (or OMO_SERVICE_API_URL)").option("--accounts <url>","OmO sign-in page origin (or OMO_SERVICE_ACCOUNTS_URL)").action((options)=>run("login",options));for(let action of["logout","whoami"])program.command(action).description(action==="logout"?"Remove stored OmO credentials and device keys":"Show the current OmO device sign-in").option("--api <url>","OmO API origin (or OMO_SERVICE_API_URL)").action((options)=>run(action,options))}async function runServiceAuthCommand(args){let program=new Command("omo");configureServiceAuthCommands(program),await program.parseAsync([...args],{from:"user"})}import{homedir as homedir2}from"node:os";import{join as join2,resolve}from"node:path";var MEMORY_ROOT_ENV_VAR="OMO_MEMORY_HOME";function defaultMemoryRoot(){return join2(homedir2(),".omo","memory")}function resolveMemoryRoot(env,cwd){let override=env[MEMORY_ROOT_ENV_VAR];if(override===void 0||override.trim()==="")return defaultMemoryRoot();return resolve(cwd,override)}import{createHash as createHash4,randomBytes as randomBytes2}from"node:crypto";import{join as join3}from"node:path";import{Buffer as Buffer3}from"node:buffer";import*as fsSync from"node:fs";import*as fsp2 from"node:fs/promises";function fsErrorCode(error){if(!(error instanceof Error)||!("code"in error))return;return typeof error.code==="string"?error.code:void 0}async function retryOnEintr(operation){for(let attempt=0;;attempt+=1)try{return await operation()}catch(error){if(fsErrorCode(error)!=="EINTR"||attempt>=128)throw error}}function retryOnEintrSync(operation){for(let attempt=0;;attempt+=1)try{return operation()}catch(error){if(fsErrorCode(error)!=="EINTR"||attempt>=128)throw error}}var CONTENTION_CODES=new Set(["EPERM","EBUSY","EACCES"]),CONTENTION_DELAYS_MS=[10,25,50,100,200,400],sleepFor=(ms)=>new Promise((resolve)=>setTimeout(resolve,ms));async function renameWithContentionRetry(from,to,deps){let delays=deps.platform==="win32"?deps.delaysMs??CONTENTION_DELAYS_MS:[],sleep=deps.sleep??sleepFor;for(let attempt=0;;attempt+=1)try{await deps.rename(from,to);return}catch(error){let delay=delays[attempt],code=fsErrorCode(error);if(delay===void 0||code===void 0||!CONTENTION_CODES.has(code))throw error;await sleep(delay)}}import{Buffer as Buffer2}from"node:buffer";import{constants}from"node:fs";import*as fsp from"node:fs/promises";function isExclusiveFlag(flag){if(typeof flag==="number")return(flag&constants.O_EXCL)!==0;return typeof flag==="string"&&flag.toLowerCase().includes("x")}async function writeHandleAll(handle,data,encoding,signal){let buffer=typeof data==="string"?Buffer2.from(data,encoding??"utf8"):data,offset=0;while(offset<buffer.length){signal?.throwIfAborted();let{bytesWritten}=await retryOnEintr(()=>handle.write(buffer,offset));if(bytesWritten<=0)throw Error(`fs write made no progress at offset ${offset}`);offset+=bytesWritten}}async function writePathAll(path,data,options,defaultFlag){let parsed=typeof options==="string"?{encoding:options}:options??{};parsed.signal?.throwIfAborted();let flag=parsed.flag??defaultFlag,openOnce=()=>fsp.open(path,flag,parsed.mode),handle=await(isExclusiveFlag(flag)?openOnce():retryOnEintr(openOnce));try{if(await writeHandleAll(handle,data,parsed.encoding??"utf8",parsed.signal),parsed.flush===!0)await retryOnEintr(()=>handle.sync())}finally{await handle.close().catch((error)=>{if(fsErrorCode(error)!=="EINTR")throw error})}}function isFunction(value){return typeof value==="function"}function withAsyncRetry(operation){return(...args)=>retryOnEintr(async()=>operation(...args))}function withSyncRetry(operation){return(...args)=>retryOnEintrSync(()=>operation(...args))}function resilientNamespace(namespace,kind){let wrapFunction=kind==="async"?withAsyncRetry:withSyncRetry,cache=new Map;return new Proxy(namespace,{get(target,property){if(cache.has(property))return cache.get(property);let value=Reflect.get(target,property);if(!isFunction(value))return value;let wrapped=wrapFunction(value),native=Reflect.get(value,"native");if(isFunction(native))Object.assign(wrapped,{native:wrapFunction(native)});return cache.set(property,wrapped),wrapped}})}var IDEMPOTENT_HANDLE_METHODS=new Set(["stat","sync","datasync","chmod","chown","utimes","truncate"]);function wrapFileHandle(handle){return new Proxy(handle,{get(target,property){let value=Reflect.get(target,property);if(!isFunction(value))return value;let invoke=(args)=>Reflect.apply(value,target,[...args]);if(property==="close"||property===Symbol.asyncDispose)return(...args)=>{let result=invoke(args);if(!(result instanceof Promise))return result;return result.catch((error)=>{if(fsErrorCode(error)==="EINTR")return;throw error})};if(typeof property!=="string"||!IDEMPOTENT_HANDLE_METHODS.has(property))return(...args)=>invoke(args);return(...args)=>{let result=invoke(args);if(!(result instanceof Promise))return result;return result.catch((error)=>{if(fsErrorCode(error)!=="EINTR")throw error;return retryOnEintr(async()=>invoke(args))})}}})}var promises=resilientNamespace(fsp2,"async");function rename(from,to){return renameWithContentionRetry(from,to,{rename:promises.rename,platform:process.platform})}var sync=resilientNamespace(fsSync,"sync"),{access:access2,chmod,copyFile,cp,link,lstat,mkdir:mkdir2,mkdtemp,readFile:readFile2,readdir,readlink,realpath,rm,rmdir,stat:stat2,statfs,unlink:unlink3}=promises,{accessSync,chmodSync,fsyncSync,linkSync,lstatSync,mkdirSync,readFileSync,readdirSync,realpathSync,statSync:statSync2,unlinkSync,writeFileSync,writeSync}=sync;var open5=async(...args)=>{let openOnce=()=>fsp2.open(...args),handle=await(isExclusiveFlag(args[1]??"r")?openOnce():retryOnEintr(openOnce));return wrapFileHandle(handle)};function isHandleTarget(value){return typeof value==="object"&&!(value instanceof URL)&&!Buffer3.isBuffer(value)&&"fd"in value}var writeFile2=async(file,data,options)=>{if(typeof data!=="string"&&!(data instanceof Uint8Array))return fsp2.writeFile(file,data,options);if(isHandleTarget(file)){let parsed=typeof options==="string"?{encoding:options}:options??{};if(parsed.signal?.throwIfAborted(),await writeHandleAll(file,data,parsed.encoding??void 0,parsed.signal),parsed.flush===!0)await retryOnEintr(()=>file.sync());return}return writePathAll(file,data,options??void 0,"w")};function errorCode2(error){if(!(error instanceof Error)||!("code"in error))return;return typeof error.code==="string"?error.code:void 0}var SKIPPABLE_SYNC_CODES=new Set(["ENOENT","EISDIR","EPERM","EACCES","EINVAL"]);async function syncHandle(path){let handle;try{handle=await open5(path,"r")}catch(error){if(SKIPPABLE_SYNC_CODES.has(errorCode2(error)??""))return;throw error}try{await handle.sync()}catch(error){if(!SKIPPABLE_SYNC_CODES.has(errorCode2(error)??""))throw error}finally{await handle.close()}}async function syncJournalFile(path){await syncHandle(path)}async function syncJournalDirectory(dir){await syncHandle(dir)}var isObject2=(value)=>typeof value==="object"&&value!==null&&!Array.isArray(value),hasExactly=(value,keys)=>{let own=Object.keys(value).sort(),want=[...keys].sort();return own.length===want.length&&own.every((key,index)=>key===want[index])},text=(value,key)=>{let field=value[key];return typeof field==="string"&&field.length>0?field:null},COMMON=["kind","account","epoch"],PRINCIPAL_KEYS=["kind","id","sealing_public_key","signing_public_key"],RECOVERY_KEYS=["credential_id","rp_id","enrollment_nonce","sealing_public_key","signing_public_key","survivable"],parsePrincipal=(value)=>{if(!isObject2(value)||!hasExactly(value,PRINCIPAL_KEYS)||value.kind!=="device")return null;let id=text(value,"id"),sealing=text(value,"sealing_public_key"),signing=text(value,"signing_public_key");if(id===null||sealing===null||signing===null)return null;return{kind:"device",id,sealing_public_key:sealing,signing_public_key:signing}},readRecoveryKey=(value)=>{let survivable=value.survivable;if(survivable!=="synced"&&survivable!=="roaming")return null;let fields=RECOVERY_KEYS.slice(0,5).map((key)=>text(value,key)),[credentialId,rpId,nonce,sealing,signing]=fields;if(fields.some((field)=>field===null))return null;return{credential_id:credentialId??"",rp_id:rpId??"",enrollment_nonce:nonce??"",sealing_public_key:sealing??"",signing_public_key:signing??"",survivable}},parseGenesis=(body)=>{if(!hasExactly(body,[...COMMON,"bootstrap","custody_root","countersign","wraps_digest"]))return null;let bootstrap=body.bootstrap;if(!isObject2(bootstrap))return null;if(!hasExactly(bootstrap,["account","custody_nonce","first_device","recovery_key"]))return null;if(bootstrap.account!==body.account||text(bootstrap,"custody_nonce")===null)return null;let firstDevice=parsePrincipal(bootstrap.first_device),recoveryValue=bootstrap.recovery_key;if(!isObject2(recoveryValue)||!hasExactly(recoveryValue,RECOVERY_KEYS))return null;let recoveryKey=readRecoveryKey(recoveryValue),custodyRoot=text(body,"custody_root"),countersign=text(body,"countersign"),wrapsDigest=text(body,"wraps_digest");if(firstDevice===null||recoveryKey===null)return null;if(custodyRoot===null||countersign===null||wrapsDigest===null)return null;return{kind:"genesis",firstDevice,recoveryKey,bootstrap,custodyRoot,countersign,wrapsDigest}},parseRecoveryKeyRecord=(body)=>{if(!hasExactly(body,[...COMMON,...RECOVERY_KEYS,"countersign","wraps_digest"]))return null;let key=readRecoveryKey(body),countersign=text(body,"countersign"),wrapsDigest=text(body,"wraps_digest");if(key===null||countersign===null||wrapsDigest===null)return null;return{kind:"recovery-key",key,countersign,wrapsDigest}},parseApproval=(body)=>{if(!hasExactly(body,[...COMMON,"principal","wraps_digest","pairing"]))return null;let pairing=body.pairing;if(!isObject2(pairing))return null;if(!hasExactly(pairing,["commitment","joining_nonce","approver_nonce"]))return null;let principal=parsePrincipal(body.principal),wrapsDigest=text(body,"wraps_digest"),commitment=text(pairing,"commitment"),joiningNonce=text(pairing,"joining_nonce");if(principal===null||wrapsDigest===null||commitment===null||joiningNonce===null)return null;if(text(pairing,"approver_nonce")===null)return null;return{kind:"approval",principal,wrapsDigest,commitment,joiningNonce}},parseRotation=(body)=>{if(!hasExactly(body,[...COMMON,"members","wraps_digest","fork_resolution"]))return null;let fork=body.fork_resolution,forkResolution=fork===null?null:typeof fork==="number"&&Number.isSafeInteger(fork)&&fork>=1?fork:void 0;if(forkResolution===void 0)return null;let membersValue=body.members,wrapsDigest=text(body,"wraps_digest");if(!Array.isArray(membersValue)||wrapsDigest===null)return null;let members=membersValue.map((member)=>parsePrincipal(member)),parsed=members.filter((member)=>member!==null);if(parsed.length!==members.length||parsed.length===0)return null;return{kind:"rotation",members:parsed,wrapsDigest,forkResolution}},parseJoin=(body)=>{if(!hasExactly(body,[...COMMON,"keyring_head","principal","credential_id"]))return null;let principal=parsePrincipal(body.principal),keyringHead=text(body,"keyring_head"),credentialId=text(body,"credential_id");if(principal===null||keyringHead===null||credentialId===null)return null;return{kind:"recovery-join",keyringHead,principal,credentialId}},parseForkResolution=(body)=>{let keys=["fork_set","evidence","continuation","state","merged_digest"],state=body.state;if(!hasExactly(body,[...COMMON,...keys])||!isObject2(state))return null;if(!hasExactly(state,["members","recovery_keys","epoch"]))return null;let{members:membersValue,recovery_keys:keysValue,epoch}=state;if(!Array.isArray(membersValue)||!Array.isArray(keysValue))return null;if(typeof epoch!=="number"||!Number.isSafeInteger(epoch)||epoch<1)return null;let members=membersValue.map((member)=>parsePrincipal(member)),recoveryKeys=keysValue.map((key)=>isObject2(key)&&hasExactly(key,RECOVERY_KEYS)?readRecoveryKey(key):null),parsedMembers=members.filter((member)=>member!==null),parsedKeys=recoveryKeys.filter((key)=>key!==null);if(parsedMembers.length!==members.length||parsedKeys.length!==recoveryKeys.length)return null;return{kind:"fork-resolution",members:parsedMembers,recoveryKeys:parsedKeys,epoch}},parseBody=(body)=>{if(typeof body.account!=="string"||!Number.isSafeInteger(body.epoch)||body.epoch<1)return null;switch(body.kind){case"genesis":return parseGenesis(body);case"recovery-key":return parseRecoveryKeyRecord(body);case"recovery-key-removed":{let credentialId=text(body,"credential_id");if(!hasExactly(body,[...COMMON,"credential_id"])||credentialId===null)return null;return{kind:"recovery-key-removed",credentialId}}case"approval":return parseApproval(body);case"rotation":return parseRotation(body);case"recovery-join":return parseJoin(body);case"recovery-join-vetoed":{let joinDigest=text(body,"join_digest");if(!hasExactly(body,[...COMMON,"join_digest"])||joinDigest===null)return null;return{kind:"recovery-join-vetoed",joinDigest}}case"fork-resolution":return parseForkResolution(body);default:return null}};var ANCHOR_NEXT_STEP="re-pair or recover",anchors=new WeakSet,candidates=new WeakSet,bootstraps=new WeakSet,isBootstrapAnchor=(value)=>typeof value==="object"&&value!==null&&bootstraps.has(value),isBootstrap=(value)=>bootstraps.has(value),mintBootstrap=(value)=>{let frozen=Object.freeze(value);if(bootstraps.add(frozen),!isBootstrap(frozen))throw Error("unreachable: a fresh bootstrap anchor is always registered");return frozen},principalOf=(keyring)=>({kind:"device",id:keyring.principal().id,sealing_public_key:keyring.publicKeys().sealing,signing_public_key:keyring.publicKeys().signing});var pairingAnchor=(input)=>{let approver=Object.freeze({sealing_public_key:input.approver.sealing_public_key,signing_public_key:input.approver.signing_public_key}),transcript=Object.freeze({joining_nonce:input.joiningNonce,approver_nonce:input.approverNonce});return mintBootstrap({kind:"pairing",account:input.account,self:Object.freeze(principalOf(input.keyring)),approver,transcript})};var isTrustAnchor=(value)=>typeof value==="object"&&value!==null&&anchors.has(value),isPinCandidate=(value)=>typeof value==="object"&&value!==null&&candidates.has(value),isAnchor=(value)=>anchors.has(value),isCandidate=(value)=>candidates.has(value),mintTrustAnchor=(account,genesisDigest)=>{let anchor=Object.freeze({kind:"pinned",account,genesisDigest});if(anchors.add(anchor),!isAnchor(anchor))throw Error("unreachable: a fresh trust anchor is always registered");return anchor},mintCandidate=(account,genesisDigest,pinnedBy,entry)=>{let candidate=Object.freeze({account,genesisDigest,pinnedBy,at:Object.freeze({seq:entry.seq,keyring_link:entry.keyring_link})});if(candidates.add(candidate),!isCandidate(candidate))throw Error("unreachable: a fresh pin candidate is always registered");return candidate},sameKeys=(a,b)=>a!==void 0&&a.sealing_public_key===b.sealing_public_key&&a.signing_public_key===b.signing_public_key,anchorStep=(anchor,entry,body,before,genesisDigest)=>{if(anchor.kind==="pinned"){if(body.kind!=="genesis")return{ok:!0,anchored:!1,candidate:null};if(!isTrustAnchor(anchor))return{ok:!1,reason:"untrusted_root"};if(entry.digest!==anchor.genesisDigest)return{ok:!1,reason:"untrusted_root"};return{ok:!0,anchored:!0,candidate:null}}if(!isBootstrapAnchor(anchor))return{ok:!1,reason:"untrusted_root"};if(anchor.kind==="creator"){if(body.kind!=="genesis")return{ok:!0,anchored:!1,candidate:null};return body.firstDevice.id===anchor.selfId?{ok:!0,anchored:!0,candidate:mintCandidate(anchor.account,entry.digest,"creator",entry)}:{ok:!1,reason:"anchor_mismatch"}}if(anchor.kind==="pairing"){if(body.kind!=="approval"||body.principal.id!==anchor.self.id)return{ok:!0,anchored:!1,candidate:null};let pairing=entry.body.pairing,transcript=isObject2(pairing)?pairing:{},signer=entry.author.kind==="device"?before?.members.get(entry.author.id):void 0;return sameKeys(body.principal,anchor.self)&&sameKeys(signer,anchor.approver)&&transcript.joining_nonce===anchor.transcript.joining_nonce&&transcript.approver_nonce===anchor.transcript.approver_nonce?{ok:!0,anchored:!0,candidate:mintCandidate(anchor.account,genesisDigest,"pairing",entry)}:{ok:!1,reason:"anchor_mismatch"}}let enrolled=body.kind==="genesis"?body.recoveryKey:body.kind==="recovery-key"?body.key:null;if(enrolled===null||enrolled.credential_id!==anchor.credentialId)return{ok:!0,anchored:!1,candidate:null};return sameKeys(enrolled,anchor)?{ok:!0,anchored:!0,candidate:mintCandidate(anchor.account,genesisDigest,"recovery",entry)}:{ok:!1,reason:"anchor_mismatch"}};class SyncFormatError extends Error{reason;constructor(reason,message){super(message);this.name="SyncFormatError",this.reason=reason}}var canonicalNumber=(value)=>{if(!Number.isSafeInteger(value))throw new SyncFormatError("bad_integer",`not a bounded integer: ${String(value)}`);return JSON.stringify(value)},jcsCanonical=(value)=>{if(value===null)return"null";if(typeof value==="boolean")return value?"true":"false";if(typeof value==="number")return canonicalNumber(value);if(typeof value==="string")return JSON.stringify(value);if(Array.isArray(value))return jcsArray(value);return jcsRecord(value)},jcsArray=(items)=>`[${items.map((item)=>jcsCanonical(item)).join(",")}]`,jcsRecord=(value)=>`{${Object.keys(value).sort().map((key)=>{let item=Reflect.get(value,key);return`${JSON.stringify(key)}:${jcsCanonical(item)}`}).join(",")}}`,jcsBytes=(value)=>new Uint8Array(new TextEncoder().encode(jcsCanonical(value))),B64_ALPHABET="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",b64urlEncode=(bytes)=>{let out="";for(let i=0;i<bytes.length;i+=3){let a=bytes[i]??0,b=bytes[i+1],c=bytes[i+2];if(out+=B64_ALPHABET[a>>2]??"",out+=B64_ALPHABET[(a&3)<<4|(b??0)>>4]??"",b!==void 0)out+=B64_ALPHABET[(b&15)<<2|(c??0)>>6]??"";if(c!==void 0)out+=B64_ALPHABET[c&63]??""}return out},b64urlDecode=(text)=>{if(text.length===0||text.includes("=")||text.length%4===1)throw new SyncFormatError("bad_base64url","expected nonempty unpadded base64url");let bytes=[],acc=0,bits=0;for(let ch of text){let value=B64_ALPHABET.indexOf(ch);if(value===-1)throw new SyncFormatError("bad_base64url",`foreign character: ${ch}`);if(acc=acc<<6|value,bits+=6,bits>=8)bits-=8,bytes.push(acc>>bits&255)}if(bits>0&&(acc&(1<<bits)-1)!==0)throw new SyncFormatError("bad_base64url","nonzero trailing bits: not canonical");return new Uint8Array(bytes)},sha256=async(bytes)=>new Uint8Array(await crypto.subtle.digest("SHA-256",bytes)),sha256B64=async(bytes)=>b64urlEncode(await sha256(bytes)),concatBytes=(parts)=>{let total=parts.reduce((sum,part)=>sum+part.length,0),out=new Uint8Array(total),offset=0;for(let part of parts)out.set(part,offset),offset+=part.length;return out},asciiBytes=(text)=>new Uint8Array([...text].map((ch)=>ch.charCodeAt(0)&127));var hexBytes=(hex)=>{let pairs=hex.match(/../g);return Uint8Array.from((pairs??[]).map((pair)=>Number.parseInt(pair,16)))},ED25519_PKCS8_PREFIX=hexBytes("302e020100300506032b657004220420"),ED25519_SPKI_PREFIX=hexBytes("302a300506032b6570032100");var importVerifyKey=(publicKey)=>crypto.subtle.importKey("spki",concatBytes([ED25519_SPKI_PREFIX,publicKey]),"Ed25519",!1,["verify"]);var frameBytes=(context,payload)=>concatBytes([asciiBytes(context),Uint8Array.from([0]),payload]),framedPreimage=(context,payload)=>frameBytes(context,jcsBytes(payload));var verifyFramed=async(context,payload,publicKey,signature)=>{if(publicKey.length!==32||signature.length!==64)return!1;try{let key=await importVerifyKey(publicKey);return await crypto.subtle.verify("Ed25519",key,signature,framedPreimage(context,payload))}catch{return!1}},verifyFramedBytes=async(context,payload,publicKey,signature)=>{if(publicKey.length!==32||signature.length!==64)return!1;try{let key=await importVerifyKey(publicKey);return await crypto.subtle.verify("Ed25519",key,signature,frameBytes(context,payload))}catch{return!1}};var P=(1n<<255n)-19n,L=(1n<<252n)+27742317777372353535851937790883648493n,mod=(n)=>{let r=n%P;return r<0n?r+P:r},power=(base,exponent)=>{let result=1n,b=mod(base);for(let n=exponent;n>0n;n>>=1n){if(n&1n)result=mod(result*b);b=mod(b*b)}return result},D=mod(-121665n*power(121666n,P-2n)),SQRT_MINUS_ONE=power(2n,(P-1n)/4n),squareN=(x,n)=>{for(let i=0;i<n;i++)x=mod(x*x);return x},sqrtPower=(z)=>{let z2=mod(z*z),z9=mod(squareN(z2,2)*z),a=mod(squareN(mod(z2*z9),1)*z9);a=mod(squareN(a,5)*a);let b=mod(squareN(a,10)*a);return b=mod(squareN(b,20)*b),a=mod(squareN(b,10)*a),b=mod(squareN(a,50)*a),b=mod(squareN(b,100)*b),a=mod(squareN(b,50)*a),mod(squareN(a,2)*z)},IDENTITY={x:0n,y:1n,z:1n,t:0n},add=(p,q)=>{let a=mod((p.y-p.x)*(q.y-q.x)),b=mod((p.y+p.x)*(q.y+q.x)),c=mod(2n*D*p.t*q.t),d=mod(2n*p.z*q.z),e=b-a,f=d-c,g=d+c,h=b+a;return{x:mod(e*f),y:mod(g*h),z:mod(f*g),t:mod(e*h)}},multiply=(point,scalar)=>{let result=IDENTITY,p=point;for(let n=scalar;n>0n;n>>=1n){if(n&1n)result=add(result,p);p=add(p,p)}return result},equal=(p,q)=>mod(p.x*q.z-q.x*p.z)===0n&&mod(p.y*q.z-q.y*p.z)===0n,littleEndian=(bytes)=>{let n=0n;for(let b of Array.from(bytes).reverse())n=n<<8n|BigInt(b);return n},decodePoint=(bytes)=>{if(bytes.length!==32)return;let encoded=littleEndian(bytes),sign=encoded>>255n,y=encoded&(1n<<255n)-1n;if(y>=P)return;let y2=mod(y*y),u=mod(y2-1n),v=mod(D*y2+1n),v3=mod(v*v*v),v7=mod(v3*v3*v),x=mod(u*v3*sqrtPower(mod(u*v7)));if(mod(v*x*x)===mod(-u))x=mod(x*SQRT_MINUS_ONE);if(mod(v*x*x)!==u)return;if(x===0n&&sign===1n)return;if((x&1n)!==sign)x=mod(-x);let point={x,y,z:1n,t:mod(x*y)};if(equal(multiply(point,8n),IDENTITY))return;return point};var keyCache=new Map,cachedPublicKey=(key)=>{let encoded=Array.from(key,(b)=>b.toString(16).padStart(2,"0")).join(""),cached=keyCache.get(encoded);if(cached!==void 0)return keyCache.delete(encoded),keyCache.set(encoded,cached),cached;let point=decodePublicKeyUncached(key);if(keyCache.size===1024){let oldest=keyCache.keys().next().value;if(oldest!==void 0)keyCache.delete(oldest)}let entry={point:point??!1};return keyCache.set(encoded,entry),entry},decodePublicKey=(key)=>{if(key.length!==32)return;let point=cachedPublicKey(key).point;return point===!1?void 0:point},decodePublicKeyUncached=(key)=>{let point=decodePoint(key);if(point===void 0||!equal(multiply(point,L),IDENTITY))return;return point},strictEd25519Key=(key)=>decodePublicKey(key)!==void 0,strictEd25519Precheck=(key,sig)=>{if(key.length!==32||sig.length!==64)return{ok:!1,refusal:"malformed"};if(decodePublicKey(key)===void 0||decodePoint(sig.subarray(0,32))===void 0||littleEndian(sig.subarray(32))>=L)return{ok:!1,refusal:"malformed"};return{ok:!0}};var decodeB64=(value,length)=>{if(typeof value!=="string")return null;try{let bytes=b64urlDecode(value);return length===void 0||bytes.length===length?bytes:null}catch{return null}},verifyTagged=async(context,payload,publicKey,signature)=>{let key=decodeB64(publicKey,32),sig=decodeB64(signature,64);if(key===null||sig===null||!strictEd25519Precheck(key,sig).ok)return!1;return verifyFramedBytes(context,jcsBytes(payload),key,sig)},isStrongKeyText=(publicKey)=>{let key=decodeB64(publicKey,32);return key!==null&&strictEd25519Key(key)},taggedHash=(context,payload)=>sha256B64(concatBytes([asciiBytes(context),Uint8Array.from([0]),jcsBytes(payload)])),deviceIdOf=async(signingPublicKey)=>{let key=decodeB64(signingPublicKey,32);if(key===null)return null;let prefix=concatBytes([asciiBytes("omo-sync/v1/device-id"),Uint8Array.from([0]),key]);return b64urlEncode((await sha256(prefix)).subarray(0,16))},recordPayload=(fields)=>({t:"omo-sync/v1/record",account:fields.account,base_seq:fields.base_seq,digest:fields.digest,epoch:fields.epoch,link:fields.link,...fields.keyring_link===null?{}:{keyring_link:fields.keyring_link}}),authorSigningKey=(authority,author)=>author.kind==="recovery"?authority.registry.get(author.credential_id)?.signing_public_key??null:authority.members.get(author.id)?.signing_public_key??null,verifyRecordSig=(signingPublicKey,fields)=>verifyTagged("omo-sync/v1/record",recordPayload(fields),signingPublicKey,fields.record_sig);class TrustPinError extends Error{problem;name="TrustPinError";next=ANCHOR_NEXT_STEP;constructor(problem){super(`trust pin refused: ${problem}; ${ANCHOR_NEXT_STEP}`);this.problem=problem}}var PIN_FILE="pin.json",SOURCES=new Set(["pairing","recovery","creator"]),accountKey=(account)=>createHash4("sha256").update(account,"utf8").digest("base64url"),rootDir=(stateDir)=>join3(stateDir,"trust-anchor"),pinDir=(stateDir,account)=>join3(rootDir(stateDir),accountKey(account)),isMissing=(error)=>error instanceof Error&&("code"in error)&&error.code==="ENOENT",alive=(pid)=>{try{return process.kill(pid,0),!0}catch(error){return error instanceof Error&&"code"in error&&error.code==="EPERM"}},cleanStaleCandidates=async(stateDir,account)=>{let prefix=`${accountKey(account)}.`,names;try{names=await readdir(rootDir(stateDir))}catch(error){if(error instanceof Error&&"code"in error&&error.code==="ENOENT")return;throw error}for(let name of names){let pid=Number(name.slice(prefix.length).split(".")[0]);if(name.startsWith(prefix)&&name.endsWith(".tmp")&&Number.isSafeInteger(pid)&&!alive(pid))await rm(join3(rootDir(stateDir),name),{recursive:!0,force:!0})}},hasExactly2=(value,keys)=>Object.keys(value).sort().join(",")===[...keys].sort().join(","),isRecord=(value)=>typeof value==="object"&&value!==null&&!Array.isArray(value),parsePin=(raw,account)=>{let value;try{value=JSON.parse(raw)}catch{return null}if(!isRecord(value)||!hasExactly2(value,["version","account","genesis_digest","pinned_by","pinned_at"]))return null;let at=value.pinned_at,digest=value.genesis_digest;if(value.version!==1||value.account!==account||typeof digest!=="string"||decodeB64(digest,32)===null)return null;if(typeof value.pinned_by!=="string"||!SOURCES.has(value.pinned_by))return null;if(!isRecord(at)||!hasExactly2(at,["seq","keyring_link"])||!Number.isSafeInteger(at.seq)||Number(at.seq)<1)return null;if(typeof at.keyring_link!=="string"||decodeB64(at.keyring_link,32)===null)return null;return mintTrustAnchor(account,digest)},loadTrustAnchor=async(stateDir,account)=>{await cleanStaleCandidates(stateDir,account);let raw;try{raw=await readFile2(join3(pinDir(stateDir,account),PIN_FILE),"utf8")}catch(error){if(!isMissing(error))throw error;try{await stat2(pinDir(stateDir,account))}catch(dirError){if(isMissing(dirError))return{ok:!1,reason:"no_pin",next:ANCHOR_NEXT_STEP};throw dirError}return{ok:!1,reason:"corrupt_pin",next:ANCHOR_NEXT_STEP}}let anchor=parsePin(raw,account);return anchor===null?{ok:!1,reason:"corrupt_pin",next:ANCHOR_NEXT_STEP}:{ok:!0,anchor}},pinTrustAnchor=async(stateDir,account,candidate)=>{if(!isPinCandidate(candidate)||candidate.account!==account)throw new TrustPinError("not_verified");let existing=await loadTrustAnchor(stateDir,account);if(existing.ok){if(existing.anchor.genesisDigest===candidate.genesisDigest)return existing.anchor;throw new TrustPinError("pin_conflict")}if(existing.reason==="corrupt_pin")throw new TrustPinError("corrupt_pin");let target=pinDir(stateDir,account);await mkdir2(rootDir(stateDir),{recursive:!0,mode:448});let staging=`${target}.${process.pid}.${randomBytes2(6).toString("hex")}.tmp`;await mkdir2(staging,{mode:448});let pin={version:1,account,genesis_digest:candidate.genesisDigest,pinned_by:candidate.pinnedBy,pinned_at:{...candidate.at}};try{await writeFile2(join3(staging,PIN_FILE),`${JSON.stringify(pin)}
121
+ `,{flag:"wx",mode:384}),await syncJournalFile(join3(staging,PIN_FILE)),await syncJournalDirectory(staging);try{await rename(staging,target)}catch(error){if(!(await loadTrustAnchor(stateDir,account)).ok)throw error}}finally{await rm(staging,{recursive:!0,force:!0})}await syncJournalDirectory(rootDir(stateDir));let written=await loadTrustAnchor(stateDir,account);if(!written.ok||written.anchor.genesisDigest!==candidate.genesisDigest)throw new TrustPinError("pin_conflict");return written.anchor};import{join as join4}from"node:path";var syncPinDir=(memoryRoot)=>join4(memoryRoot,"sync-device");var ACCOUNT_EXIT={ok:0,failed:1,invalid:2,conflict:3,signedOut:4,ended:5,uncertain:6,keychainLocked:7,keychainUnavailable:8},deviceOf=(credentials)=>({id:credentials.device.id,name:credentials.device.name}),reply=(dependencies,value,code=ACCOUNT_EXIT.ok)=>(dependencies.output(JSON.stringify(value)),code),parseInput=(text)=>{try{let parsed=credentialSchema.safeParse(JSON.parse(text));if(!parsed.success)return null;let{refreshState:_ignored,...credentials}=parsed.data;return credentials}catch{return null}};async function adopt(dependencies,replace){let incoming=parseInput(await dependencies.readStdin());if(incoming===null)return dependencies.error("omo account adopt: stdin is not a valid credential"),ACCOUNT_EXIT.invalid;return createSession({api:dependencies.api,store:dependencies.store,...dependencies.home===void 0?{}:{home:dependencies.home}}).update(async(current)=>{if(current!==null&&current.device.id!==incoming.device.id&&!replace)return reply(dependencies,{conflict:{device:deviceOf(current)}},ACCOUNT_EXIT.conflict);if(!(current!==null&&current.device.id===incoming.device.id&&current.refreshState!=="uncertain"&&Date.parse(current.accessTokenExpiresAt)>Date.parse(incoming.accessTokenExpiresAt)))await dependencies.store.write(incoming);return reply(dependencies,{adopted:!0,device:deviceOf(incoming)})})}async function token(dependencies){if(await dependencies.store.read()===null)return reply(dependencies,{signedIn:!1},ACCOUNT_EXIT.signedOut);let session=createSession({api:dependencies.api,store:dependencies.store,...dependencies.home===void 0?{}:{home:dependencies.home}});try{let accessToken=await session.accessToken(),current=await dependencies.store.read();if(current===null)return reply(dependencies,{signedIn:!1},ACCOUNT_EXIT.signedOut);return reply(dependencies,{accessToken,accessTokenExpiresAt:current.accessTokenExpiresAt,device:deviceOf(current)})}catch(error){if(error instanceof KeychainLockedError||error instanceof SecretServiceUnavailableError)throw error;let after=await dependencies.store.read();if(dependencies.error(error instanceof Error?error.message:"omo account token: the refresh failed"),after===null)return error instanceof SessionEnded?reply(dependencies,{ended:{code:error.code}},ACCOUNT_EXIT.ended):reply(dependencies,{signedIn:!1},ACCOUNT_EXIT.signedOut);if(after.refreshState==="uncertain")return ACCOUNT_EXIT.uncertain;return ACCOUNT_EXIT.failed}}async function syncStateOf(pinDir,account){let pin=await loadTrustAnchor(pinDir,account);if(pin.ok)return"joined";return pin.reason==="corrupt_pin"?"corrupt_pin":"not_joined"}async function runVerb(dependencies,args){let[verb,...flags]=args;switch(verb){case"show":{let current=await dependencies.store.read(),accountAt=flags.indexOf("--account"),account=accountAt===-1?void 0:flags[accountAt+1];if(accountAt!==-1&&(account===void 0||account===""))return dependencies.error("omo account show: --account needs an account id"),ACCOUNT_EXIT.invalid;let sync=account===void 0?{}:{sync:await syncStateOf(dependencies.pinDir(),account)};return reply(dependencies,current===null?{signedIn:!1,...sync}:{signedIn:!0,device:deviceOf(current),refreshState:current.refreshState??"ok",...sync})}case"adopt":return adopt(dependencies,flags.includes("--replace"));case"token":return token(dependencies);case"export":{let current=await dependencies.store.read();return current===null?reply(dependencies,{signedIn:!1},ACCOUNT_EXIT.signedOut):reply(dependencies,current)}case"forget":return await createSession({api:dependencies.api,store:dependencies.store,...dependencies.home===void 0?{}:{home:dependencies.home}}).update(async()=>dependencies.store.clear()),reply(dependencies,{forgotten:!0});default:return dependencies.error("usage: omo account show [--account <id>]|adopt [--replace]|token|export|forget"),ACCOUNT_EXIT.invalid}}async function runAccountVerb(dependencies,args){try{return await runVerb(dependencies,args)}catch(error){if(error instanceof KeychainLockedError)return dependencies.error(error.message),reply(dependencies,{keychain:"locked"},ACCOUNT_EXIT.keychainLocked);if(error instanceof SecretServiceUnavailableError)return dependencies.error(error.message),reply(dependencies,{keychain:"unavailable"},ACCOUNT_EXIT.keychainUnavailable);return dependencies.error(error instanceof SignInError||error instanceof Error?error.message:"omo account: the operation failed"),ACCOUNT_EXIT.failed}}async function runAccountCommand(args){let api=serviceOrigin(process.env.OMO_SERVICE_API_URL??"https://api.omo.dev"),store;process.exitCode=await runAccountVerb({api,get store(){return store??=createCredentialStore(api)},pinDir:()=>syncPinDir(resolveMemoryRoot(process.env,process.cwd())),readStdin:()=>new Response(Bun.stdin.stream()).text(),output:(line)=>process.stdout.write(`${line}
122
+ `),error:(line)=>process.stderr.write(`${line}
123
+ `)},args.slice(1))}import{createInterface}from"node:readline/promises";var createRejectionCounter=(log)=>{let rejected=0,last="";return{count:()=>rejected,lastEvent:()=>last,record:(reason)=>{rejected+=1,last=`sync.batch.rejected ${reason}`,log?.(last)}}};var nextLink=async(prior,digest)=>{let digestBytes=decodeB64(digest,32);if(digestBytes===null)return null;if(prior.length===0)return sha256B64(digestBytes);let priorBytes=decodeB64(prior,32);if(priorBytes===null)return null;return sha256B64(concatBytes([priorBytes,digestBytes]))},wrapSetDigest=async(wraps)=>{if(new Set(wraps.map((wrap)=>`${wrap.epoch}:${wrap.id}`)).size!==wraps.length)return{ok:!1,reason:"duplicate_wrap"};let rows=wraps.map((wrap)=>({epoch:wrap.epoch,id:wrap.id,wrap:wrap.wrap}));return{ok:!0,digest:await sha256B64(jcsBytes(rows))}};var isRow=(value)=>typeof value==="object"&&value!==null&&!Array.isArray(value),hasExactly3=(value,keys)=>{let own=Object.keys(value).sort(),want=[...keys].sort();return own.length===want.length&&own.every((key,index)=>key===want[index])},isInteger=(value,min)=>typeof value==="number"&&Number.isSafeInteger(value)&&value>=min,isText=(value)=>typeof value==="string"&&value.length>0;var withinDepth=(value)=>{let stack=[[value,1]];for(let next=stack.pop();next!==void 0;next=stack.pop()){let[node,depth]=next;if(typeof node!=="object"||node===null)continue;if(depth>64)return!1;for(let child of Object.values(node))stack.push([child,depth+1])}return!0},COMMON2=["seq","base_seq","kind","account","epoch","author","digest","link","keyring_link","record_sig"],authorHolds=(author)=>{if(!isRow(author))return!1;if(author.kind==="device")return hasExactly3(author,["kind","id","sealing_public_key","signing_public_key"])&&isText(author.id)&&isText(author.sealing_public_key)&&isText(author.signing_public_key);return author.kind==="recovery"&&hasExactly3(author,["kind","credential_id"])&&isText(author.credential_id)},wrapsHold=(wraps)=>Array.isArray(wraps)&&wraps.every((wrap)=>isRow(wrap)&&hasExactly3(wrap,["epoch","id","wrap"])&&isInteger(wrap.epoch,1)&&isText(wrap.id)&&isText(wrap.wrap)),envelopeRefusal=(entry)=>{let row=entry;if(!isRow(row)||!withinDepth(row))return"bad_envelope";let common=isInteger(row.seq,1)&&isInteger(row.base_seq,0)&&isInteger(row.epoch,1)&&isText(row.account)&&isText(row.digest)&&isText(row.link)&&isText(row.record_sig)&&authorHolds(row.author);if(row.kind==="batch"){if("body"in row)return"batch_with_body";return common&&hasExactly3(row,COMMON2)&&row.keyring_link===null?null:"bad_envelope"}if(row.kind!=="keyring")return"bad_envelope";let shaped=hasExactly3(row,[...COMMON2,"body","wraps"])&&isText(row.keyring_link)&&isRow(row.body)&&wrapsHold(row.wraps);return common&&shaped?null:"bad_envelope"};var deep=new WeakSet;class ClosedMap{#inner;constructor(entries){this.#inner=new Map(entries),Object.freeze(this)}get size(){return this.#inner.size}get(key){return this.#inner.get(key)}has(key){return this.#inner.has(key)}forEach(callback){for(let[key,value]of this.#inner)callback(value,key,this)}entries(){return this.#inner.entries()}keys(){return this.#inner.keys()}values(){return this.#inner.values()}[Symbol.iterator](){return this.#inner[Symbol.iterator]()}}class ClosedSet{#inner;constructor(values){this.#inner=new Set(values),Object.freeze(this)}get size(){return this.#inner.size}has(value){return this.#inner.has(value)}forEach(callback){for(let value of this.#inner)callback(value,value,this)}entries(){return this.#inner.entries()}keys(){return this.#inner.keys()}values(){return this.#inner.values()}[Symbol.iterator](){return this.#inner[Symbol.iterator]()}union(other){return this.#inner.union(other)}intersection(other){return this.#inner.intersection(other)}difference(other){return this.#inner.difference(other)}symmetricDifference(other){return this.#inner.symmetricDifference(other)}isSubsetOf(other){return this.#inner.isSubsetOf(other)}isSupersetOf(other){return this.#inner.isSupersetOf(other)}isDisjointFrom(other){return this.#inner.isDisjointFrom(other)}}var registered=(value)=>(deep.add(value),value),isPlain=(value)=>{let prototype=Object.getPrototypeOf(value);return prototype===Object.prototype||prototype===null},freezeDeep=(value,keep)=>{if(typeof value==="function")throw TypeError("a verified state holds only plain data, never a function");if(typeof value!=="object"||value===null)return value;if(deep.has(value)||keep(value))return value;if(Array.isArray(value))return registered(Object.freeze(value.map((item)=>freezeDeep(item,keep))));if(value instanceof Map)return registered(new ClosedMap([...value].map(([key,item])=>[freezeDeep(key,keep),freezeDeep(item,keep)])));if(value instanceof Set)return registered(new ClosedSet([...value].map((item)=>freezeDeep(item,keep))));if(!isPlain(value))throw TypeError("a verified state holds only plain data");return registered(Object.freeze(Object.fromEntries(Object.entries(value).map(([key,item])=>[key,freezeDeep(item,keep)]))))},isCopyOf=(copy,original)=>copy===original||typeof copy==="object"&&copy!==null&&deep.has(copy),frozenCopy=(value,keep)=>{let copy=freezeDeep(value,keep);if(!isCopyOf(copy,value))throw Error("unreachable: a frozen copy is always registered");return copy};var withEntry=(map,key,value)=>new Map([...map,[key,value]]),without=(map,key)=>{let next=new Map(map);return next.delete(key),next},genesisAuthority=(record)=>{let body=record.body;if(body.kind!=="genesis")return null;return{members:new Map([[body.firstDevice.id,body.firstDevice]]),registry:new Map([[body.recoveryKey.credential_id,body.recoveryKey]]),epoch:1,custodyRoot:body.custodyRoot,epochOrigins:new Map([[1,record.digest]]),admittedBy:new Map([[body.firstDevice.id,record.digest]]),enrolledEver:new Set([body.recoveryKey.credential_id]),cancelled:new Set}},applyRecord=(history,record)=>{let before=record.before;if(before===null)return genesisAuthority(record);let body=record.body;switch(body.kind){case"genesis":return null;case"fork-resolution":return{...before,members:new Map(body.members.map((member)=>[member.id,member])),registry:new Map(body.recoveryKeys.map((key)=>[key.credential_id,key])),enrolledEver:new Set([...before.enrolledEver,...body.recoveryKeys.map((key)=>key.credential_id)]),epoch:body.epoch,epochOrigins:body.epoch===before.epoch?before.epochOrigins:withEntry(before.epochOrigins,body.epoch,record.digest)};case"approval":return{...before,members:withEntry(before.members,body.principal.id,body.principal),admittedBy:withEntry(before.admittedBy,body.principal.id,record.digest)};case"recovery-key":return{...before,registry:withEntry(before.registry,body.key.credential_id,body.key),enrolledEver:new Set([...before.enrolledEver,body.key.credential_id])};case"recovery-key-removed":return{...before,registry:without(before.registry,body.credentialId)};case"rotation":return{...before,members:new Map(body.members.map((member)=>[member.id,member])),epoch:before.epoch+1,epochOrigins:withEntry(before.epochOrigins,before.epoch+1,record.digest)};case"recovery-join":{let used=before.registry.get(body.credentialId);if(used===void 0)return null;return{...before,members:new Map([[body.principal.id,body.principal]]),registry:new Map([[used.credential_id,used]]),admittedBy:withEntry(before.admittedBy,body.principal.id,record.digest)}}case"recovery-join-vetoed":{let join=history.find((candidate)=>candidate.digest===body.joinDigest);if(join===void 0||join.body.kind!=="recovery-join"||join.before===null)return null;let later=history.filter((candidate)=>candidate.seq>join.seq);return{...before,members:join.before.members,registry:without(join.before.registry,join.body.credentialId),cancelled:new Set([...before.cancelled,...later.map((candidate)=>candidate.digest)])}}}},isVetoedEpoch=(authority,epoch)=>{let origin=authority.epochOrigins.get(epoch);return origin!==void 0&&authority.cancelled.has(origin)},isCancelledAdmission=(authority,principalId)=>{let origin=authority.admittedBy.get(principalId);return origin!==void 0&&authority.cancelled.has(origin)};var linksHold=async(head,entry,mode)=>{let priorSeq=head===null?0:head.seq;if(mode==="main"){if(entry.base_seq!==priorSeq||entry.seq!==priorSeq+1)return!1;if(entry.link!==await nextLink(head===null?"":head.link,entry.digest))return!1}else if(entry.seq<=priorSeq||entry.base_seq!==entry.seq-1)return!1;if(entry.kind==="batch")return entry.keyring_link===null;return entry.keyring_link===await nextLink(head===null?"":head.keyring_link,entry.digest)},signerKey=(body,before,author,history)=>{if(body.kind==="genesis")return author.kind==="device"&&author.id===body.firstDevice.id?body.firstDevice.signing_public_key:null;if(before===null)return null;if(body.kind==="recovery-join")return author.kind==="recovery"&&author.credential_id===body.credentialId?authorSigningKey(before,author):null;if(author.kind!=="device")return null;if(body.kind==="recovery-join-vetoed"){let join=history.find((record)=>record.digest===body.joinDigest);return join?.before==null?null:authorSigningKey(join.before,author)}if(isCancelledAdmission(before,author.id))return null;return authorSigningKey(before,author)},expectedEpoch=(body,before)=>{if(body.kind==="genesis")return 1;if(body.kind==="fork-resolution")return body.epoch;if(before===null)return null;return body.kind==="rotation"?before.epoch+1:before.epoch},forcedRotationRefusal=(forcedRotationAfter,body)=>{let fork=body?.kind==="rotation"?body.forkResolution:null;if(forcedRotationAfter!==null)return fork===forcedRotationAfter?null:"forced_rotation_required";return fork===null?null:"bad_fork_resolution"},keyWithinEpoch=(history,current,author,epoch)=>{let after=history.map((_,index)=>history[index+1]?.before??current);for(let authority of after.reverse()){let key=authority!==null&&authority.epoch===epoch?authorSigningKey(authority,author):null;if(key!==null)return key}return null};var readStringField=(body,key)=>{let value=Reflect.get(body,key);return typeof value==="string"?value:""},enrolledKey=(body,credentialId)=>({credential_id:credentialId,rp_id:readStringField(body,"rp_id"),enrollment_nonce:readStringField(body,"enrollment_nonce"),sealing_public_key:readStringField(body,"sealing_public_key"),signing_public_key:readStringField(body,"signing_public_key"),survivable:Reflect.get(body,"survivable")==="roaming"?"roaming":"synced"}),authorityOf=(state)=>({members:new Map(state.members.map((member)=>[member.id,member])),registry:new Map(state.recovery_keys.map((key)=>[key.credential_id,key]))}),copyOf=(authority)=>({members:new Map(authority.members),registry:new Map(authority.registry)}),doneWithDigest=(state,digest)=>{let at=digest===void 0?void 0:state.byDigest.get(digest);return at===void 0?void 0:state.done[at]},doneThrough=(state,seq)=>{let at=state.bySeq.get(seq);return at===void 0?[]:state.done.slice(0,at+1)},apply=(state,body)=>{let{authority}=state,{members,registry}=authority;if(body.kind==="genesis"&&body.bootstrap!==void 0){let{first_device:first,recovery_key:key}=body.bootstrap;return{members:new Map([[first.id,first]]),registry:new Map([[key.credential_id,key]])}}if(body.kind==="approval"&&body.principal!==void 0)members.set(body.principal.id,body.principal);else if(body.kind==="recovery-key"&&body.credential_id!==void 0)registry.set(body.credential_id,enrolledKey(body,body.credential_id));else if(body.kind==="recovery-key-removed"&&body.credential_id!==void 0)registry.delete(body.credential_id);else if(body.kind==="recovery-join"&&body.principal!==void 0){let used=body.credential_id===void 0?void 0:registry.get(body.credential_id);return{members:new Map([[body.principal.id,body.principal]]),registry:used===void 0?new Map:new Map([[used.credential_id,used]])}}else if(body.kind==="recovery-join-vetoed"){let at=body.join_digest===void 0?void 0:state.byDigest.get(body.join_digest),join=at===void 0?void 0:state.done[at],prior=join===void 0?void 0:state.beforeJoin.get(join.seq);if(at===void 0||join===void 0||prior===void 0)return authority;let restored=new Map(prior.registry);if(join.body?.credential_id!==void 0)restored.delete(join.body.credential_id);for(let later of state.done.slice(at+1))state.cancelled.add(later.digest);return{members:new Map(prior.members),registry:restored}}else if(body.kind==="rotation"&&body.members!==void 0)return{members:new Map(body.members.map((m)=>[m.id,m])),registry};else if(body.kind==="fork-resolution"&&body.state!==void 0)return authorityOf(body.state);return authority};var asciiCompare=(a,b)=>a<b?-1:a>b?1:0,compareMembers=(a,b)=>asciiCompare(a.id,b.id),compareRecoveryKeys=(a,b)=>asciiCompare(a.credential_id,b.credential_id),compareWrapEntries=(a,b)=>a.epoch-b.epoch||asciiCompare(a.id,b.id),assertCanonicalOrder=(items,compare)=>{for(let i=1;i<items.length;i+=1){let prev=items[i-1],current=items[i];if(prev===void 0||current===void 0)return!1;if(compare(prev,current)>=0)return!1}return!0};var recordPreimage=(entry)=>{let link=entry.keyring_link;if(entry.kind==="keyring"&&(link===null||link===void 0))throw new SyncFormatError("missing_keyring_link","a keyring entry signs its keyring_link");return{t:"omo-sync/v1/record",account:entry.account,base_seq:entry.base_seq,digest:entry.digest,epoch:entry.epoch,link:entry.link,...entry.kind==="keyring"&&typeof link==="string"?{keyring_link:link}:{}}},entryAuthorKey=(fold,author)=>{let b64=author.kind==="recovery"?fold.registry.get(author.credential_id)?.signing_public_key:fold.members.get(author.id)?.signing_public_key;if(b64===void 0)return{ok:!1,reason:"not_member"};try{let keyBytes=b64urlDecode(b64);return keyBytes.length===32?{ok:!0,signingPublicKey:keyBytes}:{ok:!1,reason:"bad_base64url"}}catch{return{ok:!1,reason:"bad_base64url"}}},verifyEntrySignature=async(fold,entry)=>{let key=entryAuthorKey(fold,entry.author);if(!key.ok)return!1;try{return await verifyFramed("omo-sync/v1/record",recordPreimage(entry),key.signingPublicKey,b64urlDecode(entry.record_sig))}catch(error){if(error instanceof SyncFormatError)return!1;throw error}},linkDigestPair=(priorLink,digest)=>{let prior=b64urlDecode(priorLink),current=b64urlDecode(digest);return new Uint8Array([...prior,...current])};var branchRefusal=(evidence)=>{for(let{records,tip}of evidence.branches){let last=records.at(-1);if(last===void 0)return"fork_set_mismatch";for(let[i,record]of records.entries()){let expected=evidence.common.seq+1+i;if(record.seq!==expected||record.seq!==record.base_seq+1)return"noncanonical_order"}let lastKeyring=records.filter((r)=>r.kind==="keyring").at(-1),tipLink=lastKeyring===void 0?evidence.common.keyring_link:lastKeyring.keyring_link;if(last.seq!==tip.seq||last.digest!==tip.digest||tipLink!==tip.keyring_link)return"fork_set_mismatch"}return null},recordProves=async(record,prior)=>{if(record.link!==await sha256B64(linkDigestPair(prior.link,record.digest)))return!1;if(record.kind==="batch")return record.keyring_link===null&&record.body==null;if(record.body===void 0||record.body===null)return!1;if(record.digest!==await sha256B64(jcsBytes(record.body)))return!1;let keyringLink=await sha256B64(linkDigestPair(prior.keyringLink,record.digest));return record.keyring_link===keyringLink},verifyForkEvidence=async(ancestry,evidence,foldAt)=>{let common=ancestry.find((e)=>e.seq===evidence.common.seq&&e.digest===evidence.common.digest);if(common===void 0)return!1;for(let{records}of evidence.branches){let prior={link:common.link,keyringLink:evidence.common.keyring_link};for(let[i,record]of records.entries()){if(!await recordProves(record,prior))return!1;let fold=foldAt([...ancestry,...records.slice(0,i)]);if(!await verifyEntrySignature(fold,record))return!1;prior={link:record.link,keyringLink:record.kind==="keyring"?record.keyring_link??"":prior.keyringLink}}}return!0};var compareRecordRef=(a,b)=>a.seq-b.seq||asciiCompare(a.digest,b.digest),sameRef=(a,b)=>a.seq===b.seq&&a.digest===b.digest&&a.keyring_link===b.keyring_link,forkSetMatchesEvidence=(forkSet,branches)=>{if(forkSet.length<2)return!1;if(!assertCanonicalOrder(forkSet,compareRecordRef))return!1;if(forkSet.length!==branches.length)return!1;return forkSet.every((ref,i)=>{let tip=branches[i]?.tip;return tip!==void 0&&sameRef(ref,tip)})};var mergeWithRemovalPrecedence=(base,ends)=>{let removed=new Set([...base.keys()].filter((key)=>ends.some((end)=>!end.has(key)))),merged=new Map([...base].filter(([key])=>!removed.has(key))),first=ends[0];if(first===void 0)return merged;for(let[key,value]of first)if(!merged.has(key)&&!removed.has(key)&&ends.every((end)=>end.has(key)))merged.set(key,value);return merged},recomputeForkStateWith=(fold,ancestry,evidence)=>{let common=fold(ancestry),ends=evidence.branches.map((branch)=>fold([...ancestry,...branch.records])),members=[...mergeWithRemovalPrecedence(common.members,ends.map((end)=>end.members)).values()].sort(compareMembers),recoveryKeys=[...mergeWithRemovalPrecedence(common.registry,ends.map((end)=>end.registry)).values()].sort(compareRecoveryKeys),epoch=Math.max(0,...evidence.branches.flatMap((branch)=>branch.records.map((record)=>record.epoch)));return{members,recovery_keys:recoveryKeys,epoch}};var forkRefusal=(entry,body,state)=>{let{evidence,state:stated}=body;if(evidence===void 0||stated===void 0)return"fork_state_mismatch";if(!forkSetMatchesEvidence(body.fork_set??[],evidence.branches))return"fork_set_mismatch";let branches=branchRefusal(evidence);if(branches!==null)return branches;if(!assertCanonicalOrder(stated.members,compareMembers))return"noncanonical_order";if(!assertCanonicalOrder(stated.recovery_keys,compareRecoveryKeys))return"noncanonical_order";let at=state.bySeq.get(evidence.common.seq),common=at===void 0?void 0:state.done[at];if(common===void 0||common.digest!==evidence.common.digest)return"fork_common_unknown";let ancestry=doneThrough(state,common.seq);for(let branch of evidence.branches)if(!foldRefusal([...ancestry,...branch.records]).ok)return"fork_evidence_invalid";let recomputed=recomputeForkStateWith(foldAuthority,ancestry,evidence);if(jcsCanonical(recomputed)!==jcsCanonical(stated))return"fork_state_mismatch";let signer=entry.author;if(signer.kind!=="device"||!stated.members.some((m)=>m.id===signer.id))return"fork_signer_not_member";return null},joinRefusal=(entry,body,atEntry)=>{let{author}=entry;if(author.kind!=="recovery"||author.credential_id!==body.credential_id)return"recovery_join_author";return atEntry.registry.has(author.credential_id)?null:"recovery_join_unenrolled"},vetoRefusal=(entry,body,state)=>{let join=doneWithDigest(state,body.join_digest);if(join?.body?.kind!=="recovery-join")return"veto_not_a_join";let signer=entry.author;if(signer.kind!=="device"||state.beforeJoin.get(join.seq)?.members.has(signer.id)!==!0)return"veto_signer_not_member";return state.vetoed.has(join.digest)?"join_already_vetoed":null},refusalOf=(entry,state)=>{if(entry.seq<=state.lastSeq)return"seq_not_increasing";let authorKind=entry.author.kind;if(authorKind!=="device"&&authorKind!=="recovery")return"unknown_author_kind";if(entry.kind==="batch"&&entry.body!==void 0&&entry.body!==null)return"batch_with_body";if(entry.wraps!==void 0&&!assertCanonicalOrder(entry.wraps,compareWrapEntries))return"noncanonical_order";let body=entry.kind==="keyring"?entry.body??null:null;if(entry.author.kind==="recovery"&&body?.kind!=="recovery-join")return"recovery_author_not_join";if(body===null)return null;if(body.kind==="rotation"&&!assertCanonicalOrder(body.members??[],compareMembers))return"noncanonical_order";if(body.kind==="recovery-join")return joinRefusal(entry,body,state.authority);if(body.kind==="recovery-join-vetoed")return vetoRefusal(entry,body,state);return body.kind==="fork-resolution"?forkRefusal(entry,body,state):null},keyringFold=()=>{let state={authority:{members:new Map,registry:new Map},cancelled:new Set,done:[],byDigest:new Map,bySeq:new Map,beforeJoin:new Map,vetoed:new Set,lastSeq:0},pass=(entry)=>{state.lastSeq=Math.max(state.lastSeq,entry.seq)};return{refusal:(entry)=>refusalOf(entry,state),accept:(entry)=>{pass(entry);let body=entry.kind==="keyring"?entry.body??null:null;if(body?.kind==="recovery-join")state.beforeJoin.set(entry.seq,copyOf(state.authority));if(body!==null)state.authority=apply(state,body);if(body?.kind==="recovery-join-vetoed"&&body.join_digest!==void 0)state.vetoed.add(body.join_digest);let at=state.done.push(entry)-1;if(state.bySeq.set(entry.seq,at),!state.byDigest.has(entry.digest))state.byDigest.set(entry.digest,at)},pass,through:(seq)=>doneThrough(state,seq),fold:()=>({...state.authority,cancelled:state.cancelled})}},walk=(entries)=>{let fold=keyringFold(),refused=null;for(let entry of entries){let reason=fold.refusal(entry);if(reason===null){fold.accept(entry);continue}refused??={ok:!1,seq:entry.seq,reason},fold.pass(entry)}return{fold:fold.fold(),refused}},foldAuthority=(entries)=>walk(entries).fold,foldRefusal=(entries)=>{let{fold,refused}=walk(entries);return refused??{ok:!0,fold}};var createKeyringReceiver=()=>{let state=keyringFold(),receiveOne=async(entry)=>{let refused=state.refusal(entry);if(refused!==null)return refused;let evidence=entry.kind==="keyring"?entry.body?.evidence:void 0;if(entry.body?.kind==="fork-resolution"&&evidence!==void 0){let ancestry=state.through(evidence.common.seq);if(!await verifyForkEvidence(ancestry,evidence,foldAuthority))return"fork_evidence_invalid"}return state.accept(entry),null},queue=Promise.resolve();return{receive:(entry)=>{let result=queue.then(()=>receiveOne(entry));return queue=result.catch(()=>{return}),result},fold:()=>{let{members,registry,cancelled}=state.fold();return{members:new Map(members),registry:new Map(registry),cancelled:new Set(cancelled)}}}};var wire=(entries)=>JSON.parse(JSON.stringify(entries)),wired=new WeakMap,wireOnce=(entry)=>{let known=wired.get(entry);if(known!==void 0)return known;let[fresh]=wire([entry]);if(fresh===void 0)throw Error("unreachable: one entry wires to one entry");let frozen=frozenCopy(fresh,()=>!1);return wired.set(entry,frozen),frozen},firstRefusalAt=(received,entry,ours)=>{if(received.ok||received.seq>entry.seq)return null;return received.seq===entry.seq&&ours.has(received.seq)?received.reason:"receiver_seq_mismatch"},positionedAfter=async(history)=>{let receiver=createKeyringReceiver(),agrees=!0,lastSeq=0;for(let entry of history){if(await receiver.receive(wireOnce(entry))!==null){agrees=!1;break}lastSeq=entry.seq}return{keyring:async(entry)=>{let[wired]=wire([entry]);if(!agrees||wired===void 0)return"receiver_seq_mismatch";let refused=await receiver.receive(wired);if(refused===null)lastSeq=entry.seq;return refused},batch:(entry)=>{if(!agrees)return"receiver_seq_mismatch";if(entry.seq<=lastSeq)return"seq_not_increasing";return firstRefusalAt(foldRefusal(wire([entry])),entry,new Set([entry.seq]))}}},held=new WeakMap,takeReceiver=async(owner,history)=>{let kept=held.get(owner);if(kept===void 0)return positionedAfter(history);return held.delete(owner),kept};var holdReceiver=(owner,receiver)=>{held.set(owner,receiver)};var same=(a,b)=>a.length===b.length&&a.every((value,index)=>value===b[index]),checkWrapSet=async(wraps,wrapsDigest,epoch,recipients)=>{let set=await wrapSetDigest(wraps);if(!set.ok)return"bad_wrap_set";if(set.digest!==wrapsDigest)return"wraps_digest_mismatch";let got=wraps.map((wrap)=>`${wrap.epoch}:${wrap.id}`).sort(),want=recipients.map((id)=>`${epoch}:${id}`).sort();return same(got,want)?null:"bad_wrap_set"},countersignOk=(account,custodyRoot,predecessor,wrapsDigest,signingPublicKey,countersign)=>verifyTagged("omo-sync/v1/recovery-countersign",{t:"omo-sync/v1/recovery-countersign",account,custody_root:custodyRoot,predecessor,wraps_digest:wrapsDigest},signingPublicKey,countersign),signingKeysIn=(value)=>{if(Array.isArray(value))return value.flatMap(signingKeysIn);if(typeof value!=="object"||value===null)return[];return Object.entries(value).flatMap(([key,field])=>key==="signing_public_key"?[typeof field==="string"?field:""]:signingKeysIn(field))},admittedKeys=(entry,body)=>{switch(body.kind){case"genesis":return[body.firstDevice.signing_public_key,body.recoveryKey.signing_public_key];case"recovery-key":return[body.key.signing_public_key];case"approval":case"recovery-join":return[body.principal.signing_public_key];case"fork-resolution":return signingKeysIn(entry.body);case"rotation":case"recovery-key-removed":case"recovery-join-vetoed":return[]}},registryIds=(authority)=>[...authority.registry.keys()].map((id)=>`recovery:${id}`),checkRecordRules=async(entry,body,before,history,predecessor)=>{let account=entry.account;if(!admittedKeys(entry,body).every(isStrongKeyText))return"weak_key";if(body.kind==="genesis"){if(before!==null||entry.seq!==1)return"bad_genesis";if(await deviceIdOf(body.firstDevice.signing_public_key)!==body.firstDevice.id)return"bad_device_id";if(await taggedHash("omo-sync/v1/custody-root",body.bootstrap)!==body.custodyRoot)return"bad_custody_root";let key=body.recoveryKey;if(!await countersignOk(account,body.custodyRoot,"",body.wrapsDigest,key.signing_public_key,body.countersign))return"bad_countersign";return checkWrapSet(entry.wraps,body.wrapsDigest,1,[`device:${body.firstDevice.id}`,`recovery:${key.credential_id}`])}if(before===null)return"bad_genesis";switch(body.kind){case"recovery-key":{let key=body.key;if(before.enrolledEver.has(key.credential_id))return"credential_reused";if(!await countersignOk(account,before.custodyRoot,predecessor,body.wrapsDigest,key.signing_public_key,body.countersign))return"bad_countersign";return checkWrapSet(entry.wraps,body.wrapsDigest,before.epoch,[`recovery:${key.credential_id}`])}case"recovery-key-removed":if(!before.registry.has(body.credentialId))return"unknown_credential";return entry.wraps.length===0?null:"unexpected_wraps";case"approval":{let principal=body.principal;if(before.members.has(principal.id))return"already_member";if(await deviceIdOf(principal.signing_public_key)!==principal.id)return"bad_device_id";if(await taggedHash("omo-sync/v1/approval-commitment",{account,sealing_public_key:principal.sealing_public_key,signing_public_key:principal.signing_public_key,nonce:body.joiningNonce})!==body.commitment)return"bad_commitment";return checkWrapSet(entry.wraps,body.wrapsDigest,before.epoch,[`device:${principal.id}`])}case"rotation":{if(body.members.some((member)=>before.members.get(member.id)?.signing_public_key!==member.signing_public_key))return"member_not_in_fold";let recipients=[...body.members.map((member)=>`device:${member.id}`),...registryIds(before)];return checkWrapSet(entry.wraps,body.wrapsDigest,before.epoch+1,recipients)}case"recovery-join":{if(!before.registry.has(body.credentialId))return"unknown_credential";if(body.keyringHead!==predecessor)return"bad_keyring_head";if(await deviceIdOf(body.principal.signing_public_key)!==body.principal.id)return"bad_device_id";return entry.wraps.length===0?null:"unexpected_wraps"}case"recovery-join-vetoed":{let join=history.find((record)=>record.digest===body.joinDigest);if(join===void 0||join.body.kind!=="recovery-join"||join.before===null)return"unknown_join";if(entry.author.kind!=="device"||!join.before.members.has(entry.author.id))return"veto_signer_not_member";return entry.wraps.length===0?null:"unexpected_wraps"}case"fork-resolution":return entry.wraps.length===0?null:"unexpected_wraps"}};var states=new WeakSet,isChainState=(value)=>typeof value==="object"&&value!==null&&states.has(value),isState=(value)=>states.has(value),branded=(value)=>isVerifiedWrap(value)||isTrustAnchor(value)||isBootstrapAnchor(value)||isPinCandidate(value),mintState=(fields)=>{let state=frozenCopy({...fields},branded);if(states.add(state),!isState(state))throw Error("unreachable: a fresh chain state is always registered");return state},minted=new WeakSet,isMinted=(wrap)=>minted.has(wrap),isVerifiedWrap=(wrap)=>typeof wrap==="object"&&wrap!==null&&isMinted(wrap),mintWraps=(entry)=>({...entry,wraps:entry.wraps.map((wrap)=>{let sealed=Object.freeze({epoch:wrap.epoch,id:wrap.id,wrap:wrap.wrap,account:entry.account});return minted.add(sealed),sealed}).filter(isMinted)}),emptyChain=(account,anchor)=>mintState({account,head:null,authority:null,history:[],received:[],anchor,anchored:!1,unanchored:[],genesisDigest:null,pin:null,forcedRotationAfter:null});var seenKeyring=(state)=>[...state.received,...state.unanchored],verifyKeyringEntry=async(state,entry,mode)=>{let malformed=envelopeRefusal(entry);if(malformed!==null)return{ok:!1,reason:malformed};if(!isChainState(state))return{ok:!1,reason:"untrusted_state"};if(state.anchor.account!==state.account)return{ok:!1,reason:"untrusted_root"};if(!await linksHold(state.head,entry,mode))return{ok:!1,reason:"link_mismatch"};let receiver=await takeReceiver(state,seenKeyring(state)),refused=await receiver.keyring(entry);if(refused!==null)return holdReceiver(state,receiver),{ok:!1,reason:refused};let step=await keyringStep(state,entry);if(step.ok)holdReceiver(step.state,receiver);return step},keyringStep=async(state,entry)=>{let body=parseBody(entry.body);if(body===null)return{ok:!1,reason:"bad_record"};let before=state.authority,key=signerKey(body,before,entry.author,state.history);if(key===null)return{ok:!1,reason:"not_member"};if(!await verifyRecordSig(key,entry))return{ok:!1,reason:"bad_signature"};if(entry.epoch!==expectedEpoch(body,before)||entry.body.epoch!==entry.epoch)return{ok:!1,reason:"epoch_mismatch"};if(entry.account!==state.account||entry.body.account!==state.account)return{ok:!1,reason:"account_mismatch"};let predecessor=state.head===null?"":state.head.keyring_link,ruleFailure=await checkRecordRules(entry,body,before,state.history,predecessor);if(ruleFailure!==null)return{ok:!1,reason:ruleFailure};if(await sha256B64(jcsBytes(entry.body))!==entry.digest)return{ok:!1,reason:"digest_mismatch"};let forced=forcedRotationRefusal(state.forcedRotationAfter,body);if(forced!==null)return{ok:!1,reason:forced};let genesisDigest=body.kind==="genesis"?entry.digest:state.genesisDigest,met=state.anchored?null:anchorStep(state.anchor,entry,body,before,genesisDigest??"");if(met!==null&&!met.ok)return{ok:!1,reason:met.reason};let record={seq:entry.seq,digest:entry.digest,body,before},authority=applyRecord(state.history,record);if(authority===null)return{ok:!1,reason:"bad_record"};let anchored=state.anchored||met?.anchored===!0;return{ok:!0,state:mintState({...state,head:{seq:entry.seq,link:entry.link,keyring_link:entry.keyring_link},authority,history:[...state.history,record],received:anchored?[...state.received,...[...state.unanchored,entry].map(mintWraps)]:state.received,anchored,unanchored:anchored?[]:[...state.unanchored,entry],genesisDigest,pin:met?.ok===!0&&met.candidate!==null?met.candidate:state.pin,forcedRotationAfter:body.kind==="fork-resolution"?entry.seq:null}),step:{kind:"keyring",seq:entry.seq,record:body.kind}}},verifyBatchEntry=async(state,entry)=>{let malformed=envelopeRefusal(entry);if(malformed!==null)return{ok:!1,reason:malformed};if(!isChainState(state))return{ok:!1,reason:"untrusted_state"};if(!await linksHold(state.head,entry,"main"))return{ok:!1,reason:"link_mismatch"};let receiver=await takeReceiver(state,seenKeyring(state)),step=await batchStep(state,entry,receiver.batch(entry));return holdReceiver(step.ok?step.state:state,receiver),step},batchStep=async(state,entry,refused)=>{if(refused!==null)return{ok:!1,reason:refused};let forced=forcedRotationRefusal(state.forcedRotationAfter,null);if(forced!==null)return{ok:!1,reason:forced};let{authority,head}=state;if(authority===null||head===null||entry.author.kind!=="device")return{ok:!1,reason:"not_member"};let next=mintState({...state,head:{seq:entry.seq,link:entry.link,keyring_link:head.keyring_link}}),authorId=entry.author.id,vetoed=isVetoedEpoch(authority,entry.epoch)||isCancelledAdmission(authority,authorId),key=vetoed?keyWithinEpoch(state.history,state.authority,entry.author,entry.epoch):authorSigningKey(authority,entry.author);if(key===null)return{ok:!1,reason:"not_member"};if(!await verifyRecordSig(key,entry))return{ok:!1,reason:"bad_signature"};if(entry.account!==state.account)return{ok:!1,reason:"account_mismatch"};if(vetoed)return{ok:!0,state:next,step:{kind:"vetoed",seq:entry.seq}};if(entry.epoch!==authority.epoch)return{ok:!1,reason:"epoch_mismatch"};let batch={seq:entry.seq,digest:entry.digest,epoch:entry.epoch,authorId,signingPublicKey:key};return{ok:!0,state:next,step:{kind:"batch",batch}}},appendEntries=async(state,entries,rejections)=>{let steps=[];if(!isChainState(state))return rejections.record("untrusted_state"),{ok:!1,state,steps,seq:0,reason:"untrusted_state"};let current=state;for(let entry of entries){let malformed=envelopeRefusal(entry),result=malformed!==null?{ok:!1,reason:malformed}:entry.kind==="keyring"?await verifyKeyringEntry(current,entry,"main"):await verifyBatchEntry(current,entry);if(!result.ok){rejections.record(result.reason);let seq=malformed===null&&Number.isSafeInteger(entry.seq)?entry.seq:(current.head?.seq??0)+1;return current.anchored?{ok:!1,state:current,steps,seq,reason:result.reason}:{ok:!1,state,steps:[],seq,reason:result.reason}}current=result.state,steps.push(result.step)}if(!current.anchored)return rejections.record("unanchored"),{ok:!1,state,steps:[],seq:(current.head?.seq??0)+1,reason:"unanchored"};return{ok:!0,state:current,steps}};var parseObject=(bytes,keys)=>{let textValue=new TextDecoder().decode(bytes),parsed;try{parsed=JSON.parse(textValue)}catch{return null}if(!isObject2(parsed))return null;let own=Object.keys(parsed).sort();if(own.length!==keys.length||![...keys].sort().every((key,index)=>key===own[index]))return null;return jcsCanonical(parsed)===textValue?parsed:null},openHistory=async(material,binding,expected)=>{if(!isObject2(material))return null;let history=material.history;if(material.version!==1||!isObject2(history))return null;let current=decodeB64(material.current_key,32),nonce=decodeB64(history.nonce,12),ciphertext=decodeB64(history.ciphertext);if(current===null||nonce===null||ciphertext===null)return null;let key=await crypto.subtle.importKey("raw",current,"AES-GCM",!1,["decrypt"]),additionalData=jcsBytes({account:binding.account,epoch:binding.epoch,id:binding.id,version:1}),plain;try{plain=new Uint8Array(await crypto.subtle.decrypt({name:"AES-GCM",iv:nonce,additionalData,tagLength:128},key,ciphertext))}catch{return null}let textValue=new TextDecoder().decode(plain),rows;try{rows=JSON.parse(textValue)}catch{return null}if(!Array.isArray(rows)||jcsCanonical(rows)!==textValue||rows.length!==expected.size)return null;let keys=new Map,previous=null;for(let row of rows){if(!isObject2(row))return null;let{epoch,origin}=row,rowKey=decodeB64(row.key,32);if(typeof epoch!=="number"||typeof origin!=="string"||rowKey===null)return null;if(expected.get(epoch)!==origin||keys.has(epoch))return null;if(previous!==null&&(epoch<previous[0]||epoch===previous[0]&&origin<=previous[1]))return null;previous=[epoch,origin],keys.set(epoch,rowKey)}return{current,history:keys}},openWrap=async(keyring,wrap,account,expectedHistory)=>{if(!isVerifiedWrap(wrap))return{ok:!1,reason:"unverified_wrap"};if(wrap.account!==account)return{ok:!1,reason:"envelope_mismatch"};if(wrap.id!==`device:${keyring.principal().id}`)return{ok:!1,reason:"not_addressed_to_device"};let sealed=decodeB64(wrap.wrap);if(sealed===null)return{ok:!1,reason:"malformed_envelope"};let plaintext;try{plaintext=await keyring.unseal(sealed,{account,epoch:wrap.epoch,id:wrap.id})}catch{return{ok:!1,reason:"wrap_refused"}}let envelope=parseObject(plaintext,["version","account","epoch","id","key_material"]);if(envelope===null||envelope.version!==1)return{ok:!1,reason:"malformed_envelope"};if(envelope.account!==account||envelope.epoch!==wrap.epoch||envelope.id!==wrap.id)return{ok:!1,reason:"envelope_mismatch"};let opened=await openHistory(envelope.key_material,{account,epoch:wrap.epoch,id:wrap.id},expectedHistory);if(opened===null)return{ok:!1,reason:"bad_history"};return{ok:!0,keys:{epoch:wrap.epoch,current:opened.current,history:opened.history}}};import{Buffer as Buffer4}from"node:buffer";import{createDecipheriv,createHmac,createPrivateKey,createPublicKey,diffieHellman}from"node:crypto";var SEALED_BOX_OVERHEAD=48,HKDF_HASH_LENGTH=32;function labeledExtract(suiteId,label,ikm,salt){let key=salt.length===0?Buffer4.alloc(HKDF_HASH_LENGTH):Buffer4.from(salt);return createHmac("sha256",key).update(Buffer4.concat([Buffer4.from("HPKE-v1"),suiteId,Buffer4.from(label),Buffer4.from(ikm)])).digest()}function labeledExpand(suiteId,label,prk,info,length){if(length>HKDF_HASH_LENGTH)throw Error("hpke expand length exceeds one SHA-256 block");let lengthBytes=Buffer4.alloc(2);lengthBytes.writeUInt16BE(length);let t0=Buffer4.concat([lengthBytes,Buffer4.from("HPKE-v1"),suiteId,Buffer4.from(label),Buffer4.from(info),Buffer4.from([1])]);return createHmac("sha256",prk).update(t0).digest().subarray(0,length)}var KEM_ID=Buffer4.from([0,32]),KDF_ID=Buffer4.from([0,1]),AEAD_ID=Buffer4.from([0,2]);function x25519PublicKeyFromRaw(raw){return createPublicKey({key:{kty:"OKP",crv:"X25519",x:Buffer4.from(raw).toString("base64url")},format:"jwk"})}function openHpkeSealedBox(sealingPrivateRaw,sealingPublicRaw,wrap,info=Buffer4.alloc(0),aad=Buffer4.alloc(0)){if(wrap.length<SEALED_BOX_OVERHEAD)throw Error("sealed box is too short");let enc=wrap.subarray(0,32),ciphertext=wrap.subarray(32),privateKey=createPrivateKey({key:{kty:"OKP",crv:"X25519",d:Buffer4.from(sealingPrivateRaw).toString("base64url"),x:Buffer4.from(sealingPublicRaw).toString("base64url")},format:"jwk"}),dh;try{dh=diffieHellman({privateKey,publicKey:x25519PublicKeyFromRaw(enc)})}catch{throw Error("sealed box does not open: wrong recipient or corrupted wrap")}if(dh.every((byte)=>byte===0))throw Error("sealed box does not open: wrong recipient or corrupted wrap");let kem=Buffer4.concat([Buffer4.from("KEM"),KEM_ID]),suite=Buffer4.concat([Buffer4.from("HPKE"),KEM_ID,KDF_ID,AEAD_ID]),sharedSecret=labeledExpand(kem,"shared_secret",labeledExtract(kem,"eae_prk",dh,Buffer4.alloc(0)),Buffer4.concat([Buffer4.from(enc),Buffer4.from(sealingPublicRaw)]),32),keyScheduleContext=Buffer4.concat([Buffer4.from([0]),labeledExtract(suite,"psk_id_hash",Buffer4.alloc(0),Buffer4.alloc(0)),labeledExtract(suite,"info_hash",Buffer4.from(info),Buffer4.alloc(0))]),secret=labeledExtract(suite,"secret",Buffer4.alloc(0),sharedSecret),key=labeledExpand(suite,"key",secret,keyScheduleContext,32),nonce=labeledExpand(suite,"base_nonce",secret,keyScheduleContext,12),decipher=createDecipheriv("aes-256-gcm",key,nonce);if(aad.length>0)decipher.setAAD(Buffer4.from(aad));decipher.setAuthTag(ciphertext.subarray(ciphertext.length-16));try{return Buffer4.concat([decipher.update(ciphertext.subarray(0,ciphertext.length-16)),decipher.final()])}catch{throw Error("sealed box does not open: wrong recipient or corrupted wrap")}}import{Buffer as Buffer5}from"node:buffer";import{createCipheriv,createHmac as createHmac2,createPublicKey as createPublicKey2,diffieHellman as diffieHellman2,generateKeyPairSync as generateKeyPairSync2}from"node:crypto";var KEM_SUITE=Buffer5.concat([Buffer5.from("KEM"),Buffer5.from([0,32])]),HPKE_SUITE=Buffer5.concat([Buffer5.from("HPKE"),Buffer5.from([0,32,0,1,0,2])]),labeledExtract2=(suite,label,ikm,salt=Buffer5.alloc(0))=>createHmac2("sha256",salt.length===0?Buffer5.alloc(32):Buffer5.from(salt)).update(Buffer5.concat([Buffer5.from("HPKE-v1"),suite,Buffer5.from(label),Buffer5.from(ikm)])).digest(),labeledExpand2=(suite,label,prk,info,length)=>{let lengthBytes=Buffer5.alloc(2);return lengthBytes.writeUInt16BE(length),createHmac2("sha256",prk).update(Buffer5.concat([lengthBytes,Buffer5.from("HPKE-v1"),suite,Buffer5.from(label),Buffer5.from(info),Buffer5.from([1])])).digest().subarray(0,length)},sealHpkeBox=(recipientPublicRaw,plaintext,info,aad)=>{if(recipientPublicRaw.length!==32)throw RangeError("an X25519 public key is exactly 32 bytes");let ephemeral=generateKeyPairSync2("x25519"),enc=Buffer5.from(ephemeral.publicKey.export({format:"jwk"}).x??"","base64url"),recipient=createPublicKey2({key:{kty:"OKP",crv:"X25519",x:Buffer5.from(recipientPublicRaw).toString("base64url")},format:"jwk"}),dh=diffieHellman2({privateKey:ephemeral.privateKey,publicKey:recipient});if(dh.every((byte)=>byte===0))throw Error("refusing an all-zero X25519 shared secret");let sharedSecret=labeledExpand2(KEM_SUITE,"shared_secret",labeledExtract2(KEM_SUITE,"eae_prk",dh),Buffer5.concat([enc,Buffer5.from(recipientPublicRaw)]),32),context=Buffer5.concat([Buffer5.from([0]),labeledExtract2(HPKE_SUITE,"psk_id_hash",Buffer5.alloc(0)),labeledExtract2(HPKE_SUITE,"info_hash",info)]),secret=labeledExtract2(HPKE_SUITE,"secret",Buffer5.alloc(0),sharedSecret),cipher=createCipheriv("aes-256-gcm",labeledExpand2(HPKE_SUITE,"key",secret,context,32),labeledExpand2(HPKE_SUITE,"base_nonce",secret,context,12));cipher.setAAD(Buffer5.from(aad));let sealed=Buffer5.concat([enc,cipher.update(plaintext),cipher.final(),cipher.getAuthTag()]),bytes=new Uint8Array(sealed.length);return bytes.set(sealed),bytes};var WRAP_INFO=concatBytes([asciiBytes("omo-sync/v1/wrap"),Uint8Array.from([0])]),wrapAad=(address)=>jcsBytes({account:address.account,epoch:address.epoch,id:address.id}),historyOrder=(left,right)=>left.epoch-right.epoch||(left.origin<right.origin?-1:left.origin>right.origin?1:0),keyMaterial=async(address,material)=>{let rows=[...material.history].sort(historyOrder).map((row)=>({epoch:row.epoch,origin:row.origin,key:b64urlEncode(row.key)})),nonce=crypto.getRandomValues(new Uint8Array(12)),key=await crypto.subtle.importKey("raw",Uint8Array.from(material.current),"AES-GCM",!1,["encrypt"]),additionalData=jcsBytes({account:address.account,epoch:address.epoch,id:address.id,version:1}),ciphertext=new Uint8Array(await crypto.subtle.encrypt({name:"AES-GCM",iv:nonce,additionalData,tagLength:128},key,jcsBytes(rows)));return{version:1,current_key:b64urlEncode(material.current),history:{nonce:b64urlEncode(nonce),ciphertext:b64urlEncode(ciphertext)}}},envelopeBytes=async(address,material)=>jcsBytes({version:1,account:address.account,epoch:address.epoch,id:address.id,key_material:await keyMaterial(address,material)}),sealWrap=async(address,recipientSealingPublicKey,material)=>{let recipient=decodeB64(recipientSealingPublicKey,32);if(recipient===null)throw RangeError("a recipient sealing key is 32 bytes of base64url");let sealed=sealHpkeBox(recipient,await envelopeBytes(address,material),WRAP_INFO,wrapAad(address));return{epoch:address.epoch,id:address.id,wrap:b64urlEncode(sealed)}};var signRecord=async(keyring,fields)=>b64urlEncode(await keyring.sign({purpose:"record",canonicalJson:jcsBytes(recordPayload(fields))}));var signedAppend=async(keyring,head,body,wraps)=>{let digest=await sha256B64(jcsBytes(body)),link=await nextLink(head.link,digest),keyringLink=await nextLink(head.keyring_link,digest);if(link===null||keyringLink===null)throw Error("the served head does not decode");let fields={account:body.account,base_seq:head.seq,digest,epoch:body.epoch,link,keyring_link:keyringLink};return{record:body,base_seq:head.seq,link,keyring_link:keyringLink,record_sig:await signRecord(keyring,fields),wraps}};var ownMaterial=async(keyring,account,wrap,expected)=>{let origins=new Map(expected),opened=await openWrap(keyring,wrap,account,origins);if(!opened.ok)return null;return{epoch:wrap.epoch,current:opened.keys.current,history:[...opened.keys.history].map(([epoch,key])=>({epoch,origin:origins.get(epoch)??"",key}))}};var expectedHistory=(authority,epoch)=>[...authority.epochOrigins].filter(([candidate,origin])=>candidate<epoch&&!authority.cancelled.has(origin)).sort(([left],[right])=>left-right),committedWrap=(state,epoch,id)=>{for(let entry of[...state.received].reverse()){if(state.authority?.cancelled.has(entry.digest)===!0)continue;let found=entry.wraps.find((wrap)=>wrap.epoch===epoch&&wrap.id===id);if(found!==void 0)return found}return null};var isRecord2=(value)=>typeof value==="object"&&value!==null&&!Array.isArray(value),isServedRow=(value)=>isRecord2(value)&&Number.isSafeInteger(value.seq)&&(value.kind==="batch"||value.kind==="keyring"),toEntry=(row,keys)=>{if(!isServedRow(row))return null;if(row.kind==="batch")return{...row,kind:"batch",keyring_link:null};let full=keys.get(row.seq);return full!==void 0&&full.digest===row.digest&&full.keyring_link===row.keyring_link?full:null};async function openAccountChain(input){let{account,keyring,http,rejections}=input,state=emptyChain(account,input.anchor),positions=new Map,links=new Map,refusedAt=null,heldFrom=null,keys=new Map,keysEpoch=-1,readPage=async()=>{let after=state.head?.seq??0,rows=await http.listEntriesAfter(after);if(rows===null)throw Error("account sync: the entries read did not answer a list");if(rows.length===0)return 0;let keyring=rows.some((row)=>isRecord2(row)&&row.kind==="keyring")?await http.listKeys():[];if(keyring===null)throw Error("account sync: the keyring read did not answer a list");let bySeq=new Map(keyring.filter(isRecord2).map((entry)=>[entry.seq,entry])),entries=[];for(let row of rows){let entry=toEntry(row,bySeq);if(entry===null){rejections.record(isServedRow(row)?"keyring_mismatch":"entry_unreadable"),heldFrom=after+entries.length+1;break}entries.push(entry)}if(entries.length>0)await walk(entries);return rows.length},walk=async(entries)=>{let walked=await appendEntries(state,entries,rejections);for(let step of walked.steps)if(step.kind==="batch")positions.set(step.batch.seq,{kind:"batch",batch:step.batch});else positions.set(step.seq,step.kind==="keyring"?{kind:"keyring"}:{kind:"vetoed"});for(let entry of entries)if(entry.seq<=(walked.state.head?.seq??0))links.set(entry.seq,entry.link);if(state=walked.state,!walked.ok)positions.set(walked.seq,{kind:"refused",reason:walked.reason}),refusedAt=walked.seq},extend=async(target)=>{heldFrom=null;for(;;){let before=state.head?.seq??0,served=await readPage(),head=state.head?.seq??0;if(served===0||refusedAt!==null||heldFrom!==null||head>=target||head===before)return}},reach=async(seq)=>{if(refusedAt===null&&(state.head?.seq??0)<seq)await extend(seq);let known=positions.get(seq);if(known!==void 0)return known;if(refusedAt!==null&&seq>refusedAt)return positions.get(refusedAt)??{kind:"unknown"};if(heldFrom!==null&&seq>=heldFrom)return{kind:"pending"};return{kind:"unknown"}},epochKey=async(epoch)=>{let authority=state.authority;if(authority===null)return null;if(keysEpoch!==authority.epoch){let wrap=committedWrap(state,authority.epoch,`device:${keyring.principal().id}`),material=wrap===null?null:await ownMaterial(keyring,account,wrap,expectedHistory(authority,authority.epoch));if(material===null)return null;keys.clear(),keys.set(material.epoch,new Uint8Array(material.current));for(let older of material.history)keys.set(older.epoch,new Uint8Array(older.key));keysEpoch=authority.epoch}return keys.get(epoch)??null};return await extend(Number.MAX_SAFE_INTEGER),{account,state:()=>state,reach,linkAt:(seq)=>links.get(seq)??null,epochKey,isMember:()=>state.authority?.members.has(keyring.principal().id)===!0}}var newPairingNonce=()=>b64urlEncode(crypto.getRandomValues(new Uint8Array(16))),approvalCommitment=(account,joining)=>taggedHash("omo-sync/v1/approval-commitment",{account,sealing_public_key:joining.principal.sealing_public_key,signing_public_key:joining.principal.signing_public_key,nonce:joining.nonce}),compareBytes=(left,right)=>{for(let index=0;index<Math.min(left.length,right.length);index+=1){let difference=(left[index]??0)-(right[index]??0);if(difference!==0)return difference}return left.length-right.length};async function approvalCode(account,parties){let devices=[...parties].sort((a,b)=>compareBytes(b64urlDecode(a.principal.signing_public_key),b64urlDecode(b.principal.signing_public_key))).map((party)=>({sealing_public_key:party.principal.sealing_public_key,signing_public_key:party.principal.signing_public_key,nonce:party.nonce})),digest=b64urlDecode(await taggedHash("omo-sync/v1/approval-code",{account,devices}));return String(new DataView(digest.buffer,digest.byteOffset,digest.byteLength).getUint32(0)%1e6).padStart(6,"0")}var POLL_MS=2000,principalOf2=(keyring)=>({kind:"device",id:keyring.principal().id,sealing_public_key:keyring.publicKeys().sealing,signing_public_key:keyring.publicKeys().signing});async function joinAccount(input){let{account,keyring,chain,pairing,clock}=input,self=principalOf2(keyring),nonce=newPairingNonce(),commitment=await approvalCommitment(account,{principal:self,nonce}),opened=await pairing.openPending(account,commitment),row=opened;while(row.answer===null){if(clock.now()>=opened.expires_at)return{kind:"expired"};await clock.sleep(POLL_MS);let next=await pairing.readPending(opened.id);if(next===null)return{kind:"expired"};row=next}let answer=row.answer;await pairing.revealPending(opened.id,self,nonce),await input.showCode(await approvalCode(account,[{principal:self,nonce},{principal:answer.principal,nonce:answer.approver_nonce}]));let anchor=pairingAnchor({account,keyring,approver:answer.principal,joiningNonce:nonce,approverNonce:answer.approver_nonce});for(;;){if((await chain.listKeys())?.some((entry)=>{let principal=entry.body.principal;return entry.body.kind==="approval"&&isObject2(principal)&&principal.id===self.id})===!0){let walked=await openAccountChain({account,anchor,keyring,http:chain,rejections:createRejectionCounter()}),pin=walked.state().pin;if(!walked.state().anchored||pin===null)return{kind:"refused",reason:"the approval does not match this device's ceremony"};if(!walked.isMember()||await walked.epochKey(walked.state().authority?.epoch??0)===null)return{kind:"refused",reason:"the approval admits this device without a key it can open"};return await pinTrustAnchor(input.pinDir,account,pin),{kind:"joined"}}if(clock.now()>=opened.expires_at)return{kind:"expired"};await clock.sleep(POLL_MS)}}async function approveDevice(input){let{account,keyring,chain,pairing,clock}=input,pin=await loadTrustAnchor(input.pinDir,account);if(!pin.ok)return{kind:"refused",reason:"this device has not joined the account's memory"};let self=principalOf2(keyring),nonce=newPairingNonce(),answered=await pairing.answerPending(input.pendingId,self,nonce),row=answered;while(row.reveal===null){if(clock.now()>=answered.expires_at)return{kind:"expired"};await clock.sleep(POLL_MS);let next=await pairing.readPending(input.pendingId);if(next===null)return{kind:"expired"};row=next}let joining=row.reveal;if(await approvalCommitment(account,{principal:joining.principal,nonce:joining.joining_nonce})!==answered.commitment)return{kind:"refused",reason:"the joining device revealed keys its commitment did not name"};if(!await input.confirmCode(await approvalCode(account,[{principal:self,nonce},{principal:joining.principal,nonce:joining.joining_nonce}])))return{kind:"declined"};for(let attempt=0;attempt<3;attempt+=1){let verified=await openAccountChain({account,anchor:pin.anchor,keyring,http:chain,rejections:createRejectionCounter()}),state=verified.state(),authority=state.authority;if(authority===null||state.head===null||!verified.isMember())return{kind:"refused",reason:"this device is not a member of the account's memory"};let wrap=committedWrap(state,authority.epoch,`device:${self.id}`),material=wrap===null?null:await ownMaterial(keyring,account,wrap,expectedHistory(authority,authority.epoch));if(material===null)return{kind:"refused",reason:"this device cannot open the current epoch key"};let wraps=[await sealWrap({account,epoch:authority.epoch,id:`device:${joining.principal.id}`},joining.principal.sealing_public_key,material)],digest=await wrapSetDigest(wraps);if(!digest.ok)return{kind:"refused",reason:"the approval wraps do not digest"};let body={kind:"approval",account,epoch:authority.epoch,principal:{...joining.principal},wraps_digest:digest.digest,pairing:{commitment:answered.commitment,joining_nonce:joining.joining_nonce,approver_nonce:nonce}},appended=await chain.appendKeys(await signedAppend(keyring,state.head,body,wraps));if(appended.ok)return{kind:"approved",seq:appended.seq};if(appended.reason!=="stale_base")return{kind:"refused",reason:`the service refused the approval (${appended.reason})`}}return{kind:"refused",reason:"the account kept changing while approving; try again"}}import{Buffer as Buffer8}from"node:buffer";import{createPrivateKey as createPrivateKey2,createPublicKey as createPublicKey3,generateKeyPairSync as generateKeyPairSync3,sign as ed25519Sign}from"node:crypto";import{Buffer as Buffer7}from"node:buffer";class CanonicalJsonError extends Error{violation;name="CanonicalJsonError";constructor(violation,message){super(message);this.violation=violation}}import{Buffer as Buffer6}from"node:buffer";function escapeCanonicalString(value){let out='"';for(let char of value){let code=char.codePointAt(0)??0;if(char==='"')out+="\\\"";else if(char==="\\")out+="\\\\";else if(char==="\b")out+="\\b";else if(char==="\t")out+="\\t";else if(char===`
124
+ `)out+="\\n";else if(char==="\f")out+="\\f";else if(char==="\r")out+="\\r";else if(code<32)out+="\\u"+code.toString(16).padStart(4,"0");else if(code>=55296&&code<=57343)throw new CanonicalJsonError("encoding","lone surrogate in string");else out+=char}return out+'"'}function compareUtf16(left,right){let a=Buffer6.from(left,"utf16le").swap16(),b=Buffer6.from(right,"utf16le").swap16();return Buffer6.compare(a,b)}var MAX_SERIALIZE_DEPTH=64;function serializeValue(value,out,depth=0){if(typeof value==="object"&&value!==null&&depth>=MAX_SERIALIZE_DEPTH)throw new CanonicalJsonError("json",`nesting deeper than ${MAX_SERIALIZE_DEPTH}`);if(value===null)out.push("null");else if(typeof value==="boolean")out.push(value?"true":"false");else if(typeof value==="number")out.push(JSON.stringify(value));else if(typeof value==="string")out.push(escapeCanonicalString(value));else if(Array.isArray(value))out.push("["),value.forEach((element,index)=>{if(index>0)out.push(",");serializeValue(element,out,depth+1)}),out.push("]");else out.push("{"),Object.keys(value).sort(compareUtf16).forEach((key,index)=>{if(index>0)out.push(",");out.push(escapeCanonicalString(key),":"),serializeValue(value[key],out,depth+1)}),out.push("}")}function canonicalizeJson(value){let out=[];return serializeValue(value,out),new TextEncoder().encode(out.join(""))}var MAX_CANONICAL_DEPTH=64;class Parser{text;position=0;depth=0;constructor(text){this.text=text}parseDocument(){let value=this.parseValue();if(this.skipInsignificant(),this.position!==this.text.length)throw this.fail("json","trailing data after the JSON document");return value}parseValue(){this.skipInsignificant();let char=this.text[this.position];if(char==="{"||char==="["){if(this.depth>=MAX_CANONICAL_DEPTH)throw this.fail("json",`nesting deeper than ${MAX_CANONICAL_DEPTH}`);this.depth++;let value=char==="{"?this.parseObject():this.parseArray();return this.depth--,value}if(char==='"')return this.parseString().value;if(char==="-"||char>="0"&&char<="9")return this.parseNumber();for(let[word,literal]of[["null",null],["true",!0],["false",!1]])if(this.text.startsWith(word,this.position))return this.position+=word.length,literal;throw this.fail("json","unexpected token")}parseObject(){this.position++;let object={},keys=[],seen=new Set;if(this.skipInsignificant(),this.text[this.position]==="}")return this.position++,object;for(;;){if(this.skipInsignificant(),this.text[this.position]!=='"')throw this.fail("json","object keys must be strings");let key=this.parseString();if(seen.has(key.value))throw this.fail("duplicate-key",`duplicate property name ${JSON.stringify(key.value)}`);if(seen.add(key.value),keys.push(key.value),this.skipInsignificant(),this.text[this.position]!==":")throw this.fail("json","expected ':' after object key");this.position++,Object.defineProperty(object,key.value,{value:this.parseValue(),enumerable:!0,writable:!0,configurable:!0}),this.skipInsignificant();let next=this.text[this.position];if(next===","){this.position++;continue}if(next==="}"){this.position++;break}throw this.fail("json","expected ',' or '}' in object")}for(let i=1;i<keys.length;i++)if(compareUtf16(keys[i-1],keys[i])>=0)throw this.fail("order",`object properties out of order: ${JSON.stringify(keys[i-1])} precedes ${JSON.stringify(keys[i])}`);return object}parseArray(){this.position++;let array=[];if(this.skipInsignificant(),this.text[this.position]==="]")return this.position++,array;for(;;){array.push(this.parseValue()),this.skipInsignificant();let next=this.text[this.position];if(next===","){this.position++;continue}if(next==="]"){this.position++;break}throw this.fail("json","expected ',' or ']' in array")}return array}parseString(){let start=this.position;this.position++;let value="";for(;;){if(this.position>=this.text.length)throw this.fail("json","unterminated string");let char=this.text[this.position];if(char==='"'){this.position++;let raw=this.text.slice(start,this.position);if(escapeCanonicalString(value)!==raw)throw this.fail("escape",`string is not minimally escaped: ${raw}`);return{value,raw}}if(char==="\\"){let escape=this.text[this.position+1],simple={'"':'"',"\\":"\\","/":"/",b:"\b",f:"\f",n:`
125
+ `,r:"\r",t:"\t"};if(escape in simple){value+=simple[escape],this.position+=2;continue}if(escape==="u"){let hex=this.text.slice(this.position+2,this.position+6);if(!/^[0-9a-fA-F]{4}$/.test(hex))throw this.fail("json","invalid \\u escape");value+=String.fromCharCode(parseInt(hex,16)),this.position+=6;continue}throw this.fail("json","invalid escape sequence")}if((char.codePointAt(0)??0)<32)throw this.fail("json","unescaped control character in string");value+=char,this.position++}}parseNumber(){let match=/^-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?/.exec(this.text.slice(this.position));if(!match)throw this.fail("json","invalid number");let raw=match[0];this.position+=raw.length;let value=Number(raw);if(!Number.isFinite(value))throw this.fail("number",`number is not finite: ${raw}`);if(JSON.stringify(value)!==raw)throw this.fail("number",`number is not in canonical form: ${raw}`);return value}skipInsignificant(){while(this.position<this.text.length&&/[\t\n\r ]/.test(this.text[this.position]))throw this.fail("whitespace","insignificant whitespace between JSON tokens")}fail(violation,message){return new CanonicalJsonError(violation,`${message} (offset ${this.position})`)}}function requireCanonicalJson(bytes){let text;try{text=new TextDecoder("utf-8",{fatal:!0}).decode(bytes)}catch{throw new CanonicalJsonError("encoding","canonical JSON must be valid UTF-8")}let parsed=new Parser(text).parseDocument(),canonical=canonicalizeJson(parsed);if(canonical.length!==bytes.length||!Buffer7.from(canonical).equals(Buffer7.from(bytes)))throw new CanonicalJsonError("json","input is not byte-identical to its canonical form");return parsed}class DeviceKeyringSignError extends Error{reason;name="DeviceKeyringSignError";constructor(reason,message){super(message);this.reason=reason}}var SIGNING_DOMAIN_TAGS={"object-digest":"omo-sync/v1/object-digest",record:"omo-sync/v1/record",snapshot:"omo-sync/v1/snapshot"};function domainSeparatedMessage(purpose,payload){return Buffer8.concat([Buffer8.from(SIGNING_DOMAIN_TAGS[purpose],"ascii"),Buffer8.from([0]),Buffer8.from(payload)])}var CANONICAL_REASONS={json:"record-json","duplicate-key":"record-canonical-duplicate-key",number:"record-canonical-number",order:"record-canonical-order",escape:"record-canonical-escape",whitespace:"record-canonical-whitespace",encoding:"record-canonical-encoding"};function parseCanonical(bytes,what){try{return requireCanonicalJson(bytes)}catch(error){if(!(error instanceof CanonicalJsonError))throw error;throw new DeviceKeyringSignError(CANONICAL_REASONS[error.violation],`sign: ${what} preimage is not RFC 8785 canonical JSON: ${error.message}`)}}function validateSignRequest(request){if(typeof request!=="object"||request===null)throw new DeviceKeyringSignError("unknown-purpose","sign: request must be a typed sign request");if(request.purpose==="object-digest"){if(!(request.digest instanceof Uint8Array)||request.digest.length!==32)throw new DeviceKeyringSignError("digest-length","sign: object-digest needs exactly 32 bytes (SHA-256 of the batch object)");return request.digest}if(request.purpose==="record"){if(!(request.canonicalJson instanceof Uint8Array))throw new DeviceKeyringSignError("record-json","sign: record needs RFC 8785 canonical JSON bytes");let parsed=parseCanonical(request.canonicalJson,"record");if(typeof parsed!=="object"||parsed===null||Array.isArray(parsed)||typeof parsed.t!=="string")throw new DeviceKeyringSignError("record-json",'sign: record preimage needs a top-level "t" string');let t=parsed.t;if(!t.startsWith("omo-sync/v1/"))throw new DeviceKeyringSignError("record-prefix",'sign: record "t" must start with "omo-sync/v1/"');if(t===SIGNING_DOMAIN_TAGS["object-digest"]||t===SIGNING_DOMAIN_TAGS.snapshot)throw new DeviceKeyringSignError("record-prefix",`sign: record "t" must name a keyring record type, not another purpose's tag`);return request.canonicalJson}if(request.purpose==="snapshot"){if(!(request.canonicalJson instanceof Uint8Array))throw new DeviceKeyringSignError("record-json","sign: snapshot needs RFC 8785 canonical JSON bytes");let parsed=parseCanonical(request.canonicalJson,"snapshot");if((typeof parsed==="object"&&parsed!==null?parsed.t:void 0)!==SIGNING_DOMAIN_TAGS.snapshot)throw new DeviceKeyringSignError("snapshot-prefix",'sign: snapshot preimage "t" must be exactly "omo-sync/v1/snapshot"');return request.canonicalJson}throw new DeviceKeyringSignError("unknown-purpose",`sign: unsupported purpose ${JSON.stringify(request.purpose??null)}`)}var WRAP_INFO2=Buffer8.concat([Buffer8.from("omo-sync/v1/wrap","ascii"),Buffer8.from([0])]),wrapAad2=(binding)=>{if(!Number.isSafeInteger(binding.epoch)||binding.epoch<0)throw Error("unseal: the wrap epoch must be a non-negative integer");return canonicalizeJson({account:binding.account,epoch:binding.epoch,id:binding.id})};function createDeviceKeyring(id,material){let signingPrivateKey=createPrivateKey2({key:Buffer8.from(material.signingPrivatePkcs8,"base64url"),format:"der",type:"pkcs8"}),sealingPrivateKey=createPrivateKey2({key:Buffer8.from(material.sealingPrivatePkcs8,"base64url"),format:"der",type:"pkcs8"}),signingPublic=createPublicKey3(signingPrivateKey).export({format:"jwk"}).x,sealingPublic=createPublicKey3(sealingPrivateKey).export({format:"jwk"}).x;if(!signingPublic||!sealingPublic)throw Error("invalid device key material");let sealingPrivateJwk=sealingPrivateKey.export({format:"jwk"}),sealingPrivateRaw=Buffer8.from(sealingPrivateJwk.d??"","base64url"),sealingPublicRaw=Buffer8.from(sealingPublic,"base64url");if(sealingPrivateRaw.length!==32||sealingPublicRaw.length!==32)throw Error("invalid device key material");let publicKeys={signing:signingPublic,sealing:sealingPublic};return{principal:()=>({kind:"device",id}),publicKeys:()=>({...publicKeys}),sign:async(request)=>{let payload=validateSignRequest(request);return ed25519Sign(null,domainSeparatedMessage(request.purpose,payload),signingPrivateKey)},unseal:async(wrap,binding)=>openHpkeSealedBox(sealingPrivateRaw,sealingPublicRaw,wrap,WRAP_INFO2,wrapAad2(binding))}}async function deviceKeyringFromMaterial(material){let id=await deviceIdOf(createDeviceKeyring("",material).publicKeys().signing);if(id===null)throw Error("invalid device key material");return createDeviceKeyring(id,material)}async function enableSync(input){await input.pairing.setAccountSync(!0),await input.pairing.setDeviceSync(input.serviceDeviceId,!0);let keys=await input.chain.listKeys();if(keys===null||keys.length===0)return{kind:"needs_first_device"};let pin=await loadTrustAnchor(input.pinDir,input.account);if(!pin.ok)return{kind:"join_required"};return(await openAccountChain({account:input.account,anchor:pin.anchor,keyring:input.keyring,http:input.chain,rejections:createRejectionCounter()})).isMember()?{kind:"joined"}:{kind:"join_required"}}class AccountHttpError extends Error{code;status;name="AccountHttpError";constructor(code,status){super(`account sync request refused: ${code} (${status})`);this.code=code;this.status=status}}var REFUSALS=new Set(["stale_base","rate_limited","not_found"]),isRecord3=(value)=>typeof value==="object"&&value!==null&&!Array.isArray(value),listOf=(value,key)=>{if(!isRecord3(value))return null;let list=value[key];return Array.isArray(list)?list:null};function createAccountHttp(options){let doFetch=options.fetch??fetch,send=async(method,path,body)=>{let headers={authorization:`Bearer ${await options.token()}`};if(body!==void 0)headers["content-type"]="application/json";return doFetch(`${options.baseUrl}${path}`,{method,headers,...body===void 0?{}:{body:JSON.stringify(body)}})},codeOf=async(response)=>response.json().then((b)=>{let error=isRecord3(b)?b.error:void 0;return isRecord3(error)&&typeof error.code==="string"?error.code:"unknown"},()=>"unknown"),read=async(path)=>{let response=await send("GET",path);if(!response.ok)throw new AccountHttpError(response.status>=500?"unavailable":await codeOf(response),response.status);return response.json()},append=async(path,method,request)=>{let response=await send(method,path,request);if(response.ok){let body=await response.json(),seq=isRecord3(body)?body.seq:void 0;if(typeof seq!=="number"||!Number.isSafeInteger(seq))throw new AccountHttpError("malformed_reply",response.status);return{ok:!0,seq}}if(response.status>=500)throw new AccountHttpError("unavailable",response.status);let code=await codeOf(response);return{ok:!1,reason:REFUSALS.has(code)?code:"refused"}},entriesAfter=async(after)=>listOf(await read(`/v1/sync/entries?after=${after}`),"entries");return{listEntriesAfter:entriesAfter,listEntries:()=>entriesAfter(0),listKeys:async()=>listOf(await read("/v1/sync/keys"),"entries"),listRecoveryWraps:async()=>listOf(await read("/v1/sync/recovery-wraps"),"wraps"),appendKeys:(request)=>append("/v1/sync/keys","PUT",request),recoveryJoin:(request)=>append("/v1/sync/recovery/join","POST",request),async state(){let body=await read("/v1/sync/state");if(!isRecord3(body)||!isRecord3(body.head))return null;let head=body.head,{seq,link,keyring_link:keyringLink}=head,epoch=body.current_epoch;if(typeof seq!=="number"||typeof link!=="string"||typeof keyringLink!=="string"||typeof epoch!=="number")return null;return{head:{seq,link,keyring_link:keyringLink},currentEpoch:epoch,rotationPending:body.rotation_pending===!0}}}}var isRecord4=(value)=>typeof value==="object"&&value!==null&&!Array.isArray(value),isPrincipal=(value)=>isRecord4(value)&&value.kind==="device"&&typeof value.id==="string"&&typeof value.sealing_public_key==="string"&&typeof value.signing_public_key==="string";function parsePending(value){if(!isRecord4(value))return null;let{id,account,commitment,answer,reveal,expires_at}=value;if(typeof id!=="string"||typeof account!=="string"||typeof commitment!=="string"||typeof expires_at!=="number")return null;let parsedAnswer=isRecord4(answer)&&isPrincipal(answer.principal)&&typeof answer.approver_nonce==="string"?{principal:answer.principal,approver_nonce:answer.approver_nonce}:null,parsedReveal=isRecord4(reveal)&&isPrincipal(reveal.principal)&&typeof reveal.joining_nonce==="string"?{principal:reveal.principal,joining_nonce:reveal.joining_nonce}:null;if(answer!==null&&answer!==void 0&&parsedAnswer===null||reveal!==null&&reveal!==void 0&&parsedReveal===null)return null;return{id,account,commitment,answer:parsedAnswer,reveal:parsedReveal,expires_at}}function createPairingHttp(options){let doFetch=options.fetch??fetch,send=async(method,path,body)=>{let headers={authorization:`Bearer ${await options.token()}`};if(body!==void 0)headers["content-type"]="application/json";let response=await doFetch(`${options.baseUrl}${path}`,{method,headers,...body===void 0?{}:{body:JSON.stringify(body)}});if(!response.ok){let code=await response.json().then((b)=>isRecord4(b)&&isRecord4(b.error)&&typeof b.error.code==="string"?b.error.code:"unknown",()=>"unknown");throw new AccountHttpError(response.status>=500?"unavailable":code,response.status)}return response.status===204?null:response.json()},pending=async(method,path,body)=>{let parsed=parsePending(await send(method,path,body));if(parsed===null)throw new AccountHttpError("malformed_reply",200);return parsed};return{openPending:(account,commitment)=>pending("PUT","/v1/sync/pending",{account,commitment}),async readPending(id){try{return await pending("GET",`/v1/sync/pending/${encodeURIComponent(id)}`)}catch(error){if(error instanceof AccountHttpError&&error.code==="not_found")return null;throw error}},async listPending(){let body=await send("GET","/v1/sync/pending");return(isRecord4(body)&&Array.isArray(body.pending)?body.pending:[]).map(parsePending).filter((row)=>row!==null)},answerPending:(id,principal,approverNonce)=>pending("POST",`/v1/sync/pending/${encodeURIComponent(id)}/answer`,{principal,approver_nonce:approverNonce}),revealPending:(id,principal,joiningNonce)=>pending("POST",`/v1/sync/pending/${encodeURIComponent(id)}/reveal`,{principal,joining_nonce:joiningNonce}),async setAccountSync(enabled){await send("PUT","/v1/account/sync",{enabled})},async setDeviceSync(deviceId,enabled){await send("PUT",`/v1/devices/${encodeURIComponent(deviceId)}/sync`,{enabled})}}}var base64url2=(base64)=>Buffer.from(base64,"base64").toString("base64url"),isRecord5=(value)=>typeof value==="object"&&value!==null&&!Array.isArray(value);async function signedInSyncContext(options){let api=serviceOrigin(options.env.OMO_SERVICE_API_URL??"https://api.omo.dev"),store=options.store??createCredentialStore(api),credentials=await store.read();if(credentials===null)throw new SignInError("Not signed in. Run omo login first.");let session=createSession({api,store}),token=()=>session.accessToken(),me=await(options.fetch??fetch)(`${api}/v1/me`,{headers:{authorization:`Bearer ${await token()}`}});if(!me.ok)throw new SignInError(`The account could not be read (${me.status}). Try again, or run omo login.`);let body=await me.json(),account=isRecord5(body)&&isRecord5(body.account)?body.account.id:void 0;if(typeof account!=="string"||account==="")throw new SignInError("The service named no account for this sign-in.");let http={baseUrl:api,token,...options.fetch===void 0?{}:{fetch:options.fetch}};return{account,serviceDeviceId:credentials.device.id,keyring:await deviceKeyringFromMaterial({signingPrivatePkcs8:base64url2(credentials.signingPrivateKey),sealingPrivatePkcs8:base64url2(credentials.sealingPrivateKey)}),pinDir:syncPinDir(resolveMemoryRoot(options.env,options.cwd)),chain:createAccountHttp(http),pairing:createPairingHttp(http)}}var EXIT_UNSUPPORTED_HERE=2,RECOVER_ELSEWHERE="Recovering memory with your passkey runs in the OmO desktop app, which can use the passkey on this computer. On a machine without it, approve this device from a device that already syncs: run `omo sync enable` here, then `omo sync approve` there.",FIRST_DEVICE="Your account has no synced memory yet. Turn memory sync on first in the OmO desktop app, which sets up the recovery passkey, then run `omo sync enable` here to join.",spacedCode=(code)=>`${code.slice(0,3)} ${code.slice(3)}`;async function run2(dependencies,action){try{process.exitCode=await action(await dependencies.context())}catch(error){dependencies.error(error instanceof SignInError||error instanceof Error?error.message:"omo sync: the operation failed"),process.exitCode=1}}async function enable(dependencies,context){let outcome=await enableSync(context);if(outcome.kind==="joined")return dependencies.output("Memory sync is on for this device."),0;if(outcome.kind==="needs_first_device")return dependencies.error(FIRST_DEVICE),EXIT_UNSUPPORTED_HERE;dependencies.output("Approve this device from a device that already syncs: run `omo sync approve` there, or use the desktop app. Waiting...");let joined=await joinAccount({...context,clock:dependencies.clock,showCode:(code)=>dependencies.output(`Check that both screens show ${spacedCode(code)}.`)});switch(joined.kind){case"joined":return dependencies.output("This device joined your memory. Memory sync is on."),0;case"expired":return dependencies.error("The request expired before another device approved it. Run `omo sync enable` again."),1;case"refused":return dependencies.error(`This device did not join: ${joined.reason}. Run \`omo sync enable\` again.`),1}}async function approve(dependencies,context,requested){if(!dependencies.interactive)return dependencies.error("Approving a device needs an interactive terminal, so you can compare the code on both screens."),1;let waiting=(await context.pairing.listPending()).filter((row)=>row.answer===null),chosen=requested===void 0?waiting.length===1?waiting[0]:void 0:waiting.find((row)=>row.id===requested);if(chosen===void 0){if(waiting.length===0)dependencies.error("No device is waiting to join. Run `omo sync enable` on the new device first.");else dependencies.error(`More than one device is waiting. Run \`omo sync approve <id>\` with one of: ${waiting.map((row)=>row.id).join(", ")}`);return 1}let outcome=await approveDevice({...context,clock:dependencies.clock,pendingId:chosen.id,confirmCode:(code)=>dependencies.confirm(`Does the other device show ${spacedCode(code)}?`)});switch(outcome.kind){case"approved":return dependencies.output("The device is approved and will start syncing."),0;case"declined":return dependencies.error("Not approved. If the codes differed, someone may be intercepting the pairing; start again from the new device."),1;case"expired":return dependencies.error("The request expired. Run `omo sync enable` on the new device again."),1;case"refused":return dependencies.error(`Not approved: ${outcome.reason}.`),1}}var defaultDependencies=()=>({context:()=>signedInSyncContext({env:process.env,cwd:process.cwd()}),clock:{now:()=>Date.now(),sleep:(ms)=>new Promise((resolve)=>setTimeout(resolve,ms))},output:(line)=>console.log(line),error:(line)=>console.error(line),confirm:async(question)=>{let prompt=createInterface({input:process.stdin,output:process.stdout});try{return/^y(es)?$/i.test((await prompt.question(`${question} [y/N] `)).trim())}finally{prompt.close()}},interactive:process.stdin.isTTY===!0});function configureSyncCommands(program,dependencies=defaultDependencies()){let sync=program.command("sync").description("End-to-end encrypted memory sync");sync.command("enable").description("Turn memory sync on for this device, joining your memory if needed").action(()=>run2(dependencies,(context)=>enable(dependencies,context))),sync.command("approve [id]").description("Approve a device that is waiting to join, after comparing the code on both screens").action((id)=>run2(dependencies,(context)=>approve(dependencies,context,id))),sync.command("recover").description("Recover memory after losing every device").action(()=>{dependencies.error(RECOVER_ELSEWHERE),process.exitCode=EXIT_UNSUPPORTED_HERE})}async function runSyncCommand(args){await Promise.resolve().then(() => init_commander());let program=new Command("omo");configureSyncCommands(program),await program.parseAsync([...args],{from:"user"})}export{runAccountCommand,runServiceAuthCommand,runSyncCommand};