resend-cli 2.22.0-preview-inboxes.0 → 2.22.0-preview-inboxes.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.cjs
CHANGED
|
@@ -1,32 +1,32 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";var km=Object.create;var
|
|
2
|
+
"use strict";var km=Object.create;var Ri=Object.defineProperty;var _m=Object.getOwnPropertyDescriptor;var Fm=Object.getOwnPropertyNames;var Rm=Object.getPrototypeOf,Dm=Object.prototype.hasOwnProperty;var Ae=(e,t,o)=>()=>{if(o)throw o[0];try{return e&&(t=e(e=0)),t}catch(i){throw o=[i],i}};var Re=(e,t)=>()=>{try{return t||e((t={exports:{}}).exports,t),t.exports}catch(o){throw t=0,o}},io=(e,t)=>{for(var o in t)Ri(e,o,{get:t[o],enumerable:!0})},Tm=(e,t,o,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of Fm(t))!Dm.call(e,r)&&r!==o&&Ri(e,r,{get:()=>t[r],enumerable:!(i=_m(t,r))||i.enumerable});return e};var me=(e,t,o)=>(o=e!=null?km(Rm(e)):{},Tm(t||!e||!e.__esModule?Ri(o,"default",{value:e,enumerable:!0}):o,e));var ro=Re(Ti=>{var Ko=class extends Error{constructor(t,o,i){super(i),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.code=o,this.exitCode=t,this.nestedError=void 0}},Di=class extends Ko{constructor(t){super(1,"commander.invalidArgument",t),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}};Ti.CommanderError=Ko;Ti.InvalidArgumentError=Di});var ko=Re(Ei=>{var{InvalidArgumentError:Om}=ro(),Oi=class{constructor(t,o){switch(this.description=o||"",this.variadic=!1,this.parseArg=void 0,this.defaultValue=void 0,this.defaultValueDescription=void 0,this.argChoices=void 0,t[0]){case"<":this.required=!0,this._name=t.slice(1,-1);break;case"[":this.required=!1,this._name=t.slice(1,-1);break;default:this.required=!0,this._name=t;break}this._name.endsWith("...")&&(this.variadic=!0,this._name=this._name.slice(0,-3))}name(){return this._name}_collectValue(t,o){return o===this.defaultValue||!Array.isArray(o)?[t]:(o.push(t),o)}default(t,o){return this.defaultValue=t,this.defaultValueDescription=o,this}argParser(t){return this.parseArg=t,this}choices(t){return this.argChoices=t.slice(),this.parseArg=(o,i)=>{if(!this.argChoices.includes(o))throw new Om(`Allowed choices are ${this.argChoices.join(", ")}.`);return this.variadic?this._collectValue(o,i):o},this}argRequired(){return this.required=!0,this}argOptional(){return this.required=!1,this}};function Em(e){let t=e.name()+(e.variadic===!0?"...":"");return e.required?"<"+t+">":"["+t+"]"}Ei.Argument=Oi;Ei.humanReadableArgName=Em});var ji=Re(Ii=>{var{humanReadableArgName:Bm}=ko(),Bi=class{constructor(){this.helpWidth=void 0,this.minWidthToWrap=40,this.sortSubcommands=!1,this.sortOptions=!1,this.showGlobalOptions=!1}prepareContext(t){this.helpWidth=this.helpWidth??t.helpWidth??80}visibleCommands(t){let o=t.commands.filter(r=>!r._hidden),i=t._getHelpCommand();return i&&!i._hidden&&o.push(i),this.sortSubcommands&&o.sort((r,n)=>r.name().localeCompare(n.name())),o}compareOptions(t,o){let i=r=>r.short?r.short.replace(/^-/,""):r.long.replace(/^--/,"");return i(t).localeCompare(i(o))}visibleOptions(t){let o=t.options.filter(r=>!r.hidden),i=t._getHelpOption();if(i&&!i.hidden){let r=i.short&&t._findOption(i.short),n=i.long&&t._findOption(i.long);!r&&!n?o.push(i):i.long&&!n?o.push(t.createOption(i.long,i.description)):i.short&&!r&&o.push(t.createOption(i.short,i.description))}return this.sortOptions&&o.sort(this.compareOptions),o}visibleGlobalOptions(t){if(!this.showGlobalOptions)return[];let o=[];for(let i=t.parent;i;i=i.parent){let r=i.options.filter(n=>!n.hidden);o.push(...r)}return this.sortOptions&&o.sort(this.compareOptions),o}visibleArguments(t){return t._argsDescription&&t.registeredArguments.forEach(o=>{o.description=o.description||t._argsDescription[o.name()]||""}),t.registeredArguments.find(o=>o.description)?t.registeredArguments:[]}subcommandTerm(t){let o=t.registeredArguments.map(i=>Bm(i)).join(" ");return t._name+(t._aliases[0]?"|"+t._aliases[0]:"")+(t.options.length?" [options]":"")+(o?" "+o:"")}optionTerm(t){return t.flags}argumentTerm(t){return t.name()}longestSubcommandTermLength(t,o){return o.visibleCommands(t).reduce((i,r)=>Math.max(i,this.displayWidth(o.styleSubcommandTerm(o.subcommandTerm(r)))),0)}longestOptionTermLength(t,o){return o.visibleOptions(t).reduce((i,r)=>Math.max(i,this.displayWidth(o.styleOptionTerm(o.optionTerm(r)))),0)}longestGlobalOptionTermLength(t,o){return o.visibleGlobalOptions(t).reduce((i,r)=>Math.max(i,this.displayWidth(o.styleOptionTerm(o.optionTerm(r)))),0)}longestArgumentTermLength(t,o){return o.visibleArguments(t).reduce((i,r)=>Math.max(i,this.displayWidth(o.styleArgumentTerm(o.argumentTerm(r)))),0)}commandUsage(t){let o=t._name;t._aliases[0]&&(o=o+"|"+t._aliases[0]);let i="";for(let r=t.parent;r;r=r.parent)i=r.name()+" "+i;return i+o+" "+t.usage()}commandDescription(t){return t.description()}subcommandDescription(t){return t.summary()||t.description()}optionDescription(t){let o=[];if(t.argChoices&&o.push(`choices: ${t.argChoices.map(i=>JSON.stringify(i)).join(", ")}`),t.defaultValue!==void 0&&(t.required||t.optional||t.isBoolean()&&typeof t.defaultValue=="boolean")&&o.push(`default: ${t.defaultValueDescription||JSON.stringify(t.defaultValue)}`),t.presetArg!==void 0&&t.optional&&o.push(`preset: ${JSON.stringify(t.presetArg)}`),t.envVar!==void 0&&o.push(`env: ${t.envVar}`),o.length>0){let i=`(${o.join(", ")})`;return t.description?`${t.description} ${i}`:i}return t.description}argumentDescription(t){let o=[];if(t.argChoices&&o.push(`choices: ${t.argChoices.map(i=>JSON.stringify(i)).join(", ")}`),t.defaultValue!==void 0&&o.push(`default: ${t.defaultValueDescription||JSON.stringify(t.defaultValue)}`),o.length>0){let i=`(${o.join(", ")})`;return t.description?`${t.description} ${i}`:i}return t.description}formatItemList(t,o,i){return o.length===0?[]:[i.styleTitle(t),...o,""]}groupItems(t,o,i){let r=new Map;return t.forEach(n=>{let s=i(n);r.has(s)||r.set(s,[])}),o.forEach(n=>{let s=i(n);r.has(s)||r.set(s,[]),r.get(s).push(n)}),r}formatHelp(t,o){let i=o.padWidth(t,o),r=o.helpWidth??80;function n(p,f){return o.formatItem(p,i,f,o)}let s=[`${o.styleTitle("Usage:")} ${o.styleUsage(o.commandUsage(t))}`,""],a=o.commandDescription(t);a.length>0&&(s=s.concat([o.boxWrap(o.styleCommandDescription(a),r),""]));let l=o.visibleArguments(t).map(p=>n(o.styleArgumentTerm(o.argumentTerm(p)),o.styleArgumentDescription(o.argumentDescription(p))));if(s=s.concat(this.formatItemList("Arguments:",l,o)),this.groupItems(t.options,o.visibleOptions(t),p=>p.helpGroupHeading??"Options:").forEach((p,f)=>{let y=p.map(A=>n(o.styleOptionTerm(o.optionTerm(A)),o.styleOptionDescription(o.optionDescription(A))));s=s.concat(this.formatItemList(f,y,o))}),o.showGlobalOptions){let p=o.visibleGlobalOptions(t).map(f=>n(o.styleOptionTerm(o.optionTerm(f)),o.styleOptionDescription(o.optionDescription(f))));s=s.concat(this.formatItemList("Global Options:",p,o))}return this.groupItems(t.commands,o.visibleCommands(t),p=>p.helpGroup()||"Commands:").forEach((p,f)=>{let y=p.map(A=>n(o.styleSubcommandTerm(o.subcommandTerm(A)),o.styleSubcommandDescription(o.subcommandDescription(A))));s=s.concat(this.formatItemList(f,y,o))}),s.join(`
|
|
3
3
|
`)}displayWidth(t){return en(t).length}styleTitle(t){return t}styleUsage(t){return t.split(" ").map(o=>o==="[options]"?this.styleOptionText(o):o==="[command]"?this.styleSubcommandText(o):o[0]==="["||o[0]==="<"?this.styleArgumentText(o):this.styleCommandText(o)).join(" ")}styleCommandDescription(t){return this.styleDescriptionText(t)}styleOptionDescription(t){return this.styleDescriptionText(t)}styleSubcommandDescription(t){return this.styleDescriptionText(t)}styleArgumentDescription(t){return this.styleDescriptionText(t)}styleDescriptionText(t){return t}styleOptionTerm(t){return this.styleOptionText(t)}styleSubcommandTerm(t){return t.split(" ").map(o=>o==="[options]"?this.styleOptionText(o):o[0]==="["||o[0]==="<"?this.styleArgumentText(o):this.styleSubcommandText(o)).join(" ")}styleArgumentTerm(t){return this.styleArgumentText(t)}styleOptionText(t){return t}styleArgumentText(t){return t}styleSubcommandText(t){return t}styleCommandText(t){return t}padWidth(t,o){return Math.max(o.longestOptionTermLength(t,o),o.longestGlobalOptionTermLength(t,o),o.longestSubcommandTermLength(t,o),o.longestArgumentTermLength(t,o))}preformatted(t){return/\n[^\S\r\n]/.test(t)}formatItem(t,o,i,r){let s=" ".repeat(2);if(!i)return s+t;let a=t.padEnd(o+t.length-r.displayWidth(t)),l=2,m=(this.helpWidth??80)-o-l-2,p;return m<this.minWidthToWrap||r.preformatted(i)?p=i:p=r.boxWrap(i,m).replace(/\n/g,`
|
|
4
4
|
`+" ".repeat(o+l)),s+a+" ".repeat(l)+p.replace(/\n/g,`
|
|
5
5
|
${s}`)}boxWrap(t,o){if(o<this.minWidthToWrap)return t;let i=t.split(/\r\n|\n/),r=/[\s]*[^\s]+/g,n=[];return i.forEach(s=>{let a=s.match(r);if(a===null){n.push("");return}let l=[a.shift()],u=this.displayWidth(l[0]);a.forEach(m=>{let p=this.displayWidth(m);if(u+p<=o){l.push(m),u+=p;return}n.push(l.join(""));let f=m.trimStart();l=[f],u=this.displayWidth(f)}),n.push(l.join(""))}),n.join(`
|
|
6
|
-
`)}};function en(e){let t=/\x1b\[\d*(;\d*)*m/g;return e.replace(t,"")}
|
|
6
|
+
`)}};function en(e){let t=/\x1b\[\d*(;\d*)*m/g;return e.replace(t,"")}Ii.Help=Bi;Ii.stripColor=en});var Hi=Re(Gi=>{var{InvalidArgumentError:Im}=ro(),Pi=class{constructor(t,o){this.flags=t,this.description=o||"",this.required=t.includes("<"),this.optional=t.includes("["),this.variadic=/\w\.\.\.[>\]]$/.test(t),this.mandatory=!1;let i=jm(t);this.short=i.shortFlag,this.long=i.longFlag,this.negate=!1,this.long&&(this.negate=this.long.startsWith("--no-")),this.defaultValue=void 0,this.defaultValueDescription=void 0,this.presetArg=void 0,this.envVar=void 0,this.parseArg=void 0,this.hidden=!1,this.argChoices=void 0,this.conflictsWith=[],this.implied=void 0,this.helpGroupHeading=void 0}default(t,o){return this.defaultValue=t,this.defaultValueDescription=o,this}preset(t){return this.presetArg=t,this}conflicts(t){return this.conflictsWith=this.conflictsWith.concat(t),this}implies(t){let o=t;return typeof t=="string"&&(o={[t]:!0}),this.implied=Object.assign(this.implied||{},o),this}env(t){return this.envVar=t,this}argParser(t){return this.parseArg=t,this}makeOptionMandatory(t=!0){return this.mandatory=!!t,this}hideHelp(t=!0){return this.hidden=!!t,this}_collectValue(t,o){return o===this.defaultValue||!Array.isArray(o)?[t]:(o.push(t),o)}choices(t){return this.argChoices=t.slice(),this.parseArg=(o,i)=>{if(!this.argChoices.includes(o))throw new Im(`Allowed choices are ${this.argChoices.join(", ")}.`);return this.variadic?this._collectValue(o,i):o},this}name(){return this.long?this.long.replace(/^--/,""):this.short.replace(/^-/,"")}attributeName(){return this.negate?tn(this.name().replace(/^no-/,"")):tn(this.name())}helpGroup(t){return this.helpGroupHeading=t,this}is(t){return this.short===t||this.long===t}isBoolean(){return!this.required&&!this.optional&&!this.negate}},$i=class{constructor(t){this.positiveOptions=new Map,this.negativeOptions=new Map,this.dualOptions=new Set,t.forEach(o=>{o.negate?this.negativeOptions.set(o.attributeName(),o):this.positiveOptions.set(o.attributeName(),o)}),this.negativeOptions.forEach((o,i)=>{this.positiveOptions.has(i)&&this.dualOptions.add(i)})}valueFromOption(t,o){let i=o.attributeName();if(!this.dualOptions.has(i))return!0;let r=this.negativeOptions.get(i).presetArg,n=r!==void 0?r:!1;return o.negate===(n===t)}};function tn(e){return e.split("-").reduce((t,o)=>t+o[0].toUpperCase()+o.slice(1))}function jm(e){let t,o,i=/^-[^-]$/,r=/^--[^-]/,n=e.split(/[ |,]+/).concat("guard");if(i.test(n[0])&&(t=n.shift()),r.test(n[0])&&(o=n.shift()),!t&&i.test(n[0])&&(t=n.shift()),!t&&r.test(n[0])&&(t=o,o=n.shift()),n[0].startsWith("-")){let s=n[0],a=`option creation failed due to '${s}' in option flags '${e}'`;throw/^-[^-][^-]/.test(s)?new Error(`${a}
|
|
7
7
|
- a short flag is a single dash and a single character
|
|
8
8
|
- either use a single dash and a single character (for a short flag)
|
|
9
9
|
- or use a double dash for a long option (and can have two, like '--ws, --workspace')`):i.test(s)?new Error(`${a}
|
|
10
10
|
- too many short flags`):r.test(s)?new Error(`${a}
|
|
11
11
|
- too many long flags`):new Error(`${a}
|
|
12
|
-
- unrecognised flag format`)}if(t===void 0&&o===void 0)throw new Error(`option creation failed due to no flags found in '${e}'.`);return{shortFlag:t,longFlag:o}}Gi.Option=Pi;Gi.DualOptions=$i});var rn=
|
|
12
|
+
- unrecognised flag format`)}if(t===void 0&&o===void 0)throw new Error(`option creation failed due to no flags found in '${e}'.`);return{shortFlag:t,longFlag:o}}Gi.Option=Pi;Gi.DualOptions=$i});var rn=Re(on=>{function Pm(e,t){if(Math.abs(e.length-t.length)>3)return Math.max(e.length,t.length);let o=[];for(let i=0;i<=e.length;i++)o[i]=[i];for(let i=0;i<=t.length;i++)o[0][i]=i;for(let i=1;i<=t.length;i++)for(let r=1;r<=e.length;r++){let n=1;e[r-1]===t[i-1]?n=0:n=1,o[r][i]=Math.min(o[r-1][i]+1,o[r][i-1]+1,o[r-1][i-1]+n),r>1&&i>1&&e[r-1]===t[i-2]&&e[r-2]===t[i-1]&&(o[r][i]=Math.min(o[r][i],o[r-2][i-2]+1))}return o[e.length][t.length]}function $m(e,t){if(!t||t.length===0)return"";t=Array.from(new Set(t));let o=e.startsWith("--");o&&(e=e.slice(2),t=t.map(s=>s.slice(2)));let i=[],r=3,n=.4;return t.forEach(s=>{if(s.length<=1)return;let a=Pm(e,s),l=Math.max(e.length,s.length);(l-a)/l>n&&(a<r?(r=a,i=[s]):a===r&&i.push(s))}),i.sort((s,a)=>s.localeCompare(a)),o&&(i=i.map(s=>`--${s}`)),i.length>1?`
|
|
13
13
|
(Did you mean one of ${i.join(", ")}?)`:i.length===1?`
|
|
14
|
-
(Did you mean ${i[0]}?)`:""}on.suggestSimilar=$m});var ln=
|
|
14
|
+
(Did you mean ${i[0]}?)`:""}on.suggestSimilar=$m});var ln=Re(Li=>{var Gm=require("node:events").EventEmitter,Qi=require("node:child_process"),ot=require("node:path"),_o=require("node:fs"),Y=require("node:process"),{Argument:Hm,humanReadableArgName:Qm}=ko(),{CommanderError:Ni}=ro(),{Help:Nm,stripColor:Mm}=ji(),{Option:nn,DualOptions:qm}=Hi(),{suggestSimilar:sn}=rn(),Mi=class e extends Gm{constructor(t){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=t||"",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:o=>Y.stdout.write(o),writeErr:o=>Y.stderr.write(o),outputError:(o,i)=>i(o),getOutHelpWidth:()=>Y.stdout.isTTY?Y.stdout.columns:void 0,getErrHelpWidth:()=>Y.stderr.isTTY?Y.stderr.columns:void 0,getOutHasColors:()=>qi()??(Y.stdout.isTTY&&Y.stdout.hasColors?.()),getErrHasColors:()=>qi()??(Y.stderr.isTTY&&Y.stderr.hasColors?.()),stripColor:o=>Mm(o)},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(t){return this._outputConfiguration=t._outputConfiguration,this._helpOption=t._helpOption,this._helpCommand=t._helpCommand,this._helpConfiguration=t._helpConfiguration,this._exitCallback=t._exitCallback,this._storeOptionsAsProperties=t._storeOptionsAsProperties,this._combineFlagAndOptionalValue=t._combineFlagAndOptionalValue,this._allowExcessArguments=t._allowExcessArguments,this._enablePositionalOptions=t._enablePositionalOptions,this._showHelpAfterError=t._showHelpAfterError,this._showSuggestionAfterError=t._showSuggestionAfterError,this}_getCommandAndAncestors(){let t=[];for(let o=this;o;o=o.parent)t.push(o);return t}command(t,o,i){let r=o,n=i;typeof r=="object"&&r!==null&&(n=r,r=null),n=n||{};let[,s,a]=t.match(/([^ ]+) *(.*)/),l=this.createCommand(s);return r&&(l.description(r),l._executableHandler=!0),n.isDefault&&(this._defaultCommandName=l._name),l._hidden=!!(n.noHelp||n.hidden),l._executableFile=n.executableFile||null,a&&l.arguments(a),this._registerCommand(l),l.parent=this,l.copyInheritedSettings(this),r?this:l}createCommand(t){return new e(t)}createHelp(){return Object.assign(new Nm,this.configureHelp())}configureHelp(t){return t===void 0?this._helpConfiguration:(this._helpConfiguration=t,this)}configureOutput(t){return t===void 0?this._outputConfiguration:(this._outputConfiguration={...this._outputConfiguration,...t},this)}showHelpAfterError(t=!0){return typeof t!="string"&&(t=!!t),this._showHelpAfterError=t,this}showSuggestionAfterError(t=!0){return this._showSuggestionAfterError=!!t,this}addCommand(t,o){if(!t._name)throw new Error(`Command passed to .addCommand() must have a name
|
|
15
15
|
- specify the name in Command constructor or using .name()`);return o=o||{},o.isDefault&&(this._defaultCommandName=t._name),(o.noHelp||o.hidden)&&(t._hidden=!0),this._registerCommand(t),t.parent=this,t._checkForBrokenPassThrough(),this}createArgument(t,o){return new Hm(t,o)}argument(t,o,i,r){let n=this.createArgument(t,o);return typeof i=="function"?n.default(r).argParser(i):n.default(i),this.addArgument(n),this}arguments(t){return t.trim().split(/ +/).forEach(o=>{this.argument(o)}),this}addArgument(t){let o=this.registeredArguments.slice(-1)[0];if(o?.variadic)throw new Error(`only the last argument can be variadic '${o.name()}'`);if(t.required&&t.defaultValue!==void 0&&t.parseArg===void 0)throw new Error(`a default value for a required argument is never used: '${t.name()}'`);return this.registeredArguments.push(t),this}helpCommand(t,o){if(typeof t=="boolean")return this._addImplicitHelpCommand=t,t&&this._defaultCommandGroup&&this._initCommandGroup(this._getHelpCommand()),this;let i=t??"help [command]",[,r,n]=i.match(/([^ ]+) *(.*)/),s=o??"display help for command",a=this.createCommand(r);return a.helpOption(!1),n&&a.arguments(n),s&&a.description(s),this._addImplicitHelpCommand=!0,this._helpCommand=a,(t||o)&&this._initCommandGroup(a),this}addHelpCommand(t,o){return typeof t!="object"?(this.helpCommand(t,o),this):(this._addImplicitHelpCommand=!0,this._helpCommand=t,this._initCommandGroup(t),this)}_getHelpCommand(){return this._addImplicitHelpCommand??(this.commands.length&&!this._actionHandler&&!this._findCommand("help"))?(this._helpCommand===void 0&&this.helpCommand(void 0,void 0),this._helpCommand):null}hook(t,o){let i=["preSubcommand","preAction","postAction"];if(!i.includes(t))throw new Error(`Unexpected value for event passed to hook : '${t}'.
|
|
16
16
|
Expecting one of '${i.join("', '")}'`);return this._lifeCycleHooks[t]?this._lifeCycleHooks[t].push(o):this._lifeCycleHooks[t]=[o],this}exitOverride(t){return t?this._exitCallback=t:this._exitCallback=o=>{if(o.code!=="commander.executeSubCommandAsync")throw o},this}_exit(t,o,i){this._exitCallback&&this._exitCallback(new Ni(t,o,i)),Y.exit(t)}action(t){let o=i=>{let r=this.registeredArguments.length,n=i.slice(0,r);return this._storeOptionsAsProperties?n[r]=this:n[r]=this.opts(),n.push(this),t.apply(this,n)};return this._actionHandler=o,this}createOption(t,o){return new nn(t,o)}_callParseArg(t,o,i,r){try{return t.parseArg(o,i)}catch(n){if(n.code==="commander.invalidArgument"){let s=`${r} ${n.message}`;this.error(s,{exitCode:n.exitCode,code:n.code})}throw n}}_registerOption(t){let o=t.short&&this._findOption(t.short)||t.long&&this._findOption(t.long);if(o){let i=t.long&&this._findOption(t.long)?t.long:t.short;throw new Error(`Cannot add option '${t.flags}'${this._name&&` to command '${this._name}'`} due to conflicting flag '${i}'
|
|
17
17
|
- already used by option '${o.flags}'`)}this._initOptionGroup(t),this.options.push(t)}_registerCommand(t){let o=r=>[r.name()].concat(r.aliases()),i=o(t).find(r=>this._findCommand(r));if(i){let r=o(this._findCommand(i)).join("|"),n=o(t).join("|");throw new Error(`cannot add command '${n}' as already have command '${r}'`)}this._initCommandGroup(t),this.commands.push(t)}addOption(t){this._registerOption(t);let o=t.name(),i=t.attributeName();if(t.negate){let n=t.long.replace(/^--no-/,"--");this._findOption(n)||this.setOptionValueWithSource(i,t.defaultValue===void 0?!0:t.defaultValue,"default")}else t.defaultValue!==void 0&&this.setOptionValueWithSource(i,t.defaultValue,"default");let r=(n,s,a)=>{n==null&&t.presetArg!==void 0&&(n=t.presetArg);let l=this.getOptionValue(i);n!==null&&t.parseArg?n=this._callParseArg(t,n,l,s):n!==null&&t.variadic&&(n=t._collectValue(n,l)),n==null&&(t.negate?n=!1:t.isBoolean()||t.optional?n=!0:n=""),this.setOptionValueWithSource(i,n,a)};return this.on("option:"+o,n=>{let s=`error: option '${t.flags}' argument '${n}' is invalid.`;r(n,s,"cli")}),t.envVar&&this.on("optionEnv:"+o,n=>{let s=`error: option '${t.flags}' value '${n}' from env '${t.envVar}' is invalid.`;r(n,s,"env")}),this}_optionEx(t,o,i,r,n){if(typeof o=="object"&&o instanceof nn)throw new Error("To add an Option object use addOption() instead of option() or requiredOption()");let s=this.createOption(o,i);if(s.makeOptionMandatory(!!t.mandatory),typeof r=="function")s.default(n).argParser(r);else if(r instanceof RegExp){let a=r;r=(l,u)=>{let m=a.exec(l);return m?m[0]:u},s.default(n).argParser(r)}else s.default(r);return this.addOption(s)}option(t,o,i,r){return this._optionEx({},t,o,i,r)}requiredOption(t,o,i,r){return this._optionEx({mandatory:!0},t,o,i,r)}combineFlagAndOptionalValue(t=!0){return this._combineFlagAndOptionalValue=!!t,this}allowUnknownOption(t=!0){return this._allowUnknownOption=!!t,this}allowExcessArguments(t=!0){return this._allowExcessArguments=!!t,this}enablePositionalOptions(t=!0){return this._enablePositionalOptions=!!t,this}passThroughOptions(t=!0){return this._passThroughOptions=!!t,this._checkForBrokenPassThrough(),this}_checkForBrokenPassThrough(){if(this.parent&&this._passThroughOptions&&!this.parent._enablePositionalOptions)throw new Error(`passThroughOptions cannot be used for '${this._name}' without turning on enablePositionalOptions for parent command(s)`)}storeOptionsAsProperties(t=!0){if(this.options.length)throw new Error("call .storeOptionsAsProperties() before adding options");if(Object.keys(this._optionValues).length)throw new Error("call .storeOptionsAsProperties() before setting option values");return this._storeOptionsAsProperties=!!t,this}getOptionValue(t){return this._storeOptionsAsProperties?this[t]:this._optionValues[t]}setOptionValue(t,o){return this.setOptionValueWithSource(t,o,void 0)}setOptionValueWithSource(t,o,i){return this._storeOptionsAsProperties?this[t]=o:this._optionValues[t]=o,this._optionValueSources[t]=i,this}getOptionValueSource(t){return this._optionValueSources[t]}getOptionValueSourceWithGlobals(t){let o;return this._getCommandAndAncestors().forEach(i=>{i.getOptionValueSource(t)!==void 0&&(o=i.getOptionValueSource(t))}),o}_prepareUserArgs(t,o){if(t!==void 0&&!Array.isArray(t))throw new Error("first parameter to parse must be array or undefined");if(o=o||{},t===void 0&&o.from===void 0){Y.versions?.electron&&(o.from="electron");let r=Y.execArgv??[];(r.includes("-e")||r.includes("--eval")||r.includes("-p")||r.includes("--print"))&&(o.from="eval")}t===void 0&&(t=Y.argv),this.rawArgs=t.slice();let i;switch(o.from){case void 0:case"node":this._scriptPath=t[1],i=t.slice(2);break;case"electron":Y.defaultApp?(this._scriptPath=t[1],i=t.slice(2)):i=t.slice(1);break;case"user":i=t.slice(0);break;case"eval":i=t.slice(1);break;default:throw new Error(`unexpected parse option { from: '${o.from}' }`)}return!this._name&&this._scriptPath&&this.nameFromFilename(this._scriptPath),this._name=this._name||"program",i}parse(t,o){this._prepareForParse();let i=this._prepareUserArgs(t,o);return this._parseCommand([],i),this}async parseAsync(t,o){this._prepareForParse();let i=this._prepareUserArgs(t,o);return await this._parseCommand([],i),this}_prepareForParse(){this._savedState===null?this.saveStateBeforeParse():this.restoreStateBeforeParse()}saveStateBeforeParse(){this._savedState={_name:this._name,_optionValues:{...this._optionValues},_optionValueSources:{...this._optionValueSources}}}restoreStateBeforeParse(){if(this._storeOptionsAsProperties)throw new Error(`Can not call parse again when storeOptionsAsProperties is true.
|
|
18
|
-
- either make a new Command for each call to parse, or stop storing options as properties`);this._name=this._savedState._name,this._scriptPath=null,this.rawArgs=[],this._optionValues={...this._savedState._optionValues},this._optionValueSources={...this._savedState._optionValueSources},this.args=[],this.processedArgs=[]}_checkForMissingExecutable(t,o,i){if(
|
|
18
|
+
- either make a new Command for each call to parse, or stop storing options as properties`);this._name=this._savedState._name,this._scriptPath=null,this.rawArgs=[],this._optionValues={...this._savedState._optionValues},this._optionValueSources={...this._savedState._optionValueSources},this.args=[],this.processedArgs=[]}_checkForMissingExecutable(t,o,i){if(_o.existsSync(t))return;let r=o?`searched for local subcommand relative to directory '${o}'`:"no directory for search for local subcommand, use .executableDir() to supply a custom directory",n=`'${t}' does not exist
|
|
19
19
|
- if '${i}' is not meant to be an executable command, remove description parameter from '.command()' and use '.description()' instead
|
|
20
20
|
- if the default executable name is not suitable, use the executableFile option to supply a custom name or path
|
|
21
|
-
- ${r}`;throw new Error(n)}_executeSubCommand(t,o){o=o.slice();let i=!1,r=[".js",".ts",".tsx",".mjs",".cjs"];function n(m,p){let f=ot.resolve(m,p);if(
|
|
21
|
+
- ${r}`;throw new Error(n)}_executeSubCommand(t,o){o=o.slice();let i=!1,r=[".js",".ts",".tsx",".mjs",".cjs"];function n(m,p){let f=ot.resolve(m,p);if(_o.existsSync(f))return f;if(r.includes(ot.extname(p)))return;let y=r.find(A=>_o.existsSync(`${f}${A}`));if(y)return`${f}${y}`}this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let s=t._executableFile||`${this._name}-${t._name}`,a=this._executableDir||"";if(this._scriptPath){let m;try{m=_o.realpathSync(this._scriptPath)}catch{m=this._scriptPath}a=ot.resolve(ot.dirname(m),a)}if(a){let m=n(a,s);if(!m&&!t._executableFile&&this._scriptPath){let p=ot.basename(this._scriptPath,ot.extname(this._scriptPath));p!==this._name&&(m=n(a,`${p}-${t._name}`))}s=m||s}i=r.includes(ot.extname(s));let l;Y.platform!=="win32"?i?(o.unshift(s),o=an(Y.execArgv).concat(o),l=Qi.spawn(Y.argv[0],o,{stdio:"inherit"})):l=Qi.spawn(s,o,{stdio:"inherit"}):(this._checkForMissingExecutable(s,a,t._name),o.unshift(s),o=an(Y.execArgv).concat(o),l=Qi.spawn(Y.execPath,o,{stdio:"inherit"})),l.killed||["SIGUSR1","SIGUSR2","SIGTERM","SIGINT","SIGHUP"].forEach(p=>{Y.on(p,()=>{l.killed===!1&&l.exitCode===null&&l.kill(p)})});let u=this._exitCallback;l.on("close",m=>{m=m??1,u?u(new Ni(m,"commander.executeSubCommandAsync","(close)")):Y.exit(m)}),l.on("error",m=>{if(m.code==="ENOENT")this._checkForMissingExecutable(s,a,t._name);else if(m.code==="EACCES")throw new Error(`'${s}' not executable`);if(!u)Y.exit(1);else{let p=new Ni(1,"commander.executeSubCommandAsync","(error)");p.nestedError=m,u(p)}}),this.runningCommand=l}_dispatchSubcommand(t,o,i){let r=this._findCommand(t);r||this.help({error:!0}),r._prepareForParse();let n;return n=this._chainOrCallSubCommandHook(n,r,"preSubcommand"),n=this._chainOrCall(n,()=>{if(r._executableHandler)this._executeSubCommand(r,o.concat(i));else return r._parseCommand(o,i)}),n}_dispatchHelpCommand(t){t||this.help();let o=this._findCommand(t);return o&&!o._executableHandler&&o.help(),this._dispatchSubcommand(t,[],[this._getHelpOption()?.long??this._getHelpOption()?.short??"--help"])}_checkNumberOfArguments(){this.registeredArguments.forEach((t,o)=>{t.required&&this.args[o]==null&&this.missingArgument(t.name())}),!(this.registeredArguments.length>0&&this.registeredArguments[this.registeredArguments.length-1].variadic)&&this.args.length>this.registeredArguments.length&&this._excessArguments(this.args)}_processArguments(){let t=(i,r,n)=>{let s=r;if(r!==null&&i.parseArg){let a=`error: command-argument value '${r}' is invalid for argument '${i.name()}'.`;s=this._callParseArg(i,r,n,a)}return s};this._checkNumberOfArguments();let o=[];this.registeredArguments.forEach((i,r)=>{let n=i.defaultValue;i.variadic?r<this.args.length?(n=this.args.slice(r),i.parseArg&&(n=n.reduce((s,a)=>t(i,a,s),i.defaultValue))):n===void 0&&(n=[]):r<this.args.length&&(n=this.args[r],i.parseArg&&(n=t(i,n,i.defaultValue))),o[r]=n}),this.processedArgs=o}_chainOrCall(t,o){return t?.then&&typeof t.then=="function"?t.then(()=>o()):o()}_chainOrCallHooks(t,o){let i=t,r=[];return this._getCommandAndAncestors().reverse().filter(n=>n._lifeCycleHooks[o]!==void 0).forEach(n=>{n._lifeCycleHooks[o].forEach(s=>{r.push({hookedCommand:n,callback:s})})}),o==="postAction"&&r.reverse(),r.forEach(n=>{i=this._chainOrCall(i,()=>n.callback(n.hookedCommand,this))}),i}_chainOrCallSubCommandHook(t,o,i){let r=t;return this._lifeCycleHooks[i]!==void 0&&this._lifeCycleHooks[i].forEach(n=>{r=this._chainOrCall(r,()=>n(this,o))}),r}_parseCommand(t,o){let i=this.parseOptions(o);if(this._parseOptionsEnv(),this._parseOptionsImplied(),t=t.concat(i.operands),o=i.unknown,this.args=t.concat(o),t&&this._findCommand(t[0]))return this._dispatchSubcommand(t[0],t.slice(1),o);if(this._getHelpCommand()&&t[0]===this._getHelpCommand().name())return this._dispatchHelpCommand(t[1]);if(this._defaultCommandName)return this._outputHelpIfRequested(o),this._dispatchSubcommand(this._defaultCommandName,t,o);this.commands.length&&this.args.length===0&&!this._actionHandler&&!this._defaultCommandName&&this.help({error:!0}),this._outputHelpIfRequested(i.unknown),this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let r=()=>{i.unknown.length>0&&this.unknownOption(i.unknown[0])},n=`command:${this.name()}`;if(this._actionHandler){r(),this._processArguments();let s;return s=this._chainOrCallHooks(s,"preAction"),s=this._chainOrCall(s,()=>this._actionHandler(this.processedArgs)),this.parent&&(s=this._chainOrCall(s,()=>{this.parent.emit(n,t,o)})),s=this._chainOrCallHooks(s,"postAction"),s}if(this.parent?.listenerCount(n))r(),this._processArguments(),this.parent.emit(n,t,o);else if(t.length){if(this._findCommand("*"))return this._dispatchSubcommand("*",t,o);this.listenerCount("command:*")?this.emit("command:*",t,o):this.commands.length?this.unknownCommand():(r(),this._processArguments())}else this.commands.length?(r(),this.help({error:!0})):(r(),this._processArguments())}_findCommand(t){if(t)return this.commands.find(o=>o._name===t||o._aliases.includes(t))}_findOption(t){return this.options.find(o=>o.is(t))}_checkForMissingMandatoryOptions(){this._getCommandAndAncestors().forEach(t=>{t.options.forEach(o=>{o.mandatory&&t.getOptionValue(o.attributeName())===void 0&&t.missingMandatoryOptionValue(o)})})}_checkForConflictingLocalOptions(){let t=this.options.filter(i=>{let r=i.attributeName();return this.getOptionValue(r)===void 0?!1:this.getOptionValueSource(r)!=="default"});t.filter(i=>i.conflictsWith.length>0).forEach(i=>{let r=t.find(n=>i.conflictsWith.includes(n.attributeName()));r&&this._conflictingOption(i,r)})}_checkForConflictingOptions(){this._getCommandAndAncestors().forEach(t=>{t._checkForConflictingLocalOptions()})}parseOptions(t){let o=[],i=[],r=o;function n(m){return m.length>1&&m[0]==="-"}let s=m=>/^-(\d+|\d*\.\d+)(e[+-]?\d+)?$/.test(m)?!this._getCommandAndAncestors().some(p=>p.options.map(f=>f.short).some(f=>/^-\d$/.test(f))):!1,a=null,l=null,u=0;for(;u<t.length||l;){let m=l??t[u++];if(l=null,m==="--"){r===i&&r.push(m),r.push(...t.slice(u));break}if(a&&(!n(m)||s(m))){this.emit(`option:${a.name()}`,m);continue}if(a=null,n(m)){let p=this._findOption(m);if(p){if(p.required){let f=t[u++];f===void 0&&this.optionMissingArgument(p),this.emit(`option:${p.name()}`,f)}else if(p.optional){let f=null;u<t.length&&(!n(t[u])||s(t[u]))&&(f=t[u++]),this.emit(`option:${p.name()}`,f)}else this.emit(`option:${p.name()}`);a=p.variadic?p:null;continue}}if(m.length>2&&m[0]==="-"&&m[1]!=="-"){let p=this._findOption(`-${m[1]}`);if(p){p.required||p.optional&&this._combineFlagAndOptionalValue?this.emit(`option:${p.name()}`,m.slice(2)):(this.emit(`option:${p.name()}`),l=`-${m.slice(2)}`);continue}}if(/^--[^=]+=/.test(m)){let p=m.indexOf("="),f=this._findOption(m.slice(0,p));if(f&&(f.required||f.optional)){this.emit(`option:${f.name()}`,m.slice(p+1));continue}}if(r===o&&n(m)&&!(this.commands.length===0&&s(m))&&(r=i),(this._enablePositionalOptions||this._passThroughOptions)&&o.length===0&&i.length===0){if(this._findCommand(m)){o.push(m),i.push(...t.slice(u));break}else if(this._getHelpCommand()&&m===this._getHelpCommand().name()){o.push(m,...t.slice(u));break}else if(this._defaultCommandName){i.push(m,...t.slice(u));break}}if(this._passThroughOptions){r.push(m,...t.slice(u));break}r.push(m)}return{operands:o,unknown:i}}opts(){if(this._storeOptionsAsProperties){let t={},o=this.options.length;for(let i=0;i<o;i++){let r=this.options[i].attributeName();t[r]=r===this._versionOptionName?this._version:this[r]}return t}return this._optionValues}optsWithGlobals(){return this._getCommandAndAncestors().reduce((t,o)=>Object.assign(t,o.opts()),{})}error(t,o){this._outputConfiguration.outputError(`${t}
|
|
22
22
|
`,this._outputConfiguration.writeErr),typeof this._showHelpAfterError=="string"?this._outputConfiguration.writeErr(`${this._showHelpAfterError}
|
|
23
23
|
`):this._showHelpAfterError&&(this._outputConfiguration.writeErr(`
|
|
24
24
|
`),this.outputHelp({error:!0}));let i=o||{},r=i.exitCode||1,n=i.code||"commander.error";this._exit(r,n,t)}_parseOptionsEnv(){this.options.forEach(t=>{if(t.envVar&&t.envVar in Y.env){let o=t.attributeName();(this.getOptionValue(o)===void 0||["default","config","env"].includes(this.getOptionValueSource(o)))&&(t.required||t.optional?this.emit(`optionEnv:${t.name()}`,Y.env[t.envVar]):this.emit(`optionEnv:${t.name()}`))}})}_parseOptionsImplied(){let t=new qm(this.options),o=i=>this.getOptionValue(i)!==void 0&&!["default","implied"].includes(this.getOptionValueSource(i));this.options.filter(i=>i.implied!==void 0&&o(i.attributeName())&&t.valueFromOption(this.getOptionValue(i.attributeName()),i)).forEach(i=>{Object.keys(i.implied).filter(r=>!o(r)).forEach(r=>{this.setOptionValueWithSource(r,i.implied[r],"implied")})})}missingArgument(t){let o=`error: missing required argument '${t}'`;this.error(o,{code:"commander.missingArgument"})}optionMissingArgument(t){let o=`error: option '${t.flags}' argument missing`;this.error(o,{code:"commander.optionMissingArgument"})}missingMandatoryOptionValue(t){let o=`error: required option '${t.flags}' not specified`;this.error(o,{code:"commander.missingMandatoryOptionValue"})}_conflictingOption(t,o){let i=s=>{let a=s.attributeName(),l=this.getOptionValue(a),u=this.options.find(p=>p.negate&&a===p.attributeName()),m=this.options.find(p=>!p.negate&&a===p.attributeName());return u&&(u.presetArg===void 0&&l===!1||u.presetArg!==void 0&&l===u.presetArg)?u:m||s},r=s=>{let a=i(s),l=a.attributeName();return this.getOptionValueSource(l)==="env"?`environment variable '${a.envVar}'`:`option '${a.flags}'`},n=`error: ${r(t)} cannot be used with ${r(o)}`;this.error(n,{code:"commander.conflictingOption"})}unknownOption(t){if(this._allowUnknownOption)return;let o="";if(t.startsWith("--")&&this._showSuggestionAfterError){let r=[],n=this;do{let s=n.createHelp().visibleOptions(n).filter(a=>a.long).map(a=>a.long);r=r.concat(s),n=n.parent}while(n&&!n._enablePositionalOptions);o=sn(t,r)}let i=`error: unknown option '${t}'${o}`;this.error(i,{code:"commander.unknownOption"})}_excessArguments(t){if(this._allowExcessArguments)return;let o=this.registeredArguments.length,i=o===1?"":"s",n=`error: too many arguments${this.parent?` for '${this.name()}'`:""}. Expected ${o} argument${i} but got ${t.length}.`;this.error(n,{code:"commander.excessArguments"})}unknownCommand(){let t=this.args[0],o="";if(this._showSuggestionAfterError){let r=[];this.createHelp().visibleCommands(this).forEach(n=>{r.push(n.name()),n.alias()&&r.push(n.alias())}),o=sn(t,r)}let i=`error: unknown command '${t}'${o}`;this.error(i,{code:"commander.unknownCommand"})}version(t,o,i){if(t===void 0)return this._version;this._version=t,o=o||"-V, --version",i=i||"output the version number";let r=this.createOption(o,i);return this._versionOptionName=r.attributeName(),this._registerOption(r),this.on("option:"+r.name(),()=>{this._outputConfiguration.writeOut(`${t}
|
|
25
25
|
`),this._exit(0,"commander.version",t)}),this}description(t,o){return t===void 0&&o===void 0?this._description:(this._description=t,o&&(this._argsDescription=o),this)}summary(t){return t===void 0?this._summary:(this._summary=t,this)}alias(t){if(t===void 0)return this._aliases[0];let o=this;if(this.commands.length!==0&&this.commands[this.commands.length-1]._executableHandler&&(o=this.commands[this.commands.length-1]),t===o._name)throw new Error("Command alias can't be the same as its name");let i=this.parent?._findCommand(t);if(i){let r=[i.name()].concat(i.aliases()).join("|");throw new Error(`cannot add alias '${t}' to command '${this.name()}' as already have command '${r}'`)}return o._aliases.push(t),this}aliases(t){return t===void 0?this._aliases:(t.forEach(o=>this.alias(o)),this)}usage(t){if(t===void 0){if(this._usage)return this._usage;let o=this.registeredArguments.map(i=>Qm(i));return[].concat(this.options.length||this._helpOption!==null?"[options]":[],this.commands.length?"[command]":[],this.registeredArguments.length?o:[]).join(" ")}return this._usage=t,this}name(t){return t===void 0?this._name:(this._name=t,this)}helpGroup(t){return t===void 0?this._helpGroupHeading??"":(this._helpGroupHeading=t,this)}commandsGroup(t){return t===void 0?this._defaultCommandGroup??"":(this._defaultCommandGroup=t,this)}optionsGroup(t){return t===void 0?this._defaultOptionGroup??"":(this._defaultOptionGroup=t,this)}_initOptionGroup(t){this._defaultOptionGroup&&!t.helpGroupHeading&&t.helpGroup(this._defaultOptionGroup)}_initCommandGroup(t){this._defaultCommandGroup&&!t.helpGroup()&&t.helpGroup(this._defaultCommandGroup)}nameFromFilename(t){return this._name=ot.basename(t,ot.extname(t)),this}executableDir(t){return t===void 0?this._executableDir:(this._executableDir=t,this)}helpInformation(t){let o=this.createHelp(),i=this._getOutputContext(t);o.prepareContext({error:i.error,helpWidth:i.helpWidth,outputHasColors:i.hasColors});let r=o.formatHelp(this,o);return i.hasColors?r:this._outputConfiguration.stripColor(r)}_getOutputContext(t){t=t||{};let o=!!t.error,i,r,n;return o?(i=a=>this._outputConfiguration.writeErr(a),r=this._outputConfiguration.getErrHasColors(),n=this._outputConfiguration.getErrHelpWidth()):(i=a=>this._outputConfiguration.writeOut(a),r=this._outputConfiguration.getOutHasColors(),n=this._outputConfiguration.getOutHelpWidth()),{error:o,write:a=>(r||(a=this._outputConfiguration.stripColor(a)),i(a)),hasColors:r,helpWidth:n}}outputHelp(t){let o;typeof t=="function"&&(o=t,t=void 0);let i=this._getOutputContext(t),r={error:i.error,write:i.write,command:this};this._getCommandAndAncestors().reverse().forEach(s=>s.emit("beforeAllHelp",r)),this.emit("beforeHelp",r);let n=this.helpInformation({error:i.error});if(o&&(n=o(n),typeof n!="string"&&!Buffer.isBuffer(n)))throw new Error("outputHelp callback must return a string or a Buffer");i.write(n),this._getHelpOption()?.long&&this.emit(this._getHelpOption().long),this.emit("afterHelp",r),this._getCommandAndAncestors().forEach(s=>s.emit("afterAllHelp",r))}helpOption(t,o){return typeof t=="boolean"?(t?(this._helpOption===null&&(this._helpOption=void 0),this._defaultOptionGroup&&this._initOptionGroup(this._getHelpOption())):this._helpOption=null,this):(this._helpOption=this.createOption(t??"-h, --help",o??"display help for command"),(t||o)&&this._initOptionGroup(this._helpOption),this)}_getHelpOption(){return this._helpOption===void 0&&this.helpOption(void 0,void 0),this._helpOption}addHelpOption(t){return this._helpOption=t,this._initOptionGroup(t),this}help(t){this.outputHelp(t);let o=Number(Y.exitCode??0);o===0&&t&&typeof t!="function"&&t.error&&(o=1),this._exit(o,"commander.help","(outputHelp)")}addHelpText(t,o){let i=["beforeAll","before","after","afterAll"];if(!i.includes(t))throw new Error(`Unexpected value for position to addHelpText.
|
|
26
26
|
Expecting one of '${i.join("', '")}'`);let r=`${t}Help`;return this.on(r,n=>{let s;typeof o=="function"?s=o({error:n.error,command:n.command}):s=o,s&&n.write(`${s}
|
|
27
|
-
`)}),this}_outputHelpIfRequested(t){let o=this._getHelpOption();o&&t.find(r=>o.is(r))&&(this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)"))}};function an(e){return e.map(t=>{if(!t.startsWith("--inspect"))return t;let o,i="127.0.0.1",r="9229",n;return(n=t.match(/^(--inspect(-brk)?)$/))!==null?o=n[1]:(n=t.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null?(o=n[1],/^\d+$/.test(n[3])?r=n[3]:i=n[3]):(n=t.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null&&(o=n[1],i=n[3],r=n[4]),o&&r!=="0"?`${o}=${i}:${parseInt(r)+1}`:t})}function qi(){if(Y.env.NO_COLOR||Y.env.FORCE_COLOR==="0"||Y.env.FORCE_COLOR==="false")return!1;if(Y.env.FORCE_COLOR||Y.env.CLICOLOR_FORCE!==void 0)return!0}Li.Command=Mi;Li.useColor=qi});var mn=_e(Ge=>{var{Argument:cn}=ko(),{Command:Wi}=ln(),{CommanderError:Lm,InvalidArgumentError:dn}=ro(),{Help:Wm}=ji(),{Option:un}=Hi();Ge.program=new Wi;Ge.createCommand=e=>new Wi(e);Ge.createOption=(e,t)=>new un(e,t);Ge.createArgument=(e,t)=>new cn(e,t);Ge.Command=Wi;Ge.Option=un;Ge.Argument=cn;Ge.Help=Wm;Ge.CommanderError=Lm;Ge.InvalidArgumentError=dn;Ge.InvalidOptionArgumentError=dn});var fn=_e((Ie,pn)=>{var We=mn();Ie=pn.exports={};Ie.program=new We.Command;Ie.Argument=We.Argument;Ie.Command=We.Command;Ie.CommanderError=We.CommanderError;Ie.Help=We.Help;Ie.InvalidArgumentError=We.InvalidArgumentError;Ie.InvalidOptionArgumentError=We.InvalidArgumentError;Ie.Option=We.Option;Ie.createCommand=e=>new We.Command(e);Ie.createOption=(e,t)=>new We.Option(e,t);Ie.createArgument=(e,t)=>new We.Argument(e,t)});var Je=_e((lA,Ji)=>{var _o=process||{},An=_o.argv||[],Ro=_o.env||{},Jm=!(Ro.NO_COLOR||An.includes("--no-color"))&&(!!Ro.FORCE_COLOR||An.includes("--color")||_o.platform==="win32"||(_o.stdout||{}).isTTY&&Ro.TERM!=="dumb"||!!Ro.CI),Vm=(e,t,o=e)=>i=>{let r=""+i,n=r.indexOf(t,e.length);return~n?e+zm(r,t,o,n)+t:e+r+t},zm=(e,t,o,i)=>{let r="",n=0;do r+=e.substring(n,i)+o,n=i+t.length,i=e.indexOf(t,n);while(~i);return r+e.substring(n)},bn=(e=Jm)=>{let t=e?Vm:()=>String;return{isColorSupported:e,reset:t("\x1B[0m","\x1B[0m"),bold:t("\x1B[1m","\x1B[22m","\x1B[22m\x1B[1m"),dim:t("\x1B[2m","\x1B[22m","\x1B[22m\x1B[2m"),italic:t("\x1B[3m","\x1B[23m"),underline:t("\x1B[4m","\x1B[24m"),inverse:t("\x1B[7m","\x1B[27m"),hidden:t("\x1B[8m","\x1B[28m"),strikethrough:t("\x1B[9m","\x1B[29m"),black:t("\x1B[30m","\x1B[39m"),red:t("\x1B[31m","\x1B[39m"),green:t("\x1B[32m","\x1B[39m"),yellow:t("\x1B[33m","\x1B[39m"),blue:t("\x1B[34m","\x1B[39m"),magenta:t("\x1B[35m","\x1B[39m"),cyan:t("\x1B[36m","\x1B[39m"),white:t("\x1B[37m","\x1B[39m"),gray:t("\x1B[90m","\x1B[39m"),bgBlack:t("\x1B[40m","\x1B[49m"),bgRed:t("\x1B[41m","\x1B[49m"),bgGreen:t("\x1B[42m","\x1B[49m"),bgYellow:t("\x1B[43m","\x1B[49m"),bgBlue:t("\x1B[44m","\x1B[49m"),bgMagenta:t("\x1B[45m","\x1B[49m"),bgCyan:t("\x1B[46m","\x1B[49m"),bgWhite:t("\x1B[47m","\x1B[49m"),blackBright:t("\x1B[90m","\x1B[39m"),redBright:t("\x1B[91m","\x1B[39m"),greenBright:t("\x1B[92m","\x1B[39m"),yellowBright:t("\x1B[93m","\x1B[39m"),blueBright:t("\x1B[94m","\x1B[39m"),magentaBright:t("\x1B[95m","\x1B[39m"),cyanBright:t("\x1B[96m","\x1B[39m"),whiteBright:t("\x1B[97m","\x1B[39m"),bgBlackBright:t("\x1B[100m","\x1B[49m"),bgRedBright:t("\x1B[101m","\x1B[49m"),bgGreenBright:t("\x1B[102m","\x1B[49m"),bgYellowBright:t("\x1B[103m","\x1B[49m"),bgBlueBright:t("\x1B[104m","\x1B[49m"),bgMagentaBright:t("\x1B[105m","\x1B[49m"),bgCyanBright:t("\x1B[106m","\x1B[49m"),bgWhiteBright:t("\x1B[107m","\x1B[49m")}};Ji.exports=bn();Ji.exports.createColors=bn});var Zi=_e((AA,On)=>{"use strict";var Xi={to(e,t){return t?`\x1B[${t+1};${e+1}H`:`\x1B[${e+1}G`},move(e,t){let o="";return e<0?o+=`\x1B[${-e}D`:e>0&&(o+=`\x1B[${e}C`),t<0?o+=`\x1B[${-t}A`:t>0&&(o+=`\x1B[${t}B`),o},up:(e=1)=>`\x1B[${e}A`,down:(e=1)=>`\x1B[${e}B`,forward:(e=1)=>`\x1B[${e}C`,backward:(e=1)=>`\x1B[${e}D`,nextLine:(e=1)=>"\x1B[E".repeat(e),prevLine:(e=1)=>"\x1B[F".repeat(e),left:"\x1B[G",hide:"\x1B[?25l",show:"\x1B[?25h",save:"\x1B7",restore:"\x1B8"},pp={up:(e=1)=>"\x1B[S".repeat(e),down:(e=1)=>"\x1B[T".repeat(e)},fp={screen:"\x1B[2J",up:(e=1)=>"\x1B[1J".repeat(e),down:(e=1)=>"\x1B[J".repeat(e),line:"\x1B[2K",lineEnd:"\x1B[K",lineStart:"\x1B[1K",lines(e){let t="";for(let o=0;o<e;o++)t+=this.line+(o<e-1?Xi.up():"");return e&&(t+=Xi.left),t}};On.exports={cursor:Xi,scroll:pp,erase:fp,beep:"\x07"}});var ir,Yn=Ae(()=>{ir={name:"resend-cli",version:"2.22.0-preview-inboxes.0",description:"The official CLI for Resend",license:"MIT",repository:{type:"git",url:"https://github.com/resend/resend-cli"},homepage:"https://github.com/resend/resend-cli#readme",keywords:["cli","resend","email","api","tanstack-intent"],engines:{node:">=22"},packageManager:"pnpm@11.8.0",files:["dist/cli.cjs","skills/"],type:"module",bin:{resend:"./dist/cli.cjs"},scripts:{dev:"tsx src/cli.ts","dev:watch":"tsx --watch src/cli.ts",build:"node scripts/build.mjs","build:bin":"pnpm build && pkg dist/cli.cjs --config package.json --compress Brotli --target node24 --output dist/resend",lint:"biome check .","lint:fix":"biome check --write .",typecheck:"tsc --noEmit",test:"vitest run","test:e2e":"vitest run --config vitest.config.e2e.ts",prepack:"pnpm install && pnpm build && node scripts/verify-bundle.mjs"},dependencies:{"@clack/prompts":"1.4.0","@commander-js/extra-typings":"14.0.0",commander:"14.0.3",esbuild:"0.28.1","esbuild-wasm":"0.28.0",picocolors:"1.1.1",resend:"6.28.1-preview-inboxes.0"},pkg:{scripts:["node_modules/esbuild-wasm/bin/esbuild","node_modules/esbuild-wasm/wasm_exec.js","node_modules/esbuild-wasm/wasm_exec_node.js"],assets:["node_modules/esbuild-wasm/esbuild.wasm"]},devDependencies:{"@biomejs/biome":"2.4.11","@types/node":"24.12.4","@yao-pkg/pkg":"6.20.0",tsx:"4.22.4",typescript:"5.9.3",vitest:"4.1.9"}}});var se,Xn,Kt=Ae(()=>{"use strict";Yn();se=ir.version,Xn=ir.name});var ds=_e(je=>{"use strict";var rf=je&&je.__extends||(function(){var e=function(t,o){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,r){i.__proto__=r}||function(i,r){for(var n in r)r.hasOwnProperty(n)&&(i[n]=r[n])},e(t,o)};return function(t,o){e(t,o);function i(){this.constructor=t}t.prototype=o===null?Object.create(o):(i.prototype=o.prototype,new i)}})();Object.defineProperty(je,"__esModule",{value:!0});var de=256,pr=(function(){function e(t){t===void 0&&(t="="),this._paddingCharacter=t}return e.prototype.encodedLength=function(t){return this._paddingCharacter?(t+2)/3*4|0:(t*8+5)/6|0},e.prototype.encode=function(t){for(var o="",i=0;i<t.length-2;i+=3){var r=t[i]<<16|t[i+1]<<8|t[i+2];o+=this._encodeByte(r>>>18&63),o+=this._encodeByte(r>>>12&63),o+=this._encodeByte(r>>>6&63),o+=this._encodeByte(r>>>0&63)}var n=t.length-i;if(n>0){var r=t[i]<<16|(n===2?t[i+1]<<8:0);o+=this._encodeByte(r>>>18&63),o+=this._encodeByte(r>>>12&63),n===2?o+=this._encodeByte(r>>>6&63):o+=this._paddingCharacter||"",o+=this._paddingCharacter||""}return o},e.prototype.maxDecodedLength=function(t){return this._paddingCharacter?t/4*3|0:(t*6+7)/8|0},e.prototype.decodedLength=function(t){return this.maxDecodedLength(t.length-this._getPaddingLength(t))},e.prototype.decode=function(t){if(t.length===0)return new Uint8Array(0);for(var o=this._getPaddingLength(t),i=t.length-o,r=new Uint8Array(this.maxDecodedLength(i)),n=0,s=0,a=0,l=0,u=0,m=0,p=0;s<i-4;s+=4)l=this._decodeChar(t.charCodeAt(s+0)),u=this._decodeChar(t.charCodeAt(s+1)),m=this._decodeChar(t.charCodeAt(s+2)),p=this._decodeChar(t.charCodeAt(s+3)),r[n++]=l<<2|u>>>4,r[n++]=u<<4|m>>>2,r[n++]=m<<6|p,a|=l&de,a|=u&de,a|=m&de,a|=p&de;if(s<i-1&&(l=this._decodeChar(t.charCodeAt(s)),u=this._decodeChar(t.charCodeAt(s+1)),r[n++]=l<<2|u>>>4,a|=l&de,a|=u&de),s<i-2&&(m=this._decodeChar(t.charCodeAt(s+2)),r[n++]=u<<4|m>>>2,a|=m&de),s<i-3&&(p=this._decodeChar(t.charCodeAt(s+3)),r[n++]=m<<6|p,a|=p&de),a!==0)throw new Error("Base64Coder: incorrect characters for decoding");return r},e.prototype._encodeByte=function(t){var o=t;return o+=65,o+=25-t>>>8&6,o+=51-t>>>8&-75,o+=61-t>>>8&-15,o+=62-t>>>8&3,String.fromCharCode(o)},e.prototype._decodeChar=function(t){var o=de;return o+=(42-t&t-44)>>>8&-de+t-43+62,o+=(46-t&t-48)>>>8&-de+t-47+63,o+=(47-t&t-58)>>>8&-de+t-48+52,o+=(64-t&t-91)>>>8&-de+t-65+0,o+=(96-t&t-123)>>>8&-de+t-97+26,o},e.prototype._getPaddingLength=function(t){var o=0;if(this._paddingCharacter){for(var i=t.length-1;i>=0&&t[i]===this._paddingCharacter;i--)o++;if(t.length<4||o>2)throw new Error("Base64Coder: incorrect padding")}return o},e})();je.Coder=pr;var po=new pr;function nf(e){return po.encode(e)}je.encode=nf;function sf(e){return po.decode(e)}je.decode=sf;var ls=(function(e){rf(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t.prototype._encodeByte=function(o){var i=o;return i+=65,i+=25-o>>>8&6,i+=51-o>>>8&-75,i+=61-o>>>8&-13,i+=62-o>>>8&49,String.fromCharCode(i)},t.prototype._decodeChar=function(o){var i=de;return i+=(44-o&o-46)>>>8&-de+o-45+62,i+=(94-o&o-96)>>>8&-de+o-95+63,i+=(47-o&o-58)>>>8&-de+o-48+52,i+=(64-o&o-91)>>>8&-de+o-65+0,i+=(96-o&o-123)>>>8&-de+o-97+26,i},t})(pr);je.URLSafeCoder=ls;var cs=new ls;function af(e){return cs.encode(e)}je.encodeURLSafe=af;function lf(e){return cs.decode(e)}je.decodeURLSafe=lf;je.encodedLength=function(e){return po.encodedLength(e)};je.maxDecodedLength=function(e){return po.maxDecodedLength(e)};je.decodedLength=function(e){return po.decodedLength(e)}});var ms=_e((us,Mo)=>{(function(e,t){var o={};t(o);var i=o.default;for(var r in o)i[r]=o[r];typeof Mo=="object"&&typeof Mo.exports=="object"?Mo.exports=i:typeof define=="function"&&define.amd?define(function(){return i}):e.sha256=i})(us,function(e){"use strict";e.__esModule=!0,e.digestLength=32,e.blockSize=64;var t=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]);function o(p,f,y,A,b){for(var x,U,v,S,K,O,$,Q,P,q,we,re,vt;b>=64;){for(x=f[0],U=f[1],v=f[2],S=f[3],K=f[4],O=f[5],$=f[6],Q=f[7],q=0;q<16;q++)we=A+q*4,p[q]=(y[we]&255)<<24|(y[we+1]&255)<<16|(y[we+2]&255)<<8|y[we+3]&255;for(q=16;q<64;q++)P=p[q-2],re=(P>>>17|P<<15)^(P>>>19|P<<13)^P>>>10,P=p[q-15],vt=(P>>>7|P<<25)^(P>>>18|P<<14)^P>>>3,p[q]=(re+p[q-7]|0)+(vt+p[q-16]|0);for(q=0;q<64;q++)re=(((K>>>6|K<<26)^(K>>>11|K<<21)^(K>>>25|K<<7))+(K&O^~K&$)|0)+(Q+(t[q]+p[q]|0)|0)|0,vt=((x>>>2|x<<30)^(x>>>13|x<<19)^(x>>>22|x<<10))+(x&U^x&v^U&v)|0,Q=$,$=O,O=K,K=S+re|0,S=v,v=U,U=x,x=re+vt|0;f[0]+=x,f[1]+=U,f[2]+=v,f[3]+=S,f[4]+=K,f[5]+=O,f[6]+=$,f[7]+=Q,A+=64,b-=64}return A}var i=(function(){function p(){this.digestLength=e.digestLength,this.blockSize=e.blockSize,this.state=new Int32Array(8),this.temp=new Int32Array(64),this.buffer=new Uint8Array(128),this.bufferLength=0,this.bytesHashed=0,this.finished=!1,this.reset()}return p.prototype.reset=function(){return this.state[0]=1779033703,this.state[1]=3144134277,this.state[2]=1013904242,this.state[3]=2773480762,this.state[4]=1359893119,this.state[5]=2600822924,this.state[6]=528734635,this.state[7]=1541459225,this.bufferLength=0,this.bytesHashed=0,this.finished=!1,this},p.prototype.clean=function(){for(var f=0;f<this.buffer.length;f++)this.buffer[f]=0;for(var f=0;f<this.temp.length;f++)this.temp[f]=0;this.reset()},p.prototype.update=function(f,y){if(y===void 0&&(y=f.length),this.finished)throw new Error("SHA256: can't update because hash was finished.");var A=0;if(this.bytesHashed+=y,this.bufferLength>0){for(;this.bufferLength<64&&y>0;)this.buffer[this.bufferLength++]=f[A++],y--;this.bufferLength===64&&(o(this.temp,this.state,this.buffer,0,64),this.bufferLength=0)}for(y>=64&&(A=o(this.temp,this.state,f,A,y),y%=64);y>0;)this.buffer[this.bufferLength++]=f[A++],y--;return this},p.prototype.finish=function(f){if(!this.finished){var y=this.bytesHashed,A=this.bufferLength,b=y/536870912|0,x=y<<3,U=y%64<56?64:128;this.buffer[A]=128;for(var v=A+1;v<U-8;v++)this.buffer[v]=0;this.buffer[U-8]=b>>>24&255,this.buffer[U-7]=b>>>16&255,this.buffer[U-6]=b>>>8&255,this.buffer[U-5]=b>>>0&255,this.buffer[U-4]=x>>>24&255,this.buffer[U-3]=x>>>16&255,this.buffer[U-2]=x>>>8&255,this.buffer[U-1]=x>>>0&255,o(this.temp,this.state,this.buffer,0,U),this.finished=!0}for(var v=0;v<8;v++)f[v*4+0]=this.state[v]>>>24&255,f[v*4+1]=this.state[v]>>>16&255,f[v*4+2]=this.state[v]>>>8&255,f[v*4+3]=this.state[v]>>>0&255;return this},p.prototype.digest=function(){var f=new Uint8Array(this.digestLength);return this.finish(f),f},p.prototype._saveState=function(f){for(var y=0;y<this.state.length;y++)f[y]=this.state[y]},p.prototype._restoreState=function(f,y){for(var A=0;A<this.state.length;A++)this.state[A]=f[A];this.bytesHashed=y,this.finished=!1,this.bufferLength=0},p})();e.Hash=i;var r=(function(){function p(f){this.inner=new i,this.outer=new i,this.blockSize=this.inner.blockSize,this.digestLength=this.inner.digestLength;var y=new Uint8Array(this.blockSize);if(f.length>this.blockSize)new i().update(f).finish(y).clean();else for(var A=0;A<f.length;A++)y[A]=f[A];for(var A=0;A<y.length;A++)y[A]^=54;this.inner.update(y);for(var A=0;A<y.length;A++)y[A]^=106;this.outer.update(y),this.istate=new Uint32Array(8),this.ostate=new Uint32Array(8),this.inner._saveState(this.istate),this.outer._saveState(this.ostate);for(var A=0;A<y.length;A++)y[A]=0}return p.prototype.reset=function(){return this.inner._restoreState(this.istate,this.inner.blockSize),this.outer._restoreState(this.ostate,this.outer.blockSize),this},p.prototype.clean=function(){for(var f=0;f<this.istate.length;f++)this.ostate[f]=this.istate[f]=0;this.inner.clean(),this.outer.clean()},p.prototype.update=function(f){return this.inner.update(f),this},p.prototype.finish=function(f){return this.outer.finished?this.outer.finish(f):(this.inner.finish(f),this.outer.update(f,this.digestLength).finish(f)),this},p.prototype.digest=function(){var f=new Uint8Array(this.digestLength);return this.finish(f),f},p})();e.HMAC=r;function n(p){var f=new i().update(p),y=f.digest();return f.clean(),y}e.hash=n,e.default=n;function s(p,f){var y=new r(p).update(f),A=y.digest();return y.clean(),A}e.hmac=s;function a(p,f,y,A){var b=A[0];if(b===0)throw new Error("hkdf: cannot expand more");f.reset(),b>1&&f.update(p),y&&f.update(y),f.update(A),f.finish(p),A[0]++}var l=new Uint8Array(e.digestLength);function u(p,f,y,A){f===void 0&&(f=l),A===void 0&&(A=32);for(var b=new Uint8Array([1]),x=s(f,p),U=new r(x),v=new Uint8Array(U.digestLength),S=v.length,K=new Uint8Array(A),O=0;O<A;O++)S===v.length&&(a(v,U,y,b),S=0),K[O]=v[S++];return U.clean(),v.fill(0),b.fill(0),K}e.hkdf=u;function m(p,f,y,A){for(var b=new r(p),x=b.digestLength,U=new Uint8Array(4),v=new Uint8Array(x),S=new Uint8Array(x),K=new Uint8Array(A),O=0;O*x<A;O++){var $=O+1;U[0]=$>>>24&255,U[1]=$>>>16&255,U[2]=$>>>8&255,U[3]=$>>>0&255,b.reset(),b.update(f),b.update(U),b.finish(S);for(var Q=0;Q<x;Q++)v[Q]=S[Q];for(var Q=2;Q<=y;Q++){b.reset(),b.update(S).finish(S);for(var P=0;P<x;P++)v[P]^=S[P]}for(var Q=0;Q<x&&O*x+Q<A;Q++)K[O*x+Q]=v[Q]}for(var O=0;O<x;O++)v[O]=S[O]=0;for(var O=0;O<4;O++)U[O]=0;return b.clean(),K}e.pbkdf2=m})});var fs=_e(fr=>{"use strict";Object.defineProperty(fr,"__esModule",{value:!0});fr.timingSafeEqual=cf;function ps(e,t=""){if(!e)throw new Error(t)}function cf(e,t){if(e.byteLength!==t.byteLength)return!1;e instanceof DataView||(e=new DataView(ArrayBuffer.isView(e)?e.buffer:e)),t instanceof DataView||(t=new DataView(ArrayBuffer.isView(t)?t.buffer:t)),ps(e instanceof DataView),ps(t instanceof DataView);let o=e.byteLength,i=0,r=-1;for(;++r<o;)i|=e.getUint8(r)^t.getUint8(r);return i===0}});var As=_e(Pt=>{"use strict";Object.defineProperty(Pt,"__esModule",{value:!0});Pt.Webhook=Pt.WebhookVerificationError=void 0;var hs=ds(),df=ms(),uf=fs(),gs=300,hr=class e extends Error{constructor(t){super(t),Object.setPrototypeOf(this,e.prototype),this.name="ExtendableError",this.stack=new Error(t).stack}},pt=class e extends hr{constructor(t){super(t),Object.setPrototypeOf(this,e.prototype),this.name="WebhookVerificationError"}};Pt.WebhookVerificationError=pt;var qo=class e{constructor(t,o){if(o?.format==="raw")t instanceof Uint8Array?this.key=t:this.key=Uint8Array.from(t,i=>i.charCodeAt(0));else{if(typeof t!="string")throw new Error("Expected secret to be of type string");t.startsWith(e.prefix)&&(t=t.substring(e.prefix.length)),this.key=hs.decode(t)}if(this.key.length===0)throw new Error("Secret can't be empty.")}verify(t,o,i){var r;let n=(r=i?.jsonParse)!==null&&r!==void 0?r:!0,s={};for(let b of Object.keys(o))s[b.toLowerCase()]=o[b];let a=s["webhook-id"],l=s["webhook-signature"],u=s["webhook-timestamp"];if(!l||!a||!u)throw new pt("Missing required headers");let m=this.verifyTimestamp(u),f=this.sign(a,m,t).split(",")[1],y=l.split(" "),A=new globalThis.TextEncoder;for(let b of y){let[x,U]=b.split(",");if(x==="v1"&&(0,uf.timingSafeEqual)(A.encode(U),A.encode(f))){let v=t.toString();return v===""?void 0:n?JSON.parse(v):void 0}}throw new pt("No matching signature found")}sign(t,o,i){if(typeof i!="string")if(i.constructor.name==="Buffer")i=i.toString();else throw new Error("Expected payload to be of type string or Buffer.");let r=new TextEncoder,n=Math.floor(o.getTime()/1e3),s=r.encode(`${t}.${n}.${i}`);return`v1,${hs.encode(df.hmac(this.key,s))}`}verifyTimestamp(t){let o=Math.floor(Date.now()/1e3),i=parseInt(t,10);if(Number.isNaN(i))throw new pt("Invalid Signature Headers");if(o-i>gs)throw new pt("Message timestamp too old");if(i>o+gs)throw new pt("Message timestamp too new");return new Date(i*1e3)}};Pt.Webhook=qo;qo.prefix="whsec_"});var Wo,Ts=Ae(()=>{"use strict";Wo=class extends Error{constructor(t){super(`Credentials file is corrupted or contains invalid JSON: ${t}
|
|
27
|
+
`)}),this}_outputHelpIfRequested(t){let o=this._getHelpOption();o&&t.find(r=>o.is(r))&&(this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)"))}};function an(e){return e.map(t=>{if(!t.startsWith("--inspect"))return t;let o,i="127.0.0.1",r="9229",n;return(n=t.match(/^(--inspect(-brk)?)$/))!==null?o=n[1]:(n=t.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null?(o=n[1],/^\d+$/.test(n[3])?r=n[3]:i=n[3]):(n=t.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null&&(o=n[1],i=n[3],r=n[4]),o&&r!=="0"?`${o}=${i}:${parseInt(r)+1}`:t})}function qi(){if(Y.env.NO_COLOR||Y.env.FORCE_COLOR==="0"||Y.env.FORCE_COLOR==="false")return!1;if(Y.env.FORCE_COLOR||Y.env.CLICOLOR_FORCE!==void 0)return!0}Li.Command=Mi;Li.useColor=qi});var mn=Re(Ge=>{var{Argument:cn}=ko(),{Command:Wi}=ln(),{CommanderError:Lm,InvalidArgumentError:dn}=ro(),{Help:Wm}=ji(),{Option:un}=Hi();Ge.program=new Wi;Ge.createCommand=e=>new Wi(e);Ge.createOption=(e,t)=>new un(e,t);Ge.createArgument=(e,t)=>new cn(e,t);Ge.Command=Wi;Ge.Option=un;Ge.Argument=cn;Ge.Help=Wm;Ge.CommanderError=Lm;Ge.InvalidArgumentError=dn;Ge.InvalidOptionArgumentError=dn});var fn=Re((Ee,pn)=>{var We=mn();Ee=pn.exports={};Ee.program=new We.Command;Ee.Argument=We.Argument;Ee.Command=We.Command;Ee.CommanderError=We.CommanderError;Ee.Help=We.Help;Ee.InvalidArgumentError=We.InvalidArgumentError;Ee.InvalidOptionArgumentError=We.InvalidArgumentError;Ee.Option=We.Option;Ee.createCommand=e=>new We.Command(e);Ee.createOption=(e,t)=>new We.Option(e,t);Ee.createArgument=(e,t)=>new We.Argument(e,t)});var Je=Re((lA,Ji)=>{var Ro=process||{},An=Ro.argv||[],Fo=Ro.env||{},Jm=!(Fo.NO_COLOR||An.includes("--no-color"))&&(!!Fo.FORCE_COLOR||An.includes("--color")||Ro.platform==="win32"||(Ro.stdout||{}).isTTY&&Fo.TERM!=="dumb"||!!Fo.CI),Vm=(e,t,o=e)=>i=>{let r=""+i,n=r.indexOf(t,e.length);return~n?e+zm(r,t,o,n)+t:e+r+t},zm=(e,t,o,i)=>{let r="",n=0;do r+=e.substring(n,i)+o,n=i+t.length,i=e.indexOf(t,n);while(~i);return r+e.substring(n)},bn=(e=Jm)=>{let t=e?Vm:()=>String;return{isColorSupported:e,reset:t("\x1B[0m","\x1B[0m"),bold:t("\x1B[1m","\x1B[22m","\x1B[22m\x1B[1m"),dim:t("\x1B[2m","\x1B[22m","\x1B[22m\x1B[2m"),italic:t("\x1B[3m","\x1B[23m"),underline:t("\x1B[4m","\x1B[24m"),inverse:t("\x1B[7m","\x1B[27m"),hidden:t("\x1B[8m","\x1B[28m"),strikethrough:t("\x1B[9m","\x1B[29m"),black:t("\x1B[30m","\x1B[39m"),red:t("\x1B[31m","\x1B[39m"),green:t("\x1B[32m","\x1B[39m"),yellow:t("\x1B[33m","\x1B[39m"),blue:t("\x1B[34m","\x1B[39m"),magenta:t("\x1B[35m","\x1B[39m"),cyan:t("\x1B[36m","\x1B[39m"),white:t("\x1B[37m","\x1B[39m"),gray:t("\x1B[90m","\x1B[39m"),bgBlack:t("\x1B[40m","\x1B[49m"),bgRed:t("\x1B[41m","\x1B[49m"),bgGreen:t("\x1B[42m","\x1B[49m"),bgYellow:t("\x1B[43m","\x1B[49m"),bgBlue:t("\x1B[44m","\x1B[49m"),bgMagenta:t("\x1B[45m","\x1B[49m"),bgCyan:t("\x1B[46m","\x1B[49m"),bgWhite:t("\x1B[47m","\x1B[49m"),blackBright:t("\x1B[90m","\x1B[39m"),redBright:t("\x1B[91m","\x1B[39m"),greenBright:t("\x1B[92m","\x1B[39m"),yellowBright:t("\x1B[93m","\x1B[39m"),blueBright:t("\x1B[94m","\x1B[39m"),magentaBright:t("\x1B[95m","\x1B[39m"),cyanBright:t("\x1B[96m","\x1B[39m"),whiteBright:t("\x1B[97m","\x1B[39m"),bgBlackBright:t("\x1B[100m","\x1B[49m"),bgRedBright:t("\x1B[101m","\x1B[49m"),bgGreenBright:t("\x1B[102m","\x1B[49m"),bgYellowBright:t("\x1B[103m","\x1B[49m"),bgBlueBright:t("\x1B[104m","\x1B[49m"),bgMagentaBright:t("\x1B[105m","\x1B[49m"),bgCyanBright:t("\x1B[106m","\x1B[49m"),bgWhiteBright:t("\x1B[107m","\x1B[49m")}};Ji.exports=bn();Ji.exports.createColors=bn});var Zi=Re((AA,On)=>{"use strict";var Xi={to(e,t){return t?`\x1B[${t+1};${e+1}H`:`\x1B[${e+1}G`},move(e,t){let o="";return e<0?o+=`\x1B[${-e}D`:e>0&&(o+=`\x1B[${e}C`),t<0?o+=`\x1B[${-t}A`:t>0&&(o+=`\x1B[${t}B`),o},up:(e=1)=>`\x1B[${e}A`,down:(e=1)=>`\x1B[${e}B`,forward:(e=1)=>`\x1B[${e}C`,backward:(e=1)=>`\x1B[${e}D`,nextLine:(e=1)=>"\x1B[E".repeat(e),prevLine:(e=1)=>"\x1B[F".repeat(e),left:"\x1B[G",hide:"\x1B[?25l",show:"\x1B[?25h",save:"\x1B7",restore:"\x1B8"},pp={up:(e=1)=>"\x1B[S".repeat(e),down:(e=1)=>"\x1B[T".repeat(e)},fp={screen:"\x1B[2J",up:(e=1)=>"\x1B[1J".repeat(e),down:(e=1)=>"\x1B[J".repeat(e),line:"\x1B[2K",lineEnd:"\x1B[K",lineStart:"\x1B[1K",lines(e){let t="";for(let o=0;o<e;o++)t+=this.line+(o<e-1?Xi.up():"");return e&&(t+=Xi.left),t}};On.exports={cursor:Xi,scroll:pp,erase:fp,beep:"\x07"}});var ir,Yn=Ae(()=>{ir={name:"resend-cli",version:"2.22.0-preview-inboxes.1",description:"The official CLI for Resend",license:"MIT",repository:{type:"git",url:"https://github.com/resend/resend-cli"},homepage:"https://github.com/resend/resend-cli#readme",keywords:["cli","resend","email","api","tanstack-intent"],engines:{node:">=22"},packageManager:"pnpm@11.8.0",files:["dist/cli.cjs","skills/"],type:"module",bin:{resend:"./dist/cli.cjs"},scripts:{dev:"tsx src/cli.ts","dev:watch":"tsx --watch src/cli.ts",build:"node scripts/build.mjs","build:bin":"pnpm build && pkg dist/cli.cjs --config package.json --compress Brotli --target node24 --output dist/resend",lint:"biome check .","lint:fix":"biome check --write .",typecheck:"tsc --noEmit",test:"vitest run","test:e2e":"vitest run --config vitest.config.e2e.ts",prepack:"pnpm install && pnpm build && node scripts/verify-bundle.mjs"},dependencies:{"@clack/prompts":"1.4.0","@commander-js/extra-typings":"14.0.0",commander:"14.0.3",esbuild:"0.28.1","esbuild-wasm":"0.28.0",picocolors:"1.1.1",resend:"6.28.1-preview-inboxes.0"},pkg:{scripts:["node_modules/esbuild-wasm/bin/esbuild","node_modules/esbuild-wasm/wasm_exec.js","node_modules/esbuild-wasm/wasm_exec_node.js"],assets:["node_modules/esbuild-wasm/esbuild.wasm"]},devDependencies:{"@biomejs/biome":"2.4.11","@types/node":"24.12.4","@yao-pkg/pkg":"6.20.0",tsx:"4.22.4",typescript:"5.9.3",vitest:"4.1.9"}}});var se,Xn,Kt=Ae(()=>{"use strict";Yn();se=ir.version,Xn=ir.name});var ds=Re(je=>{"use strict";var rf=je&&je.__extends||(function(){var e=function(t,o){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,r){i.__proto__=r}||function(i,r){for(var n in r)r.hasOwnProperty(n)&&(i[n]=r[n])},e(t,o)};return function(t,o){e(t,o);function i(){this.constructor=t}t.prototype=o===null?Object.create(o):(i.prototype=o.prototype,new i)}})();Object.defineProperty(je,"__esModule",{value:!0});var de=256,pr=(function(){function e(t){t===void 0&&(t="="),this._paddingCharacter=t}return e.prototype.encodedLength=function(t){return this._paddingCharacter?(t+2)/3*4|0:(t*8+5)/6|0},e.prototype.encode=function(t){for(var o="",i=0;i<t.length-2;i+=3){var r=t[i]<<16|t[i+1]<<8|t[i+2];o+=this._encodeByte(r>>>18&63),o+=this._encodeByte(r>>>12&63),o+=this._encodeByte(r>>>6&63),o+=this._encodeByte(r>>>0&63)}var n=t.length-i;if(n>0){var r=t[i]<<16|(n===2?t[i+1]<<8:0);o+=this._encodeByte(r>>>18&63),o+=this._encodeByte(r>>>12&63),n===2?o+=this._encodeByte(r>>>6&63):o+=this._paddingCharacter||"",o+=this._paddingCharacter||""}return o},e.prototype.maxDecodedLength=function(t){return this._paddingCharacter?t/4*3|0:(t*6+7)/8|0},e.prototype.decodedLength=function(t){return this.maxDecodedLength(t.length-this._getPaddingLength(t))},e.prototype.decode=function(t){if(t.length===0)return new Uint8Array(0);for(var o=this._getPaddingLength(t),i=t.length-o,r=new Uint8Array(this.maxDecodedLength(i)),n=0,s=0,a=0,l=0,u=0,m=0,p=0;s<i-4;s+=4)l=this._decodeChar(t.charCodeAt(s+0)),u=this._decodeChar(t.charCodeAt(s+1)),m=this._decodeChar(t.charCodeAt(s+2)),p=this._decodeChar(t.charCodeAt(s+3)),r[n++]=l<<2|u>>>4,r[n++]=u<<4|m>>>2,r[n++]=m<<6|p,a|=l&de,a|=u&de,a|=m&de,a|=p&de;if(s<i-1&&(l=this._decodeChar(t.charCodeAt(s)),u=this._decodeChar(t.charCodeAt(s+1)),r[n++]=l<<2|u>>>4,a|=l&de,a|=u&de),s<i-2&&(m=this._decodeChar(t.charCodeAt(s+2)),r[n++]=u<<4|m>>>2,a|=m&de),s<i-3&&(p=this._decodeChar(t.charCodeAt(s+3)),r[n++]=m<<6|p,a|=p&de),a!==0)throw new Error("Base64Coder: incorrect characters for decoding");return r},e.prototype._encodeByte=function(t){var o=t;return o+=65,o+=25-t>>>8&6,o+=51-t>>>8&-75,o+=61-t>>>8&-15,o+=62-t>>>8&3,String.fromCharCode(o)},e.prototype._decodeChar=function(t){var o=de;return o+=(42-t&t-44)>>>8&-de+t-43+62,o+=(46-t&t-48)>>>8&-de+t-47+63,o+=(47-t&t-58)>>>8&-de+t-48+52,o+=(64-t&t-91)>>>8&-de+t-65+0,o+=(96-t&t-123)>>>8&-de+t-97+26,o},e.prototype._getPaddingLength=function(t){var o=0;if(this._paddingCharacter){for(var i=t.length-1;i>=0&&t[i]===this._paddingCharacter;i--)o++;if(t.length<4||o>2)throw new Error("Base64Coder: incorrect padding")}return o},e})();je.Coder=pr;var po=new pr;function nf(e){return po.encode(e)}je.encode=nf;function sf(e){return po.decode(e)}je.decode=sf;var ls=(function(e){rf(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t.prototype._encodeByte=function(o){var i=o;return i+=65,i+=25-o>>>8&6,i+=51-o>>>8&-75,i+=61-o>>>8&-13,i+=62-o>>>8&49,String.fromCharCode(i)},t.prototype._decodeChar=function(o){var i=de;return i+=(44-o&o-46)>>>8&-de+o-45+62,i+=(94-o&o-96)>>>8&-de+o-95+63,i+=(47-o&o-58)>>>8&-de+o-48+52,i+=(64-o&o-91)>>>8&-de+o-65+0,i+=(96-o&o-123)>>>8&-de+o-97+26,i},t})(pr);je.URLSafeCoder=ls;var cs=new ls;function af(e){return cs.encode(e)}je.encodeURLSafe=af;function lf(e){return cs.decode(e)}je.decodeURLSafe=lf;je.encodedLength=function(e){return po.encodedLength(e)};je.maxDecodedLength=function(e){return po.maxDecodedLength(e)};je.decodedLength=function(e){return po.decodedLength(e)}});var ms=Re((us,Mo)=>{(function(e,t){var o={};t(o);var i=o.default;for(var r in o)i[r]=o[r];typeof Mo=="object"&&typeof Mo.exports=="object"?Mo.exports=i:typeof define=="function"&&define.amd?define(function(){return i}):e.sha256=i})(us,function(e){"use strict";e.__esModule=!0,e.digestLength=32,e.blockSize=64;var t=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]);function o(p,f,y,A,b){for(var x,U,v,S,K,O,$,Q,P,q,we,re,vt;b>=64;){for(x=f[0],U=f[1],v=f[2],S=f[3],K=f[4],O=f[5],$=f[6],Q=f[7],q=0;q<16;q++)we=A+q*4,p[q]=(y[we]&255)<<24|(y[we+1]&255)<<16|(y[we+2]&255)<<8|y[we+3]&255;for(q=16;q<64;q++)P=p[q-2],re=(P>>>17|P<<15)^(P>>>19|P<<13)^P>>>10,P=p[q-15],vt=(P>>>7|P<<25)^(P>>>18|P<<14)^P>>>3,p[q]=(re+p[q-7]|0)+(vt+p[q-16]|0);for(q=0;q<64;q++)re=(((K>>>6|K<<26)^(K>>>11|K<<21)^(K>>>25|K<<7))+(K&O^~K&$)|0)+(Q+(t[q]+p[q]|0)|0)|0,vt=((x>>>2|x<<30)^(x>>>13|x<<19)^(x>>>22|x<<10))+(x&U^x&v^U&v)|0,Q=$,$=O,O=K,K=S+re|0,S=v,v=U,U=x,x=re+vt|0;f[0]+=x,f[1]+=U,f[2]+=v,f[3]+=S,f[4]+=K,f[5]+=O,f[6]+=$,f[7]+=Q,A+=64,b-=64}return A}var i=(function(){function p(){this.digestLength=e.digestLength,this.blockSize=e.blockSize,this.state=new Int32Array(8),this.temp=new Int32Array(64),this.buffer=new Uint8Array(128),this.bufferLength=0,this.bytesHashed=0,this.finished=!1,this.reset()}return p.prototype.reset=function(){return this.state[0]=1779033703,this.state[1]=3144134277,this.state[2]=1013904242,this.state[3]=2773480762,this.state[4]=1359893119,this.state[5]=2600822924,this.state[6]=528734635,this.state[7]=1541459225,this.bufferLength=0,this.bytesHashed=0,this.finished=!1,this},p.prototype.clean=function(){for(var f=0;f<this.buffer.length;f++)this.buffer[f]=0;for(var f=0;f<this.temp.length;f++)this.temp[f]=0;this.reset()},p.prototype.update=function(f,y){if(y===void 0&&(y=f.length),this.finished)throw new Error("SHA256: can't update because hash was finished.");var A=0;if(this.bytesHashed+=y,this.bufferLength>0){for(;this.bufferLength<64&&y>0;)this.buffer[this.bufferLength++]=f[A++],y--;this.bufferLength===64&&(o(this.temp,this.state,this.buffer,0,64),this.bufferLength=0)}for(y>=64&&(A=o(this.temp,this.state,f,A,y),y%=64);y>0;)this.buffer[this.bufferLength++]=f[A++],y--;return this},p.prototype.finish=function(f){if(!this.finished){var y=this.bytesHashed,A=this.bufferLength,b=y/536870912|0,x=y<<3,U=y%64<56?64:128;this.buffer[A]=128;for(var v=A+1;v<U-8;v++)this.buffer[v]=0;this.buffer[U-8]=b>>>24&255,this.buffer[U-7]=b>>>16&255,this.buffer[U-6]=b>>>8&255,this.buffer[U-5]=b>>>0&255,this.buffer[U-4]=x>>>24&255,this.buffer[U-3]=x>>>16&255,this.buffer[U-2]=x>>>8&255,this.buffer[U-1]=x>>>0&255,o(this.temp,this.state,this.buffer,0,U),this.finished=!0}for(var v=0;v<8;v++)f[v*4+0]=this.state[v]>>>24&255,f[v*4+1]=this.state[v]>>>16&255,f[v*4+2]=this.state[v]>>>8&255,f[v*4+3]=this.state[v]>>>0&255;return this},p.prototype.digest=function(){var f=new Uint8Array(this.digestLength);return this.finish(f),f},p.prototype._saveState=function(f){for(var y=0;y<this.state.length;y++)f[y]=this.state[y]},p.prototype._restoreState=function(f,y){for(var A=0;A<this.state.length;A++)this.state[A]=f[A];this.bytesHashed=y,this.finished=!1,this.bufferLength=0},p})();e.Hash=i;var r=(function(){function p(f){this.inner=new i,this.outer=new i,this.blockSize=this.inner.blockSize,this.digestLength=this.inner.digestLength;var y=new Uint8Array(this.blockSize);if(f.length>this.blockSize)new i().update(f).finish(y).clean();else for(var A=0;A<f.length;A++)y[A]=f[A];for(var A=0;A<y.length;A++)y[A]^=54;this.inner.update(y);for(var A=0;A<y.length;A++)y[A]^=106;this.outer.update(y),this.istate=new Uint32Array(8),this.ostate=new Uint32Array(8),this.inner._saveState(this.istate),this.outer._saveState(this.ostate);for(var A=0;A<y.length;A++)y[A]=0}return p.prototype.reset=function(){return this.inner._restoreState(this.istate,this.inner.blockSize),this.outer._restoreState(this.ostate,this.outer.blockSize),this},p.prototype.clean=function(){for(var f=0;f<this.istate.length;f++)this.ostate[f]=this.istate[f]=0;this.inner.clean(),this.outer.clean()},p.prototype.update=function(f){return this.inner.update(f),this},p.prototype.finish=function(f){return this.outer.finished?this.outer.finish(f):(this.inner.finish(f),this.outer.update(f,this.digestLength).finish(f)),this},p.prototype.digest=function(){var f=new Uint8Array(this.digestLength);return this.finish(f),f},p})();e.HMAC=r;function n(p){var f=new i().update(p),y=f.digest();return f.clean(),y}e.hash=n,e.default=n;function s(p,f){var y=new r(p).update(f),A=y.digest();return y.clean(),A}e.hmac=s;function a(p,f,y,A){var b=A[0];if(b===0)throw new Error("hkdf: cannot expand more");f.reset(),b>1&&f.update(p),y&&f.update(y),f.update(A),f.finish(p),A[0]++}var l=new Uint8Array(e.digestLength);function u(p,f,y,A){f===void 0&&(f=l),A===void 0&&(A=32);for(var b=new Uint8Array([1]),x=s(f,p),U=new r(x),v=new Uint8Array(U.digestLength),S=v.length,K=new Uint8Array(A),O=0;O<A;O++)S===v.length&&(a(v,U,y,b),S=0),K[O]=v[S++];return U.clean(),v.fill(0),b.fill(0),K}e.hkdf=u;function m(p,f,y,A){for(var b=new r(p),x=b.digestLength,U=new Uint8Array(4),v=new Uint8Array(x),S=new Uint8Array(x),K=new Uint8Array(A),O=0;O*x<A;O++){var $=O+1;U[0]=$>>>24&255,U[1]=$>>>16&255,U[2]=$>>>8&255,U[3]=$>>>0&255,b.reset(),b.update(f),b.update(U),b.finish(S);for(var Q=0;Q<x;Q++)v[Q]=S[Q];for(var Q=2;Q<=y;Q++){b.reset(),b.update(S).finish(S);for(var P=0;P<x;P++)v[P]^=S[P]}for(var Q=0;Q<x&&O*x+Q<A;Q++)K[O*x+Q]=v[Q]}for(var O=0;O<x;O++)v[O]=S[O]=0;for(var O=0;O<4;O++)U[O]=0;return b.clean(),K}e.pbkdf2=m})});var fs=Re(fr=>{"use strict";Object.defineProperty(fr,"__esModule",{value:!0});fr.timingSafeEqual=cf;function ps(e,t=""){if(!e)throw new Error(t)}function cf(e,t){if(e.byteLength!==t.byteLength)return!1;e instanceof DataView||(e=new DataView(ArrayBuffer.isView(e)?e.buffer:e)),t instanceof DataView||(t=new DataView(ArrayBuffer.isView(t)?t.buffer:t)),ps(e instanceof DataView),ps(t instanceof DataView);let o=e.byteLength,i=0,r=-1;for(;++r<o;)i|=e.getUint8(r)^t.getUint8(r);return i===0}});var As=Re(Pt=>{"use strict";Object.defineProperty(Pt,"__esModule",{value:!0});Pt.Webhook=Pt.WebhookVerificationError=void 0;var hs=ds(),df=ms(),uf=fs(),gs=300,hr=class e extends Error{constructor(t){super(t),Object.setPrototypeOf(this,e.prototype),this.name="ExtendableError",this.stack=new Error(t).stack}},pt=class e extends hr{constructor(t){super(t),Object.setPrototypeOf(this,e.prototype),this.name="WebhookVerificationError"}};Pt.WebhookVerificationError=pt;var qo=class e{constructor(t,o){if(o?.format==="raw")t instanceof Uint8Array?this.key=t:this.key=Uint8Array.from(t,i=>i.charCodeAt(0));else{if(typeof t!="string")throw new Error("Expected secret to be of type string");t.startsWith(e.prefix)&&(t=t.substring(e.prefix.length)),this.key=hs.decode(t)}if(this.key.length===0)throw new Error("Secret can't be empty.")}verify(t,o,i){var r;let n=(r=i?.jsonParse)!==null&&r!==void 0?r:!0,s={};for(let b of Object.keys(o))s[b.toLowerCase()]=o[b];let a=s["webhook-id"],l=s["webhook-signature"],u=s["webhook-timestamp"];if(!l||!a||!u)throw new pt("Missing required headers");let m=this.verifyTimestamp(u),f=this.sign(a,m,t).split(",")[1],y=l.split(" "),A=new globalThis.TextEncoder;for(let b of y){let[x,U]=b.split(",");if(x==="v1"&&(0,uf.timingSafeEqual)(A.encode(U),A.encode(f))){let v=t.toString();return v===""?void 0:n?JSON.parse(v):void 0}}throw new pt("No matching signature found")}sign(t,o,i){if(typeof i!="string")if(i.constructor.name==="Buffer")i=i.toString();else throw new Error("Expected payload to be of type string or Buffer.");let r=new TextEncoder,n=Math.floor(o.getTime()/1e3),s=r.encode(`${t}.${n}.${i}`);return`v1,${hs.encode(df.hmac(this.key,s))}`}verifyTimestamp(t){let o=Math.floor(Date.now()/1e3),i=parseInt(t,10);if(Number.isNaN(i))throw new pt("Invalid Signature Headers");if(o-i>gs)throw new pt("Message timestamp too old");if(i>o+gs)throw new pt("Message timestamp too new");return new Date(i*1e3)}};Pt.Webhook=qo;qo.prefix="whsec_"});var Wo,Ts=Ae(()=>{"use strict";Wo=class extends Error{constructor(t){super(`Credentials file is corrupted or contains invalid JSON: ${t}
|
|
28
28
|
The file has been preserved for manual inspection.
|
|
29
|
-
To fix: either repair the JSON manually, or delete the file and run: resend login`),this.name="CorruptedCredentialsError"}}});var Ar={};io(Ar,{FileBackend:()=>gr});var gr,br=Ae(()=>{"use strict";be();gr=class{name="plaintext file";isSecure=!1;async get(t,o){let i=Se();if(!i)return null;let r=i.profiles[o];return(r?.type==="api_key"?r.api_key:null)??null}async set(t,o,i){yr(i,o)}async delete(t,o){try{return Os(o),!0}catch{return!1}}async isAvailable(){return!0}}});var
|
|
29
|
+
To fix: either repair the JSON manually, or delete the file and run: resend login`),this.name="CorruptedCredentialsError"}}});var Ar={};io(Ar,{FileBackend:()=>gr});var gr,br=Ae(()=>{"use strict";be();gr=class{name="plaintext file";isSecure=!1;async get(t,o){let i=Se();if(!i)return null;let r=i.profiles[o];return(r?.type==="api_key"?r.api_key:null)??null}async set(t,o,i){yr(i,o)}async delete(t,o){try{return Os(o),!0}catch{return!1}}async isAvailable(){return!0}}});var Bs={};io(Bs,{MacOSBackend:()=>xr});function Cr(e,t){return new Promise(o=>{(0,Es.execFile)(e,t,{timeout:5e3},(i,r,n)=>{let s=i&&"code"in i?i.code:0;o({stdout:r??"",stderr:n??"",code:s})})})}var Es,xr,Is=Ae(()=>{"use strict";Es=require("node:child_process");xr=class{name="macOS Keychain";isSecure=!0;async get(t,o){let{stdout:i,stderr:r,code:n}=await Cr("/usr/bin/security",["find-generic-password","-s",t,"-a",o,"-w"]);if(n===44)return null;if(n!==0)throw new Error(`Failed to read from macOS Keychain (exit code ${n}): ${r.trim()}`);return i.trim()||null}async set(t,o,i){let{code:r,stderr:n}=await Cr("/usr/bin/security",["add-generic-password","-s",t,"-a",o,"-w",i,"-U"]);if(r!==0)throw new Error(`Failed to store credential in macOS Keychain: ${n.trim()}`)}async delete(t,o){let{code:i}=await Cr("/usr/bin/security",["delete-generic-password","-s",t,"-a",o]);return i===0}async isAvailable(){return process.platform==="darwin"}}});var js={};io(js,{LinuxBackend:()=>wr});function Jo(e,t,o){return new Promise(i=>{(0,Vo.execFile)(e,t,{timeout:o?.timeout??5e3},(r,n,s)=>{let a=r&&"code"in r?r.code:0;i({stdout:n??"",stderr:s??"",code:a})})})}function oh(e,t,o){return new Promise(i=>{let r=(0,Vo.spawn)(e,t,{stdio:["pipe","ignore","pipe"],timeout:5e3}),n="";r.stderr?.on("data",s=>{n+=s.toString()}),r.on("close",s=>{i({code:s,stderr:n})}),r.on("error",()=>{i({code:1,stderr:"Failed to spawn process"})}),r.stdin?.on("error",()=>{}),r.stdin?.write(o),r.stdin?.end()})}var Vo,wr,Ps=Ae(()=>{"use strict";Vo=require("node:child_process");wr=class{name="Secret Service (libsecret)";isSecure=!0;async get(t,o){let{stdout:i,code:r}=await Jo("secret-tool",["lookup","service",t,"account",o]);return r!==0||!i.trim()?null:i.trim()}async set(t,o,i){let{code:r,stderr:n}=await oh("secret-tool",["store",`--label=Resend CLI (${o})`,"service",t,"account",o],i);if(r!==0)throw new Error(`Failed to store credential in Secret Service: ${n.trim()}`)}async delete(t,o){let{code:i}=await Jo("secret-tool",["clear","service",t,"account",o]);return i===0}async isAvailable(){if(process.platform!=="linux"||(await Jo("which",["secret-tool"])).code!==0)return!1;let o=await Jo("secret-tool",["lookup","service","__resend_cli_probe__"],{timeout:3e3});return o.code===0||o.code===1}}});var $s={};io($s,{WindowsBackend:()=>Ur});function zo(e){return new Promise(t=>{(0,Yo.execFile)("powershell.exe",["-NoProfile","-NonInteractive","-Command",e],{timeout:1e4},(o,i,r)=>{let n=o&&"code"in o?o.code:0;t({stdout:i??"",stderr:r??"",code:n})})})}function ih(e,t){return new Promise(o=>{let i=(0,Yo.spawn)("powershell.exe",["-NoProfile","-NonInteractive","-Command",e],{stdio:["pipe","pipe","pipe"],timeout:1e4}),r="",n="";i.stdout?.on("data",s=>{r+=s.toString()}),i.stderr?.on("data",s=>{n+=s.toString()}),i.on("close",s=>{o({stdout:r,stderr:n,code:s})}),i.on("error",()=>{o({stdout:"",stderr:"Failed to spawn process",code:1})}),i.stdin?.on("error",()=>{}),i.stdin?.write(t),i.stdin?.end()})}function ft(e){return e.replace(/'/g,"''")}var Yo,ho,Ur,Gs=Ae(()=>{"use strict";Yo=require("node:child_process");ho=`
|
|
30
30
|
try { $null = [Windows.Security.Credentials.PasswordVault] } catch {
|
|
31
31
|
[void][Windows.Security.Credentials.PasswordVault,Windows.Security.Credentials,ContentType=WindowsRuntime]
|
|
32
32
|
}
|
|
@@ -58,7 +58,7 @@ To fix: either repair the JSON manually, or delete the file and run: resend logi
|
|
|
58
58
|
} catch {
|
|
59
59
|
exit 1
|
|
60
60
|
}
|
|
61
|
-
`,{code:r}=await zo(i);return r===0}async isAvailable(){if(process.platform!=="win32")return!1;let{code:t}=await zo(`${ho} $null = New-Object Windows.Security.Credentials.PasswordVault`);return t===0}}});async function rt(){if(et)return et;let e=process.env.RESEND_CREDENTIAL_STORE;if(e==="file"){let{FileBackend:o}=await Promise.resolve().then(()=>(br(),Ar));return et=new o,et}if(e==="secure_storage"){let o=await Hs();if(o)return et=o,et}if(!e){let o=await Hs();if(o)return et=o,et}let{FileBackend:t}=await Promise.resolve().then(()=>(br(),Ar));return et=new t,et}async function Hs(){if(process.platform==="darwin"){let{MacOSBackend:e}=await Promise.resolve().then(()=>(Bs(),Es)),t=new e;if(await t.isAvailable())return t}else if(process.platform==="linux"){let{LinuxBackend:e}=await Promise.resolve().then(()=>(Ps(),js)),t=new e;if(await t.isAvailable())return t}else if(process.platform==="win32"){let{WindowsBackend:e}=await Promise.resolve().then(()=>(Gs(),$s)),t=new e;if(await t.isAvailable())return t}return null}var ze,et,vr=Ae(()=>{"use strict";ze="resend-cli",et=null});function nt(e,t){(0,Ke.mkdirSync)((0,Ms.dirname)(e),{recursive:!0});let o=sh(e);try{let i=t();return i instanceof Promise?i.finally(()=>Sr(e,o)):(Sr(e,o),i)}catch(i){throw Sr(e,o),i}}var Ns,Ke,Ms,rh,nh,Qs,sh,Sr,ah,lh,qs=Ae(()=>{"use strict";Ns=require("node:crypto"),Ke=require("node:fs"),Ms=require("node:path"),rh=1e4,nh=50,Qs=200;sh=e=>{let t=(0,Ns.randomUUID)();for(let o=0;o<Qs;o++)try{let i=(0,Ke.openSync)(e,"wx");try{(0,Ke.writeSync)(i,t)}finally{(0,Ke.closeSync)(i)}return t}catch(i){if(i.code!=="EEXIST")throw i;if(ah(e)){try{(0,Ke.unlinkSync)(e)}catch{}continue}lh(nh)}throw new Error(`Could not acquire lock on ${e} after ${Qs} retries. If no other resend process is running, delete the lock file manually.`)},Sr=(e,t)=>{try{if((0,Ke.readFileSync)(e,"utf-8")!==t)return;(0,Ke.unlinkSync)(e)}catch{}},ah=e=>{try{let t=(0,Ke.statSync)(e);return Date.now()-t.mtimeMs>rh}catch{return!0}},lh=e=>{Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,e)}});var Ls,Ws=Ae(()=>{"use strict";Ls="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAASABIAAD/4QCARXhpZgAATU0AKgAAAAgABAEaAAUAAAABAAAAPgEbAAUAAAABAAAARgEoAAMAAAABAAIAAIdpAAQAAAABAAAATgAAAAAAAABIAAAAAQAAAEgAAAABAAOgAQADAAAAAQABAACgAgAEAAAAAQAABkCgAwAEAAAAAQAAA4QAAAAA/+0AOFBob3Rvc2hvcCAzLjAAOEJJTQQEAAAAAAAAOEJJTQQlAAAAAAAQ1B2M2Y8AsgTpgAmY7PhCfv/AABEIA4QGQAMBIgACEQEDEQH/xAAfAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgv/xAC1EAACAQMDAgQDBQUEBAAAAX0BAgMABBEFEiExQQYTUWEHInEUMoGRoQgjQrHBFVLR8CQzYnKCCQoWFxgZGiUmJygpKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4eLj5OXm5+jp6vHy8/T19vf4+fr/xAAfAQADAQEBAQEBAQEBAAAAAAAAAQIDBAUGBwgJCgv/xAC1EQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T19vf4+fr/2wBDAAQEBAQEBAYEBAYJBgYGCQwJCQkJDA8MDAwMDA8SDw8PDw8PEhISEhISEhIVFRUVFRUZGRkZGRwcHBwcHBwcHBz/2wBDAQQFBQcHBwwHBwwdFBAUHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR3/3QAEAGT/2gAMAwEAAhEDEQA/APgDrRRRQAUUUUAFFFFABRRRQAUUUUAFFH0ooAKKKKACiiigAooooAKKKOKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo+tFABRRRQAUUUUAFFFFABRRRQAUuaSigB1FIDRQAtFFFABRSUtABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUtFACUUUYoAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACikpaACiiigAooooAKKKKACkNLSUAdx4RvyDJp7n1dPb+8K9DXDgHGK8Ltbh7W4juI/vIciva7C6S7giuYj8sg70AaCgA1fifjBqkPpirEfHOc0AaqHIGTUwwapxEDk1aUjpQA888VGyg1IKUrkZ70AUJI+M4yaoyRe1bDLgVVdCRnrigDAljP+elUZYh909jXQSR9ttUpY++OvrQBgyRkt6/3arPERnAyPStmSJckY6/0qkynseaAMto153dPU1WyQTnuP0rRZCDt2ZOOtViGIHOeeKAKmD9cjqf89aRVBAJPT1qfaVBzgnqfxqJlbBI45oAjIyCMZNIcjoAakYHHXAHrSAEDHY96AGfwjGN1BOF9/wDPSk4Y7BwemaU4IyBQAq5IIzgj06UdOQBgcE035QpDd+1KoABbGc/yoAcuBntnrSguDzwB+IoG4qdoGP50u4gbeqk5xjmgB44I5yCOKmUu3zE44/Oq67Tn3/SpApABycmgC5vPBXGferyZAyOp555rLRuxzkVfidCATwelAGtEQDnoa0IpDt9zxWJGctuB+X1rRikAGQe9AG5FhR/StCM5H4Vi27jdn061pRNgCgC+DxS5PX8KjU9KmH+RQAnWoyPepgOPftTducE0AVWGRVd17VdK4bHpUEg5z+NAGTJH7YxVN1U579+a1nTPHv1qpKmRtPTvQBiuCQT3qm0UgG485rWkj5Jx+AqpImMnkZ/zxQBjyRsxJC5PUCq5YADI49e+a0WHl/OevOKqzKMZ45xj15oArFU64P1FNT72R9eOtPY7TuXIx2prZYnJ5U0AOKjAC+nU05N3IPPvUQ3BgR0xUsbYz/CfegBMhcP/ABKcdOpqQAH5gOR+XFIoYAlz2pNpHLE/SgBmfmLHgN/SlIIx/tc04fMfmzn9KVsYK425x60AQ4Kn5RnFMKggDJweh61NgEYJwMenWm4Xop6GgCLC5GOvYYpACucfkP6U9hk7lwMHFKTtyFPB6d6AIthJx3/SmHcpBGOetTZUhTyMdff/APXTSvpx6YoAibJXOc+gqPGe/PSpThl3KMD3prcjJGPSgCEjHFRsOan47j8aaR04zQBVYCoWHWrjCoWWgCmwqBhVxhUDCgCsRTCKnYVGRQBAajIqYimGgCOm080ygBKOKWm0Af/Q+AKKKKACiiigAoo9qKACiiigAooooAKKKKACiiigAooooAKKKKACij3ooAKKOtFABRRRQAdaKKKACiiigAooooAKKKKACiijpQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAC0lFFABRR1ooAKKKOlABRRRQAUtJRQA6im5paAFooooAKKSigBaKKKAClpKWgBKKKKACiiigAooooAWkoooAKKKKAClpKKACiiigAooNFAC0lFFABRSUtABRRRQAUUUUAFFFFABRRSUALRSUUALRRRQAUUlFAC0UlLQAUUUlAC0UlFAC0UUlABXoHg/UvkbTpGwVJZM9weorz81asbprK7iuV58tgSPUdxQB73GVIHOD6VYAw1Z1ncpcRJNGflcBl+hrSX34oAsqeatIapoCO1WEOKALg5p2Mc1Ep/WpM/5NAAR+lQuo9KnOM0FeOlAGfIp7DNUpYjkk8jFbDLuHpVWROKAMOSI9SMj6VTljXJ7DPWtuRfYVQkjxkcc0AYzxkH6dCe9U5IumenXp0radFA9wapTRAHb1z3oAySoPUd8YqJwqAJnGetaTxHG3uOM9/aqkkRZjx+HvQBVKg4JPHYetRn5s46Gp8hdylcgcj/Co3UHGBx6UAREKPuDvQQ5Y449acwOOOnakPX5hhemM0AMGRj1P50DODu4NKVY4XOPQ0bT07j1oAXJ4AGQP0pwK5yQMDoaiGBznnP4U4qyt0yR60AOyM/Kc59KkGRnHBHX2qE4U8e1TZy2aAJxjO5WyTjipgcDA5U9cVWTczdADn5TU+WR8sck9u1AF+IovGOTyG7Vei6Lt59qyYXZRgnHYetXYGYdeOwH0oA24WG4dvatSGQKcdc9awYm98e/1rTickLgcj3oA242HGeABVoVmxMD8uevetBOf8aAJOaPX3pQKUCgCE8Hjk1ER7VaI70w8/0oAoOmc47VTkjG08ZFaTAnPaq8i9QeBQBjyqR15NUZhgDjI9K2ZE5x+tUXUL8nv1oAyZULFh90Y6+9UjHy2SOB37VrSICPbNZ8kaqoIA7jOKAM9wdxy2T+vvVdjlgw/hxV10BbBbG45BqBwu35FA5xQBEcn5c8N0/p+dBx0yST2x0pSFOE3c44pArKcMckjg+uKAJDt5LHPp+HtSox+bIzmkTaygd26f8A16BlsEZwD16UASYUkEAk+p4pj/PluoXpTyq7uMnuOaAGKncMUANbGxcLgjv6UzBY8D73P5VIRgYHfqKQ7jgkAMPXtQAw7QWA+UnnPWmlgwwvygdafkKuCee+aQLtGM4LdjQBETuxwSBUZEmQB1HBFWCAqsRnPbjAOKiGDwWwD3oAibaenrSkY64IqV1UtwMEdaYVBHI+nrQBCRxn72KaylcYHBqYhfpimthhk8dqAK7DJz0qEjJq1sPAP4UwgZIA5oApslV2TvV5gemKhZcUAUWWoSKuMtQEUAVStRlasEVERQBARTalIqMjFADKaRT6bQB//9H4AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAFpKKKAFpKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAWkoooAKKKKACiiigAooooAKKKKACiiigAopaSgAoopfegBKKKKACiiigAooooAKKO1FABQKKKAFpabTqACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigApKWigAooooASlxRRQB6H4N1IvG+nyHmP5k+h6j8DXo0bZXJ4HrXz/Z3UlldR3UX3oznHqO4/GvdbG5jureK5i5WRQ350Aay46A8+tTr6VXTGOepqdTjpQBZXqKlBBzVdWJ61MDQBKDnNLgmmjFLzmgBCO4qJlzkfjU+abtJ6mgDPZCBzyaqPHz0rWdetVZF4NAGM8fB6VSkQAccitkoAKrSpzuwDigDHeIL1AyPTv8AjVB4wxPGD1yOorZdC33OAKrNGP4sc96AMZ41yVJyTyMe1V2bBOeeMZrTkjVc5BJHaq0itwMcDt/WgCkVy2MDtwP88Uxhzzgj19asOgyWVSajIXqOB3z3oAh+QnDH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EEc5FRYJXp+tAEZXGUx9D/8AWp4wRzyAaTAQnHTFKCvIboBmgCRfu4HGev0qUdOpOO3oKhJ2Y7ZqXblffj8aALm8BR6+h6Yq/GQQTkE9Dn0rNjHGcEY7VdiZd4z+nagDUhY5AznGckelaKMcDnDVjxnAwf0rQVgyjPCigDWjPIBPIrThfjJ/GsRGA49uvar0bY5JoA21w2PyNOxjiqkL55Herq4IyaAIytRkfSrBHpUZAoApOmefSqzLxn07VoMODUDqMGgDJcFevNVJVwQ3PPpWoyY4AqnIpz1x60AZcq4JwOD+dVHCl+mcVqOScjGPeqkig9AOaAMt0U/e+XGenrVTZgjnGB07GtPALemOKqSJxxxjuep9qAM50DNhlJ/HFMAXaMc/j0q06jkL0PHPaq+3Dc8Y49h9aAIwPl5Xvk1NtBKyA/j6UxioGOpzkEdPekPJLcHv7UASof7+DuPbtUzIxyynHbFRIAVXb1BOf/rVIhBIUg7s9e3NAEvO4g8HHH0pVLkbW5zTT0YDHp1p6nCjnGOuev4e1ADCu44k4Ge3elYFQNwIOcUikrgAjKn/AD0p3GCuD/hQA3BxgEEE4yetRklMnsc1LgZy3I7496G2+3y9j3oAjKr1Y1GAB3xj/IqZlHBIyDx8tMIRs7icEYHegCDaQxYcZ7f59ajYHJ+XmrEg24Vj/wDrpmBt6YwecmgCtsDMexHIxTSEByT3696s/NuKr1I9qjYZXK447HrQBWI47A/41Ey/5/wqzg9WGTUZ78fQelAFJl9arsnWr5Xiq7IaAM91qsy1pMlVXWgD/9X4EooooAKOtFFABRRRQAUUUUAFJS0lABRRRQAUUUUAFFFJQAtJS0lABS0UZoASiiigAooooAKKWigBKWiigAooooASloooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAEpaKKACiiigAoopKAFoozSUAHWiiigAooooAKKKWgBKKKKAFpKKKADrRRRQAUUUUAFFHSigAooooAKKKKACiiigAooooAKKKKACiijrQAUUUUAFFFHSgAooo96ACiiigBaSiigAooooAKKKKACiiigAooooAKKPaigAooooAKKKKACiiigAooooAWikooAKKKKACiiigApaSigApaKSgAooooAKKKKACiiigAooooAKKKKALmn302nXcV3AcNG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PA+tLhs45UjkZPFMRlJKrnJOTg1Mqrkq3CgcZ68UAKCQevTGB60Fwr7Tyx6UikSFWU89cHtS7kfLDJI6CgBWIxtKgMelRyDpt5X3qY8rknB4GKbkcKv3TxQBGfm5AyCe1RkgfKDnvk1OqkjJBGfWkCsq7GIHcY/WgCAjKkL379qjIVVIb5c4XPXip8ZOw9u4qFtwJ2jAPNADHAVcN0H6/jUJToe/T/8AVVgKG6kZA49qZ23IcNQBW5wARz/Wo9uRluntxVplIQSckNx+NQMpZgSeD0NAFZlYfKBkDvUDr9488dKvsuSB7Z+tVCoHOPXigD//1/gWkpaKAEooooAKKKKAEpaKKAEpaKKAEopfpSUAFFFFABRRS0AJRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUtFACUUUUAFFFFABRRRQAUUUUAFLRRQAUYopfegBKSlooASiiigAooooAKKKKACiiigAooooAKSlooASilooASilpKAClopKACiiigAopaSgAooooAKKKKACiiigAooo+tABRRR1oAKKKKACiiigApaSigAooooAKKWkoAKKKKACiiigApaSigApaSigAooooAKKKWgApKWkoAKKKKADpRRS0AJRRRQAUUUUAFFFFABRRS0AJS0nSigAooooAKKKKACiiigAopaSgAooooAWk96WigaCikpaQBRSUtMLB0rt/BviAabObG5P7ic/KT/C3+BriKSgR9SxPuAOetWh2xXm/gvxD/AGhD9gunzcQrxn+JB/Ud69FU5HvQBMKUc00HJpRxzQA/FGKAeKKAG4pDkU+koAjI9abwalIz1qNulAELKOuKiI9eRVhhz71EVxz7UAQN1GO9V2BB9AatEKevUc49KiIPPf1+lAFcoOo/GoCoUjBxj171aK4HUfSoGAOMDOKAKzjgjv69qrvGMceuKtsv3sHOfyqJlTPT8qAKbKD16rnA9arOpRCQMjuKvEEHsSe57VCysQMfXp1oAz3TYMnoeKgbDkccjt7VfZfkP+eag2ZAPRjxigCkdueRye/t6VGy7m4GAO3pVtlO35sA5prBi2Tyo9O9AFXk8Hj09qkUEruHQcYpNhYHHUHkd6BkEEHGP1oAnBOevB44q3GemCDWdkFsHjPp2qzGxUjPegDbhkxwPTg1pQkFcDg+tY0T9WPFacDcg+tAGuo4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sA4yPyxUqs5zlQDnGBQBKqkgbjnjrTRuALL34weelJ8+WwBxjBx2p6gFckdetADMbcyEcjgj1pD8nGMjGckilXCrgcjufSl2qrEYzk0Af//W+DKKWjmgBKKWigBuKTFOooAbRS4pKACiiigBKKWkoASloxRQAlFLS0AJRS0YoAbRS0UAJRS0UAJRilooASilooASilooASilooAKSlooASjmlooASilooASilooASilpKACiiloASilooASiiloASjrS0UAJRS0UAJRRS0AJRS0daAEopaSgA9qKKKACiiigApKWigBKSnUUAJRRS0ANopaMUAJRS9KKAEo60tJQAUUUUAFFFLQAlFLRQAlFHSigAooooAKTmlooASilpKAEpaMUUAFJS0UAJ7UUtJQAUUUUAFFFFABR70UUAFFFFABR0oooAOlFFFABRR1ooAKKKKACiiloASilpKACiiigA96KWigBKKKKACiiigAopaSgAooooAKKKKAEpaKKACiiigA96KKKACiiigBKWiigAooooASilo+lACUUtFABTqbS0AFdx4T8Xz6E4tLg+ZZO2SO8ZPUr7eoriKOlAz62s72G7hSeCRZI2GVZeQa0CM4r5o8K+K5/D0xjkBltJCNyd1P95f6jvX0Npuo22o20d3aOJIpBuBH+e1AGjim0/gjigjvQIixjgUwr6VNj86QgUAVGGeKgdeOuR71eK46ComTIoAolRzu7DFQOgz/OrpXH4VEUz93gd6AKDJg5J5qJgWxxzVt1MnXqOlR9AMfjQBRZcnBz7motoY7RxVuROvrUJQbsNxQBXKbWyOo6HrmoSASeOcVYZSvA6E0wqwGFFAFbBBx6j8qikJwOOnOPWrLKxIGRkDmoWyATwCKAISBvDcgY/nTJODhMKp74z+FSsCo+Y578U0KQdpI29KAGMqjOzc3brT93yLvB+lN2lDwcAHjHSgDGW7D0oAtLhOQCQa04WYbeaxQS2CpzitGOUg5PI96AOntpFCj0zzW9G5bnPFchbTkEMcYxXQ2sgZQSODQBqcEc1GVHapV5GKUqPSgCmwA6jtVZgACKvsMCq5XmgCiUAztFWoJNvHbvTWFRAlDxQBqMAfmHSoCNwp8MvmAA96cVKGgDPkUEn1rOljBOD26VsSA8kAD0qjIjA89RQBjuhC4zmqrgEA4JJrUdMnHT1qhKuOc89qAKRQsD27E+lVmXgH7xPNXZORyBgDHtVZgd248cde1AFOQDZyvTkAVBIDsPUZq4RtOFP3utRMmPlHQ9KAKBHAzxgdv600K24c9e1WmXGdxwPbpUDgZJHynGMf1oAh6bhUYXaNhOccipWCupAx83PXoBTNoGAQcL0/GgAKsEAICk5zipQYwFY9uKiGQx3HBpPl6EY9M9qAJkUvwzEH09qlUjJJ6E44/SqvIOe46/41OFIHXvQBOpjDDcTk96RdqksCSfTNIuQgfOQTSludpxn35oAlP3hk4x1HpSNlVJfuaUkgfKCc9cdaGYlSoXI6jH8uaAP//X+DqKdSUAJRS0lACYpMU6igBpopaSgBKSnUUANopaKAEooxRigAopcUlAAKKKKACiiigANJS0UAJRS0UAJRS0UAGKKKKACkpaKACkpaKAEopaSgAopaKAEopaKAEopaKAEopaKAEopaKAEooooAKWikoAWkpaKAEopaKAEopaSgApKdRQA2ilooASiiigAooooAKKKKACiiigAooooASilooASilooASiiigAooooAKKWkoAKSlooASloooASilpKACiiigAooooAKKKKACkxS0UAJiilooASilooAbS0tFACUUtFACdaKWigBKKWkoAOtFFFACUUUUAFLSUtABRRRQAUlFLQAUUUUAFJS0UAFFJS0AFFFFACUUtFACUUUUAFFFLQAfWij60UAJRRRQAUUdKOlABRRS0AJRRRQAUUUUAFFFH1oAKWkpaBoSloooAWul8O+J7/AMPzjymL2zNmSE9D2yPQ1zVJQB9YaRq9nq9ot5ZSCRD1HdT3BHY1tAivk/RNdv8AQroXFm2VJ+eMn5XHuPX0NfRXh/xFY69bCa0JDjG+M/eQ+h9vegDpiPWkxSg07HpQIiIzURU1axmmEUAUmQ1EVJY56HtV0qfyqFo8HI60AZ7j0HHaoWTJOec1oFcZ9KgcEnjjPagCiUJ4xu+tV2BwSR+dXSpzgHj1qFgDnHegCi6nGeq0wjHtVxwc4A+WoWUnG0cUAUsMM89P1qPaBk8HNWGTIODkVGVIHB56igCswGNuOveogNg+XqOtWmRcdc571ER8xPc8UAQtkjJOFHI/rTCDuGOBzkf0qU8AYB460MA2Q2QRQAwMynIOBx06Af8A1+lTxsB2JqAkKBjknn/61SLnJTPJ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AUZoooAPaiiigBKWiigBPaloooASilooASiloxQAlFLSUAFFLSUAFFFFACUU6koASloooASjilooASilpKACilooASiiigAooooAKKKKACkpaKAExS0UUAFJzS0UAFNp2KSgBKWlooASiiigBMUmMU6igBlLRikoAKKKWgBKKKKACiikoAWiiigAooooAKKWigBKKWkoAKKKKACiiigAooooAKKWkoAKKKKACiiigAooooAKOlFFABRRRQAUmaWk60AFFFFABRRRQAUUUUAHSur8N+L9T8OSbIT51qxy0Lnj6qf4TXK0mKAPrTw94j07xBafaLKTkffjPDofcenuOK6MN+NfGFreXNjcJdWkrQyocq6nBFe8+FPiRZ3+yz1oi2ujwJekTn8fun68fSgD1cimlBSrKHH+H86f2oArMmagaPjmtDFRMlAGWyADHrVZk7GtZ48iq7RnGT0H50AZTRnA31WdBk8dK15Iy3HB7mqkoxnjg9qAMl1wc+vAzUDoVUkcjr71qMueew6Zqq6uWJboaAKBBAyBzUOFA9cd6vmNck9/Sq7oQu44x2oArFQwUjjHrTGVQcrnOMH0/CrIBHJHY800jo2Puj+dACRkDMYPbIq3HJgkk5AqmG2naM8+tTg8qo5xQB0FvPswSeT1rpLaTcuO+K4mGQhhj8a37K4B2j86AOmxkComFLC4IweakYdiKAKrCoyARVplHWoiOOlAFVlzyeKiIweBmrRGTUTJzkcZoAFOD04psi4yR9KIyVba3IqU4xigDNdOvrjpWc6smcdDyfWtxwOp6ms+WM5YnoPTvQBjvH3xx6DrVRgQAT0PatOVWBGM4PeqbxqAR156+lAFBxwGA6Y6dqhcMrZA6GrjjBK9OAfYmoHUAAdaAKTL0255GTVd3OCv8XUZ9KuMMBec1Cyx4wRuB7UAQOAWUEn14+neoCA2QF4Hf0q26N0Qj2zUD7QMAH6CgCqhZQV6Z6Go929WOOc4J9ce1Wij4weDTNwOMjkZyaAIBvBGBnjkUmTtAP4VMVBIwRn1pgUkg5wPSgD/1Ph2kNPxSEUANopaKAI8UlSUmKAGUlPxSYoAZRTsUlACYpMU/FIeaAGYop1JQA00U7FFADaSnYooATFJTqSgBMUUtFACUUuKKAEooxS4oASiil5oASkp1JQAlLRR9aAEopaKAExQaWigBtFL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UmKfSUANxQadSYoAZijFOpQKAGYpKkxSYoAbikxTqSgBKKdijFADMU3FSYoxQBFijFPIoxQAzFIRT8UYoAjxRin4ooAZRTsUYoAbijFP6UlADcUuKWjFADcUY5p1LQAyinYooASiloxQA2kxUlJigBlFOxRigBtFOxRQA2kxinGigBuKKdikxQAlGKWkoAKSlooAbRRRQAUdKKKAEopaKAG4pMU+koAbikp9JQA2jFOoxQAzFFOoxQA2ilxRQAlFLijFADaKWigBKWiigBKMUtFACUUtFADaKdik7UAJRS0YoASilxRQAlFLRQAlFFFABSUtFACUU6koATFFLRQAmKSnUUAJikp1FADcUU6koASilooATFFLRQA3FFLijigBKKKKACijrRQAlFLRQAUlLRQA2inUlACYop1JigBKKKKACg4paSgBmKKf1phoASloooAKKKWgBKKKKACiiigBKKWjFABSUtJQAUUUUAFFFFABRRRQAUUUUAJRS0UANpaKKACiiigAooooAKKKO1ACUtFJQAUUUUALRRSUDQtJS0UAJmjFFFABSUtJQMKKKKBWClVipBBwRzSZooEeseGPidfWLR2eu5ubYYXzQP3qgcc/3gPzr32w1O11C3S7s5Vngfo6nI+nsfY818VVsaNrup6DcfadNmMZP3kPKP7Mvf8An70DPs8ENyKUjivNPC3xC0zXNlrcf6JebeVc/K+OuxvX2PP1r0lZAwz/AJ+tADWTIqs8e1cDsP51fIHak2KcgigRjSQ5HPQiqbRAjB9a3mjJ4PeqckfHyjBoAw5I2Pztkc9KhYFMs3f0/pWu8POfWqrRAAFs+1AECbSQe1attIwI5wKyvLYMCcVZjJBI64oA6eKQkfN09Kkx3rLgk6c8Vqqdy9c0AIeeajK5qUccdqAKAK7dKaw44qcqKYVz2oAgAJBOOlQyISDU5UoSM9TSuNw/CgDGkQEnPSqMo2+tbTqw6DOazpVwxGD+NAGUQCfm6mqbpxgckYFakiDsDwapyRqQM9aAM9ggOw5weuagZf4RggVbbcvXnPWo3H94/hQBWZQoOzjB5qAgNz35qyyMBkjI9qgkwI8LwRzmgD//0fjQim4qbHFRkUARmm4qQikoAjwaSpDSYoAZimmn4pOtADMUYp9N4oASkxT6SgBmKXFOxRQA3FGKWigBuKQin4oxQAwC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FABRRRQAlFBooASlopaAENJS0lAB0ooooAM0UlFAC0UUUAFJRRQAlJTqTHpQA2iiigAopaSgAo60UUAFJS0hoATvS0lFABR0paSgAziikpaACiiigA96KKKACiiigBKKWkoAWikpaAEoNFLQAlJS80lABS0lFABRRRQAUUlLQAUUUUAFNp1JQAUtNooAWkpaSgBKKKKAF5opKKAClpKKAFo6UUUAdT4Z8X6t4Yn3Wb+ZA334HJKH3Ho3uK+mvC3jPSfFFsDaN5VwgzJA5+dfcf3l9x+OK+O/pU9vcz2k6XNtI0UsZyrqcEH6igD7vVlbkdqkAU4rwzwd8U4LkJYeImEE/AScDCP2+f8Aun36fSvbYJ1kCtkENyCO4oAcyc00Ag1Y600gUAAwwwai5Vtv61MOlNdQ68dRQAo5oxioA5HB696nHIoAqHKNuP3WNIwyDVpk3qV79RVUMW68N3FAFKZRnjpisyaPGTnqK2p0zgVQkUEH8hQBjSq351RlUnGep/i9a1JV+b2I5qkyPj2PX/61AH//1fkoimVMRUZFAEZFMNS0wigCI03FSkU3FAEZphqSmkUAMNNxUhpuKAG0hp2KCKAI8UuKXFFACUUUUAJTadRQA2l4opKAFxSUuKKAG0lOooAaabT8UlADaKdSYoAbRTsUYoAZ9KTFSdKQigBtFLRigBtFLSYoAKWkooAKSnUUANopaSgApKd1ooAbRS0UAJRilpaAG4pMU6igBlLS02gAopaSgBKKdSUAJSfWlooASk60vvRigBO9FGKKAEoxS0UAIabTqTFADTS4pcCjFADaSlIpaAG0UtJQAUh9qWigBtJTqKAEooo5oAT2o4paSgApKKXpQA2kp2KKAEpKdSUAJSY5pTRQAlHSlpMUAFJS0UAJRR1ooASilooASilooASkpaKAEpaKKACko60tACUUUtADTRS4oxQA2ilooASkpaSgAopaKAEpKcaSgBKKKKACiiigApKWkoAKKKKACkoooAKSlooAKKKSgAopetFACUtFJQAhptOooASkpaSgAo+lFFABSGlpKADiiiigApKKWgBKBRRQAUUtFABSUtJ70AFFHvRQAlFLSUAFFFFAC0UUUAJRS0lABSUtJQAUUdaKACiiigAooooAKSlooASiiigBKXNJRQAlFLSUAFFLSUAFFLRQAlGaKKACiiloAOle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RkVPioyKYiLFMNSkU00AR4pKdTTQA2ilooATFNxUlIetAEdFOIpKAEpKdSUANxS0tJQAlNp9JQA3HNJipO1NoAYRSU+koAbilo9qWgBppKfikNADaKWjFADc0UtFACUUUUAJRRRigBMUlOxSUAJijFOpKAEpDTsUmKAE6UUfWloASilooASkNLSUAJRQeKWgBKTpS0lABSUtFADaWlpKACijvRQAmKTFO+tBoAZS0Uc0AIKMUtJ7UAJikp1JigBKKWkoASjrS0UANxSYp1JQAlFLikoASiiigBPpRRRQAlJT6TFADaSnd6OKAEooooASjFFFACUmKWigBKSlpKACkoooAWkpaSgAooooADRRSUAFFLSUAFFLiigBMUlLRQAlJS0lMAooopAFJS0UANo4paSgAooooASkp1JQAUlFFABRS0lABSGlpKAEoopaAEopaKAEooooAKKKKAEoopaAEpKdikNACUUtHSgBKQilooAZRTjSUAJRRijtQAlKKKKACiiigAooooAKKKKACiiigApKWkoAKSlooASloooASilptAC0lFFABRRRQAGiiigANJS0UAJRS0UAJRRS0AJRRRQAmKKWkoAKKKKACiiigAooooASilpKACkpaKAEooo+tABSikpaAHo7RsHRirKcgjggjuK9+8C/FLf5Oj+JXw5IWO7JwD6CT0/3vz9a+f6KAPvnKyDae/IqtG7RSbG9eDXzT4D+JNzoTrpetO8+nNhUc5Z4Pp3K+o7dvSvpOKa31K0jurKVZopV3RuhyCPUfyNAFqUBgsvcdRVZl9DzU8EhYeW3UfezUagqzIw4HYUAf//R72OfOAKupJXJRXYbHzce1bENxwCT16UAbyvmpQ1Zkcucc1aV/egDP1/w/pPibTn0vWIBNDJ0I4ZG7MrdiK+RPGvgTVvBl0DKGudPmJEN0Bx/uvj7rfXrX2gGFMura01C0lsL+Jbi2nXbJG/KsPQ0Dufn4cYGKjNetfED4X3PhUS61pDtd6WWLOhH7y3BPHT7ye/UV5MGVl3Kcg96AIzTTTzTTQIZikp9JigCOilNFACUlLiigBtIadSYoAbijFOoNADKKdSYoAbiinYpKAG0lOpKAExTcU+mmgBKMUtJQAUlLSUAJij6UtFADaMUtFACUlLRQA2loooASkp1JQAUlKaMUANopxpKAEpcUUdaAG0U7rSUAJSUuKQ0AFJS0UANoxS0UANop1HFADaSnUGgBtLRRQAU2looASloooAQ0lLRQA0UYpaKAG0U6koASkpaKAEpKWigBKDS0lACUlOptACEUUtBoASiiigBKSlpaAGmkpaKAENJTqbQAtNp1JQAlJTqSgBtFLSUAFFAooASiiigApKWigAoxRRQACiikoAKKKKAE70UUUAJRS0lACUtFFACUUtJQAlFBooADSUtFACUUUUAJRRRQAUlLSGgA6UUUUAHWiiigBKKKKAFpKKOKACig0UAFFJRQAUn1paSgAopKWgApCKWigBtFKabQAtJRRQAUUUUAFFFJQAtFFFABRRRQAlFLSGgAooooAKPeik+tAC0UlLQA2lopKACiiigAooooAKKKKACkpaKAEooxRQAUtJS0AFJRRQAlLRRQAlFFFABRRRQAUUUGgBKKKKAEooooAKWkooAWlpKKRQo4rv/AAT47vvCd0InzcadIf3sGeV9Xj5wG9ex79jXAA0tAj7j0/UrLWrCPVdKlE0Mg6j+RHUMO4NXnbIWUcdiBXxz4U8W6n4UvfPtGL28h/fQE/JIP6MOx/pX1do+uabr2njVNLcy274VlPDIw6qw7Efr1pgf/9JsU/Hy9Dz6fnW1b3JCpuK4PQ9yK4aObCghwx3ck9/atmG4A6EYbpigDuILoHg8fWtFJc9x9K46G54AznGa2ILjAXPegDo1epwwzzzWVHPuAx3q0su7nNAF9gsgYOodHGGVgCCPQg9a+cviN8J5Imk1/wAHW+5MFrizTsepeIfzUfhX0Osn41OrbTkdaAPzvVwwyKQ19UfED4T2utLPrXhlFt9SOXktxxHcHuR2Rz+R78818syxywTSW9xG0UsTFHjcYZWHBBB6EUAMooooAaab3p5pKAG0UpFJQAGm06jFACYpKWigBtFLiigBtIadSUANxSU6koAbRSmkoASkp30ooAbijFLiigBvU0UuKMUANxS4pcUUAMpDT6SgBtFLRigBtFFLigBKKXFJQAlFLRQAlFFFACUlOoxQA2kp9JQA2g8U6koAbRilpDQAneilpKAEopaKACm06jpQA2ilpKAEpaKWgBtJS0UAJRilooAbikp5ptACUhpaKAEooooASil96SgBKKWigBppKd70fWgBnNFOpKAEoNLSUABoo70UANNJTqKAG0UtJQAUlFFACdqSlooASkpaSgAooooABRRRQAUUUfSgBKSlooAKKSigBOKKKWgBKSlooASiiigApKKKACkxRS0AFNpaSgBaSiigBKKWigBKKKDQAUfSikoAWkpaSgBDRRiigAooooASloooASiiigApOtLSUAFFFFABRRRQAU3FLS0AN6UlONNoAKKKKACiiigAooooAKKKKACkpaSgAooooAKKKKACikooASilo96AEooooAKKKKAEpaKKACkpaSgApaKSgAoopaACkpfrSGgBDS0UUAJRS0lABRRRQAUUUUAJRRRmgBKKWkoAKWiigAoopKkoUUtJRQA6us8H+LLzwnqi3kJL28mFuIuzp/LcOoP9K5KkpiP/0+CjnkJXfgkdCPX1Na0U4XIzgDue9clFOoyF+8Tlv8+1asMxVgz9B0Pc59KAOvhnIA2nGOOP/r1qxXO35mOQOOv+FcdBPkBW57kg8D0z71rwXOFGzHPJ+tAHaR3Iznd0xWrDPkdeK4uGckDbjPqe+K2YboHpQB1ccmRnNWlc44rCinbGegrQSYEdeaANEPXnfjv4c6f4zha7t2S01ZF+Scj5ZAOiS45I7Buo+ld0rVMHoA+B9W0fU9Cv5NM1e3a2uYuWQ85B6MpHDKexFZwr7k8V+EtH8Y6f9i1RNsqcw3CY8yJvY91PdTwfavkLxV4Q1jwfffY9UTdFIT5FwnMcoHdT2Pqp5FAHMEUlONJQA2kp1FADcUlOptABikpaKAG0UuPWkoASilooASkxTqT2oAYRSGnmkIoAb1paKKAG0U6kNACUUtBoAbSYp1IaAEpMc06m0AFJS0lABSUtFADaSnUUAN9qKKMUAFFApaAEpKdSUAJRS0lACdKQ06koATFJ1paKAExSU6koASjFLRQAlGKKKAExSUtFACYpKWkoAKSg5ooAKKWkoASjFLSUAJRS0YoAb0oxTvek5oAb1opaKAExSGlooAbRSmigBKSlpKAEopcUlACUUtJQAUcUUdKAG0UtJQAntRRRQAlJS0UAJ2pKdTTQAlFLRQAlFFFABS0lKaAEpKXFFACUUvWkoAKSlpKADFJS0lABSUUUAFJS0lABSUtFACUe9LR1oASiikoAWkooNABSUUUAJRS0UAJRS0hoAWkopKACiijtQAlLRRQAUlLRQAnFJTqbQAUUUUAFFFFACUtJS0AFIRS0lADaKXFJQAUUUUAFFFJQAtFFFABSUtFACUUUUAFFFFABRRRQAUUUUAJSUtFACYooooAKKKKACiiigBKWkpaAEpetJS0AFFFFACUUUlABRRRQAUUUUAFFFFABSYpaTNABRS0UAJRRRQAUUUUrDuFFFFFguLSUUlFguf/U8dhlGSQN2O44xV6KRVITAAI5z29xWJvwQqkgAEHPv296uREfKw5UjBzQB0ELKpJDYK9B2/ya07aYFdmOhz14rmYZQybTwR1JrSjmAUquQD938P6UAdPBPnLbuPrW1b3KsRg8dvwrkbebBLfKAfT29q04J8OCGxjk0AdlDc5ZcEjPWteK4AwCOfWuLt7nsRyoxn0z6Vr29z0+bdt65oA66OYGritmubhnzitaGXpQBpg1S1fSNM1/TZdJ1eET203UHhlI6Mp6hh2IqdWqUNQB8hePPhrqXg8nULVmvdKY/wCux88XtKBwPZhx64rzPOa/QwhJEaKVVkjkBVkYBlYHqCDwRXzV8RPhJLp7Sa54RhaazPzTWa5Z4feMclk9uq9uOiGeFUlIOaXtTAKbTqKBDKKWkOKBiUUdaSgBaSlpDQIKKSlzQA00cUuKSgBBSU6igBtFLR0oASkxRS0AJSEU6koAbikpxpCKAG0UuKMYoAbRS0EUAJRS9qSgBMUhp2KTFACUUtFACUUUGgBKKKKAE6UUtFACUlLSYoADSUpoxQA2ilxSUAFJilpKACiiigBtLiil7UAMPtSU40YoASilxSUAJSU6igBtFLRQAneiiigBMUlOpKAG4opaKAG0UuKKAEpKXHFFACUlLRQA2ilNAoASiikNACUUUYoASkp3NJQAlFLSYoASkp1J9KAEooooASilpKADFFFJQAfSilpKACkpaKAE7UlFFABRRSUAFFFFACUUUUAFFFFACUUUUwEope1JSAKTFLRQA2ilpKACiiimAUYopKQBSU6koASlpKKACiiigAooooASkp1JQAlFLQaAEooooAKSlooAbRS0lABR1oooASilpKACiiigAooooAKKKKAEopaSgBaSlpKACiiigBKWiigBKSnUlABSUtJQAUUUc0AFFFFACUooooAKKKSgBaKSloAKSlpKAEopcUlAC0lFLQAntRRRQAUlLSUAFLRSUAFFFFABRRRQAUUUUAFJS0lAH//V8GSTI3EYOe3cetTq4kYqGwx9On41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U4fmgD4D13w/q/hjUpNJ1qAwzpyMcq69mRuhB/8A11lV97+IvDei+LLA6drcPmKOY5F4kib+8jdj7Hg96+PvG3gPWPBN0q3g8+xnYi3u0Hyuf7rD+F/Y9e1IZw9FFFMQlLSc0UALRSUZoAdS02igB1FJRQAtLSdDRQAtFFJQAUtJRmgBaTFFFABTaWg0AIabSmloAbSfSnZpKAEopfeigBtFKaSgBPalpOlKaAExR7UtIaAE6UhpaTFABmkpcUlACUUtJQAhpD607ikNADaKXtRQA00U6kzxQA2k6UvtSHNABSUv1pKACiiigBKKKKACkopaAG0d6U0lABSUfSj60AFJRRQAUnJpaSgBKKWkoAKSiigAptO7UnegBDwKKOtIaAFpD0paQ0AJSUtFACUnSlNJQAlFFFABSUtJQAmKKWkoASiiigBKKKKAEooooASjmiigApKWk6UALSfSiigANFGaSgAooooAKSlpKACijNIeKACikooAKKKKACkpaKAEooooASiiimAUUUUgCiiigApKKKACkpaSgAopaSgAopKKAA0lLRQAlHel96SgAooooAKKKKACiiigBKKKKACiiloASkpaSgAooooAKKKKACiiigBKSlpKACiiigAo60UlABRRRQAUUUUALRSUUALSYoooASilooAKKKKAEopaSgAooo6UAJRRRQAUUGigAoopaACm0tJQB//R+ZdzcoOMY6fzpVDcEgkiofmYjBwO/tipMuAdp3YP50ATg7iXIxkA4x1p6gHDkAA9xUXmAjcGPHf39KfzwQRnGcDpxQBMGyPl+UHPfv8AWnLtXJbJ7YqFBnnoQelTKy7+Onqe/wBaALAyjEsCuMdPSpzId+CAM/rVPO3Geh5BJ7elT7iWCgAdhQBcV8c5wKljY7s9jVRWIznmpVft37UAXwRn3qyrkAEdaz0Y9+DVhW54oAvRtircch5zWWrHpVlGNAGzHN6VejnrASQir0cnTmgDoops1qRT4rl45cd60I5gDQB1cFx2rYguRxzXHwzdMGtOCc5AoA7WKbIq6r1y9vc8cmtWK4PTNAGyGNQ3tlZarZS6bqcKXNrOMSRuMg+n4jseopI3BGasKRQB8lfEP4X3fhUyatpBa70knJyMy2+ez46p6P8AnjrXkQORkdK/RQ4YFWAZWBBBGQQeoIPUGvnf4g/B4jzdb8GQ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lJRQAUe9NozQAtLTaM0ALSUlFABR2pM0H1oAWm59aM0maACjNNzSUAOzSUlFADqSkooAM0UlFABRRSUAJRRmigApKOetFACUZopMUAHFJS0lABSUUhoAWkoooAKSiigAopKKAFpKKKACikozQAUlBpKAFpppc0hoASiikoAWkoooAKSiigApKWkoASiiigAooooAKKKTNAATSUUUAFJmijrQAUUUUAJRRRQAUUUGgApKKSgBaTpRR9aACiiigAooooAKKKKACiig0AJSUUtABSUUUAFFFFABRRiigAooooASiiigBaKKKAEpKXvSUALSUUUAFFFFABRRiigAoopKAFpKKKACkoooAKKKKACiiigAopKWgAopKWgBDS0lFAC0UUUAHtRRRQAUUUUAJRRS0AJRS0lABRRRQAUUUUAFJS0lACUUUUAFJTqbQB//0/lD2pw9abS0AOApwpuc0o96AJOO9LmmDFL04oAeKdmmCnCgB4NOBqOnigB9Lmm0vagB2aWkpaAFp1MpRQA+im0tADhS036UtADs06mZoFAD80ueaZS0ASD3pc0wHvS8UAPz60uajFPB9aAJAakU+lQg9qcGoAm3c08NVcE0/PSgCyrVMGqmp561MDgUAW1cVOjVnq2e9TqxoAvo3INWUeswOanRjxzQBqpIOlXIpRxWKr1MspB60AbySjNXkm5rAilq6kvQ0Ab8c1aUVxjFcyk/FXo5umDQB1cNxitOK4z1NclHNjFaMU54yaAOtinX1p17a2OrWMum6lCtzaTjDxvyD7j0I7EcisKK47VoRzkEYNAHzF8Qfhhe+Ef+JppjNe6O5xvx+8gJ7S4/h9H/ADryjNfoKsyvG0bgMjgqysMhgeoIPBFfO/j/AOEywiXW/B8RMY+aWwXLMo7tD3IHXZ1Hb0oA8EzRTM9vwp1AxaKSloEKDRTaWgB1FNzS5oAWgUmaSgB9JSUlADqKbmjNAC5opM0lADjSUlGaACgmm5ooAKSiigA4pKXNJQAtJRmkzQAuaTNH0pKAClpM0UAJRRSZoAKKSlzQAUn0ozSUALmm5paSgAzSZo+tJQAtJmikoAKKKQ0ALSUCigApKKKAFpKKSgA+lFFJQAGk+tFFACUUGkoAKKKSgAooooAKKKT60AGaKKKAEpKWkoAKKKKACkoooAQ0ZopKAD2paSigBc0neiigAooo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"});function Fr(e){let t=e.split(".");if(t.length!==3)throw new Error(Kr);let o;try{o=JSON.parse(Buffer.from(t[1],"base64url").toString())}catch{throw new Error(Kr)}if(typeof o!="object"||o===null||typeof o.exp!="number")throw new Error(Kr);return o.exp}function zs(e){let t=new Error("Received an unexpected response from Resend while authenticating. Please run `resend login` again.");if(typeof e!="object"||e===null)throw t;let o=e;if(typeof o.access_token!="string"||o.access_token.length===0||typeof o.refresh_token!="string"||o.refresh_token.length===0||typeof o.scope!="string")throw t;return o}async function Ys(e,t,o){try{return await fetch(e,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json"},body:t,signal:AbortSignal.timeout(ch)})}catch(i){let r=i instanceof Error&&i.name==="TimeoutError"?`${o} timed out after 30s. Check your connection and try again.`:"Could not reach the Resend API. Check your connection and try again.",n=new Error(r);throw n.name=Rr,n}}async function Xs(e,t){let o=Math.floor(Date.now()/1e3);if(e.access_token_expires_at>o+dh)return{access_token:e.access_token,scope:e.scope};let i=process.env.RESEND_BASE_URL??"https://api.resend.com",r=await Ys(`${i}/oauth/token`,new URLSearchParams({grant_type:"refresh_token",client_id:Xo,refresh_token:e.refresh_token}),"Token refresh");if(!r.ok)throw new Error(`Token refresh failed (${r.status}). Please run \`resend login\` again.`);let n=zs(await r.json());return await ei({access_token:n.access_token,access_token_expires_at:Fr(n.access_token),refresh_token:n.refresh_token,scope:n.scope},t),{access_token:n.access_token,scope:n.scope}}function kr(e){return e.toString("base64url")}function Js(e){let{heading:t,message:o}=e;return`<!doctype html>
|
|
61
|
+
`,{code:r}=await zo(i);return r===0}async isAvailable(){if(process.platform!=="win32")return!1;let{code:t}=await zo(`${ho} $null = New-Object Windows.Security.Credentials.PasswordVault`);return t===0}}});async function rt(){if(et)return et;let e=process.env.RESEND_CREDENTIAL_STORE;if(e==="file"){let{FileBackend:o}=await Promise.resolve().then(()=>(br(),Ar));return et=new o,et}if(e==="secure_storage"){let o=await Hs();if(o)return et=o,et}if(!e){let o=await Hs();if(o)return et=o,et}let{FileBackend:t}=await Promise.resolve().then(()=>(br(),Ar));return et=new t,et}async function Hs(){if(process.platform==="darwin"){let{MacOSBackend:e}=await Promise.resolve().then(()=>(Is(),Bs)),t=new e;if(await t.isAvailable())return t}else if(process.platform==="linux"){let{LinuxBackend:e}=await Promise.resolve().then(()=>(Ps(),js)),t=new e;if(await t.isAvailable())return t}else if(process.platform==="win32"){let{WindowsBackend:e}=await Promise.resolve().then(()=>(Gs(),$s)),t=new e;if(await t.isAvailable())return t}return null}var ze,et,vr=Ae(()=>{"use strict";ze="resend-cli",et=null});function nt(e,t){(0,Ke.mkdirSync)((0,Ms.dirname)(e),{recursive:!0});let o=sh(e);try{let i=t();return i instanceof Promise?i.finally(()=>Sr(e,o)):(Sr(e,o),i)}catch(i){throw Sr(e,o),i}}var Ns,Ke,Ms,rh,nh,Qs,sh,Sr,ah,lh,qs=Ae(()=>{"use strict";Ns=require("node:crypto"),Ke=require("node:fs"),Ms=require("node:path"),rh=1e4,nh=50,Qs=200;sh=e=>{let t=(0,Ns.randomUUID)();for(let o=0;o<Qs;o++)try{let i=(0,Ke.openSync)(e,"wx");try{(0,Ke.writeSync)(i,t)}finally{(0,Ke.closeSync)(i)}return t}catch(i){if(i.code!=="EEXIST")throw i;if(ah(e)){try{(0,Ke.unlinkSync)(e)}catch{}continue}lh(nh)}throw new Error(`Could not acquire lock on ${e} after ${Qs} retries. If no other resend process is running, delete the lock file manually.`)},Sr=(e,t)=>{try{if((0,Ke.readFileSync)(e,"utf-8")!==t)return;(0,Ke.unlinkSync)(e)}catch{}},ah=e=>{try{let t=(0,Ke.statSync)(e);return Date.now()-t.mtimeMs>rh}catch{return!0}},lh=e=>{Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,e)}});var Ls,Ws=Ae(()=>{"use strict";Ls="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAASABIAAD/4QCARXhpZgAATU0AKgAAAAgABAEaAAUAAAABAAAAPgEbAAUAAAABAAAARgEoAAMAAAABAAIAAIdpAAQAAAABAAAATgAAAAAAAABIAAAAAQAAAEgAAAABAAOgAQADAAAAAQABAACgAgAEAAAAAQAABkCgAwAEAAAAAQAAA4QAAAAA/+0AOFBob3Rvc2hvcCAzLjAAOEJJTQQEAAAAAAAAOEJJTQQlAAAAAAAQ1B2M2Y8AsgTpgAmY7PhCfv/AABEIA4QGQAMBIgACEQEDEQH/xAAfAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgv/xAC1EAACAQMDAgQDBQUEBAAAAX0BAgMABBEFEiExQQYTUWEHInEUMoGRoQgjQrHBFVLR8CQzYnKCCQoWFxgZGiUmJygpKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4eLj5OXm5+jp6vHy8/T19vf4+fr/xAAfAQADAQEBAQEBAQEBAAAAAAAAAQIDBAUGBwgJCgv/xAC1EQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T19vf4+fr/2wBDAAQEBAQEBAYEBAYJBgYGCQwJCQkJDA8MDAwMDA8SDw8PDw8PEhISEhISEhIVFRUVFRUZGRkZGRwcHBwcHBwcHBz/2wBDAQQFBQcHBwwHBwwdFBAUHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR3/3QAEAGT/2gAMAwEAAhEDEQA/APgDrRRRQAUUUUAFFFFABRRRQAUUUUAFFH0ooAKKKKACiiigAooooAKKKOKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo+tFABRRRQAUUUUAFFFFABRRRQAUuaSigB1FIDRQAtFFFABRSUtABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUtFACUUUYoAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACikpaACiiigAooooAKKKKACkNLSUAdx4RvyDJp7n1dPb+8K9DXDgHGK8Ltbh7W4juI/vIciva7C6S7giuYj8sg70AaCgA1fifjBqkPpirEfHOc0AaqHIGTUwwapxEDk1aUjpQA888VGyg1IKUrkZ70AUJI+M4yaoyRe1bDLgVVdCRnrigDAljP+elUZYh909jXQSR9ttUpY++OvrQBgyRkt6/3arPERnAyPStmSJckY6/0qkynseaAMto153dPU1WyQTnuP0rRZCDt2ZOOtViGIHOeeKAKmD9cjqf89aRVBAJPT1qfaVBzgnqfxqJlbBI45oAjIyCMZNIcjoAakYHHXAHrSAEDHY96AGfwjGN1BOF9/wDPSk4Y7BwemaU4IyBQAq5IIzgj06UdOQBgcE035QpDd+1KoABbGc/yoAcuBntnrSguDzwB+IoG4qdoGP50u4gbeqk5xjmgB44I5yCOKmUu3zE44/Oq67Tn3/SpApABycmgC5vPBXGferyZAyOp555rLRuxzkVfidCATwelAGtEQDnoa0IpDt9zxWJGctuB+X1rRikAGQe9AG5FhR/StCM5H4Vi27jdn061pRNgCgC+DxS5PX8KjU9KmH+RQAnWoyPepgOPftTducE0AVWGRVd17VdK4bHpUEg5z+NAGTJH7YxVN1U579+a1nTPHv1qpKmRtPTvQBiuCQT3qm0UgG485rWkj5Jx+AqpImMnkZ/zxQBjyRsxJC5PUCq5YADI49e+a0WHl/OevOKqzKMZ45xj15oArFU64P1FNT72R9eOtPY7TuXIx2prZYnJ5U0AOKjAC+nU05N3IPPvUQ3BgR0xUsbYz/CfegBMhcP/ABKcdOpqQAH5gOR+XFIoYAlz2pNpHLE/SgBmfmLHgN/SlIIx/tc04fMfmzn9KVsYK425x60AQ4Kn5RnFMKggDJweh61NgEYJwMenWm4Xop6GgCLC5GOvYYpACucfkP6U9hk7lwMHFKTtyFPB6d6AIthJx3/SmHcpBGOetTZUhTyMdff/APXTSvpx6YoAibJXOc+gqPGe/PSpThl3KMD3prcjJGPSgCEjHFRsOan47j8aaR04zQBVYCoWHWrjCoWWgCmwqBhVxhUDCgCsRTCKnYVGRQBAajIqYimGgCOm080ygBKOKWm0Af/Q+AKKKKACiiigAoo9qKACiiigAooooAKKKKACiiigAooooAKKKKACij3ooAKKOtFABRRRQAdaKKKACiiigAooooAKKKKACiijpQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAC0lFFABRR1ooAKKKOlABRRRQAUtJRQA6im5paAFooooAKKSigBaKKKAClpKWgBKKKKACiiigAooooAWkoooAKKKKAClpKKACiiigAooNFAC0lFFABRSUtABRRRQAUUUUAFFFFABRRSUALRSUUALRRRQAUUlFAC0UlLQAUUUlAC0UlFAC0UUlABXoHg/UvkbTpGwVJZM9weorz81asbprK7iuV58tgSPUdxQB73GVIHOD6VYAw1Z1ncpcRJNGflcBl+hrSX34oAsqeatIapoCO1WEOKALg5p2Mc1Ep/WpM/5NAAR+lQuo9KnOM0FeOlAGfIp7DNUpYjkk8jFbDLuHpVWROKAMOSI9SMj6VTljXJ7DPWtuRfYVQkjxkcc0AYzxkH6dCe9U5IumenXp0radFA9wapTRAHb1z3oAySoPUd8YqJwqAJnGetaTxHG3uOM9/aqkkRZjx+HvQBVKg4JPHYetRn5s46Gp8hdylcgcj/Co3UHGBx6UAREKPuDvQQ5Y449acwOOOnakPX5hhemM0AMGRj1P50DODu4NKVY4XOPQ0bT07j1oAXJ4AGQP0pwK5yQMDoaiGBznnP4U4qyt0yR60AOyM/Kc59KkGRnHBHX2qE4U8e1TZy2aAJxjO5WyTjipgcDA5U9cVWTczdADn5TU+WR8sck9u1AF+IovGOTyG7Vei6Lt59qyYXZRgnHYetXYGYdeOwH0oA24WG4dvatSGQKcdc9awYm98e/1rTickLgcj3oA242HGeABVoVmxMD8uevetBOf8aAJOaPX3pQKUCgCE8Hjk1ER7VaI70w8/0oAoOmc47VTkjG08ZFaTAnPaq8i9QeBQBjyqR15NUZhgDjI9K2ZE5x+tUXUL8nv1oAyZULFh90Y6+9UjHy2SOB37VrSICPbNZ8kaqoIA7jOKAM9wdxy2T+vvVdjlgw/hxV10BbBbG45BqBwu35FA5xQBEcn5c8N0/p+dBx0yST2x0pSFOE3c44pArKcMckjg+uKAJDt5LHPp+HtSox+bIzmkTaygd26f8A16BlsEZwD16UASYUkEAk+p4pj/PluoXpTyq7uMnuOaAGKncMUANbGxcLgjv6UzBY8D73P5VIRgYHfqKQ7jgkAMPXtQAw7QWA+UnnPWmlgwwvygdafkKuCee+aQLtGM4LdjQBETuxwSBUZEmQB1HBFWCAqsRnPbjAOKiGDwWwD3oAibaenrSkY64IqV1UtwMEdaYVBHI+nrQBCRxn72KaylcYHBqYhfpimthhk8dqAK7DJz0qEjJq1sPAP4UwgZIA5oApslV2TvV5gemKhZcUAUWWoSKuMtQEUAVStRlasEVERQBARTalIqMjFADKaRT6bQB//9H4AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAFpKKKAFpKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAWkoooAKKKKACiiigAooooAKKKKACiiigAopaSgAoopfegBKKKKACiiigAooooAKKO1FABQKKKAFpabTqACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigApKWigAooooASlxRRQB6H4N1IvG+nyHmP5k+h6j8DXo0bZXJ4HrXz/Z3UlldR3UX3oznHqO4/GvdbG5jureK5i5WRQ350Aay46A8+tTr6VXTGOepqdTjpQBZXqKlBBzVdWJ61MDQBKDnNLgmmjFLzmgBCO4qJlzkfjU+abtJ6mgDPZCBzyaqPHz0rWdetVZF4NAGM8fB6VSkQAccitkoAKrSpzuwDigDHeIL1AyPTv8AjVB4wxPGD1yOorZdC33OAKrNGP4sc96AMZ41yVJyTyMe1V2bBOeeMZrTkjVc5BJHaq0itwMcDt/WgCkVy2MDtwP88Uxhzzgj19asOgyWVSajIXqOB3z3oAh+QnDH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EEc5FRYJXp+tAEZXGUx9D/8AWp4wRzyAaTAQnHTFKCvIboBmgCRfu4HGev0qUdOpOO3oKhJ2Y7ZqXblffj8aALm8BR6+h6Yq/GQQTkE9Dn0rNjHGcEY7VdiZd4z+nagDUhY5AznGckelaKMcDnDVjxnAwf0rQVgyjPCigDWjPIBPIrThfjJ/GsRGA49uvar0bY5JoA21w2PyNOxjiqkL55Herq4IyaAIytRkfSrBHpUZAoApOmefSqzLxn07VoMODUDqMGgDJcFevNVJVwQ3PPpWoyY4AqnIpz1x60AZcq4JwOD+dVHCl+mcVqOScjGPeqkig9AOaAMt0U/e+XGenrVTZgjnGB07GtPALemOKqSJxxxjuep9qAM50DNhlJ/HFMAXaMc/j0q06jkL0PHPaq+3Dc8Y49h9aAIwPl5Xvk1NtBKyA/j6UxioGOpzkEdPekPJLcHv7UASof7+DuPbtUzIxyynHbFRIAVXb1BOf/rVIhBIUg7s9e3NAEvO4g8HHH0pVLkbW5zTT0YDHp1p6nCjnGOuev4e1ADCu44k4Ge3elYFQNwIOcUikrgAjKn/AD0p3GCuD/hQA3BxgEEE4yetRklMnsc1LgZy3I7496G2+3y9j3oAjKr1Y1GAB3xj/IqZlHBIyDx8tMIRs7icEYHegCDaQxYcZ7f59ajYHJ+XmrEg24Vj/wDrpmBt6YwecmgCtsDMexHIxTSEByT3696s/NuKr1I9qjYZXK447HrQBWI47A/41Ey/5/wqzg9WGTUZ78fQelAFJl9arsnWr5Xiq7IaAM91qsy1pMlVXWgD/9X4EooooAKOtFFABRRRQAUUUUAFJS0lABRRRQAUUUUAFFFJQAtJS0lABS0UZoASiiigAooooAKKWigBKWiigAooooASloooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAEpaKKACiiigAoopKAFoozSUAHWiiigAooooAKKKWgBKKKKAFpKKKADrRRRQAUUUUAFFHSigAooooAKKKKACiiigAooooAKKKKACiijrQAUUUUAFFFHSgAooo96ACiiigBaSiigAooooAKKKKACiiigAooooAKKPaigAooooAKKKKACiiigAooooAWikooAKKKKACiiigApaSigApaKSgAooooAKKKKACiiigAooooAKKKKALmn302nXcV3AcNG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PA+tLhs45UjkZPFMRlJKrnJOTg1Mqrkq3CgcZ68UAKCQevTGB60Fwr7Tyx6UikSFWU89cHtS7kfLDJI6CgBWIxtKgMelRyDpt5X3qY8rknB4GKbkcKv3TxQBGfm5AyCe1RkgfKDnvk1OqkjJBGfWkCsq7GIHcY/WgCAjKkL379qjIVVIb5c4XPXip8ZOw9u4qFtwJ2jAPNADHAVcN0H6/jUJToe/T/8AVVgKG6kZA49qZ23IcNQBW5wARz/Wo9uRluntxVplIQSckNx+NQMpZgSeD0NAFZlYfKBkDvUDr9488dKvsuSB7Z+tVCoHOPXigD//1/gWkpaKAEooooAKKKKAEpaKKAEpaKKAEopfpSUAFFFFABRRS0AJRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUtFACUUUUAFFFFABRRRQAUUUUAFLRRQAUYopfegBKSlooASiiigAooooAKKKKACiiigAooooAKSlooASilooASilpKAClopKACiiigAopaSgAooooAKKKKACiiigAooo+tABRRR1oAKKKKACiiigApaSigAooooAKKWkoAKKKKACiiigApaSigApaSigAooooAKKKWgApKWkoAKKKKADpRRS0AJRRRQAUUUUAFFFFABRRS0AJS0nSigAooooAKKKKACiiigAopaSgAooooAWk96WigaCikpaQBRSUtMLB0rt/BviAabObG5P7ic/KT/C3+BriKSgR9SxPuAOetWh2xXm/gvxD/AGhD9gunzcQrxn+JB/Ud69FU5HvQBMKUc00HJpRxzQA/FGKAeKKAG4pDkU+koAjI9abwalIz1qNulAELKOuKiI9eRVhhz71EVxz7UAQN1GO9V2BB9AatEKevUc49KiIPPf1+lAFcoOo/GoCoUjBxj171aK4HUfSoGAOMDOKAKzjgjv69qrvGMceuKtsv3sHOfyqJlTPT8qAKbKD16rnA9arOpRCQMjuKvEEHsSe57VCysQMfXp1oAz3TYMnoeKgbDkccjt7VfZfkP+eag2ZAPRjxigCkdueRye/t6VGy7m4GAO3pVtlO35sA5prBi2Tyo9O9AFXk8Hj09qkUEruHQcYpNhYHHUHkd6BkEEHGP1oAnBOevB44q3GemCDWdkFsHjPp2qzGxUjPegDbhkxwPTg1pQkFcDg+tY0T9WPFacDcg+tAGuo4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sA4yPyxUqs5zlQDnGBQBKqkgbjnjrTRuALL34weelJ8+WwBxjBx2p6gFckdetADMbcyEcjgj1pD8nGMjGckilXCrgcjufSl2qrEYzk0Af//W+DKKWjmgBKKWigBuKTFOooAbRS4pKACiiigBKKWkoASloxRQAlFLS0AJRS0YoAbRS0UAJRS0UAJRilooASilooASilooASilooAKSlooASjmlooASilooASilooASilpKACiiloASilooASiiloASjrS0UAJRS0UAJRRS0AJRS0daAEopaSgA9qKKKACiiigApKWigBKSnUUAJRRS0ANopaMUAJRS9KKAEo60tJQAUUUUAFFFLQAlFLRQAlFHSigAooooAKTmlooASilpKAEpaMUUAFJS0UAJ7UUtJQAUUUUAFFFFABR70UUAFFFFABR0oooAOlFFFABRR1ooAKKKKACiiloASilpKACiiigA96KWigBKKKKACiiigAopaSgAooooAKKKKAEpaKKACiiigA96KKKACiiigBKWiigAooooASilo+lACUUtFABTqbS0AFdx4T8Xz6E4tLg+ZZO2SO8ZPUr7eoriKOlAz62s72G7hSeCRZI2GVZeQa0CM4r5o8K+K5/D0xjkBltJCNyd1P95f6jvX0Npuo22o20d3aOJIpBuBH+e1AGjim0/gjigjvQIixjgUwr6VNj86QgUAVGGeKgdeOuR71eK46ComTIoAolRzu7DFQOgz/OrpXH4VEUz93gd6AKDJg5J5qJgWxxzVt1MnXqOlR9AMfjQBRZcnBz7motoY7RxVuROvrUJQbsNxQBXKbWyOo6HrmoSASeOcVYZSvA6E0wqwGFFAFbBBx6j8qikJwOOnOPWrLKxIGRkDmoWyATwCKAISBvDcgY/nTJODhMKp74z+FSsCo+Y578U0KQdpI29KAGMqjOzc3brT93yLvB+lN2lDwcAHjHSgDGW7D0oAtLhOQCQa04WYbeaxQS2CpzitGOUg5PI96AOntpFCj0zzW9G5bnPFchbTkEMcYxXQ2sgZQSODQBqcEc1GVHapV5GKUqPSgCmwA6jtVZgACKvsMCq5XmgCiUAztFWoJNvHbvTWFRAlDxQBqMAfmHSoCNwp8MvmAA96cVKGgDPkUEn1rOljBOD26VsSA8kAD0qjIjA89RQBjuhC4zmqrgEA4JJrUdMnHT1qhKuOc89qAKRQsD27E+lVmXgH7xPNXZORyBgDHtVZgd248cde1AFOQDZyvTkAVBIDsPUZq4RtOFP3utRMmPlHQ9KAKBHAzxgdv600K24c9e1WmXGdxwPbpUDgZJHynGMf1oAh6bhUYXaNhOccipWCupAx83PXoBTNoGAQcL0/GgAKsEAICk5zipQYwFY9uKiGQx3HBpPl6EY9M9qAJkUvwzEH09qlUjJJ6E44/SqvIOe46/41OFIHXvQBOpjDDcTk96RdqksCSfTNIuQgfOQTSludpxn35oAlP3hk4x1HpSNlVJfuaUkgfKCc9cdaGYlSoXI6jH8uaAP//X+DqKdSUAJRS0lACYpMU6igBpopaSgBKSnUUANopaKAEooxRigAopcUlAAKKKKACiiigANJS0UAJRS0UAJRS0UAGKKKKACkpaKACkpaKAEopaSgAopaKAEopaKAEopaKAEopaKAEopaKAEooooAKWikoAWkpaKAEopaKAEopaSgApKdRQA2ilooASiiigAooooAKKKKACiiigAooooASilooASilooASiiigAooooAKKWkoAKSlooASloooASilpKACiiigAooooAKKKKACkxS0UAJiilooASilooAbS0tFACUUtFACdaKWigBKKWkoAOtFFFACUUUUAFLSUtABRRRQAUlFLQAUUUUAFJS0UAFFJS0AFFFFACUUtFACUUUUAFFFLQAfWij60UAJRRRQAUUdKOlABRRS0AJRRRQAUUUUAFFFH1oAKWkpaBoSloooAWul8O+J7/AMPzjymL2zNmSE9D2yPQ1zVJQB9YaRq9nq9ot5ZSCRD1HdT3BHY1tAivk/RNdv8AQroXFm2VJ+eMn5XHuPX0NfRXh/xFY69bCa0JDjG+M/eQ+h9vegDpiPWkxSg07HpQIiIzURU1axmmEUAUmQ1EVJY56HtV0qfyqFo8HI60AZ7j0HHaoWTJOec1oFcZ9KgcEnjjPagCiUJ4xu+tV2BwSR+dXSpzgHj1qFgDnHegCi6nGeq0wjHtVxwc4A+WoWUnG0cUAUsMM89P1qPaBk8HNWGTIODkVGVIHB56igCswGNuOveogNg+XqOtWmRcdc571ER8xPc8UAQtkjJOFHI/rTCDuGOBzkf0qU8AYB460MA2Q2QRQAwMynIOBx06Af8A1+lTxsB2JqAkKBjknn/61SLnJTPJ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AUZoooAPaiiigBKWiigBPaloooASilooASiloxQAlFLSUAFFLSUAFFFFACUU6koASloooASjilooASilpKACilooASiiigAooooAKKKKACkpaKAExS0UUAFJzS0UAFNp2KSgBKWlooASiiigBMUmMU6igBlLRikoAKKKWgBKKKKACiikoAWiiigAooooAKKWigBKKWkoAKKKKACiiigAooooAKKWkoAKKKKACiiigAooooAKOlFFABRRRQAUmaWk60AFFFFABRRRQAUUUUAHSur8N+L9T8OSbIT51qxy0Lnj6qf4TXK0mKAPrTw94j07xBafaLKTkffjPDofcenuOK6MN+NfGFreXNjcJdWkrQyocq6nBFe8+FPiRZ3+yz1oi2ujwJekTn8fun68fSgD1cimlBSrKHH+H86f2oArMmagaPjmtDFRMlAGWyADHrVZk7GtZ48iq7RnGT0H50AZTRnA31WdBk8dK15Iy3HB7mqkoxnjg9qAMl1wc+vAzUDoVUkcjr71qMueew6Zqq6uWJboaAKBBAyBzUOFA9cd6vmNck9/Sq7oQu44x2oArFQwUjjHrTGVQcrnOMH0/CrIBHJHY800jo2Puj+dACRkDMYPbIq3HJgkk5AqmG2naM8+tTg8qo5xQB0FvPswSeT1rpLaTcuO+K4mGQhhj8a37K4B2j86AOmxkComFLC4IweakYdiKAKrCoyARVplHWoiOOlAFVlzyeKiIweBmrRGTUTJzkcZoAFOD04psi4yR9KIyVba3IqU4xigDNdOvrjpWc6smcdDyfWtxwOp6ms+WM5YnoPTvQBjvH3xx6DrVRgQAT0PatOVWBGM4PeqbxqAR156+lAFBxwGA6Y6dqhcMrZA6GrjjBK9OAfYmoHUAAdaAKTL0255GTVd3OCv8XUZ9KuMMBec1Cyx4wRuB7UAQOAWUEn14+neoCA2QF4Hf0q26N0Qj2zUD7QMAH6CgCqhZQV6Z6Go929WOOc4J9ce1Wij4weDTNwOMjkZyaAIBvBGBnjkUmTtAP4VMVBIwRn1pgUkg5wPSgD/1Ph2kNPxSEUANopaKAI8UlSUmKAGUlPxSYoAZRTsUlACYpMU/FIeaAGYop1JQA00U7FFADaSnYooATFJTqSgBMUUtFACUUuKKAEooxS4oASiil5oASkp1JQAlLRR9aAEopaKAExQaWigBtFL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UmKfSUANxQadSYoAZijFOpQKAGYpKkxSYoAbikxTqSgBKKdijFADMU3FSYoxQBFijFPIoxQAzFIRT8UYoAjxRin4ooAZRTsUYoAbijFP6UlADcUuKWjFADcUY5p1LQAyinYooASiloxQA2kxUlJigBlFOxRigBtFOxRQA2kxinGigBuKKdikxQAlGKWkoAKSlooAbRRRQAUdKKKAEopaKAG4pMU+koAbikp9JQA2jFOoxQAzFFOoxQA2ilxRQAlFLijFADaKWigBKWiigBKMUtFACUUtFADaKdik7UAJRS0YoASilxRQAlFLRQAlFFFABSUtFACUU6koATFFLRQAmKSnUUAJikp1FADcUU6koASilooATFFLRQA3FFLijigBKKKKACijrRQAlFLRQAUlLRQA2inUlACYop1JigBKKKKACg4paSgBmKKf1phoASloooAKKKWgBKKKKACiiigBKKWjFABSUtJQAUUUUAFFFFABRRRQAUUUUAJRS0UANpaKKACiiigAooooAKKKO1ACUtFJQAUUUUALRRSUDQtJS0UAJmjFFFABSUtJQMKKKKBWClVipBBwRzSZooEeseGPidfWLR2eu5ubYYXzQP3qgcc/3gPzr32w1O11C3S7s5Vngfo6nI+nsfY818VVsaNrup6DcfadNmMZP3kPKP7Mvf8An70DPs8ENyKUjivNPC3xC0zXNlrcf6JebeVc/K+OuxvX2PP1r0lZAwz/AJ+tADWTIqs8e1cDsP51fIHak2KcgigRjSQ5HPQiqbRAjB9a3mjJ4PeqckfHyjBoAw5I2Pztkc9KhYFMs3f0/pWu8POfWqrRAAFs+1AECbSQe1attIwI5wKyvLYMCcVZjJBI64oA6eKQkfN09Kkx3rLgk6c8Vqqdy9c0AIeeajK5qUccdqAKAK7dKaw44qcqKYVz2oAgAJBOOlQyISDU5UoSM9TSuNw/CgDGkQEnPSqMo2+tbTqw6DOazpVwxGD+NAGUQCfm6mqbpxgckYFakiDsDwapyRqQM9aAM9ggOw5weuagZf4RggVbbcvXnPWo3H94/hQBWZQoOzjB5qAgNz35qyyMBkjI9qgkwI8LwRzmgD//0fjQim4qbHFRkUARmm4qQikoAjwaSpDSYoAZimmn4pOtADMUYp9N4oASkxT6SgBmKXFOxRQA3FGKWigBuKQin4oxQAwC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FABRRRQAlFBooASlopaAENJS0lAB0ooooAM0UlFAC0UUUAFJRRQAlJTqTHpQA2iiigAopaSgAo60UUAFJS0hoATvS0lFABR0paSgAziikpaACiiigA96KKKACiiigBKKWkoAWikpaAEoNFLQAlJS80lABS0lFABRRRQAUUlLQAUUUUAFNp1JQAUtNooAWkpaSgBKKKKAF5opKKAClpKKAFo6UUUAdT4Z8X6t4Yn3Wb+ZA334HJKH3Ho3uK+mvC3jPSfFFsDaN5VwgzJA5+dfcf3l9x+OK+O/pU9vcz2k6XNtI0UsZyrqcEH6igD7vVlbkdqkAU4rwzwd8U4LkJYeImEE/AScDCP2+f8Aun36fSvbYJ1kCtkENyCO4oAcyc00Ag1Y600gUAAwwwai5Vtv61MOlNdQ68dRQAo5oxioA5HB696nHIoAqHKNuP3WNIwyDVpk3qV79RVUMW68N3FAFKZRnjpisyaPGTnqK2p0zgVQkUEH8hQBjSq351RlUnGep/i9a1JV+b2I5qkyPj2PX/61AH//1fkoimVMRUZFAEZFMNS0wigCI03FSkU3FAEZphqSmkUAMNNxUhpuKAG0hp2KCKAI8UuKXFFACUUUUAJTadRQA2l4opKAFxSUuKKAG0lOooAaabT8UlADaKdSYoAbRTsUYoAZ9KTFSdKQigBtFLRigBtFLSYoAKWkooAKSnUUANopaSgApKd1ooAbRS0UAJRilpaAG4pMU6igBlLS02gAopaSgBKKdSUAJSfWlooASk60vvRigBO9FGKKAEoxS0UAIabTqTFADTS4pcCjFADaSlIpaAG0UtJQAUh9qWigBtJTqKAEooo5oAT2o4paSgApKKXpQA2kp2KKAEpKdSUAJSY5pTRQAlHSlpMUAFJS0UAJRR1ooASilooASilooASkpaKAEpaKKACko60tACUUUtADTRS4oxQA2ilooASkpaSgAopaKAEpKcaSgBKKKKACiiigApKWkoAKKKKACkoooAKSlooAKKKSgAopetFACUtFJQAhptOooASkpaSgAo+lFFABSGlpKADiiiigApKKWgBKBRRQAUUtFABSUtJ70AFFHvRQAlFLSUAFFFFAC0UUUAJRS0lABSUtJQAUUdaKACiiigAooooAKSlooASiiigBKXNJRQAlFLSUAFFLSUAFFLRQAlGaKKACiiloAOle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RkVPioyKYiLFMNSkU00AR4pKdTTQA2ilooATFNxUlIetAEdFOIpKAEpKdSUANxS0tJQAlNp9JQA3HNJipO1NoAYRSU+koAbilo9qWgBppKfikNADaKWjFADc0UtFACUUUUAJRRRigBMUlOxSUAJijFOpKAEpDTsUmKAE6UUfWloASilooASkNLSUAJRQeKWgBKTpS0lABSUtFADaWlpKACijvRQAmKTFO+tBoAZS0Uc0AIKMUtJ7UAJikp1JigBKKWkoASjrS0UANxSYp1JQAlFLikoASiiigBPpRRRQAlJT6TFADaSnd6OKAEooooASjFFFACUmKWigBKSlpKACkoooAWkpaSgAooooADRRSUAFFLSUAFFLiigBMUlLRQAlJS0lMAooopAFJS0UANo4paSgAooooASkp1JQAUlFFABRS0lABSGlpKAEoopaAEopaKAEooooAKKKKAEoopaAEpKdikNACUUtHSgBKQilooAZRTjSUAJRRijtQAlKKKKACiiigAooooAKKKKACiiigApKWkoAKSlooASloooASilptAC0lFFABRRRQAGiiigANJS0UAJRS0UAJRRS0AJRRRQAmKKWkoAKKKKACiiigAooooASilpKACkpaKAEooo+tABSikpaAHo7RsHRirKcgjggjuK9+8C/FLf5Oj+JXw5IWO7JwD6CT0/3vz9a+f6KAPvnKyDae/IqtG7RSbG9eDXzT4D+JNzoTrpetO8+nNhUc5Z4Pp3K+o7dvSvpOKa31K0jurKVZopV3RuhyCPUfyNAFqUBgsvcdRVZl9DzU8EhYeW3UfezUagqzIw4HYUAf//R72OfOAKupJXJRXYbHzce1bENxwCT16UAbyvmpQ1Zkcucc1aV/egDP1/w/pPibTn0vWIBNDJ0I4ZG7MrdiK+RPGvgTVvBl0DKGudPmJEN0Bx/uvj7rfXrX2gGFMura01C0lsL+Jbi2nXbJG/KsPQ0Dufn4cYGKjNetfED4X3PhUS61pDtd6WWLOhH7y3BPHT7ye/UV5MGVl3Kcg96AIzTTTzTTQIZikp9JigCOilNFACUlLiigBtIadSYoAbijFOoNADKKdSYoAbiinYpKAG0lOpKAExTcU+mmgBKMUtJQAUlLSUAJij6UtFADaMUtFACUlLRQA2loooASkp1JQAUlKaMUANopxpKAEpcUUdaAG0U7rSUAJSUuKQ0AFJS0UANoxS0UANop1HFADaSnUGgBtLRRQAU2looASloooAQ0lLRQA0UYpaKAG0U6koASkpaKAEpKWigBKDS0lACUlOptACEUUtBoASiiigBKSlpaAGmkpaKAENJTqbQAtNp1JQAlJTqSgBtFLSUAFFAooASiiigApKWigAoxRRQACiikoAKKKKAE70UUUAJRS0lACUtFFACUUtJQAlFBooADSUtFACUUUUAJRRRQAUlLSGgA6UUUUAHWiiigBKKKKAFpKKOKACig0UAFFJRQAUn1paSgAopKWgApCKWigBtFKabQAtJRRQAUUUUAFFFJQAtFFFABRRRQAlFLSGgAooooAKPeik+tAC0UlLQA2lopKACiiigAooooAKKKKACkpaKAEooxRQAUtJS0AFJRRQAlLRRQAlFFFABRRRQAUUUGgBKKKKAEooooAKWkooAWlpKKRQo4rv/AAT47vvCd0InzcadIf3sGeV9Xj5wG9ex79jXAA0tAj7j0/UrLWrCPVdKlE0Mg6j+RHUMO4NXnbIWUcdiBXxz4U8W6n4UvfPtGL28h/fQE/JIP6MOx/pX1do+uabr2njVNLcy274VlPDIw6qw7Efr1pgf/9JsU/Hy9Dz6fnW1b3JCpuK4PQ9yK4aObCghwx3ck9/atmG4A6EYbpigDuILoHg8fWtFJc9x9K46G54AznGa2ILjAXPegDo1epwwzzzWVHPuAx3q0su7nNAF9gsgYOodHGGVgCCPQg9a+cviN8J5Imk1/wAHW+5MFrizTsepeIfzUfhX0Osn41OrbTkdaAPzvVwwyKQ19UfED4T2utLPrXhlFt9SOXktxxHcHuR2Rz+R78818syxywTSW9xG0UsTFHjcYZWHBBB6EUAMooooAaab3p5pKAG0UpFJQAGm06jFACYpKWigBtFLiigBtIadSUANxSU6koAbRSmkoASkp30ooAbijFLiigBvU0UuKMUANxS4pcUUAMpDT6SgBtFLRigBtFFLigBKKXFJQAlFLRQAlFFFACUlOoxQA2kp9JQA2g8U6koAbRilpDQAneilpKAEopaKACm06jpQA2ilpKAEpaKWgBtJS0UAJRilooAbikp5ptACUhpaKAEooooASil96SgBKKWigBppKd70fWgBnNFOpKAEoNLSUABoo70UANNJTqKAG0UtJQAUlFFACdqSlooASkpaSgAooooABRRRQAUUUfSgBKSlooAKKSigBOKKKWgBKSlooASiiigApKKKACkxRS0AFNpaSgBaSiigBKKWigBKKKDQAUfSikoAWkpaSgBDRRiigAooooASloooASiiigApOtLSUAFFFFABRRRQAU3FLS0AN6UlONNoAKKKKACiiigAooooAKKKKACkpaSgAooooAKKKKACikooASilo96AEooooAKKKKAEpaKKACkpaSgApaKSgAoopaACkpfrSGgBDS0UUAJRS0lABRRRQAUUUUAJRRRmgBKKWkoAKWiigAoopKkoUUtJRQA6us8H+LLzwnqi3kJL28mFuIuzp/LcOoP9K5KkpiP/0+CjnkJXfgkdCPX1Na0U4XIzgDue9clFOoyF+8Tlv8+1asMxVgz9B0Pc59KAOvhnIA2nGOOP/r1qxXO35mOQOOv+FcdBPkBW57kg8D0z71rwXOFGzHPJ+tAHaR3Iznd0xWrDPkdeK4uGckDbjPqe+K2YboHpQB1ccmRnNWlc44rCinbGegrQSYEdeaANEPXnfjv4c6f4zha7t2S01ZF+Scj5ZAOiS45I7Buo+ld0rVMHoA+B9W0fU9Cv5NM1e3a2uYuWQ85B6MpHDKexFZwr7k8V+EtH8Y6f9i1RNsqcw3CY8yJvY91PdTwfavkLxV4Q1jwfffY9UTdFIT5FwnMcoHdT2Pqp5FAHMEUlONJQA2kp1FADcUlOptABikpaKAG0UuPWkoASilooASkxTqT2oAYRSGnmkIoAb1paKKAG0U6kNACUUtBoAbSYp1IaAEpMc06m0AFJS0lABSUtFADaSnUUAN9qKKMUAFFApaAEpKdSUAJRS0lACdKQ06koATFJ1paKAExSU6koASjFLRQAlGKKKAExSUtFACYpKWkoAKSg5ooAKKWkoASjFLSUAJRS0YoAb0oxTvek5oAb1opaKAExSGlooAbRSmigBKSlpKAEopcUlACUUtJQAUcUUdKAG0UtJQAntRRRQAlJS0UAJ2pKdTTQAlFLRQAlFFFABS0lKaAEpKXFFACUUvWkoAKSlpKADFJS0lABSUUUAFJS0lABSUtFACUe9LR1oASiikoAWkooNABSUUUAJRS0UAJRS0hoAWkopKACiijtQAlLRRQAUlLRQAnFJTqbQAUUUUAFFFFACUtJS0AFIRS0lADaKXFJQAUUUUAFFFJQAtFFFABSUtFACUUUUAFFFFABRRRQAUUUUAJSUtFACYooooAKKKKACiiigBKWkpaAEpetJS0AFFFFACUUUlABRRRQAUUUUAFFFFABSYpaTNABRS0UAJRRRQAUUUUrDuFFFFFguLSUUlFguf/U8dhlGSQN2O44xV6KRVITAAI5z29xWJvwQqkgAEHPv296uREfKw5UjBzQB0ELKpJDYK9B2/ya07aYFdmOhz14rmYZQybTwR1JrSjmAUquQD938P6UAdPBPnLbuPrW1b3KsRg8dvwrkbebBLfKAfT29q04J8OCGxjk0AdlDc5ZcEjPWteK4AwCOfWuLt7nsRyoxn0z6Vr29z0+bdt65oA66OYGritmubhnzitaGXpQBpg1S1fSNM1/TZdJ1eET203UHhlI6Mp6hh2IqdWqUNQB8hePPhrqXg8nULVmvdKY/wCux88XtKBwPZhx64rzPOa/QwhJEaKVVkjkBVkYBlYHqCDwRXzV8RPhJLp7Sa54RhaazPzTWa5Z4feMclk9uq9uOiGeFUlIOaXtTAKbTqKBDKKWkOKBiUUdaSgBaSlpDQIKKSlzQA00cUuKSgBBSU6igBtFLR0oASkxRS0AJSEU6koAbikpxpCKAG0UuKMYoAbRS0EUAJRS9qSgBMUhp2KTFACUUtFACUUUGgBKKKKAE6UUtFACUlLSYoADSUpoxQA2ilxSUAFJilpKACiiigBtLiil7UAMPtSU40YoASilxSUAJSU6igBtFLRQAneiiigBMUlOpKAG4opaKAG0UuKKAEpKXHFFACUlLRQA2ilNAoASiikNACUUUYoASkp3NJQAlFLSYoASkp1J9KAEooooASilpKADFFFJQAfSilpKACkpaKAE7UlFFABRRSUAFFFFACUUUUAFFFFACUUUUwEope1JSAKTFLRQA2ilpKACiiimAUYopKQBSU6koASlpKKACiiigAooooASkp1JQAlFLQaAEooooAKSlooAbRS0lABR1oooASilpKACiiigAooooAKKKKAEopaSgBaSlpKACiiigBKWiigBKSnUlABSUtJQAUUUc0AFFFFACUooooAKKKSgBaKSloAKSlpKAEopcUlAC0lFLQAntRRRQAUlLSUAFLRSUAFFFFABRRRQAUUUUAFJS0lAH//V8GSTI3EYOe3cetTq4kYqGwx9On41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U4fmgD4D13w/q/hjUpNJ1qAwzpyMcq69mRuhB/8A11lV97+IvDei+LLA6drcPmKOY5F4kib+8jdj7Hg96+PvG3gPWPBN0q3g8+xnYi3u0Hyuf7rD+F/Y9e1IZw9FFFMQlLSc0UALRSUZoAdS02igB1FJRQAtLSdDRQAtFFJQAUtJRmgBaTFFFABTaWg0AIabSmloAbSfSnZpKAEopfeigBtFKaSgBPalpOlKaAExR7UtIaAE6UhpaTFABmkpcUlACUUtJQAhpD607ikNADaKXtRQA00U6kzxQA2k6UvtSHNABSUv1pKACiiigBKKKKACkopaAG0d6U0lABSUfSj60AFJRRQAUnJpaSgBKKWkoAKSiigAptO7UnegBDwKKOtIaAFpD0paQ0AJSUtFACUnSlNJQAlFFFABSUtJQAmKKWkoASiiigBKKKKAEooooASjmiigApKWk6UALSfSiigANFGaSgAooooAKSlpKACijNIeKACikooAKKKKACkpaKAEooooASiiimAUUUUgCiiigApKKKACkpaSgAopaSgAopKKAA0lLRQAlHel96SgAooooAKKKKACiiigBKKKKACiiloASkpaSgAooooAKKKKACiiigBKSlpKACiiigAo60UlABRRRQAUUUUALRSUUALSYoooASilooAKKKKAEopaSgAooo6UAJRRRQAUUGigAoopaACm0tJQB//R+ZdzcoOMY6fzpVDcEgkiofmYjBwO/tipMuAdp3YP50ATg7iXIxkA4x1p6gHDkAA9xUXmAjcGPHf39KfzwQRnGcDpxQBMGyPl+UHPfv8AWnLtXJbJ7YqFBnnoQelTKy7+Onqe/wBaALAyjEsCuMdPSpzId+CAM/rVPO3Geh5BJ7elT7iWCgAdhQBcV8c5wKljY7s9jVRWIznmpVft37UAXwRn3qyrkAEdaz0Y9+DVhW54oAvRtircch5zWWrHpVlGNAGzHN6VejnrASQir0cnTmgDoops1qRT4rl45cd60I5gDQB1cFx2rYguRxzXHwzdMGtOCc5AoA7WKbIq6r1y9vc8cmtWK4PTNAGyGNQ3tlZarZS6bqcKXNrOMSRuMg+n4jseopI3BGasKRQB8lfEP4X3fhUyatpBa70knJyMy2+ez46p6P8AnjrXkQORkdK/RQ4YFWAZWBBBGQQeoIPUGvnf4g/B4jzdb8GQ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lJRQAUe9NozQAtLTaM0ALSUlFABR2pM0H1oAWm59aM0maACjNNzSUAOzSUlFADqSkooAM0UlFABRRSUAJRRmigApKOetFACUZopMUAHFJS0lABSUUhoAWkoooAKSiigAopKKAFpKKKACikozQAUlBpKAFpppc0hoASiikoAWkoooAKSiigApKWkoASiiigAooooAKKKTNAATSUUUAFJmijrQAUUUUAJRRRQAUUUGgApKKSgBaTpRR9aACiiigAooooAKKKKACiig0AJSUUtABSUUUAFFFFABRRiigAooooASiiigBaKKKAEpKXvSUALSUUUAFFFFABRRiigAoopKAFpKKKACkoooAKKKKACiiigAopKWgAopKWgBDS0lFAC0UUUAHtRRRQAUUUUAJRRS0AJRS0lABRRRQAUUUUAFJS0lACUUUUAFJTqbQB//0/lD2pw9abS0AOApwpuc0o96AJOO9LmmDFL04oAeKdmmCnCgB4NOBqOnigB9Lmm0vagB2aWkpaAFp1MpRQA+im0tADhS036UtADs06mZoFAD80ueaZS0ASD3pc0wHvS8UAPz60uajFPB9aAJAakU+lQg9qcGoAm3c08NVcE0/PSgCyrVMGqmp561MDgUAW1cVOjVnq2e9TqxoAvo3INWUeswOanRjxzQBqpIOlXIpRxWKr1MspB60AbySjNXkm5rAilq6kvQ0Ab8c1aUVxjFcyk/FXo5umDQB1cNxitOK4z1NclHNjFaMU54yaAOtinX1p17a2OrWMum6lCtzaTjDxvyD7j0I7EcisKK47VoRzkEYNAHzF8Qfhhe+Ef+JppjNe6O5xvx+8gJ7S4/h9H/ADryjNfoKsyvG0bgMjgqysMhgeoIPBFfO/j/AOEywiXW/B8RMY+aWwXLMo7tD3IHXZ1Hb0oA8EzRTM9vwp1AxaKSloEKDRTaWgB1FNzS5oAWgUmaSgB9JSUlADqKbmjNAC5opM0lADjSUlGaACgmm5ooAKSiigA4pKXNJQAtJRmkzQAuaTNH0pKAClpM0UAJRRSZoAKKSlzQAUn0ozSUALmm5paSgAzSZo+tJQAtJmikoAKKKQ0ALSUCigApKKKAFpKKSgA+lFFJQAGk+tFFACUUGkoAKKKSgAooooAKKKT60AGaKKKAEpKWkoAKKKKACkoooAQ0ZopKAD2paSigBc0neiigAooo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"});function _r(e){let t=e.split(".");if(t.length!==3)throw new Error(Kr);let o;try{o=JSON.parse(Buffer.from(t[1],"base64url").toString())}catch{throw new Error(Kr)}if(typeof o!="object"||o===null||typeof o.exp!="number")throw new Error(Kr);return o.exp}function zs(e){let t=new Error("Received an unexpected response from Resend while authenticating. Please run `resend login` again.");if(typeof e!="object"||e===null)throw t;let o=e;if(typeof o.access_token!="string"||o.access_token.length===0||typeof o.refresh_token!="string"||o.refresh_token.length===0||typeof o.scope!="string")throw t;return o}async function Ys(e,t,o){try{return await fetch(e,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json"},body:t,signal:AbortSignal.timeout(ch)})}catch(i){let r=i instanceof Error&&i.name==="TimeoutError"?`${o} timed out after 30s. Check your connection and try again.`:"Could not reach the Resend API. Check your connection and try again.",n=new Error(r);throw n.name=Fr,n}}async function Xs(e,t){let o=Math.floor(Date.now()/1e3);if(e.access_token_expires_at>o+dh)return{access_token:e.access_token,scope:e.scope};let i=process.env.RESEND_BASE_URL??"https://api.resend.com",r=await Ys(`${i}/oauth/token`,new URLSearchParams({grant_type:"refresh_token",client_id:Xo,refresh_token:e.refresh_token}),"Token refresh");if(!r.ok)throw new Error(`Token refresh failed (${r.status}). Please run \`resend login\` again.`);let n=zs(await r.json());return await ei({access_token:n.access_token,access_token_expires_at:_r(n.access_token),refresh_token:n.refresh_token,scope:n.scope},t),{access_token:n.access_token,scope:n.scope}}function kr(e){return e.toString("base64url")}function Js(e){let{heading:t,message:o}=e;return`<!doctype html>
|
|
62
62
|
<html lang="en">
|
|
63
63
|
<head>
|
|
64
64
|
<meta charset="utf-8" />
|
|
@@ -128,7 +128,7 @@ To fix: either repair the JSON manually, or delete the file and run: resend logi
|
|
|
128
128
|
<p>${o}</p>
|
|
129
129
|
</main>
|
|
130
130
|
</body>
|
|
131
|
-
</html>`}function Zs(){let e=kr((0,go.randomBytes)(64)),t=kr((0,go.createHash)("sha256").update(e).digest()),o=kr((0,go.randomBytes)(24));return{codeVerifier:e,codeChallenge:t,state:o}}function ea(){return new Promise((e,t)=>{let o,i,r=new Promise((a,l)=>{o=a,i=l}),n=(0,Vs.createServer)((a,l)=>{let u=new URL(a.url??"/","http://127.0.0.1");if(u.pathname!=="/oauth/callback"){l.writeHead(404,{Connection:"close"}),l.end();return}let m=u.searchParams.get("code"),p=u.searchParams.get("state"),f=u.searchParams.get("error"),y=f?`Authorization denied: ${f}`:!m||!p?"Missing code or state in OAuth callback":null,A=Js(y?{heading:"Authentication failed",message:`${y}. Return to your terminal and try again.`}:{heading:"Authentication complete",message:"You can close this tab and return to your terminal."});l.writeHead(200,{"Content-Type":"text/html; charset=utf-8",Connection:"close"}),l.end(A,()=>{a.socket.destroy()}),n.close(),clearTimeout(s),y?i(new Error(y)):m&&p&&o({code:m,state:p})}),s=setTimeout(()=>{n.close(),i(new Error("OAuth login timed out after 5 minutes. Please try again."))},300*1e3);n.listen(0,"127.0.0.1",()=>{let{port:a}=n.address();e({port:a,waitForCallback:r})}),n.on("error",t)})}async function ta(e){let t=await Ys(`${e.baseUrl}/oauth/token`,new URLSearchParams({grant_type:"authorization_code",client_id:e.clientId,code:e.code,redirect_uri:e.redirectUri,code_verifier:e.codeVerifier}),"Token exchange");if(!t.ok){let o="";try{let i=await t.json();o=i.error_description??i.error??""}catch{}throw new Error(`Token exchange failed (${t.status})${o?`: ${o}`:""}`)}return zs(await t.json())}var go,Vs,Xo,Kr,ch,dh,
|
|
131
|
+
</html>`}function Zs(){let e=kr((0,go.randomBytes)(64)),t=kr((0,go.createHash)("sha256").update(e).digest()),o=kr((0,go.randomBytes)(24));return{codeVerifier:e,codeChallenge:t,state:o}}function ea(){return new Promise((e,t)=>{let o,i,r=new Promise((a,l)=>{o=a,i=l}),n=(0,Vs.createServer)((a,l)=>{let u=new URL(a.url??"/","http://127.0.0.1");if(u.pathname!=="/oauth/callback"){l.writeHead(404,{Connection:"close"}),l.end();return}let m=u.searchParams.get("code"),p=u.searchParams.get("state"),f=u.searchParams.get("error"),y=f?`Authorization denied: ${f}`:!m||!p?"Missing code or state in OAuth callback":null,A=Js(y?{heading:"Authentication failed",message:`${y}. Return to your terminal and try again.`}:{heading:"Authentication complete",message:"You can close this tab and return to your terminal."});l.writeHead(200,{"Content-Type":"text/html; charset=utf-8",Connection:"close"}),l.end(A,()=>{a.socket.destroy()}),n.close(),clearTimeout(s),y?i(new Error(y)):m&&p&&o({code:m,state:p})}),s=setTimeout(()=>{n.close(),i(new Error("OAuth login timed out after 5 minutes. Please try again."))},300*1e3);n.listen(0,"127.0.0.1",()=>{let{port:a}=n.address();e({port:a,waitForCallback:r})}),n.on("error",t)})}async function ta(e){let t=await Ys(`${e.baseUrl}/oauth/token`,new URLSearchParams({grant_type:"authorization_code",client_id:e.clientId,code:e.code,redirect_uri:e.redirectUri,code_verifier:e.codeVerifier}),"Token exchange");if(!t.ok){let o="";try{let i=await t.json();o=i.error_description??i.error??""}catch{}throw new Error(`Token exchange failed (${t.status})${o?`: ${o}`:""}`)}return zs(await t.json())}var go,Vs,Xo,Kr,ch,dh,Fr,uh,Zo=Ae(()=>{"use strict";go=require("node:crypto"),Vs=require("node:http");be();Ws();Xo="7136aa0b-625c-4c9c-8820-e9784c8eb141",Kr="Received an invalid access token from Resend. Please run `resend login` to authenticate again.";ch=3e4,dh=60,Fr="OAuthNetworkError";uh=`<svg class="logo" role="img" aria-label="Resend" fill="none" viewBox="0 0 78 78" xmlns="http://www.w3.org/2000/svg">
|
|
132
132
|
<rect x="1" y="1" width="76" height="76" rx="21" stroke="#FDFDFD" stroke-opacity="0.1" stroke-width="2" />
|
|
133
133
|
<path d="M43.0184 21C49.9908 21 54.1374 25.1467 54.1374 30.6513C54.1374 36.1558 49.9908 40.3025 43.0184 40.3025H39.4953L57 57H44.6329L31.3118 44.3394C30.3578 43.4587 29.9174 42.4312 29.9174 41.5506C29.9174 40.3029 30.7984 39.202 32.4864 38.7249L39.3485 36.8897C41.954 36.1925 43.7522 34.1741 43.7522 31.5319C43.7522 28.3027 41.1098 26.4312 37.8438 26.4312H21V21H43.0184Z" fill="url(#resend_cli_logo_a)" />
|
|
134
134
|
<path d="M54.1375 30.6513C54.1374 25.1467 49.9908 21 43.0184 21V20.55C46.5934 20.55 49.4879 21.6142 51.4941 23.4275C53.4405 25.1867 54.5189 27.6229 54.5844 30.3832L54.5875 30.6513C54.5875 33.5218 53.5032 36.0591 51.4941 37.875C49.5505 39.6317 46.7734 40.6853 43.3515 40.7495L43.0184 40.7525H40.619L58.1237 57.45H44.4532L44.3231 57.3261L31.0064 44.6694C29.978 43.7199 29.4675 42.579 29.4674 41.5506C29.4674 40.0491 30.5379 38.8082 32.3643 38.292L32.37 38.2903L39.2321 36.4551C41.6742 35.8016 43.3023 33.9377 43.3023 31.5319C43.3023 30.0523 42.7022 28.9051 41.7383 28.1191C40.7652 27.3258 39.3949 26.8812 37.8438 26.8812H20.55V20.55H43.0184V21H21V26.4312H37.8438C41.1098 26.4312 43.7522 28.3027 43.7523 31.5319C43.7523 34.1741 41.954 36.1925 39.3485 36.8897L32.4865 38.7249C30.7984 39.202 29.9174 40.3029 29.9174 41.5506C29.9175 42.4312 30.3578 43.4587 31.3118 44.3393L44.633 57H57.0001L39.4953 40.3025H43.0184C49.9909 40.3025 54.1375 36.1558 54.1375 30.6513Z" fill="url(#resend_cli_logo_b)" />
|
|
@@ -142,8 +142,8 @@ To fix: either repair the JSON manually, or delete the file and run: resend logi
|
|
|
142
142
|
<stop offset="1" stop-color="#ADADAD" />
|
|
143
143
|
</linearGradient>
|
|
144
144
|
</defs>
|
|
145
|
-
</svg>`});var oa,ke,ia,ra,mh,na=Ae(()=>{"use strict";oa=require("node:crypto"),ke=require("node:fs"),ia=require("node:path"),ra=(e,t,o)=>{let i=`${e}.tmp.${process.pid}.${(0,oa.randomUUID)()}`;try{let r=(0,ke.openSync)(i,"w",o);try{(0,ke.writeSync)(r,t),(0,ke.fsyncSync)(r)}finally{(0,ke.closeSync)(r)}(0,ke.renameSync)(i,e),mh((0,ia.dirname)(e))}catch(r){try{(0,ke.unlinkSync)(i)}catch{}throw r}},mh=e=>{if(process.platform!=="win32")try{let t=(0,ke.openSync)(e,"r");try{(0,ke.fsyncSync)(t)}finally{(0,ke.closeSync)(t)}}catch{}}});function He(){return process.env.XDG_CONFIG_HOME?(0,Ht.join)(process.env.XDG_CONFIG_HOME,"resend"):process.platform==="win32"&&process.env.APPDATA?(0,Ht.join)(process.env.APPDATA,"resend"):(0,Ht.join)((0,la.homedir)(),".config","resend")}function
|
|
146
|
-
`,384),(0,Pe.chmodSync)(o,384),o}function ti(e){if(e)return e;let t=process.env.RESEND_PROFILE;if(t)return t;let o=Se();return o?.active_profile?o.active_profile:"default"}function yr(e,t,o){let i=t||"default",r=ue(i);if(r)throw new Error(r);return nt(ht(),()=>{let n=Se()||{active_profile:"default",profiles:{}},s={...n.profiles,[i]:{type:"api_key",api_key:e,...o&&{permission:o}}},a={...n,profiles:s,...Object.keys(s).length===1?{active_profile:i}:{}};return gt(a)})}function Os(e){return nt(ht(),()=>{let t=Se();if(!t)throw new Error("No credentials file found.");let o=e||ti();if(!t.profiles[o])throw new Error(`Profile "${o}" not found. Available profiles: ${Object.keys(t.profiles).join(", ")}`);let{[o]:i,...r}=t.profiles;if(Object.keys(r).length===0){let s=
|
|
145
|
+
</svg>`});var oa,ke,ia,ra,mh,na=Ae(()=>{"use strict";oa=require("node:crypto"),ke=require("node:fs"),ia=require("node:path"),ra=(e,t,o)=>{let i=`${e}.tmp.${process.pid}.${(0,oa.randomUUID)()}`;try{let r=(0,ke.openSync)(i,"w",o);try{(0,ke.writeSync)(r,t),(0,ke.fsyncSync)(r)}finally{(0,ke.closeSync)(r)}(0,ke.renameSync)(i,e),mh((0,ia.dirname)(e))}catch(r){try{(0,ke.unlinkSync)(i)}catch{}throw r}},mh=e=>{if(process.platform!=="win32")try{let t=(0,ke.openSync)(e,"r");try{(0,ke.fsyncSync)(t)}finally{(0,ke.closeSync)(t)}}catch{}}});function He(){return process.env.XDG_CONFIG_HOME?(0,Ht.join)(process.env.XDG_CONFIG_HOME,"resend"):process.platform==="win32"&&process.env.APPDATA?(0,Ht.join)(process.env.APPDATA,"resend"):(0,Ht.join)((0,la.homedir)(),".config","resend")}function Ft(){return(0,Ht.join)(He(),"credentials.json")}function sa(e){return e.type==="oauth_grant"?Dr(e)?{type:"oauth_grant",...e}:{type:"oauth_grant",scope:typeof e.scope=="string"?e.scope:""}:{type:"api_key",...e.api_key!==void 0?{api_key:e.api_key}:{},...e.permission?{permission:e.permission}:{}}}function Rr(){try{return Se()}catch{return null}}function Se(){let e=Ft();if(!(0,Pe.existsSync)(e))return null;let t=(0,Pe.readFileSync)(e,"utf-8");if(t.trim().length===0)return null;let o;try{o=JSON.parse(t)}catch{throw new Wo(e)}if(typeof o=="object"&&o!==null&&"api_key"in o&&!("profiles"in o)&&!("teams"in o))return{active_profile:"default",profiles:{default:{type:"api_key",api_key:o.api_key}}};if("profiles"in o){let i=o.storage==="keychain"?"secure_storage":o.storage,r=o.profiles;return{active_profile:o.active_profile??"default",...i?{storage:i}:{},profiles:Object.fromEntries(Object.entries(r).map(([n,s])=>[n,sa(s)]))}}if("teams"in o){let i=o.teams;return{active_profile:o.active_team??"default",profiles:Object.fromEntries(Object.entries(i).map(([r,n])=>[r,sa(n)]))}}return null}function gt(e){let t=He();(0,Pe.mkdirSync)(t,{recursive:!0,mode:448});let o=Ft();return ra(o,`${JSON.stringify(e,null,2)}
|
|
146
|
+
`,384),(0,Pe.chmodSync)(o,384),o}function ti(e){if(e)return e;let t=process.env.RESEND_PROFILE;if(t)return t;let o=Se();return o?.active_profile?o.active_profile:"default"}function yr(e,t,o){let i=t||"default",r=ue(i);if(r)throw new Error(r);return nt(ht(),()=>{let n=Se()||{active_profile:"default",profiles:{}},s={...n.profiles,[i]:{type:"api_key",api_key:e,...o&&{permission:o}}},a={...n,profiles:s,...Object.keys(s).length===1?{active_profile:i}:{}};return gt(a)})}function Os(e){return nt(ht(),()=>{let t=Se();if(!t)throw new Error("No credentials file found.");let o=e||ti();if(!t.profiles[o])throw new Error(`Profile "${o}" not found. Available profiles: ${Object.keys(t.profiles).join(", ")}`);let{[o]:i,...r}=t.profiles;if(Object.keys(r).length===0){let s=Ft();return(0,Pe.unlinkSync)(s),s}let n=t.active_profile===o?Object.keys(r)[0]||"default":t.active_profile;return gt({...t,active_profile:n,profiles:r})})}function Ao(e){let t=ue(e);if(t)throw new Error(t);nt(ht(),()=>{let o=Se();if(!o)throw new Error("No credentials file found. Run: resend login");if(!o.profiles[e])throw new Error(`Profile "${e}" not found. Available profiles: ${Object.keys(o.profiles).join(", ")}`);gt({...o,active_profile:e})})}function _e(){let e=Se();return e?Object.keys(e.profiles).map(t=>({name:t,active:t===e.active_profile})):[]}function ue(e){if(!e||e.length===0)return"Profile name must not be empty";if(e.length>64)return"Profile name must be 64 characters or fewer";if(!/^[a-zA-Z0-9._-]+$/.test(e))return"Profile name must contain only letters, numbers, dots, dashes, and underscores"}function At(e){return e.length<=7?`${e.slice(0,3)}...`:`${e.slice(0,3)}...${e.slice(-4)}`}function Dr(e){if(typeof e!="object"||e===null)return!1;let t=e;return typeof t.access_token=="string"&&typeof t.access_token_expires_at=="number"&&typeof t.refresh_token=="string"&&typeof t.scope=="string"}function ph(e){return Dr(e)?e:null}function fh(e){let t;try{t=JSON.parse(e)}catch{t=null}if(!Dr(t))throw new Error("Stored OAuth credentials are invalid. Please run `resend login` to authenticate again.");return t}async function Rt(e,t,o){if(e)return{type:"api_key",key:e,source:"flag"};let i=process.env.RESEND_API_KEY;if(i)return{type:"api_key",key:i,source:"env"};let r=Se(),n=t||process.env.RESEND_PROFILE||r?.active_profile||"default";if(r?.storage==="secure_storage"&&r.profiles[n]){let s=r.profiles[n],l=await(await rt()).get(ze,n);if(l){if(s.type==="oauth_grant"){let u=fh(l);return aa(u,n,"secure_storage",o)}return{type:"api_key",key:l,source:"secure_storage",profile:n,permission:s.permission}}}if(r){let s=r.profiles[n];if(s?.type==="api_key"&&s.api_key)return{type:"api_key",key:s.api_key,source:"config",profile:n,permission:s.permission};if(s?.type==="oauth_grant"){let a=ph(s);if(a)return aa(a,n,"config",o)}}return null}async function aa(e,t,o,i){if(i?.refresh===!1)return{type:"oauth_grant",access_token:e.access_token,profile:t,scope:e.scope,source:o};let{access_token:r,scope:n}=await Xs(e,t);return{type:"oauth_grant",access_token:r,profile:t,scope:n,source:o}}async function ca(e,t,o){let i=t||"default",r=ue(i);if(r)throw new Error(r);let n=await rt();return n.isSecure?{configPath:await nt(ht(),async()=>{await n.set(ze,i,e);let a=Se()||{active_profile:"default",profiles:{}},l={...a.profiles,[i]:{type:"api_key",...o&&{permission:o}}};return gt({...a,storage:"secure_storage",profiles:l,...Object.keys(l).length===1?{active_profile:i}:{}})}),backend:n}:{configPath:yr(e,i,o),backend:n}}async function ei(e,t){let o=t||"default",i=ue(o);if(i)throw new Error(i);let r=await rt();return{configPath:await nt(ht(),async()=>{let s=Se()||{active_profile:"default",profiles:{}},a=r.isSecure?{type:"oauth_grant",scope:e.scope}:{type:"oauth_grant",...e};r.isSecure&&await r.set(ze,o,JSON.stringify(e));let l={...s.profiles,[o]:a};try{return gt({...s,storage:r.isSecure?"secure_storage":"file",profiles:l,...Object.keys(l).length===1?{active_profile:o}:{}})}catch(u){throw r.isSecure&&await r.delete(ze,o).catch(()=>{}),u}}),backend:r}}async function oi(e){return nt(ht(),async()=>{let t=Se(),o=e||process.env.RESEND_PROFILE||t?.active_profile||"default";if(!t?.profiles[o])throw new Error(t?`Profile "${o}" not found. Available profiles: ${Object.keys(t.profiles).join(", ")}`:"No credentials file found.");if(t.storage==="secure_storage"){let s=await rt();if(s.isSecure&&!await s.delete(ze,o))throw new Error(`Failed to remove API key for profile "${o}" from ${s.name}. Credential may still exist in secure storage.`)}let{[o]:i,...r}=t.profiles;if(Object.keys(r).length===0){let s=Ft();return(0,Pe.unlinkSync)(s),s}let n=t.active_profile===o?Object.keys(r)[0]||"default":t.active_profile;return gt({...t,active_profile:n,profiles:r})})}async function da(){return nt(ht(),async()=>{let e=Rr(),t=Ft();if(e?.storage==="secure_storage"){let o=await rt();if(o.isSecure){let i=Object.keys(e.profiles),r=await Promise.all(i.map(s=>o.delete(ze,s))),n=i.filter((s,a)=>!r[a]);if(n.length>0){let s=Object.fromEntries(Object.entries(e.profiles).filter(([l])=>!r[i.indexOf(l)])),a=Object.keys(s);throw gt({...e,active_profile:e.active_profile&&s[e.active_profile]?e.active_profile:a[0]??"default",profiles:s}),new Error(`Failed to remove API keys from ${o.name} for profiles: ${n.join(", ")}. Credentials may still exist in secure storage.`)}}}return(0,Pe.existsSync)(t)&&(0,Pe.unlinkSync)(t),t})}async function ii(e,t){if(e===t)return;let o=ue(t);if(o)throw new Error(o);await nt(ht(),async()=>{let i=Se();if(!i)throw new Error("No credentials file found. Run: resend login");if(!i.profiles[e])throw new Error(`Profile "${e}" not found. Available profiles: ${Object.keys(i.profiles).join(", ")}`);if(i.profiles[t])throw new Error(`Profile "${t}" already exists.`);if(i.storage==="secure_storage"){let s=await rt();if(s.isSecure){let a=await s.get(ze,e);if(a&&(await s.set(ze,t,a),!await s.delete(ze,e))){let u=await s.delete(ze,t);throw new Error(u?`Failed to remove old credential "${e}" from ${s.name} during rename. The rename has been rolled back.`:`Failed to remove old credential "${e}" from ${s.name} during rename. Rollback also failed \u2014 credential "${t}" may still exist in secure storage.`)}}}let{[e]:r,...n}=i.profiles;gt({...i,active_profile:i.active_profile===e?t:i.active_profile,profiles:{...n,[t]:r}})})}var Pe,la,Ht,Qt,ht,be=Ae(()=>{"use strict";Pe=require("node:fs"),la=require("node:os"),Ht=require("node:path");Ts();vr();qs();Zo();na();Qt=`Sending-only keys work with: emails send, emails batch, broadcasts send.
|
|
147
147
|
Create a full access key at https://resend.com/api-keys`;ht=()=>(0,Ht.join)(He(),"credentials.json.lock")});function w(){return!(!process.stdin.isTTY||!process.stdout.isTTY||process.env.CI==="true"||process.env.CI==="1"||process.env.GITHUB_ACTIONS||process.env.TERM==="dumb")}var st,X=Ae(()=>{"use strict";st=process.platform!=="win32"||!!process.env.WT_SESSION||process.env.TERM_PROGRAM==="vscode"});function Uc(){return(0,wc.join)(He(),"update-state.json")}function Xh(){try{return JSON.parse((0,Xt.readFileSync)(Uc(),"utf-8"))}catch{return null}}function Zh(e){(0,Xt.mkdirSync)(He(),{recursive:!0,mode:448}),(0,Xt.writeFileSync)(Uc(),JSON.stringify(e),{mode:384})}function wi(e,t){let o=u=>u.replace(/^v/,"").split(".").map(Number),[i,r,n]=o(e),[s,a,l]=o(t);return s!==i?s>i:a!==r?a>r:l>n}async function Hr(){try{let e=await fetch(Gr,{headers:{Accept:"application/vnd.github.v3+json"},signal:AbortSignal.timeout(5e3)});if(!e.ok)return null;let t=await e.json();if(t.prerelease||t.draft)return null;let o=t.tag_name?.replace(/^v/,"");return!o||!/^\d+\.\d+\.\d+$/.test(o)?null:o}catch{return null}}function eg(e){return!!(e?.json||process.env.RESEND_NO_UPDATE_NOTIFIER==="1"||process.env.CI==="true"||process.env.CI==="1"||process.env.GITHUB_ACTIONS||!process.stdout.isTTY)}function vc(){let e=Ui();return e.startsWith("npm")?"npm":e.startsWith("brew")?"homebrew":e.startsWith("curl")||e.startsWith("irm")?"install-script":"manual"}function Ui(){let e=process.execPath||process.argv[0]||"",t=process.argv[1]||"";return process.env.npm_execpath||/node_modules/.test(t)||/node_modules/.test(e)?"npm install -g resend-cli":/\/(Cellar|homebrew)\//i.test(e)?"brew update && brew upgrade resend":/[/\\]\.resend[/\\]bin[/\\]/.test(e)?process.platform==="win32"?"irm https://resend.com/install.ps1 | iex":"curl -fsSL https://resend.com/install.sh | bash":"https://github.com/resend/resend-cli/releases/latest"}function xc(e){let t=Ui(),o=t.startsWith("http"),i="\x1B[2m",r="\x1B[33m",n="\x1B[36m",s="\x1B[0m",a=["",`${i}Update available: ${r}v${se}${s}${i} \u2192 ${n}v${e}${s}`,`${i}${o?"Visit":"Run"}: ${n}${t}${s}`];return process.platform==="win32"&&a.push(`${i}Or download from: ${n}https://github.com/resend/resend-cli/releases/latest${s}`),a.push(""),a.join(`
|
|
148
148
|
`)}async function Sc(e){if(eg(e))return;let t=Xh(),o=Date.now();if(t&&o-t.lastChecked<Yh){wi(se,t.latestVersion)&&process.stderr.write(xc(t.latestVersion));return}let i=await Hr();i&&(Zh({lastChecked:o,latestVersion:i}),wi(se,i)&&process.stderr.write(xc(i)))}var Xt,wc,Yh,Gr,vo=Ae(()=>{"use strict";Xt=require("node:fs"),wc=require("node:path");be();Kt();Yh=3600*1e3,Gr="https://api.github.com/repos/resend/resend-cli/releases/latest"});var Um={};io(Um,{flushFromFile:()=>Mg,flushPayload:()=>wm,getOrCreateAnonymousId:()=>xm,getSpoolDir:()=>zr,isDisabled:()=>Cm,trackCommand:()=>Yr});function $g(){return Pg[process.platform]??process.platform}function zr(){let e=(0,Xe.join)(He(),"telemetry-spool");return(0,V.mkdirSync)(e,{recursive:!0,mode:448}),e}function Cm(){return!ym||process.env.DO_NOT_TRACK==="1"||process.env.RESEND_TELEMETRY_DISABLED==="1"}function xm(){let e=He(),t=(0,Xe.join)(e,"telemetry-id");try{let i=(0,V.readFileSync)(t,"utf-8").trim();if(i)return i}catch{}let o=crypto.randomUUID();return(0,V.mkdirSync)(e,{recursive:!0,mode:448}),(0,V.writeFileSync)(t,o,{mode:384}),o}function Gg(e){if(!e)return;let t=He(),o=(0,Xe.join)(t,"telemetry-notice-shown");(0,V.existsSync)(o)||((0,V.mkdirSync)(t,{recursive:!0,mode:448}),(0,V.writeFileSync)(o,"",{mode:384}),process.stderr.write(`
|
|
149
149
|
Resend collects anonymous CLI usage data to improve the tool.
|
|
@@ -164,21 +164,21 @@ ${e.examples.map(o=>` $ ${o}`).join(`
|
|
|
164
164
|
`)}`),`
|
|
165
165
|
${t.join(`
|
|
166
166
|
|
|
167
|
-
`)}`}var Tt=require("node:util"),no=require("node:process");var
|
|
168
|
-
`),m=!1;for(let p=0;p<u.length;p++){let f=u[p];if(i+=f,m)m=!1;else if(m=f>="\uD800"&&f<="\uDBFF",m)continue;if(f===Do||f===
|
|
169
|
-
`){n&&(i+=
|
|
170
|
-
`&&(r&&kn(r)&&(i+=
|
|
171
|
-
`)}var
|
|
167
|
+
`)}`}var Tt=require("node:util"),no=require("node:process");var En=me(require("node:readline"),1);var yn=(()=>{let e=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g;return t=>{let o=0;for(e.lastIndex=0;e.test(t);)o+=1;return t.length-o}})(),Cn=e=>e===12288||e>=65281&&e<=65376||e>=65504&&e<=65510,xn=e=>e===8987||e===9001||e>=12272&&e<=12287||e>=12289&&e<=12350||e>=12441&&e<=12543||e>=12549&&e<=12591||e>=12593&&e<=12686||e>=12688&&e<=12771||e>=12783&&e<=12830||e>=12832&&e<=12871||e>=12880&&e<=19903||e>=65040&&e<=65049||e>=65072&&e<=65106||e>=65108&&e<=65126||e>=65128&&e<=65131||e>=127488&&e<=127490||e>=127504&&e<=127547||e>=127552&&e<=127560||e>=131072&&e<=196605||e>=196608&&e<=262141;var ep=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]|\u001b\]8;[^;]*;.*?(?:\u0007|\u001b\u005c)/y,tp=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,wn=/(?:(?![\uFF61-\uFF9F\uFF00-\uFFEF])[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Tangut}]){1,1000}/yu,op=/\t{1,1000}/y,Un=/[\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,ip=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,rp=/\p{M}+/gu,np={limit:1/0,ellipsis:""},vn=(e,t={},o={})=>{let i=t.limit??1/0,r=t.ellipsis??"",n=t?.ellipsisWidth??(r?vn(r,np,o).width:0),s=0,a=o.controlWidth??0,l=o.tabWidth??8,u=o.emojiWidth??2,m=2,p=o.regularWidth??1,f=o.wideWidth??m,y=[[ip,p],[ep,s],[tp,a],[op,l],[Un,u],[wn,f]],A=0,b=0,x=e.length,U=0,v=!1,S=x,K=Math.max(0,i-n),O=0,$=0,Q=0,P=0;e:for(;;){if($>O||b>=x&&b>A){let q=e.slice(O,$)||e.slice(A,b);U=0;for(let we of q.replaceAll(rp,"")){let re=we.codePointAt(0)||0;if(Cn(re)?P=m:xn(re)?P=f:P=p,Q+P>K&&(S=Math.min(S,Math.max(O,A)+U)),Q+P>i){v=!0;break e}U+=we.length,Q+=P}O=$=0}if(b>=x)break e;for(let q=0,we=y.length;q<we;q++){let[re,vt]=y[q];if(re.lastIndex=b,re.test(e)){if(U=re===wn?yn(e.slice(b,re.lastIndex)):re===Un?1:re.lastIndex-b,P=U*vt,Q+P>K&&(S=Math.min(S,b+Math.floor((K-Q)/vt))),Q+P>i){v=!0;break e}Q+=P,O=A,$=b,b=A=re.lastIndex;continue e}}b+=1}return{width:v?K:Q,index:v?S:x,truncated:v,ellipsed:v&&i>=n}},Sn=vn;var sp={limit:1/0,ellipsis:"",ellipsisWidth:0},ap=(e,t={})=>Sn(e,sp,t).width,Ue=ap;var Do="\x1B",Rn="\x9B",lp=39,zi="\x07",Dn="[",cp="]",Tn="m",Yi=`${cp}8;;`,Kn=new RegExp(`(?:\\${Dn}(?<code>\\d+)m|\\${Yi}(?<uri>.*)${zi})`,"y"),kn=e=>{if(e>=30&&e<=37||e>=90&&e<=97)return 39;if(e>=40&&e<=47||e>=100&&e<=107)return 49;if(e===1||e===2)return 22;if(e===3)return 23;if(e===4)return 24;if(e===7)return 27;if(e===8)return 28;if(e===9)return 29;if(e===0)return 0},_n=e=>`${Do}${Dn}${e}${Tn}`,Fn=e=>`${Do}${Yi}${e}${zi}`,Vi=(e,t,o)=>{let i=t[Symbol.iterator](),r=!1,n=!1,s=e.at(-1),a=s===void 0?0:Ue(s),l=i.next(),u=i.next(),m=0;for(;!l.done;){let p=l.value,f=Ue(p);a+f<=o?e[e.length-1]+=p:(e.push(p),a=0),(p===Do||p===Rn)&&(r=!0,n=t.startsWith(Yi,m+1)),r?n?p===zi&&(r=!1,n=!1):p===Tn&&(r=!1):(a+=f,a===o&&!u.done&&(e.push(""),a=0)),l=u,u=i.next(),m+=p.length}s=e.at(-1),!a&&s!==void 0&&s.length&&e.length>1&&(e[e.length-2]+=e.pop())},dp=e=>{let t=e.split(" "),o=t.length;for(;o&&!Ue(t[o-1]);)o--;return o===t.length?e:t.slice(0,o).join(" ")+t.slice(o).join("")},up=(e,t,o={})=>{if(o.trim!==!1&&e.trim()==="")return"";let i="",r,n,s=e.split(" "),a=[""],l=0;for(let p=0;p<s.length;p++){let f=s[p];if(o.trim!==!1){let A=a.at(-1)??"",b=A.trimStart();A.length!==b.length&&(a[a.length-1]=b,l=Ue(b))}p!==0&&(l>=t&&(o.wordWrap===!1||o.trim===!1)&&(a.push(""),l=0),(l||o.trim===!1)&&(a[a.length-1]+=" ",l++));let y=Ue(f);if(o.hard&&y>t){let A=t-l,b=1+Math.floor((y-A-1)/t);Math.floor((y-1)/t)<b&&a.push(""),Vi(a,f,t),l=Ue(a.at(-1)??"");continue}if(l+y>t&&l&&y){if(o.wordWrap===!1&&l<t){Vi(a,f,t),l=Ue(a.at(-1)??"");continue}a.push(""),l=0}if(l+y>t&&o.wordWrap===!1){Vi(a,f,t),l=Ue(a.at(-1)??"");continue}a[a.length-1]+=f,l+=y}o.trim!==!1&&(a=a.map(p=>dp(p)));let u=a.join(`
|
|
168
|
+
`),m=!1;for(let p=0;p<u.length;p++){let f=u[p];if(i+=f,m)m=!1;else if(m=f>="\uD800"&&f<="\uDBFF",m)continue;if(f===Do||f===Rn){Kn.lastIndex=p+1;let A=Kn.exec(u)?.groups;if(A?.code!==void 0){let b=Number.parseFloat(A.code);r=b===lp?void 0:b}else A?.uri!==void 0&&(n=A.uri.length===0?void 0:A.uri)}if(u[p+1]===`
|
|
169
|
+
`){n&&(i+=Fn(""));let y=r?kn(r):void 0;r&&y&&(i+=_n(y))}else f===`
|
|
170
|
+
`&&(r&&kn(r)&&(i+=_n(r)),n&&(i+=Fn(n)))}return i},mp=/\r?\n/;function ct(e,t,o){return String(e).normalize().split(mp).map(i=>up(i,t,o)).join(`
|
|
171
|
+
`)}var Be=me(Zi(),1);function it(e,t,o){if(!o.some(s=>!s.disabled))return e;let i=e+t,r=Math.max(o.length-1,0),n=i<0?r:i>r?0:i;return o[n].disabled?it(n,t<0?-1:1,o):n}var hp=["up","down","left","right","space","enter","cancel"],gp=["January","February","March","April","May","June","July","August","September","October","November","December"],ge={actions:new Set(hp),aliases:new Map([["k","up"],["j","down"],["h","left"],["l","right"],["","cancel"],["escape","cancel"]]),messages:{cancel:"Canceled",error:"Something went wrong"},withGuide:!0,date:{monthNames:[...gp],messages:{required:"Please enter a valid date",invalidMonth:"There are only 12 months in a year",invalidDay:(e,t)=>`There are only ${e} days in ${t}`,afterMin:e=>`Date must be on or after ${e.toISOString().slice(0,10)}`,beforeMax:e=>`Date must be on or before ${e.toISOString().slice(0,10)}`}}};function Bn(e,t){if(typeof e=="string")return ge.aliases.get(e)===t;for(let o of e)if(o!==void 0&&Bn(o,t))return!0;return!1}function Ap(e,t){if(e===t)return;let o=e.split(`
|
|
172
172
|
`),i=t.split(`
|
|
173
|
-
`),r=Math.max(o.length,i.length),n=[];for(let s=0;s<r;s++)o[s]!==i[s]&&n.push(s);return{lines:n,numLinesBefore:o.length,numLinesAfter:i.length,numLines:r}}var yA=globalThis.process.platform.startsWith("win"),er=Symbol("clack:cancel");function
|
|
173
|
+
`),r=Math.max(o.length,i.length),n=[];for(let s=0;s<r;s++)o[s]!==i[s]&&n.push(s);return{lines:n,numLinesBefore:o.length,numLinesAfter:i.length,numLines:r}}var yA=globalThis.process.platform.startsWith("win"),er=Symbol("clack:cancel");function F(e){return e===er}function To(e,t){let o=e;o.isTTY&&o.setRawMode(t)}var jo=e=>"columns"in e&&typeof e.columns=="number"?e.columns:80,tr=e=>"rows"in e&&typeof e.rows=="number"?e.rows:20;function dt(e,t,o,i=o,r=o,n){let s=jo(e??no.stdout);return ct(t,s-o.length,{hard:!0,trim:!1}).split(`
|
|
174
174
|
`).map((a,l,u)=>{let m=n?n(a,l):a;return l===0?`${i}${m}`:l===u.length-1?`${r}${m}`:`${o}${m}`}).join(`
|
|
175
|
-
`)}var Ot=class{input;output;_abortSignal;rl;opts;_render;_track=!1;_prevFrame="";_subscribers=new Map;_cursor=0;state="initial";error="";value;userInput="";constructor(e,t=!0){let{input:o=no.stdin,output:i=no.stdout,render:r,signal:n,...s}=e;this.opts=s,this.onKeypress=this.onKeypress.bind(this),this.close=this.close.bind(this),this.render=this.render.bind(this),this._render=r.bind(this),this._track=t,this._abortSignal=n,this.input=o,this.output=i}unsubscribe(){this._subscribers.clear()}setSubscriber(e,t){let o=this._subscribers.get(e)??[];o.push(t),this._subscribers.set(e,o)}on(e,t){this.setSubscriber(e,{cb:t})}once(e,t){this.setSubscriber(e,{cb:t,once:!0})}emit(e,...t){let o=this._subscribers.get(e)??[],i=[];for(let r of o)r.cb(...t),r.once&&i.push(()=>o.splice(o.indexOf(r),1));for(let r of i)r()}prompt(){return new Promise(e=>{if(this._abortSignal){if(this._abortSignal.aborted)return this.state="cancel",this.close(),e(er);this._abortSignal.addEventListener("abort",()=>{this.state="cancel",this.close()},{once:!0})}this.rl=
|
|
175
|
+
`)}var Ot=class{input;output;_abortSignal;rl;opts;_render;_track=!1;_prevFrame="";_subscribers=new Map;_cursor=0;state="initial";error="";value;userInput="";constructor(e,t=!0){let{input:o=no.stdin,output:i=no.stdout,render:r,signal:n,...s}=e;this.opts=s,this.onKeypress=this.onKeypress.bind(this),this.close=this.close.bind(this),this.render=this.render.bind(this),this._render=r.bind(this),this._track=t,this._abortSignal=n,this.input=o,this.output=i}unsubscribe(){this._subscribers.clear()}setSubscriber(e,t){let o=this._subscribers.get(e)??[];o.push(t),this._subscribers.set(e,o)}on(e,t){this.setSubscriber(e,{cb:t})}once(e,t){this.setSubscriber(e,{cb:t,once:!0})}emit(e,...t){let o=this._subscribers.get(e)??[],i=[];for(let r of o)r.cb(...t),r.once&&i.push(()=>o.splice(o.indexOf(r),1));for(let r of i)r()}prompt(){return new Promise(e=>{if(this._abortSignal){if(this._abortSignal.aborted)return this.state="cancel",this.close(),e(er);this._abortSignal.addEventListener("abort",()=>{this.state="cancel",this.close()},{once:!0})}this.rl=En.default.createInterface({input:this.input,tabSize:2,prompt:"",escapeCodeTimeout:50,terminal:!0}),this.rl.prompt(),this.opts.initialUserInput!==void 0&&this._setUserInput(this.opts.initialUserInput,!0),this.input.on("keypress",this.onKeypress),To(this.input,!0),this.output.on("resize",this.render),this.render(),this.once("submit",()=>{this.output.write(Be.cursor.show),this.output.off("resize",this.render),To(this.input,!1),e(this.value)}),this.once("cancel",()=>{this.output.write(Be.cursor.show),this.output.off("resize",this.render),To(this.input,!1),e(er)})})}_isActionKey(e,t){return e===" "}_shouldSubmit(e,t){return!0}_setValue(e){this.value=e,this.emit("value",this.value)}_setUserInput(e,t){this.userInput=e??"",this.emit("userInput",this.userInput),t&&this._track&&this.rl&&(this.rl.write(this.userInput),this._cursor=this.rl.cursor)}_clearUserInput(){this.rl?.write(null,{ctrl:!0,name:"u"}),this._setUserInput("")}onKeypress(e,t){if(this._track&&t.name!=="return"&&(t.name&&this._isActionKey(e,t)&&this.rl?.write(null,{ctrl:!0,name:"h"}),this._cursor=this.rl?.cursor??0,this._setUserInput(this.rl?.line)),this.state==="error"&&(this.state="active"),t?.name&&(!this._track&&ge.aliases.has(t.name)&&this.emit("cursor",ge.aliases.get(t.name)),ge.actions.has(t.name)&&this.emit("cursor",t.name)),e&&(e.toLowerCase()==="y"||e.toLowerCase()==="n")&&this.emit("confirm",e.toLowerCase()==="y"),this.emit("key",e?.toLowerCase(),t),t?.name==="return"&&this._shouldSubmit(e,t)){if(this.opts.validate){let o=this.opts.validate(this.value);o&&(this.error=o instanceof Error?o.message:o,this.state="error",this.rl?.write(this.userInput))}this.state!=="error"&&(this.state="submit")}Bn([e,t?.name,t?.sequence],"cancel")&&(this.state="cancel"),(this.state==="submit"||this.state==="cancel")&&this.emit("finalize"),this.render(),(this.state==="submit"||this.state==="cancel")&&this.close()}close(){this.input.unpipe(),this.input.removeListener("keypress",this.onKeypress),this.output.write(`
|
|
176
176
|
`),To(this.input,!1),this.rl?.close(),this.rl=void 0,this.emit(`${this.state}`,this.value),this.unsubscribe()}restoreCursor(){let e=ct(this._prevFrame,process.stdout.columns,{hard:!0,trim:!1}).split(`
|
|
177
|
-
`).length-1;this.output.write(
|
|
178
|
-
`);this.output.write(s[n]),this._prevFrame=e,this.output.write(
|
|
177
|
+
`).length-1;this.output.write(Be.cursor.move(-999,e*-1))}render(){let e=ct(this._render(this)??"",process.stdout.columns,{hard:!0,trim:!1});if(e!==this._prevFrame){if(this.state==="initial")this.output.write(Be.cursor.hide);else{let t=Ap(this._prevFrame,e),o=tr(this.output);if(this.restoreCursor(),t){let i=Math.max(0,t.numLinesAfter-o),r=Math.max(0,t.numLinesBefore-o),n=t.lines.find(s=>s>=i);if(n===void 0){this._prevFrame=e;return}if(t.lines.length===1){this.output.write(Be.cursor.move(0,n-r)),this.output.write(Be.erase.lines(1));let s=e.split(`
|
|
178
|
+
`);this.output.write(s[n]),this._prevFrame=e,this.output.write(Be.cursor.move(0,s.length-n-1));return}else if(t.lines.length>1){if(i<r)n=i;else{let a=n-r;a>0&&this.output.write(Be.cursor.move(0,a))}this.output.write(Be.erase.down());let s=e.split(`
|
|
179
179
|
`).slice(n);this.output.write(s.join(`
|
|
180
|
-
`)),this._prevFrame=e;return}}this.output.write(
|
|
181
|
-
`);x.push($),U+=$.length}if(U>m){let O=0,$=0,Q=U,P=e-v,q=m,we=()=>Hn(x,Q,0,P,q),re=()=>Hn(x,Q,P+1,x.length,q,!0);y?({lineCount:Q,removals:O}=we(),Q>q&&(A||(q-=1),{lineCount:Q,removals:$}=re())):(A||(q-=1),{lineCount:Q,removals:$}=re(),Q>q&&(q-=1,{lineCount:Q,removals:O}=we())),O>0&&(y=!0,x.splice(0,O)),$>0&&(A=!0,x.splice(x.length-$,$))}let K=[];y&&K.push(u);for(let O of x)for(let $ of O)K.push($);return A&&K.push(u),K};function Qn(e){return e.label??String(e.value??"")}function jp(e,t){if(!e)return!0;let o=(t.label??String(t.value??"")).toLowerCase(),i=(t.hint??"").toLowerCase(),r=String(t.value).toLowerCase(),n=e.toLowerCase();return o.includes(n)||i.includes(n)||r.includes(n)}function Pp(e,t){let o=[];for(let i of t)e.includes(i.value)&&o.push(i);return o}var qn=e=>new
|
|
180
|
+
`)),this._prevFrame=e;return}}this.output.write(Be.erase.down())}this.output.write(e),this.state==="initial"&&(this.state="active"),this._prevFrame=e}}};function bp(e,t){if(e===void 0||t.length===0)return 0;let o=t.findIndex(i=>i.value===e);return o!==-1?o:0}function yp(e,t){return(t.label??String(t.value)).toLowerCase().includes(e.toLowerCase())}function Cp(e,t){if(t)return e?t:t[0]}var In=class extends Ot{filteredOptions;multiple;isNavigating=!1;selectedValues=[];focusedValue;#e=0;#i="";#t;#o;#r;get cursor(){return this.#e}get userInputWithCursor(){if(!this.userInput)return(0,Tt.styleText)(["inverse","hidden"],"_");if(this._cursor>=this.userInput.length)return`${this.userInput}\u2588`;let e=this.userInput.slice(0,this._cursor),[t,...o]=this.userInput.slice(this._cursor);return`${e}${(0,Tt.styleText)("inverse",t)}${o.join("")}`}get options(){return typeof this.#o=="function"?this.#o():this.#o}constructor(e){super(e),this.#o=e.options,this.#r=e.placeholder;let t=this.options;this.filteredOptions=[...t],this.multiple=e.multiple===!0,this.#t=typeof e.options=="function"?e.filter:e.filter??yp;let o;if(e.initialValue&&Array.isArray(e.initialValue)?this.multiple?o=e.initialValue:o=e.initialValue.slice(0,1):!this.multiple&&this.options.length>0&&(o=[this.options[0].value]),o)for(let i of o){let r=t.findIndex(n=>n.value===i);r!==-1&&(this.toggleSelected(i),this.#e=r)}this.focusedValue=this.options[this.#e]?.value,this.on("key",(i,r)=>this.#n(i,r)),this.on("userInput",i=>this.#s(i))}_isActionKey(e,t){return e===" "||this.multiple&&this.isNavigating&&t.name==="space"&&e!==void 0&&e!==""}#n(e,t){let o=t.name==="up",i=t.name==="down",r=t.name==="return",n=this.userInput===""||this.userInput===" ",s=this.#r,a=this.options,l=s!==void 0&&s!==""&&a.some(u=>!u.disabled&&(this.#t?this.#t(s,u):!0));if(t.name==="tab"&&n&&l){this.userInput===" "&&this._clearUserInput(),this._setUserInput(s,!0),this.isNavigating=!1;return}o||i?(this.#e=it(this.#e,o?-1:1,this.filteredOptions),this.focusedValue=this.filteredOptions[this.#e]?.value,this.multiple||(this.selectedValues=[this.focusedValue]),this.isNavigating=!0):r?this.value=Cp(this.multiple,this.selectedValues):this.multiple?this.focusedValue!==void 0&&(t.name==="tab"||this.isNavigating&&t.name==="space")?this.toggleSelected(this.focusedValue):this.isNavigating=!1:(this.focusedValue&&(this.selectedValues=[this.focusedValue]),this.isNavigating=!1)}deselectAll(){this.selectedValues=[]}toggleSelected(e){this.filteredOptions.length!==0&&(this.multiple?this.selectedValues.includes(e)?this.selectedValues=this.selectedValues.filter(t=>t!==e):this.selectedValues=[...this.selectedValues,e]:this.selectedValues=[e])}#s(e){if(e!==this.#i){this.#i=e;let t=this.options;e&&this.#t?this.filteredOptions=t.filter(r=>this.#t?.(e,r)):this.filteredOptions=[...t];let o=bp(this.focusedValue,this.filteredOptions);this.#e=it(o,0,this.filteredOptions);let i=this.filteredOptions[this.#e];i&&!i.disabled?this.focusedValue=i.value:this.focusedValue=void 0,this.multiple||(this.focusedValue!==void 0?this.toggleSelected(this.focusedValue):this.deselectAll())}}},Oo=class extends Ot{get cursor(){return this.value?0:1}get _value(){return this.cursor===0}constructor(t){super(t,!1),this.value=!!t.initialValue,this.on("userInput",()=>{this.value=this._value}),this.on("confirm",o=>{this.output.write(Be.cursor.move(0,-1)),this.value=o,this.state="submit",this.close()}),this.on("cursor",()=>{this.value=!this.value})}};var jn=class extends Ot{options;cursor=0;get _value(){return this.options[this.cursor].value}get _enabledOptions(){return this.options.filter(e=>e.disabled!==!0)}toggleAll(){let e=this._enabledOptions,t=this.value!==void 0&&this.value.length===e.length;this.value=t?[]:e.map(o=>o.value)}toggleInvert(){let e=this.value;if(!e)return;let t=this._enabledOptions.filter(o=>!e.includes(o.value));this.value=t.map(o=>o.value)}toggleValue(){this.value===void 0&&(this.value=[]);let e=this.value.includes(this._value);this.value=e?this.value.filter(t=>t!==this._value):[...this.value,this._value]}constructor(e){super(e,!1),this.options=e.options,this.value=[...e.initialValues??[]];let t=Math.max(this.options.findIndex(({value:o})=>o===e.cursorAt),0);this.cursor=this.options[t].disabled?it(t,1,this.options):t,this.on("key",o=>{o==="a"&&this.toggleAll(),o==="i"&&this.toggleInvert()}),this.on("cursor",o=>{switch(o){case"left":case"up":this.cursor=it(this.cursor,-1,this.options);break;case"down":case"right":this.cursor=it(this.cursor,1,this.options);break;case"space":this.toggleValue();break}})}},Eo=class extends Ot{_mask="\u2022";get cursor(){return this._cursor}get masked(){return this.userInput.replaceAll(/./g,this._mask)}get userInputWithCursor(){if(this.state==="submit"||this.state==="cancel")return this.masked;let t=this.userInput;if(this.cursor>=t.length)return`${this.masked}${(0,Tt.styleText)(["inverse","hidden"],"_")}`;let o=this.masked,i=o.slice(0,this.cursor),r=o.slice(this.cursor);return`${i}${(0,Tt.styleText)("inverse",r[0])}${r.slice(1)}`}clear(){this._clearUserInput()}constructor({mask:t,...o}){super(o),this._mask=t??"\u2022",this.on("userInput",i=>{this._setValue(i)})}},Bo=class extends Ot{options;cursor=0;get _selectedValue(){return this.options[this.cursor]}changeValue(){this.value=this._selectedValue.value}constructor(t){super(t,!1),this.options=t.options;let o=this.options.findIndex(({value:r})=>r===t.initialValue),i=o===-1?0:o;this.cursor=this.options[i].disabled?it(i,1,this.options):i,this.changeValue(),this.on("cursor",r=>{switch(r){case"left":case"up":this.cursor=it(this.cursor,-1,this.options);break;case"down":case"right":this.cursor=it(this.cursor,1,this.options);break}this.changeValue()})}};var Io=class extends Ot{get userInputWithCursor(){if(this.state==="submit")return this.userInput;let t=this.userInput;if(this.cursor>=t.length)return`${this.userInput}\u2588`;let o=t.slice(0,this.cursor),[i,...r]=t.slice(this.cursor);return`${o}${(0,Tt.styleText)("inverse",i)}${r.join("")}`}get cursor(){return this._cursor}constructor(t){super({...t,initialUserInput:t.initialUserInput??t.initialValue}),this.on("userInput",o=>{this._setValue(o)}),this.on("finalize",()=>{this.value||(this.value=t.defaultValue),this.value===void 0&&(this.value="")})}};var C=require("node:util"),Ie=me(require("node:process"),1);var Nn=me(Zi(),1);function xp(){return Ie.default.platform!=="win32"?Ie.default.env.TERM!=="linux":!!Ie.default.env.CI||!!Ie.default.env.WT_SESSION||!!Ie.default.env.TERMINUS_SUBLIME||Ie.default.env.ConEmuTask==="{cmd::Cmder}"||Ie.default.env.TERM_PROGRAM==="Terminus-Sublime"||Ie.default.env.TERM_PROGRAM==="vscode"||Ie.default.env.TERM==="xterm-256color"||Ie.default.env.TERM==="alacritty"||Ie.default.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}var wp=xp();var oe=(e,t)=>wp?e:t,Up=oe("\u25C6","*"),vp=oe("\u25A0","x"),Sp=oe("\u25B2","x"),or=oe("\u25C7","o"),Kp=oe("\u250C","T"),H=oe("\u2502","|"),Ve=oe("\u2514","\u2014"),OA=oe("\u2510","T"),EA=oe("\u2518","\u2014"),$o=oe("\u25CF",">"),Et=oe("\u25CB"," "),kp=oe("\u25FB","[\u2022]"),Pn=oe("\u25FC","[+]"),$n=oe("\u25FB","[ ]"),_p=oe("\u25AA","\u2022"),Gn=oe("\u2500","-"),Fp=oe("\u256E","+"),Rp=oe("\u251C","+"),Dp=oe("\u256F","+"),Tp=oe("\u2570","+"),BA=oe("\u256D","+"),Op=oe("\u25CF","\u2022"),Ep=oe("\u25C6","*"),Bp=oe("\u25B2","!"),Ip=oe("\u25A0","x"),St=e=>{switch(e){case"initial":case"active":return(0,C.styleText)("cyan",Up);case"cancel":return(0,C.styleText)("red",vp);case"error":return(0,C.styleText)("yellow",Sp);case"submit":return(0,C.styleText)("green",or)}},Mn=e=>{switch(e){case"initial":case"active":return(0,C.styleText)("cyan",H);case"cancel":return(0,C.styleText)("red",H);case"error":return(0,C.styleText)("yellow",H);case"submit":return(0,C.styleText)("green",H)}},Hn=(e,t,o,i,r,n=!1)=>{let s=t,a=0;if(n)for(let l=i-1;l>=o&&(s-=e[l].length,a++,!(s<=r));l--);else for(let l=o;l<i&&(s-=e[l].length,a++,!(s<=r));l++);return{lineCount:s,removals:a}},Go=({cursor:e,options:t,style:o,output:i=process.stdout,maxItems:r=Number.POSITIVE_INFINITY,columnPadding:n=0,rowPadding:s=4})=>{let a=jo(i)-n,l=tr(i),u=(0,C.styleText)("dim","..."),m=Math.max(l-s,0),p=Math.max(Math.min(r,m),5),f=0;e>=p-3&&(f=Math.max(Math.min(e-p+3,t.length-p),0));let y=p<t.length&&f>0,A=p<t.length&&f+p<t.length,b=Math.min(f+p,t.length),x=[],U=0;y&&U++,A&&U++;let v=f+(y?1:0),S=b-(A?1:0);for(let O=v;O<S;O++){let $=ct(o(t[O],O===e),a,{hard:!0,trim:!1}).split(`
|
|
181
|
+
`);x.push($),U+=$.length}if(U>m){let O=0,$=0,Q=U,P=e-v,q=m,we=()=>Hn(x,Q,0,P,q),re=()=>Hn(x,Q,P+1,x.length,q,!0);y?({lineCount:Q,removals:O}=we(),Q>q&&(A||(q-=1),{lineCount:Q,removals:$}=re())):(A||(q-=1),{lineCount:Q,removals:$}=re(),Q>q&&(q-=1,{lineCount:Q,removals:O}=we())),O>0&&(y=!0,x.splice(0,O)),$>0&&(A=!0,x.splice(x.length-$,$))}let K=[];y&&K.push(u);for(let O of x)for(let $ of O)K.push($);return A&&K.push(u),K};function Qn(e){return e.label??String(e.value??"")}function jp(e,t){if(!e)return!0;let o=(t.label??String(t.value??"")).toLowerCase(),i=(t.hint??"").toLowerCase(),r=String(t.value).toLowerCase(),n=e.toLowerCase();return o.includes(n)||i.includes(n)||r.includes(n)}function Pp(e,t){let o=[];for(let i of t)e.includes(i.value)&&o.push(i);return o}var qn=e=>new In({options:e.options,initialValue:e.initialValue?[e.initialValue]:void 0,initialUserInput:e.initialUserInput,placeholder:e.placeholder,filter:e.filter??((t,o)=>jp(t,o)),signal:e.signal,input:e.input,output:e.output,validate:e.validate,render(){let t=e.withGuide??ge.withGuide,o=t?[`${(0,C.styleText)("gray",H)}`,`${St(this.state)} ${e.message}`]:[`${St(this.state)} ${e.message}`],i=this.userInput,r=this.options,n=e.placeholder,s=i===""&&n!==void 0,a=(l,u)=>{let m=Qn(l),p=l.hint&&l.value===this.focusedValue?(0,C.styleText)("dim",` (${l.hint})`):"";switch(u){case"active":return`${(0,C.styleText)("green",$o)} ${m}${p}`;case"inactive":return`${(0,C.styleText)("dim",Et)} ${(0,C.styleText)("dim",m)}`;case"disabled":return`${(0,C.styleText)("gray",Et)} ${(0,C.styleText)(["strikethrough","gray"],m)}`}};switch(this.state){case"submit":{let l=Pp(this.selectedValues,r),u=l.length>0?` ${(0,C.styleText)("dim",l.map(Qn).join(", "))}`:"",m=t?(0,C.styleText)("gray",H):"";return`${o.join(`
|
|
182
182
|
`)}
|
|
183
183
|
${m}${u}`}case"cancel":{let l=i?` ${(0,C.styleText)(["strikethrough","dim"],i)}`:"",u=t?(0,C.styleText)("gray",H):"";return`${o.join(`
|
|
184
184
|
`)}
|
|
@@ -186,17 +186,17 @@ ${u}${l}`}default:{let l=this.state==="error"?"yellow":"cyan",u=t?`${(0,C.styleT
|
|
|
186
186
|
`)}}}}).prompt();var Ze=e=>{let t=e.active??"Yes",o=e.inactive??"No";return new Oo({active:t,inactive:o,signal:e.signal,input:e.input,output:e.output,initialValue:e.initialValue??!0,render(){let i=e.withGuide??ge.withGuide,r=`${St(this.state)} `,n=i?`${(0,C.styleText)("gray",H)} `:"",s=dt(e.output,e.message,n,r),a=`${i?`${(0,C.styleText)("gray",H)}
|
|
187
187
|
`:""}${s}
|
|
188
188
|
`,l=this.value?t:o;switch(this.state){case"submit":{let u=i?`${(0,C.styleText)("gray",H)} `:"";return`${a}${u}${(0,C.styleText)("dim",l)}`}case"cancel":{let u=i?`${(0,C.styleText)("gray",H)} `:"";return`${a}${u}${(0,C.styleText)(["strikethrough","dim"],l)}${i?`
|
|
189
|
-
${(0,C.styleText)("gray",H)}`:""}`}default:{let u=i?`${(0,C.styleText)("cyan",H)} `:"",m=i?(0,C.styleText)("cyan",Ve):"";return`${a}${u}${this.value?`${(0,C.styleText)("green",$o)} ${t}`:`${(0,C.styleText)("dim",
|
|
189
|
+
${(0,C.styleText)("gray",H)}`:""}`}default:{let u=i?`${(0,C.styleText)("cyan",H)} `:"",m=i?(0,C.styleText)("cyan",Ve):"";return`${a}${u}${this.value?`${(0,C.styleText)("green",$o)} ${t}`:`${(0,C.styleText)("dim",Et)} ${(0,C.styleText)("dim",t)}`}${e.vertical?i?`
|
|
190
190
|
${(0,C.styleText)("cyan",H)} `:`
|
|
191
|
-
`:` ${(0,C.styleText)("dim","/")} `}${this.value?`${(0,C.styleText)("dim",
|
|
191
|
+
`:` ${(0,C.styleText)("dim","/")} `}${this.value?`${(0,C.styleText)("dim",Et)} ${(0,C.styleText)("dim",o)}`:`${(0,C.styleText)("green",$o)} ${o}`}
|
|
192
192
|
${m}
|
|
193
|
-
`}}}}).prompt()};var Ln=async(e,t)=>{let o={},i=Object.keys(e);for(let r of i){let n=e[r],s=await n({results:o})?.catch(a=>{throw a});if(typeof t?.onCancel=="function"&&
|
|
193
|
+
`}}}}).prompt()};var Ln=async(e,t)=>{let o={},i=Object.keys(e);for(let r of i){let n=e[r],s=await n({results:o})?.catch(a=>{throw a});if(typeof t?.onCancel=="function"&&F(s)){o[r]="canceled",t.onCancel({results:o});continue}o[r]=s}return o};var te={message:(e=[],{symbol:t=(0,C.styleText)("gray",H),secondarySymbol:o=(0,C.styleText)("gray",H),output:i=process.stdout,spacing:r=1,withGuide:n}={})=>{let s=[],a=n??ge.withGuide,l=a?o:"",u=a?`${t} `:"",m=a?`${o} `:"";for(let f=0;f<r;f++)s.push(l);let p=Array.isArray(e)?e:e.split(`
|
|
194
194
|
`);if(p.length>0){let[f,...y]=p;f.length>0?s.push(`${u}${f}`):s.push(a?t:"");for(let A of y)A.length>0?s.push(`${m}${A}`):s.push(a?o:"")}i.write(`${s.join(`
|
|
195
195
|
`)}
|
|
196
|
-
`)},info:(e,t)=>{te.message(e,{...t,symbol:(0,C.styleText)("blue",Op)})},success:(e,t)=>{te.message(e,{...t,symbol:(0,C.styleText)("green",
|
|
196
|
+
`)},info:(e,t)=>{te.message(e,{...t,symbol:(0,C.styleText)("blue",Op)})},success:(e,t)=>{te.message(e,{...t,symbol:(0,C.styleText)("green",Ep)})},step:(e,t)=>{te.message(e,{...t,symbol:(0,C.styleText)("green",or)})},warn:(e,t)=>{te.message(e,{...t,symbol:(0,C.styleText)("yellow",Bp)})},warning:(e,t)=>{te.warn(e,t)},error:(e,t)=>{te.message(e,{...t,symbol:(0,C.styleText)("red",Ip)})}},Wn=(e="",t)=>{let o=t?.output??process.stdout,i=t?.withGuide??ge.withGuide?`${(0,C.styleText)("gray",Ve)} `:"";o.write(`${i}${(0,C.styleText)("red",e)}
|
|
197
197
|
|
|
198
198
|
`)},Ho=(e="",t)=>{let o=t?.output??process.stdout,i=t?.withGuide??ge.withGuide?`${(0,C.styleText)("gray",Kp)} `:"";o.write(`${i}${e}
|
|
199
|
-
`)},
|
|
199
|
+
`)},Bt=(e="",t)=>{let o=t?.output??process.stdout,i=t?.withGuide??ge.withGuide?`${(0,C.styleText)("gray",H)}
|
|
200
200
|
${(0,C.styleText)("gray",Ve)} `:"";o.write(`${i}${e}
|
|
201
201
|
|
|
202
202
|
`)};var so=(e,t)=>e.split(`
|
|
@@ -217,13 +217,13 @@ ${u}
|
|
|
217
217
|
${l}`)}
|
|
218
218
|
${i?(0,C.styleText)("cyan",Ve):""}
|
|
219
219
|
`}}}}).prompt()},$p=e=>(0,C.styleText)("dim",e),Gp=(e,t,o)=>{let i={hard:!0,trim:!1},r=ct(e,t,i).split(`
|
|
220
|
-
`),n=r.reduce((l,u)=>Math.max(Ue(u),l),0),s=r.map(o).reduce((l,u)=>Math.max(Ue(u),l),0),a=t-(s-n);return ct(e,a,i)},Vn=(e="",t="",o)=>{let i=o?.output??
|
|
220
|
+
`),n=r.reduce((l,u)=>Math.max(Ue(u),l),0),s=r.map(o).reduce((l,u)=>Math.max(Ue(u),l),0),a=t-(s-n);return ct(e,a,i)},Vn=(e="",t="",o)=>{let i=o?.output??Ie.default.stdout,r=o?.withGuide??ge.withGuide,n=o?.format??$p,s=["",...Gp(e,jo(i)-6,n).split(`
|
|
221
221
|
`).map(n),""],a=Ue(t),l=Math.max(s.reduce((f,y)=>{let A=Ue(y);return A>f?A:f},0),a)+2,u=s.map(f=>`${(0,C.styleText)("gray",H)} ${f}${" ".repeat(l-Ue(f))}${(0,C.styleText)("gray",H)}`).join(`
|
|
222
222
|
`),m=r?`${(0,C.styleText)("gray",H)}
|
|
223
|
-
`:"",p=r?
|
|
223
|
+
`:"",p=r?Rp:Tp;i.write(`${m}${(0,C.styleText)("green",or)} ${(0,C.styleText)("reset",t)} ${(0,C.styleText)("gray",Gn.repeat(Math.max(l-a-1,1))+Fp)}
|
|
224
224
|
${u}
|
|
225
225
|
${(0,C.styleText)("gray",p+Gn.repeat(l+2)+Dp)}
|
|
226
|
-
`)},zn=e=>new
|
|
226
|
+
`)},zn=e=>new Eo({validate:e.validate,mask:e.mask??_p,signal:e.signal,input:e.input,output:e.output,render(){let t=e.withGuide??ge.withGuide,o=`${t?`${(0,C.styleText)("gray",H)}
|
|
227
227
|
`:""}${St(this.state)} ${e.message}
|
|
228
228
|
`,i=this.userInputWithCursor,r=this.masked;switch(this.state){case"error":{let n=t?`${(0,C.styleText)("yellow",H)} `:"",s=t?`${(0,C.styleText)("yellow",Ve)} `:"",a=r??"";return e.clearOnError&&this.clear(),`${o.trim()}
|
|
229
229
|
${n}${a}
|
|
@@ -231,17 +231,17 @@ ${s}${(0,C.styleText)("yellow",this.error)}
|
|
|
231
231
|
`}case"submit":{let n=t?`${(0,C.styleText)("gray",H)} `:"",s=r?(0,C.styleText)("dim",r):"";return`${o}${n}${s}`}case"cancel":{let n=t?`${(0,C.styleText)("gray",H)} `:"",s=r?(0,C.styleText)(["strikethrough","dim"],r):"";return`${o}${n}${s}${r&&t?`
|
|
232
232
|
${(0,C.styleText)("gray",H)}`:""}`}default:{let n=t?`${(0,C.styleText)("cyan",H)} `:"",s=t?(0,C.styleText)("cyan",Ve):"";return`${o}${n}${i}
|
|
233
233
|
${s}
|
|
234
|
-
`}}}}).prompt();var
|
|
234
|
+
`}}}}).prompt();var IA={light:oe("\u2500","-"),heavy:oe("\u2501","="),block:oe("\u2588","#")};var Po=(e,t)=>e.includes(`
|
|
235
235
|
`)?e.split(`
|
|
236
236
|
`).map(o=>t(o)).join(`
|
|
237
|
-
`):t(e),ne=e=>{let t=(o,i)=>{let r=o.label??String(o.value);switch(i){case"disabled":return`${(0,C.styleText)("gray",
|
|
237
|
+
`):t(e),ne=e=>{let t=(o,i)=>{let r=o.label??String(o.value);switch(i){case"disabled":return`${(0,C.styleText)("gray",Et)} ${Po(r,n=>(0,C.styleText)("gray",n))}${o.hint?` ${(0,C.styleText)("dim",`(${o.hint??"disabled"})`)}`:""}`;case"selected":return`${Po(r,n=>(0,C.styleText)("dim",n))}`;case"active":return`${(0,C.styleText)("green",$o)} ${r}${o.hint?` ${(0,C.styleText)("dim",`(${o.hint})`)}`:""}`;case"cancelled":return`${Po(r,n=>(0,C.styleText)(["strikethrough","dim"],n))}`;default:return`${(0,C.styleText)("dim",Et)} ${Po(r,n=>(0,C.styleText)("dim",n))}`}};return new Bo({options:e.options,signal:e.signal,input:e.input,output:e.output,initialValue:e.initialValue,render(){let o=e.withGuide??ge.withGuide,i=`${St(this.state)} `,r=`${Mn(this.state)} `,n=dt(e.output,e.message,r,i),s=`${o?`${(0,C.styleText)("gray",H)}
|
|
238
238
|
`:""}${n}
|
|
239
239
|
`;switch(this.state){case"submit":{let a=o?`${(0,C.styleText)("gray",H)} `:"",l=dt(e.output,t(this.options[this.cursor],"selected"),a);return`${s}${l}`}case"cancel":{let a=o?`${(0,C.styleText)("gray",H)} `:"",l=dt(e.output,t(this.options[this.cursor],"cancelled"),a);return`${s}${l}${o?`
|
|
240
240
|
${(0,C.styleText)("gray",H)}`:""}`}default:{let a=o?`${(0,C.styleText)("cyan",H)} `:"",l=o?(0,C.styleText)("cyan",Ve):"",u=s.split(`
|
|
241
241
|
`).length,m=o?2:1;return`${s}${a}${Go({output:e.output,cursor:this.cursor,options:this.options,maxItems:e.maxItems,columnPadding:a.length,rowPadding:u+m,style:(p,f)=>t(p,p.disabled?"disabled":f?"active":"inactive")}).join(`
|
|
242
242
|
${a}`)}
|
|
243
243
|
${l}
|
|
244
|
-
`}}}}).prompt()};var jA=`${(0,C.styleText)("gray",H)} `;var Z=e=>new
|
|
244
|
+
`}}}}).prompt()};var jA=`${(0,C.styleText)("gray",H)} `;var Z=e=>new Io({validate:e.validate,placeholder:e.placeholder,defaultValue:e.defaultValue,initialValue:e.initialValue,output:e.output,signal:e.signal,input:e.input,render(){let t=e?.withGuide??ge.withGuide,o=`${`${t?`${(0,C.styleText)("gray",H)}
|
|
245
245
|
`:""}${St(this.state)} `}${e.message}
|
|
246
246
|
`,i=e.placeholder?(0,C.styleText)("inverse",e.placeholder[0])+(0,C.styleText)("dim",e.placeholder.slice(1)):(0,C.styleText)(["inverse","hidden"],"_"),r=this.userInput?this.userInputWithCursor:i,n=this.value??"";switch(this.state){case"error":{let s=this.error?` ${(0,C.styleText)("yellow",this.error)}`:"",a=t?`${(0,C.styleText)("yellow",H)} `:"",l=t?(0,C.styleText)("yellow",Ve):"";return`${o.trim()}
|
|
247
247
|
${a}${r}
|
|
@@ -249,13 +249,13 @@ ${l}${s}
|
|
|
249
249
|
`}case"submit":{let s=n?` ${(0,C.styleText)("dim",n)}`:"",a=t?(0,C.styleText)("gray",H):"";return`${o}${a}${s}`}case"cancel":{let s=n?` ${(0,C.styleText)(["strikethrough","dim"],n)}`:"",a=t?(0,C.styleText)("gray",H):"";return`${o}${a}${s}${n.trim()?`
|
|
250
250
|
${a}`:""}`}default:{let s=t?`${(0,C.styleText)("cyan",H)} `:"",a=t?(0,C.styleText)("cyan",Ve):"";return`${o}${s}${r}
|
|
251
251
|
${a}
|
|
252
|
-
`}}}}).prompt();var yo=me(Je(),1);Kt();process.env.RESEND_USER_AGENT=`resend-cli:${se}`;var ut=new TextEncoder,Zn="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",ao=new Uint8Array(256);for(let e=0;e<Zn.length;e++)ao[Zn.charCodeAt(e)]=e;function Qo(e){let t=Math.ceil(e.length/4)*3,o=e.length,i=0;e.length%4===3?t--:e.length%4===2?t-=2:e[e.length-1]==="="&&(t--,e[e.length-2]==="="&&t--);let r=new ArrayBuffer(t),n=new Uint8Array(r);for(let s=0;s<o;s+=4){let a=ao[e.charCodeAt(s)],l=ao[e.charCodeAt(s+1)],u=ao[e.charCodeAt(s+2)],m=ao[e.charCodeAt(s+3)];n[i++]=a<<2|l>>4,n[i++]=(l&15)<<4|u>>2,n[i++]=(u&3)<<6|m&63}return r}var Qp=new Map([["iso-8859-8-i","iso-8859-8"],["iso-8859-8-e","iso-8859-8"]]);function
|
|
252
|
+
`}}}}).prompt();var yo=me(Je(),1);Kt();process.env.RESEND_USER_AGENT=`resend-cli:${se}`;var ut=new TextEncoder,Zn="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",ao=new Uint8Array(256);for(let e=0;e<Zn.length;e++)ao[Zn.charCodeAt(e)]=e;function Qo(e){let t=Math.ceil(e.length/4)*3,o=e.length,i=0;e.length%4===3?t--:e.length%4===2?t-=2:e[e.length-1]==="="&&(t--,e[e.length-2]==="="&&t--);let r=new ArrayBuffer(t),n=new Uint8Array(r);for(let s=0;s<o;s+=4){let a=ao[e.charCodeAt(s)],l=ao[e.charCodeAt(s+1)],u=ao[e.charCodeAt(s+2)],m=ao[e.charCodeAt(s+3)];n[i++]=a<<2|l>>4,n[i++]=(l&15)<<4|u>>2,n[i++]=(u&3)<<6|m&63}return r}var Qp=new Map([["iso-8859-8-i","iso-8859-8"],["iso-8859-8-e","iso-8859-8"]]);function It(e){e=(e||"utf8").trim().toLowerCase(),e=Qp.get(e)||e;let t;try{t=new TextDecoder(e)}catch{t=new TextDecoder("windows-1252")}return t}async function mt(e){if("arrayBuffer"in e)return await e.arrayBuffer();let t=new FileReader;return new Promise((o,i)=>{t.onload=function(r){o(r.target.result)},t.onerror=function(r){i(t.error)},t.readAsArrayBuffer(e)})}function es(e){return e>=48&&e<=57||e>=97&&e<=102||e>=65&&e<=70?String.fromCharCode(e):!1}function Np(e,t,o){let i=e.indexOf("*");i>=0&&(e=e.substr(0,i)),t=t.toUpperCase();let r;if(t==="Q"){o=o.replace(/=\s+([0-9a-fA-F])/g,"=$1").replace(/[_\s]/g," ");let n=ut.encode(o),s=[];for(let l=0,u=n.length;l<u;l++){let m=n[l];if(l<=u-2&&m===61){let p=es(n[l+1]),f=es(n[l+2]);if(p&&f){let y=parseInt(p+f,16);s.push(y),l+=2;continue}}s.push(m)}r=new ArrayBuffer(s.length);let a=new DataView(r);for(let l=0,u=s.length;l<u;l++)a.setUint8(l,s[l])}else t==="B"?r=Qo(o.replace(/[^a-zA-Z0-9\+\/=]+/g,"")):r=ut.encode(o);return It(e).decode(r)}function kt(e){let t=!0,o=!1;for(;!o;){let i=(e||"").toString().replace(/(=\?([^?]+)\?[Bb]\?([^?]*)\?=)\s*(?==\?([^?]+)\?[Bb]\?[^?]*\?=)/g,(r,n,s,a,l)=>t&&s===l&&a.length%4===0&&!/=$/.test(a)?n+"__\0JOIN\0__":r).replace(/(=\?([^?]+)\?[Qq]\?[^?]*\?=)\s*(?==\?([^?]+)\?[Qq]\?[^?]*\?=)/g,(r,n,s,a)=>t&&s===a?n+"__\0JOIN\0__":r).replace(/(\?=)?__\x00JOIN\x00__(=\?([^?]+)\?[QqBb]\?)?/g,"").replace(/(=\?[^?]+\?[QqBb]\?[^?]*\?=)\s+(?==\?[^?]+\?[QqBb]\?[^?]*\?=)/g,"$1").replace(/=\?([\w_\-*]+)\?([QqBb])\?([^?]*)\?=/g,(r,n,s,a)=>Np(n,s,a));if(t&&i.indexOf("\uFFFD")>=0)t=!1;else return i}}function Mp(e,t){t=t||"utf-8";let o=[];for(let n=0;n<e.length;n++){let s=e.charAt(n);if(s==="%"&&/^[a-f0-9]{2}/i.test(e.substr(n+1,2))){let a=e.substr(n+1,2);n+=2,o.push(parseInt(a,16))}else if(s.charCodeAt(0)>126){s=ut.encode(s);for(let a=0;a<s.length;a++)o.push(s[a])}else o.push(s.charCodeAt(0))}let i=new ArrayBuffer(o.length),r=new DataView(i);for(let n=0,s=o.length;n<s;n++)r.setUint8(n,o[n]);return It(t).decode(i)}function ts(e){let t=new Map;Object.keys(e.params).forEach(o=>{let i=o.match(/\*((\d+)\*?)?$/);if(!i)return;let r=o.substr(0,i.index).toLowerCase(),n=Number(i[2])||0,s;t.has(r)?s=t.get(r):(s={charset:!1,values:[]},t.set(r,s));let a=e.params[o];n===0&&i[0].charAt(i[0].length-1)==="*"&&(i=a.match(/^([^']*)'[^']*'(.*)$/))&&(s.charset=i[1]||"utf-8",a=i[2]),s.values.push({nr:n,value:a}),delete e.params[o]}),t.forEach((o,i)=>{e.params[i]=Mp(o.values.sort((r,n)=>r.nr-n.nr).map(r=>r.value).join(""),o.charset)})}var lo=class{constructor(){this.chunks=[]}update(t){this.chunks.push(t),this.chunks.push(`
|
|
253
253
|
`)}finalize(){return mt(new Blob(this.chunks,{type:"application/octet-stream"}))}};var co=class{constructor(t){t=t||{},this.decoder=t.decoder||new TextDecoder,this.maxChunkSize=100*1024,this.chunks=[],this.remainder=""}update(t){let o=this.decoder.decode(t);if(o=o.replace(/[^a-zA-Z0-9+\/]+/g,""),this.remainder+=o,this.remainder.length>=this.maxChunkSize){let i=Math.floor(this.remainder.length/4)*4,r;i===this.remainder.length?(r=this.remainder,this.remainder=""):(r=this.remainder.substr(0,i),this.remainder=this.remainder.substr(i)),r.length&&this.chunks.push(Qo(r))}}finalize(){return this.remainder&&!/^=+$/.test(this.remainder)&&this.chunks.push(Qo(this.remainder)),mt(new Blob(this.chunks,{type:"application/octet-stream"}))}};var os=/^=[a-f0-9]{2}$/i,qp=/(?==[a-f0-9]{2})/i,Lp=/=\r?\n/g,Wp=/=[a-fA-F0-9]?$/,uo=class{constructor(t){t=t||{},this.decoder=t.decoder||new TextDecoder,this.maxChunkSize=100*1024,this.remainder="",this.chunks=[]}decodeQPBytes(t){let o=new ArrayBuffer(t.length),i=new DataView(o);for(let r=0,n=t.length;r<n;r++)i.setUint8(r,parseInt(t[r],16));return o}decodeChunks(t){t=t.replace(Lp,"");let o=t.split(qp),i=[];for(let r of o){if(r.charAt(0)!=="="){i.length&&(this.chunks.push(this.decodeQPBytes(i)),i=[]),this.chunks.push(r);continue}if(r.length===3){os.test(r)?i.push(r.substr(1)):(i.length&&(this.chunks.push(this.decodeQPBytes(i)),i=[]),this.chunks.push(r));continue}if(r.length>3){let n=r.substr(0,3);os.test(n)?(i.push(r.substr(1,2)),this.chunks.push(this.decodeQPBytes(i)),i=[],r=r.substr(3),this.chunks.push(r)):(i.length&&(this.chunks.push(this.decodeQPBytes(i)),i=[]),this.chunks.push(r))}}i.length&&this.chunks.push(this.decodeQPBytes(i))}update(t){let o=this.decoder.decode(t)+`
|
|
254
|
-
`;if(o=this.remainder+o,o.length<this.maxChunkSize){this.remainder=o;return}this.remainder="";let i=o.match(Wp);if(i){if(i.index===0){this.remainder=o;return}this.remainder=o.substr(i.index),o=o.substr(0,i.index)}this.decodeChunks(o)}finalize(){return this.remainder.length&&(this.decodeChunks(this.remainder),this.remainder=""),mt(new Blob(this.chunks,{type:"application/octet-stream"}))}};var Jp=
|
|
254
|
+
`;if(o=this.remainder+o,o.length<this.maxChunkSize){this.remainder=o;return}this.remainder="";let i=o.match(Wp);if(i){if(i.index===0){this.remainder=o;return}this.remainder=o.substr(i.index),o=o.substr(0,i.index)}this.decodeChunks(o)}finalize(){return this.remainder.length&&(this.decodeChunks(this.remainder),this.remainder=""),mt(new Blob(this.chunks,{type:"application/octet-stream"}))}};var Jp=It(),jt=class{constructor(t){if(this.options=t||{},this.postalMime=this.options.postalMime,this.root=!!this.options.parentNode,this.childNodes=[],this.options.parentNode){if(this.parentNode=this.options.parentNode,this.depth=this.parentNode.depth+1,this.depth>this.options.maxNestingDepth)throw new Error(`Maximum MIME nesting depth of ${this.options.maxNestingDepth} levels exceeded`);this.options.parentNode.childNodes.push(this)}else this.depth=0;this.state="header",this.headerLines=[],this.headerSize=0;let i=(this.options.parentMultipartType||null)==="digest"?"message/rfc822":"text/plain";this.contentType={value:i,default:!0},this.contentTransferEncoding={value:"8bit"},this.contentDisposition={value:""},this.headers=[],this.contentDecoder=!1}setupContentDecoder(t){/base64/i.test(t)?this.contentDecoder=new co:/quoted-printable/i.test(t)?this.contentDecoder=new uo({decoder:It(this.contentType.parsed.params.charset)}):this.contentDecoder=new lo}async finalize(){if(this.state==="finished")return;this.state==="header"&&this.processHeaders();let t=this.postalMime.boundaries;for(let o=t.length-1;o>=0;o--)if(t[o].node===this){t.splice(o,1);break}await this.finalizeChildNodes(),this.content=this.contentDecoder?await this.contentDecoder.finalize():null,this.contentDecoder=!1,this.state="finished"}async finalizeChildNodes(){for(let t of this.childNodes)await t.finalize()}stripComments(t){let o="",i=0,r=!1,n=!1;for(let s=0;s<t.length;s++){let a=t.charAt(s);if(r){i===0&&(o+=a),r=!1;continue}if(a==="\\"){r=!0,i===0&&(o+=a);continue}if(a==='"'&&i===0){n=!n,o+=a;continue}if(!n){if(a==="("){i++;continue}if(a===")"&&i>0){i--;continue}}i===0&&(o+=a)}return o}parseStructuredHeader(t){t=this.stripComments(t);let o={value:!1,params:{}},i=!1,r="",n="value",s=!1,a=!1,l;for(let u=0,m=t.length;u<m;u++)switch(l=t.charAt(u),n){case"key":if(l==="="){i=r.trim().toLowerCase(),n="value",r="";break}r+=l;break;case"value":if(a)r+=l;else if(l==="\\"){a=!0;continue}else s&&l===s?s=!1:!s&&l==='"'?s=l:!s&&l===";"?(i===!1?o.value=r.trim():o.params[i]=r.trim(),n="key",r=""):r+=l;a=!1;break}return r=r.trim(),n==="value"?i===!1?o.value=r:o.params[i]=r:r&&(o.params[r.toLowerCase()]=""),o.value&&(o.value=o.value.toLowerCase()),ts(o),o}decodeFlowedText(t,o){return t.split(/\r?\n/).reduce((i,r)=>i.endsWith(" ")&&i!=="-- "&&!i.endsWith(`
|
|
255
255
|
-- `)?o?i.slice(0,-1)+r:i+r:i+`
|
|
256
|
-
`+r).replace(/^ /gm,"")}getTextContent(){if(!this.content)return"";let t=
|
|
256
|
+
`+r).replace(/^ /gm,"")}getTextContent(){if(!this.content)return"";let t=It(this.contentType.parsed.params.charset).decode(this.content);return/^flowed$/i.test(this.contentType.parsed.params.format)&&(t=this.decodeFlowedText(t,/^yes$/i.test(this.contentType.parsed.params.delsp))),t}processHeaders(){for(let t=this.headerLines.length-1;t>=0;t--){let o=this.headerLines[t];t&&/^\s/.test(o)&&(this.headerLines[t-1]+=`
|
|
257
257
|
`+o,this.headerLines.splice(t,1))}this.rawHeaderLines=[];for(let t=this.headerLines.length-1;t>=0;t--){let o=this.headerLines[t],i=o.indexOf(":"),r=i<0?o.trim():o.substr(0,i).trim();this.rawHeaderLines.push({key:r.toLowerCase(),line:o});let n=o.replace(/\s+/g," ");i=n.indexOf(":");let s=i<0?n.trim():n.substr(0,i).trim(),a=i<0?"":n.substr(i+1).trim();switch(this.headers.push({key:s.toLowerCase(),originalKey:s,value:a}),s.toLowerCase()){case"content-type":this.contentType.default&&(this.contentType={value:a,parsed:{}});break;case"content-transfer-encoding":this.contentTransferEncoding={value:a,parsed:{}};break;case"content-disposition":this.contentDisposition={value:a,parsed:{}};break;case"content-id":this.contentId=a;break;case"content-description":this.contentDescription=a;break}}this.contentType.parsed=this.parseStructuredHeader(this.contentType.value),this.contentType.multipart=/^multipart\//i.test(this.contentType.parsed.value)?this.contentType.parsed.value.substr(this.contentType.parsed.value.indexOf("/")+1):!1,this.contentType.multipart&&this.contentType.parsed.params.boundary&&this.postalMime.boundaries.push({value:ut.encode(this.contentType.parsed.params.boundary),node:this}),this.contentDisposition.parsed=this.parseStructuredHeader(this.contentDisposition.value),this.contentTransferEncoding.encoding=this.contentTransferEncoding.value.toLowerCase().split(/[^\w-]/).shift(),this.setupContentDecoder(this.contentTransferEncoding.encoding)}feed(t){switch(this.state){case"header":if(!t.length)return this.state="body",this.processHeaders();if(this.headerSize+=t.length,this.headerSize>this.options.maxHeadersSize)throw new Error(`Maximum header size of ${this.options.maxHeadersSize} bytes exceeded`);this.headerLines.push(Jp.decode(t));break;case"body":this.contentDecoder.update(t)}}};var Vp={"Æ":"\xC6","Æ":"\xC6","&":"&","&":"&","Á":"\xC1","Á":"\xC1","Ă":"\u0102","Â":"\xC2","Â":"\xC2","А":"\u0410","𝔄":"\u{1D504}","À":"\xC0","À":"\xC0","Α":"\u0391","Ā":"\u0100","⩓":"\u2A53","Ą":"\u0104","𝔸":"\u{1D538}","⁡":"\u2061","Å":"\xC5","Å":"\xC5","𝒜":"\u{1D49C}","≔":"\u2254","Ã":"\xC3","Ã":"\xC3","Ä":"\xC4","Ä":"\xC4","∖":"\u2216","⫧":"\u2AE7","⌆":"\u2306","Б":"\u0411","∵":"\u2235","ℬ":"\u212C","Β":"\u0392","𝔅":"\u{1D505}","𝔹":"\u{1D539}","˘":"\u02D8","ℬ":"\u212C","≎":"\u224E","Ч":"\u0427","©":"\xA9","©":"\xA9","Ć":"\u0106","⋒":"\u22D2","ⅅ":"\u2145","ℭ":"\u212D","Č":"\u010C","Ç":"\xC7","Ç":"\xC7","Ĉ":"\u0108","∰":"\u2230","Ċ":"\u010A","¸":"\xB8","·":"\xB7","ℭ":"\u212D","Χ":"\u03A7","⊙":"\u2299","⊖":"\u2296","⊕":"\u2295","⊗":"\u2297","∲":"\u2232","”":"\u201D","’":"\u2019","∷":"\u2237","⩴":"\u2A74","≡":"\u2261","∯":"\u222F","∮":"\u222E","ℂ":"\u2102","∐":"\u2210","∳":"\u2233","⨯":"\u2A2F","𝒞":"\u{1D49E}","⋓":"\u22D3","≍":"\u224D","ⅅ":"\u2145","⤑":"\u2911","Ђ":"\u0402","Ѕ":"\u0405","Џ":"\u040F","‡":"\u2021","↡":"\u21A1","⫤":"\u2AE4","Ď":"\u010E","Д":"\u0414","∇":"\u2207","Δ":"\u0394","𝔇":"\u{1D507}","´":"\xB4","˙":"\u02D9","˝":"\u02DD","`":"`","˜":"\u02DC","⋄":"\u22C4","ⅆ":"\u2146","𝔻":"\u{1D53B}","¨":"\xA8","⃜":"\u20DC","≐":"\u2250","∯":"\u222F","¨":"\xA8","⇓":"\u21D3","⇐":"\u21D0","⇔":"\u21D4","⫤":"\u2AE4","⟸":"\u27F8","⟺":"\u27FA","⟹":"\u27F9","⇒":"\u21D2","⊨":"\u22A8","⇑":"\u21D1","⇕":"\u21D5","∥":"\u2225","↓":"\u2193","⤓":"\u2913","⇵":"\u21F5","̑":"\u0311","⥐":"\u2950","⥞":"\u295E","↽":"\u21BD","⥖":"\u2956","⥟":"\u295F","⇁":"\u21C1","⥗":"\u2957","⊤":"\u22A4","↧":"\u21A7","⇓":"\u21D3","𝒟":"\u{1D49F}","Đ":"\u0110","Ŋ":"\u014A","Ð":"\xD0","Ð":"\xD0","É":"\xC9","É":"\xC9","Ě":"\u011A","Ê":"\xCA","Ê":"\xCA","Э":"\u042D","Ė":"\u0116","𝔈":"\u{1D508}","È":"\xC8","È":"\xC8","∈":"\u2208","Ē":"\u0112","◻":"\u25FB","▫":"\u25AB","Ę":"\u0118","𝔼":"\u{1D53C}","Ε":"\u0395","⩵":"\u2A75","≂":"\u2242","⇌":"\u21CC","ℰ":"\u2130","⩳":"\u2A73","Η":"\u0397","Ë":"\xCB","Ë":"\xCB","∃":"\u2203","ⅇ":"\u2147","Ф":"\u0424","𝔉":"\u{1D509}","◼":"\u25FC","▪":"\u25AA","𝔽":"\u{1D53D}","∀":"\u2200","ℱ":"\u2131","ℱ":"\u2131","Ѓ":"\u0403",">":">",">":">","Γ":"\u0393","Ϝ":"\u03DC","Ğ":"\u011E","Ģ":"\u0122","Ĝ":"\u011C","Г":"\u0413","Ġ":"\u0120","𝔊":"\u{1D50A}","⋙":"\u22D9","𝔾":"\u{1D53E}","≥":"\u2265","⋛":"\u22DB","≧":"\u2267","⪢":"\u2AA2","≷":"\u2277","⩾":"\u2A7E","≳":"\u2273","𝒢":"\u{1D4A2}","≫":"\u226B","Ъ":"\u042A","ˇ":"\u02C7","^":"^","Ĥ":"\u0124","ℌ":"\u210C","ℋ":"\u210B","ℍ":"\u210D","─":"\u2500","ℋ":"\u210B","Ħ":"\u0126","≎":"\u224E","≏":"\u224F","Е":"\u0415","IJ":"\u0132","Ё":"\u0401","Í":"\xCD","Í":"\xCD","Î":"\xCE","Î":"\xCE","И":"\u0418","İ":"\u0130","ℑ":"\u2111","Ì":"\xCC","Ì":"\xCC","ℑ":"\u2111","Ī":"\u012A","ⅈ":"\u2148","⇒":"\u21D2","∬":"\u222C","∫":"\u222B","⋂":"\u22C2","⁣":"\u2063","⁢":"\u2062","Į":"\u012E","𝕀":"\u{1D540}","Ι":"\u0399","ℐ":"\u2110","Ĩ":"\u0128","І":"\u0406","Ï":"\xCF","Ï":"\xCF","Ĵ":"\u0134","Й":"\u0419","𝔍":"\u{1D50D}","𝕁":"\u{1D541}","𝒥":"\u{1D4A5}","Ј":"\u0408","Є":"\u0404","Х":"\u0425","Ќ":"\u040C","Κ":"\u039A","Ķ":"\u0136","К":"\u041A","𝔎":"\u{1D50E}","𝕂":"\u{1D542}","𝒦":"\u{1D4A6}","Љ":"\u0409","<":"<","<":"<","Ĺ":"\u0139","Λ":"\u039B","⟪":"\u27EA","ℒ":"\u2112","↞":"\u219E","Ľ":"\u013D","Ļ":"\u013B","Л":"\u041B","⟨":"\u27E8","←":"\u2190","⇤":"\u21E4","⇆":"\u21C6","⌈":"\u2308","⟦":"\u27E6","⥡":"\u2961","⇃":"\u21C3","⥙":"\u2959","⌊":"\u230A","↔":"\u2194","⥎":"\u294E","⊣":"\u22A3","↤":"\u21A4","⥚":"\u295A","⊲":"\u22B2","⧏":"\u29CF","⊴":"\u22B4","⥑":"\u2951","⥠":"\u2960","↿":"\u21BF","⥘":"\u2958","↼":"\u21BC","⥒":"\u2952","⇐":"\u21D0","⇔":"\u21D4","⋚":"\u22DA","≦":"\u2266","≶":"\u2276","⪡":"\u2AA1","⩽":"\u2A7D","≲":"\u2272","𝔏":"\u{1D50F}","⋘":"\u22D8","⇚":"\u21DA","Ŀ":"\u013F","⟵":"\u27F5","⟷":"\u27F7","⟶":"\u27F6","⟸":"\u27F8","⟺":"\u27FA","⟹":"\u27F9","𝕃":"\u{1D543}","↙":"\u2199","↘":"\u2198","ℒ":"\u2112","↰":"\u21B0","Ł":"\u0141","≪":"\u226A","⤅":"\u2905","М":"\u041C"," ":"\u205F","ℳ":"\u2133","𝔐":"\u{1D510}","∓":"\u2213","𝕄":"\u{1D544}","ℳ":"\u2133","Μ":"\u039C","Њ":"\u040A","Ń":"\u0143","Ň":"\u0147","Ņ":"\u0145","Н":"\u041D","​":"\u200B","​":"\u200B","​":"\u200B","​":"\u200B","≫":"\u226B","≪":"\u226A","
":`
|
|
258
|
-
`,"𝔑":"\u{1D511}","⁠":"\u2060"," ":"\xA0","ℕ":"\u2115","⫬":"\u2AEC","≢":"\u2262","≭":"\u226D","∦":"\u2226","∉":"\u2209","≠":"\u2260","≂̸":"\u2242\u0338","∄":"\u2204","≯":"\u226F","≱":"\u2271","≧̸":"\u2267\u0338","≫̸":"\u226B\u0338","≹":"\u2279","⩾̸":"\u2A7E\u0338","≵":"\u2275","≎̸":"\u224E\u0338","≏̸":"\u224F\u0338","⋪":"\u22EA","⧏̸":"\u29CF\u0338","⋬":"\u22EC","≮":"\u226E","≰":"\u2270","≸":"\u2278","≪̸":"\u226A\u0338","⩽̸":"\u2A7D\u0338","≴":"\u2274","⪢̸":"\u2AA2\u0338","⪡̸":"\u2AA1\u0338","⊀":"\u2280","⪯̸":"\u2AAF\u0338","⋠":"\u22E0","∌":"\u220C","⋫":"\u22EB","⧐̸":"\u29D0\u0338","⋭":"\u22ED","⊏̸":"\u228F\u0338","⋢":"\u22E2","⊐̸":"\u2290\u0338","⋣":"\u22E3","⊂⃒":"\u2282\u20D2","⊈":"\u2288","⊁":"\u2281","⪰̸":"\u2AB0\u0338","⋡":"\u22E1","≿̸":"\u227F\u0338","⊃⃒":"\u2283\u20D2","⊉":"\u2289","≁":"\u2241","≄":"\u2244","≇":"\u2247","≉":"\u2249","∤":"\u2224","𝒩":"\u{1D4A9}","Ñ":"\xD1","Ñ":"\xD1","Ν":"\u039D","Œ":"\u0152","Ó":"\xD3","Ó":"\xD3","Ô":"\xD4","Ô":"\xD4","О":"\u041E","Ő":"\u0150","𝔒":"\u{1D512}","Ò":"\xD2","Ò":"\xD2","Ō":"\u014C","Ω":"\u03A9","Ο":"\u039F","𝕆":"\u{1D546}","“":"\u201C","‘":"\u2018","⩔":"\u2A54","𝒪":"\u{1D4AA}","Ø":"\xD8","Ø":"\xD8","Õ":"\xD5","Õ":"\xD5","⨷":"\u2A37","Ö":"\xD6","Ö":"\xD6","‾":"\u203E","⏞":"\u23DE","⎴":"\u23B4","⏜":"\u23DC","∂":"\u2202","П":"\u041F","𝔓":"\u{1D513}","Φ":"\u03A6","Π":"\u03A0","±":"\xB1","ℌ":"\u210C","ℙ":"\u2119","⪻":"\u2ABB","≺":"\u227A","⪯":"\u2AAF","≼":"\u227C","≾":"\u227E","″":"\u2033","∏":"\u220F","∷":"\u2237","∝":"\u221D","𝒫":"\u{1D4AB}","Ψ":"\u03A8",""":'"',""":'"',"𝔔":"\u{1D514}","ℚ":"\u211A","𝒬":"\u{1D4AC}","⤐":"\u2910","®":"\xAE","®":"\xAE","Ŕ":"\u0154","⟫":"\u27EB","↠":"\u21A0","⤖":"\u2916","Ř":"\u0158","Ŗ":"\u0156","Р":"\u0420","ℜ":"\u211C","∋":"\u220B","⇋":"\u21CB","⥯":"\u296F","ℜ":"\u211C","Ρ":"\u03A1","⟩":"\u27E9","→":"\u2192","⇥":"\u21E5","⇄":"\u21C4","⌉":"\u2309","⟧":"\u27E7","⥝":"\u295D","⇂":"\u21C2","⥕":"\u2955","⌋":"\u230B","⊢":"\u22A2","↦":"\u21A6","⥛":"\u295B","⊳":"\u22B3","⧐":"\u29D0","⊵":"\u22B5","⥏":"\u294F","⥜":"\u295C","↾":"\u21BE","⥔":"\u2954","⇀":"\u21C0","⥓":"\u2953","⇒":"\u21D2","ℝ":"\u211D","⥰":"\u2970","⇛":"\u21DB","ℛ":"\u211B","↱":"\u21B1","⧴":"\u29F4","Щ":"\u0429","Ш":"\u0428","Ь":"\u042C","Ś":"\u015A","⪼":"\u2ABC","Š":"\u0160","Ş":"\u015E","Ŝ":"\u015C","С":"\u0421","𝔖":"\u{1D516}","↓":"\u2193","←":"\u2190","→":"\u2192","↑":"\u2191","Σ":"\u03A3","∘":"\u2218","𝕊":"\u{1D54A}","√":"\u221A","□":"\u25A1","⊓":"\u2293","⊏":"\u228F","⊑":"\u2291","⊐":"\u2290","⊒":"\u2292","⊔":"\u2294","𝒮":"\u{1D4AE}","⋆":"\u22C6","⋐":"\u22D0","⋐":"\u22D0","⊆":"\u2286","≻":"\u227B","⪰":"\u2AB0","≽":"\u227D","≿":"\u227F","∋":"\u220B","∑":"\u2211","⋑":"\u22D1","⊃":"\u2283","⊇":"\u2287","⋑":"\u22D1","Þ":"\xDE","Þ":"\xDE","™":"\u2122","Ћ":"\u040B","Ц":"\u0426","	":" ","Τ":"\u03A4","Ť":"\u0164","Ţ":"\u0162","Т":"\u0422","𝔗":"\u{1D517}","∴":"\u2234","Θ":"\u0398","  ":"\u205F\u200A"," ":"\u2009","∼":"\u223C","≃":"\u2243","≅":"\u2245","≈":"\u2248","𝕋":"\u{1D54B}","⃛":"\u20DB","𝒯":"\u{1D4AF}","Ŧ":"\u0166","Ú":"\xDA","Ú":"\xDA","↟":"\u219F","⥉":"\u2949","Ў":"\u040E","Ŭ":"\u016C","Û":"\xDB","Û":"\xDB","У":"\u0423","Ű":"\u0170","𝔘":"\u{1D518}","Ù":"\xD9","Ù":"\xD9","Ū":"\u016A","_":"_","⏟":"\u23DF","⎵":"\u23B5","⏝":"\u23DD","⋃":"\u22C3","⊎":"\u228E","Ų":"\u0172","𝕌":"\u{1D54C}","↑":"\u2191","⤒":"\u2912","⇅":"\u21C5","↕":"\u2195","⥮":"\u296E","⊥":"\u22A5","↥":"\u21A5","⇑":"\u21D1","⇕":"\u21D5","↖":"\u2196","↗":"\u2197","ϒ":"\u03D2","Υ":"\u03A5","Ů":"\u016E","𝒰":"\u{1D4B0}","Ũ":"\u0168","Ü":"\xDC","Ü":"\xDC","⊫":"\u22AB","⫫":"\u2AEB","В":"\u0412","⊩":"\u22A9","⫦":"\u2AE6","⋁":"\u22C1","‖":"\u2016","‖":"\u2016","∣":"\u2223","|":"|","❘":"\u2758","≀":"\u2240"," ":"\u200A","𝔙":"\u{1D519}","𝕍":"\u{1D54D}","𝒱":"\u{1D4B1}","⊪":"\u22AA","Ŵ":"\u0174","⋀":"\u22C0","𝔚":"\u{1D51A}","𝕎":"\u{1D54E}","𝒲":"\u{1D4B2}","𝔛":"\u{1D51B}","Ξ":"\u039E","𝕏":"\u{1D54F}","𝒳":"\u{1D4B3}","Я":"\u042F","Ї":"\u0407","Ю":"\u042E","Ý":"\xDD","Ý":"\xDD","Ŷ":"\u0176","Ы":"\u042B","𝔜":"\u{1D51C}","𝕐":"\u{1D550}","𝒴":"\u{1D4B4}","Ÿ":"\u0178","Ж":"\u0416","Ź":"\u0179","Ž":"\u017D","З":"\u0417","Ż":"\u017B","​":"\u200B","Ζ":"\u0396","ℨ":"\u2128","ℤ":"\u2124","𝒵":"\u{1D4B5}","á":"\xE1","á":"\xE1","ă":"\u0103","∾":"\u223E","∾̳":"\u223E\u0333","∿":"\u223F","â":"\xE2","â":"\xE2","´":"\xB4","´":"\xB4","а":"\u0430","æ":"\xE6","æ":"\xE6","⁡":"\u2061","𝔞":"\u{1D51E}","à":"\xE0","à":"\xE0","ℵ":"\u2135","ℵ":"\u2135","α":"\u03B1","ā":"\u0101","⨿":"\u2A3F","&":"&","&":"&","∧":"\u2227","⩕":"\u2A55","⩜":"\u2A5C","⩘":"\u2A58","⩚":"\u2A5A","∠":"\u2220","⦤":"\u29A4","∠":"\u2220","∡":"\u2221","⦨":"\u29A8","⦩":"\u29A9","⦪":"\u29AA","⦫":"\u29AB","⦬":"\u29AC","⦭":"\u29AD","⦮":"\u29AE","⦯":"\u29AF","∟":"\u221F","⊾":"\u22BE","⦝":"\u299D","∢":"\u2222","Å":"\xC5","⍼":"\u237C","ą":"\u0105","𝕒":"\u{1D552}","≈":"\u2248","⩰":"\u2A70","⩯":"\u2A6F","≊":"\u224A","≋":"\u224B","'":"'","≈":"\u2248","≊":"\u224A","å":"\xE5","å":"\xE5","𝒶":"\u{1D4B6}","*":"*","≈":"\u2248","≍":"\u224D","ã":"\xE3","ã":"\xE3","ä":"\xE4","ä":"\xE4","∳":"\u2233","⨑":"\u2A11","⫭":"\u2AED","≌":"\u224C","϶":"\u03F6","‵":"\u2035","∽":"\u223D","⋍":"\u22CD","⊽":"\u22BD","⌅":"\u2305","⌅":"\u2305","⎵":"\u23B5","⎶":"\u23B6","≌":"\u224C","б":"\u0431","„":"\u201E","∵":"\u2235","∵":"\u2235","⦰":"\u29B0","϶":"\u03F6","ℬ":"\u212C","β":"\u03B2","ℶ":"\u2136","≬":"\u226C","𝔟":"\u{1D51F}","⋂":"\u22C2","◯":"\u25EF","⋃":"\u22C3","⨀":"\u2A00","⨁":"\u2A01","⨂":"\u2A02","⨆":"\u2A06","★":"\u2605","▽":"\u25BD","△":"\u25B3","⨄":"\u2A04","⋁":"\u22C1","⋀":"\u22C0","⤍":"\u290D","⧫":"\u29EB","▪":"\u25AA","▴":"\u25B4","▾":"\u25BE","◂":"\u25C2","▸":"\u25B8","␣":"\u2423","▒":"\u2592","░":"\u2591","▓":"\u2593","█":"\u2588","=⃥":"=\u20E5","≡⃥":"\u2261\u20E5","⌐":"\u2310","𝕓":"\u{1D553}","⊥":"\u22A5","⊥":"\u22A5","⋈":"\u22C8","╗":"\u2557","╔":"\u2554","╖":"\u2556","╓":"\u2553","═":"\u2550","╦":"\u2566","╩":"\u2569","╤":"\u2564","╧":"\u2567","╝":"\u255D","╚":"\u255A","╜":"\u255C","╙":"\u2559","║":"\u2551","╬":"\u256C","╣":"\u2563","╠":"\u2560","╫":"\u256B","╢":"\u2562","╟":"\u255F","⧉":"\u29C9","╕":"\u2555","╒":"\u2552","┐":"\u2510","┌":"\u250C","─":"\u2500","╥":"\u2565","╨":"\u2568","┬":"\u252C","┴":"\u2534","⊟":"\u229F","⊞":"\u229E","⊠":"\u22A0","╛":"\u255B","╘":"\u2558","┘":"\u2518","└":"\u2514","│":"\u2502","╪":"\u256A","╡":"\u2561","╞":"\u255E","┼":"\u253C","┤":"\u2524","├":"\u251C","‵":"\u2035","˘":"\u02D8","¦":"\xA6","¦":"\xA6","𝒷":"\u{1D4B7}","⁏":"\u204F","∽":"\u223D","⋍":"\u22CD","\":"\\","⧅":"\u29C5","⟈":"\u27C8","•":"\u2022","•":"\u2022","≎":"\u224E","⪮":"\u2AAE","≏":"\u224F","≏":"\u224F","ć":"\u0107","∩":"\u2229","⩄":"\u2A44","⩉":"\u2A49","⩋":"\u2A4B","⩇":"\u2A47","⩀":"\u2A40","∩︀":"\u2229\uFE00","⁁":"\u2041","ˇ":"\u02C7","⩍":"\u2A4D","č":"\u010D","ç":"\xE7","ç":"\xE7","ĉ":"\u0109","⩌":"\u2A4C","⩐":"\u2A50","ċ":"\u010B","¸":"\xB8","¸":"\xB8","⦲":"\u29B2","¢":"\xA2","¢":"\xA2","·":"\xB7","𝔠":"\u{1D520}","ч":"\u0447","✓":"\u2713","✓":"\u2713","χ":"\u03C7","○":"\u25CB","⧃":"\u29C3","ˆ":"\u02C6","≗":"\u2257","↺":"\u21BA","↻":"\u21BB","®":"\xAE","Ⓢ":"\u24C8","⊛":"\u229B","⊚":"\u229A","⊝":"\u229D","≗":"\u2257","⨐":"\u2A10","⫯":"\u2AEF","⧂":"\u29C2","♣":"\u2663","♣":"\u2663",":":":","≔":"\u2254","≔":"\u2254",",":",","@":"@","∁":"\u2201","∘":"\u2218","∁":"\u2201","ℂ":"\u2102","≅":"\u2245","⩭":"\u2A6D","∮":"\u222E","𝕔":"\u{1D554}","∐":"\u2210","©":"\xA9","©":"\xA9","℗":"\u2117","↵":"\u21B5","✗":"\u2717","𝒸":"\u{1D4B8}","⫏":"\u2ACF","⫑":"\u2AD1","⫐":"\u2AD0","⫒":"\u2AD2","⋯":"\u22EF","⤸":"\u2938","⤵":"\u2935","⋞":"\u22DE","⋟":"\u22DF","↶":"\u21B6","⤽":"\u293D","∪":"\u222A","⩈":"\u2A48","⩆":"\u2A46","⩊":"\u2A4A","⊍":"\u228D","⩅":"\u2A45","∪︀":"\u222A\uFE00","↷":"\u21B7","⤼":"\u293C","⋞":"\u22DE","⋟":"\u22DF","⋎":"\u22CE","⋏":"\u22CF","¤":"\xA4","¤":"\xA4","↶":"\u21B6","↷":"\u21B7","⋎":"\u22CE","⋏":"\u22CF","∲":"\u2232","∱":"\u2231","⌭":"\u232D","⇓":"\u21D3","⥥":"\u2965","†":"\u2020","ℸ":"\u2138","↓":"\u2193","‐":"\u2010","⊣":"\u22A3","⤏":"\u290F","˝":"\u02DD","ď":"\u010F","д":"\u0434","ⅆ":"\u2146","‡":"\u2021","⇊":"\u21CA","⩷":"\u2A77","°":"\xB0","°":"\xB0","δ":"\u03B4","⦱":"\u29B1","⥿":"\u297F","𝔡":"\u{1D521}","⇃":"\u21C3","⇂":"\u21C2","⋄":"\u22C4","⋄":"\u22C4","♦":"\u2666","♦":"\u2666","¨":"\xA8","ϝ":"\u03DD","⋲":"\u22F2","÷":"\xF7","÷":"\xF7","÷":"\xF7","⋇":"\u22C7","⋇":"\u22C7","ђ":"\u0452","⌞":"\u231E","⌍":"\u230D","$":"$","𝕕":"\u{1D555}","˙":"\u02D9","≐":"\u2250","≑":"\u2251","∸":"\u2238","∔":"\u2214","⊡":"\u22A1","⌆":"\u2306","↓":"\u2193","⇊":"\u21CA","⇃":"\u21C3","⇂":"\u21C2","⤐":"\u2910","⌟":"\u231F","⌌":"\u230C","𝒹":"\u{1D4B9}","ѕ":"\u0455","⧶":"\u29F6","đ":"\u0111","⋱":"\u22F1","▿":"\u25BF","▾":"\u25BE","⇵":"\u21F5","⥯":"\u296F","⦦":"\u29A6","џ":"\u045F","⟿":"\u27FF","⩷":"\u2A77","≑":"\u2251","é":"\xE9","é":"\xE9","⩮":"\u2A6E","ě":"\u011B","≖":"\u2256","ê":"\xEA","ê":"\xEA","≕":"\u2255","э":"\u044D","ė":"\u0117","ⅇ":"\u2147","≒":"\u2252","𝔢":"\u{1D522}","⪚":"\u2A9A","è":"\xE8","è":"\xE8","⪖":"\u2A96","⪘":"\u2A98","⪙":"\u2A99","⏧":"\u23E7","ℓ":"\u2113","⪕":"\u2A95","⪗":"\u2A97","ē":"\u0113","∅":"\u2205","∅":"\u2205","∅":"\u2205"," ":"\u2004"," ":"\u2005"," ":"\u2003","ŋ":"\u014B"," ":"\u2002","ę":"\u0119","𝕖":"\u{1D556}","⋕":"\u22D5","⧣":"\u29E3","⩱":"\u2A71","ε":"\u03B5","ε":"\u03B5","ϵ":"\u03F5","≖":"\u2256","≕":"\u2255","≂":"\u2242","⪖":"\u2A96","⪕":"\u2A95","=":"=","≟":"\u225F","≡":"\u2261","⩸":"\u2A78","⧥":"\u29E5","≓":"\u2253","⥱":"\u2971","ℯ":"\u212F","≐":"\u2250","≂":"\u2242","η":"\u03B7","ð":"\xF0","ð":"\xF0","ë":"\xEB","ë":"\xEB","€":"\u20AC","!":"!","∃":"\u2203","ℰ":"\u2130","ⅇ":"\u2147","≒":"\u2252","ф":"\u0444","♀":"\u2640","ffi":"\uFB03","ff":"\uFB00","ffl":"\uFB04","𝔣":"\u{1D523}","fi":"\uFB01","fj":"fj","♭":"\u266D","fl":"\uFB02","▱":"\u25B1","ƒ":"\u0192","𝕗":"\u{1D557}","∀":"\u2200","⋔":"\u22D4","⫙":"\u2AD9","⨍":"\u2A0D","½":"\xBD","½":"\xBD","⅓":"\u2153","¼":"\xBC","¼":"\xBC","⅕":"\u2155","⅙":"\u2159","⅛":"\u215B","⅔":"\u2154","⅖":"\u2156","¾":"\xBE","¾":"\xBE","⅗":"\u2157","⅜":"\u215C","⅘":"\u2158","⅚":"\u215A","⅝":"\u215D","⅞":"\u215E","⁄":"\u2044","⌢":"\u2322","𝒻":"\u{1D4BB}","≧":"\u2267","⪌":"\u2A8C","ǵ":"\u01F5","γ":"\u03B3","ϝ":"\u03DD","⪆":"\u2A86","ğ":"\u011F","ĝ":"\u011D","г":"\u0433","ġ":"\u0121","≥":"\u2265","⋛":"\u22DB","≥":"\u2265","≧":"\u2267","⩾":"\u2A7E","⩾":"\u2A7E","⪩":"\u2AA9","⪀":"\u2A80","⪂":"\u2A82","⪄":"\u2A84","⋛︀":"\u22DB\uFE00","⪔":"\u2A94","𝔤":"\u{1D524}","≫":"\u226B","⋙":"\u22D9","ℷ":"\u2137","ѓ":"\u0453","≷":"\u2277","⪒":"\u2A92","⪥":"\u2AA5","⪤":"\u2AA4","≩":"\u2269","⪊":"\u2A8A","⪊":"\u2A8A","⪈":"\u2A88","⪈":"\u2A88","≩":"\u2269","⋧":"\u22E7","𝕘":"\u{1D558}","`":"`","ℊ":"\u210A","≳":"\u2273","⪎":"\u2A8E","⪐":"\u2A90",">":">",">":">","⪧":"\u2AA7","⩺":"\u2A7A","⋗":"\u22D7","⦕":"\u2995","⩼":"\u2A7C","⪆":"\u2A86","⥸":"\u2978","⋗":"\u22D7","⋛":"\u22DB","⪌":"\u2A8C","≷":"\u2277","≳":"\u2273","≩︀":"\u2269\uFE00","≩︀":"\u2269\uFE00","⇔":"\u21D4"," ":"\u200A","½":"\xBD","ℋ":"\u210B","ъ":"\u044A","↔":"\u2194","⥈":"\u2948","↭":"\u21AD","ℏ":"\u210F","ĥ":"\u0125","♥":"\u2665","♥":"\u2665","…":"\u2026","⊹":"\u22B9","𝔥":"\u{1D525}","⤥":"\u2925","⤦":"\u2926","⇿":"\u21FF","∻":"\u223B","↩":"\u21A9","↪":"\u21AA","𝕙":"\u{1D559}","―":"\u2015","𝒽":"\u{1D4BD}","ℏ":"\u210F","ħ":"\u0127","⁃":"\u2043","‐":"\u2010","í":"\xED","í":"\xED","⁣":"\u2063","î":"\xEE","î":"\xEE","и":"\u0438","е":"\u0435","¡":"\xA1","¡":"\xA1","⇔":"\u21D4","𝔦":"\u{1D526}","ì":"\xEC","ì":"\xEC","ⅈ":"\u2148","⨌":"\u2A0C","∭":"\u222D","⧜":"\u29DC","℩":"\u2129","ij":"\u0133","ī":"\u012B","ℑ":"\u2111","ℐ":"\u2110","ℑ":"\u2111","ı":"\u0131","⊷":"\u22B7","Ƶ":"\u01B5","∈":"\u2208","℅":"\u2105","∞":"\u221E","⧝":"\u29DD","ı":"\u0131","∫":"\u222B","⊺":"\u22BA","ℤ":"\u2124","⊺":"\u22BA","⨗":"\u2A17","⨼":"\u2A3C","ё":"\u0451","į":"\u012F","𝕚":"\u{1D55A}","ι":"\u03B9","⨼":"\u2A3C","¿":"\xBF","¿":"\xBF","𝒾":"\u{1D4BE}","∈":"\u2208","⋹":"\u22F9","⋵":"\u22F5","⋴":"\u22F4","⋳":"\u22F3","∈":"\u2208","⁢":"\u2062","ĩ":"\u0129","і":"\u0456","ï":"\xEF","ï":"\xEF","ĵ":"\u0135","й":"\u0439","𝔧":"\u{1D527}","ȷ":"\u0237","𝕛":"\u{1D55B}","𝒿":"\u{1D4BF}","ј":"\u0458","є":"\u0454","κ":"\u03BA","ϰ":"\u03F0","ķ":"\u0137","к":"\u043A","𝔨":"\u{1D528}","ĸ":"\u0138","х":"\u0445","ќ":"\u045C","𝕜":"\u{1D55C}","𝓀":"\u{1D4C0}","⇚":"\u21DA","⇐":"\u21D0","⤛":"\u291B","⤎":"\u290E","≦":"\u2266","⪋":"\u2A8B","⥢":"\u2962","ĺ":"\u013A","⦴":"\u29B4","ℒ":"\u2112","λ":"\u03BB","⟨":"\u27E8","⦑":"\u2991","⟨":"\u27E8","⪅":"\u2A85","«":"\xAB","«":"\xAB","←":"\u2190","⇤":"\u21E4","⤟":"\u291F","⤝":"\u291D","↩":"\u21A9","↫":"\u21AB","⤹":"\u2939","⥳":"\u2973","↢":"\u21A2","⪫":"\u2AAB","⤙":"\u2919","⪭":"\u2AAD","⪭︀":"\u2AAD\uFE00","⤌":"\u290C","❲":"\u2772","{":"{","[":"[","⦋":"\u298B","⦏":"\u298F","⦍":"\u298D","ľ":"\u013E","ļ":"\u013C","⌈":"\u2308","{":"{","л":"\u043B","⤶":"\u2936","“":"\u201C","„":"\u201E","⥧":"\u2967","⥋":"\u294B","↲":"\u21B2","≤":"\u2264","←":"\u2190","↢":"\u21A2","↽":"\u21BD","↼":"\u21BC","⇇":"\u21C7","↔":"\u2194","⇆":"\u21C6","⇋":"\u21CB","↭":"\u21AD","⋋":"\u22CB","⋚":"\u22DA","≤":"\u2264","≦":"\u2266","⩽":"\u2A7D","⩽":"\u2A7D","⪨":"\u2AA8","⩿":"\u2A7F","⪁":"\u2A81","⪃":"\u2A83","⋚︀":"\u22DA\uFE00","⪓":"\u2A93","⪅":"\u2A85","⋖":"\u22D6","⋚":"\u22DA","⪋":"\u2A8B","≶":"\u2276","≲":"\u2272","⥼":"\u297C","⌊":"\u230A","𝔩":"\u{1D529}","≶":"\u2276","⪑":"\u2A91","↽":"\u21BD","↼":"\u21BC","⥪":"\u296A","▄":"\u2584","љ":"\u0459","≪":"\u226A","⇇":"\u21C7","⌞":"\u231E","⥫":"\u296B","◺":"\u25FA","ŀ":"\u0140","⎰":"\u23B0","⎰":"\u23B0","≨":"\u2268","⪉":"\u2A89","⪉":"\u2A89","⪇":"\u2A87","⪇":"\u2A87","≨":"\u2268","⋦":"\u22E6","⟬":"\u27EC","⇽":"\u21FD","⟦":"\u27E6","⟵":"\u27F5","⟷":"\u27F7","⟼":"\u27FC","⟶":"\u27F6","↫":"\u21AB","↬":"\u21AC","⦅":"\u2985","𝕝":"\u{1D55D}","⨭":"\u2A2D","⨴":"\u2A34","∗":"\u2217","_":"_","◊":"\u25CA","◊":"\u25CA","⧫":"\u29EB","(":"(","⦓":"\u2993","⇆":"\u21C6","⌟":"\u231F","⇋":"\u21CB","⥭":"\u296D","‎":"\u200E","⊿":"\u22BF","‹":"\u2039","𝓁":"\u{1D4C1}","↰":"\u21B0","≲":"\u2272","⪍":"\u2A8D","⪏":"\u2A8F","[":"[","‘":"\u2018","‚":"\u201A","ł":"\u0142","<":"<","<":"<","⪦":"\u2AA6","⩹":"\u2A79","⋖":"\u22D6","⋋":"\u22CB","⋉":"\u22C9","⥶":"\u2976","⩻":"\u2A7B","⦖":"\u2996","◃":"\u25C3","⊴":"\u22B4","◂":"\u25C2","⥊":"\u294A","⥦":"\u2966","≨︀":"\u2268\uFE00","≨︀":"\u2268\uFE00","∺":"\u223A","¯":"\xAF","¯":"\xAF","♂":"\u2642","✠":"\u2720","✠":"\u2720","↦":"\u21A6","↦":"\u21A6","↧":"\u21A7","↤":"\u21A4","↥":"\u21A5","▮":"\u25AE","⨩":"\u2A29","м":"\u043C","—":"\u2014","∡":"\u2221","𝔪":"\u{1D52A}","℧":"\u2127","µ":"\xB5","µ":"\xB5","∣":"\u2223","*":"*","⫰":"\u2AF0","·":"\xB7","·":"\xB7","−":"\u2212","⊟":"\u229F","∸":"\u2238","⨪":"\u2A2A","⫛":"\u2ADB","…":"\u2026","∓":"\u2213","⊧":"\u22A7","𝕞":"\u{1D55E}","∓":"\u2213","𝓂":"\u{1D4C2}","∾":"\u223E","μ":"\u03BC","⊸":"\u22B8","⊸":"\u22B8","⋙̸":"\u22D9\u0338","≫⃒":"\u226B\u20D2","≫̸":"\u226B\u0338","⇍":"\u21CD","⇎":"\u21CE","⋘̸":"\u22D8\u0338","≪⃒":"\u226A\u20D2","≪̸":"\u226A\u0338","⇏":"\u21CF","⊯":"\u22AF","⊮":"\u22AE","∇":"\u2207","ń":"\u0144","∠⃒":"\u2220\u20D2","≉":"\u2249","⩰̸":"\u2A70\u0338","≋̸":"\u224B\u0338","ʼn":"\u0149","≉":"\u2249","♮":"\u266E","♮":"\u266E","ℕ":"\u2115"," ":"\xA0"," ":"\xA0","≎̸":"\u224E\u0338","≏̸":"\u224F\u0338","⩃":"\u2A43","ň":"\u0148","ņ":"\u0146","≇":"\u2247","⩭̸":"\u2A6D\u0338","⩂":"\u2A42","н":"\u043D","–":"\u2013","≠":"\u2260","⇗":"\u21D7","⤤":"\u2924","↗":"\u2197","↗":"\u2197","≐̸":"\u2250\u0338","≢":"\u2262","⤨":"\u2928","≂̸":"\u2242\u0338","∄":"\u2204","∄":"\u2204","𝔫":"\u{1D52B}","≧̸":"\u2267\u0338","≱":"\u2271","≱":"\u2271","≧̸":"\u2267\u0338","⩾̸":"\u2A7E\u0338","⩾̸":"\u2A7E\u0338","≵":"\u2275","≯":"\u226F","≯":"\u226F","⇎":"\u21CE","↮":"\u21AE","⫲":"\u2AF2","∋":"\u220B","⋼":"\u22FC","⋺":"\u22FA","∋":"\u220B","њ":"\u045A","⇍":"\u21CD","≦̸":"\u2266\u0338","↚":"\u219A","‥":"\u2025","≰":"\u2270","↚":"\u219A","↮":"\u21AE","≰":"\u2270","≦̸":"\u2266\u0338","⩽̸":"\u2A7D\u0338","⩽̸":"\u2A7D\u0338","≮":"\u226E","≴":"\u2274","≮":"\u226E","⋪":"\u22EA","⋬":"\u22EC","∤":"\u2224","𝕟":"\u{1D55F}","¬":"\xAC","¬":"\xAC","∉":"\u2209","⋹̸":"\u22F9\u0338","⋵̸":"\u22F5\u0338","∉":"\u2209","⋷":"\u22F7","⋶":"\u22F6","∌":"\u220C","∌":"\u220C","⋾":"\u22FE","⋽":"\u22FD","∦":"\u2226","∦":"\u2226","⫽⃥":"\u2AFD\u20E5","∂̸":"\u2202\u0338","⨔":"\u2A14","⊀":"\u2280","⋠":"\u22E0","⪯̸":"\u2AAF\u0338","⊀":"\u2280","⪯̸":"\u2AAF\u0338","⇏":"\u21CF","↛":"\u219B","⤳̸":"\u2933\u0338","↝̸":"\u219D\u0338","↛":"\u219B","⋫":"\u22EB","⋭":"\u22ED","⊁":"\u2281","⋡":"\u22E1","⪰̸":"\u2AB0\u0338","𝓃":"\u{1D4C3}","∤":"\u2224","∦":"\u2226","≁":"\u2241","≄":"\u2244","≄":"\u2244","∤":"\u2224","∦":"\u2226","⋢":"\u22E2","⋣":"\u22E3","⊄":"\u2284","⫅̸":"\u2AC5\u0338","⊈":"\u2288","⊂⃒":"\u2282\u20D2","⊈":"\u2288","⫅̸":"\u2AC5\u0338","⊁":"\u2281","⪰̸":"\u2AB0\u0338","⊅":"\u2285","⫆̸":"\u2AC6\u0338","⊉":"\u2289","⊃⃒":"\u2283\u20D2","⊉":"\u2289","⫆̸":"\u2AC6\u0338","≹":"\u2279","ñ":"\xF1","ñ":"\xF1","≸":"\u2278","⋪":"\u22EA","⋬":"\u22EC","⋫":"\u22EB","⋭":"\u22ED","ν":"\u03BD","#":"#","№":"\u2116"," ":"\u2007","⊭":"\u22AD","⤄":"\u2904","≍⃒":"\u224D\u20D2","⊬":"\u22AC","≥⃒":"\u2265\u20D2",">⃒":">\u20D2","⧞":"\u29DE","⤂":"\u2902","≤⃒":"\u2264\u20D2","<⃒":"<\u20D2","⊴⃒":"\u22B4\u20D2","⤃":"\u2903","⊵⃒":"\u22B5\u20D2","∼⃒":"\u223C\u20D2","⇖":"\u21D6","⤣":"\u2923","↖":"\u2196","↖":"\u2196","⤧":"\u2927","Ⓢ":"\u24C8","ó":"\xF3","ó":"\xF3","⊛":"\u229B","⊚":"\u229A","ô":"\xF4","ô":"\xF4","о":"\u043E","⊝":"\u229D","ő":"\u0151","⨸":"\u2A38","⊙":"\u2299","⦼":"\u29BC","œ":"\u0153","⦿":"\u29BF","𝔬":"\u{1D52C}","˛":"\u02DB","ò":"\xF2","ò":"\xF2","⧁":"\u29C1","⦵":"\u29B5","Ω":"\u03A9","∮":"\u222E","↺":"\u21BA","⦾":"\u29BE","⦻":"\u29BB","‾":"\u203E","⧀":"\u29C0","ō":"\u014D","ω":"\u03C9","ο":"\u03BF","⦶":"\u29B6","⊖":"\u2296","𝕠":"\u{1D560}","⦷":"\u29B7","⦹":"\u29B9","⊕":"\u2295","∨":"\u2228","↻":"\u21BB","⩝":"\u2A5D","ℴ":"\u2134","ℴ":"\u2134","ª":"\xAA","ª":"\xAA","º":"\xBA","º":"\xBA","⊶":"\u22B6","⩖":"\u2A56","⩗":"\u2A57","⩛":"\u2A5B","ℴ":"\u2134","ø":"\xF8","ø":"\xF8","⊘":"\u2298","õ":"\xF5","õ":"\xF5","⊗":"\u2297","⨶":"\u2A36","ö":"\xF6","ö":"\xF6","⌽":"\u233D","∥":"\u2225","¶":"\xB6","¶":"\xB6","∥":"\u2225","⫳":"\u2AF3","⫽":"\u2AFD","∂":"\u2202","п":"\u043F","%":"%",".":".","‰":"\u2030","⊥":"\u22A5","‱":"\u2031","𝔭":"\u{1D52D}","φ":"\u03C6","ϕ":"\u03D5","ℳ":"\u2133","☎":"\u260E","π":"\u03C0","⋔":"\u22D4","ϖ":"\u03D6","ℏ":"\u210F","ℎ":"\u210E","ℏ":"\u210F","+":"+","⨣":"\u2A23","⊞":"\u229E","⨢":"\u2A22","∔":"\u2214","⨥":"\u2A25","⩲":"\u2A72","±":"\xB1","±":"\xB1","⨦":"\u2A26","⨧":"\u2A27","±":"\xB1","⨕":"\u2A15","𝕡":"\u{1D561}","£":"\xA3","£":"\xA3","≺":"\u227A","⪳":"\u2AB3","⪷":"\u2AB7","≼":"\u227C","⪯":"\u2AAF","≺":"\u227A","⪷":"\u2AB7","≼":"\u227C","⪯":"\u2AAF","⪹":"\u2AB9","⪵":"\u2AB5","⋨":"\u22E8","≾":"\u227E","′":"\u2032","ℙ":"\u2119","⪵":"\u2AB5","⪹":"\u2AB9","⋨":"\u22E8","∏":"\u220F","⌮":"\u232E","⌒":"\u2312","⌓":"\u2313","∝":"\u221D","∝":"\u221D","≾":"\u227E","⊰":"\u22B0","𝓅":"\u{1D4C5}","ψ":"\u03C8"," ":"\u2008","𝔮":"\u{1D52E}","⨌":"\u2A0C","𝕢":"\u{1D562}","⁗":"\u2057","𝓆":"\u{1D4C6}","ℍ":"\u210D","⨖":"\u2A16","?":"?","≟":"\u225F",""":'"',""":'"',"⇛":"\u21DB","⇒":"\u21D2","⤜":"\u291C","⤏":"\u290F","⥤":"\u2964","∽̱":"\u223D\u0331","ŕ":"\u0155","√":"\u221A","⦳":"\u29B3","⟩":"\u27E9","⦒":"\u2992","⦥":"\u29A5","⟩":"\u27E9","»":"\xBB","»":"\xBB","→":"\u2192","⥵":"\u2975","⇥":"\u21E5","⤠":"\u2920","⤳":"\u2933","⤞":"\u291E","↪":"\u21AA","↬":"\u21AC","⥅":"\u2945","⥴":"\u2974","↣":"\u21A3","↝":"\u219D","⤚":"\u291A","∶":"\u2236","ℚ":"\u211A","⤍":"\u290D","❳":"\u2773","}":"}","]":"]","⦌":"\u298C","⦎":"\u298E","⦐":"\u2990","ř":"\u0159","ŗ":"\u0157","⌉":"\u2309","}":"}","р":"\u0440","⤷":"\u2937","⥩":"\u2969","”":"\u201D","”":"\u201D","↳":"\u21B3","ℜ":"\u211C","ℛ":"\u211B","ℜ":"\u211C","ℝ":"\u211D","▭":"\u25AD","®":"\xAE","®":"\xAE","⥽":"\u297D","⌋":"\u230B","𝔯":"\u{1D52F}","⇁":"\u21C1","⇀":"\u21C0","⥬":"\u296C","ρ":"\u03C1","ϱ":"\u03F1","→":"\u2192","↣":"\u21A3","⇁":"\u21C1","⇀":"\u21C0","⇄":"\u21C4","⇌":"\u21CC","⇉":"\u21C9","↝":"\u219D","⋌":"\u22CC","˚":"\u02DA","≓":"\u2253","⇄":"\u21C4","⇌":"\u21CC","‏":"\u200F","⎱":"\u23B1","⎱":"\u23B1","⫮":"\u2AEE","⟭":"\u27ED","⇾":"\u21FE","⟧":"\u27E7","⦆":"\u2986","𝕣":"\u{1D563}","⨮":"\u2A2E","⨵":"\u2A35",")":")","⦔":"\u2994","⨒":"\u2A12","⇉":"\u21C9","›":"\u203A","𝓇":"\u{1D4C7}","↱":"\u21B1","]":"]","’":"\u2019","’":"\u2019","⋌":"\u22CC","⋊":"\u22CA","▹":"\u25B9","⊵":"\u22B5","▸":"\u25B8","⧎":"\u29CE","⥨":"\u2968","℞":"\u211E","ś":"\u015B","‚":"\u201A","≻":"\u227B","⪴":"\u2AB4","⪸":"\u2AB8","š":"\u0161","≽":"\u227D","⪰":"\u2AB0","ş":"\u015F","ŝ":"\u015D","⪶":"\u2AB6","⪺":"\u2ABA","⋩":"\u22E9","⨓":"\u2A13","≿":"\u227F","с":"\u0441","⋅":"\u22C5","⊡":"\u22A1","⩦":"\u2A66","⇘":"\u21D8","⤥":"\u2925","↘":"\u2198","↘":"\u2198","§":"\xA7","§":"\xA7",";":";","⤩":"\u2929","∖":"\u2216","∖":"\u2216","✶":"\u2736","𝔰":"\u{1D530}","⌢":"\u2322","♯":"\u266F","щ":"\u0449","ш":"\u0448","∣":"\u2223","∥":"\u2225","­":"\xAD","­":"\xAD","σ":"\u03C3","ς":"\u03C2","ς":"\u03C2","∼":"\u223C","⩪":"\u2A6A","≃":"\u2243","≃":"\u2243","⪞":"\u2A9E","⪠":"\u2AA0","⪝":"\u2A9D","⪟":"\u2A9F","≆":"\u2246","⨤":"\u2A24","⥲":"\u2972","←":"\u2190","∖":"\u2216","⨳":"\u2A33","⧤":"\u29E4","∣":"\u2223","⌣":"\u2323","⪪":"\u2AAA","⪬":"\u2AAC","⪬︀":"\u2AAC\uFE00","ь":"\u044C","/":"/","⧄":"\u29C4","⌿":"\u233F","𝕤":"\u{1D564}","♠":"\u2660","♠":"\u2660","∥":"\u2225","⊓":"\u2293","⊓︀":"\u2293\uFE00","⊔":"\u2294","⊔︀":"\u2294\uFE00","⊏":"\u228F","⊑":"\u2291","⊏":"\u228F","⊑":"\u2291","⊐":"\u2290","⊒":"\u2292","⊐":"\u2290","⊒":"\u2292","□":"\u25A1","□":"\u25A1","▪":"\u25AA","▪":"\u25AA","→":"\u2192","𝓈":"\u{1D4C8}","∖":"\u2216","⌣":"\u2323","⋆":"\u22C6","☆":"\u2606","★":"\u2605","ϵ":"\u03F5","ϕ":"\u03D5","¯":"\xAF","⊂":"\u2282","⫅":"\u2AC5","⪽":"\u2ABD","⊆":"\u2286","⫃":"\u2AC3","⫁":"\u2AC1","⫋":"\u2ACB","⊊":"\u228A","⪿":"\u2ABF","⥹":"\u2979","⊂":"\u2282","⊆":"\u2286","⫅":"\u2AC5","⊊":"\u228A","⫋":"\u2ACB","⫇":"\u2AC7","⫕":"\u2AD5","⫓":"\u2AD3","≻":"\u227B","⪸":"\u2AB8","≽":"\u227D","⪰":"\u2AB0","⪺":"\u2ABA","⪶":"\u2AB6","⋩":"\u22E9","≿":"\u227F","∑":"\u2211","♪":"\u266A","¹":"\xB9","¹":"\xB9","²":"\xB2","²":"\xB2","³":"\xB3","³":"\xB3","⊃":"\u2283","⫆":"\u2AC6","⪾":"\u2ABE","⫘":"\u2AD8","⊇":"\u2287","⫄":"\u2AC4","⟉":"\u27C9","⫗":"\u2AD7","⥻":"\u297B","⫂":"\u2AC2","⫌":"\u2ACC","⊋":"\u228B","⫀":"\u2AC0","⊃":"\u2283","⊇":"\u2287","⫆":"\u2AC6","⊋":"\u228B","⫌":"\u2ACC","⫈":"\u2AC8","⫔":"\u2AD4","⫖":"\u2AD6","⇙":"\u21D9","⤦":"\u2926","↙":"\u2199","↙":"\u2199","⤪":"\u292A","ß":"\xDF","ß":"\xDF","⌖":"\u2316","τ":"\u03C4","⎴":"\u23B4","ť":"\u0165","ţ":"\u0163","т":"\u0442","⃛":"\u20DB","⌕":"\u2315","𝔱":"\u{1D531}","∴":"\u2234","∴":"\u2234","θ":"\u03B8","ϑ":"\u03D1","ϑ":"\u03D1","≈":"\u2248","∼":"\u223C"," ":"\u2009","≈":"\u2248","∼":"\u223C","þ":"\xFE","þ":"\xFE","˜":"\u02DC","×":"\xD7","×":"\xD7","⊠":"\u22A0","⨱":"\u2A31","⨰":"\u2A30","∭":"\u222D","⤨":"\u2928","⊤":"\u22A4","⌶":"\u2336","⫱":"\u2AF1","𝕥":"\u{1D565}","⫚":"\u2ADA","⤩":"\u2929","‴":"\u2034","™":"\u2122","▵":"\u25B5","▿":"\u25BF","◃":"\u25C3","⊴":"\u22B4","≜":"\u225C","▹":"\u25B9","⊵":"\u22B5","◬":"\u25EC","≜":"\u225C","⨺":"\u2A3A","⨹":"\u2A39","⧍":"\u29CD","⨻":"\u2A3B","⏢":"\u23E2","𝓉":"\u{1D4C9}","ц":"\u0446","ћ":"\u045B","ŧ":"\u0167","≬":"\u226C","↞":"\u219E","↠":"\u21A0","⇑":"\u21D1","⥣":"\u2963","ú":"\xFA","ú":"\xFA","↑":"\u2191","ў":"\u045E","ŭ":"\u016D","û":"\xFB","û":"\xFB","у":"\u0443","⇅":"\u21C5","ű":"\u0171","⥮":"\u296E","⥾":"\u297E","𝔲":"\u{1D532}","ù":"\xF9","ù":"\xF9","↿":"\u21BF","↾":"\u21BE","▀":"\u2580","⌜":"\u231C","⌜":"\u231C","⌏":"\u230F","◸":"\u25F8","ū":"\u016B","¨":"\xA8","¨":"\xA8","ų":"\u0173","𝕦":"\u{1D566}","↑":"\u2191","↕":"\u2195","↿":"\u21BF","↾":"\u21BE","⊎":"\u228E","υ":"\u03C5","ϒ":"\u03D2","υ":"\u03C5","⇈":"\u21C8","⌝":"\u231D","⌝":"\u231D","⌎":"\u230E","ů":"\u016F","◹":"\u25F9","𝓊":"\u{1D4CA}","⋰":"\u22F0","ũ":"\u0169","▵":"\u25B5","▴":"\u25B4","⇈":"\u21C8","ü":"\xFC","ü":"\xFC","⦧":"\u29A7","⇕":"\u21D5","⫨":"\u2AE8","⫩":"\u2AE9","⊨":"\u22A8","⦜":"\u299C","ϵ":"\u03F5","ϰ":"\u03F0","∅":"\u2205","ϕ":"\u03D5","ϖ":"\u03D6","∝":"\u221D","↕":"\u2195","ϱ":"\u03F1","ς":"\u03C2","⊊︀":"\u228A\uFE00","⫋︀":"\u2ACB\uFE00","⊋︀":"\u228B\uFE00","⫌︀":"\u2ACC\uFE00","ϑ":"\u03D1","⊲":"\u22B2","⊳":"\u22B3","в":"\u0432","⊢":"\u22A2","∨":"\u2228","⊻":"\u22BB","≚":"\u225A","⋮":"\u22EE","|":"|","|":"|","𝔳":"\u{1D533}","⊲":"\u22B2","⊂⃒":"\u2282\u20D2","⊃⃒":"\u2283\u20D2","𝕧":"\u{1D567}","∝":"\u221D","⊳":"\u22B3","𝓋":"\u{1D4CB}","⫋︀":"\u2ACB\uFE00","⊊︀":"\u228A\uFE00","⫌︀":"\u2ACC\uFE00","⊋︀":"\u228B\uFE00","⦚":"\u299A","ŵ":"\u0175","⩟":"\u2A5F","∧":"\u2227","≙":"\u2259","℘":"\u2118","𝔴":"\u{1D534}","𝕨":"\u{1D568}","℘":"\u2118","≀":"\u2240","≀":"\u2240","𝓌":"\u{1D4CC}","⋂":"\u22C2","◯":"\u25EF","⋃":"\u22C3","▽":"\u25BD","𝔵":"\u{1D535}","⟺":"\u27FA","⟷":"\u27F7","ξ":"\u03BE","⟸":"\u27F8","⟵":"\u27F5","⟼":"\u27FC","⋻":"\u22FB","⨀":"\u2A00","𝕩":"\u{1D569}","⨁":"\u2A01","⨂":"\u2A02","⟹":"\u27F9","⟶":"\u27F6","𝓍":"\u{1D4CD}","⨆":"\u2A06","⨄":"\u2A04","△":"\u25B3","⋁":"\u22C1","⋀":"\u22C0","ý":"\xFD","ý":"\xFD","я":"\u044F","ŷ":"\u0177","ы":"\u044B","¥":"\xA5","¥":"\xA5","𝔶":"\u{1D536}","ї":"\u0457","𝕪":"\u{1D56A}","𝓎":"\u{1D4CE}","ю":"\u044E","ÿ":"\xFF","ÿ":"\xFF","ź":"\u017A","ž":"\u017E","з":"\u0437","ż":"\u017C","ℨ":"\u2128","ζ":"\u03B6","𝔷":"\u{1D537}","ж":"\u0436","⇝":"\u21DD","𝕫":"\u{1D56B}","𝓏":"\u{1D4CF}","‍":"\u200D","‌":"\u200C"},rr=Vp;function zp(e){return e.replace(/&(#\d+|#x[a-f0-9]+|[a-z]+\d*);?/gi,(t,o)=>{if(typeof rr[t]=="string")return rr[t];if(o.charAt(0)!=="#"||t.charAt(t.length-1)!==";")return t;let i;o.charAt(1)==="x"?i=parseInt(o.substr(2),16):i=parseInt(o.substr(1),10);let r="";return i>=55296&&i<=57343||i>1114111?"\uFFFD":(i>65535&&(i-=65536,r+=String.fromCharCode(i>>>10&1023|55296),i=56320|i&1023),r+=String.fromCharCode(i),r)})}function Ft(e){return e.trim().replace(/[<>"'?&]/g,t=>{let o=t.charCodeAt(0).toString(16);return o.length<2&&(o="0"+o),"&#x"+o.toUpperCase()+";"})}function is(e){return"<div>"+Ft(e).replace(/\n/g,"<br />")+"</div>"}function rs(e){return e=e.replace(/\r?\n/g,"").replace(/<\!\-\-.*?\-\->/gi," ").replace(/<br\b[^>]*>/gi,`
|
|
258
|
+
`,"𝔑":"\u{1D511}","⁠":"\u2060"," ":"\xA0","ℕ":"\u2115","⫬":"\u2AEC","≢":"\u2262","≭":"\u226D","∦":"\u2226","∉":"\u2209","≠":"\u2260","≂̸":"\u2242\u0338","∄":"\u2204","≯":"\u226F","≱":"\u2271","≧̸":"\u2267\u0338","≫̸":"\u226B\u0338","≹":"\u2279","⩾̸":"\u2A7E\u0338","≵":"\u2275","≎̸":"\u224E\u0338","≏̸":"\u224F\u0338","⋪":"\u22EA","⧏̸":"\u29CF\u0338","⋬":"\u22EC","≮":"\u226E","≰":"\u2270","≸":"\u2278","≪̸":"\u226A\u0338","⩽̸":"\u2A7D\u0338","≴":"\u2274","⪢̸":"\u2AA2\u0338","⪡̸":"\u2AA1\u0338","⊀":"\u2280","⪯̸":"\u2AAF\u0338","⋠":"\u22E0","∌":"\u220C","⋫":"\u22EB","⧐̸":"\u29D0\u0338","⋭":"\u22ED","⊏̸":"\u228F\u0338","⋢":"\u22E2","⊐̸":"\u2290\u0338","⋣":"\u22E3","⊂⃒":"\u2282\u20D2","⊈":"\u2288","⊁":"\u2281","⪰̸":"\u2AB0\u0338","⋡":"\u22E1","≿̸":"\u227F\u0338","⊃⃒":"\u2283\u20D2","⊉":"\u2289","≁":"\u2241","≄":"\u2244","≇":"\u2247","≉":"\u2249","∤":"\u2224","𝒩":"\u{1D4A9}","Ñ":"\xD1","Ñ":"\xD1","Ν":"\u039D","Œ":"\u0152","Ó":"\xD3","Ó":"\xD3","Ô":"\xD4","Ô":"\xD4","О":"\u041E","Ő":"\u0150","𝔒":"\u{1D512}","Ò":"\xD2","Ò":"\xD2","Ō":"\u014C","Ω":"\u03A9","Ο":"\u039F","𝕆":"\u{1D546}","“":"\u201C","‘":"\u2018","⩔":"\u2A54","𝒪":"\u{1D4AA}","Ø":"\xD8","Ø":"\xD8","Õ":"\xD5","Õ":"\xD5","⨷":"\u2A37","Ö":"\xD6","Ö":"\xD6","‾":"\u203E","⏞":"\u23DE","⎴":"\u23B4","⏜":"\u23DC","∂":"\u2202","П":"\u041F","𝔓":"\u{1D513}","Φ":"\u03A6","Π":"\u03A0","±":"\xB1","ℌ":"\u210C","ℙ":"\u2119","⪻":"\u2ABB","≺":"\u227A","⪯":"\u2AAF","≼":"\u227C","≾":"\u227E","″":"\u2033","∏":"\u220F","∷":"\u2237","∝":"\u221D","𝒫":"\u{1D4AB}","Ψ":"\u03A8",""":'"',""":'"',"𝔔":"\u{1D514}","ℚ":"\u211A","𝒬":"\u{1D4AC}","⤐":"\u2910","®":"\xAE","®":"\xAE","Ŕ":"\u0154","⟫":"\u27EB","↠":"\u21A0","⤖":"\u2916","Ř":"\u0158","Ŗ":"\u0156","Р":"\u0420","ℜ":"\u211C","∋":"\u220B","⇋":"\u21CB","⥯":"\u296F","ℜ":"\u211C","Ρ":"\u03A1","⟩":"\u27E9","→":"\u2192","⇥":"\u21E5","⇄":"\u21C4","⌉":"\u2309","⟧":"\u27E7","⥝":"\u295D","⇂":"\u21C2","⥕":"\u2955","⌋":"\u230B","⊢":"\u22A2","↦":"\u21A6","⥛":"\u295B","⊳":"\u22B3","⧐":"\u29D0","⊵":"\u22B5","⥏":"\u294F","⥜":"\u295C","↾":"\u21BE","⥔":"\u2954","⇀":"\u21C0","⥓":"\u2953","⇒":"\u21D2","ℝ":"\u211D","⥰":"\u2970","⇛":"\u21DB","ℛ":"\u211B","↱":"\u21B1","⧴":"\u29F4","Щ":"\u0429","Ш":"\u0428","Ь":"\u042C","Ś":"\u015A","⪼":"\u2ABC","Š":"\u0160","Ş":"\u015E","Ŝ":"\u015C","С":"\u0421","𝔖":"\u{1D516}","↓":"\u2193","←":"\u2190","→":"\u2192","↑":"\u2191","Σ":"\u03A3","∘":"\u2218","𝕊":"\u{1D54A}","√":"\u221A","□":"\u25A1","⊓":"\u2293","⊏":"\u228F","⊑":"\u2291","⊐":"\u2290","⊒":"\u2292","⊔":"\u2294","𝒮":"\u{1D4AE}","⋆":"\u22C6","⋐":"\u22D0","⋐":"\u22D0","⊆":"\u2286","≻":"\u227B","⪰":"\u2AB0","≽":"\u227D","≿":"\u227F","∋":"\u220B","∑":"\u2211","⋑":"\u22D1","⊃":"\u2283","⊇":"\u2287","⋑":"\u22D1","Þ":"\xDE","Þ":"\xDE","™":"\u2122","Ћ":"\u040B","Ц":"\u0426","	":" ","Τ":"\u03A4","Ť":"\u0164","Ţ":"\u0162","Т":"\u0422","𝔗":"\u{1D517}","∴":"\u2234","Θ":"\u0398","  ":"\u205F\u200A"," ":"\u2009","∼":"\u223C","≃":"\u2243","≅":"\u2245","≈":"\u2248","𝕋":"\u{1D54B}","⃛":"\u20DB","𝒯":"\u{1D4AF}","Ŧ":"\u0166","Ú":"\xDA","Ú":"\xDA","↟":"\u219F","⥉":"\u2949","Ў":"\u040E","Ŭ":"\u016C","Û":"\xDB","Û":"\xDB","У":"\u0423","Ű":"\u0170","𝔘":"\u{1D518}","Ù":"\xD9","Ù":"\xD9","Ū":"\u016A","_":"_","⏟":"\u23DF","⎵":"\u23B5","⏝":"\u23DD","⋃":"\u22C3","⊎":"\u228E","Ų":"\u0172","𝕌":"\u{1D54C}","↑":"\u2191","⤒":"\u2912","⇅":"\u21C5","↕":"\u2195","⥮":"\u296E","⊥":"\u22A5","↥":"\u21A5","⇑":"\u21D1","⇕":"\u21D5","↖":"\u2196","↗":"\u2197","ϒ":"\u03D2","Υ":"\u03A5","Ů":"\u016E","𝒰":"\u{1D4B0}","Ũ":"\u0168","Ü":"\xDC","Ü":"\xDC","⊫":"\u22AB","⫫":"\u2AEB","В":"\u0412","⊩":"\u22A9","⫦":"\u2AE6","⋁":"\u22C1","‖":"\u2016","‖":"\u2016","∣":"\u2223","|":"|","❘":"\u2758","≀":"\u2240"," ":"\u200A","𝔙":"\u{1D519}","𝕍":"\u{1D54D}","𝒱":"\u{1D4B1}","⊪":"\u22AA","Ŵ":"\u0174","⋀":"\u22C0","𝔚":"\u{1D51A}","𝕎":"\u{1D54E}","𝒲":"\u{1D4B2}","𝔛":"\u{1D51B}","Ξ":"\u039E","𝕏":"\u{1D54F}","𝒳":"\u{1D4B3}","Я":"\u042F","Ї":"\u0407","Ю":"\u042E","Ý":"\xDD","Ý":"\xDD","Ŷ":"\u0176","Ы":"\u042B","𝔜":"\u{1D51C}","𝕐":"\u{1D550}","𝒴":"\u{1D4B4}","Ÿ":"\u0178","Ж":"\u0416","Ź":"\u0179","Ž":"\u017D","З":"\u0417","Ż":"\u017B","​":"\u200B","Ζ":"\u0396","ℨ":"\u2128","ℤ":"\u2124","𝒵":"\u{1D4B5}","á":"\xE1","á":"\xE1","ă":"\u0103","∾":"\u223E","∾̳":"\u223E\u0333","∿":"\u223F","â":"\xE2","â":"\xE2","´":"\xB4","´":"\xB4","а":"\u0430","æ":"\xE6","æ":"\xE6","⁡":"\u2061","𝔞":"\u{1D51E}","à":"\xE0","à":"\xE0","ℵ":"\u2135","ℵ":"\u2135","α":"\u03B1","ā":"\u0101","⨿":"\u2A3F","&":"&","&":"&","∧":"\u2227","⩕":"\u2A55","⩜":"\u2A5C","⩘":"\u2A58","⩚":"\u2A5A","∠":"\u2220","⦤":"\u29A4","∠":"\u2220","∡":"\u2221","⦨":"\u29A8","⦩":"\u29A9","⦪":"\u29AA","⦫":"\u29AB","⦬":"\u29AC","⦭":"\u29AD","⦮":"\u29AE","⦯":"\u29AF","∟":"\u221F","⊾":"\u22BE","⦝":"\u299D","∢":"\u2222","Å":"\xC5","⍼":"\u237C","ą":"\u0105","𝕒":"\u{1D552}","≈":"\u2248","⩰":"\u2A70","⩯":"\u2A6F","≊":"\u224A","≋":"\u224B","'":"'","≈":"\u2248","≊":"\u224A","å":"\xE5","å":"\xE5","𝒶":"\u{1D4B6}","*":"*","≈":"\u2248","≍":"\u224D","ã":"\xE3","ã":"\xE3","ä":"\xE4","ä":"\xE4","∳":"\u2233","⨑":"\u2A11","⫭":"\u2AED","≌":"\u224C","϶":"\u03F6","‵":"\u2035","∽":"\u223D","⋍":"\u22CD","⊽":"\u22BD","⌅":"\u2305","⌅":"\u2305","⎵":"\u23B5","⎶":"\u23B6","≌":"\u224C","б":"\u0431","„":"\u201E","∵":"\u2235","∵":"\u2235","⦰":"\u29B0","϶":"\u03F6","ℬ":"\u212C","β":"\u03B2","ℶ":"\u2136","≬":"\u226C","𝔟":"\u{1D51F}","⋂":"\u22C2","◯":"\u25EF","⋃":"\u22C3","⨀":"\u2A00","⨁":"\u2A01","⨂":"\u2A02","⨆":"\u2A06","★":"\u2605","▽":"\u25BD","△":"\u25B3","⨄":"\u2A04","⋁":"\u22C1","⋀":"\u22C0","⤍":"\u290D","⧫":"\u29EB","▪":"\u25AA","▴":"\u25B4","▾":"\u25BE","◂":"\u25C2","▸":"\u25B8","␣":"\u2423","▒":"\u2592","░":"\u2591","▓":"\u2593","█":"\u2588","=⃥":"=\u20E5","≡⃥":"\u2261\u20E5","⌐":"\u2310","𝕓":"\u{1D553}","⊥":"\u22A5","⊥":"\u22A5","⋈":"\u22C8","╗":"\u2557","╔":"\u2554","╖":"\u2556","╓":"\u2553","═":"\u2550","╦":"\u2566","╩":"\u2569","╤":"\u2564","╧":"\u2567","╝":"\u255D","╚":"\u255A","╜":"\u255C","╙":"\u2559","║":"\u2551","╬":"\u256C","╣":"\u2563","╠":"\u2560","╫":"\u256B","╢":"\u2562","╟":"\u255F","⧉":"\u29C9","╕":"\u2555","╒":"\u2552","┐":"\u2510","┌":"\u250C","─":"\u2500","╥":"\u2565","╨":"\u2568","┬":"\u252C","┴":"\u2534","⊟":"\u229F","⊞":"\u229E","⊠":"\u22A0","╛":"\u255B","╘":"\u2558","┘":"\u2518","└":"\u2514","│":"\u2502","╪":"\u256A","╡":"\u2561","╞":"\u255E","┼":"\u253C","┤":"\u2524","├":"\u251C","‵":"\u2035","˘":"\u02D8","¦":"\xA6","¦":"\xA6","𝒷":"\u{1D4B7}","⁏":"\u204F","∽":"\u223D","⋍":"\u22CD","\":"\\","⧅":"\u29C5","⟈":"\u27C8","•":"\u2022","•":"\u2022","≎":"\u224E","⪮":"\u2AAE","≏":"\u224F","≏":"\u224F","ć":"\u0107","∩":"\u2229","⩄":"\u2A44","⩉":"\u2A49","⩋":"\u2A4B","⩇":"\u2A47","⩀":"\u2A40","∩︀":"\u2229\uFE00","⁁":"\u2041","ˇ":"\u02C7","⩍":"\u2A4D","č":"\u010D","ç":"\xE7","ç":"\xE7","ĉ":"\u0109","⩌":"\u2A4C","⩐":"\u2A50","ċ":"\u010B","¸":"\xB8","¸":"\xB8","⦲":"\u29B2","¢":"\xA2","¢":"\xA2","·":"\xB7","𝔠":"\u{1D520}","ч":"\u0447","✓":"\u2713","✓":"\u2713","χ":"\u03C7","○":"\u25CB","⧃":"\u29C3","ˆ":"\u02C6","≗":"\u2257","↺":"\u21BA","↻":"\u21BB","®":"\xAE","Ⓢ":"\u24C8","⊛":"\u229B","⊚":"\u229A","⊝":"\u229D","≗":"\u2257","⨐":"\u2A10","⫯":"\u2AEF","⧂":"\u29C2","♣":"\u2663","♣":"\u2663",":":":","≔":"\u2254","≔":"\u2254",",":",","@":"@","∁":"\u2201","∘":"\u2218","∁":"\u2201","ℂ":"\u2102","≅":"\u2245","⩭":"\u2A6D","∮":"\u222E","𝕔":"\u{1D554}","∐":"\u2210","©":"\xA9","©":"\xA9","℗":"\u2117","↵":"\u21B5","✗":"\u2717","𝒸":"\u{1D4B8}","⫏":"\u2ACF","⫑":"\u2AD1","⫐":"\u2AD0","⫒":"\u2AD2","⋯":"\u22EF","⤸":"\u2938","⤵":"\u2935","⋞":"\u22DE","⋟":"\u22DF","↶":"\u21B6","⤽":"\u293D","∪":"\u222A","⩈":"\u2A48","⩆":"\u2A46","⩊":"\u2A4A","⊍":"\u228D","⩅":"\u2A45","∪︀":"\u222A\uFE00","↷":"\u21B7","⤼":"\u293C","⋞":"\u22DE","⋟":"\u22DF","⋎":"\u22CE","⋏":"\u22CF","¤":"\xA4","¤":"\xA4","↶":"\u21B6","↷":"\u21B7","⋎":"\u22CE","⋏":"\u22CF","∲":"\u2232","∱":"\u2231","⌭":"\u232D","⇓":"\u21D3","⥥":"\u2965","†":"\u2020","ℸ":"\u2138","↓":"\u2193","‐":"\u2010","⊣":"\u22A3","⤏":"\u290F","˝":"\u02DD","ď":"\u010F","д":"\u0434","ⅆ":"\u2146","‡":"\u2021","⇊":"\u21CA","⩷":"\u2A77","°":"\xB0","°":"\xB0","δ":"\u03B4","⦱":"\u29B1","⥿":"\u297F","𝔡":"\u{1D521}","⇃":"\u21C3","⇂":"\u21C2","⋄":"\u22C4","⋄":"\u22C4","♦":"\u2666","♦":"\u2666","¨":"\xA8","ϝ":"\u03DD","⋲":"\u22F2","÷":"\xF7","÷":"\xF7","÷":"\xF7","⋇":"\u22C7","⋇":"\u22C7","ђ":"\u0452","⌞":"\u231E","⌍":"\u230D","$":"$","𝕕":"\u{1D555}","˙":"\u02D9","≐":"\u2250","≑":"\u2251","∸":"\u2238","∔":"\u2214","⊡":"\u22A1","⌆":"\u2306","↓":"\u2193","⇊":"\u21CA","⇃":"\u21C3","⇂":"\u21C2","⤐":"\u2910","⌟":"\u231F","⌌":"\u230C","𝒹":"\u{1D4B9}","ѕ":"\u0455","⧶":"\u29F6","đ":"\u0111","⋱":"\u22F1","▿":"\u25BF","▾":"\u25BE","⇵":"\u21F5","⥯":"\u296F","⦦":"\u29A6","џ":"\u045F","⟿":"\u27FF","⩷":"\u2A77","≑":"\u2251","é":"\xE9","é":"\xE9","⩮":"\u2A6E","ě":"\u011B","≖":"\u2256","ê":"\xEA","ê":"\xEA","≕":"\u2255","э":"\u044D","ė":"\u0117","ⅇ":"\u2147","≒":"\u2252","𝔢":"\u{1D522}","⪚":"\u2A9A","è":"\xE8","è":"\xE8","⪖":"\u2A96","⪘":"\u2A98","⪙":"\u2A99","⏧":"\u23E7","ℓ":"\u2113","⪕":"\u2A95","⪗":"\u2A97","ē":"\u0113","∅":"\u2205","∅":"\u2205","∅":"\u2205"," ":"\u2004"," ":"\u2005"," ":"\u2003","ŋ":"\u014B"," ":"\u2002","ę":"\u0119","𝕖":"\u{1D556}","⋕":"\u22D5","⧣":"\u29E3","⩱":"\u2A71","ε":"\u03B5","ε":"\u03B5","ϵ":"\u03F5","≖":"\u2256","≕":"\u2255","≂":"\u2242","⪖":"\u2A96","⪕":"\u2A95","=":"=","≟":"\u225F","≡":"\u2261","⩸":"\u2A78","⧥":"\u29E5","≓":"\u2253","⥱":"\u2971","ℯ":"\u212F","≐":"\u2250","≂":"\u2242","η":"\u03B7","ð":"\xF0","ð":"\xF0","ë":"\xEB","ë":"\xEB","€":"\u20AC","!":"!","∃":"\u2203","ℰ":"\u2130","ⅇ":"\u2147","≒":"\u2252","ф":"\u0444","♀":"\u2640","ffi":"\uFB03","ff":"\uFB00","ffl":"\uFB04","𝔣":"\u{1D523}","fi":"\uFB01","fj":"fj","♭":"\u266D","fl":"\uFB02","▱":"\u25B1","ƒ":"\u0192","𝕗":"\u{1D557}","∀":"\u2200","⋔":"\u22D4","⫙":"\u2AD9","⨍":"\u2A0D","½":"\xBD","½":"\xBD","⅓":"\u2153","¼":"\xBC","¼":"\xBC","⅕":"\u2155","⅙":"\u2159","⅛":"\u215B","⅔":"\u2154","⅖":"\u2156","¾":"\xBE","¾":"\xBE","⅗":"\u2157","⅜":"\u215C","⅘":"\u2158","⅚":"\u215A","⅝":"\u215D","⅞":"\u215E","⁄":"\u2044","⌢":"\u2322","𝒻":"\u{1D4BB}","≧":"\u2267","⪌":"\u2A8C","ǵ":"\u01F5","γ":"\u03B3","ϝ":"\u03DD","⪆":"\u2A86","ğ":"\u011F","ĝ":"\u011D","г":"\u0433","ġ":"\u0121","≥":"\u2265","⋛":"\u22DB","≥":"\u2265","≧":"\u2267","⩾":"\u2A7E","⩾":"\u2A7E","⪩":"\u2AA9","⪀":"\u2A80","⪂":"\u2A82","⪄":"\u2A84","⋛︀":"\u22DB\uFE00","⪔":"\u2A94","𝔤":"\u{1D524}","≫":"\u226B","⋙":"\u22D9","ℷ":"\u2137","ѓ":"\u0453","≷":"\u2277","⪒":"\u2A92","⪥":"\u2AA5","⪤":"\u2AA4","≩":"\u2269","⪊":"\u2A8A","⪊":"\u2A8A","⪈":"\u2A88","⪈":"\u2A88","≩":"\u2269","⋧":"\u22E7","𝕘":"\u{1D558}","`":"`","ℊ":"\u210A","≳":"\u2273","⪎":"\u2A8E","⪐":"\u2A90",">":">",">":">","⪧":"\u2AA7","⩺":"\u2A7A","⋗":"\u22D7","⦕":"\u2995","⩼":"\u2A7C","⪆":"\u2A86","⥸":"\u2978","⋗":"\u22D7","⋛":"\u22DB","⪌":"\u2A8C","≷":"\u2277","≳":"\u2273","≩︀":"\u2269\uFE00","≩︀":"\u2269\uFE00","⇔":"\u21D4"," ":"\u200A","½":"\xBD","ℋ":"\u210B","ъ":"\u044A","↔":"\u2194","⥈":"\u2948","↭":"\u21AD","ℏ":"\u210F","ĥ":"\u0125","♥":"\u2665","♥":"\u2665","…":"\u2026","⊹":"\u22B9","𝔥":"\u{1D525}","⤥":"\u2925","⤦":"\u2926","⇿":"\u21FF","∻":"\u223B","↩":"\u21A9","↪":"\u21AA","𝕙":"\u{1D559}","―":"\u2015","𝒽":"\u{1D4BD}","ℏ":"\u210F","ħ":"\u0127","⁃":"\u2043","‐":"\u2010","í":"\xED","í":"\xED","⁣":"\u2063","î":"\xEE","î":"\xEE","и":"\u0438","е":"\u0435","¡":"\xA1","¡":"\xA1","⇔":"\u21D4","𝔦":"\u{1D526}","ì":"\xEC","ì":"\xEC","ⅈ":"\u2148","⨌":"\u2A0C","∭":"\u222D","⧜":"\u29DC","℩":"\u2129","ij":"\u0133","ī":"\u012B","ℑ":"\u2111","ℐ":"\u2110","ℑ":"\u2111","ı":"\u0131","⊷":"\u22B7","Ƶ":"\u01B5","∈":"\u2208","℅":"\u2105","∞":"\u221E","⧝":"\u29DD","ı":"\u0131","∫":"\u222B","⊺":"\u22BA","ℤ":"\u2124","⊺":"\u22BA","⨗":"\u2A17","⨼":"\u2A3C","ё":"\u0451","į":"\u012F","𝕚":"\u{1D55A}","ι":"\u03B9","⨼":"\u2A3C","¿":"\xBF","¿":"\xBF","𝒾":"\u{1D4BE}","∈":"\u2208","⋹":"\u22F9","⋵":"\u22F5","⋴":"\u22F4","⋳":"\u22F3","∈":"\u2208","⁢":"\u2062","ĩ":"\u0129","і":"\u0456","ï":"\xEF","ï":"\xEF","ĵ":"\u0135","й":"\u0439","𝔧":"\u{1D527}","ȷ":"\u0237","𝕛":"\u{1D55B}","𝒿":"\u{1D4BF}","ј":"\u0458","є":"\u0454","κ":"\u03BA","ϰ":"\u03F0","ķ":"\u0137","к":"\u043A","𝔨":"\u{1D528}","ĸ":"\u0138","х":"\u0445","ќ":"\u045C","𝕜":"\u{1D55C}","𝓀":"\u{1D4C0}","⇚":"\u21DA","⇐":"\u21D0","⤛":"\u291B","⤎":"\u290E","≦":"\u2266","⪋":"\u2A8B","⥢":"\u2962","ĺ":"\u013A","⦴":"\u29B4","ℒ":"\u2112","λ":"\u03BB","⟨":"\u27E8","⦑":"\u2991","⟨":"\u27E8","⪅":"\u2A85","«":"\xAB","«":"\xAB","←":"\u2190","⇤":"\u21E4","⤟":"\u291F","⤝":"\u291D","↩":"\u21A9","↫":"\u21AB","⤹":"\u2939","⥳":"\u2973","↢":"\u21A2","⪫":"\u2AAB","⤙":"\u2919","⪭":"\u2AAD","⪭︀":"\u2AAD\uFE00","⤌":"\u290C","❲":"\u2772","{":"{","[":"[","⦋":"\u298B","⦏":"\u298F","⦍":"\u298D","ľ":"\u013E","ļ":"\u013C","⌈":"\u2308","{":"{","л":"\u043B","⤶":"\u2936","“":"\u201C","„":"\u201E","⥧":"\u2967","⥋":"\u294B","↲":"\u21B2","≤":"\u2264","←":"\u2190","↢":"\u21A2","↽":"\u21BD","↼":"\u21BC","⇇":"\u21C7","↔":"\u2194","⇆":"\u21C6","⇋":"\u21CB","↭":"\u21AD","⋋":"\u22CB","⋚":"\u22DA","≤":"\u2264","≦":"\u2266","⩽":"\u2A7D","⩽":"\u2A7D","⪨":"\u2AA8","⩿":"\u2A7F","⪁":"\u2A81","⪃":"\u2A83","⋚︀":"\u22DA\uFE00","⪓":"\u2A93","⪅":"\u2A85","⋖":"\u22D6","⋚":"\u22DA","⪋":"\u2A8B","≶":"\u2276","≲":"\u2272","⥼":"\u297C","⌊":"\u230A","𝔩":"\u{1D529}","≶":"\u2276","⪑":"\u2A91","↽":"\u21BD","↼":"\u21BC","⥪":"\u296A","▄":"\u2584","љ":"\u0459","≪":"\u226A","⇇":"\u21C7","⌞":"\u231E","⥫":"\u296B","◺":"\u25FA","ŀ":"\u0140","⎰":"\u23B0","⎰":"\u23B0","≨":"\u2268","⪉":"\u2A89","⪉":"\u2A89","⪇":"\u2A87","⪇":"\u2A87","≨":"\u2268","⋦":"\u22E6","⟬":"\u27EC","⇽":"\u21FD","⟦":"\u27E6","⟵":"\u27F5","⟷":"\u27F7","⟼":"\u27FC","⟶":"\u27F6","↫":"\u21AB","↬":"\u21AC","⦅":"\u2985","𝕝":"\u{1D55D}","⨭":"\u2A2D","⨴":"\u2A34","∗":"\u2217","_":"_","◊":"\u25CA","◊":"\u25CA","⧫":"\u29EB","(":"(","⦓":"\u2993","⇆":"\u21C6","⌟":"\u231F","⇋":"\u21CB","⥭":"\u296D","‎":"\u200E","⊿":"\u22BF","‹":"\u2039","𝓁":"\u{1D4C1}","↰":"\u21B0","≲":"\u2272","⪍":"\u2A8D","⪏":"\u2A8F","[":"[","‘":"\u2018","‚":"\u201A","ł":"\u0142","<":"<","<":"<","⪦":"\u2AA6","⩹":"\u2A79","⋖":"\u22D6","⋋":"\u22CB","⋉":"\u22C9","⥶":"\u2976","⩻":"\u2A7B","⦖":"\u2996","◃":"\u25C3","⊴":"\u22B4","◂":"\u25C2","⥊":"\u294A","⥦":"\u2966","≨︀":"\u2268\uFE00","≨︀":"\u2268\uFE00","∺":"\u223A","¯":"\xAF","¯":"\xAF","♂":"\u2642","✠":"\u2720","✠":"\u2720","↦":"\u21A6","↦":"\u21A6","↧":"\u21A7","↤":"\u21A4","↥":"\u21A5","▮":"\u25AE","⨩":"\u2A29","м":"\u043C","—":"\u2014","∡":"\u2221","𝔪":"\u{1D52A}","℧":"\u2127","µ":"\xB5","µ":"\xB5","∣":"\u2223","*":"*","⫰":"\u2AF0","·":"\xB7","·":"\xB7","−":"\u2212","⊟":"\u229F","∸":"\u2238","⨪":"\u2A2A","⫛":"\u2ADB","…":"\u2026","∓":"\u2213","⊧":"\u22A7","𝕞":"\u{1D55E}","∓":"\u2213","𝓂":"\u{1D4C2}","∾":"\u223E","μ":"\u03BC","⊸":"\u22B8","⊸":"\u22B8","⋙̸":"\u22D9\u0338","≫⃒":"\u226B\u20D2","≫̸":"\u226B\u0338","⇍":"\u21CD","⇎":"\u21CE","⋘̸":"\u22D8\u0338","≪⃒":"\u226A\u20D2","≪̸":"\u226A\u0338","⇏":"\u21CF","⊯":"\u22AF","⊮":"\u22AE","∇":"\u2207","ń":"\u0144","∠⃒":"\u2220\u20D2","≉":"\u2249","⩰̸":"\u2A70\u0338","≋̸":"\u224B\u0338","ʼn":"\u0149","≉":"\u2249","♮":"\u266E","♮":"\u266E","ℕ":"\u2115"," ":"\xA0"," ":"\xA0","≎̸":"\u224E\u0338","≏̸":"\u224F\u0338","⩃":"\u2A43","ň":"\u0148","ņ":"\u0146","≇":"\u2247","⩭̸":"\u2A6D\u0338","⩂":"\u2A42","н":"\u043D","–":"\u2013","≠":"\u2260","⇗":"\u21D7","⤤":"\u2924","↗":"\u2197","↗":"\u2197","≐̸":"\u2250\u0338","≢":"\u2262","⤨":"\u2928","≂̸":"\u2242\u0338","∄":"\u2204","∄":"\u2204","𝔫":"\u{1D52B}","≧̸":"\u2267\u0338","≱":"\u2271","≱":"\u2271","≧̸":"\u2267\u0338","⩾̸":"\u2A7E\u0338","⩾̸":"\u2A7E\u0338","≵":"\u2275","≯":"\u226F","≯":"\u226F","⇎":"\u21CE","↮":"\u21AE","⫲":"\u2AF2","∋":"\u220B","⋼":"\u22FC","⋺":"\u22FA","∋":"\u220B","њ":"\u045A","⇍":"\u21CD","≦̸":"\u2266\u0338","↚":"\u219A","‥":"\u2025","≰":"\u2270","↚":"\u219A","↮":"\u21AE","≰":"\u2270","≦̸":"\u2266\u0338","⩽̸":"\u2A7D\u0338","⩽̸":"\u2A7D\u0338","≮":"\u226E","≴":"\u2274","≮":"\u226E","⋪":"\u22EA","⋬":"\u22EC","∤":"\u2224","𝕟":"\u{1D55F}","¬":"\xAC","¬":"\xAC","∉":"\u2209","⋹̸":"\u22F9\u0338","⋵̸":"\u22F5\u0338","∉":"\u2209","⋷":"\u22F7","⋶":"\u22F6","∌":"\u220C","∌":"\u220C","⋾":"\u22FE","⋽":"\u22FD","∦":"\u2226","∦":"\u2226","⫽⃥":"\u2AFD\u20E5","∂̸":"\u2202\u0338","⨔":"\u2A14","⊀":"\u2280","⋠":"\u22E0","⪯̸":"\u2AAF\u0338","⊀":"\u2280","⪯̸":"\u2AAF\u0338","⇏":"\u21CF","↛":"\u219B","⤳̸":"\u2933\u0338","↝̸":"\u219D\u0338","↛":"\u219B","⋫":"\u22EB","⋭":"\u22ED","⊁":"\u2281","⋡":"\u22E1","⪰̸":"\u2AB0\u0338","𝓃":"\u{1D4C3}","∤":"\u2224","∦":"\u2226","≁":"\u2241","≄":"\u2244","≄":"\u2244","∤":"\u2224","∦":"\u2226","⋢":"\u22E2","⋣":"\u22E3","⊄":"\u2284","⫅̸":"\u2AC5\u0338","⊈":"\u2288","⊂⃒":"\u2282\u20D2","⊈":"\u2288","⫅̸":"\u2AC5\u0338","⊁":"\u2281","⪰̸":"\u2AB0\u0338","⊅":"\u2285","⫆̸":"\u2AC6\u0338","⊉":"\u2289","⊃⃒":"\u2283\u20D2","⊉":"\u2289","⫆̸":"\u2AC6\u0338","≹":"\u2279","ñ":"\xF1","ñ":"\xF1","≸":"\u2278","⋪":"\u22EA","⋬":"\u22EC","⋫":"\u22EB","⋭":"\u22ED","ν":"\u03BD","#":"#","№":"\u2116"," ":"\u2007","⊭":"\u22AD","⤄":"\u2904","≍⃒":"\u224D\u20D2","⊬":"\u22AC","≥⃒":"\u2265\u20D2",">⃒":">\u20D2","⧞":"\u29DE","⤂":"\u2902","≤⃒":"\u2264\u20D2","<⃒":"<\u20D2","⊴⃒":"\u22B4\u20D2","⤃":"\u2903","⊵⃒":"\u22B5\u20D2","∼⃒":"\u223C\u20D2","⇖":"\u21D6","⤣":"\u2923","↖":"\u2196","↖":"\u2196","⤧":"\u2927","Ⓢ":"\u24C8","ó":"\xF3","ó":"\xF3","⊛":"\u229B","⊚":"\u229A","ô":"\xF4","ô":"\xF4","о":"\u043E","⊝":"\u229D","ő":"\u0151","⨸":"\u2A38","⊙":"\u2299","⦼":"\u29BC","œ":"\u0153","⦿":"\u29BF","𝔬":"\u{1D52C}","˛":"\u02DB","ò":"\xF2","ò":"\xF2","⧁":"\u29C1","⦵":"\u29B5","Ω":"\u03A9","∮":"\u222E","↺":"\u21BA","⦾":"\u29BE","⦻":"\u29BB","‾":"\u203E","⧀":"\u29C0","ō":"\u014D","ω":"\u03C9","ο":"\u03BF","⦶":"\u29B6","⊖":"\u2296","𝕠":"\u{1D560}","⦷":"\u29B7","⦹":"\u29B9","⊕":"\u2295","∨":"\u2228","↻":"\u21BB","⩝":"\u2A5D","ℴ":"\u2134","ℴ":"\u2134","ª":"\xAA","ª":"\xAA","º":"\xBA","º":"\xBA","⊶":"\u22B6","⩖":"\u2A56","⩗":"\u2A57","⩛":"\u2A5B","ℴ":"\u2134","ø":"\xF8","ø":"\xF8","⊘":"\u2298","õ":"\xF5","õ":"\xF5","⊗":"\u2297","⨶":"\u2A36","ö":"\xF6","ö":"\xF6","⌽":"\u233D","∥":"\u2225","¶":"\xB6","¶":"\xB6","∥":"\u2225","⫳":"\u2AF3","⫽":"\u2AFD","∂":"\u2202","п":"\u043F","%":"%",".":".","‰":"\u2030","⊥":"\u22A5","‱":"\u2031","𝔭":"\u{1D52D}","φ":"\u03C6","ϕ":"\u03D5","ℳ":"\u2133","☎":"\u260E","π":"\u03C0","⋔":"\u22D4","ϖ":"\u03D6","ℏ":"\u210F","ℎ":"\u210E","ℏ":"\u210F","+":"+","⨣":"\u2A23","⊞":"\u229E","⨢":"\u2A22","∔":"\u2214","⨥":"\u2A25","⩲":"\u2A72","±":"\xB1","±":"\xB1","⨦":"\u2A26","⨧":"\u2A27","±":"\xB1","⨕":"\u2A15","𝕡":"\u{1D561}","£":"\xA3","£":"\xA3","≺":"\u227A","⪳":"\u2AB3","⪷":"\u2AB7","≼":"\u227C","⪯":"\u2AAF","≺":"\u227A","⪷":"\u2AB7","≼":"\u227C","⪯":"\u2AAF","⪹":"\u2AB9","⪵":"\u2AB5","⋨":"\u22E8","≾":"\u227E","′":"\u2032","ℙ":"\u2119","⪵":"\u2AB5","⪹":"\u2AB9","⋨":"\u22E8","∏":"\u220F","⌮":"\u232E","⌒":"\u2312","⌓":"\u2313","∝":"\u221D","∝":"\u221D","≾":"\u227E","⊰":"\u22B0","𝓅":"\u{1D4C5}","ψ":"\u03C8"," ":"\u2008","𝔮":"\u{1D52E}","⨌":"\u2A0C","𝕢":"\u{1D562}","⁗":"\u2057","𝓆":"\u{1D4C6}","ℍ":"\u210D","⨖":"\u2A16","?":"?","≟":"\u225F",""":'"',""":'"',"⇛":"\u21DB","⇒":"\u21D2","⤜":"\u291C","⤏":"\u290F","⥤":"\u2964","∽̱":"\u223D\u0331","ŕ":"\u0155","√":"\u221A","⦳":"\u29B3","⟩":"\u27E9","⦒":"\u2992","⦥":"\u29A5","⟩":"\u27E9","»":"\xBB","»":"\xBB","→":"\u2192","⥵":"\u2975","⇥":"\u21E5","⤠":"\u2920","⤳":"\u2933","⤞":"\u291E","↪":"\u21AA","↬":"\u21AC","⥅":"\u2945","⥴":"\u2974","↣":"\u21A3","↝":"\u219D","⤚":"\u291A","∶":"\u2236","ℚ":"\u211A","⤍":"\u290D","❳":"\u2773","}":"}","]":"]","⦌":"\u298C","⦎":"\u298E","⦐":"\u2990","ř":"\u0159","ŗ":"\u0157","⌉":"\u2309","}":"}","р":"\u0440","⤷":"\u2937","⥩":"\u2969","”":"\u201D","”":"\u201D","↳":"\u21B3","ℜ":"\u211C","ℛ":"\u211B","ℜ":"\u211C","ℝ":"\u211D","▭":"\u25AD","®":"\xAE","®":"\xAE","⥽":"\u297D","⌋":"\u230B","𝔯":"\u{1D52F}","⇁":"\u21C1","⇀":"\u21C0","⥬":"\u296C","ρ":"\u03C1","ϱ":"\u03F1","→":"\u2192","↣":"\u21A3","⇁":"\u21C1","⇀":"\u21C0","⇄":"\u21C4","⇌":"\u21CC","⇉":"\u21C9","↝":"\u219D","⋌":"\u22CC","˚":"\u02DA","≓":"\u2253","⇄":"\u21C4","⇌":"\u21CC","‏":"\u200F","⎱":"\u23B1","⎱":"\u23B1","⫮":"\u2AEE","⟭":"\u27ED","⇾":"\u21FE","⟧":"\u27E7","⦆":"\u2986","𝕣":"\u{1D563}","⨮":"\u2A2E","⨵":"\u2A35",")":")","⦔":"\u2994","⨒":"\u2A12","⇉":"\u21C9","›":"\u203A","𝓇":"\u{1D4C7}","↱":"\u21B1","]":"]","’":"\u2019","’":"\u2019","⋌":"\u22CC","⋊":"\u22CA","▹":"\u25B9","⊵":"\u22B5","▸":"\u25B8","⧎":"\u29CE","⥨":"\u2968","℞":"\u211E","ś":"\u015B","‚":"\u201A","≻":"\u227B","⪴":"\u2AB4","⪸":"\u2AB8","š":"\u0161","≽":"\u227D","⪰":"\u2AB0","ş":"\u015F","ŝ":"\u015D","⪶":"\u2AB6","⪺":"\u2ABA","⋩":"\u22E9","⨓":"\u2A13","≿":"\u227F","с":"\u0441","⋅":"\u22C5","⊡":"\u22A1","⩦":"\u2A66","⇘":"\u21D8","⤥":"\u2925","↘":"\u2198","↘":"\u2198","§":"\xA7","§":"\xA7",";":";","⤩":"\u2929","∖":"\u2216","∖":"\u2216","✶":"\u2736","𝔰":"\u{1D530}","⌢":"\u2322","♯":"\u266F","щ":"\u0449","ш":"\u0448","∣":"\u2223","∥":"\u2225","­":"\xAD","­":"\xAD","σ":"\u03C3","ς":"\u03C2","ς":"\u03C2","∼":"\u223C","⩪":"\u2A6A","≃":"\u2243","≃":"\u2243","⪞":"\u2A9E","⪠":"\u2AA0","⪝":"\u2A9D","⪟":"\u2A9F","≆":"\u2246","⨤":"\u2A24","⥲":"\u2972","←":"\u2190","∖":"\u2216","⨳":"\u2A33","⧤":"\u29E4","∣":"\u2223","⌣":"\u2323","⪪":"\u2AAA","⪬":"\u2AAC","⪬︀":"\u2AAC\uFE00","ь":"\u044C","/":"/","⧄":"\u29C4","⌿":"\u233F","𝕤":"\u{1D564}","♠":"\u2660","♠":"\u2660","∥":"\u2225","⊓":"\u2293","⊓︀":"\u2293\uFE00","⊔":"\u2294","⊔︀":"\u2294\uFE00","⊏":"\u228F","⊑":"\u2291","⊏":"\u228F","⊑":"\u2291","⊐":"\u2290","⊒":"\u2292","⊐":"\u2290","⊒":"\u2292","□":"\u25A1","□":"\u25A1","▪":"\u25AA","▪":"\u25AA","→":"\u2192","𝓈":"\u{1D4C8}","∖":"\u2216","⌣":"\u2323","⋆":"\u22C6","☆":"\u2606","★":"\u2605","ϵ":"\u03F5","ϕ":"\u03D5","¯":"\xAF","⊂":"\u2282","⫅":"\u2AC5","⪽":"\u2ABD","⊆":"\u2286","⫃":"\u2AC3","⫁":"\u2AC1","⫋":"\u2ACB","⊊":"\u228A","⪿":"\u2ABF","⥹":"\u2979","⊂":"\u2282","⊆":"\u2286","⫅":"\u2AC5","⊊":"\u228A","⫋":"\u2ACB","⫇":"\u2AC7","⫕":"\u2AD5","⫓":"\u2AD3","≻":"\u227B","⪸":"\u2AB8","≽":"\u227D","⪰":"\u2AB0","⪺":"\u2ABA","⪶":"\u2AB6","⋩":"\u22E9","≿":"\u227F","∑":"\u2211","♪":"\u266A","¹":"\xB9","¹":"\xB9","²":"\xB2","²":"\xB2","³":"\xB3","³":"\xB3","⊃":"\u2283","⫆":"\u2AC6","⪾":"\u2ABE","⫘":"\u2AD8","⊇":"\u2287","⫄":"\u2AC4","⟉":"\u27C9","⫗":"\u2AD7","⥻":"\u297B","⫂":"\u2AC2","⫌":"\u2ACC","⊋":"\u228B","⫀":"\u2AC0","⊃":"\u2283","⊇":"\u2287","⫆":"\u2AC6","⊋":"\u228B","⫌":"\u2ACC","⫈":"\u2AC8","⫔":"\u2AD4","⫖":"\u2AD6","⇙":"\u21D9","⤦":"\u2926","↙":"\u2199","↙":"\u2199","⤪":"\u292A","ß":"\xDF","ß":"\xDF","⌖":"\u2316","τ":"\u03C4","⎴":"\u23B4","ť":"\u0165","ţ":"\u0163","т":"\u0442","⃛":"\u20DB","⌕":"\u2315","𝔱":"\u{1D531}","∴":"\u2234","∴":"\u2234","θ":"\u03B8","ϑ":"\u03D1","ϑ":"\u03D1","≈":"\u2248","∼":"\u223C"," ":"\u2009","≈":"\u2248","∼":"\u223C","þ":"\xFE","þ":"\xFE","˜":"\u02DC","×":"\xD7","×":"\xD7","⊠":"\u22A0","⨱":"\u2A31","⨰":"\u2A30","∭":"\u222D","⤨":"\u2928","⊤":"\u22A4","⌶":"\u2336","⫱":"\u2AF1","𝕥":"\u{1D565}","⫚":"\u2ADA","⤩":"\u2929","‴":"\u2034","™":"\u2122","▵":"\u25B5","▿":"\u25BF","◃":"\u25C3","⊴":"\u22B4","≜":"\u225C","▹":"\u25B9","⊵":"\u22B5","◬":"\u25EC","≜":"\u225C","⨺":"\u2A3A","⨹":"\u2A39","⧍":"\u29CD","⨻":"\u2A3B","⏢":"\u23E2","𝓉":"\u{1D4C9}","ц":"\u0446","ћ":"\u045B","ŧ":"\u0167","≬":"\u226C","↞":"\u219E","↠":"\u21A0","⇑":"\u21D1","⥣":"\u2963","ú":"\xFA","ú":"\xFA","↑":"\u2191","ў":"\u045E","ŭ":"\u016D","û":"\xFB","û":"\xFB","у":"\u0443","⇅":"\u21C5","ű":"\u0171","⥮":"\u296E","⥾":"\u297E","𝔲":"\u{1D532}","ù":"\xF9","ù":"\xF9","↿":"\u21BF","↾":"\u21BE","▀":"\u2580","⌜":"\u231C","⌜":"\u231C","⌏":"\u230F","◸":"\u25F8","ū":"\u016B","¨":"\xA8","¨":"\xA8","ų":"\u0173","𝕦":"\u{1D566}","↑":"\u2191","↕":"\u2195","↿":"\u21BF","↾":"\u21BE","⊎":"\u228E","υ":"\u03C5","ϒ":"\u03D2","υ":"\u03C5","⇈":"\u21C8","⌝":"\u231D","⌝":"\u231D","⌎":"\u230E","ů":"\u016F","◹":"\u25F9","𝓊":"\u{1D4CA}","⋰":"\u22F0","ũ":"\u0169","▵":"\u25B5","▴":"\u25B4","⇈":"\u21C8","ü":"\xFC","ü":"\xFC","⦧":"\u29A7","⇕":"\u21D5","⫨":"\u2AE8","⫩":"\u2AE9","⊨":"\u22A8","⦜":"\u299C","ϵ":"\u03F5","ϰ":"\u03F0","∅":"\u2205","ϕ":"\u03D5","ϖ":"\u03D6","∝":"\u221D","↕":"\u2195","ϱ":"\u03F1","ς":"\u03C2","⊊︀":"\u228A\uFE00","⫋︀":"\u2ACB\uFE00","⊋︀":"\u228B\uFE00","⫌︀":"\u2ACC\uFE00","ϑ":"\u03D1","⊲":"\u22B2","⊳":"\u22B3","в":"\u0432","⊢":"\u22A2","∨":"\u2228","⊻":"\u22BB","≚":"\u225A","⋮":"\u22EE","|":"|","|":"|","𝔳":"\u{1D533}","⊲":"\u22B2","⊂⃒":"\u2282\u20D2","⊃⃒":"\u2283\u20D2","𝕧":"\u{1D567}","∝":"\u221D","⊳":"\u22B3","𝓋":"\u{1D4CB}","⫋︀":"\u2ACB\uFE00","⊊︀":"\u228A\uFE00","⫌︀":"\u2ACC\uFE00","⊋︀":"\u228B\uFE00","⦚":"\u299A","ŵ":"\u0175","⩟":"\u2A5F","∧":"\u2227","≙":"\u2259","℘":"\u2118","𝔴":"\u{1D534}","𝕨":"\u{1D568}","℘":"\u2118","≀":"\u2240","≀":"\u2240","𝓌":"\u{1D4CC}","⋂":"\u22C2","◯":"\u25EF","⋃":"\u22C3","▽":"\u25BD","𝔵":"\u{1D535}","⟺":"\u27FA","⟷":"\u27F7","ξ":"\u03BE","⟸":"\u27F8","⟵":"\u27F5","⟼":"\u27FC","⋻":"\u22FB","⨀":"\u2A00","𝕩":"\u{1D569}","⨁":"\u2A01","⨂":"\u2A02","⟹":"\u27F9","⟶":"\u27F6","𝓍":"\u{1D4CD}","⨆":"\u2A06","⨄":"\u2A04","△":"\u25B3","⋁":"\u22C1","⋀":"\u22C0","ý":"\xFD","ý":"\xFD","я":"\u044F","ŷ":"\u0177","ы":"\u044B","¥":"\xA5","¥":"\xA5","𝔶":"\u{1D536}","ї":"\u0457","𝕪":"\u{1D56A}","𝓎":"\u{1D4CE}","ю":"\u044E","ÿ":"\xFF","ÿ":"\xFF","ź":"\u017A","ž":"\u017E","з":"\u0437","ż":"\u017C","ℨ":"\u2128","ζ":"\u03B6","𝔷":"\u{1D537}","ж":"\u0436","⇝":"\u21DD","𝕫":"\u{1D56B}","𝓏":"\u{1D4CF}","‍":"\u200D","‌":"\u200C"},rr=Vp;function zp(e){return e.replace(/&(#\d+|#x[a-f0-9]+|[a-z]+\d*);?/gi,(t,o)=>{if(typeof rr[t]=="string")return rr[t];if(o.charAt(0)!=="#"||t.charAt(t.length-1)!==";")return t;let i;o.charAt(1)==="x"?i=parseInt(o.substr(2),16):i=parseInt(o.substr(1),10);let r="";return i>=55296&&i<=57343||i>1114111?"\uFFFD":(i>65535&&(i-=65536,r+=String.fromCharCode(i>>>10&1023|55296),i=56320|i&1023),r+=String.fromCharCode(i),r)})}function _t(e){return e.trim().replace(/[<>"'?&]/g,t=>{let o=t.charCodeAt(0).toString(16);return o.length<2&&(o="0"+o),"&#x"+o.toUpperCase()+";"})}function is(e){return"<div>"+_t(e).replace(/\n/g,"<br />")+"</div>"}function rs(e){return e=e.replace(/\r?\n/g,"").replace(/<\!\-\-.*?\-\->/gi," ").replace(/<br\b[^>]*>/gi,`
|
|
259
259
|
`).replace(/<\/?(p|div|table|tr|td|th)\b[^>]*>/gi,`
|
|
260
260
|
|
|
261
261
|
`).replace(/<script\b[^>]*>.*?<\/script\b[^>]*>/gi," ").replace(/^.*<body\b[^>]*>/i,"").replace(/^.*<\/head\b[^>]*>/i,"").replace(/^.*<\!doctype\b[^>]*>/i,"").replace(/<\/body\b[^>]*>.*$/i,"").replace(/<\/html\b[^>]*>.*$/i,"").replace(/<a\b[^>]*href\s*=\s*["']?([^\s"']+)[^>]*>/gi," ($1) ").replace(/<\/?(span|em|i|strong|b|u|a)\b[^>]*>/gi,"").replace(/<li\b[^>]*>[\n\u0001\s]*/gi,"* ").replace(/<hr\b[^>]*>/g,`
|
|
@@ -265,60 +265,60 @@ ${a}
|
|
|
265
265
|
|
|
266
266
|
`).replace(/^\n+/,`
|
|
267
267
|
`).replace(/\n+$/,`
|
|
268
|
-
`),e=zp(e),e}function ns(e){return[].concat(e.name||[]).concat(e.name?`<${e.address}>`:e.address).join(" ")}function nr(e){let t=[],o=(i,r)=>{if(r&&t.push(", "),i.group){let n=`${i.name}:`,s=";";t.push(n),i.group.forEach(o),t.push(s)}else t.push(ns(i))};return e.forEach(o),t.join("")}function ss(e){return`<a href="mailto:${
|
|
268
|
+
`),e=zp(e),e}function ns(e){return[].concat(e.name||[]).concat(e.name?`<${e.address}>`:e.address).join(" ")}function nr(e){let t=[],o=(i,r)=>{if(r&&t.push(", "),i.group){let n=`${i.name}:`,s=";";t.push(n),i.group.forEach(o),t.push(s)}else t.push(ns(i))};return e.forEach(o),t.join("")}function ss(e){return`<a href="mailto:${_t(e.address)}" class="postal-email-address">${_t(e.name||`<${e.address}>`)}</a>`}function sr(e){let t=[],o=(i,r)=>{if(r&&t.push('<span class="postal-email-address-separator">, </span>'),i.group){let n=`<span class="postal-email-address-group">${_t(i.name)}:</span>`,s='<span class="postal-email-address-group">;</span>';t.push(n),i.group.forEach(o),t.push(s)}else t.push(ss(i))};return e.forEach(o),t.join(" ")}function Yp(e,t,o){e=(e||"").toString(),t=t||76;let i=0,r=e.length,n="",s,a;for(;i<r;){if(s=e.substr(i,t),s.length<t){n+=s;break}if(a=s.match(/^[^\n\r]*(\r?\n|\r)/)){s=a[0],n+=s,i+=s.length;continue}else(a=s.match(/(\s+)[^\s]*$/))&&a[0].length-(o?(a[1]||"").length:0)<s.length?s=s.substr(0,s.length-(a[0].length-(o?(a[1]||"").length:0))):(a=e.substr(i+s.length).match(/^[^\s]+(\s*)/))&&(s=s+a[0].substr(0,a[0].length-(o?0:(a[1]||"").length)));n+=s,i+=s.length,i<r&&(n+=`\r
|
|
269
269
|
`)}return n}function ar(e){let t=[];if(e.from&&t.push({key:"From",val:ns(e.from)}),e.subject&&t.push({key:"Subject",val:e.subject}),e.date){let s={year:"numeric",month:"numeric",day:"numeric",hour:"numeric",minute:"numeric",second:"numeric",hour12:!1},a=typeof Intl>"u"?e.date:new Intl.DateTimeFormat("default",s).format(new Date(e.date));t.push({key:"Date",val:a})}e.to&&e.to.length&&t.push({key:"To",val:nr(e.to)}),e.cc&&e.cc.length&&t.push({key:"Cc",val:nr(e.cc)}),e.bcc&&e.bcc.length&&t.push({key:"Bcc",val:nr(e.bcc)});let o=t.map(s=>s.key.length).reduce((s,a)=>a>s?a:s,0);t=t.flatMap(s=>{let a=o-s.key.length,l=`${s.key}: ${" ".repeat(a)}`,u=`${" ".repeat(s.key.length+1)} ${" ".repeat(a)}`;return Yp(s.val,80,!0).split(/\r?\n/).map(p=>p.trim()).map((p,f)=>`${f?u:l}${p}`)});let i=t.map(s=>s.length).reduce((s,a)=>a>s?a:s,0),r="-".repeat(i);return`
|
|
270
270
|
${r}
|
|
271
271
|
${t.join(`
|
|
272
272
|
`)}
|
|
273
273
|
${r}
|
|
274
|
-
`}function lr(e){let t=[];if(e.from&&t.push(`<div class="postal-email-header-key">From</div><div class="postal-email-header-value">${ss(e.from)}</div>`),e.subject&&t.push(`<div class="postal-email-header-key">Subject</div><div class="postal-email-header-value postal-email-header-subject">${
|
|
274
|
+
`}function lr(e){let t=[];if(e.from&&t.push(`<div class="postal-email-header-key">From</div><div class="postal-email-header-value">${ss(e.from)}</div>`),e.subject&&t.push(`<div class="postal-email-header-key">Subject</div><div class="postal-email-header-value postal-email-header-subject">${_t(e.subject)}</div>`),e.date){let i={year:"numeric",month:"numeric",day:"numeric",hour:"numeric",minute:"numeric",second:"numeric",hour12:!1},r=typeof Intl>"u"?e.date:new Intl.DateTimeFormat("default",i).format(new Date(e.date));t.push(`<div class="postal-email-header-key">Date</div><div class="postal-email-header-value postal-email-header-date" data-date="${_t(e.date)}">${_t(r)}</div>`)}return e.to&&e.to.length&&t.push(`<div class="postal-email-header-key">To</div><div class="postal-email-header-value">${sr(e.to)}</div>`),e.cc&&e.cc.length&&t.push(`<div class="postal-email-header-key">Cc</div><div class="postal-email-header-value">${sr(e.cc)}</div>`),e.bcc&&e.bcc.length&&t.push(`<div class="postal-email-header-key">Bcc</div><div class="postal-email-header-value">${sr(e.bcc)}</div>`),`<div class="postal-email-header">${t.length?'<div class="postal-email-header-row">':""}${t.join(`</div>
|
|
275
275
|
<div class="postal-email-header-row">`)}${t.length?"</div>":""}</div>`}function Xp(e,t){let o=!1,i="text",r,n=[],s={address:[],comment:[],group:[],text:[],textWasQuoted:[]},a,l,u=!1;for(a=0,l=e.length;a<l;a++){let m=e[a],p=a?e[a-1]:null;if(m.type==="operator")switch(m.value){case"<":i="address",u=!1;break;case"(":i="comment",u=!1;break;case":":i="group",o=!0,u=!1;break;case'"':u=!u,i="text";break;default:i="text",u=!1;break}else m.value&&(i==="address"&&(m.value=m.value.replace(/^[^<]*<\s*/,"")),p&&p.noBreak&&s[i].length?(s[i][s[i].length-1]+=m.value,i==="text"&&u&&(s.textWasQuoted[s.textWasQuoted.length-1]=!0)):(s[i].push(m.value),i==="text"&&s.textWasQuoted.push(u)))}if(!s.text.length&&s.comment.length&&(s.text=s.comment,s.comment=[]),o){s.text=s.text.join(" ");let m=[];s.group.length&&dr(s.group.join(","),{_depth:t+1}).forEach(f=>{f.group?m=m.concat(f.group):m.push(f)}),n.push({name:kt(s.text||r&&r.name),group:m})}else{if(!s.address.length&&s.text.length){for(a=s.text.length-1;a>=0;a--)if(!s.textWasQuoted[a]&&s.text[a].match(/^[^@\s]+@[^@\s]+$/)){s.address=s.text.splice(a,1),s.textWasQuoted.splice(a,1);break}let m=function(p){return s.address.length?p:(s.address=[p.trim()]," ")};if(!s.address.length)for(a=s.text.length-1;a>=0&&!(!s.textWasQuoted[a]&&(s.text[a]=s.text[a].replace(/\s*\b[^@\s]+@[^\s]+\b\s*/,m).trim(),s.address.length));a--);}if(!s.text.length&&s.comment.length&&(s.text=s.comment,s.comment=[]),s.address.length>1&&(s.text=s.text.concat(s.address.splice(1))),s.text=s.text.join(" "),s.address=s.address.join(" "),!s.address&&/^=\?[^=]+?=$/.test(s.text.trim())){let m=kt(s.text);if(/<[^<>]+@[^<>]+>/.test(m)){let p=dr(m);if(p&&p.length)return p}return[{address:"",name:m}]}r={address:s.address||s.text||"",name:kt(s.text||s.address||"")},r.address===r.name&&((r.address||"").match(/@/)?r.name="":r.address=""),n.push(r)}return n}var cr=class{constructor(t){this.str=(t||"").toString(),this.operatorCurrent="",this.operatorExpecting="",this.node=null,this.escaped=!1,this.list=[],this.operators={'"':'"',"(":")","<":">",",":"",":":";",";":""}}tokenize(){let t=[];for(let o=0,i=this.str.length;o<i;o++){let r=this.str.charAt(o),n=o<i-1?this.str.charAt(o+1):null;this.checkChar(r,n)}return this.list.forEach(o=>{o.value=(o.value||"").toString().trim(),o.value&&t.push(o)}),t}checkChar(t,o){if(!this.escaped){if(t===this.operatorExpecting){this.node={type:"operator",value:t},o&&![" "," ","\r",`
|
|
276
276
|
`,",",";"].includes(o)&&(this.node.noBreak=!0),this.list.push(this.node),this.node=null,this.operatorExpecting="",this.escaped=!1;return}else if(!this.operatorExpecting&&t in this.operators){this.node={type:"operator",value:t},this.list.push(this.node),this.node=null,this.operatorExpecting=this.operators[t],this.escaped=!1;return}else if(this.operatorExpecting==='"'&&t==="\\"){this.escaped=!0;return}}this.node||(this.node={type:"text",value:""},this.list.push(this.node)),t===`
|
|
277
277
|
`&&(t=" "),(t.charCodeAt(0)>=33||[" "," "].includes(t))&&(this.node.value+=t),this.escaped=!1}},Zp=50;function dr(e,t){t=t||{};let o=t._depth||0;if(o>Zp)return[];let r=new cr(e).tokenize(),n=[],s=[],a=[];if(r.forEach(l=>{l.type==="operator"&&(l.value===","||l.value===";")?(s.length&&n.push(s),s=[]):s.push(l)}),s.length&&n.push(s),n.forEach(l=>{l=Xp(l,o),l.length&&(a=a.concat(l))}),t.flatten){let l=[],u=m=>{m.forEach(p=>{if(p.group)return u(p.group);l.push(p)})};return u(a),l}return a}var No=dr;function as(e){for(var t="",o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",i=new Uint8Array(e),r=i.byteLength,n=r%3,s=r-n,a,l,u,m,p,f=0;f<s;f=f+3)p=i[f]<<16|i[f+1]<<8|i[f+2],a=(p&16515072)>>18,l=(p&258048)>>12,u=(p&4032)>>6,m=p&63,t+=o[a]+o[l]+o[u]+o[m];return n==1?(p=i[s],a=(p&252)>>2,l=(p&3)<<4,t+=o[a]+o[l]+"=="):n==2&&(p=i[s]<<8|i[s+1],a=(p&64512)>>10,l=(p&1008)>>4,u=(p&15)<<2,t+=o[a]+o[l]+o[u]+"="),t}var ef=256,tf=2*1024*1024,of=10;function ur(e){return e.replace(/-(.)/g,(t,o)=>o.toUpperCase())}function mr(e,t,o){if(e==null)return t;if(typeof e!="number"||!Number.isInteger(e)||e<0)throw new TypeError(`${o} must be a non-negative integer`);return e}var mo=class e{static async parse(t,o){return new e(o).parse(t)}constructor(t,o=0){this.options=t||{},this.mimeOptions={maxNestingDepth:mr(this.options.maxNestingDepth,ef,"maxNestingDepth"),maxHeadersSize:mr(this.options.maxHeadersSize,tf,"maxHeadersSize")},this.maxRfc822NestingDepth=mr(this.options.maxRfc822NestingDepth,of,"maxRfc822NestingDepth"),this.rfc822NestingDepth=o,this.root=this.currentNode=new jt({postalMime:this,...this.mimeOptions}),this.boundaries=[],this.textContent={},this.attachments=[],this.attachmentEncoding=(this.options.attachmentEncoding||"").toString().replace(/[-_\s]/g,"").trim().toLowerCase()||"arraybuffer",this.started=!1}async finalize(){await this.root.finalize()}async processLine(t,o){let i=this.boundaries;if(i.length&&t.length>2&&t[0]===45&&t[1]===45)for(let r=i.length-1;r>=0;r--){let n=i[r];if(t.length<n.value.length+2)continue;let s=!0;for(let m=0;m<n.value.length;m++)if(t[m+2]!==n.value[m]){s=!1;break}if(!s)continue;let a=n.value.length+2,l=!1;t.length>=n.value.length+4&&t[n.value.length+2]===45&&t[n.value.length+3]===45&&(l=!0,a=n.value.length+4);let u=!0;for(let m=a;m<t.length;m++)if(t[m]!==32&&t[m]!==9){u=!1;break}if(u)return l?(await n.node.finalize(),this.currentNode=n.node.parentNode||this.root):(await n.node.finalizeChildNodes(),this.currentNode=new jt({postalMime:this,parentNode:n.node,parentMultipartType:n.node.contentType.multipart,...this.mimeOptions})),o?this.finalize():void 0}if(this.currentNode.feed(t),o)return this.finalize()}readLine(){let t=this.readPos,o=this.readPos;for(;this.readPos<this.av.length;){let i=this.av[this.readPos++];if(i!==13&&i!==10&&(o=this.readPos),i===10)return{bytes:new Uint8Array(this.buf,t,o-t),done:this.readPos>=this.av.length}}return{bytes:new Uint8Array(this.buf,t,o-t),done:this.readPos>=this.av.length}}async processNodeTree(){let t={},o=new Set,i=this.textMap=new Map,r=this.forceRfc822Attachments(),n=async(s,a,l)=>{if(a=a||!1,l=l||!1,s.contentType.multipart)s.contentType.multipart==="alternative"?a=s:s.contentType.multipart==="related"&&(l=s);else{let u=this.isInlineMessageRfc822(s)&&!r,m=u&&this.rfc822NestingDepth>=this.maxRfc822NestingDepth;if(u&&!m){let p=new e({...this.mimeOptions,maxRfc822NestingDepth:this.maxRfc822NestingDepth,attachmentEncoding:"arraybuffer"},this.rfc822NestingDepth+1);s.subMessage=await p.parse(s.content),i.has(s)||i.set(s,{});let f=i.get(s);(s.subMessage.text||!s.subMessage.html)&&(f.plain=f.plain||[],f.plain.push({type:"subMessage",value:s.subMessage}),o.add("plain")),s.subMessage.html&&(f.html=f.html||[],f.html.push({type:"subMessage",value:s.subMessage}),o.add("html")),p.textMap&&p.textMap.forEach((y,A)=>{i.set(A,y)});for(let y of s.subMessage.attachments||[])this.attachments.push(y)}else if(this.isInlineTextNode(s)){let p=s.contentType.parsed.value.substr(s.contentType.parsed.value.indexOf("/")+1),f=a||s;i.has(f)||i.set(f,{});let y=i.get(f);y[p]=y[p]||[],y[p].push({type:"text",value:s.getTextContent()}),o.add(p)}else if(s.content){let p=s.contentDisposition?.parsed?.params?.filename||s.contentType.parsed.params.name||null,f={filename:p?kt(p):null,mimeType:s.contentType.parsed.value,disposition:s.contentDisposition?.parsed?.value||null};switch(l&&s.contentId&&!m&&(f.related=!0),m&&(f.rfc822DepthExceeded=!0),s.contentDescription&&(f.description=s.contentDescription),s.contentId&&(f.contentId=s.contentId),s.contentType.parsed.value){case"text/calendar":case"application/ics":{s.contentType.parsed.params.method&&(f.method=s.contentType.parsed.params.method.toString().toUpperCase().trim());let y=s.getTextContent().replace(/\r?\n/g,`
|
|
278
278
|
`).replace(/\n*$/,`
|
|
279
279
|
`);f.content=ut.encode(y);break}default:f.content=s.content}this.attachments.push(f)}}for(let u of s.childNodes)await n(u,a,l)};await n(this.root,!1,!1),i.forEach(s=>{o.forEach(a=>{if(t[a]||(t[a]=[]),s[a])s[a].forEach(l=>{switch(l.type){case"text":t[a].push(l.value);break;case"subMessage":switch(a){case"html":t[a].push(lr(l.value));break;case"plain":t[a].push(ar(l.value));break}break}});else{let l;switch(a){case"html":l="plain";break;case"plain":l="html";break}(s[l]||[]).forEach(u=>{switch(u.type){case"text":switch(a){case"html":t[a].push(is(u.value));break;case"plain":t[a].push(rs(u.value));break}break;case"subMessage":switch(a){case"html":t[a].push(lr(u.value));break;case"plain":t[a].push(ar(u.value));break}break}})}})}),Object.keys(t).forEach(s=>{t[s]=t[s].join(`
|
|
280
|
-
`)}),this.textContent=t}isInlineTextNode(t){if(t.contentDisposition?.parsed?.value==="attachment")return!1;switch(t.contentType.parsed?.value){case"text/html":case"text/plain":return!0;default:return!1}}isInlineMessageRfc822(t){return t.contentType.parsed?.value!=="message/rfc822"?!1:(t.contentDisposition?.parsed?.value||(this.options.rfc822Attachments?"attachment":"inline"))==="inline"}forceRfc822Attachments(){if(this.options.forceRfc822Attachments)return!0;let t=!1,o=i=>{i.contentType.multipart||i.contentType.parsed&&["message/delivery-status","message/feedback-report"].includes(i.contentType.parsed.value)&&(t=!0);for(let r of i.childNodes)o(r)};return o(this.root),t}async resolveStream(t){let o=0,i=[],r=t.getReader();for(;;){let{done:a,value:l}=await r.read();if(a)break;i.push(l),o+=l.length}let n=new Uint8Array(o),s=0;for(let a of i)n.set(a,s),s+=a.length;return n}async parse(t){if(this.started)throw new Error("Can not reuse parser, create a new PostalMime object");for(this.started=!0,t&&typeof t.getReader=="function"&&(t=await this.resolveStream(t)),t=t||new ArrayBuffer(0),typeof t=="string"&&(t=ut.encode(t)),(t instanceof Blob||Object.prototype.toString.call(t)==="[object Blob]")&&(t=await mt(t)),t.buffer instanceof ArrayBuffer&&(t=new Uint8Array(t).buffer),this.buf=t,this.av=new Uint8Array(t),this.readPos=0;this.readPos<this.av.length;){let r=this.readLine();await this.processLine(r.bytes,r.done)}await this.processNodeTree();let o={headers:this.root.headers.map(r=>({key:r.key,originalKey:r.originalKey,value:r.value})).reverse()};for(let r of["from","sender"]){let n=this.root.headers.find(s=>s.key===r);if(n&&n.value){let s=No(n.value);s&&s.length&&(o[r]=s[0])}}for(let r of["delivered-to","return-path"]){let n=this.root.headers.find(s=>s.key===r);if(n&&n.value){let s=No(n.value);if(s&&s.length&&s[0].address){let a=ur(r);o[a]=s[0].address}}}for(let r of["to","cc","bcc","reply-to"]){let n=this.root.headers.filter(a=>a.key===r),s=[];if(n.filter(a=>a&&a.value).map(a=>No(a.value)).forEach(a=>s=s.concat(a||[])),s&&s.length){let a=ur(r);o[a]=s}}for(let r of["subject","message-id","in-reply-to","references"]){let n=this.root.headers.find(s=>s.key===r);if(n&&n.value){let s=ur(r);o[s]=kt(n.value)}}let i=this.root.headers.find(r=>r.key==="date");if(i){let r=new Date(i.value);r.toString()==="Invalid Date"?r=i.value:r=r.toISOString(),o.date=r}switch(this.textContent?.html&&(o.html=this.textContent.html),this.textContent?.plain&&(o.text=this.textContent.plain),o.attachments=this.attachments,o.headerLines=(this.root.rawHeaderLines||[]).slice().reverse(),this.attachmentEncoding){case"arraybuffer":break;case"base64":for(let n of o.attachments||[])n?.content&&(n.content=as(n.content),n.encoding="base64");break;case"utf8":let r=new TextDecoder("utf8");for(let n of o.attachments||[])n?.content&&(n.content=r.decode(n.content),n.encoding="utf8");break;default:throw new Error("Unknown attachment encoding")}return o}};var Ss=me(As(),1),Ks=["inbox","archive","spam","sent","trash"],ks=["inbox","archive","spam","trash"],Lo=["cyan","teal","grass","lime","yellow","orange","iris","plum","crimson","bronze","mauve"],mf="6.28.1-preview-inboxes.0";function le(e,t){let o=$t(t);return o?`${e}?${o}`:e}function $t(e){let t=new URLSearchParams;return e.limit!==void 0&&t.set("limit",e.limit.toString()),"after"in e&&e.after!==void 0&&t.set("after",e.after),"before"in e&&e.before!==void 0&&t.set("before",e.before),t.toString()}var pf=class{constructor(e){this.resend=e}async create(e,t={}){return await this.resend.post("/api-keys",e,t)}async list(e={}){let t=le("/api-keys",e);return await this.resend.get(t)}async update(e,t){return await this.resend.patch(`/api-keys/${e}`,t)}async remove(e){return await this.resend.delete(`/api-keys/${e}`)}},ff=class{constructor(e){this.resend=e}async get(e){return await this.resend.get(`/automations/${e.automationId}/runs/${e.runId}`)}async list(e){let t=$t(e),o=new URLSearchParams(t);if(e.status){let n=Array.isArray(e.status)?e.status.join(","):e.status;o.set("status",n)}let i=o.toString(),r=i?`/automations/${e.automationId}/runs?${i}`:`/automations/${e.automationId}/runs`;return await this.resend.get(r)}};function Fs(e){switch(e.type){case"trigger":return{key:e.key,type:e.type,config:{event_name:e.config.eventName}};case"delay":return{key:e.key,type:e.type,config:e.config};case"send_email":return{key:e.key,type:e.type,config:{template:e.config.template,subject:e.config.subject,from:e.config.from,reply_to:e.config.replyTo}};case"wait_for_event":return{key:e.key,type:e.type,config:{event_name:e.config.eventName,timeout:e.config.timeout,filter_rule:e.config.filterRule}};case"condition":return{key:e.key,type:e.type,config:e.config};case"contact_update":return{key:e.key,type:e.type,config:{first_name:e.config.firstName,last_name:e.config.lastName,unsubscribed:e.config.unsubscribed,properties:e.config.properties}};case"contact_delete":return{key:e.key,type:e.type,config:e.config};case"add_to_segment":return{key:e.key,type:e.type,config:{segment_id:e.config.segmentId}}}}function Rs(e){return{from:e.from,to:e.to,type:e.type}}function hf(e){return{name:e.name,status:e.status,steps:e.steps.map(Fs),connections:e.connections.map(Rs)}}function gf(e){return{event:e.event,contact_id:e.contactId,email:e.email,payload:e.payload}}var Af=class{constructor(e){this.resend=e,this.runs=new ff(this.resend)}async create(e){return await this.resend.post("/automations",hf(e))}async list(e={}){let t=[$t(e)];e.status&&t.push(`status=${encodeURIComponent(e.status)}`);let o=t.filter(Boolean).join("&"),i=o?`/automations?${o}`:"/automations";return await this.resend.get(i)}async get(e){return await this.resend.get(`/automations/${e}`)}async remove(e){return await this.resend.delete(`/automations/${e}`)}async update(e,t){let o={};return t.name!==void 0&&(o.name=t.name),t.status!==void 0&&(o.status=t.status),t.steps!==void 0&&(o.steps=t.steps.map(Fs)),t.connections!==void 0&&(o.connections=t.connections.map(Rs)),await this.resend.patch(`/automations/${e}`,o)}async duplicate(e){return await this.resend.post(`/automations/${e}/duplicate`)}async stop(e){return await this.resend.post(`/automations/${e}/stop`)}};function bf(e){return e?.map(t=>({content:t.content,filename:t.filename,path:t.path,content_type:t.contentType,content_id:t.contentId}))}function _s(e){return{attachments:bf(e.attachments),bcc:e.bcc,cc:e.cc,from:e.from,headers:e.headers,html:e.html,reply_to:e.replyTo,scheduled_at:e.scheduledAt,subject:e.subject,tags:e.tags,text:e.text,to:e.to,template:e.template?{id:e.template.id,variables:e.template.variables}:void 0,topic_id:e.topicId}}async function fo(e){let t;try{({render:t}=await import("@react-email/render"))}catch{throw new Error("Failed to render React component. Make sure to install `@react-email/render` or `@react-email/components`.")}return t(e)}var yf=class{constructor(e){this.resend=e}async send(e,t){return this.create(e,t)}async create(e,t){let o=[];for(let i of e)i.react&&(i.html=await fo(i.react),i.react=void 0),o.push(_s(i));return await this.resend.post("/emails/batch",o,{...t,headers:{"x-batch-validation":t?.batchValidation??"strict",...t?.headers}})}},Cf=class{constructor(e){this.resend=e}async create(e,t={}){let o=e.react?await fo(e.react):e.html;return await this.resend.post("/broadcasts",{name:e.name,segment_id:e.segmentId,audience_id:e.audienceId,preview_text:e.previewText,from:e.from,html:o,reply_to:e.replyTo,subject:e.subject,text:e.text,topic_id:e.topicId,send:e.send,scheduled_at:e.scheduledAt},t)}async send(e,t){return await this.resend.post(`/broadcasts/${e}/send`,{scheduled_at:t?.scheduledAt})}async list(e={}){let t=le("/broadcasts",e);return await this.resend.get(t)}async get(e){return await this.resend.get(`/broadcasts/${e}`)}async recipients(e,t){let o=`/broadcasts/${e}/recipients?${xf(t)}`;return await this.resend.get(o)}async clickedLinks(e,t={}){let o=le(`/broadcasts/${e}/clicked-links`,t);return await this.resend.get(o)}async remove(e){return await this.resend.delete(`/broadcasts/${e}`)}async cancel(e){return await this.resend.post(`/broadcasts/${e}/cancel`)}async duplicate(e){return await this.resend.post(`/broadcasts/${e}/duplicate`)}async update(e,t){let o=t.react?await fo(t.react):t.html;return await this.resend.patch(`/broadcasts/${e}`,{name:t.name,segment_id:t.segmentId,audience_id:t.audienceId,from:t.from,html:o,text:t.text,subject:t.subject,reply_to:t.replyTo,preview_text:t.previewText,topic_id:t.topicId})}};function xf(e){let{type:t,email:o,bounceType:i,...r}=e,n=new URLSearchParams($t(r));return n.set("type",t),o!==void 0&&n.set("email",o),i!==void 0&&n.set("bounce_type",i),n.toString()}function bs(e){return{id:e.id,key:e.key,createdAt:e.created_at,type:e.type,fallbackValue:e.fallback_value}}function ys(e){return"key"in e?{key:e.key,type:e.type,fallback_value:e.fallbackValue}:{fallback_value:e.fallbackValue}}var wf=class{constructor(e){this.resend=e}async create(e){let t=ys(e);return await this.resend.post("/contact-properties",t)}async list(e={}){let t=le("/contact-properties",e),o=await this.resend.get(t);return o.data?{data:{...o.data,data:o.data.data.map(i=>bs(i))},headers:o.headers,error:null}:o}async get(e){if(!e)return{data:null,headers:null,error:{message:"Missing `id` field.",statusCode:null,name:"missing_required_field"}};let t=await this.resend.get(`/contact-properties/${e}`);return t.data?{data:{object:"contact_property",...bs(t.data)},headers:t.headers,error:null}:t}async update(e){if(!e.id)return{data:null,headers:null,error:{message:"Missing `id` field.",statusCode:null,name:"missing_required_field"}};let t=ys(e);return await this.resend.patch(`/contact-properties/${e.id}`,t)}async remove(e){return e?await this.resend.delete(`/contact-properties/${e}`):{data:null,headers:null,error:{message:"Missing `id` field.",statusCode:null,name:"missing_required_field"}}}},Uf=class{constructor(e){this.resend=e}async create(e,t={}){let o=this.buildCreateFormData(e);return this.resend.post("/contacts/imports",o,t)}async list(e={}){let t=new URLSearchParams($t(e));e.status!==void 0&&t.set("status",e.status);let o=t.toString(),i=o?`/contacts/imports?${o}`:"/contacts/imports";return this.resend.get(i)}async get(e){return this.resend.get(`/contacts/imports/${e}`)}buildCreateFormData(e){let t=new FormData;return t.append("file",e.file),this.appendField(t,"column_map",this.buildColumnMap(e.columnMap??null)),this.appendField(t,"on_conflict",e.onConflict??null),this.appendField(t,"segments",e.segments??null),this.appendField(t,"topics",e.topics??null),t}buildColumnMap(e){return e===null?null:{email:e.email,first_name:e.firstName,last_name:e.lastName,unsubscribed:e.unsubscribed,properties:e.properties}}appendField(e,t,o){o!==null&&e.append(t,typeof o=="string"?o:JSON.stringify(o))}},vf=class{constructor(e){this.resend=e}async list(e){if(!e.contactId&&!e.email)return{data:null,headers:null,error:{message:"Missing `id` or `email` field.",statusCode:null,name:"missing_required_field"}};let t=le(`/contacts/${e.email?e.email:e.contactId}/segments`,e);return await this.resend.get(t)}async add(e){if(!e.contactId&&!e.email)return{data:null,headers:null,error:{message:"Missing `id` or `email` field.",statusCode:null,name:"missing_required_field"}};let t=e.email?e.email:e.contactId;return this.resend.post(`/contacts/${t}/segments/${e.segmentId}`)}async remove(e){if(!e.contactId&&!e.email)return{data:null,headers:null,error:{message:"Missing `id` or `email` field.",statusCode:null,name:"missing_required_field"}};let t=e.email?e.email:e.contactId;return this.resend.delete(`/contacts/${t}/segments/${e.segmentId}`)}},Sf=class{constructor(e){this.resend=e}async update(e){if(!e.id&&!e.email)return{data:null,headers:null,error:{message:"Missing `id` or `email` field.",statusCode:null,name:"missing_required_field"}};let t=e.email?e.email:e.id;return this.resend.patch(`/contacts/${t}/topics`,e.topics)}async list(e){if(!e.id&&!e.email)return{data:null,headers:null,error:{message:"Missing `id` or `email` field.",statusCode:null,name:"missing_required_field"}};let t=le(`/contacts/${e.email?e.email:e.id}/topics`,e);return this.resend.get(t)}},Kf=class{constructor(e){this.resend=e,this.imports=new Uf(this.resend),this.topics=new Sf(this.resend),this.segments=new vf(this.resend)}async create(e,t={}){return"audienceId"in e?"segments"in e||"topics"in e?{data:null,headers:null,error:{message:"`audienceId` is deprecated, and cannot be used together with `segments` or `topics`. Use `segments` instead to add one or more segments to the new contact.",statusCode:null,name:"invalid_parameter"}}:await this.resend.post(`/audiences/${e.audienceId}/contacts`,{unsubscribed:e.unsubscribed,email:e.email,first_name:e.firstName,last_name:e.lastName,properties:e.properties},t):await this.resend.post("/contacts",{unsubscribed:e.unsubscribed,email:e.email,first_name:e.firstName,last_name:e.lastName,properties:e.properties,segments:e.segments,topics:e.topics},t)}async list(e={}){let t=e.segmentId??e.audienceId;if(!t){let i=le("/contacts",e);return await this.resend.get(i)}let o=le(`/segments/${t}/contacts`,e);return await this.resend.get(o)}async get(e){return typeof e=="string"?this.resend.get(`/contacts/${e}`):!e.id&&!e.email?{data:null,headers:null,error:{message:"Missing `id` or `email` field.",statusCode:null,name:"missing_required_field"}}:e.audienceId?this.resend.get(`/audiences/${e.audienceId}/contacts/${e?.email?e?.email:e?.id}`):this.resend.get(`/contacts/${e?.email?e?.email:e?.id}`)}async update(e){return!e.id&&!e.email?{data:null,headers:null,error:{message:"Missing `id` or `email` field.",statusCode:null,name:"missing_required_field"}}:e.audienceId?await this.resend.patch(`/audiences/${e.audienceId}/contacts/${e?.email?e?.email:e?.id}`,{unsubscribed:e.unsubscribed,first_name:e.firstName,last_name:e.lastName,properties:e.properties}):await this.resend.patch(`/contacts/${e?.email?e?.email:e?.id}`,{unsubscribed:e.unsubscribed,first_name:e.firstName,last_name:e.lastName,properties:e.properties})}async remove(e){return typeof e=="string"?this.resend.delete(`/contacts/${e}`):!e.id&&!e.email?{data:null,headers:null,error:{message:"Missing `id` or `email` field.",statusCode:null,name:"missing_required_field"}}:e.audienceId?this.resend.delete(`/audiences/${e.audienceId}/contacts/${e?.email?e?.email:e?.id}`):this.resend.delete(`/contacts/${e?.email?e?.email:e?.id}`)}};function kf(e){return{name:e.name,region:e.region,custom_return_path:e.customReturnPath,capabilities:e.capabilities,open_tracking:e.openTracking,click_tracking:e.clickTracking,tls:e.tls,tracking_subdomain:e.trackingSubdomain}}var Ff=class{constructor(e){this.resend=e}async create(e,t={}){return await this.resend.post("/domains/claim",{name:e.name,region:e.region,custom_return_path:e.customReturnPath,open_tracking:e.openTracking,click_tracking:e.clickTracking,tracking_subdomain:e.trackingSubdomain},t)}async get(e){return await this.resend.get(`/domains/${e}/claim`)}async verify(e){return await this.resend.post(`/domains/${e}/claim/verify`)}},Rf=class{constructor(e){this.resend=e,this.claims=new Ff(this.resend)}async create(e,t={}){return await this.resend.post("/domains",kf(e),t)}async list(e={}){let t=le("/domains",e);return await this.resend.get(t)}async get(e){return await this.resend.get(`/domains/${e}`)}async update(e){return await this.resend.patch(`/domains/${e.id}`,{click_tracking:e.clickTracking,open_tracking:e.openTracking,tls:e.tls,capabilities:e.capabilities,tracking_subdomain:e.trackingSubdomain})}async remove(e){return await this.resend.delete(`/domains/${e}`)}async verify(e){return await this.resend.post(`/domains/${e}/verify`)}},_f=class{constructor(e){this.resend=e}async get(e){let{emailId:t,id:o}=e;return await this.resend.get(`/emails/${t}/attachments/${o}`)}async list(e){let{emailId:t}=e,o=le(`/emails/${t}/attachments`,e);return await this.resend.get(o)}},Df=class{constructor(e){this.resend=e}async get(e){let{emailId:t,id:o}=e;return await this.resend.get(`/emails/receiving/${t}/attachments/${o}`)}async list(e){let{emailId:t}=e,o=le(`/emails/receiving/${t}/attachments`,e);return await this.resend.get(o)}},Tf=class{constructor(e){this.resend=e,this.attachments=new Df(e)}async get(e,t={}){let o=new URLSearchParams;t.html_format!==void 0&&o.set("html_format",t.html_format);let i=o.toString(),r=i?`/emails/receiving/${e}?${i}`:`/emails/receiving/${e}`;return await this.resend.get(r)}async list(e={}){let t=le("/emails/receiving",e);return await this.resend.get(t)}async forward(e,t={}){let{emailId:o,to:i,from:r}=e,n=e.passthrough!==!1,s=await this.get(o);if(s.error)return{data:null,error:s.error,headers:s.headers};let a=s.data,l=a.subject||"(no subject)";if(n)return this.forwardPassthrough(a,{to:i,from:r,subject:l},t);let u=l.startsWith("Fwd:")?l:`Fwd: ${l}`;return this.forwardWrapped(a,{to:i,from:r,subject:u,text:"text"in e?e.text:void 0,html:"html"in e?e.html:void 0},t)}async forwardPassthrough(e,t,o){let{to:i,from:r,subject:n}=t;if(!e.raw?.download_url)return{data:null,error:{name:"validation_error",message:"Raw email content is not available for this email",statusCode:400},headers:null};let s=await fetch(e.raw.download_url);if(!s.ok)return{data:null,error:{name:"application_error",message:"Failed to download raw email content",statusCode:s.status},headers:null};let a=await s.text(),l=await mo.parse(a,{attachmentEncoding:"base64"}),u=l.attachments.map(m=>{let p=m.contentId?m.contentId.replace(/^<|>$/g,""):void 0;return{filename:m.filename,content:m.content.toString(),content_type:m.mimeType,content_id:p||void 0}});return await this.resend.post("/emails",{from:r,to:i,subject:n,text:l.text||void 0,html:l.html||void 0,attachments:u.length>0?u:void 0},o)}async forwardWrapped(e,t,o){let{to:i,from:r,subject:n,text:s,html:a}=t;if(!e.raw?.download_url)return{data:null,error:{name:"validation_error",message:"Raw email content is not available for this email",statusCode:400},headers:null};let l=await fetch(e.raw.download_url);if(!l.ok)return{data:null,error:{name:"application_error",message:"Failed to download raw email content",statusCode:l.status},headers:null};let u=await l.text();return await this.resend.post("/emails",{from:r,to:i,subject:n,text:s,html:a,attachments:[{filename:"forwarded_message.eml",content:Buffer.from(u).toString("base64"),content_type:"message/rfc822"}]},o)}},Of=class{constructor(e){this.resend=e,this.attachments=new _f(e),this.receiving=new Tf(e)}async send(e,t={}){return this.create(e,t)}async create(e,t={}){let o={...e};return e.react&&(o.html=await fo(e.react)),await this.resend.post("/emails",_s(o),t)}async get(e){return await this.resend.get(`/emails/${e}`)}async list(e={}){let t=le("/emails",e);return await this.resend.get(t)}async update(e){return await this.resend.patch(`/emails/${e.id}`,{scheduled_at:e.scheduledAt})}async cancel(e){return await this.resend.post(`/emails/${e}/cancel`)}async share(e,t){return await this.resend.post(`/emails/${e}/share`,{expires_in:t?.expiresIn})}async metrics(e={}){let t=If(e),o=t?`/emails/metrics?${t}`:"/emails/metrics";return await this.resend.get(o)}};function If(e){let t={start_date:e.startDate,end_date:e.endDate,timezone:e.timezone,granularity:e.granularity,metrics:e.metrics?.join(","),dimensions:e.dimensions?.join(","),domain_id:e.domainId?.join(","),email_id:e.emailId?.join(","),broadcast_id:e.broadcastId?.join(",")},o=new URLSearchParams;for(let[i,r]of Object.entries(t))r!==void 0&&r!==""&&o.set(i,r);return o.toString()}var Ef=class{constructor(e){this.resend=e}async send(e){return await this.resend.post("/events/send",gf(e))}async create(e){return await this.resend.post("/events",e)}async get(e){return await this.resend.get(`/events/${encodeURIComponent(e)}`)}async list(e={}){let t=le("/events",e);return await this.resend.get(t)}async update(e,t){return await this.resend.patch(`/events/${encodeURIComponent(e)}`,t)}async remove(e){return await this.resend.delete(`/events/${encodeURIComponent(e)}`)}};function Ds(e,t={}){let o=new URLSearchParams;t.folder!==void 0&&o.set("folder",t.folder),t.query!==void 0&&o.set("query",t.query),t.from!==void 0&&o.set("from",t.from),t.cursor!==void 0&&o.set("cursor",t.cursor);let i=t.label===void 0?[]:Array.isArray(t.label)?t.label:[t.label];for(let n of i)o.append("label",n);let r=o.toString();return r?`${e}?${r}`:e}var Bf=class{constructor(e){this.resend=e}async list(e){let{inboxId:t,cursor:o}=e,i=Ds(`/inboxes/${t}/drafts`,{cursor:o});return this.resend.get(i)}async create(e,t={}){let{inboxId:o,threadId:i,replyToEmailId:r,...n}=e;return this.resend.post(`/inboxes/${o}/drafts`,{...n,thread_id:i,reply_to_email_id:r},t)}async get(e){let{inboxId:t,draftId:o}=e;return this.resend.get(`/inboxes/${t}/drafts/${o}`)}async update(e){let{inboxId:t,draftId:o,...i}=e;return this.resend.patch(`/inboxes/${t}/drafts/${o}`,i)}async remove(e){let{inboxId:t,draftId:o}=e;return this.resend.delete(`/inboxes/${t}/drafts/${o}`)}async send(e,t={}){let{inboxId:o,draftId:i}=e;return this.resend.post(`/inboxes/${o}/drafts/${i}/send`,void 0,t)}},jf=class{constructor(e){this.resend=e}async list(e){return this.resend.get(`/inboxes/${e.inboxId}/labels`)}async create(e,t={}){let{inboxId:o,name:i,color:r}=e;return this.resend.post(`/inboxes/${o}/labels`,{name:i,color:r},t)}async update(e){let{inboxId:t,labelId:o,name:i,color:r}=e;return this.resend.patch(`/inboxes/${t}/labels/${o}`,{name:i,color:r})}async remove(e){let{inboxId:t,labelId:o}=e;return this.resend.delete(`/inboxes/${t}/labels/${o}`)}},Pf=class{constructor(e){this.resend=e}async get(e){let{inboxId:t,threadId:o,emailId:i}=e;return this.resend.get(`/inboxes/${t}/threads/${o}/emails/${i}`)}async reply(e,t={}){let{inboxId:o,threadId:i,emailId:r,html:n,text:s,subject:a}=e;return this.resend.post(`/inboxes/${o}/threads/${i}/emails/${r}/reply`,{html:n,text:s,subject:a},t)}async forward(e,t={}){let{inboxId:o,threadId:i,emailId:r,to:n,html:s,text:a,subject:l}=e;return this.resend.post(`/inboxes/${o}/threads/${i}/emails/${r}/forward`,{to:n,html:s,text:a,subject:l},t)}},$f=class{constructor(e){this.resend=e,this.emails=new Pf(e)}async list(e){let{inboxId:t,...o}=e,i=Ds(`/inboxes/${t}/threads`,o);return this.resend.get(i)}async get(e){let{inboxId:t,threadId:o}=e;return this.resend.get(`/inboxes/${t}/threads/${o}`)}async update(e){let{inboxId:t,threadId:o,read:i,folder:r,labelId:n}=e;return this.resend.patch(`/inboxes/${t}/threads/${o}`,{read:i,folder:r,label_id:n})}async remove(e){let{inboxId:t,threadId:o}=e;return this.resend.delete(`/inboxes/${t}/threads/${o}`)}},Gf=class{constructor(e){this.resend=e,this.threads=new $f(e),this.labels=new jf(e),this.drafts=new Bf(e)}async create(e,t={}){return this.resend.post("/inboxes",{email_address:e.emailAddress,name:e.name,forwarding:e.forwarding,friendly_name:e.friendlyName},t)}async list(e={}){let t=le("/inboxes",e);return this.resend.get(t)}async get(e){return this.resend.get(`/inboxes/${e}`)}async update(e,t){return this.resend.patch(`/inboxes/${e}`,{name:t.name,friendly_name:t.friendlyName})}async remove(e){return this.resend.delete(`/inboxes/${e}`)}},Hf=class{constructor(e){this.resend=e}async list(e={}){let t=le("/logs",e);return await this.resend.get(t)}async get(e){return await this.resend.get(`/logs/${e}`)}},Qf=class{constructor(e){this.resend=e}async list(e={}){let t=le("/oauth/grants",e);return await this.resend.get(t)}async revoke(e){return await this.resend.delete(`/oauth/grants/${e}`)}},Nf=class{constructor(e){this.resend=e}async create(e,t={}){return await this.resend.post("/segments",e,t)}async list(e={}){let t=le("/segments",e);return await this.resend.get(t)}async get(e){return await this.resend.get(`/segments/${e}`)}async update(e,t){return await this.resend.patch(`/segments/${e}`,t)}async remove(e){return await this.resend.delete(`/segments/${e}`)}},Mf=class{constructor(e){this.resend=e}async add(e){return this.resend.post("/suppressions/batch/add",e)}async remove(e){return this.resend.post("/suppressions/batch/remove",e)}},Cs=()=>({data:null,headers:null,error:{message:"Missing `id` field.",statusCode:null,name:"missing_required_field"}}),qf=class{constructor(e){this.resend=e,this.batch=new Mf(e)}async add(e){return this.resend.post("/suppressions",e)}async list(e={}){let t=Lf(e),o=t?`/suppressions?${t}`:"/suppressions";return this.resend.get(o)}async get(e){return e?this.resend.get(`/suppressions/${encodeURIComponent(e)}`):Cs()}async remove(e){return e?this.resend.delete(`/suppressions/${encodeURIComponent(e)}`):Cs()}};function Lf(e){let{origin:t,...o}=e,i=new URLSearchParams($t(o));return t&&i.set("origin",t),i.toString()}function Wf(e={}){let t=new URLSearchParams;return e.before&&t.set("before",e.before),e.after&&t.set("after",e.after),e.limit&&t.set("limit",e.limit.toString()),t.size>0?`?${t.toString()}`:""}function Jf(e){return e?.map(t=>({key:t.key,type:t.type,fallback_value:t.fallbackValue}))}function xs(e){return{name:"name"in e?e.name:void 0,subject:e.subject,html:e.html,text:e.text,alias:e.alias,from:e.from,reply_to:e.replyTo,variables:Jf(e.variables)}}var ws=class{constructor(e,t){this.promise=e,this.publishFn=t}then(e,t){return this.promise.then(e,t)}async publish(){let{data:e,error:t}=await this.promise;return t?{data:null,headers:null,error:t}:this.publishFn(e.id)}},Vf=class{constructor(e){this.resend=e}create(e){return new ws(this.performCreate(e),this.publish.bind(this))}async performCreate(e){let t={...e};return e.react&&(t.html=await fo(e.react)),this.resend.post("/templates",xs(t))}async remove(e){return await this.resend.delete(`/templates/${e}`)}async get(e){return await this.resend.get(`/templates/${e}`)}async list(e={}){return this.resend.get(`/templates${Wf(e)}`)}duplicate(e){return new ws(this.resend.post(`/templates/${e}/duplicate`),this.publish.bind(this))}async publish(e){return await this.resend.post(`/templates/${e}/publish`)}async update(e,t){return await this.resend.patch(`/templates/${e}`,xs(t))}},zf=class{constructor(e){this.resend=e}async create(e){let{defaultSubscription:t,...o}=e;return await this.resend.post("/topics",{...o,default_subscription:t})}async list(){return await this.resend.get("/topics")}async get(e){return e?await this.resend.get(`/topics/${e}`):{data:null,headers:null,error:{message:"Missing `id` field.",statusCode:null,name:"missing_required_field"}}}async update(e){return e.id?await this.resend.patch(`/topics/${e.id}`,e):{data:null,headers:null,error:{message:"Missing `id` field.",statusCode:null,name:"missing_required_field"}}}async remove(e){return e?await this.resend.delete(`/topics/${e}`):{data:null,headers:null,error:{message:"Missing `id` field.",statusCode:null,name:"missing_required_field"}}}},Yf=class{constructor(e){this.resend=e}async list(e){let{webhookId:t,eventId:o}=e,i=le(`/webhooks/${t}/events/${o}/attempts`,e);return await this.resend.get(i)}},Xf=class{constructor(e){this.resend=e,this.attempts=new Yf(e)}async list(e){let{webhookId:t}=e,o=le(`/webhooks/${t}/events`,e);return await this.resend.get(o)}async get(e){let{webhookId:t,eventId:o}=e;return await this.resend.get(`/webhooks/${t}/events/${o}`)}async replay(e){let{webhookId:t,eventId:o}=e;return await this.resend.post(`/webhooks/${t}/events/${o}/replay`)}},Zf=class{constructor(e){this.resend=e,this.events=new Xf(e)}async create(e,t={}){return await this.resend.post("/webhooks",e,t)}async get(e){return await this.resend.get(`/webhooks/${e}`)}async list(e={}){let t=le("/webhooks",e);return await this.resend.get(t)}async update(e,t){return await this.resend.patch(`/webhooks/${e}`,t)}async remove(e){return await this.resend.delete(`/webhooks/${e}`)}async rotateSigningSecret(e){return await this.resend.post(`/webhooks/${e}/signing-secret/rotate`)}verify(e){return new Ss.Webhook(e.webhookSecret).verify(e.payload,{"webhook-id":e.headers.id,"webhook-timestamp":e.headers.timestamp,"webhook-signature":e.headers.signature})}},Us="https://api.resend.com",vs=`resend-node:${mf}`;function eh(){return typeof process<"u"&&process.env&&process.env.RESEND_BASE_URL||Us}function th(){return typeof process<"u"&&process.env&&process.env.RESEND_USER_AGENT||vs}var Gt=class{constructor(e,t){if(this.key=e,this.segments=new Nf(this),this.apiKeys=new pf(this),this.audiences=this.segments,this.automations=new Af(this),this.batch=new yf(this),this.broadcasts=new Cf(this),this.contactProperties=new wf(this),this.contacts=new Kf(this),this.domains=new Rf(this),this.emails=new Of(this),this.events=new Ef(this),this.inboxes=new Gf(this),this.logs=new Hf(this),this.oauthGrants=new Qf(this),this.suppressions=new qf(this),this.templates=new Vf(this),this.topics=new zf(this),this.webhooks=new Zf(this),!e&&(typeof process<"u"&&process.env&&(this.key=process.env.RESEND_API_KEY),!this.key))throw new Error('Missing API key. Pass it to the constructor `new Resend("re_123")`');this.baseUrl=t?.baseUrl??eh(),this.userAgent=t?.userAgent??th(),this.headers=new Headers({Authorization:`Bearer ${this.key}`,"User-Agent":this.userAgent,"Content-Type":"application/json"})}logError(e,t,o){typeof process<"u"&&process.env&&process.env.NODE_ENV!=="production"&&console.error("[Resend API Error]:",{...o!==void 0&&{status:o},error:e,path:t})}async fetchRequest(e,t={}){try{let o=await fetch(`${this.baseUrl}${e}`,t);if(!o.ok)try{let i=await o.text(),r=JSON.parse(i);return this.logError(r,e,o.status),{data:null,error:r,headers:Object.fromEntries(o.headers.entries())}}catch(i){if(i instanceof SyntaxError){let n={name:"application_error",statusCode:o.status,message:"Internal server error. We are unable to process your request right now, please try again later."};return this.logError(n,e,o.status),{data:null,error:n,headers:Object.fromEntries(o.headers.entries())}}let r={message:o.statusText,statusCode:o.status,name:"application_error"};if(i instanceof Error){let n={...r,message:i.message};return this.logError(n,e,o.status),{data:null,error:n,headers:Object.fromEntries(o.headers.entries())}}return this.logError(r,e,o.status),{data:null,error:r,headers:Object.fromEntries(o.headers.entries())}}return{data:await o.json(),error:null,headers:Object.fromEntries(o.headers.entries())}}catch{let o={name:"application_error",statusCode:null,message:"Unable to fetch data. The request could not be resolved."};return this.logError(o,e),{data:null,error:o,headers:null}}}async post(e,t,o={}){let i=new Headers(this.headers),r=typeof FormData<"u"&&t instanceof FormData;if(r&&i.delete("Content-Type"),o.headers)for(let[s,a]of new Headers(o.headers).entries())i.set(s,a);o.idempotencyKey&&i.set("Idempotency-Key",o.idempotencyKey);let n={method:"POST",body:r?t:JSON.stringify(t),...o,headers:i};return this.fetchRequest(e,n)}async get(e,t={}){let o=new Headers(this.headers);if(t.headers)for(let[r,n]of new Headers(t.headers).entries())o.set(r,n);let i={method:"GET",...t,headers:o};return this.fetchRequest(e,i)}async put(e,t,o={}){let i=new Headers(this.headers);if(o.headers)for(let[n,s]of new Headers(o.headers).entries())i.set(n,s);let r={method:"PUT",body:JSON.stringify(t),...o,headers:i};return this.fetchRequest(e,r)}async patch(e,t,o={}){let i=new Headers(this.headers);if(o.headers)for(let[n,s]of new Headers(o.headers).entries())i.set(n,s);let r={method:"PATCH",body:JSON.stringify(t),...o,headers:i};return this.fetchRequest(e,r)}async delete(e,t,o={}){let i=new Headers(this.headers);if(o.headers)for(let[n,s]of new Headers(o.headers).entries())i.set(n,s);let r={method:"DELETE",body:t===void 0?void 0:JSON.stringify(t),...o,headers:i};return this.fetchRequest(e,r)}};be();var Tr=me(Je(),1);function W(e,t){return e instanceof Error?e.message:t}function ua(e){return!!(e||!process.stdout.isTTY)}function N(e,t={}){ua(t.json)?console.log(JSON.stringify(e,null,2)):console.log(typeof e=="string"?e:JSON.stringify(e,null,2)),t.exitCode!==void 0&&process.exit(t.exitCode)}var hh=new Set(["content-type","retry-after"]);function gh(e){let t={};for(let[o,i]of Object.entries(e)){let r=o.toLowerCase();(hh.has(r)||r.startsWith("x-"))&&(t[r]=i)}return t}function h(e,t={}){let o=t.exitCode??1,i=e.headers&&Object.keys(e.headers).length>0?gh(e.headers):void 0,r=i!==void 0&&Object.keys(i).length>0;if(ua(t.json)){let n={message:e.message,code:e.code??"unknown"};typeof e.statusCode=="number"&&(n.statusCode=e.statusCode),r&&(n.headers=i),typeof e.body=="string"&&e.body.length>0&&(n.body=e.body),console.error(JSON.stringify({error:n},null,2))}else{console.error(`${Tr.default.red("Error:")} ${e.message}`);let n=[];if(typeof e.statusCode=="number"&&n.push(`HTTP ${e.statusCode}`),r)for(let[s,a]of Object.entries(i))n.push(`${s}: ${a}`);n.length>0&&console.error(Tr.default.dim(`[${n.join("; ")}]`))}process.exit(o)}var ma={sending_access:0,full_access:1};function Ah(e,t){return ma[e]>=ma[t]}async function ee(e,t){let o=e.profile;try{let i=await _t(e.apiKey,o);if(!i){if(o){let s=Fe();if(!s.some(l=>l.name===o))throw new Error(`Profile "${o}" not found. Available profiles: ${s.map(l=>l.name).join(", ")||"(none)"}`)}throw new Error("No API key found. Set RESEND_API_KEY, use --api-key, or run: resend login")}let r;if(i.type==="api_key")r=i.permission;else{let s=i.scope.split(" ").filter(Boolean);s.includes("full_access")?r="full_access":s.includes("emails:send")?r="sending_access":h({message:`Unrecognized credential scope${i.scope?` "${i.scope}"`:""}. Run \`resend login\` to re-authenticate.`,code:"unrecognized_scope"},{json:e.json})}if(r){let s=t?.permission??"full_access";Ah(r,s)||h({message:`This command requires full access. Your current credential has sending access only.
|
|
281
|
-
${Qt}`,code:"insufficient_permissions"},{json:e.json})}let n=i.type==="api_key"?i.key:i.access_token;return new Gt(n)}catch(i){h({message:W(i,"Failed to create client"),code:"auth_error"},{json:e.json})}}var pa=130;function bh(){process.stderr.isTTY&&process.stderr.write("\r\x1B[2K"),console.error("Cancelled."),process.exit(pa)}var Nt;function fa(){Nt=bh,process.on("SIGINT",Nt),process.on("uncaughtException",e=>{h({message:W(e,"An unexpected error occurred"),code:"unexpected_error"},{}),process.exit(1)})}function ri(e){Nt&&process.removeListener("SIGINT",Nt),Nt=e,process.on("SIGINT",Nt)}function Mt(){return pa}be();var ni=me(Je(),1);X();var ha=[1,2,4],yh=ha.length,Ch=new Set(["internal_server_error","service_unavailable","gateway_timeout"]),xh=(e,t)=>!!(e==="rate_limit_exceeded"||t&&e!==void 0&&Ch.has(e)),wh=e=>{let t=e?.["retry-after"];if(!t)return;let o=Number(t);if(Number.isFinite(o)&&o>=0)return o;let i=Date.parse(t);if(!Number.isNaN(i)){let r=(i-Date.now())/1e3;return r>0?r:0}},Uh=e=>new Promise(t=>setTimeout(t,e)),bo=async(e,t,o=0)=>{let i=await e(),r=t?.retryTransient??!1;if(i.error&&o<yh&&xh(i.error.name,r)){let n=wh(i.headers)??ha[o];return t?.onRetry?.(o,n,i.error.name??""),await Uh(n*1e3),bo(e,t,o+1)}return i};var ga=(e,t)=>new Promise((o,i)=>{let r=setTimeout(()=>{i(new Error(`Request timed out after ${t/1e3}s`))},t);r.unref(),e.then(n=>{clearTimeout(r),o(n)},n=>{clearTimeout(r),i(n)})});var Sh=st?String.fromCodePoint(10004):"v",Kh=st?String.fromCodePoint(9888):"!",kh=st?String.fromCodePoint(10007):"x",
|
|
280
|
+
`)}),this.textContent=t}isInlineTextNode(t){if(t.contentDisposition?.parsed?.value==="attachment")return!1;switch(t.contentType.parsed?.value){case"text/html":case"text/plain":return!0;default:return!1}}isInlineMessageRfc822(t){return t.contentType.parsed?.value!=="message/rfc822"?!1:(t.contentDisposition?.parsed?.value||(this.options.rfc822Attachments?"attachment":"inline"))==="inline"}forceRfc822Attachments(){if(this.options.forceRfc822Attachments)return!0;let t=!1,o=i=>{i.contentType.multipart||i.contentType.parsed&&["message/delivery-status","message/feedback-report"].includes(i.contentType.parsed.value)&&(t=!0);for(let r of i.childNodes)o(r)};return o(this.root),t}async resolveStream(t){let o=0,i=[],r=t.getReader();for(;;){let{done:a,value:l}=await r.read();if(a)break;i.push(l),o+=l.length}let n=new Uint8Array(o),s=0;for(let a of i)n.set(a,s),s+=a.length;return n}async parse(t){if(this.started)throw new Error("Can not reuse parser, create a new PostalMime object");for(this.started=!0,t&&typeof t.getReader=="function"&&(t=await this.resolveStream(t)),t=t||new ArrayBuffer(0),typeof t=="string"&&(t=ut.encode(t)),(t instanceof Blob||Object.prototype.toString.call(t)==="[object Blob]")&&(t=await mt(t)),t.buffer instanceof ArrayBuffer&&(t=new Uint8Array(t).buffer),this.buf=t,this.av=new Uint8Array(t),this.readPos=0;this.readPos<this.av.length;){let r=this.readLine();await this.processLine(r.bytes,r.done)}await this.processNodeTree();let o={headers:this.root.headers.map(r=>({key:r.key,originalKey:r.originalKey,value:r.value})).reverse()};for(let r of["from","sender"]){let n=this.root.headers.find(s=>s.key===r);if(n&&n.value){let s=No(n.value);s&&s.length&&(o[r]=s[0])}}for(let r of["delivered-to","return-path"]){let n=this.root.headers.find(s=>s.key===r);if(n&&n.value){let s=No(n.value);if(s&&s.length&&s[0].address){let a=ur(r);o[a]=s[0].address}}}for(let r of["to","cc","bcc","reply-to"]){let n=this.root.headers.filter(a=>a.key===r),s=[];if(n.filter(a=>a&&a.value).map(a=>No(a.value)).forEach(a=>s=s.concat(a||[])),s&&s.length){let a=ur(r);o[a]=s}}for(let r of["subject","message-id","in-reply-to","references"]){let n=this.root.headers.find(s=>s.key===r);if(n&&n.value){let s=ur(r);o[s]=kt(n.value)}}let i=this.root.headers.find(r=>r.key==="date");if(i){let r=new Date(i.value);r.toString()==="Invalid Date"?r=i.value:r=r.toISOString(),o.date=r}switch(this.textContent?.html&&(o.html=this.textContent.html),this.textContent?.plain&&(o.text=this.textContent.plain),o.attachments=this.attachments,o.headerLines=(this.root.rawHeaderLines||[]).slice().reverse(),this.attachmentEncoding){case"arraybuffer":break;case"base64":for(let n of o.attachments||[])n?.content&&(n.content=as(n.content),n.encoding="base64");break;case"utf8":let r=new TextDecoder("utf8");for(let n of o.attachments||[])n?.content&&(n.content=r.decode(n.content),n.encoding="utf8");break;default:throw new Error("Unknown attachment encoding")}return o}};var Ss=me(As(),1),Ks=["inbox","archive","spam","sent","trash"],ks=["inbox","archive","spam","trash"],Lo=["cyan","teal","grass","lime","yellow","orange","iris","plum","crimson","bronze","mauve"],mf="6.28.1-preview-inboxes.0";function le(e,t){let o=$t(t);return o?`${e}?${o}`:e}function $t(e){let t=new URLSearchParams;return e.limit!==void 0&&t.set("limit",e.limit.toString()),"after"in e&&e.after!==void 0&&t.set("after",e.after),"before"in e&&e.before!==void 0&&t.set("before",e.before),t.toString()}var pf=class{constructor(e){this.resend=e}async create(e,t={}){return await this.resend.post("/api-keys",e,t)}async list(e={}){let t=le("/api-keys",e);return await this.resend.get(t)}async update(e,t){return await this.resend.patch(`/api-keys/${e}`,t)}async remove(e){return await this.resend.delete(`/api-keys/${e}`)}},ff=class{constructor(e){this.resend=e}async get(e){return await this.resend.get(`/automations/${e.automationId}/runs/${e.runId}`)}async list(e){let t=$t(e),o=new URLSearchParams(t);if(e.status){let n=Array.isArray(e.status)?e.status.join(","):e.status;o.set("status",n)}let i=o.toString(),r=i?`/automations/${e.automationId}/runs?${i}`:`/automations/${e.automationId}/runs`;return await this.resend.get(r)}};function _s(e){switch(e.type){case"trigger":return{key:e.key,type:e.type,config:{event_name:e.config.eventName}};case"delay":return{key:e.key,type:e.type,config:e.config};case"send_email":return{key:e.key,type:e.type,config:{template:e.config.template,subject:e.config.subject,from:e.config.from,reply_to:e.config.replyTo}};case"wait_for_event":return{key:e.key,type:e.type,config:{event_name:e.config.eventName,timeout:e.config.timeout,filter_rule:e.config.filterRule}};case"condition":return{key:e.key,type:e.type,config:e.config};case"contact_update":return{key:e.key,type:e.type,config:{first_name:e.config.firstName,last_name:e.config.lastName,unsubscribed:e.config.unsubscribed,properties:e.config.properties}};case"contact_delete":return{key:e.key,type:e.type,config:e.config};case"add_to_segment":return{key:e.key,type:e.type,config:{segment_id:e.config.segmentId}}}}function Fs(e){return{from:e.from,to:e.to,type:e.type}}function hf(e){return{name:e.name,status:e.status,steps:e.steps.map(_s),connections:e.connections.map(Fs)}}function gf(e){return{event:e.event,contact_id:e.contactId,email:e.email,payload:e.payload}}var Af=class{constructor(e){this.resend=e,this.runs=new ff(this.resend)}async create(e){return await this.resend.post("/automations",hf(e))}async list(e={}){let t=[$t(e)];e.status&&t.push(`status=${encodeURIComponent(e.status)}`);let o=t.filter(Boolean).join("&"),i=o?`/automations?${o}`:"/automations";return await this.resend.get(i)}async get(e){return await this.resend.get(`/automations/${e}`)}async remove(e){return await this.resend.delete(`/automations/${e}`)}async update(e,t){let o={};return t.name!==void 0&&(o.name=t.name),t.status!==void 0&&(o.status=t.status),t.steps!==void 0&&(o.steps=t.steps.map(_s)),t.connections!==void 0&&(o.connections=t.connections.map(Fs)),await this.resend.patch(`/automations/${e}`,o)}async duplicate(e){return await this.resend.post(`/automations/${e}/duplicate`)}async stop(e){return await this.resend.post(`/automations/${e}/stop`)}};function bf(e){return e?.map(t=>({content:t.content,filename:t.filename,path:t.path,content_type:t.contentType,content_id:t.contentId}))}function Rs(e){return{attachments:bf(e.attachments),bcc:e.bcc,cc:e.cc,from:e.from,headers:e.headers,html:e.html,reply_to:e.replyTo,scheduled_at:e.scheduledAt,subject:e.subject,tags:e.tags,text:e.text,to:e.to,template:e.template?{id:e.template.id,variables:e.template.variables}:void 0,topic_id:e.topicId}}async function fo(e){let t;try{({render:t}=await import("@react-email/render"))}catch{throw new Error("Failed to render React component. Make sure to install `@react-email/render` or `@react-email/components`.")}return t(e)}var yf=class{constructor(e){this.resend=e}async send(e,t){return this.create(e,t)}async create(e,t){let o=[];for(let i of e)i.react&&(i.html=await fo(i.react),i.react=void 0),o.push(Rs(i));return await this.resend.post("/emails/batch",o,{...t,headers:{"x-batch-validation":t?.batchValidation??"strict",...t?.headers}})}},Cf=class{constructor(e){this.resend=e}async create(e,t={}){let o=e.react?await fo(e.react):e.html;return await this.resend.post("/broadcasts",{name:e.name,segment_id:e.segmentId,audience_id:e.audienceId,preview_text:e.previewText,from:e.from,html:o,reply_to:e.replyTo,subject:e.subject,text:e.text,topic_id:e.topicId,send:e.send,scheduled_at:e.scheduledAt},t)}async send(e,t){return await this.resend.post(`/broadcasts/${e}/send`,{scheduled_at:t?.scheduledAt})}async list(e={}){let t=le("/broadcasts",e);return await this.resend.get(t)}async get(e){return await this.resend.get(`/broadcasts/${e}`)}async recipients(e,t){let o=`/broadcasts/${e}/recipients?${xf(t)}`;return await this.resend.get(o)}async clickedLinks(e,t={}){let o=le(`/broadcasts/${e}/clicked-links`,t);return await this.resend.get(o)}async remove(e){return await this.resend.delete(`/broadcasts/${e}`)}async cancel(e){return await this.resend.post(`/broadcasts/${e}/cancel`)}async duplicate(e){return await this.resend.post(`/broadcasts/${e}/duplicate`)}async update(e,t){let o=t.react?await fo(t.react):t.html;return await this.resend.patch(`/broadcasts/${e}`,{name:t.name,segment_id:t.segmentId,audience_id:t.audienceId,from:t.from,html:o,text:t.text,subject:t.subject,reply_to:t.replyTo,preview_text:t.previewText,topic_id:t.topicId})}};function xf(e){let{type:t,email:o,bounceType:i,...r}=e,n=new URLSearchParams($t(r));return n.set("type",t),o!==void 0&&n.set("email",o),i!==void 0&&n.set("bounce_type",i),n.toString()}function bs(e){return{id:e.id,key:e.key,createdAt:e.created_at,type:e.type,fallbackValue:e.fallback_value}}function ys(e){return"key"in e?{key:e.key,type:e.type,fallback_value:e.fallbackValue}:{fallback_value:e.fallbackValue}}var wf=class{constructor(e){this.resend=e}async create(e){let t=ys(e);return await this.resend.post("/contact-properties",t)}async list(e={}){let t=le("/contact-properties",e),o=await this.resend.get(t);return o.data?{data:{...o.data,data:o.data.data.map(i=>bs(i))},headers:o.headers,error:null}:o}async get(e){if(!e)return{data:null,headers:null,error:{message:"Missing `id` field.",statusCode:null,name:"missing_required_field"}};let t=await this.resend.get(`/contact-properties/${e}`);return t.data?{data:{object:"contact_property",...bs(t.data)},headers:t.headers,error:null}:t}async update(e){if(!e.id)return{data:null,headers:null,error:{message:"Missing `id` field.",statusCode:null,name:"missing_required_field"}};let t=ys(e);return await this.resend.patch(`/contact-properties/${e.id}`,t)}async remove(e){return e?await this.resend.delete(`/contact-properties/${e}`):{data:null,headers:null,error:{message:"Missing `id` field.",statusCode:null,name:"missing_required_field"}}}},Uf=class{constructor(e){this.resend=e}async create(e,t={}){let o=this.buildCreateFormData(e);return this.resend.post("/contacts/imports",o,t)}async list(e={}){let t=new URLSearchParams($t(e));e.status!==void 0&&t.set("status",e.status);let o=t.toString(),i=o?`/contacts/imports?${o}`:"/contacts/imports";return this.resend.get(i)}async get(e){return this.resend.get(`/contacts/imports/${e}`)}buildCreateFormData(e){let t=new FormData;return t.append("file",e.file),this.appendField(t,"column_map",this.buildColumnMap(e.columnMap??null)),this.appendField(t,"on_conflict",e.onConflict??null),this.appendField(t,"segments",e.segments??null),this.appendField(t,"topics",e.topics??null),t}buildColumnMap(e){return e===null?null:{email:e.email,first_name:e.firstName,last_name:e.lastName,unsubscribed:e.unsubscribed,properties:e.properties}}appendField(e,t,o){o!==null&&e.append(t,typeof o=="string"?o:JSON.stringify(o))}},vf=class{constructor(e){this.resend=e}async list(e){if(!e.contactId&&!e.email)return{data:null,headers:null,error:{message:"Missing `id` or `email` field.",statusCode:null,name:"missing_required_field"}};let t=le(`/contacts/${e.email?e.email:e.contactId}/segments`,e);return await this.resend.get(t)}async add(e){if(!e.contactId&&!e.email)return{data:null,headers:null,error:{message:"Missing `id` or `email` field.",statusCode:null,name:"missing_required_field"}};let t=e.email?e.email:e.contactId;return this.resend.post(`/contacts/${t}/segments/${e.segmentId}`)}async remove(e){if(!e.contactId&&!e.email)return{data:null,headers:null,error:{message:"Missing `id` or `email` field.",statusCode:null,name:"missing_required_field"}};let t=e.email?e.email:e.contactId;return this.resend.delete(`/contacts/${t}/segments/${e.segmentId}`)}},Sf=class{constructor(e){this.resend=e}async update(e){if(!e.id&&!e.email)return{data:null,headers:null,error:{message:"Missing `id` or `email` field.",statusCode:null,name:"missing_required_field"}};let t=e.email?e.email:e.id;return this.resend.patch(`/contacts/${t}/topics`,e.topics)}async list(e){if(!e.id&&!e.email)return{data:null,headers:null,error:{message:"Missing `id` or `email` field.",statusCode:null,name:"missing_required_field"}};let t=le(`/contacts/${e.email?e.email:e.id}/topics`,e);return this.resend.get(t)}},Kf=class{constructor(e){this.resend=e,this.imports=new Uf(this.resend),this.topics=new Sf(this.resend),this.segments=new vf(this.resend)}async create(e,t={}){return"audienceId"in e?"segments"in e||"topics"in e?{data:null,headers:null,error:{message:"`audienceId` is deprecated, and cannot be used together with `segments` or `topics`. Use `segments` instead to add one or more segments to the new contact.",statusCode:null,name:"invalid_parameter"}}:await this.resend.post(`/audiences/${e.audienceId}/contacts`,{unsubscribed:e.unsubscribed,email:e.email,first_name:e.firstName,last_name:e.lastName,properties:e.properties},t):await this.resend.post("/contacts",{unsubscribed:e.unsubscribed,email:e.email,first_name:e.firstName,last_name:e.lastName,properties:e.properties,segments:e.segments,topics:e.topics},t)}async list(e={}){let t=e.segmentId??e.audienceId;if(!t){let i=le("/contacts",e);return await this.resend.get(i)}let o=le(`/segments/${t}/contacts`,e);return await this.resend.get(o)}async get(e){return typeof e=="string"?this.resend.get(`/contacts/${e}`):!e.id&&!e.email?{data:null,headers:null,error:{message:"Missing `id` or `email` field.",statusCode:null,name:"missing_required_field"}}:e.audienceId?this.resend.get(`/audiences/${e.audienceId}/contacts/${e?.email?e?.email:e?.id}`):this.resend.get(`/contacts/${e?.email?e?.email:e?.id}`)}async update(e){return!e.id&&!e.email?{data:null,headers:null,error:{message:"Missing `id` or `email` field.",statusCode:null,name:"missing_required_field"}}:e.audienceId?await this.resend.patch(`/audiences/${e.audienceId}/contacts/${e?.email?e?.email:e?.id}`,{unsubscribed:e.unsubscribed,first_name:e.firstName,last_name:e.lastName,properties:e.properties}):await this.resend.patch(`/contacts/${e?.email?e?.email:e?.id}`,{unsubscribed:e.unsubscribed,first_name:e.firstName,last_name:e.lastName,properties:e.properties})}async remove(e){return typeof e=="string"?this.resend.delete(`/contacts/${e}`):!e.id&&!e.email?{data:null,headers:null,error:{message:"Missing `id` or `email` field.",statusCode:null,name:"missing_required_field"}}:e.audienceId?this.resend.delete(`/audiences/${e.audienceId}/contacts/${e?.email?e?.email:e?.id}`):this.resend.delete(`/contacts/${e?.email?e?.email:e?.id}`)}};function kf(e){return{name:e.name,region:e.region,custom_return_path:e.customReturnPath,capabilities:e.capabilities,open_tracking:e.openTracking,click_tracking:e.clickTracking,tls:e.tls,tracking_subdomain:e.trackingSubdomain}}var _f=class{constructor(e){this.resend=e}async create(e,t={}){return await this.resend.post("/domains/claim",{name:e.name,region:e.region,custom_return_path:e.customReturnPath,open_tracking:e.openTracking,click_tracking:e.clickTracking,tracking_subdomain:e.trackingSubdomain},t)}async get(e){return await this.resend.get(`/domains/${e}/claim`)}async verify(e){return await this.resend.post(`/domains/${e}/claim/verify`)}},Ff=class{constructor(e){this.resend=e,this.claims=new _f(this.resend)}async create(e,t={}){return await this.resend.post("/domains",kf(e),t)}async list(e={}){let t=le("/domains",e);return await this.resend.get(t)}async get(e){return await this.resend.get(`/domains/${e}`)}async update(e){return await this.resend.patch(`/domains/${e.id}`,{click_tracking:e.clickTracking,open_tracking:e.openTracking,tls:e.tls,capabilities:e.capabilities,tracking_subdomain:e.trackingSubdomain})}async remove(e){return await this.resend.delete(`/domains/${e}`)}async verify(e){return await this.resend.post(`/domains/${e}/verify`)}},Rf=class{constructor(e){this.resend=e}async get(e){let{emailId:t,id:o}=e;return await this.resend.get(`/emails/${t}/attachments/${o}`)}async list(e){let{emailId:t}=e,o=le(`/emails/${t}/attachments`,e);return await this.resend.get(o)}},Df=class{constructor(e){this.resend=e}async get(e){let{emailId:t,id:o}=e;return await this.resend.get(`/emails/receiving/${t}/attachments/${o}`)}async list(e){let{emailId:t}=e,o=le(`/emails/receiving/${t}/attachments`,e);return await this.resend.get(o)}},Tf=class{constructor(e){this.resend=e,this.attachments=new Df(e)}async get(e,t={}){let o=new URLSearchParams;t.html_format!==void 0&&o.set("html_format",t.html_format);let i=o.toString(),r=i?`/emails/receiving/${e}?${i}`:`/emails/receiving/${e}`;return await this.resend.get(r)}async list(e={}){let t=le("/emails/receiving",e);return await this.resend.get(t)}async forward(e,t={}){let{emailId:o,to:i,from:r}=e,n=e.passthrough!==!1,s=await this.get(o);if(s.error)return{data:null,error:s.error,headers:s.headers};let a=s.data,l=a.subject||"(no subject)";if(n)return this.forwardPassthrough(a,{to:i,from:r,subject:l},t);let u=l.startsWith("Fwd:")?l:`Fwd: ${l}`;return this.forwardWrapped(a,{to:i,from:r,subject:u,text:"text"in e?e.text:void 0,html:"html"in e?e.html:void 0},t)}async forwardPassthrough(e,t,o){let{to:i,from:r,subject:n}=t;if(!e.raw?.download_url)return{data:null,error:{name:"validation_error",message:"Raw email content is not available for this email",statusCode:400},headers:null};let s=await fetch(e.raw.download_url);if(!s.ok)return{data:null,error:{name:"application_error",message:"Failed to download raw email content",statusCode:s.status},headers:null};let a=await s.text(),l=await mo.parse(a,{attachmentEncoding:"base64"}),u=l.attachments.map(m=>{let p=m.contentId?m.contentId.replace(/^<|>$/g,""):void 0;return{filename:m.filename,content:m.content.toString(),content_type:m.mimeType,content_id:p||void 0}});return await this.resend.post("/emails",{from:r,to:i,subject:n,text:l.text||void 0,html:l.html||void 0,attachments:u.length>0?u:void 0},o)}async forwardWrapped(e,t,o){let{to:i,from:r,subject:n,text:s,html:a}=t;if(!e.raw?.download_url)return{data:null,error:{name:"validation_error",message:"Raw email content is not available for this email",statusCode:400},headers:null};let l=await fetch(e.raw.download_url);if(!l.ok)return{data:null,error:{name:"application_error",message:"Failed to download raw email content",statusCode:l.status},headers:null};let u=await l.text();return await this.resend.post("/emails",{from:r,to:i,subject:n,text:s,html:a,attachments:[{filename:"forwarded_message.eml",content:Buffer.from(u).toString("base64"),content_type:"message/rfc822"}]},o)}},Of=class{constructor(e){this.resend=e,this.attachments=new Rf(e),this.receiving=new Tf(e)}async send(e,t={}){return this.create(e,t)}async create(e,t={}){let o={...e};return e.react&&(o.html=await fo(e.react)),await this.resend.post("/emails",Rs(o),t)}async get(e){return await this.resend.get(`/emails/${e}`)}async list(e={}){let t=le("/emails",e);return await this.resend.get(t)}async update(e){return await this.resend.patch(`/emails/${e.id}`,{scheduled_at:e.scheduledAt})}async cancel(e){return await this.resend.post(`/emails/${e}/cancel`)}async share(e,t){return await this.resend.post(`/emails/${e}/share`,{expires_in:t?.expiresIn})}async metrics(e={}){let t=Ef(e),o=t?`/emails/metrics?${t}`:"/emails/metrics";return await this.resend.get(o)}};function Ef(e){let t={start_date:e.startDate,end_date:e.endDate,timezone:e.timezone,granularity:e.granularity,metrics:e.metrics?.join(","),dimensions:e.dimensions?.join(","),domain_id:e.domainId?.join(","),email_id:e.emailId?.join(","),broadcast_id:e.broadcastId?.join(",")},o=new URLSearchParams;for(let[i,r]of Object.entries(t))r!==void 0&&r!==""&&o.set(i,r);return o.toString()}var Bf=class{constructor(e){this.resend=e}async send(e){return await this.resend.post("/events/send",gf(e))}async create(e){return await this.resend.post("/events",e)}async get(e){return await this.resend.get(`/events/${encodeURIComponent(e)}`)}async list(e={}){let t=le("/events",e);return await this.resend.get(t)}async update(e,t){return await this.resend.patch(`/events/${encodeURIComponent(e)}`,t)}async remove(e){return await this.resend.delete(`/events/${encodeURIComponent(e)}`)}};function Ds(e,t={}){let o=new URLSearchParams;t.folder!==void 0&&o.set("folder",t.folder),t.query!==void 0&&o.set("query",t.query),t.from!==void 0&&o.set("from",t.from),t.cursor!==void 0&&o.set("cursor",t.cursor);let i=t.label===void 0?[]:Array.isArray(t.label)?t.label:[t.label];for(let n of i)o.append("label",n);let r=o.toString();return r?`${e}?${r}`:e}var If=class{constructor(e){this.resend=e}async list(e){let{inboxId:t,cursor:o}=e,i=Ds(`/inboxes/${t}/drafts`,{cursor:o});return this.resend.get(i)}async create(e,t={}){let{inboxId:o,threadId:i,replyToEmailId:r,...n}=e;return this.resend.post(`/inboxes/${o}/drafts`,{...n,thread_id:i,reply_to_email_id:r},t)}async get(e){let{inboxId:t,draftId:o}=e;return this.resend.get(`/inboxes/${t}/drafts/${o}`)}async update(e){let{inboxId:t,draftId:o,...i}=e;return this.resend.patch(`/inboxes/${t}/drafts/${o}`,i)}async remove(e){let{inboxId:t,draftId:o}=e;return this.resend.delete(`/inboxes/${t}/drafts/${o}`)}async send(e,t={}){let{inboxId:o,draftId:i}=e;return this.resend.post(`/inboxes/${o}/drafts/${i}/send`,void 0,t)}},jf=class{constructor(e){this.resend=e}async list(e){return this.resend.get(`/inboxes/${e.inboxId}/labels`)}async create(e,t={}){let{inboxId:o,name:i,color:r}=e;return this.resend.post(`/inboxes/${o}/labels`,{name:i,color:r},t)}async update(e){let{inboxId:t,labelId:o,name:i,color:r}=e;return this.resend.patch(`/inboxes/${t}/labels/${o}`,{name:i,color:r})}async remove(e){let{inboxId:t,labelId:o}=e;return this.resend.delete(`/inboxes/${t}/labels/${o}`)}},Pf=class{constructor(e){this.resend=e}async get(e){let{inboxId:t,threadId:o,emailId:i}=e;return this.resend.get(`/inboxes/${t}/threads/${o}/emails/${i}`)}async reply(e,t={}){let{inboxId:o,threadId:i,emailId:r,html:n,text:s,subject:a}=e;return this.resend.post(`/inboxes/${o}/threads/${i}/emails/${r}/reply`,{html:n,text:s,subject:a},t)}async forward(e,t={}){let{inboxId:o,threadId:i,emailId:r,to:n,html:s,text:a,subject:l}=e;return this.resend.post(`/inboxes/${o}/threads/${i}/emails/${r}/forward`,{to:n,html:s,text:a,subject:l},t)}},$f=class{constructor(e){this.resend=e,this.emails=new Pf(e)}async list(e){let{inboxId:t,...o}=e,i=Ds(`/inboxes/${t}/threads`,o);return this.resend.get(i)}async get(e){let{inboxId:t,threadId:o}=e;return this.resend.get(`/inboxes/${t}/threads/${o}`)}async update(e){let{inboxId:t,threadId:o,read:i,folder:r,labelId:n}=e;return this.resend.patch(`/inboxes/${t}/threads/${o}`,{read:i,folder:r,label_id:n})}async remove(e){let{inboxId:t,threadId:o}=e;return this.resend.delete(`/inboxes/${t}/threads/${o}`)}},Gf=class{constructor(e){this.resend=e,this.threads=new $f(e),this.labels=new jf(e),this.drafts=new If(e)}async create(e,t={}){return this.resend.post("/inboxes",{email_address:e.emailAddress,name:e.name,forwarding:e.forwarding,friendly_name:e.friendlyName},t)}async list(e={}){let t=le("/inboxes",e);return this.resend.get(t)}async get(e){return this.resend.get(`/inboxes/${e}`)}async update(e,t){return this.resend.patch(`/inboxes/${e}`,{name:t.name,friendly_name:t.friendlyName})}async remove(e){return this.resend.delete(`/inboxes/${e}`)}},Hf=class{constructor(e){this.resend=e}async list(e={}){let t=le("/logs",e);return await this.resend.get(t)}async get(e){return await this.resend.get(`/logs/${e}`)}},Qf=class{constructor(e){this.resend=e}async list(e={}){let t=le("/oauth/grants",e);return await this.resend.get(t)}async revoke(e){return await this.resend.delete(`/oauth/grants/${e}`)}},Nf=class{constructor(e){this.resend=e}async create(e,t={}){return await this.resend.post("/segments",e,t)}async list(e={}){let t=le("/segments",e);return await this.resend.get(t)}async get(e){return await this.resend.get(`/segments/${e}`)}async update(e,t){return await this.resend.patch(`/segments/${e}`,t)}async remove(e){return await this.resend.delete(`/segments/${e}`)}},Mf=class{constructor(e){this.resend=e}async add(e){return this.resend.post("/suppressions/batch/add",e)}async remove(e){return this.resend.post("/suppressions/batch/remove",e)}},Cs=()=>({data:null,headers:null,error:{message:"Missing `id` field.",statusCode:null,name:"missing_required_field"}}),qf=class{constructor(e){this.resend=e,this.batch=new Mf(e)}async add(e){return this.resend.post("/suppressions",e)}async list(e={}){let t=Lf(e),o=t?`/suppressions?${t}`:"/suppressions";return this.resend.get(o)}async get(e){return e?this.resend.get(`/suppressions/${encodeURIComponent(e)}`):Cs()}async remove(e){return e?this.resend.delete(`/suppressions/${encodeURIComponent(e)}`):Cs()}};function Lf(e){let{origin:t,...o}=e,i=new URLSearchParams($t(o));return t&&i.set("origin",t),i.toString()}function Wf(e={}){let t=new URLSearchParams;return e.before&&t.set("before",e.before),e.after&&t.set("after",e.after),e.limit&&t.set("limit",e.limit.toString()),t.size>0?`?${t.toString()}`:""}function Jf(e){return e?.map(t=>({key:t.key,type:t.type,fallback_value:t.fallbackValue}))}function xs(e){return{name:"name"in e?e.name:void 0,subject:e.subject,html:e.html,text:e.text,alias:e.alias,from:e.from,reply_to:e.replyTo,variables:Jf(e.variables)}}var ws=class{constructor(e,t){this.promise=e,this.publishFn=t}then(e,t){return this.promise.then(e,t)}async publish(){let{data:e,error:t}=await this.promise;return t?{data:null,headers:null,error:t}:this.publishFn(e.id)}},Vf=class{constructor(e){this.resend=e}create(e){return new ws(this.performCreate(e),this.publish.bind(this))}async performCreate(e){let t={...e};return e.react&&(t.html=await fo(e.react)),this.resend.post("/templates",xs(t))}async remove(e){return await this.resend.delete(`/templates/${e}`)}async get(e){return await this.resend.get(`/templates/${e}`)}async list(e={}){return this.resend.get(`/templates${Wf(e)}`)}duplicate(e){return new ws(this.resend.post(`/templates/${e}/duplicate`),this.publish.bind(this))}async publish(e){return await this.resend.post(`/templates/${e}/publish`)}async update(e,t){return await this.resend.patch(`/templates/${e}`,xs(t))}},zf=class{constructor(e){this.resend=e}async create(e){let{defaultSubscription:t,...o}=e;return await this.resend.post("/topics",{...o,default_subscription:t})}async list(){return await this.resend.get("/topics")}async get(e){return e?await this.resend.get(`/topics/${e}`):{data:null,headers:null,error:{message:"Missing `id` field.",statusCode:null,name:"missing_required_field"}}}async update(e){return e.id?await this.resend.patch(`/topics/${e.id}`,e):{data:null,headers:null,error:{message:"Missing `id` field.",statusCode:null,name:"missing_required_field"}}}async remove(e){return e?await this.resend.delete(`/topics/${e}`):{data:null,headers:null,error:{message:"Missing `id` field.",statusCode:null,name:"missing_required_field"}}}},Yf=class{constructor(e){this.resend=e}async list(e){let{webhookId:t,eventId:o}=e,i=le(`/webhooks/${t}/events/${o}/attempts`,e);return await this.resend.get(i)}},Xf=class{constructor(e){this.resend=e,this.attempts=new Yf(e)}async list(e){let{webhookId:t}=e,o=le(`/webhooks/${t}/events`,e);return await this.resend.get(o)}async get(e){let{webhookId:t,eventId:o}=e;return await this.resend.get(`/webhooks/${t}/events/${o}`)}async replay(e){let{webhookId:t,eventId:o}=e;return await this.resend.post(`/webhooks/${t}/events/${o}/replay`)}},Zf=class{constructor(e){this.resend=e,this.events=new Xf(e)}async create(e,t={}){return await this.resend.post("/webhooks",e,t)}async get(e){return await this.resend.get(`/webhooks/${e}`)}async list(e={}){let t=le("/webhooks",e);return await this.resend.get(t)}async update(e,t){return await this.resend.patch(`/webhooks/${e}`,t)}async remove(e){return await this.resend.delete(`/webhooks/${e}`)}async rotateSigningSecret(e){return await this.resend.post(`/webhooks/${e}/signing-secret/rotate`)}verify(e){return new Ss.Webhook(e.webhookSecret).verify(e.payload,{"webhook-id":e.headers.id,"webhook-timestamp":e.headers.timestamp,"webhook-signature":e.headers.signature})}},Us="https://api.resend.com",vs=`resend-node:${mf}`;function eh(){return typeof process<"u"&&process.env&&process.env.RESEND_BASE_URL||Us}function th(){return typeof process<"u"&&process.env&&process.env.RESEND_USER_AGENT||vs}var Gt=class{constructor(e,t){if(this.key=e,this.segments=new Nf(this),this.apiKeys=new pf(this),this.audiences=this.segments,this.automations=new Af(this),this.batch=new yf(this),this.broadcasts=new Cf(this),this.contactProperties=new wf(this),this.contacts=new Kf(this),this.domains=new Ff(this),this.emails=new Of(this),this.events=new Bf(this),this.inboxes=new Gf(this),this.logs=new Hf(this),this.oauthGrants=new Qf(this),this.suppressions=new qf(this),this.templates=new Vf(this),this.topics=new zf(this),this.webhooks=new Zf(this),!e&&(typeof process<"u"&&process.env&&(this.key=process.env.RESEND_API_KEY),!this.key))throw new Error('Missing API key. Pass it to the constructor `new Resend("re_123")`');this.baseUrl=t?.baseUrl??eh(),this.userAgent=t?.userAgent??th(),this.headers=new Headers({Authorization:`Bearer ${this.key}`,"User-Agent":this.userAgent,"Content-Type":"application/json"})}logError(e,t,o){typeof process<"u"&&process.env&&process.env.NODE_ENV!=="production"&&console.error("[Resend API Error]:",{...o!==void 0&&{status:o},error:e,path:t})}async fetchRequest(e,t={}){try{let o=await fetch(`${this.baseUrl}${e}`,t);if(!o.ok)try{let i=await o.text(),r=JSON.parse(i);return this.logError(r,e,o.status),{data:null,error:r,headers:Object.fromEntries(o.headers.entries())}}catch(i){if(i instanceof SyntaxError){let n={name:"application_error",statusCode:o.status,message:"Internal server error. We are unable to process your request right now, please try again later."};return this.logError(n,e,o.status),{data:null,error:n,headers:Object.fromEntries(o.headers.entries())}}let r={message:o.statusText,statusCode:o.status,name:"application_error"};if(i instanceof Error){let n={...r,message:i.message};return this.logError(n,e,o.status),{data:null,error:n,headers:Object.fromEntries(o.headers.entries())}}return this.logError(r,e,o.status),{data:null,error:r,headers:Object.fromEntries(o.headers.entries())}}return{data:await o.json(),error:null,headers:Object.fromEntries(o.headers.entries())}}catch{let o={name:"application_error",statusCode:null,message:"Unable to fetch data. The request could not be resolved."};return this.logError(o,e),{data:null,error:o,headers:null}}}async post(e,t,o={}){let i=new Headers(this.headers),r=typeof FormData<"u"&&t instanceof FormData;if(r&&i.delete("Content-Type"),o.headers)for(let[s,a]of new Headers(o.headers).entries())i.set(s,a);o.idempotencyKey&&i.set("Idempotency-Key",o.idempotencyKey);let n={method:"POST",body:r?t:JSON.stringify(t),...o,headers:i};return this.fetchRequest(e,n)}async get(e,t={}){let o=new Headers(this.headers);if(t.headers)for(let[r,n]of new Headers(t.headers).entries())o.set(r,n);let i={method:"GET",...t,headers:o};return this.fetchRequest(e,i)}async put(e,t,o={}){let i=new Headers(this.headers);if(o.headers)for(let[n,s]of new Headers(o.headers).entries())i.set(n,s);let r={method:"PUT",body:JSON.stringify(t),...o,headers:i};return this.fetchRequest(e,r)}async patch(e,t,o={}){let i=new Headers(this.headers);if(o.headers)for(let[n,s]of new Headers(o.headers).entries())i.set(n,s);let r={method:"PATCH",body:JSON.stringify(t),...o,headers:i};return this.fetchRequest(e,r)}async delete(e,t,o={}){let i=new Headers(this.headers);if(o.headers)for(let[n,s]of new Headers(o.headers).entries())i.set(n,s);let r={method:"DELETE",body:t===void 0?void 0:JSON.stringify(t),...o,headers:i};return this.fetchRequest(e,r)}};be();var Tr=me(Je(),1);function W(e,t){return e instanceof Error?e.message:t}function ua(e){return!!(e||!process.stdout.isTTY)}function N(e,t={}){ua(t.json)?console.log(JSON.stringify(e,null,2)):console.log(typeof e=="string"?e:JSON.stringify(e,null,2)),t.exitCode!==void 0&&process.exit(t.exitCode)}var hh=new Set(["content-type","retry-after"]);function gh(e){let t={};for(let[o,i]of Object.entries(e)){let r=o.toLowerCase();(hh.has(r)||r.startsWith("x-"))&&(t[r]=i)}return t}function h(e,t={}){let o=t.exitCode??1,i=e.headers&&Object.keys(e.headers).length>0?gh(e.headers):void 0,r=i!==void 0&&Object.keys(i).length>0;if(ua(t.json)){let n={message:e.message,code:e.code??"unknown"};typeof e.statusCode=="number"&&(n.statusCode=e.statusCode),r&&(n.headers=i),typeof e.body=="string"&&e.body.length>0&&(n.body=e.body),console.error(JSON.stringify({error:n},null,2))}else{console.error(`${Tr.default.red("Error:")} ${e.message}`);let n=[];if(typeof e.statusCode=="number"&&n.push(`HTTP ${e.statusCode}`),r)for(let[s,a]of Object.entries(i))n.push(`${s}: ${a}`);n.length>0&&console.error(Tr.default.dim(`[${n.join("; ")}]`))}process.exit(o)}var ma={sending_access:0,full_access:1};function Ah(e,t){return ma[e]>=ma[t]}async function ee(e,t){let o=e.profile;try{let i=await Rt(e.apiKey,o);if(!i){if(o){let s=_e();if(!s.some(l=>l.name===o))throw new Error(`Profile "${o}" not found. Available profiles: ${s.map(l=>l.name).join(", ")||"(none)"}`)}throw new Error("No API key found. Set RESEND_API_KEY, use --api-key, or run: resend login")}let r;if(i.type==="api_key")r=i.permission;else{let s=i.scope.split(" ").filter(Boolean);s.includes("full_access")?r="full_access":s.includes("emails:send")?r="sending_access":h({message:`Unrecognized credential scope${i.scope?` "${i.scope}"`:""}. Run \`resend login\` to re-authenticate.`,code:"unrecognized_scope"},{json:e.json})}if(r){let s=t?.permission??"full_access";Ah(r,s)||h({message:`This command requires full access. Your current credential has sending access only.
|
|
281
|
+
${Qt}`,code:"insufficient_permissions"},{json:e.json})}let n=i.type==="api_key"?i.key:i.access_token;return new Gt(n)}catch(i){h({message:W(i,"Failed to create client"),code:"auth_error"},{json:e.json})}}var pa=130;function bh(){process.stderr.isTTY&&process.stderr.write("\r\x1B[2K"),console.error("Cancelled."),process.exit(pa)}var Nt;function fa(){Nt=bh,process.on("SIGINT",Nt),process.on("uncaughtException",e=>{h({message:W(e,"An unexpected error occurred"),code:"unexpected_error"},{}),process.exit(1)})}function ri(e){Nt&&process.removeListener("SIGINT",Nt),Nt=e,process.on("SIGINT",Nt)}function Mt(){return pa}be();var ni=me(Je(),1);X();var ha=[1,2,4],yh=ha.length,Ch=new Set(["internal_server_error","service_unavailable","gateway_timeout"]),xh=(e,t)=>!!(e==="rate_limit_exceeded"||t&&e!==void 0&&Ch.has(e)),wh=e=>{let t=e?.["retry-after"];if(!t)return;let o=Number(t);if(Number.isFinite(o)&&o>=0)return o;let i=Date.parse(t);if(!Number.isNaN(i)){let r=(i-Date.now())/1e3;return r>0?r:0}},Uh=e=>new Promise(t=>setTimeout(t,e)),bo=async(e,t,o=0)=>{let i=await e(),r=t?.retryTransient??!1;if(i.error&&o<yh&&xh(i.error.name,r)){let n=wh(i.headers)??ha[o];return t?.onRetry?.(o,n,i.error.name??""),await Uh(n*1e3),bo(e,t,o+1)}return i};var ga=(e,t)=>new Promise((o,i)=>{let r=setTimeout(()=>{i(new Error(`Request timed out after ${t/1e3}s`))},t);r.unref(),e.then(n=>{clearTimeout(r),o(n)},n=>{clearTimeout(r),i(n)})});var Sh=st?String.fromCodePoint(10004):"v",Kh=st?String.fromCodePoint(9888):"!",kh=st?String.fromCodePoint(10007):"x",_h=["\u2839","\u2838","\u2834","\u2826","\u2807","\u280F","\u2819","\u2839"],Fh=80;async function ce(e,t,o,i,r={}){let n=ae(e,i.quiet);try{let{data:s,error:a,headers:l}=await bo(()=>ga(t(),3e4),{retryTransient:r.retryTransient,onRetry:(u,m,p)=>{n.update(p==="rate_limit_exceeded"?`Rate limited, retrying in ${m}s...`:`Server error, retrying in ${m}s...`)}});return a&&(n.stop(),h({message:a.message,code:o,statusCode:a.statusCode,headers:l},{json:i.json})),s===null&&(n.stop(),h({message:"Unexpected empty response",code:o,headers:l},{json:i.json})),n.stop(),s}catch(s){return n.stop(),h({message:W(s,"Unknown error"),code:o},{json:i.json})}}function ae(e,t){if(t||!w())return{update(a){},stop(a){},clear(){},warn(a){},fail(a){}};let o=st?_h:["-","\\","|","/"],i=Fh,r=0,n=e,s=setInterval(()=>{process.stderr.write(`\r\x1B[2K ${o[r++%o.length]} ${n}`)},i);return{update(a){n=a},stop(a){clearInterval(s),a?process.stderr.write(`\r\x1B[2K ${ni.default.green(Sh)} ${a}
|
|
282
282
|
`):process.stderr.write("\r\x1B[2K")},clear(){clearInterval(s),process.stderr.write("\r\x1B[2K")},warn(a){clearInterval(s),process.stderr.write(`\r\x1B[2K ${ni.default.yellow(Kh)} ${a}
|
|
283
283
|
`)},fail(a){clearInterval(s),process.stderr.write(`\r\x1B[2K ${ni.default.red(kh)} ${a}
|
|
284
|
-
`)}}}X();function D(e){Wn(e),process.exit(Mt())}async function si(e,t,o){(!w()||o.json)&&h({message:"Use --yes to confirm deletion in non-interactive mode.",code:"confirmation_required"},{json:o.json});let i=await Ze({message:t});(
|
|
284
|
+
`)}}}X();function D(e){Wn(e),process.exit(Mt())}async function si(e,t,o){(!w()||o.json)&&h({message:"Use --yes to confirm deletion in non-interactive mode.",code:"confirmation_required"},{json:o.json});let i=await Ze({message:t});(F(i)||!i)&&D("Deletion cancelled.")}async function ai(e,t){let o=ue(e);if(!o)return e;if(!w()||t.json)return h({message:`Profile "${e}" has an invalid name: ${o}`,code:"invalid_profile_name"},{json:t.json}),null;te.warn(`Profile "${e}" has an invalid name: ${o}`);let i=await Z({message:"Enter a new name for this profile:",placeholder:e.replace(/[^a-zA-Z0-9._-]/g,"-"),validate:r=>ue(r)});F(i)&&D("Rename cancelled.");try{await ii(e,i)}catch(r){return h({message:W(r,"Failed to rename profile"),code:"rename_failed"},{json:t.json}),null}return te.success(`Profile renamed to '${i}'.`),i}async function T(e,t,o,i){if(e!==void 0)return e;(!w()||i.json)&&h(o,{json:i.json});let r=await Z({message:t.message,placeholder:t.placeholder,defaultValue:t.defaultValue,validate:t.validate??(n=>!t.defaultValue&&(!n||n.length===0)?`${t.message} is required`:void 0)});return F(r)&&D("Cancelled."),r}async function bt(e,t,o,i){if(e!==void 0)return e;(!w()||i.json)&&h(o,{json:i.json});let r=await ne({message:t.message,options:t.options});return F(r)&&D("Cancelled."),r}async function ya(e,t,o){let i=t.filter(s=>s.required!==!1&&e[s.flag]==="");if(i.length>0){let s=i.map(a=>`--${a.flag}`).join(", ");h({message:`Empty value for required flags: ${s}`,code:"invalid_options"},{json:o.json})}let r=t.filter(s=>s.required!==!1&&!e[s.flag]);if(r.length===0)return e;if(!w()||o.json){let s=r.map(a=>`--${a.flag}`).join(", ");h({message:`Missing required flags: ${s}`,code:"missing_flags"},{json:o.json})}let n=await Ln(Object.fromEntries(r.map(s=>[s.flag,()=>Z({message:s.message,placeholder:s.placeholder,defaultValue:s.defaultValue,validate:s.validate??(a=>!s.defaultValue&&(!a||a.length===0)?`${s.message} is required`:void 0)})])),{onCancel:()=>D("Operation cancelled.")});return{...e,...n}}var Rh=20,Aa="__fetch_more__",ba="__none__";async function J(e,t,o,i){if(e)return{id:e,label:e};let r=i?.optional??!1;if(!w()||o.json){if(r)return;h({message:"Missing required argument: id",code:"missing_id"},{json:o.json})}let n=await ee(o,t.permission?{permission:t.permission}:void 0),s=[];for(;;){let a=s.at(-1)?.id,l=ae(s.length===0?`Fetching ${t.resourcePlural}...`:`Fetching more ${t.resourcePlural}...`,o.quiet),u=await t.fetchItems(n,{limit:Rh,...a&&{after:a}});if(u.error||!u.data){if(r){l.clear();return}l.fail(`Failed to fetch ${t.resourcePlural}`),h({message:u.error?.message??"Unexpected empty response",code:"list_error"},{json:o.json})}s.push(...u.data.data);let m=u.data.has_more??!1,p=t.filter?s.filter(t.filter):s;if(p.length===0&&!m&&r){l.clear();return}if(l.stop(s.length===p.length?`${t.resourcePlural} fetched`:`More ${t.resourcePlural} fetched`),p.length===0&&!m&&(te.warn(`No ${t.resourcePlural} found.`),h({message:`No ${t.resourcePlural} found.`,code:"no_items"},{json:o.json})),p.length===0&&m&&!r)continue;let f=p.map(b=>({item:b,...t.display(b)})),y=f.map(({item:b,label:x,hint:U})=>({value:b.id,label:x,hint:U}));r&&y.unshift({value:ba,label:"None"}),m&&y.push({value:Aa,label:"Fetch more..."});let A=await ne({message:`Select a ${t.resource}`,options:y});if(F(A)&&D("Cancelled."),A===ba)return;if(A!==Aa){let b=f.find(({item:x})=>x.id===A);return{id:A,label:b?.label??A}}}}async function g(e,t,o,i){return(await J(e,t,o,i))?.id}var Ca=require("node:util"),Dh=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]|\r(?!\n)/g,Fe=e=>(0,Ca.stripVTControlCharacters)(String(e)).replace(Dh,"");function qt(e){return typeof e=="string"?Fe(e):Array.isArray(e)?e.map(qt):e!==null&&typeof e=="object"?Object.fromEntries(Object.entries(e).map(([t,o])=>[t,qt(o)])):e}X();async function E(e,t){let o=e.permission?{permission:e.permission}:void 0,i=await ee(t,o),r=await ce(e.loading,()=>e.sdkCall(i),"fetch_error",t,{retryTransient:!0});!t.json&&w()?e.onInteractive(qt(r)):N(r,{json:t.json})}async function z(e,t,o,i){let r=o.permission?{permission:o.permission}:void 0,n=await ee(i,r);t||await si(e,o.confirmMessage,i),await ce(o.loading,()=>o.sdkCall(n),"delete_error",i),!i.json&&w()?console.log(o.successMsg):N({object:o.object,id:e,deleted:!0},{json:i.json})}async function B(e,t){let o=e.permission?{permission:e.permission}:void 0,i=await ee(t,o),r=await ce(e.loading,()=>e.sdkCall(i),"create_error",t);!t.json&&w()?e.onInteractive(qt(r)):N(r,{json:t.json})}async function R(e,t){let o=e.permission?{permission:e.permission}:void 0,i=await ee(t,o),r=await ce(e.loading,()=>e.sdkCall(i),e.errorCode,t,{retryTransient:e.retryTransient});!t.json&&w()?console.log(e.successMsg):N(r,{json:t.json})}async function k(e,t){let o=e.permission?{permission:e.permission}:void 0,i=await ee(t,o),r=await ce(e.loading,()=>e.sdkCall(i),"list_error",t,{retryTransient:!0});!t.json&&w()?e.onInteractive(qt(r)):N(r,{json:t.json})}X();X();var pe=st?{h:String.fromCodePoint(9472),v:String.fromCodePoint(9474),tl:String.fromCodePoint(9484),tr:String.fromCodePoint(9488),bl:String.fromCodePoint(9492),br:String.fromCodePoint(9496),lm:String.fromCodePoint(9500),rm:String.fromCodePoint(9508),tm:String.fromCodePoint(9516),bm:String.fromCodePoint(9524),mm:String.fromCodePoint(9532)}:{h:"-",v:"|",tl:"+",tr:"+",bl:"+",br:"+",lm:"+",rm:"+",tm:"+",bm:"+",mm:"+"};function Th(){return process.stdout.columns}function Oh(e,t,o){let i=Math.max(...e.map(n=>n.length)),r=Math.max(20,Math.min(o,60));return t.map((n,s)=>{let a=String(s+1),l=`${pe.h}${pe.h} ${a} ${pe.h.repeat(Math.max(0,r-a.length-4))}`,u=e.map((m,p)=>` ${m.padEnd(i)} ${n[p]}`);return[l,...u].join(`
|
|
285
285
|
`)}).join(`
|
|
286
286
|
|
|
287
|
-
`)}function
|
|
287
|
+
`)}function _(e,t,o="(no results)"){if(t.length===0)return o;let i=t.map(m=>m.map(Fe)),r=e.map((m,p)=>Math.max(m.length,...i.map(f=>f[p].length))),n=Th();if(n!==void 0&&r.reduce((p,f)=>p+f,0)+3*r.length+1>n)return Oh(e,i,n);let s=pe.tl+r.map(m=>pe.h.repeat(m+2)).join(pe.tm)+pe.tr,a=pe.lm+r.map(m=>pe.h.repeat(m+2)).join(pe.mm)+pe.rm,l=pe.bl+r.map(m=>pe.h.repeat(m+2)).join(pe.bm)+pe.br,u=m=>pe.v+" "+m.map((p,f)=>p.padEnd(r[f])).join(` ${pe.v} `)+" "+pe.v;return[s,u(e),a,...i.map(u),l].join(`
|
|
288
288
|
`)}X();var Or=st?String.fromCodePoint(9472):"-";function li(e,t){return e.length===0?"(no DNS records)":e.map(i=>{let r=i.name?i.name.includes(".")?i.name:`${i.name}.${t}`:t;return[`${Or}${Or} ${i.type} ${Or.repeat(40)}`,` Name ${r}`,` TTL ${i.ttl}`,` Value ${i.value}`].join(`
|
|
289
289
|
`)}).join(`
|
|
290
290
|
|
|
291
|
-
`)}function xa(e){let t=e.map(o=>[o.name,o.status,o.region,o.id]);return
|
|
291
|
+
`)}function xa(e){let t=e.map(o=>[o.name,o.status,o.region,o.id]);return _(["Name","Status","Region","ID"],t,"(no domains)")}function wa(e){switch(e){case"verified":return"\u2713 Verified";case"pending":return"\u23F3 Pending";case"not_started":return"\u25CB Not started";case"partially_verified":return"\u25D0 Partially verified";case"partially_failed":return"\u25D0 Partially failed";case"failed":case"temporary_failure":return"\u2717 Failed";default:return e}}var De={resource:"domain",resourcePlural:"domains",fetchItems:(e,{limit:t,after:o})=>e.domains.list({limit:t,...o&&{after:o}}),display:e=>({label:e.name,hint:e.id})};var Ua=new c("create").description("Create a new API key and display the token (shown once \u2014 store it immediately)").option("--name <name>","API key name").addOption(new M("--permission <permission>","Permission level").choices(["full_access","sending_access"])).option("--domain-id <id>","Restrict a sending_access key to a single domain ID").addHelpText("after",d({context:`Non-interactive: --name is required (no prompts when stdin/stdout is not a TTY).
|
|
292
292
|
|
|
293
293
|
Permissions:
|
|
294
294
|
full_access Full API access (default)
|
|
295
295
|
sending_access Send-only access; optionally scope to a domain with --domain-id`,output:` {"id":"<id>","token":"<token>"}
|
|
296
|
-
The token is only returned at creation time and cannot be retrieved again.`,errorCodes:["auth_error","missing_name","invalid_flags","create_error"],examples:['resend api-keys create --name "Production"','resend api-keys create --name "CI Token" --permission sending_access','resend api-keys create --name "Domain Token" --permission sending_access --domain-id <domain-id>','resend api-keys create --name "Production" --json']})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=e.name,r=e.permission;if(!i){(!w()||o.json)&&h({message:"Missing --name flag.",code:"missing_name"},{json:o.json});let s=await Z({message:"Key name",placeholder:"e.g. My API Key",validate:l=>{if(!l)return"Name is required"}});
|
|
297
|
-
${yo.default.yellow("\u26A0")} Store this token now \u2014 it cannot be retrieved again.`)}},o)});var ci={resource:"API key",resourcePlural:"API keys",fetchItems:(e,{limit:t,after:o})=>e.apiKeys.list({limit:t,...o&&{after:o}}),display:e=>({label:e.name,hint:e.id})};function va(e){let t=e.map(o=>[o.name,o.id,o.created_at,o.last_used_at??""]);return
|
|
296
|
+
The token is only returned at creation time and cannot be retrieved again.`,errorCodes:["auth_error","missing_name","invalid_flags","create_error"],examples:['resend api-keys create --name "Production"','resend api-keys create --name "CI Token" --permission sending_access','resend api-keys create --name "Domain Token" --permission sending_access --domain-id <domain-id>','resend api-keys create --name "Production" --json']})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=e.name,r=e.permission;if(!i){(!w()||o.json)&&h({message:"Missing --name flag.",code:"missing_name"},{json:o.json});let s=await Z({message:"Key name",placeholder:"e.g. My API Key",validate:l=>{if(!l)return"Name is required"}});F(s)&&D("Cancelled."),i=s;let a=await ne({message:"Permission level",options:[{value:"full_access",label:"Full access"},{value:"sending_access",label:"Sending access only"}]});F(a)&&D("Cancelled."),r=a}let n=e.domainId;n!==void 0&&r!=="sending_access"&&h({message:"--domain-id requires --permission sending_access",code:"invalid_flags"},{json:o.json}),!n&&r==="sending_access"&&(n=await g(void 0,De,o,{optional:!0})),await B({loading:"Creating API key...",sdkCall:s=>s.apiKeys.create({name:i,...r&&{permission:r},...n&&{domain_id:n}}),onInteractive:s=>{console.log(` ${yo.default.gray("Name:")} ${i}`),console.log(` ${yo.default.gray("ID:")} ${s.id}`),console.log(` ${yo.default.gray("Token:")} ${s.token}`),console.log(`
|
|
297
|
+
${yo.default.yellow("\u26A0")} Store this token now \u2014 it cannot be retrieved again.`)}},o)});var ci={resource:"API key",resourcePlural:"API keys",fetchItems:(e,{limit:t,after:o})=>e.apiKeys.list({limit:t,...o&&{after:o}}),display:e=>({label:e.name,hint:e.id})};function va(e){let t=e.map(o=>[o.name,o.id,o.created_at,o.last_used_at??""]);return _(["Name","ID","Created","Last used"],t,"(no API keys)")}var Sa=new c("delete").alias("rm").description("Delete an API key \u2014 any services using it will immediately lose access").argument("[id]","API key ID").option("--yes","Skip confirmation prompt").addHelpText("after",d({context:`Non-interactive: --yes is required to confirm deletion when stdin/stdout is not a TTY.
|
|
298
298
|
|
|
299
299
|
Warning: Deleting a key is immediate and irreversible. Any service using this key
|
|
300
300
|
will stop authenticating instantly. The current key (used to call this command)
|
|
301
301
|
can delete itself \u2014 the API does not prevent self-deletion.`,output:' {"object":"api-key","id":"<id>","deleted":true}',errorCodes:["auth_error","confirmation_required","delete_error"],examples:["resend api-keys delete dacf4072-aa82-4ff3-97de-514ae3000ee0 --yes","resend api-keys delete dacf4072-aa82-4ff3-97de-514ae3000ee0 --yes --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await J(e,ci,i);await z(r.id,!!t.yes,{confirmMessage:`Delete API key "${r.label}"?
|
|
302
302
|
ID: ${r.id}
|
|
303
|
-
Any services using this key will stop working.`,loading:"Deleting API key...",object:"api-key",successMsg:"API key deleted",sdkCall:n=>n.apiKeys.remove(r.id)},i)});be();function
|
|
303
|
+
Any services using this key will stop working.`,loading:"Deleting API key...",object:"api-key",successMsg:"API key deleted",sdkCall:n=>n.apiKeys.remove(r.id)},i)});be();function I(e,t){let o=parseInt(e,10);return(Number.isNaN(o)||o<1||o>100)&&h({message:"--limit must be an integer between 1 and 100",code:"invalid_limit"},{json:t.json}),o}function G(e,t,o,i){return t!==void 0&&o!==void 0&&h({message:"Cannot use --after and --before together. Pass only one cursor.",code:"invalid_pagination"},{json:i.json}),t!==void 0?{limit:e,after:t}:o!==void 0?{limit:e,before:o}:{limit:e}}function j(e,t,o){if(!e.has_more||e.data.length===0)return;let i=!!o.before,r=i?e.data[0].id:e.data[e.data.length-1].id,n=i?"--before":"--after",s=o.limit?` --limit ${o.limit}`:"",a=o.apiKey?` --api-key ${At(o.apiKey)}`:"",l=o.profile?` --profile ${o.profile}`:"",u=o.extraFlags?` ${o.extraFlags}`:"";console.log(`
|
|
304
304
|
Fetch the next page:
|
|
305
305
|
$ resend ${t} ${n} ${r}${s}${u}${a}${l}`)}var Ka=new c("list").alias("ls").description("List all API keys (IDs and names \u2014 tokens are never returned by this endpoint)").option("--limit <n>","Maximum number of API keys to return (1-100)","10").option("--after <cursor>","Cursor for forward pagination \u2014 list items after this ID").option("--before <cursor>","Cursor for backward pagination \u2014 list items before this ID").addHelpText("after",d({output:` {"object":"list","has_more":false,"data":[{"id":"<id>","name":"<name>","created_at":"<date>","last_used_at":"<date>|null"}]}
|
|
306
|
-
Tokens are never included in list responses.`,errorCodes:["auth_error","invalid_limit","list_error"],examples:["resend api-keys list","resend api-keys list --limit 25 --json","resend api-keys list --after <cursor> --json"]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=
|
|
306
|
+
Tokens are never included in list responses.`,errorCodes:["auth_error","invalid_limit","list_error"],examples:["resend api-keys list","resend api-keys list --limit 25 --json","resend api-keys list --after <cursor> --json"]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=I(e.limit,o),r=G(i,e.after,e.before,o);await k({loading:"Fetching API keys...",sdkCall:n=>n.apiKeys.list(r),onInteractive:n=>{console.log(va(n.data)),j(n,"api-keys list",{limit:i,before:e.before,apiKey:o.apiKey,profile:o.profile})}},o)});var ka=new c("update").description("Rename an API key").argument("[id]","API key ID").option("--name <name>","New API key name").addHelpText("after",d({context:"Non-interactive: --name is required (no prompts when stdin/stdout is not a TTY).",output:' {"object":"api_key","id":"<id>"}',errorCodes:["auth_error","missing_name","update_error"],examples:['resend api-keys update dacf4072-aa82-4ff3-97de-514ae3000ee0 --name "Production v2"','resend api-keys update dacf4072-aa82-4ff3-97de-514ae3000ee0 --name "Production v2" --json']})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,ci,i),n=await T(t.name,{message:"New key name",placeholder:"e.g. Production v2",validate:s=>{if(!s)return"Name is required"}},{message:"Missing --name flag.",code:"missing_name"},i);n||h({message:"Name is required.",code:"missing_name"},{json:i.json}),await R({loading:"Updating API key...",sdkCall:s=>s.apiKeys.update(r,{name:n}),errorCode:"update_error",successMsg:`API key updated: ${r}`},i)});var _a=new c("api-keys").description("Manage API keys for authentication").addHelpText("after",d({context:`Security notes:
|
|
307
307
|
- Tokens are only shown at creation time and cannot be retrieved again.
|
|
308
308
|
- Use sending_access keys with --domain-id for per-domain CI tokens.
|
|
309
|
-
- Deleting a key is immediate \u2014 any service using it loses access instantly.`,examples:["resend api-keys list",'resend api-keys create --name "Production"','resend api-keys create --name "CI Token" --permission sending_access --domain-id <domain-id>','resend api-keys update <id> --name "Production v2"',"resend api-keys delete <id> --yes"]})).addCommand(Ua).addCommand(Ka,{isDefault:!0}).addCommand(ka).addCommand(Sa);be();X();function
|
|
309
|
+
- Deleting a key is immediate \u2014 any service using it loses access instantly.`,examples:["resend api-keys list",'resend api-keys create --name "Production"','resend api-keys create --name "CI Token" --permission sending_access --domain-id <domain-id>','resend api-keys update <id> --name "Production v2"',"resend api-keys delete <id> --yes"]})).addCommand(Ua).addCommand(Ka,{isDefault:!0}).addCommand(ka).addCommand(Sa);be();X();function Eh(e){let t=_e();if(e.json){N({profiles:t},{json:!0});return}if(t.length===0){console.log("No profiles configured. Run: resend login");return}w()&&console.log(`
|
|
310
310
|
Profiles
|
|
311
|
-
`);let o=!1;for(let i of t){let r=i.active?" (active)":"",n=ue(i.name)!==void 0;n&&(o=!0),console.log(` ${i.active?"\u25B8":" "} ${i.name}${r}${n?" (invalid name)":""}`)}o&&w()&&console.log("\n Profiles with invalid names can be renamed via `resend auth rename`."),w()&&console.log("")}var
|
|
312
|
-
${u.toString()}`);let p=ae("Waiting for browser authentication...",e.quiet),f;try{f=await s}catch(S){p.fail("Authentication failed"),h({message:W(S,"Authentication failed"),code:"oauth_error"},{json:e.json})}f.state!==i&&(p.fail("Authentication failed"),h({message:"State mismatch in OAuth callback. Possible CSRF attack.",code:"oauth_state_mismatch"},{json:e.json})),p.stop("Browser authentication complete");let y=ae("Exchanging authorization code...",e.quiet),A;try{A=await ta({code:f.code,codeVerifier:t,redirectUri:a,clientId:Xo,baseUrl:l})}catch(S){y.fail("Token exchange failed"),h({message:W(S,"Token exchange failed"),code:"oauth_error"},{json:e.json})}y.stop("Authenticated successfully");let b=await Da(e,"Save credentials to which profile?"),x=b||"default",{configPath:U,backend:v}=await ei({access_token:A.access_token,access_token_expires_at:
|
|
313
|
-
${Qt}`),m==="browser"&&(await di(
|
|
311
|
+
`);let o=!1;for(let i of t){let r=i.active?" (active)":"",n=ue(i.name)!==void 0;n&&(o=!0),console.log(` ${i.active?"\u25B8":" "} ${i.name}${r}${n?" (invalid name)":""}`)}o&&w()&&console.log("\n Profiles with invalid names can be renamed via `resend auth rename`."),w()&&console.log("")}var Fa=new c("list").description("List all profiles").action((e,t)=>{Eh(t.optsWithGlobals())});var Ra=require("node:child_process"),Co=me(Je(),1),Ye="https://resend.com";function di(e){return new Promise(t=>{let o=process.platform==="win32"?"cmd.exe":process.platform==="darwin"?"open":"xdg-open",i=e.replaceAll('"',""),r=process.platform==="win32"?["/c","start",'""',`"${i}"`]:[e];(0,Ra.execFile)(o,r,{timeout:5e3,windowsVerbatimArguments:!0},n=>t(!n))})}async function Te(e,t){let o=await di(e);t?.json||t?.quiet||(o?console.log(Co.default.dim("Opened"),Co.default.blue(e)):console.warn(Co.default.yellow("Could not open browser. Visit this link:"),Co.default.blue(e)))}var fe={emails:`${Ye}/emails`,logs:`${Ye}/logs`,log:e=>`${Ye}/logs/${e}`,templates:`${Ye}/templates`,template:e=>`${Ye}/templates/${e}`,broadcasts:`${Ye}/broadcasts`,broadcast:e=>`${Ye}/broadcasts/${e}`,documentation:`${Ye}/docs`,automations:`${Ye}/automations`,automation:e=>`${Ye}/automations/${e}/editor`,events:`${Ye}/automations/events`};be();Zo();X();var Er="https://resend.com/api-keys?new=true";async function Da(e,t){let o=e.profile!==void 0?e.profile.trim():void 0;if(o!==void 0){let r=ue(o);return r&&h({message:r,code:"invalid_profile_name"},{json:e.json}),o}if(!w()||e.json)return o;let i=_e();if(i.length>0){let r=[...i.map(s=>({value:s.name,label:`${s.name} (overwrite)`,hint:ue(s.name)?"invalid name":void 0})),{value:"__new__",label:"+ Create new profile"}],n=await ne({message:t,options:r});if(F(n)&&D("Login cancelled."),n==="__new__"){let s=await Z({message:"Enter a name for the new profile:",validate:l=>ue((l??"").trim())});if(F(s)&&D("Login cancelled."),o=(s??"").trim()||"default",i.some(l=>l.name===o)){let l=await Ze({message:`Profile '${o}' already exists. Overwrite?`});(F(l)||!l)&&D("Login cancelled.")}}else if(ue(n)){let s=await ai(n,e);if(!s)return;o=s}else o=n}else o="default";return o}function Ta(e){let{noun:t,profileLabel:o,configPath:i,backend:r}=e,n=r.isSecure?`in ${r.name}`:`at ${i}`,s=`${t} stored for profile '${o}' ${n}`;if(w()?Bt(s):console.log(s),!r.isSecure&&process.platform==="linux"){let a="Tip: Install libsecret-tools and a Secret Service provider (e.g. gnome-keyring) to store credentials in secure storage instead of a plaintext file.";w()?te.info(a):console.log(a)}}async function Bh(e){let{codeVerifier:t,codeChallenge:o,state:i}=Zs(),r=ae("Starting local callback server...",e.quiet),n,s;try{({port:n,waitForCallback:s}=await ea()),r.stop("")}catch(S){r.fail("Failed to start callback server"),h({message:W(S,"Failed to start callback server"),code:"oauth_error"},{json:e.json})}let a=`http://127.0.0.1:${n}/oauth/callback`,l=process.env.RESEND_BASE_URL??"https://api.resend.com",u=new URL(`${l}/oauth/authorize`);u.search=new URLSearchParams({client_id:Xo,response_type:"code",redirect_uri:a,scope:"full_access",state:i,code_challenge:o,code_challenge_method:"S256"}).toString(),await di(u.toString())?te.info("Browser opened. Complete authentication to continue."):te.warn(`Could not open browser. Visit this URL to authenticate:
|
|
312
|
+
${u.toString()}`);let p=ae("Waiting for browser authentication...",e.quiet),f;try{f=await s}catch(S){p.fail("Authentication failed"),h({message:W(S,"Authentication failed"),code:"oauth_error"},{json:e.json})}f.state!==i&&(p.fail("Authentication failed"),h({message:"State mismatch in OAuth callback. Possible CSRF attack.",code:"oauth_state_mismatch"},{json:e.json})),p.stop("Browser authentication complete");let y=ae("Exchanging authorization code...",e.quiet),A;try{A=await ta({code:f.code,codeVerifier:t,redirectUri:a,clientId:Xo,baseUrl:l})}catch(S){y.fail("Token exchange failed"),h({message:W(S,"Token exchange failed"),code:"oauth_error"},{json:e.json})}y.stop("Authenticated successfully");let b=await Da(e,"Save credentials to which profile?"),x=b||"default",{configPath:U,backend:v}=await ei({access_token:A.access_token,access_token_expires_at:_r(A.access_token),refresh_token:A.refresh_token,scope:A.scope},b);if(b)try{Ao(x)}catch(S){h({message:W(S,"Failed to switch profile"),code:"switch_failed"},{json:e.json})}e.json?N({success:!0,config_path:U,profile:x,storage:v.name,scope:A.scope},{json:!0}):Ta({noun:"Credentials",profileLabel:x,configPath:U,backend:v})}var ui=new c("login").description("Save a Resend API key").option("--key <key>","API key to store (required in non-interactive mode)").addHelpText("after",d({setup:!0,context:"Non-interactive: --key is required (no prompts will appear when stdin/stdout is not a TTY).",output:' {"success":true,"config_path":"<path>","profile":"<name>"}',errorCodes:["missing_key","invalid_key_format","validation_failed","invalid_profile_name","switch_failed","write_failed","oauth_error","oauth_state_mismatch"],examples:["resend login --key re_123456789","resend login (interactive \u2014 prompts and opens browser)","RESEND_API_KEY=re_123 resend emails send ... (skip login; use env var directly)"]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=typeof e.key=="string"?e.key.trim():e.key;if(!i){(!w()||o.json)&&h({message:"Missing --key flag. Provide your API key in non-interactive mode.",code:"missing_key"},{json:o.json}),Ho("Resend Authentication");let m=await ne({message:"How would you like to authenticate?",options:[{value:"oauth",label:"Login with Resend (opens browser)"},{value:"browser",label:"Get API key from resend.com (opens browser)"},{value:"manual",label:"Enter API key manually"}]});if(F(m)&&D("Login cancelled."),m==="oauth"){await Bh(o);return}te.info(`Use a full access API key for complete CLI access.
|
|
313
|
+
${Qt}`),m==="browser"&&(await di(Er)?te.info(`Opened ${Er}`):te.warn(`Could not open browser. Visit ${Er} manually.`));let p=await zn({message:"Enter your Resend API key:",validate:f=>{if(!f)return"API key is required";if(!f.startsWith("re_"))return"API key must start with re_"}});F(p)&&D("Login cancelled."),i=p.trim()}i?.startsWith("re_")||h({message:"Invalid API key format. Key must start with re_",code:"invalid_key_format"},{json:o.json});let r=ae("Validating API key...",o.quiet),n="full_access";try{let m=new Gt(i),{error:p}=await m.domains.list();if(p){let f=p;f.name==="restricted_api_key"?(n="sending_access",r.warn("API key is valid (sending access only)")):(r.fail("API key validation failed"),h({message:f.message||"Failed to validate API key",code:"validation_failed"},{json:o.json}))}else r.stop("API key is valid (full access)")}catch(m){r.fail("API key validation failed"),h({message:W(m,"Failed to validate API key"),code:"validation_failed"},{json:o.json})}let s=await Da(o,"Save API key to which profile?"),{configPath:a,backend:l}=await ca(i,s,n),u=s||"default";if(s)try{Ao(u)}catch(m){h({message:W(m,"Failed to switch profile"),code:"switch_failed"},{json:o.json})}o.json?N({success:!0,config_path:a,profile:u,storage:l.name,permission:n},{json:!0}):Ta({noun:"API key",profileLabel:u,configPath:a,backend:l})});var Oa=require("node:fs");be();X();var mi=new c("logout").description("Remove your saved Resend API key").addHelpText("after",d({setup:!0,context:`Removes the saved API key from secure storage and the credentials file.
|
|
314
314
|
|
|
315
315
|
When --profile is specified, only that profile's entry is removed.
|
|
316
316
|
When no profile is specified, all profiles are removed.
|
|
317
317
|
|
|
318
|
-
If no credentials file exists, exits cleanly with no error.`,output:' {"success":true,"config_path":"<path>"}',errorCodes:["remove_failed"],examples:["resend logout","resend logout --profile staging","resend logout --json"]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=
|
|
318
|
+
If no credentials file exists, exits cleanly with no error.`,output:' {"success":true,"config_path":"<path>"}',errorCodes:["remove_failed"],examples:["resend logout","resend logout --profile staging","resend logout --json"]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=Ft(),r=Rr();if(!r&&!(0,Oa.existsSync)(i)){!o.json&&w()?console.log("No saved credentials found. Nothing to remove."):N({success:!0,already_logged_out:!0},{json:o.json});return}let n=o.profile,s=!n,a=n??"all";if(!s&&r&&!r.profiles[a]&&h({message:`Profile "${a}" not found. Available profiles: ${Object.keys(r.profiles).join(", ")}`,code:"remove_failed"},{json:o.json}),!o.json&&w()){let l=s?"Remove all saved API keys?":`Remove saved API key for profile '${a}'?`,u=await Ze({message:l});(F(u)||!u)&&D("Logout cancelled.")}try{s?await da():await oi(a)}catch(l){h({message:W(l,"Failed to remove credentials"),code:"remove_failed"},{json:o.json})}if(!o.json&&w()){let l=s?"Logged out. All API keys removed.":`Logged out. API key removed for profile '${a}'.`;Bt(l)}else N({success:!0,config_path:i,profile:s?"all":a},{json:o.json})});be();X();async function Ih(e,t){let o=e;if(!o){if(!w()||t.json){h({message:"Missing profile name. Provide a profile name in non-interactive mode.",code:"missing_name"},{json:t.json});return}let i=_e();if(i.length===0){h({message:"No profiles configured. Run `resend login` first.",code:"no_profiles"},{json:t.json});return}let r=await ne({message:"Remove which profile?",options:i.map(n=>({value:n.name,label:n.name,hint:n.active?"active":void 0}))});F(r)&&D("Remove cancelled."),o=r}if(!t.json&&w()){let i=await Ze({message:`Remove profile '${o}' and its API key?`});(F(i)||!i)&&D("Remove cancelled.")}try{await oi(o)}catch(i){h({message:W(i,"Failed to remove profile"),code:"remove_failed"},{json:t.json});return}t.json?N({success:!0,removed_profile:o},{json:!0}):console.log(`Profile '${o}' removed.`)}var Ea=new c("remove").description("Remove a profile").argument("[name]","Profile name to remove").action(async(e,t,o)=>{await Ih(e,o.optsWithGlobals())});be();X();async function jh(e,t,o){let i=e,r=t;if(!i){if(!w()||o.json){h({message:"Missing profile name. Provide old and new names in non-interactive mode.",code:"missing_name"},{json:o.json});return}let n=_e();if(n.length===0){h({message:"No profiles configured. Run `resend login` first.",code:"no_profiles"},{json:o.json});return}let s=await ne({message:"Rename which profile?",options:n.map(a=>({value:a.name,label:a.name,hint:a.active?"active":ue(a.name)?"invalid name":void 0}))});F(s)&&D("Rename cancelled."),i=s}if(!r){if(!w()||o.json){h({message:"Missing new name. Provide old and new names in non-interactive mode.",code:"missing_name"},{json:o.json});return}let n=await Z({message:`Enter new name for '${i}':`,placeholder:i.replace(/[^a-zA-Z0-9._-]/g,"-"),validate:s=>ue(s)});F(n)&&D("Rename cancelled."),r=n}try{await ii(i,r)}catch(n){h({message:W(n,"Failed to rename profile"),code:"rename_failed"},{json:o.json});return}o.json?N({success:!0,old_name:i,new_name:r},{json:!0}):console.log(`Profile '${i}' renamed to '${r}'.`)}var Ba=new c("rename").description("Rename a profile").argument("[old-name]","Current profile name").argument("[new-name]","New profile name").action(async(e,t,o,i)=>{await jh(e,t,i.optsWithGlobals())});be();X();async function Ph(e,t){let o=e;if(!o){if(!w()||t.json){h({message:"Missing profile name. Provide a profile name in non-interactive mode.",code:"missing_name"},{json:t.json});return}let n=_e();if(n.length===0){h({message:"No profiles configured. Run `resend login` first.",code:"no_profiles"},{json:t.json});return}let s=await ne({message:"Switch to which profile?",options:n.map(a=>({value:a.name,label:a.name,hint:a.active?"active":ue(a.name)?"invalid name":void 0}))});F(s)&&D("Switch cancelled."),o=s}if(_e().some(n=>n.name===o)){let n=await ai(o,t);if(!n)return;o=n}try{Ao(o)}catch(n){h({message:W(n,"Failed to switch profile"),code:"switch_failed"},{json:t.json});return}t.json?N({success:!0,active_profile:o},{json:!0}):console.log(`Switched to profile '${o}'.`)}var Ia=new c("switch").description("Switch the active profile").argument("[name]","Profile name to switch to").action(async(e,t,o)=>{await Ph(e,o.optsWithGlobals())});var ja=new c("auth").description("Manage authentication and profiles").addHelpText("after",d({setup:!0,context:`Environment variables:
|
|
319
319
|
RESEND_API_KEY API key (overrides stored credentials)
|
|
320
320
|
RESEND_PROFILE Profile name (overrides config default)
|
|
321
|
-
RESEND_CREDENTIAL_STORE Storage method: "secure_storage" or "file"`,examples:["resend login","resend login --key re_123456789","resend logout","resend auth list","resend auth switch staging","resend auth rename staging production","resend auth remove staging"]})).addCommand(ui).addCommand(mi).addCommand(
|
|
321
|
+
RESEND_CREDENTIAL_STORE Storage method: "secure_storage" or "file"`,examples:["resend login","resend login --key re_123456789","resend logout","resend auth list","resend auth switch staging","resend auth rename staging production","resend auth remove staging"]})).addCommand(ui).addCommand(mi).addCommand(Fa,{isDefault:!0}).addCommand(Ia).addCommand(Ba).addCommand(Ea);var Br=require("node:fs");function ie(e,t){if(e==="-"){process.stdin.isTTY&&h({message:"No input piped to stdin",code:"stdin_read_error"},{json:t.json});try{return(0,Br.readFileSync)(0,"utf-8")}catch{h({message:"Failed to read from stdin",code:"stdin_read_error"},{json:t.json})}}try{return(0,Br.readFileSync)(e,"utf-8")}catch{h({message:`Failed to read file: ${e}`,code:"file_read_error"},{json:t.json})}}function Dt(e,t,o){if(e!==void 0)try{return JSON.parse(e)}catch(i){h({message:`Invalid JSON for ${t}: ${i instanceof Error?i.message:"parse error"}`,code:"invalid_json"},{json:o.json})}}var Pa=new c("create").description("Create a new automation").option("--name <name>","Automation name").addOption(new M("--status <status>","Initial status").choices(["enabled","disabled"])).option("--steps <json>","Steps array as JSON string").option("--connections <json>","Connections array as JSON string").option("--file <path>",'Path to a JSON file containing the full automation payload (use "-" for stdin)').addHelpText("after",d({context:`Non-interactive: --name and --steps/--connections (or --file) are required.
|
|
322
322
|
|
|
323
323
|
Payload format:
|
|
324
324
|
--file accepts a JSON object with { name, status?, steps, connections }.
|
|
@@ -326,18 +326,18 @@ Payload format:
|
|
|
326
326
|
When using --file, --name/--status/--steps/--connections flags override file values.
|
|
327
327
|
|
|
328
328
|
Step types: trigger, delay, send_email, wait_for_event, condition
|
|
329
|
-
Connection types: default, condition_met, condition_not_met, timeout, event_received`,output:' {"object":"automation","id":"<id>"}',errorCodes:["auth_error","missing_name","missing_steps","missing_connections","invalid_json","file_read_error","create_error"],examples:["resend automations create --file automation.json","cat automation.json | resend automations create --file -","resend automations create --file automation.json --status disabled",`resend automations create --name "Welcome Flow" --steps '[...]' --connections '[...]'`]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i={};if(e.file){let l=ie(e.file,o);try{i=JSON.parse(l)}catch(u){h({message:`Invalid JSON in --file: ${u instanceof Error?u.message:"parse error"}`,code:"invalid_json"},{json:o.json})}(typeof i!="object"||i===null||Array.isArray(i))&&h({message:"--file must contain a JSON object with automation properties (name, steps, connections).",code:"invalid_json"},{json:o.json})}let r=await T(e.name??i.name,{message:"Automation name",placeholder:"e.g. Welcome Flow"},{message:"Missing --name flag.",code:"missing_name"},o),n=Dt(e.steps,"--steps",o)??i.steps;(!n||!Array.isArray(n)||n.length===0)&&h({message:"Missing or empty steps. Provide --steps as a JSON array or use --file.",code:"missing_steps"},{json:o.json});let s=Dt(e.connections,"--connections",o)??i.connections;s||h({message:"Missing connections. Provide --connections as a JSON array or use --file (empty array is valid for single-step automations).",code:"missing_connections"},{json:o.json}),Array.isArray(s)||h({message:"--connections must be a JSON array.",code:"invalid_json"},{json:o.json});let a=e.status??i.status;await
|
|
329
|
+
Connection types: default, condition_met, condition_not_met, timeout, event_received`,output:' {"object":"automation","id":"<id>"}',errorCodes:["auth_error","missing_name","missing_steps","missing_connections","invalid_json","file_read_error","create_error"],examples:["resend automations create --file automation.json","cat automation.json | resend automations create --file -","resend automations create --file automation.json --status disabled",`resend automations create --name "Welcome Flow" --steps '[...]' --connections '[...]'`]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i={};if(e.file){let l=ie(e.file,o);try{i=JSON.parse(l)}catch(u){h({message:`Invalid JSON in --file: ${u instanceof Error?u.message:"parse error"}`,code:"invalid_json"},{json:o.json})}(typeof i!="object"||i===null||Array.isArray(i))&&h({message:"--file must contain a JSON object with automation properties (name, steps, connections).",code:"invalid_json"},{json:o.json})}let r=await T(e.name??i.name,{message:"Automation name",placeholder:"e.g. Welcome Flow"},{message:"Missing --name flag.",code:"missing_name"},o),n=Dt(e.steps,"--steps",o)??i.steps;(!n||!Array.isArray(n)||n.length===0)&&h({message:"Missing or empty steps. Provide --steps as a JSON array or use --file.",code:"missing_steps"},{json:o.json});let s=Dt(e.connections,"--connections",o)??i.connections;s||h({message:"Missing connections. Provide --connections as a JSON array or use --file (empty array is valid for single-step automations).",code:"missing_connections"},{json:o.json}),Array.isArray(s)||h({message:"--connections must be a JSON array.",code:"invalid_json"},{json:o.json});let a=e.status??i.status;await B({loading:"Creating automation...",sdkCall:l=>l.automations.create({name:r,steps:n,connections:s,...a&&{status:a}}),onInteractive:l=>{console.log(`Automation created: ${l.id}`)}},o)});function $a(e){let t=e.map(o=>[o.name,Ir(o.status),o.created_at,o.id]);return _(["Name","Status","Created","ID"],t,"(no automations)")}function Ir(e){switch(e){case"enabled":return"\u2713 Enabled";case"disabled":return"\u25CB Disabled";default:return e}}var Qe={resource:"automation",resourcePlural:"automations",fetchItems:(e,{limit:t,after:o})=>e.automations.list({limit:t,...o&&{after:o}}),display:e=>({label:e.name,hint:e.id})};var Ga=new c("delete").alias("rm").description("Delete an automation").argument("[id]","Automation ID").option("--yes","Skip confirmation prompt").addHelpText("after",d({context:"Non-interactive: --yes is required to confirm deletion when stdin/stdout is not a TTY.",output:' {"object":"automation","id":"<id>","deleted":true}',errorCodes:["auth_error","confirmation_required","delete_error"],examples:["resend automations delete <id> --yes","resend automations delete <id> --yes --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,Qe,i);await z(r,!!t.yes,{confirmMessage:`Delete automation ${r}?
|
|
330
330
|
This cannot be undone.`,loading:"Deleting automation...",object:"automation",successMsg:"Automation deleted",sdkCall:n=>n.automations.remove(r)},i)});var Ha=new c("duplicate").description("Duplicate an automation").argument("[id]","Automation ID to duplicate").addHelpText("after",d({context:`Creates a copy of an existing automation and returns the new automation ID.
|
|
331
|
-
The steps and connections are copied from the original.`,output:' {"object":"automation","id":"<new-automation-id>"}',errorCodes:["auth_error","create_error"],examples:["resend automations duplicate <id>","resend automations duplicate <id> --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,Qe,i);await
|
|
331
|
+
The steps and connections are copied from the original.`,output:' {"object":"automation","id":"<new-automation-id>"}',errorCodes:["auth_error","create_error"],examples:["resend automations duplicate <id>","resend automations duplicate <id> --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,Qe,i);await B({loading:"Duplicating automation...",sdkCall:n=>n.automations.duplicate(r),onInteractive:n=>{console.log(`Automation duplicated: ${n.id}`)}},i)});var Qa=new c("get").description("Retrieve an automation with its steps and connections").argument("[id]","Automation ID").addHelpText("after",d({output:` Full automation object including steps and connections arrays.
|
|
332
332
|
|
|
333
|
-
Automation status values: enabled | disabled`,errorCodes:["auth_error","fetch_error"],examples:["resend automations get <id>","resend automations get <id> --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,Qe,i);await
|
|
334
|
-
Steps:`);let s=n.steps.map(a=>[a.key,a.type]);console.log(
|
|
335
|
-
Connections:`);let s=n.connections.map(a=>[a.from,a.to,a.type]);console.log(
|
|
333
|
+
Automation status values: enabled | disabled`,errorCodes:["auth_error","fetch_error"],examples:["resend automations get <id>","resend automations get <id> --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,Qe,i);await E({loading:"Fetching automation...",sdkCall:n=>n.automations.get(r),onInteractive:n=>{if(console.log(`${n.name} \u2014 ${Ir(n.status)}`),console.log(`ID: ${n.id}`),console.log(`Created: ${n.created_at}`),n.updated_at&&console.log(`Updated: ${n.updated_at}`),n.steps.length>0){console.log(`
|
|
334
|
+
Steps:`);let s=n.steps.map(a=>[a.key,a.type]);console.log(_(["Key","Type"],s,"(no steps)"))}if(n.connections.length>0){console.log(`
|
|
335
|
+
Connections:`);let s=n.connections.map(a=>[a.from,a.to,a.type]);console.log(_(["From","To","Type"],s,"(no connections)"))}}},i)});var Na=new c("list").alias("ls").description("List all automations").option("--limit <n>","Maximum number of automations to return (1-100)","10").option("--after <cursor>","Return automations after this cursor (next page)").option("--before <cursor>","Return automations before this cursor (previous page)").addHelpText("after",d({output:' {"object":"list","data":[...],"has_more":true}',errorCodes:["auth_error","invalid_limit","list_error"],examples:["resend automations list","resend automations list --limit 25 --json","resend automations list --after <cursor> --json"]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=I(e.limit,o),r=G(i,e.after,e.before,o);await k({loading:"Fetching automations...",sdkCall:n=>n.automations.list(r),onInteractive:n=>{console.log($a(n.data)),j(n,"automations list",{limit:i,before:e.before,apiKey:o.apiKey,profile:o.profile})}},o)});var Ma=new c("open").description("Open an automation or the automations list in the Resend dashboard").argument("[id]","Automation ID \u2014 omit to open the automations list").addHelpText("after",d({context:`Opens the Resend dashboard in your default browser.
|
|
336
336
|
With an ID: opens that automation's editor.
|
|
337
|
-
Without an ID: opens the automations list.`,examples:["resend automations open","resend automations open 019d4ef1-8266-71d4-a1aa-60ce5d0eaea7"]})).action(async(e,t,o)=>{let i=e?fe.automation(e):fe.automations,r=o.optsWithGlobals();await Te(i,r)});var qa=new c("get").description("Retrieve details of a specific automation run").option("--automation-id <id>","Automation ID").option("--run-id <id>","Run ID").addHelpText("after",d({output:" Full automation run object with status, trigger, and timestamps.",errorCodes:["auth_error","missing_automation_id","missing_run_id","fetch_error"],examples:["resend automations runs get --automation-id <id> --run-id <id>","resend automations runs get --automation-id <id> --run-id <id> --json"]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=await T(e.automationId,{message:"Automation ID"},{message:"Missing --automation-id flag.",code:"missing_automation_id"},o),r=await T(e.runId,{message:"Run ID"},{message:"Missing --run-id flag.",code:"missing_run_id"},o);await
|
|
337
|
+
Without an ID: opens the automations list.`,examples:["resend automations open","resend automations open 019d4ef1-8266-71d4-a1aa-60ce5d0eaea7"]})).action(async(e,t,o)=>{let i=e?fe.automation(e):fe.automations,r=o.optsWithGlobals();await Te(i,r)});var qa=new c("get").description("Retrieve details of a specific automation run").option("--automation-id <id>","Automation ID").option("--run-id <id>","Run ID").addHelpText("after",d({output:" Full automation run object with status, trigger, and timestamps.",errorCodes:["auth_error","missing_automation_id","missing_run_id","fetch_error"],examples:["resend automations runs get --automation-id <id> --run-id <id>","resend automations runs get --automation-id <id> --run-id <id> --json"]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=await T(e.automationId,{message:"Automation ID"},{message:"Missing --automation-id flag.",code:"missing_automation_id"},o),r=await T(e.runId,{message:"Run ID"},{message:"Missing --run-id flag.",code:"missing_run_id"},o);await E({loading:"Fetching automation run...",sdkCall:n=>n.automations.runs.get({automationId:i,runId:r}),onInteractive:n=>{console.log(`Run: ${n.id}`),console.log(`Status: ${n.status}`),n.started_at&&console.log(`Started: ${n.started_at}`),n.completed_at&&console.log(`Completed: ${n.completed_at}`),console.log(`Created: ${n.created_at}`)}},o)});var La=new c("list").alias("ls").description("List runs for an automation").argument("[automation-id]","Automation ID").option("--status <status>","Filter by status (running, completed, failed, cancelled). Comma-separated.").option("--limit <n>","Maximum number of runs to return (1-100)","10").option("--after <cursor>","Return runs after this cursor (next page)").option("--before <cursor>","Return runs before this cursor (previous page)").addHelpText("after",d({output:' {"object":"list","data":[...],"has_more":true}',errorCodes:["auth_error","missing_id","invalid_limit","list_error"],examples:["resend automations runs <automation-id>","resend automations runs list <automation-id>","resend automations runs list <automation-id> --status running","resend automations runs list <automation-id> --limit 25 --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,Qe,i),n=I(t.limit,i),s=G(n,t.after,t.before,i);await k({loading:"Fetching automation runs...",sdkCall:a=>a.automations.runs.list({automationId:r,...s,...t.status?{status:t.status}:{}}),onInteractive:a=>{let l=a.data.map(u=>[u.id,u.status,u.started_at??"-",u.completed_at??"-"]);console.log(_(["ID","Status","Started","Completed"],l,"(no runs)")),j(a,`automations runs list ${r}`,{limit:n,before:t.before,apiKey:i.apiKey,profile:i.profile})}},i)});var Wa=new c("runs").description("Manage automation runs").addHelpText("after",d({context:`Runs represent individual executions of an automation.
|
|
338
338
|
Each run is triggered by an event and progresses through the automation's steps.
|
|
339
339
|
|
|
340
|
-
Run status values: running | completed | failed | cancelled`,examples:["resend automations runs <automation-id>","resend automations runs list <automation-id> --limit 25","resend automations runs get --automation-id <id> --run-id <id>"]})).addCommand(La,{isDefault:!0}).addCommand(qa);var Ja=new c("stop").description("Stop a running automation").argument("[id]","Automation ID").addHelpText("after",d({context:"Stops a running automation by setting its status to disabled and cancelling active runs.",output:' {"object":"automation","id":"<id>","status":"disabled"}',errorCodes:["auth_error","stop_error"],examples:["resend automations stop <id>","resend automations stop <id> --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,Qe,i);await
|
|
340
|
+
Run status values: running | completed | failed | cancelled`,examples:["resend automations runs <automation-id>","resend automations runs list <automation-id> --limit 25","resend automations runs get --automation-id <id> --run-id <id>"]})).addCommand(La,{isDefault:!0}).addCommand(qa);var Ja=new c("stop").description("Stop a running automation").argument("[id]","Automation ID").addHelpText("after",d({context:"Stops a running automation by setting its status to disabled and cancelling active runs.",output:' {"object":"automation","id":"<id>","status":"disabled"}',errorCodes:["auth_error","stop_error"],examples:["resend automations stop <id>","resend automations stop <id> --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,Qe,i);await R({loading:"Stopping automation...",sdkCall:n=>n.automations.stop(r),errorCode:"stop_error",successMsg:"Automation stopped"},i)});var Va=new c("update").description("Update an automation status (enable or disable)").argument("[id]","Automation ID").addOption(new M("--status <status>","New status").choices(["enabled","disabled"])).addHelpText("after",d({output:' {"object":"automation","id":"<id>","status":"<status>"}',errorCodes:["auth_error","missing_status","update_error"],examples:["resend automations update <id> --status enabled","resend automations update <id> --status disabled --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,Qe,i),n=await bt(t.status,{message:"Status",options:[{value:"enabled",label:"Enabled"},{value:"disabled",label:"Disabled"}]},{message:"Missing --status flag.",code:"missing_status"},i);await R({loading:"Updating automation...",sdkCall:s=>s.automations.update(r,{status:n}),errorCode:"update_error",successMsg:`Automation updated: ${r} (${n})`},i)});var za=new c("automations").description("Manage automations").addHelpText("after",d({context:`Automations are event-driven workflows composed of steps and connections.
|
|
341
341
|
|
|
342
342
|
Steps define the actions (trigger, delay, send_email, wait_for_event, condition).
|
|
343
343
|
Connections define the flow between steps (default, condition_met, condition_not_met, timeout, event_received).
|
|
@@ -348,12 +348,12 @@ Lifecycle:
|
|
|
348
348
|
3. resend automations duplicate <id> (copy an automation)
|
|
349
349
|
4. resend automations stop <id> (stop automation)
|
|
350
350
|
5. resend automations runs <id> (inspect runs)
|
|
351
|
-
6. resend automations open <id> (view in dashboard)`,examples:["resend automations list",'resend automations create --name "Welcome Flow" --file workflow.json',"resend automations get <id>","resend automations update <id> --status enabled","resend automations duplicate <id>","resend automations stop <id>","resend automations delete <id> --yes","resend automations runs <automation-id>","resend automations runs get --automation-id <id> --run-id <id>","resend automations open <id>"]})).addCommand(Pa).addCommand(Qa).addCommand(Na,{isDefault:!0}).addCommand(Va).addCommand(Ga).addCommand(Ha).addCommand(Ja).addCommand(Ma).addCommand(Wa);function jr(e){switch(e){case"draft":return"\u25CB Draft";case"queued":return"\u23F3 Queued";case"scheduled":return"\u{1F4C5} Scheduled";case"sent":return"\u2713 Sent";default:return e}}var Ne={resource:"broadcast",resourcePlural:"broadcasts",fetchItems:(e,{limit:t,after:o})=>e.broadcasts.list({limit:t,...o&&{after:o}}),display:e=>({label:e.name??"(untitled)",hint:e.id})};function Ya(e){return{resource:"broadcast",resourcePlural:"broadcasts",fetchItems:(t,{limit:o,after:i})=>t.broadcasts.list({limit:o,...i&&{after:i}}),display:t=>({label:t.name??"(untitled)",hint:`${jr(t.status)} ${t.id}`}),filter:e}}var Xa=Ya(e=>e.status==="draft"),Za=Ya(e=>e.status==="queued"||e.status==="scheduled");function el(e){let t=e.map(o=>[o.name??"(untitled)",o.status,o.created_at,o.id]);return
|
|
351
|
+
6. resend automations open <id> (view in dashboard)`,examples:["resend automations list",'resend automations create --name "Welcome Flow" --file workflow.json',"resend automations get <id>","resend automations update <id> --status enabled","resend automations duplicate <id>","resend automations stop <id>","resend automations delete <id> --yes","resend automations runs <automation-id>","resend automations runs get --automation-id <id> --run-id <id>","resend automations open <id>"]})).addCommand(Pa).addCommand(Qa).addCommand(Na,{isDefault:!0}).addCommand(Va).addCommand(Ga).addCommand(Ha).addCommand(Ja).addCommand(Ma).addCommand(Wa);function jr(e){switch(e){case"draft":return"\u25CB Draft";case"queued":return"\u23F3 Queued";case"scheduled":return"\u{1F4C5} Scheduled";case"sent":return"\u2713 Sent";default:return e}}var Ne={resource:"broadcast",resourcePlural:"broadcasts",fetchItems:(e,{limit:t,after:o})=>e.broadcasts.list({limit:t,...o&&{after:o}}),display:e=>({label:e.name??"(untitled)",hint:e.id})};function Ya(e){return{resource:"broadcast",resourcePlural:"broadcasts",fetchItems:(t,{limit:o,after:i})=>t.broadcasts.list({limit:o,...i&&{after:i}}),display:t=>({label:t.name??"(untitled)",hint:`${jr(t.status)} ${t.id}`}),filter:e}}var Xa=Ya(e=>e.status==="draft"),Za=Ya(e=>e.status==="queued"||e.status==="scheduled");function el(e){let t=e.map(o=>[o.name??"(untitled)",o.status,o.created_at,o.id]);return _(["Name","Status","Created","ID"],t,"(no broadcasts)")}function tl(e){let t=e.map(o=>[o.email,o.contact_id??"-",o.count!==void 0&&o.count!==null?String(o.count):"-",o.bounce_type??"-",o.clicked_links&&o.clicked_links.length>0?o.clicked_links.map(i=>`${i.url} (${i.clicks})`).join(", "):"-",o.id]);return _(["Email","Contact ID","Count","Bounce Type","Clicked Links","ID"],t,"(no recipients)")}function ol(e){let t=e.map(o=>[o.url,String(o.clicks),String(o.unique_clicks)]);return _(["URL","Clicks","Unique Clicks"],t,"(no clicked links)")}var il=new c("cancel").description("Cancel a queued or scheduled broadcast").argument("[id]","Broadcast ID").addHelpText("after",d({context:`Only queued or scheduled broadcasts can be cancelled; draft and sent broadcasts cannot.
|
|
352
352
|
Cancelling a scheduled broadcast stops the scheduled delivery. Cancelling a queued
|
|
353
|
-
broadcast stops it mid-send \u2014 emails already sent are not affected.`,output:' {"object":"broadcast","id":"<id>"}',errorCodes:["auth_error","cancel_error"],examples:["resend broadcasts cancel d1c2b3a4-5e6f-7a8b-9c0d-e1f2a3b4c5d6","resend broadcasts cancel d1c2b3a4-5e6f-7a8b-9c0d-e1f2a3b4c5d6 --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,Za,i);await
|
|
353
|
+
broadcast stops it mid-send \u2014 emails already sent are not affected.`,output:' {"object":"broadcast","id":"<id>"}',errorCodes:["auth_error","cancel_error"],examples:["resend broadcasts cancel d1c2b3a4-5e6f-7a8b-9c0d-e1f2a3b4c5d6","resend broadcasts cancel d1c2b3a4-5e6f-7a8b-9c0d-e1f2a3b4c5d6 --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,Za,i);await R({loading:"Cancelling broadcast...",sdkCall:n=>n.broadcasts.cancel(r),errorCode:"cancel_error",successMsg:"Broadcast cancelled"},i)});var rl=new c("clicked-links").description("List the links clicked in a broadcast, ranked by total clicks").argument("[id]","Broadcast ID").option("--limit <n>","Maximum number of results to return (1-100)","10").option("--after <cursor>","Cursor for forward pagination \u2014 list items after this ID").option("--before <cursor>","Cursor for backward pagination \u2014 list items before this ID").addHelpText("after",d({output:' {"object":"list","has_more":false,"data":[{"id":"...","url":"...","clicks":42,"unique_clicks":30}]}',errorCodes:["auth_error","invalid_limit","invalid_pagination","list_error"],examples:["resend broadcasts clicked-links d1c2b3a4-5e6f-7a8b-9c0d-e1f2a3b4c5d6","resend broadcasts clicked-links d1c2b3a4-5e6f-7a8b-9c0d-e1f2a3b4c5d6 --limit 5","resend broadcasts clicked-links d1c2b3a4-5e6f-7a8b-9c0d-e1f2a3b4c5d6 --after b2Zmc2V0OjA","resend broadcasts clicked-links d1c2b3a4-5e6f-7a8b-9c0d-e1f2a3b4c5d6 --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,Ne,i),n=I(t.limit,i),s=G(n,t.after,t.before,i);await k({loading:"Fetching clicked links...",sdkCall:a=>a.broadcasts.clickedLinks(r,s),onInteractive:a=>{console.log(ol(a.data)),j(a,`broadcasts clicked-links ${r}`,{limit:n,before:t.before,apiKey:i.apiKey,profile:i.profile})}},i)});async function pi(e){try{let{data:t,error:o}=await e.domains.list();return o||!t?[]:t.data.filter(i=>i.status==="verified"&&i.capabilities.sending==="enabled").map(i=>i.name)}catch{return[]}}var $h=["hello","support"];async function fi(e){let t;if(e.length===1)t=e[0];else{let r=await ne({message:"Select a verified domain",options:e.map(n=>({value:n,label:n}))});F(r)&&D("Send cancelled."),t=r}let o=$h.map(r=>({value:`${r}@${t}`,label:`${r}@${t}`}));o.push({value:null,label:"Custom address..."});let i=await ne({message:`From address (@${t})`,options:o});if(F(i)&&D("Send cancelled."),i===null){let r=await Z({message:"From address",placeholder:`e.g. you@${t}`,validate:n=>n?.includes("@")?void 0:"Enter a valid email address"});return F(r)&&D("Send cancelled."),r}return i}var Wt=require("node:fs"),fl=require("node:path");var hi=require("node:fs"),dl=require("node:os"),Lt=me(require("node:path"),1);function nl(){return"pkg"in process?require("esbuild-wasm"):require("esbuild")}var al=require("node:fs"),ll=me(require("node:path"),1);function sl(e){return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}var cl=e=>({name:"rendering-utilities-exporter",setup:t=>{t.onLoad({filter:new RegExp(e.map(o=>sl(o)).join("|"))},async({path:o})=>({contents:`${await al.promises.readFile(o,"utf8")};
|
|
354
354
|
export { render } from 'react-email-module-that-will-export-render'
|
|
355
355
|
export { createElement as reactEmailCreateReactElement } from 'react';
|
|
356
|
-
`,loader:ll.default.extname(o).slice(1)})),t.onResolve({filter:/^react-email-module-that-will-export-render$/},async o=>{let i={kind:"import-statement",importer:o.importer,resolveDir:o.resolveDir,namespace:o.namespace},r=await t.resolve("react-email",i);return r.errors.length===0||(r=await t.resolve("@react-email/components",i),r.errors.length===0)||(r=await t.resolve("@react-email/render",i),r.errors.length>0&&r.errors[0]&&(r.errors[0].text="Failed to import `render` from `react-email` (6.0+), `@react-email/components` (5.x), or `@react-email/render`. Install one of them in your project.")),r})}});async function ul(e){let t=Lt.default.resolve(e),o=(0,hi.mkdtempSync)(Lt.default.join((0,dl.tmpdir)(),"resend-react-email-"));try{let{build:n}=nl();await n({bundle:!0,entryPoints:[t],format:"cjs",jsx:"automatic",logLevel:"silent",outExtension:{".js":".cjs"},outdir:o,platform:"node",plugins:[cl([t])],write:!0})}catch(n){throw(0,hi.rmSync)(o,{recursive:!0,force:!0}),n}let i=Lt.default.basename(t,Lt.default.extname(t));return{cjsPath:Lt.default.join(o,`${i}.cjs`),tmpDir:o}}var ml=require("node:module");async function pl(e){let t=(0,ml.createRequire)(e);delete t.cache[e];let o=t(e);return o.render(o.reactEmailCreateReactElement(o.default,{}),{})}var Pr=e=>{e&&(0,Wt.rmSync)(e,{recursive:!0,force:!0})},Me=async(e,t)=>{if(e.trim()==="")return h({message:"--react-email path cannot be empty",code:"react_email_build_error"},{json:t.json});let o=(0,fl.resolve)(e);if(!(0,Wt.existsSync)(o))return h({message:`File not found: ${e}`,code:"react_email_build_error"},{json:t.json});if(!(0,Wt.statSync)(o).isFile())return h({message:`--react-email path must be a file, got a directory: ${e}`,code:"react_email_build_error"},{json:t.json});let i=ae("Bundling React Email template...",t.quiet),r;try{let n=await ul(e);r=n.tmpDir,i.stop("Bundled React Email template");let s=ae("Rendering React Email template...",t.quiet);try{let a=await pl(n.cjsPath);return s.stop("Rendered React Email template"),Pr(r),a}catch(a){return s.fail("Failed to render React Email template"),Pr(r),h({message:W(a,"Failed to render React Email template"),code:"react_email_render_error"},{json:t.json})}}catch(n){return i.fail("Failed to bundle React Email template"),Pr(r),h({message:W(n,"Failed to bundle React Email template"),code:"react_email_build_error"},{json:t.json})}};X();var Oe={resource:"segment",resourcePlural:"segments",fetchItems:(e,{limit:t,after:o})=>e.segments.list({limit:t,...o&&{after:o}}),display:e=>({label:e.name,hint:e.id})};function gi(e){let t=e.map(o=>[o.name,o.id,o.created_at]);return
|
|
356
|
+
`,loader:ll.default.extname(o).slice(1)})),t.onResolve({filter:/^react-email-module-that-will-export-render$/},async o=>{let i={kind:"import-statement",importer:o.importer,resolveDir:o.resolveDir,namespace:o.namespace},r=await t.resolve("react-email",i);return r.errors.length===0||(r=await t.resolve("@react-email/components",i),r.errors.length===0)||(r=await t.resolve("@react-email/render",i),r.errors.length>0&&r.errors[0]&&(r.errors[0].text="Failed to import `render` from `react-email` (6.0+), `@react-email/components` (5.x), or `@react-email/render`. Install one of them in your project.")),r})}});async function ul(e){let t=Lt.default.resolve(e),o=(0,hi.mkdtempSync)(Lt.default.join((0,dl.tmpdir)(),"resend-react-email-"));try{let{build:n}=nl();await n({bundle:!0,entryPoints:[t],format:"cjs",jsx:"automatic",logLevel:"silent",outExtension:{".js":".cjs"},outdir:o,platform:"node",plugins:[cl([t])],write:!0})}catch(n){throw(0,hi.rmSync)(o,{recursive:!0,force:!0}),n}let i=Lt.default.basename(t,Lt.default.extname(t));return{cjsPath:Lt.default.join(o,`${i}.cjs`),tmpDir:o}}var ml=require("node:module");async function pl(e){let t=(0,ml.createRequire)(e);delete t.cache[e];let o=t(e);return o.render(o.reactEmailCreateReactElement(o.default,{}),{})}var Pr=e=>{e&&(0,Wt.rmSync)(e,{recursive:!0,force:!0})},Me=async(e,t)=>{if(e.trim()==="")return h({message:"--react-email path cannot be empty",code:"react_email_build_error"},{json:t.json});let o=(0,fl.resolve)(e);if(!(0,Wt.existsSync)(o))return h({message:`File not found: ${e}`,code:"react_email_build_error"},{json:t.json});if(!(0,Wt.statSync)(o).isFile())return h({message:`--react-email path must be a file, got a directory: ${e}`,code:"react_email_build_error"},{json:t.json});let i=ae("Bundling React Email template...",t.quiet),r;try{let n=await ul(e);r=n.tmpDir,i.stop("Bundled React Email template");let s=ae("Rendering React Email template...",t.quiet);try{let a=await pl(n.cjsPath);return s.stop("Rendered React Email template"),Pr(r),a}catch(a){return s.fail("Failed to render React Email template"),Pr(r),h({message:W(a,"Failed to render React Email template"),code:"react_email_render_error"},{json:t.json})}}catch(n){return i.fail("Failed to bundle React Email template"),Pr(r),h({message:W(n,"Failed to bundle React Email template"),code:"react_email_build_error"},{json:t.json})}};X();var Oe={resource:"segment",resourcePlural:"segments",fetchItems:(e,{limit:t,after:o})=>e.segments.list({limit:t,...o&&{after:o}}),display:e=>({label:e.name,hint:e.id})};function gi(e){let t=e.map(o=>[o.name,o.id,o.created_at]);return _(["Name","ID","Created"],t,"(no segments)")}var yt={resource:"topic",resourcePlural:"topics",fetchItems:e=>e.topics.list().then(t=>({...t,data:t.data?{data:t.data.data,has_more:!1}:null})),display:e=>({label:e.name,hint:e.id})};function hl(e){let t=e.map(o=>[o.name,o.description??"",o.id,o.created_at]);return _(["Name","Description","ID","Created"],t,"(no topics)")}var gl=new c("create").description("Create a broadcast draft (or send immediately with --send)").option("--from <address>","Sender address \u2014 required").option("--subject <subject>","Email subject \u2014 required").option("--segment-id <id>","Target segment ID \u2014 required").option("--html <html>","HTML body (supports {{{FIRST_NAME|fallback}}} triple-brace variable interpolation)").option("--html-file <path>",'Path to an HTML file for the body (use "-" for stdin, supports {{{FIRST_NAME|fallback}}} variable interpolation)').option("--text <text>","Plain-text body").option("--text-file <path>",'Path to a plain-text file for the body (use "-" for stdin)').option("--react-email <path>","Path to a React Email template (.tsx) to bundle, render, and use as HTML body").option("--name <name>","Internal label for the broadcast (optional)").option("--reply-to <address>","Reply-to address (optional)").option("--preview-text <text>","Preview text shown in inbox below the subject line (optional)").option("--topic-id <id>","Associate with a topic for subscription filtering (optional)").option("--send","Send immediately on create instead of saving as draft").option("--scheduled-at <datetime>",'Schedule delivery \u2014 ISO 8601 or natural language e.g. "in 1 hour", "tomorrow at 9am ET" (only valid with --send)').option("--dry-run","Validate input and print the create request JSON without calling the API (interactive: type segment/topic IDs; lists are not fetched)").addHelpText("after",d({context:`Non-interactive: --from, --subject, and --segment-id are required.
|
|
357
357
|
Body: provide at least one of --html, --html-file, --text, --text-file, or --react-email.
|
|
358
358
|
|
|
359
359
|
Use --dry-run to print the request JSON without creating a broadcast.
|
|
@@ -365,31 +365,31 @@ Variable interpolation:
|
|
|
365
365
|
Scheduling:
|
|
366
366
|
Use --scheduled-at with --send to schedule delivery.
|
|
367
367
|
Accepts ISO 8601 (e.g. 2026-08-05T11:52:01Z) or natural language (e.g. "in 1 hour").
|
|
368
|
-
--scheduled-at without --send is ignored.`,output:' {"id":"<broadcast-id>"}',errorCodes:["auth_error","missing_from","missing_subject","missing_segment","missing_body","file_read_error","invalid_options","stdin_read_error","react_email_build_error","react_email_render_error","create_error"],examples:['resend broadcasts create --from onboarding@resend.dev --subject "Weekly Update" --segment-id 7b1e0a3d-4c5f-4e8a-9b2d-1a3c5e7f9b2d --html "<p>Hello {{{FIRST_NAME|there}}}</p>"','resend broadcasts create --from onboarding@resend.dev --subject "Launch" --segment-id 7b1e0a3d-4c5f-4e8a-9b2d-1a3c5e7f9b2d --html-file ./email.html --send','resend broadcasts create --from onboarding@resend.dev --subject "Launch" --segment-id 7b1e0a3d-4c5f-4e8a-9b2d-1a3c5e7f9b2d --text "Hello!" --send --scheduled-at "tomorrow at 9am ET"']})).action(async(e,t)=>{let o=t.optsWithGlobals();e.htmlFile==="-"&&e.textFile==="-"&&h({message:"Cannot read both --html-file and --text-file from stdin. Pipe to one and pass the other as a file path.",code:"invalid_options"},{json:o.json}),e.reactEmail&&(e.html||e.htmlFile)&&h({message:"Cannot use --react-email with --html or --html-file",code:"invalid_options"},{json:o.json}),e.html!==void 0&&e.htmlFile!==void 0&&h({message:"--html and --html-file are mutually exclusive.",code:"invalid_options"},{json:o.json}),e.text!==void 0&&e.textFile!==void 0&&h({message:"--text and --text-file are mutually exclusive.",code:"invalid_options"},{json:o.json});let i=e.from,r=e.subject,n=e.segmentId;if(!i&&w()&&!o.json&&!e.dryRun){let m=await ee(o),p=await pi(m);p.length>0&&(i=await fi(p))}if(!i){(!w()||o.json)&&h({message:"Missing --from flag.",code:"missing_from"},{json:o.json});let m=await Z({message:"From address",placeholder:"e.g. onboarding@resend.dev",validate:p=>p?void 0:"Required"});
|
|
368
|
+
--scheduled-at without --send is ignored.`,output:' {"id":"<broadcast-id>"}',errorCodes:["auth_error","missing_from","missing_subject","missing_segment","missing_body","file_read_error","invalid_options","stdin_read_error","react_email_build_error","react_email_render_error","create_error"],examples:['resend broadcasts create --from onboarding@resend.dev --subject "Weekly Update" --segment-id 7b1e0a3d-4c5f-4e8a-9b2d-1a3c5e7f9b2d --html "<p>Hello {{{FIRST_NAME|there}}}</p>"','resend broadcasts create --from onboarding@resend.dev --subject "Launch" --segment-id 7b1e0a3d-4c5f-4e8a-9b2d-1a3c5e7f9b2d --html-file ./email.html --send','resend broadcasts create --from onboarding@resend.dev --subject "Launch" --segment-id 7b1e0a3d-4c5f-4e8a-9b2d-1a3c5e7f9b2d --text "Hello!" --send --scheduled-at "tomorrow at 9am ET"']})).action(async(e,t)=>{let o=t.optsWithGlobals();e.htmlFile==="-"&&e.textFile==="-"&&h({message:"Cannot read both --html-file and --text-file from stdin. Pipe to one and pass the other as a file path.",code:"invalid_options"},{json:o.json}),e.reactEmail&&(e.html||e.htmlFile)&&h({message:"Cannot use --react-email with --html or --html-file",code:"invalid_options"},{json:o.json}),e.html!==void 0&&e.htmlFile!==void 0&&h({message:"--html and --html-file are mutually exclusive.",code:"invalid_options"},{json:o.json}),e.text!==void 0&&e.textFile!==void 0&&h({message:"--text and --text-file are mutually exclusive.",code:"invalid_options"},{json:o.json});let i=e.from,r=e.subject,n=e.segmentId;if(!i&&w()&&!o.json&&!e.dryRun){let m=await ee(o),p=await pi(m);p.length>0&&(i=await fi(p))}if(!i){(!w()||o.json)&&h({message:"Missing --from flag.",code:"missing_from"},{json:o.json});let m=await Z({message:"From address",placeholder:"e.g. onboarding@resend.dev",validate:p=>p?void 0:"Required"});F(m)&&D("Cancelled."),i=m}if(!r){(!w()||o.json)&&h({message:"Missing --subject flag.",code:"missing_subject"},{json:o.json});let m=await Z({message:"Subject",placeholder:"e.g. Weekly Newsletter",validate:p=>p?void 0:"Required"});F(m)&&D("Cancelled."),r=m}if(!n)if((!w()||o.json)&&h({message:"Missing --segment-id flag.",code:"missing_segment"},{json:o.json}),e.dryRun){let m=await Z({message:"Segment ID",placeholder:"e.g. 7b1e0a3d-4c5f-4e8a-9b2d-1a3c5e7f9b2d",validate:p=>p?void 0:"Required"});F(m)&&D("Cancelled."),n=m}else n=await g(void 0,Oe,o);let s=e.reactEmail?await Me(e.reactEmail,o):e.htmlFile?ie(e.htmlFile,o):e.html,a=e.textFile?ie(e.textFile,o):e.text;if(!s&&!a){(!w()||o.json)&&h({message:"Missing body. Provide --html, --html-file, --text, --text-file, or --react-email.",code:"missing_body"},{json:o.json});let m=await Z({message:"Body (plain text)",placeholder:"e.g. Hello {{{FIRST_NAME|there}}}!",validate:p=>p?void 0:"Required"});F(m)&&D("Cancelled."),a=m}let l=e.topicId;if(!l&&w()&&!o.json)if(e.dryRun){let m=await Z({message:"Topic ID (optional)",placeholder:"Press Enter to skip"});F(m)&&D("Cancelled."),l=m.trim()||void 0}else l=await g(void 0,yt,o,{optional:!0});let u={from:i,subject:r,segmentId:n,...s&&{html:s},...a&&{text:a},...e.name&&{name:e.name},...e.replyTo&&{replyTo:e.replyTo},...e.previewText&&{previewText:e.previewText},...l&&{topicId:l},...e.send&&{send:!0},...e.send&&e.scheduledAt&&{scheduledAt:e.scheduledAt}};if(e.dryRun){N({dryRun:!0,request:u},{json:o.json});return}await B({loading:"Creating broadcast...",sdkCall:m=>m.broadcasts.create(u),onInteractive:m=>{e.send?e.scheduledAt?console.log(`Broadcast scheduled: ${m.id}`):console.log(`Broadcast sent: ${m.id}`):(console.log(`Broadcast created: ${m.id}`),console.log("Status: draft"),console.log(`Send it with: resend broadcasts send ${m.id}`))}},o)});var Al=new c("delete").alias("rm").description("Delete a broadcast \u2014 draft broadcasts are removed; scheduled broadcasts are cancelled before delivery").argument("[id]","Broadcast ID").option("--yes","Skip confirmation prompt").addHelpText("after",d({context:`Warning: Deleting a scheduled broadcast cancels its delivery immediately.
|
|
369
369
|
Only draft and scheduled broadcasts can be deleted; sent broadcasts cannot.
|
|
370
370
|
|
|
371
371
|
Non-interactive: --yes is required to confirm deletion when stdin/stdout is not a TTY.`,output:' {"object":"broadcast","id":"<id>","deleted":true}',errorCodes:["auth_error","confirmation_required","delete_error"],examples:["resend broadcasts delete d1c2b3a4-5e6f-7a8b-9c0d-e1f2a3b4c5d6 --yes","resend broadcasts delete d1c2b3a4-5e6f-7a8b-9c0d-e1f2a3b4c5d6 --yes --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await J(e,Ne,i);await z(r.id,!!t.yes,{confirmMessage:`Delete broadcast "${r.label}"?
|
|
372
372
|
ID: ${r.id}
|
|
373
373
|
If scheduled, delivery will be cancelled.`,loading:"Deleting broadcast...",object:"broadcast",successMsg:"Broadcast deleted",sdkCall:n=>n.broadcasts.remove(r.id)},i)});var bl=new c("duplicate").description("Duplicate a broadcast").argument("[id]","Broadcast ID").addHelpText("after",d({context:`Creates a copy of an existing broadcast and returns the new broadcast ID.
|
|
374
374
|
The copy is a draft named after the original with " (copy)" appended, truncated to 70 characters.
|
|
375
|
-
Segment, topic, from, subject, reply-to, preview text, and content are copied. Any broadcast can be duplicated, including sent ones.`,output:' {"object":"broadcast","id":"<new-broadcast-id>"}',errorCodes:["auth_error","create_error"],examples:["resend broadcasts duplicate d1c2b3a4-5e6f-7a8b-9c0d-e1f2a3b4c5d6","resend broadcasts duplicate d1c2b3a4-5e6f-7a8b-9c0d-e1f2a3b4c5d6 --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,Ne,i);await
|
|
376
|
-
Use this command to retrieve the full broadcast payload.`,output:' {"id":"...","object":"broadcast","name":"...","segment_id":"...","from":"...","subject":"...","status":"draft|queued|sent","created_at":"...","scheduled_at":null,"sent_at":null}',errorCodes:["auth_error","fetch_error"],examples:["resend broadcasts get d1c2b3a4-5e6f-7a8b-9c0d-e1f2a3b4c5d6","resend broadcasts get d1c2b3a4-5e6f-7a8b-9c0d-e1f2a3b4c5d6 --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,Ne,i);await
|
|
377
|
-
To retrieve full details (html, from, subject), use: resend broadcasts get <id>`,output:' {"object":"list","has_more":false,"data":[{"id":"...","name":"...","status":"draft|queued|sent","created_at":"..."}]}',errorCodes:["auth_error","invalid_limit","list_error"],examples:["resend broadcasts list","resend broadcasts list --limit 5","resend broadcasts list --after d1c2b3a4-5e6f-7a8b-9c0d-e1f2a3b4c5d6 --limit 10","resend broadcasts list --json"]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=
|
|
375
|
+
Segment, topic, from, subject, reply-to, preview text, and content are copied. Any broadcast can be duplicated, including sent ones.`,output:' {"object":"broadcast","id":"<new-broadcast-id>"}',errorCodes:["auth_error","create_error"],examples:["resend broadcasts duplicate d1c2b3a4-5e6f-7a8b-9c0d-e1f2a3b4c5d6","resend broadcasts duplicate d1c2b3a4-5e6f-7a8b-9c0d-e1f2a3b4c5d6 --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,Ne,i);await B({loading:"Duplicating broadcast...",sdkCall:n=>n.broadcasts.duplicate(r),onInteractive:n=>{console.log(`Broadcast duplicated: ${n.id}`)}},i)});var yl=new c("get").description("Retrieve full details for a broadcast including HTML body, status, and delivery times").argument("[id]","Broadcast ID").addHelpText("after",d({context:`Note: The list command returns summary objects without html/text/from/subject.
|
|
376
|
+
Use this command to retrieve the full broadcast payload.`,output:' {"id":"...","object":"broadcast","name":"...","segment_id":"...","from":"...","subject":"...","status":"draft|queued|sent","created_at":"...","scheduled_at":null,"sent_at":null}',errorCodes:["auth_error","fetch_error"],examples:["resend broadcasts get d1c2b3a4-5e6f-7a8b-9c0d-e1f2a3b4c5d6","resend broadcasts get d1c2b3a4-5e6f-7a8b-9c0d-e1f2a3b4c5d6 --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,Ne,i);await E({loading:"Fetching broadcast...",sdkCall:n=>n.broadcasts.get(r),onInteractive:n=>{console.log(`Broadcast: ${n.id}`),console.log(` Status: ${jr(n.status)}`),console.log(` Name: ${n.name??"(untitled)"}`),console.log(` From: ${n.from??"\u2014"}`),console.log(` Subject: ${n.subject??"\u2014"}`),console.log(` Segment: ${n.segment_id??"\u2014"}`),n.preview_text&&console.log(` Preview: ${n.preview_text}`),n.topic_id&&console.log(` Topic: ${n.topic_id}`),console.log(` Created: ${n.created_at}`),n.scheduled_at&&console.log(` Scheduled: ${n.scheduled_at}`),n.sent_at&&console.log(` Sent: ${n.sent_at}`)}},i)});var Cl=new c("list").alias("ls").description('List broadcasts \u2014 returns summary objects (use "get <id>" for full details including html/text)').option("--limit <n>","Maximum number of results to return (1-100)","10").option("--after <cursor>","Cursor for forward pagination \u2014 list items after this ID").option("--before <cursor>","Cursor for backward pagination \u2014 list items before this ID").addHelpText("after",d({context:`Note: List results include name, status, created_at, and id only.
|
|
377
|
+
To retrieve full details (html, from, subject), use: resend broadcasts get <id>`,output:' {"object":"list","has_more":false,"data":[{"id":"...","name":"...","status":"draft|queued|sent","created_at":"..."}]}',errorCodes:["auth_error","invalid_limit","list_error"],examples:["resend broadcasts list","resend broadcasts list --limit 5","resend broadcasts list --after d1c2b3a4-5e6f-7a8b-9c0d-e1f2a3b4c5d6 --limit 10","resend broadcasts list --json"]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=I(e.limit,o),r=G(i,e.after,e.before,o);await k({loading:"Fetching broadcasts...",sdkCall:n=>n.broadcasts.list(r),onInteractive:n=>{console.log(el(n.data)),j(n,"broadcasts list",{limit:i,before:e.before,apiKey:o.apiKey,profile:o.profile})}},o)});var xl=new c("open").description("Open a broadcast or the broadcasts list in the Resend dashboard").argument("[id]","Broadcast ID \u2014 omit to open the broadcasts list").addHelpText("after",d({context:`Opens the Resend dashboard in your default browser.
|
|
378
378
|
With an ID: opens that broadcast's page for viewing or editing.
|
|
379
379
|
Without an ID: opens the broadcasts list.`,examples:["resend broadcasts open","resend broadcasts open d1c2b3a4-5e6f-7a8b-9c0d-e1f2a3b4c5d6"]})).action(async(e,t,o)=>{let i=e?fe.broadcast(e):fe.broadcasts,r=o.optsWithGlobals();await Te(i,r)});var wl=["sent","delivered","opened","clicked","bounced","complained","unsubscribed","suppressed"],Ul=new c("recipients").description("List a broadcast's recipients for a given event type").argument("[id]","Broadcast ID").addOption(new M("--type <type>","Event type to filter recipients by").choices(wl)).option("--email <email>","Filter recipients whose email contains this value").addOption(new M("--bounce-type <type>","Filter by bounce classification \u2014 only meaningful when --type is bounced").choices(["permanent","transient","undetermined"])).option("--limit <n>","Maximum number of recipients to return (1-100)","20").option("--after <cursor>","Cursor for forward pagination \u2014 list items after this ID").option("--before <cursor>","Cursor for backward pagination \u2014 list items before this ID").addHelpText("after",d({context:`Non-interactive: --type is required.
|
|
380
380
|
Note: responses are cached for up to 15 minutes, so requesting the same page
|
|
381
381
|
again may return slightly stale data within that window.
|
|
382
|
-
--bounce-type only has an effect when --type is bounced.`,output:' {"object":"list","has_more":false,"data":[{"id":"<cursor>","contact_id":"<id>|null","email":"...","count":3,"clicked_links":[{"url":"...","clicks":2}]}]}',errorCodes:["auth_error","missing_type","invalid_limit","invalid_pagination","list_error"],examples:["resend broadcasts recipients d1c2b3a4-5e6f-7a8b-9c0d-e1f2a3b4c5d6 --type opened","resend broadcasts recipients d1c2b3a4-5e6f-7a8b-9c0d-e1f2a3b4c5d6 --type clicked --limit 50","resend broadcasts recipients d1c2b3a4-5e6f-7a8b-9c0d-e1f2a3b4c5d6 --type bounced --bounce-type permanent","resend broadcasts recipients d1c2b3a4-5e6f-7a8b-9c0d-e1f2a3b4c5d6 --type sent --email @example.com --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,Ne,i),n=await bt(t.type,{message:"Event type",options:wl.map(l=>({value:l,label:l}))},{message:"Missing --type flag.",code:"missing_type"},i),s=
|
|
382
|
+
--bounce-type only has an effect when --type is bounced.`,output:' {"object":"list","has_more":false,"data":[{"id":"<cursor>","contact_id":"<id>|null","email":"...","count":3,"clicked_links":[{"url":"...","clicks":2}]}]}',errorCodes:["auth_error","missing_type","invalid_limit","invalid_pagination","list_error"],examples:["resend broadcasts recipients d1c2b3a4-5e6f-7a8b-9c0d-e1f2a3b4c5d6 --type opened","resend broadcasts recipients d1c2b3a4-5e6f-7a8b-9c0d-e1f2a3b4c5d6 --type clicked --limit 50","resend broadcasts recipients d1c2b3a4-5e6f-7a8b-9c0d-e1f2a3b4c5d6 --type bounced --bounce-type permanent","resend broadcasts recipients d1c2b3a4-5e6f-7a8b-9c0d-e1f2a3b4c5d6 --type sent --email @example.com --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,Ne,i),n=await bt(t.type,{message:"Event type",options:wl.map(l=>({value:l,label:l}))},{message:"Missing --type flag.",code:"missing_type"},i),s=I(t.limit,i),a=G(s,t.after,t.before,i);await k({loading:"Fetching recipients...",sdkCall:l=>l.broadcasts.recipients(r,{type:n,...a,...t.email&&{email:t.email},...t.bounceType&&{bounceType:t.bounceType}}),onInteractive:l=>{console.log(tl(l.data)),j(l,`broadcasts recipients ${r}`,{limit:s,before:t.before,apiKey:i.apiKey,profile:i.profile,extraFlags:[`--type ${n}`,t.email&&`--email ${t.email}`,t.bounceType&&`--bounce-type ${t.bounceType}`].filter(Boolean).join(" ")})}},i)});var vl=new c("send").description("Send a draft broadcast (API-created drafts only \u2014 dashboard broadcasts cannot be sent via API)").argument("[id]","Broadcast ID").option("--scheduled-at <datetime>",'Schedule delivery \u2014 ISO 8601 or natural language e.g. "in 1 hour", "tomorrow at 9am ET"').addHelpText("after",d({context:`Note: Only broadcasts created via the API can be sent via this command.
|
|
383
383
|
Broadcasts created in the Resend dashboard cannot be sent programmatically.
|
|
384
384
|
|
|
385
385
|
Scheduling:
|
|
386
386
|
--scheduled-at accepts ISO 8601 (e.g. 2026-08-05T11:52:01Z) or
|
|
387
|
-
natural language (e.g. "in 1 hour", "tomorrow at 9am ET").`,output:' {"id":"<broadcast-id>"}',errorCodes:["auth_error","send_error"],examples:["resend broadcasts send d1c2b3a4-5e6f-7a8b-9c0d-e1f2a3b4c5d6",'resend broadcasts send d1c2b3a4-5e6f-7a8b-9c0d-e1f2a3b4c5d6 --scheduled-at "in 1 hour"','resend broadcasts send d1c2b3a4-5e6f-7a8b-9c0d-e1f2a3b4c5d6 --scheduled-at "2026-08-05T11:52:01Z" --json']})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,Xa,i);await
|
|
387
|
+
natural language (e.g. "in 1 hour", "tomorrow at 9am ET").`,output:' {"id":"<broadcast-id>"}',errorCodes:["auth_error","send_error"],examples:["resend broadcasts send d1c2b3a4-5e6f-7a8b-9c0d-e1f2a3b4c5d6",'resend broadcasts send d1c2b3a4-5e6f-7a8b-9c0d-e1f2a3b4c5d6 --scheduled-at "in 1 hour"','resend broadcasts send d1c2b3a4-5e6f-7a8b-9c0d-e1f2a3b4c5d6 --scheduled-at "2026-08-05T11:52:01Z" --json']})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,Xa,i);await R({loading:t.scheduledAt?"Scheduling broadcast...":"Sending broadcast...",sdkCall:n=>n.broadcasts.send(r,{...t.scheduledAt&&{scheduledAt:t.scheduledAt}}),errorCode:"send_error",successMsg:t.scheduledAt?"Broadcast scheduled":"Broadcast sent",permission:"sending_access"},i)});var Sl=new c("update").description("Update a draft broadcast \u2014 only drafts can be updated; sent broadcasts are immutable").argument("[id]","Broadcast ID").option("--from <address>","Update sender address").option("--subject <subject>","Update subject").option("--html <html>","Update HTML body (supports {{{FIRST_NAME|fallback}}} variable interpolation)").option("--html-file <path>",'Path to an HTML file to replace the body (use "-" for stdin, supports {{{FIRST_NAME|fallback}}} variable interpolation)').option("--text <text>","Update plain-text body").option("--text-file <path>",'Path to a plain-text file to replace the body (use "-" for stdin)').option("--react-email <path>","Path to a React Email template (.tsx) to bundle, render, and use as HTML body").option("--name <name>","Update internal label").addHelpText("after",d({context:`Note: Only draft broadcasts can be updated.
|
|
388
388
|
If the broadcast is already sent or sending, the API will return an error.
|
|
389
389
|
|
|
390
390
|
Variable interpolation:
|
|
391
391
|
HTML bodies support triple-brace syntax for contact properties.
|
|
392
|
-
Example: {{{FIRST_NAME|Friend}}} \u2014 uses FIRST_NAME or falls back to "Friend".`,output:' {"id":"<broadcast-id>"}',errorCodes:["auth_error","no_changes","file_read_error","invalid_options","stdin_read_error","react_email_build_error","react_email_render_error","update_error"],examples:['resend broadcasts update d1c2b3a4-5e6f-7a8b-9c0d-e1f2a3b4c5d6 --subject "Updated Subject"',"resend broadcasts update d1c2b3a4-5e6f-7a8b-9c0d-e1f2a3b4c5d6 --html-file ./new-email.html",'resend broadcasts update d1c2b3a4-5e6f-7a8b-9c0d-e1f2a3b4c5d6 --name "Q1 Newsletter" --from "onboarding@resend.dev" --json','echo "<p>New content</p>" | resend broadcasts update d1c2b3a4-5e6f-7a8b-9c0d-e1f2a3b4c5d6 --html-file -']})).action(async(e,t,o)=>{let i=o.optsWithGlobals();t.from==null&&t.subject==null&&t.html==null&&t.htmlFile==null&&t.text==null&&t.textFile==null&&t.reactEmail==null&&t.name==null&&h({message:"Provide at least one option to update: --from, --subject, --html, --html-file, --text, --text-file, --react-email, or --name.",code:"no_changes"},{json:i.json}),t.htmlFile==="-"&&t.textFile==="-"&&h({message:"Cannot read both --html-file and --text-file from stdin. Pipe to one and pass the other as a file path.",code:"invalid_options"},{json:i.json}),t.reactEmail!=null&&(t.html!=null||t.htmlFile!=null)&&h({message:"Cannot use --react-email with --html or --html-file",code:"invalid_options"},{json:i.json}),t.html!=null&&t.htmlFile!=null&&h({message:"--html and --html-file are mutually exclusive.",code:"invalid_options"},{json:i.json}),t.text!=null&&t.textFile!=null&&h({message:"--text and --text-file are mutually exclusive.",code:"invalid_options"},{json:i.json});let r=await g(e,Ne,i),n=t.reactEmail!=null?await Me(t.reactEmail,i):t.htmlFile!=null?ie(t.htmlFile,i):t.html,s=t.textFile!=null?ie(t.textFile,i):t.text;await
|
|
392
|
+
Example: {{{FIRST_NAME|Friend}}} \u2014 uses FIRST_NAME or falls back to "Friend".`,output:' {"id":"<broadcast-id>"}',errorCodes:["auth_error","no_changes","file_read_error","invalid_options","stdin_read_error","react_email_build_error","react_email_render_error","update_error"],examples:['resend broadcasts update d1c2b3a4-5e6f-7a8b-9c0d-e1f2a3b4c5d6 --subject "Updated Subject"',"resend broadcasts update d1c2b3a4-5e6f-7a8b-9c0d-e1f2a3b4c5d6 --html-file ./new-email.html",'resend broadcasts update d1c2b3a4-5e6f-7a8b-9c0d-e1f2a3b4c5d6 --name "Q1 Newsletter" --from "onboarding@resend.dev" --json','echo "<p>New content</p>" | resend broadcasts update d1c2b3a4-5e6f-7a8b-9c0d-e1f2a3b4c5d6 --html-file -']})).action(async(e,t,o)=>{let i=o.optsWithGlobals();t.from==null&&t.subject==null&&t.html==null&&t.htmlFile==null&&t.text==null&&t.textFile==null&&t.reactEmail==null&&t.name==null&&h({message:"Provide at least one option to update: --from, --subject, --html, --html-file, --text, --text-file, --react-email, or --name.",code:"no_changes"},{json:i.json}),t.htmlFile==="-"&&t.textFile==="-"&&h({message:"Cannot read both --html-file and --text-file from stdin. Pipe to one and pass the other as a file path.",code:"invalid_options"},{json:i.json}),t.reactEmail!=null&&(t.html!=null||t.htmlFile!=null)&&h({message:"Cannot use --react-email with --html or --html-file",code:"invalid_options"},{json:i.json}),t.html!=null&&t.htmlFile!=null&&h({message:"--html and --html-file are mutually exclusive.",code:"invalid_options"},{json:i.json}),t.text!=null&&t.textFile!=null&&h({message:"--text and --text-file are mutually exclusive.",code:"invalid_options"},{json:i.json});let r=await g(e,Ne,i),n=t.reactEmail!=null?await Me(t.reactEmail,i):t.htmlFile!=null?ie(t.htmlFile,i):t.html,s=t.textFile!=null?ie(t.textFile,i):t.text;await R({loading:"Updating broadcast...",sdkCall:a=>a.broadcasts.update(r,{...t.from!=null&&{from:t.from},...t.subject!=null&&{subject:t.subject},...n!=null&&{html:n},...s!=null&&{text:s},...t.name!=null&&{name:t.name}}),errorCode:"update_error",successMsg:`Broadcast updated: ${r}`},i)});var Kl=new c("broadcasts").description("Manage broadcasts").addHelpText("after",d({context:`Lifecycle:
|
|
393
393
|
Broadcasts follow a draft \u2192 send flow:
|
|
394
394
|
1. create \u2014 creates a draft (or sends immediately with --send)
|
|
395
395
|
2. send \u2014 sends an API-created draft (dashboard broadcasts cannot be sent via API)
|
|
@@ -403,7 +403,7 @@ Template variables:
|
|
|
403
403
|
Example: {{{FIRST_NAME|Friend}}} \u2014 uses FIRST_NAME or falls back to "Friend".
|
|
404
404
|
|
|
405
405
|
Scheduling:
|
|
406
|
-
--scheduled-at accepts ISO 8601 or natural language e.g. "in 1 hour", "tomorrow at 9am ET".`,examples:["resend broadcasts list",'resend broadcasts create --from onboarding@resend.dev --subject "Launch" --segment-id 7b1e0a3d-4c5f-4e8a-9b2d-1a3c5e7f9b2d --html "<p>Hi {{{FIRST_NAME|there}}}</p>"',"resend broadcasts send d1c2b3a4-5e6f-7a8b-9c0d-e1f2a3b4c5d6",'resend broadcasts send d1c2b3a4-5e6f-7a8b-9c0d-e1f2a3b4c5d6 --scheduled-at "in 1 hour"',"resend broadcasts get d1c2b3a4-5e6f-7a8b-9c0d-e1f2a3b4c5d6","resend broadcasts recipients d1c2b3a4-5e6f-7a8b-9c0d-e1f2a3b4c5d6 --type opened",'resend broadcasts update d1c2b3a4-5e6f-7a8b-9c0d-e1f2a3b4c5d6 --subject "Updated Subject"',"resend broadcasts cancel d1c2b3a4-5e6f-7a8b-9c0d-e1f2a3b4c5d6","resend broadcasts duplicate d1c2b3a4-5e6f-7a8b-9c0d-e1f2a3b4c5d6","resend broadcasts delete d1c2b3a4-5e6f-7a8b-9c0d-e1f2a3b4c5d6 --yes","resend broadcasts open","resend broadcasts open d1c2b3a4-5e6f-7a8b-9c0d-e1f2a3b4c5d6","resend broadcasts clicked-links d1c2b3a4-5e6f-7a8b-9c0d-e1f2a3b4c5d6"]})).addCommand(gl).addCommand(xl).addCommand(vl).addCommand(yl).addCommand(Cl,{isDefault:!0}).addCommand(Ul).addCommand(Sl).addCommand(il).addCommand(bl).addCommand(Al).addCommand(rl);var Tl=require("node:fs"),xo=require("node:path");X();var kl=["Afghanistan","Albania","Algeria","American Samoa","Andorra","Angola","Anguilla","Antarctica","Antigua and Barbuda","Argentina","Armenia","Aruba","Australia","Austria","Azerbaijan","Bahamas","Bahrain","Bangladesh","Barbados","Belarus","Belgium","Belize","Benin","Bermuda","Bhutan","Bolivia","Bosnia and Herzegovina","Botswana","Brazil","British Indian Ocean Territory","British Virgin Islands","Brunei","Bulgaria","Burkina Faso","Burundi","Cambodia","Cameroon","Canada","Cape Verde","Cayman Islands","Central African Republic","Chad","Chile","China","Christmas Island","Cocos Islands","Colombia","Comoros","Cook Islands","Costa Rica","Croatia","Cuba","Cura\xE7ao","Cyprus","Czech Republic","Democratic Republic of the Congo","Denmark","Djibouti","Dominica","Dominican Republic","East Timor","Ecuador","Egypt","El Salvador","Equatorial Guinea","Eritrea","Estonia","Eswatini","Ethiopia","Falkland Islands","Faroe Islands","Fiji","Finland","France","French Guiana","French Polynesia","Gabon","Gambia","Georgia","Germany","Ghana","Gibraltar","Greece","Greenland","Grenada","Guadeloupe","Guam","Guatemala","Guernsey","Guinea","Guinea-Bissau","Guyana","Haiti","Honduras","Hong Kong","Hungary","Iceland","India","Indonesia","Iran","Iraq","Ireland","Isle of Man","Israel","Italy","Ivory Coast","Jamaica","Japan","Jersey","Jordan","Kazakhstan","Kenya","Kiribati","Kosovo","Kuwait","Kyrgyzstan","Laos","Latvia","Lebanon","Lesotho","Liberia","Libya","Liechtenstein","Lithuania","Luxembourg","Macau","Madagascar","Malawi","Malaysia","Maldives","Mali","Malta","Marshall Islands","Martinique","Mauritania","Mauritius","Mayotte","Mexico","Micronesia","Moldova","Monaco","Mongolia","Montenegro","Montserrat","Morocco","Mozambique","Myanmar","Namibia","Nauru","Nepal","Netherlands","New Caledonia","New Zealand","Nicaragua","Niger","Nigeria","Niue","Norfolk Island","North Korea","North Macedonia","Northern Mariana Islands","Norway","Oman","Pakistan","Palau","Palestine","Panama","Papua New Guinea","Paraguay","Peru","Philippines","Pitcairn","Poland","Portugal","Puerto Rico","Qatar","Republic of the Congo","R\xE9union","Romania","Russia","Rwanda","Saint Barth\xE9lemy","Saint Helena","Saint Kitts and Nevis","Saint Lucia","Saint Martin","Saint Pierre and Miquelon","Saint Vincent and the Grenadines","Samoa","San Marino","S\xE3o Tom\xE9 and Pr\xEDncipe","Saudi Arabia","Senegal","Serbia","Seychelles","Sierra Leone","Singapore","Sint Maarten","Slovakia","Slovenia","Solomon Islands","Somalia","South Africa","South Korea","South Sudan","Spain","Sri Lanka","Sudan","Suriname","Svalbard and Jan Mayen","Sweden","Switzerland","Syria","Taiwan","Tajikistan","Tanzania","Thailand","Togo","Tokelau","Tonga","Trinidad and Tobago","Tunisia","Turkey","Turkmenistan","Turks and Caicos Islands","Tuvalu","U.S. Virgin Islands","Uganda","Ukraine","United Arab Emirates","United Kingdom","United States","Uruguay","Uzbekistan","Vanuatu","Vatican City","Venezuela","Vietnam","Wallis and Futuna","Western Sahara","Yemen","Zambia","Zimbabwe"];var
|
|
406
|
+
--scheduled-at accepts ISO 8601 or natural language e.g. "in 1 hour", "tomorrow at 9am ET".`,examples:["resend broadcasts list",'resend broadcasts create --from onboarding@resend.dev --subject "Launch" --segment-id 7b1e0a3d-4c5f-4e8a-9b2d-1a3c5e7f9b2d --html "<p>Hi {{{FIRST_NAME|there}}}</p>"',"resend broadcasts send d1c2b3a4-5e6f-7a8b-9c0d-e1f2a3b4c5d6",'resend broadcasts send d1c2b3a4-5e6f-7a8b-9c0d-e1f2a3b4c5d6 --scheduled-at "in 1 hour"',"resend broadcasts get d1c2b3a4-5e6f-7a8b-9c0d-e1f2a3b4c5d6","resend broadcasts recipients d1c2b3a4-5e6f-7a8b-9c0d-e1f2a3b4c5d6 --type opened",'resend broadcasts update d1c2b3a4-5e6f-7a8b-9c0d-e1f2a3b4c5d6 --subject "Updated Subject"',"resend broadcasts cancel d1c2b3a4-5e6f-7a8b-9c0d-e1f2a3b4c5d6","resend broadcasts duplicate d1c2b3a4-5e6f-7a8b-9c0d-e1f2a3b4c5d6","resend broadcasts delete d1c2b3a4-5e6f-7a8b-9c0d-e1f2a3b4c5d6 --yes","resend broadcasts open","resend broadcasts open d1c2b3a4-5e6f-7a8b-9c0d-e1f2a3b4c5d6","resend broadcasts clicked-links d1c2b3a4-5e6f-7a8b-9c0d-e1f2a3b4c5d6"]})).addCommand(gl).addCommand(xl).addCommand(vl).addCommand(yl).addCommand(Cl,{isDefault:!0}).addCommand(Ul).addCommand(Sl).addCommand(il).addCommand(bl).addCommand(Al).addCommand(rl);var Tl=require("node:fs"),xo=require("node:path");X();var kl=["Afghanistan","Albania","Algeria","American Samoa","Andorra","Angola","Anguilla","Antarctica","Antigua and Barbuda","Argentina","Armenia","Aruba","Australia","Austria","Azerbaijan","Bahamas","Bahrain","Bangladesh","Barbados","Belarus","Belgium","Belize","Benin","Bermuda","Bhutan","Bolivia","Bosnia and Herzegovina","Botswana","Brazil","British Indian Ocean Territory","British Virgin Islands","Brunei","Bulgaria","Burkina Faso","Burundi","Cambodia","Cameroon","Canada","Cape Verde","Cayman Islands","Central African Republic","Chad","Chile","China","Christmas Island","Cocos Islands","Colombia","Comoros","Cook Islands","Costa Rica","Croatia","Cuba","Cura\xE7ao","Cyprus","Czech Republic","Democratic Republic of the Congo","Denmark","Djibouti","Dominica","Dominican Republic","East Timor","Ecuador","Egypt","El Salvador","Equatorial Guinea","Eritrea","Estonia","Eswatini","Ethiopia","Falkland Islands","Faroe Islands","Fiji","Finland","France","French Guiana","French Polynesia","Gabon","Gambia","Georgia","Germany","Ghana","Gibraltar","Greece","Greenland","Grenada","Guadeloupe","Guam","Guatemala","Guernsey","Guinea","Guinea-Bissau","Guyana","Haiti","Honduras","Hong Kong","Hungary","Iceland","India","Indonesia","Iran","Iraq","Ireland","Isle of Man","Israel","Italy","Ivory Coast","Jamaica","Japan","Jersey","Jordan","Kazakhstan","Kenya","Kiribati","Kosovo","Kuwait","Kyrgyzstan","Laos","Latvia","Lebanon","Lesotho","Liberia","Libya","Liechtenstein","Lithuania","Luxembourg","Macau","Madagascar","Malawi","Malaysia","Maldives","Mali","Malta","Marshall Islands","Martinique","Mauritania","Mauritius","Mayotte","Mexico","Micronesia","Moldova","Monaco","Mongolia","Montenegro","Montserrat","Morocco","Mozambique","Myanmar","Namibia","Nauru","Nepal","Netherlands","New Caledonia","New Zealand","Nicaragua","Niger","Nigeria","Niue","Norfolk Island","North Korea","North Macedonia","Northern Mariana Islands","Norway","Oman","Pakistan","Palau","Palestine","Panama","Papua New Guinea","Paraguay","Peru","Philippines","Pitcairn","Poland","Portugal","Puerto Rico","Qatar","Republic of the Congo","R\xE9union","Romania","Russia","Rwanda","Saint Barth\xE9lemy","Saint Helena","Saint Kitts and Nevis","Saint Lucia","Saint Martin","Saint Pierre and Miquelon","Saint Vincent and the Grenadines","Samoa","San Marino","S\xE3o Tom\xE9 and Pr\xEDncipe","Saudi Arabia","Senegal","Serbia","Seychelles","Sierra Leone","Singapore","Sint Maarten","Slovakia","Slovenia","Solomon Islands","Somalia","South Africa","South Korea","South Sudan","Spain","Sri Lanka","Sudan","Suriname","Svalbard and Jan Mayen","Sweden","Switzerland","Syria","Taiwan","Tajikistan","Tanzania","Thailand","Togo","Tokelau","Tonga","Trinidad and Tobago","Tunisia","Turkey","Turkmenistan","Turks and Caicos Islands","Tuvalu","U.S. Virgin Islands","Uganda","Ukraine","United Arab Emirates","United Kingdom","United States","Uruguay","Uzbekistan","Vanuatu","Vatican City","Venezuela","Vietnam","Wallis and Futuna","Western Sahara","Yemen","Zambia","Zimbabwe"];var _l={resource:"job posting",resourcePlural:"job postings",permission:"sending_access",fetchItems:async e=>{let{data:t,error:o}=await e.get("/careers");return{data:t?{data:t.data,has_more:!1}:null,error:o}},display:e=>({label:e.title,hint:e.location??e.id})};function Fl(e){let t=e.map(o=>[o.title,o.location??"",o.department??"",o.id]);return _(["Title","Location","Department","ID"],t,"(no open positions)")}var Gh=10*1024*1024,Hh={".pdf":"application/pdf",".doc":"application/msword",".docx":"application/vnd.openxmlformats-officedocument.wordprocessingml.document",".txt":"text/plain"},Jt="__skip__",Ol=new c("apply").description("Apply to an open position at Resend").argument("[id]","Job posting ID (from `resend careers list`)").option("--name <name>","Your full name").option("--email <email>","Your email address").option("--resume <path>","Path to your resume file (PDF, max 10MB)").option("--field <path=value...>","Answer a job-specific question by field path (repeatable: --field <path>=<answer>). Field paths are shown on the job posting page at resend.com/careers").option("--yes","Skip the confirmation prompt in interactive mode").addHelpText("after",d({context:`Interactive: run without flags to pick a position and answer each application
|
|
407
407
|
question in a guided form. Flags pre-fill their matching questions.
|
|
408
408
|
|
|
409
409
|
Non-interactive: --name, --email, and --resume are required, plus the job posting
|
|
@@ -411,15 +411,15 @@ ID argument. Answer job-specific questions with --field <path>=<value>, where
|
|
|
411
411
|
<path> is shown on the job posting page at resend.com/careers (custom questions
|
|
412
412
|
use UUID paths).
|
|
413
413
|
|
|
414
|
-
The resume is uploaded as multipart form data (max 10MB, PDF recommended).`,output:' {"success":true}',errorCodes:["auth_error","missing_id","list_error","missing_name","missing_email","missing_resume","invalid_field","file_read_error","invalid_resume","fetch_error","apply_error"],examples:["resend careers apply",`resend careers apply 053bde8f-294e-4cce-9d62-2301282120a2 --name "Ada Lovelace" --email ada@example.com --resume ./resume.pdf --field 'd5cef330-d154-4f3a-8c5a-092986c61fe3=I love email infrastructure.'`]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=new Map;for(let[A,b]of Qh(t.field,i))r.set(A,b);t.name!==void 0&&r.set("name",t.name),t.email!==void 0&&r.set("email",t.email);let n=w()&&!i.json,s=await J(e,
|
|
415
|
-
`),"Application summary");let n=await Ze({message:"Submit this application?"});(
|
|
416
|
-
Apply with: resend careers apply <id>`)}},o)});var
|
|
417
|
-
`)}function Pl(e){let t=Uo(e,"",[]),o=[],i=e.name;o.push(`#compdef ${i}`),o.push(`# zsh completion for ${i}`),o.push(`# Generated by: ${i} completion zsh`),o.push(""),o.push(`_${i}() {`),o.push(" local cur prev cmd_path"),o.push(' cur="${words[$CURRENT]}"'),o.push(' prev="${words[$CURRENT-1]}"'),o.push("");let n=$r(e).join("|");o.push(' cmd_path=""'),o.push(" for ((i=2; i < CURRENT; i++)); do"),o.push(' case "${words[$i]}" in'),n&&o.push(` ${n}) ((i++)) ;;`),o.push(" -*) ;;"),o.push(' *) cmd_path="${cmd_path:+$cmd_path }${words[$i]}" ;;'),o.push(" esac"),o.push(" done"),o.push(""),o.push(' case "$cmd_path" in');for(let s of t){let a=s.path===e.name?"":s.path.replace(`${e.name} `,""),l=s.options.filter(f=>f.choices&&f.long),u=s.options.filter(f=>f.long),m=s.subcommands.length>0;o.push(` "${a}")`);let p=s.options.filter(f=>f.takesValue&&!f.choices);if(l.length>0||p.length>0){o.push(' case "$prev" in');for(let f of l)o.push(` ${f.long}) compadd -- ${f.choices?.join(" ")}; return ;;`);if(p.length>0){let f=p.flatMap(y=>[y.long,y.short].filter(Boolean)).join("|");o.push(` ${f}) _files; return ;;`)}o.push(" esac")}if(u.length>0){o.push(' if [[ "$cur" == -* ]]; then');let f=u.map(y=>`"${y.long}:${
|
|
414
|
+
The resume is uploaded as multipart form data (max 10MB, PDF recommended).`,output:' {"success":true}',errorCodes:["auth_error","missing_id","list_error","missing_name","missing_email","missing_resume","invalid_field","file_read_error","invalid_resume","fetch_error","apply_error"],examples:["resend careers apply",`resend careers apply 053bde8f-294e-4cce-9d62-2301282120a2 --name "Ada Lovelace" --email ada@example.com --resume ./resume.pdf --field 'd5cef330-d154-4f3a-8c5a-092986c61fe3=I love email infrastructure.'`]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=new Map;for(let[A,b]of Qh(t.field,i))r.set(A,b);t.name!==void 0&&r.set("name",t.name),t.email!==void 0&&r.set("email",t.email);let n=w()&&!i.json,s=await J(e,_l,i),a=s.id,l=t.resume,u=s.label;if(n){let A=await ee(i,{permission:"sending_access"}),b=await ce("Fetching the application form...",()=>A.get(`/careers/${a}`),"fetch_error",i,{retryTransient:!0});u=b.title,Ho(b.location?`Apply to ${b.title} - ${b.location}`:`Apply to ${b.title}`);for(let x of b.fields){if(x.path==="resume"){l=l??await Dl(x.title);continue}if(x.type==="File"){te.warn(`Skipping "${x.title}": only the resume file can be uploaded here. Apply on the careers page to include it.`);continue}if(r.has(x.path))continue;let U=await Nh(x);U!==void 0&&r.set(x.path,U)}r.has("name")||r.set("name",await Rl("Name")),r.has("email")||r.set("email",await Rl("Email")),l=l??await Dl("Resume"),t.yes||await Mh(b,r,l)}else r.get("name")||h({message:"Missing --name flag.",code:"missing_name"},{json:i.json}),r.get("email")||h({message:"Missing --email flag.",code:"missing_email"},{json:i.json}),l||h({message:"Missing --resume flag.",code:"missing_resume"},{json:i.json});let m=Lh(l,i),p=new FormData;for(let[A,b]of r)p.append(A,b);p.append("resume",m.blob,m.filename);let f=await ee(i,{permission:"sending_access"}),y=await ce("Submitting application...",()=>f.fetchRequest(`/careers/${a}`,{method:"POST",headers:{Authorization:`Bearer ${f.key}`,"User-Agent":process.env.RESEND_USER_AGENT??""},body:p}),"apply_error",i);!i.json&&w()?Bt(`Application submitted for ${u}. Thanks for applying to Resend!`):N(y,{json:i.json})});function Qh(e,t){let o=new Map;for(let i of e??[]){let r=i.indexOf("=");r<=0&&h({message:`Invalid --field value "${i}". Use --field <path>=<value>.`,code:"invalid_field"},{json:t.json}),o.set(i.slice(0,r),i.slice(r+1))}return o}async function Nh(e){let t=e.required?e.title:`${e.title} (optional)`;if(e.selectable_values&&e.selectable_values.length>0){let r=[...e.required?[]:[{value:Jt,label:"Skip"}],...e.selectable_values.map(s=>({value:s.value,label:s.label}))],n=await ne({message:t,options:r});return F(n)&&D("Application cancelled."),n===Jt?void 0:n}if(e.type==="Boolean"){let r=[...e.required?[]:[{value:Jt,label:"Skip"}],{value:"true",label:"Yes"},{value:"false",label:"No"}],n=await ne({message:t,options:r});return F(n)&&D("Application cancelled."),n===Jt?void 0:n}if(e.type==="Location"){let r=[...e.required?[]:[{value:Jt,label:"Skip"}],...kl.map(s=>({value:s,label:s}))],n=await qn({message:t,options:r,maxItems:8,placeholder:"Start typing a country..."});return F(n)&&D("Application cancelled."),n===Jt?void 0:n}let o=await Z({message:t,...e.description?{placeholder:e.description}:{},validate:r=>{let n=r?.trim()??"";if(e.required&&n.length===0)return`${e.title} is required`;if(n&&e.type==="Email"&&!n.includes("@"))return"Enter a valid email address";if(n&&e.type==="Number"&&Number.isNaN(Number(n)))return"Enter a number"}});F(o)&&D("Application cancelled.");let i=o?.trim()??"";return i.length>0?i:void 0}async function Rl(e){let t=await Z({message:e,validate:o=>!o||o.trim().length===0?`${e} is required`:void 0});return F(t)&&D("Application cancelled."),t.trim()}async function Dl(e){let t=await Z({message:`${e} (path to a local file, PDF recommended)`,placeholder:"./resume.pdf",validate:o=>!o||o.trim().length===0?"A resume file is required":void 0});return F(t)&&D("Application cancelled."),t.trim()}async function Mh(e,t,o){let i=new Map(e.fields.map(s=>[s.path,s])),r=[...t.entries()].map(([s,a])=>{let l=i.get(s),u=l?.title??s,m=l?.type==="Boolean"?a==="true"?"Yes":a==="false"?"No":a:a;return`${u}: ${qh(m,80)}`});r.push(`Resume: ${(0,xo.basename)(o)}`),Vn(r.join(`
|
|
415
|
+
`),"Application summary");let n=await Ze({message:"Submit this application?"});(F(n)||!n)&&D("Application not submitted.")}function qh(e,t){let o=e.replace(/\s+/g," ").trim();return o.length>t?`${o.slice(0,t-3)}...`:o}function Lh(e,t){let o;try{o=(0,Tl.readFileSync)(e)}catch{h({message:`Failed to read file: ${e}`,code:"file_read_error"},{json:t.json})}o.length>Gh&&h({message:"Resume file is too large. Maximum size is 10MB.",code:"invalid_resume"},{json:t.json});let i=Hh[(0,xo.extname)(e).toLowerCase()]??"application/octet-stream";return{blob:new Blob([new Uint8Array(o)],{type:i}),filename:(0,xo.basename)(e)}}var El=new c("list").description("List open positions at Resend").addHelpText("after",d({context:"Lists open positions, fetched live from our applicant tracking system.",output:' {"object":"list","data":[{"id":"<id>","title":"<title>","department":"<department>","team":"<team>","location":"<location>","employment_type":"<type>","workplace_type":"<type>","published_at":"<date>"}]}',errorCodes:["auth_error","list_error"],examples:["resend careers","resend careers list --json","resend careers apply <id>"]})).action(async(e,t)=>{let o=t.optsWithGlobals();await k({loading:"Fetching open positions...",sdkCall:i=>i.get("/careers"),permission:"sending_access",onInteractive:i=>{console.log(Fl(i.data)),i.data.length>0&&console.log(`
|
|
416
|
+
Apply with: resend careers apply <id>`)}},o)});var Bl=new c("careers").description("Browse open positions at Resend and apply from your terminal").addHelpText("after",d({context:"Flow: `resend careers` lists open positions, and `resend careers apply`\nwalks you through the application (or takes flags for scripted submissions).\n\nAny Resend API key works \u2014 applications are not tied to your team.",examples:["resend careers","resend careers apply"]})).addCommand(Ol).addCommand(El,{isDefault:!0});function wo(e){let t=[];for(let i of e.commands)i._hidden||t.push(wo(i));let o=[];for(let i of e.options)i.hidden||o.push({long:i.long,short:i.short,description:i.description,takesValue:i.required||i.optional,choices:i.argChoices});return{name:e.name(),aliases:e.aliases(),description:e.description(),subcommands:t,options:o}}function Uo(e,t,o){let i=t?`${t} ${e.name}`:e.name,r=[],n=[];for(let a of e.subcommands){n.push({name:a.name,description:a.description});for(let l of a.aliases)n.push({name:l,description:a.description})}let s=[...e.options,...o];r.push({path:i,subcommands:n,options:s});for(let a of e.subcommands)r.push(...Uo(a,i,o));return r}function $r(e){let t=new Set;function o(i){for(let r of i.options)r.takesValue&&(r.long&&t.add(r.long),r.short&&t.add(r.short));for(let r of i.subcommands)o(r)}return o(e),[...t]}function jl(e){let t=Uo(e,"",[]),o=[],i=e.name;o.push(`# bash completion for ${i}`),o.push(`# Generated by: ${i} completion bash`),o.push(""),o.push(`_${i}_completions() {`),o.push(" local cur prev words cword"),o.push(" if type _init_completion &>/dev/null; then _init_completion || return; else"),o.push(' cur="${COMP_WORDS[COMP_CWORD]}"'),o.push(' prev="${COMP_WORDS[COMP_CWORD-1]}"'),o.push(' words=("${COMP_WORDS[@]}")'),o.push(" cword=$COMP_CWORD"),o.push(" fi"),o.push("");let n=$r(e).join("|");o.push(' local cmd_path=""'),o.push(" local i=1"),o.push(" while [ $i -lt $cword ]; do"),o.push(' case "${words[$i]}" in'),n&&o.push(` ${n}) i=$((i + 1)) ;;`),o.push(" -*) ;;"),o.push(' *) cmd_path="${cmd_path:+$cmd_path }${words[$i]}" ;;'),o.push(" esac"),o.push(" i=$((i + 1))"),o.push(" done"),o.push(""),o.push(' case "$cmd_path" in');for(let s of t){let a=s.path===e.name?"":s.path.replace(`${e.name} `,""),l=s.options.filter(b=>b.choices&&b.long),u=s.options.map(b=>b.long).filter(Boolean).join(" "),m=s.subcommands.map(b=>b.name).join(" "),p=l.length>0,f=u.length>0,y=m.length>0;if(!p&&!f&&!y)continue;o.push(` "${a}")`);let A=s.options.filter(b=>b.takesValue&&!b.choices);if(p||A.length>0){o.push(' case "$prev" in');for(let b of l)o.push(` ${b.long}) COMPREPLY=($(compgen -W "${b.choices?.join(" ")}" -- "$cur")); return ;;`);if(A.length>0){let b=A.flatMap(x=>[x.long,x.short].filter(Boolean)).join("|");o.push(` ${b}) return ;;`)}o.push(" esac")}f&&(o.push(' if [[ "$cur" == -* ]]; then'),o.push(` COMPREPLY=($(compgen -W "${u}" -- "$cur")); return`),o.push(" fi")),y&&o.push(` COMPREPLY=($(compgen -W "${m}" -- "$cur"))`),o.push(" ;;")}return o.push(" esac"),o.push("}"),o.push(""),o.push(`complete -o default -F _${i}_completions ${i}`),o.join(`
|
|
417
|
+
`)}function Pl(e){let t=Uo(e,"",[]),o=[],i=e.name;o.push(`#compdef ${i}`),o.push(`# zsh completion for ${i}`),o.push(`# Generated by: ${i} completion zsh`),o.push(""),o.push(`_${i}() {`),o.push(" local cur prev cmd_path"),o.push(' cur="${words[$CURRENT]}"'),o.push(' prev="${words[$CURRENT-1]}"'),o.push("");let n=$r(e).join("|");o.push(' cmd_path=""'),o.push(" for ((i=2; i < CURRENT; i++)); do"),o.push(' case "${words[$i]}" in'),n&&o.push(` ${n}) ((i++)) ;;`),o.push(" -*) ;;"),o.push(' *) cmd_path="${cmd_path:+$cmd_path }${words[$i]}" ;;'),o.push(" esac"),o.push(" done"),o.push(""),o.push(' case "$cmd_path" in');for(let s of t){let a=s.path===e.name?"":s.path.replace(`${e.name} `,""),l=s.options.filter(f=>f.choices&&f.long),u=s.options.filter(f=>f.long),m=s.subcommands.length>0;o.push(` "${a}")`);let p=s.options.filter(f=>f.takesValue&&!f.choices);if(l.length>0||p.length>0){o.push(' case "$prev" in');for(let f of l)o.push(` ${f.long}) compadd -- ${f.choices?.join(" ")}; return ;;`);if(p.length>0){let f=p.flatMap(y=>[y.long,y.short].filter(Boolean)).join("|");o.push(` ${f}) _files; return ;;`)}o.push(" esac")}if(u.length>0){o.push(' if [[ "$cur" == -* ]]; then');let f=u.map(y=>`"${y.long}:${Il(y.description)}"`).join(" ");o.push(` local -a opts=(${f}); _describe 'option' opts; return`),o.push(" fi")}if(m){let f=s.subcommands.map(y=>`"${y.name}:${Il(y.description)}"`).join(" ");o.push(` local -a cmds=(${f}); _describe 'command' cmds`)}else o.push(" _files");o.push(" ;;")}return o.push(" esac"),o.push("}"),o.push(""),o.push(`compdef _${i} ${i}`),o.join(`
|
|
418
418
|
`)}function $l(e){let t=e.name,o=Uo(e,"",[]),i=[];i.push(`# fish completion for ${t}`),i.push(`# Generated by: ${t} completion fish`),i.push("");let r=o[0];for(let n of r.subcommands)i.push(`complete -c ${t} -n "__fish_use_subcommand" -a "${n.name}" -d "${Ai(n.description)}"`);for(let n of e.options)if(n.long){let s=n.long.replace("--",""),a=`complete -c ${t} -l "${s}"`;n.short&&(a+=` -s "${n.short.replace("-","")}"`),n.takesValue&&(a+=" -r"),n.choices&&(a+=` -a "${n.choices.join(" ")}"`),a+=` -d "${Ai(n.description)}"`,i.push(a)}for(let n of o.slice(1)){let s=n.path.split(" ").slice(1),l=`__fish_seen_subcommand_from ${s[s.length-1]}`;for(let u of n.subcommands)i.push(`complete -c ${t} -n "${l}" -a "${u.name}" -d "${Ai(u.description)}"`);for(let u of n.options)if(u.long){let m=u.long.replace("--",""),p=`complete -c ${t} -n "${l}" -l "${m}"`;u.short&&(p+=` -s "${u.short.replace("-","")}"`),u.takesValue&&(p+=" -r"),u.choices&&(p+=` -a "${u.choices.join(" ")}"`),p+=` -d "${Ai(u.description)}"`,i.push(p)}}return i.join(`
|
|
419
|
-
`)}function
|
|
419
|
+
`)}function Il(e){return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/:/g,"\\:")}function Ai(e){return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}function Gl(e){let t=e.name,o=Uo(e,"",[]),i=[];i.push(`# PowerShell completion for ${t}`),i.push(`# Generated by: ${t} completion powershell`),i.push(""),i.push(`Register-ArgumentCompleter -Native -CommandName ${t} -ScriptBlock {`),i.push(" param($wordToComplete, $commandAst, $cursorPosition)"),i.push(""),i.push(' $words = $commandAst.ToString().Substring(0, $cursorPosition) -split "\\s+"');let n=$r(e).map(s=>`"${s}"`).join(", ");i.push(" $cmdPath = @()"),i.push(` $valueFlags = @(${n})`),i.push(" for ($i = 1; $i -lt $words.Count - 1; $i++) {"),i.push(" if ($valueFlags -contains $words[$i]) { $i++; continue }"),i.push(' if ($words[$i] -notlike "-*") { $cmdPath += $words[$i] }'),i.push(" }"),i.push(' $joined = $cmdPath -join " "'),i.push(" $cur = $words[-1]"),i.push(' if ($words.Count -eq 1) { $cur = "" }'),i.push(""),i.push(' $prev = if ($words.Count -ge 2) { $words[-2] } else { "" }'),i.push(""),i.push(" switch ($joined) {");for(let s of o){let a=s.path===e.name?"":s.path.replace(`${e.name} `,""),l=s.options.filter(b=>b.choices&&b.long),u=s.options.map(b=>b.long).filter(Boolean).map(b=>`"${b}"`).join(", "),m=s.subcommands.map(b=>`"${b.name}"`).join(", "),p=l.length>0,f=u.length>0,y=m.length>0;if(!p&&!f&&!y)continue;i.push(` "${a}" {`);let A=s.options.filter(b=>b.takesValue&&!b.choices);if(p||A.length>0){i.push(" switch ($prev) {");for(let b of l){let x=b.choices?.map(U=>`"${U}"`).join(", ");i.push(` "${b.long}" { @(${x}) | Where-Object { $_ -like "$cur*" } | ForEach-Object { [System.Management.Automation.CompletionResult]::new($_) }; return }`)}if(A.length>0){let b=A.flatMap(x=>[x.long,x.short].filter(Boolean)).map(x=>`"${x}"`).join(", ");i.push(` { $_ -in @(${b}) } { return }`)}i.push(" }")}f&&(i.push(' if ($cur -like "-*") {'),i.push(` @(${u}) | Where-Object { $_ -like "$cur*" } | ForEach-Object { [System.Management.Automation.CompletionResult]::new($_) }; return`),i.push(" }")),y&&i.push(` @(${m}) | Where-Object { $_ -like "$cur*" } | ForEach-Object { [System.Management.Automation.CompletionResult]::new($_) }`),i.push(" }")}return i.push(" }"),i.push("}"),i.join(`
|
|
420
420
|
`)}var Hl=new c("commands").description("Print the full command tree as JSON (for agents and tooling)").addHelpText("after",d({context:`Outputs every subcommand, option, and description from the CLI definition.
|
|
421
421
|
In machine mode (piped, CI, or --json), the tree is JSON you can feed to agents or scripts.`,examples:["resend commands","resend commands --json",'resend commands | jq ".subcommands[].name"']})).action((e,t)=>{let o=t.parent;if(!o)throw new Error("commands must be registered on the root program");let i=t.optsWithGlobals(),r=wo(o);N(r,{json:i.json})});var he=require("node:fs"),Ct=require("node:os"),$e=require("node:path");X();var Ml=["bash","zsh","fish","powershell"],bi="# resend shell completion";function Wh(){let e=process.env.SHELL;if(e){let t=(0,$e.basename)(e);if(t==="bash")return"bash";if(t==="zsh")return"zsh";if(t==="fish")return"fish"}if(process.env.PSModulePath)return"powershell"}async function Jh(e){if(e)return e;let t=Wh();if(t)return t;w()||(process.stderr.write(`error: could not detect shell. Pass the shell name explicitly.
|
|
422
|
-
`),process.exit(1));let o=await ne({message:"Which shell do you use?",options:Ml.map(i=>({value:i,label:i}))});return
|
|
422
|
+
`),process.exit(1));let o=await ne({message:"Which shell do you use?",options:Ml.map(i=>({value:i,label:i}))});return F(o)&&D("Cancelled."),o}function Ql(e){switch(e){case"bash":return process.platform==="darwin"?(0,$e.join)((0,Ct.homedir)(),".bash_profile"):(0,$e.join)((0,Ct.homedir)(),".bashrc");case"zsh":return(0,$e.join)((0,Ct.homedir)(),".zshrc");case"powershell":return process.platform==="win32"?(0,$e.join)((0,Ct.homedir)(),"Documents","PowerShell","Microsoft.PowerShell_profile.ps1"):(0,$e.join)((0,Ct.homedir)(),".config","powershell","Microsoft.PowerShell_profile.ps1")}}function Vh(e,t){switch(e){case"bash":return jl(t);case"zsh":return Pl(t);case"fish":return $l(t);case"powershell":return Gl(t)}}function Nl(e,t,o){(0,he.existsSync)(e)||(0,he.mkdirSync)(e,{recursive:!0});let i=(0,$e.join)(e,t);return(0,he.writeFileSync)(i,`${o}
|
|
423
423
|
`),i}function zh(e,t){switch(e){case"zsh":{let o=(0,$e.join)((0,Ct.homedir)(),".zsh","completions"),i=Nl(o,"_resend",t);te.success(`Completions written to ${i}`);let r=Ql(e),n=!0;if((0,he.existsSync)(r)&&(0,he.readFileSync)(r,"utf8").includes(o)&&(n=!1),n){let s=`${bi}
|
|
424
424
|
fpath=(${o} $fpath)
|
|
425
425
|
`,a=(0,he.existsSync)(r)?(0,he.readFileSync)(r,"utf8"):"",l=a.match(/^.*compinit.*$/m);if(l){let u=a.indexOf(l[0]),m=a.slice(0,u),p=a.slice(u);(0,he.writeFileSync)(r,`${m}${s}
|
|
@@ -459,7 +459,7 @@ Reserved keys (cannot be used): FIRST_NAME, LAST_NAME, EMAIL, UNSUBSCRIBE_URL
|
|
|
459
459
|
|
|
460
460
|
Non-interactive: --key and --type are required. --fallback-value is optional.
|
|
461
461
|
Warning: do not create properties with reserved key names \u2014 they will conflict with
|
|
462
|
-
built-in contact fields and may cause unexpected behavior in broadcasts.`,output:' {"object":"contact_property","id":"<id>"}',errorCodes:["auth_error","missing_key","missing_type","invalid_fallback_value","create_error"],examples:["resend contact-properties create --key company_name --type string",'resend contact-properties create --key company_name --type string --fallback-value "Unknown"',"resend contact-properties create --key employee_count --type number --fallback-value 0","resend contact-properties create --key department --type string --json"]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=await T(e.key,{message:"Property key",placeholder:"e.g. company_name"},{message:"Missing --key flag.",code:"missing_key"},o),r=await bt(e.type,{message:"Property data type",options:[{value:"string",label:"string \u2014 text values"},{value:"number",label:"number \u2014 numeric values"}]},{message:"Missing --type flag.",code:"missing_type"},o),n;if(e.fallbackValue!==void 0)if(r==="number"){let a=parseFloat(e.fallbackValue);Number.isNaN(a)&&h({message:"--fallback-value must be a valid number for number-type properties.",code:"invalid_fallback_value"},{json:o.json}),n=a}else n=e.fallbackValue;let s={key:i,type:r,...n!==void 0&&{fallbackValue:n}};await
|
|
462
|
+
built-in contact fields and may cause unexpected behavior in broadcasts.`,output:' {"object":"contact_property","id":"<id>"}',errorCodes:["auth_error","missing_key","missing_type","invalid_fallback_value","create_error"],examples:["resend contact-properties create --key company_name --type string",'resend contact-properties create --key company_name --type string --fallback-value "Unknown"',"resend contact-properties create --key employee_count --type number --fallback-value 0","resend contact-properties create --key department --type string --json"]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=await T(e.key,{message:"Property key",placeholder:"e.g. company_name"},{message:"Missing --key flag.",code:"missing_key"},o),r=await bt(e.type,{message:"Property data type",options:[{value:"string",label:"string \u2014 text values"},{value:"number",label:"number \u2014 numeric values"}]},{message:"Missing --type flag.",code:"missing_type"},o),n;if(e.fallbackValue!==void 0)if(r==="number"){let a=parseFloat(e.fallbackValue);Number.isNaN(a)&&h({message:"--fallback-value must be a valid number for number-type properties.",code:"invalid_fallback_value"},{json:o.json}),n=a}else n=e.fallbackValue;let s={key:i,type:r,...n!==void 0&&{fallbackValue:n}};await B({loading:"Creating contact property...",sdkCall:a=>a.contactProperties.create(s),onInteractive:a=>{console.log(`Contact property created: ${a.id}`)}},o)});var Vt={resource:"contact property",resourcePlural:"contact properties",fetchItems:(e,{limit:t,after:o})=>e.contactProperties.list({limit:t,...o&&{after:o}}),display:e=>({label:`${e.key} (${e.type})`,hint:e.id})};function Wl(e){let t=e.map(o=>[o.key,o.type,o.fallbackValue!=null?String(o.fallbackValue):"",o.id,o.createdAt]);return _(["Key","Type","Fallback Value","ID","Created"],t,"(no contact properties)")}var Jl=new c("delete").alias("rm").description("Delete a contact property definition").argument("[id]","Contact property UUID").option("--yes","Skip the confirmation prompt (required in non-interactive mode)").addHelpText("after",d({context:`WARNING: Deleting a property definition removes that property value from ALL contacts
|
|
463
463
|
permanently. This cannot be undone, and any broadcasts that reference this property key
|
|
464
464
|
via {{{PROPERTY_NAME}}} will render an empty string or their inline fallback instead.
|
|
465
465
|
|
|
@@ -472,7 +472,7 @@ This will remove this property from ALL contacts permanently.`,loading:"Deleting
|
|
|
472
472
|
"type": "string",
|
|
473
473
|
"fallbackValue": null,
|
|
474
474
|
"createdAt": "2026-01-01 00:00:00+00"
|
|
475
|
-
}`,errorCodes:["auth_error","fetch_error"],examples:["resend contact-properties get b4a3c2d1-6e5f-8a7b-0c9d-2e1f4a3b6c5d","resend contact-properties get b4a3c2d1-6e5f-8a7b-0c9d-2e1f4a3b6c5d --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,Vt,i);await
|
|
475
|
+
}`,errorCodes:["auth_error","fetch_error"],examples:["resend contact-properties get b4a3c2d1-6e5f-8a7b-0c9d-2e1f4a3b6c5d","resend contact-properties get b4a3c2d1-6e5f-8a7b-0c9d-2e1f4a3b6c5d --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,Vt,i);await E({loading:"Fetching contact property...",sdkCall:n=>n.contactProperties.get(r),onInteractive:n=>{console.log(`${n.key} (${n.type})`),console.log(`ID: ${n.id}`),console.log(`Created: ${n.createdAt}`),console.log(`Fallback value: ${n.fallbackValue??"(none)"}`)}},i)});var zl=new c("list").alias("ls").description("List all contact property definitions").option("--limit <n>","Maximum number of contact properties to return (1-100)","10").option("--after <cursor>","Return contact properties after this cursor (next page)").option("--before <cursor>","Return contact properties before this cursor (previous page)").addHelpText("after",d({context:`Pagination: use --after or --before with a contact property ID as the cursor.
|
|
476
476
|
Only one of --after or --before may be used at a time.
|
|
477
477
|
The response includes has_more: true when additional pages exist.`,output:` {
|
|
478
478
|
"object": "list",
|
|
@@ -480,14 +480,14 @@ This will remove this property from ALL contacts permanently.`,loading:"Deleting
|
|
|
480
480
|
"data": [
|
|
481
481
|
{ "id": "<uuid>", "key": "company_name", "type": "string", "fallbackValue": null, "createdAt": "..." }
|
|
482
482
|
]
|
|
483
|
-
}`,errorCodes:["auth_error","invalid_limit","list_error"],examples:["resend contact-properties list","resend contact-properties list --limit 25 --json","resend contact-properties list --after b4a3c2d1-6e5f-8a7b-0c9d-2e1f4a3b6c5d --json"]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=
|
|
483
|
+
}`,errorCodes:["auth_error","invalid_limit","list_error"],examples:["resend contact-properties list","resend contact-properties list --limit 25 --json","resend contact-properties list --after b4a3c2d1-6e5f-8a7b-0c9d-2e1f4a3b6c5d --json"]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=I(e.limit,o),r=G(i,e.after,e.before,o);await k({loading:"Fetching contact properties...",sdkCall:n=>n.contactProperties.list(r),onInteractive:n=>{console.log(Wl(n.data)),j(n,"contact-properties list",{limit:i,before:e.before,apiKey:o.apiKey,profile:o.profile})}},o)});var Yl=new c("update").description("Update a contact property definition").argument("[id]","Contact property UUID").option("--fallback-value <value>","New fallback value used in broadcast templates when a contact has no value set for this property").option("--clear-fallback-value","Remove the fallback value (sets it to null)").addHelpText("after",d({context:`Note: the property key and type cannot be changed after creation. Only the fallback value
|
|
484
484
|
is updatable. Renaming a property would break existing broadcasts that reference the old key.
|
|
485
485
|
|
|
486
486
|
--fallback-value and --clear-fallback-value are mutually exclusive.
|
|
487
487
|
|
|
488
488
|
The fallback value is used in broadcast template interpolation when a contact has no value:
|
|
489
489
|
{{{company_name|Unknown}}} \u2014 inline fallback (takes precedence over the property's fallback)
|
|
490
|
-
{{{company_name}}} \u2014 uses the property's stored fallback value if set`,output:' {"object":"contact_property","id":"<id>"}',errorCodes:["auth_error","no_changes","conflicting_flags","fetch_error","invalid_fallback_value","update_error"],examples:['resend contact-properties update b4a3c2d1-6e5f-8a7b-0c9d-2e1f4a3b6c5d --fallback-value "Acme Corp"',"resend contact-properties update b4a3c2d1-6e5f-8a7b-0c9d-2e1f4a3b6c5d --fallback-value 42","resend contact-properties update b4a3c2d1-6e5f-8a7b-0c9d-2e1f4a3b6c5d --clear-fallback-value",'resend contact-properties update b4a3c2d1-6e5f-8a7b-0c9d-2e1f4a3b6c5d --fallback-value "Unknown" --json']})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,Vt,i);t.fallbackValue===void 0&&!t.clearFallbackValue&&h({message:"Provide at least one option to update: --fallback-value or --clear-fallback-value.",code:"no_changes"},{json:i.json}),t.fallbackValue!==void 0&&t.clearFallbackValue&&h({message:"--fallback-value and --clear-fallback-value are mutually exclusive.",code:"conflicting_flags"},{json:i.json});let n=t.clearFallbackValue?null:t.fallbackValue;if(typeof n=="string"){let s=await ee(i);if((await ce("Fetching contact property...",()=>s.contactProperties.get(r),"fetch_error",i,{retryTransient:!0})).type==="number"){let l=parseFloat(n);Number.isNaN(l)&&h({message:"--fallback-value must be a valid number for number-type properties.",code:"invalid_fallback_value"},{json:i.json}),n=l}}await
|
|
490
|
+
{{{company_name}}} \u2014 uses the property's stored fallback value if set`,output:' {"object":"contact_property","id":"<id>"}',errorCodes:["auth_error","no_changes","conflicting_flags","fetch_error","invalid_fallback_value","update_error"],examples:['resend contact-properties update b4a3c2d1-6e5f-8a7b-0c9d-2e1f4a3b6c5d --fallback-value "Acme Corp"',"resend contact-properties update b4a3c2d1-6e5f-8a7b-0c9d-2e1f4a3b6c5d --fallback-value 42","resend contact-properties update b4a3c2d1-6e5f-8a7b-0c9d-2e1f4a3b6c5d --clear-fallback-value",'resend contact-properties update b4a3c2d1-6e5f-8a7b-0c9d-2e1f4a3b6c5d --fallback-value "Unknown" --json']})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,Vt,i);t.fallbackValue===void 0&&!t.clearFallbackValue&&h({message:"Provide at least one option to update: --fallback-value or --clear-fallback-value.",code:"no_changes"},{json:i.json}),t.fallbackValue!==void 0&&t.clearFallbackValue&&h({message:"--fallback-value and --clear-fallback-value are mutually exclusive.",code:"conflicting_flags"},{json:i.json});let n=t.clearFallbackValue?null:t.fallbackValue;if(typeof n=="string"){let s=await ee(i);if((await ce("Fetching contact property...",()=>s.contactProperties.get(r),"fetch_error",i,{retryTransient:!0})).type==="number"){let l=parseFloat(n);Number.isNaN(l)&&h({message:"--fallback-value must be a valid number for number-type properties.",code:"invalid_fallback_value"},{json:i.json}),n=l}}await R({loading:"Updating contact property...",sdkCall:s=>s.contactProperties.update({id:r,...n!==void 0&&{fallbackValue:n}}),errorCode:"update_error",successMsg:`Contact property updated: ${r}`},i)});var Xl=new c("contact-properties").description("Manage contact property definitions").addHelpText("after",d({context:`Contact properties define the schema for custom data stored on contacts.
|
|
491
491
|
Think of them as column definitions \u2014 you create a property definition (e.g. company_name)
|
|
492
492
|
and then set values for that property on individual contacts via "resend contacts update --properties".
|
|
493
493
|
|
|
@@ -502,9 +502,9 @@ Supported types:
|
|
|
502
502
|
number \u2014 numeric values (useful for counts, scores, thresholds)
|
|
503
503
|
|
|
504
504
|
Note: property keys and types are immutable after creation. Only the fallback value can
|
|
505
|
-
be updated. Deleting a property removes it from all contacts.`,examples:["resend contact-properties list","resend contact-properties create --key company_name --type string",'resend contact-properties create --key plan --type string --fallback-value "free"',"resend contact-properties create --key score --type number --fallback-value 0","resend contact-properties get b4a3c2d1-6e5f-8a7b-0c9d-2e1f4a3b6c5d",'resend contact-properties update b4a3c2d1-6e5f-8a7b-0c9d-2e1f4a3b6c5d --fallback-value "Unknown"',"resend contact-properties update b4a3c2d1-6e5f-8a7b-0c9d-2e1f4a3b6c5d --clear-fallback-value","resend contact-properties delete b4a3c2d1-6e5f-8a7b-0c9d-2e1f4a3b6c5d --yes"]})).addCommand(Ll).addCommand(Vl).addCommand(zl,{isDefault:!0}).addCommand(Yl).addCommand(Jl);function yi(e){let t=e.map(o=>[o.email,o.first_name??"",o.last_name??"",o.unsubscribed?"yes":"no",o.id]);return
|
|
505
|
+
be updated. Deleting a property removes it from all contacts.`,examples:["resend contact-properties list","resend contact-properties create --key company_name --type string",'resend contact-properties create --key plan --type string --fallback-value "free"',"resend contact-properties create --key score --type number --fallback-value 0","resend contact-properties get b4a3c2d1-6e5f-8a7b-0c9d-2e1f4a3b6c5d",'resend contact-properties update b4a3c2d1-6e5f-8a7b-0c9d-2e1f4a3b6c5d --fallback-value "Unknown"',"resend contact-properties update b4a3c2d1-6e5f-8a7b-0c9d-2e1f4a3b6c5d --clear-fallback-value","resend contact-properties delete b4a3c2d1-6e5f-8a7b-0c9d-2e1f4a3b6c5d --yes"]})).addCommand(Ll).addCommand(Vl).addCommand(zl,{isDefault:!0}).addCommand(Yl).addCommand(Jl);function yi(e){let t=e.map(o=>[o.email,o.first_name??"",o.last_name??"",o.unsubscribed?"yes":"no",o.id]);return _(["Email","First Name","Last Name","Unsubscribed","ID"],t,"(no contacts)")}function Zl(e){let t=e.map(o=>[o.name,o.subscription,o.id,o.description??""]);return _(["Name","Subscription","ID","Description"],t,"(no topic subscriptions)")}var ye={resource:"contact",resourcePlural:"contacts",fetchItems:(e,{limit:t,after:o})=>e.contacts.list({limit:t,...o&&{after:o}}),display:e=>({label:e.email,hint:e.id})};function zt(e){return e.includes("@")?{email:e}:{id:e}}function Yt(e){return e.includes("@")?{email:e}:{contactId:e}}function Ci(e,t){let o;try{o=JSON.parse(e)}catch{h({message:"Invalid --topics JSON. Expected an array of {id, subscription} objects.",code:"invalid_topics"},{json:t.json})}return Array.isArray(o)||h({message:"Invalid --topics JSON. Expected an array of {id, subscription} objects.",code:"invalid_topics"},{json:t.json}),o}function xi(e,t){if(e)try{return JSON.parse(e)}catch{h({message:"Invalid --properties JSON.",code:"invalid_properties"},{json:t.json})}}var ec=new c("add-segment").description("Add a contact to a segment").argument("[contactId]","Contact UUID or email address").option("--segment-id <id>","Segment ID to add the contact to (required)").addHelpText("after",d({context:`The <contactId> argument accepts either a UUID or an email address.
|
|
506
506
|
|
|
507
|
-
Non-interactive: --segment-id is required.`,output:' {"id":"<segment-membership-id>"}',errorCodes:["auth_error","missing_segment_id","add_segment_error"],examples:["resend contacts add-segment e169aa45-1ecf-4183-9955-b1499d5701d3 --segment-id 78261eea-8f8b-4381-83c6-79fa7120f1cf","resend contacts add-segment steve.wozniak@gmail.com --segment-id 78261eea-8f8b-4381-83c6-79fa7120f1cf --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,ye,i),n=await g(t.segmentId,Oe,i),s={...Yt(r),segmentId:n};await
|
|
507
|
+
Non-interactive: --segment-id is required.`,output:' {"id":"<segment-membership-id>"}',errorCodes:["auth_error","missing_segment_id","add_segment_error"],examples:["resend contacts add-segment e169aa45-1ecf-4183-9955-b1499d5701d3 --segment-id 78261eea-8f8b-4381-83c6-79fa7120f1cf","resend contacts add-segment steve.wozniak@gmail.com --segment-id 78261eea-8f8b-4381-83c6-79fa7120f1cf --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,ye,i),n=await g(t.segmentId,Oe,i),s={...Yt(r),segmentId:n};await R({loading:"Adding contact to segment...",sdkCall:a=>a.contacts.segments.add(s),errorCode:"add_segment_error",successMsg:`Contact added to segment: ${n}`},i)});X();var tc=new c("create").description("Create a new contact").option("--email <email>","Contact email address (required)").option("--first-name <name>","First name").option("--last-name <name>","Last name").option("--unsubscribed","Globally unsubscribe the contact from all broadcasts").option("--properties <json>",`Custom properties as a JSON string (e.g. '{"company":"Acme"}')`).option("--segment-id <id...>","Segment ID to add the contact to on creation (repeatable: --segment-id abc --segment-id def)").addHelpText("after",d({context:`Non-interactive: --email is required. All other flags are optional.
|
|
508
508
|
|
|
509
509
|
Properties: pass a JSON object string to --properties (e.g. '{"plan":"pro","company":"Acme"}').
|
|
510
510
|
Properties are stored as custom contact attributes. To clear a property, set it to null.
|
|
@@ -512,7 +512,7 @@ Properties: pass a JSON object string to --properties (e.g. '{"plan":"pro","comp
|
|
|
512
512
|
|
|
513
513
|
Segments: use --segment-id once per segment to add the contact to one or more segments on creation.
|
|
514
514
|
|
|
515
|
-
Unsubscribed: setting --unsubscribed is a team-wide opt-out from all broadcasts, regardless of segments/topics.`,output:' {"object":"contact","id":"<id>"}',errorCodes:["auth_error","missing_email","invalid_properties","create_error"],examples:["resend contacts create --email steve.wozniak@gmail.com","resend contacts create --email steve.wozniak@gmail.com --first-name Steve --last-name Wozniak",`resend contacts create --email steve.wozniak@gmail.com --properties '{"company":"Acme","plan":"pro"}'`]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=await T(e.email,{message:"Email address",placeholder:"steve.wozniak@gmail.com"},{message:"Missing --email flag.",code:"missing_email"},o),r=e.firstName,n=e.lastName;if(w()&&!o.json&&!e.firstName){let l=await Z({message:"First name (optional)"});
|
|
515
|
+
Unsubscribed: setting --unsubscribed is a team-wide opt-out from all broadcasts, regardless of segments/topics.`,output:' {"object":"contact","id":"<id>"}',errorCodes:["auth_error","missing_email","invalid_properties","create_error"],examples:["resend contacts create --email steve.wozniak@gmail.com","resend contacts create --email steve.wozniak@gmail.com --first-name Steve --last-name Wozniak",`resend contacts create --email steve.wozniak@gmail.com --properties '{"company":"Acme","plan":"pro"}'`]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=await T(e.email,{message:"Email address",placeholder:"steve.wozniak@gmail.com"},{message:"Missing --email flag.",code:"missing_email"},o),r=e.firstName,n=e.lastName;if(w()&&!o.json&&!e.firstName){let l=await Z({message:"First name (optional)"});F(l)&&D("Cancelled."),l&&(r=l)}if(w()&&!o.json&&!e.lastName){let l=await Z({message:"Last name (optional)"});F(l)&&D("Cancelled."),l&&(n=l)}let s=xi(e.properties,o),a=e.segmentId??[];await B({loading:"Creating contact...",sdkCall:l=>l.contacts.create({email:i,...r&&{firstName:r},...n&&{lastName:n},...e.unsubscribed&&{unsubscribed:!0},...s&&{properties:s},...a.length>0&&{segments:a.map(u=>({id:u}))}}),onInteractive:l=>{console.log(`Contact created: ${l.id}`)}},o)});var oc=new c("delete").alias("rm").description("Delete a contact").argument("[id]","Contact UUID or email address \u2014 both are accepted by the API").option("--yes","Skip the confirmation prompt (required in non-interactive mode)").addHelpText("after",d({context:`The <id> argument accepts either a UUID or an email address.
|
|
516
516
|
|
|
517
517
|
Non-interactive: --yes is required to confirm deletion when stdin/stdout is not a TTY.`,output:' {"object":"contact","id":"<id>","deleted":true}',errorCodes:["auth_error","confirmation_required","delete_error"],examples:["resend contacts delete 520784e2-887d-4c25-b53c-4ad46ad38100 --yes","resend contacts delete acme@example.com --yes --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await J(e,ye,i);await z(r.id,!!t.yes,{confirmMessage:`Delete contact "${r.label}"?
|
|
518
518
|
ID: ${r.id}
|
|
@@ -525,7 +525,7 @@ This cannot be undone.`,loading:"Deleting contact...",object:"contact",successMs
|
|
|
525
525
|
"created_at": "2026-01-01 00:00:00+00",
|
|
526
526
|
"unsubscribed": false,
|
|
527
527
|
"properties": {}
|
|
528
|
-
}`,errorCodes:["auth_error","fetch_error"],examples:["resend contacts get e169aa45-1ecf-4183-9955-b1499d5701d3","resend contacts get steve.wozniak@gmail.com","resend contacts get e169aa45-1ecf-4183-9955-b1499d5701d3 --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,ye,i);await
|
|
528
|
+
}`,errorCodes:["auth_error","fetch_error"],examples:["resend contacts get e169aa45-1ecf-4183-9955-b1499d5701d3","resend contacts get steve.wozniak@gmail.com","resend contacts get e169aa45-1ecf-4183-9955-b1499d5701d3 --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,ye,i);await E({loading:"Fetching contact...",sdkCall:n=>n.contacts.get(r),onInteractive:n=>{let s=[n.first_name,n.last_name].filter(Boolean).join(" ");console.log(`${n.email}${s?` (${s})`:""}`),console.log(`ID: ${n.id}`),console.log(`Created: ${n.created_at}`),console.log(`Unsubscribed: ${n.unsubscribed?"yes":"no"}`);let a=Object.entries(n.properties??{});if(a.length>0){console.log("Properties:");for(let[l,u]of a)console.log(` ${l}: ${u.value}`)}}},i)});var ac=require("node:fs"),lc=require("node:path");function rc(e){let t=e.map(o=>[o.status,String(o.counts.total),String(o.counts.created),String(o.counts.updated),String(o.counts.skipped),String(o.counts.failed),o.created_at,o.id]);return _(["Status","Total","Created","Updated","Skipped","Failed","Created At","ID"],t,"(no contact imports)")}var nc={resource:"contact import",resourcePlural:"contact imports",fetchItems:(e,{limit:t,after:o})=>e.contacts.imports.list({limit:t,...o&&{after:o}}),display:e=>({label:`${e.status} - ${e.counts.total} contacts`,hint:e.id})};function sc(e,t){if(!e)return;let o;try{o=JSON.parse(e)}catch{h({message:"Invalid --column-map JSON.",code:"invalid_column_map"},{json:t.json})}return(typeof o!="object"||o===null||Array.isArray(o))&&h({message:"Invalid --column-map JSON. Expected an object mapping contact fields to CSV column headers.",code:"invalid_column_map"},{json:t.json}),o}var cc=new c("create").description("Import contacts in bulk from a local CSV file").option("--file <path>","Path to the CSV file to import (required)").option("--column-map <json>",`Map CSV columns to contact fields as a JSON object (e.g. '{"email":"Email","firstName":"First Name"}')`).addOption(new M("--on-conflict <strategy>","How to handle contacts that already exist").choices(["upsert","skip"])).option("--segment-id <id...>","Segment ID to add imported contacts to (repeatable: --segment-id abc --segment-id def)").option("--topics <json>","Topic subscriptions as a JSON array of {id, subscription} objects").addHelpText("after",d({context:`Non-interactive: --file is required. All other flags are optional.
|
|
529
529
|
|
|
530
530
|
The CSV file is uploaded as multipart form data (max 100MB).
|
|
531
531
|
|
|
@@ -541,16 +541,16 @@ On conflict: --on-conflict upsert (default) updates existing contacts; skip leav
|
|
|
541
541
|
|
|
542
542
|
Segments: use --segment-id once per segment to add imported contacts to one or more segments.
|
|
543
543
|
|
|
544
|
-
Topics: pass a JSON array of {id, subscription} objects (subscription is "opt_in" or "opt_out").`,output:' {"object":"contact_import","id":"<id>"}',errorCodes:["auth_error","missing_file","file_read_error","invalid_column_map","invalid_topics","create_error"],examples:["resend contacts imports create --file ./contacts.csv",`resend contacts imports create --file ./contacts.csv --column-map '{"email":"Email","firstName":"First Name"}'`,"resend contacts imports create --file ./contacts.csv --on-conflict skip --segment-id 78261eea-8f8b-4381-83c6-79fa7120f1cf"]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=await T(e.file,{message:"Path to the CSV file",placeholder:"./contacts.csv"},{message:"Missing --file flag.",code:"missing_file"},o),r;try{r=(0,ac.readFileSync)(i)}catch{h({message:`Failed to read file: ${i}`,code:"file_read_error"},{json:o.json})}let n=new File([new Uint8Array(r)],(0,lc.basename)(i),{type:"text/csv"}),s=sc(e.columnMap,o),a=(e.segmentId??[]).map(u=>({id:u})),l=e.topics!==void 0?Ci(e.topics,o):void 0;await
|
|
544
|
+
Topics: pass a JSON array of {id, subscription} objects (subscription is "opt_in" or "opt_out").`,output:' {"object":"contact_import","id":"<id>"}',errorCodes:["auth_error","missing_file","file_read_error","invalid_column_map","invalid_topics","create_error"],examples:["resend contacts imports create --file ./contacts.csv",`resend contacts imports create --file ./contacts.csv --column-map '{"email":"Email","firstName":"First Name"}'`,"resend contacts imports create --file ./contacts.csv --on-conflict skip --segment-id 78261eea-8f8b-4381-83c6-79fa7120f1cf"]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=await T(e.file,{message:"Path to the CSV file",placeholder:"./contacts.csv"},{message:"Missing --file flag.",code:"missing_file"},o),r;try{r=(0,ac.readFileSync)(i)}catch{h({message:`Failed to read file: ${i}`,code:"file_read_error"},{json:o.json})}let n=new File([new Uint8Array(r)],(0,lc.basename)(i),{type:"text/csv"}),s=sc(e.columnMap,o),a=(e.segmentId??[]).map(u=>({id:u})),l=e.topics!==void 0?Ci(e.topics,o):void 0;await B({loading:"Starting contact import...",sdkCall:u=>u.contacts.imports.create({file:n,...s&&{columnMap:s},...e.onConflict&&{onConflict:e.onConflict},...a.length>0&&{segments:a},...l&&{topics:l}}),onInteractive:u=>{console.log(`Contact import started: ${u.id}`)}},o)});var dc=new c("get").description("Retrieve a contact import by ID").argument("[id]","Contact import ID").addHelpText("after",d({output:` {
|
|
545
545
|
"object": "contact_import",
|
|
546
546
|
"id": "479e3145-dd38-476b-932c-529ceb705947",
|
|
547
547
|
"status": "completed",
|
|
548
548
|
"created_at": "2026-05-15 18:32:37.823+00",
|
|
549
549
|
"completed_at": "2026-05-15 18:33:42.916+00",
|
|
550
550
|
"counts": {"total":1200,"created":800,"updated":300,"skipped":75,"failed":25}
|
|
551
|
-
}`,errorCodes:["auth_error","fetch_error"],examples:["resend contacts imports get 479e3145-dd38-476b-932c-529ceb705947","resend contacts imports get 479e3145-dd38-476b-932c-529ceb705947 --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,nc,i);await
|
|
551
|
+
}`,errorCodes:["auth_error","fetch_error"],examples:["resend contacts imports get 479e3145-dd38-476b-932c-529ceb705947","resend contacts imports get 479e3145-dd38-476b-932c-529ceb705947 --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,nc,i);await E({loading:"Fetching contact import...",sdkCall:n=>n.contacts.imports.get(r),onInteractive:n=>{console.log(`${n.id} - ${n.status}`),console.log(`Created: ${n.created_at}`),n.completed_at&&console.log(`Completed: ${n.completed_at}`);let s=n.counts;console.log(`Counts: ${s.total} total, ${s.created} created, ${s.updated} updated, ${s.skipped} skipped, ${s.failed} failed`)}},i)});var uc=new c("list").alias("ls").description("List contact imports").option("--limit <n>","Maximum number of contact imports to return (1-100)","10").option("--after <cursor>","Return imports after this cursor (next page)").option("--before <cursor>","Return imports before this cursor (previous page)").addOption(new M("--status <status>","Filter by import status").choices(["queued","in_progress","completed","failed"])).addHelpText("after",d({context:`Pagination: use --after or --before with a contact import ID as the cursor.
|
|
552
552
|
Only one of --after or --before may be used at a time.
|
|
553
|
-
The response includes has_more: true when additional pages exist.`,output:' {"object":"list","has_more":false,"data":[{"object":"contact_import","id":"...","status":"completed","counts":{"total":1200,"created":800,"updated":300,"skipped":75,"failed":25}}]}',errorCodes:["auth_error","invalid_limit","list_error"],examples:["resend contacts imports list","resend contacts imports list --status completed --json","resend contacts imports list --after 479e3145-dd38-476b-932c-529ceb705947 --json"]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=
|
|
553
|
+
The response includes has_more: true when additional pages exist.`,output:' {"object":"list","has_more":false,"data":[{"object":"contact_import","id":"...","status":"completed","counts":{"total":1200,"created":800,"updated":300,"skipped":75,"failed":25}}]}',errorCodes:["auth_error","invalid_limit","list_error"],examples:["resend contacts imports list","resend contacts imports list --status completed --json","resend contacts imports list --after 479e3145-dd38-476b-932c-529ceb705947 --json"]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=I(e.limit,o),r=G(i,e.after,e.before,o);await k({loading:"Fetching contact imports...",sdkCall:n=>n.contacts.imports.list({...r,...e.status&&{status:e.status}}),onInteractive:n=>{console.log(rc(n.data)),j(n,"contacts imports list",{limit:i,before:e.before,apiKey:o.apiKey,profile:o.profile})}},o)});var mc=new c("imports").description("Import contacts in bulk from a CSV file").addHelpText("after",d({context:`Import lifecycle:
|
|
554
554
|
1. resend contacts imports create --file ./contacts.csv (returns the import id)
|
|
555
555
|
2. resend contacts imports get <id> (poll until "completed")
|
|
556
556
|
3. resend contacts imports list (review past imports)
|
|
@@ -560,8 +560,8 @@ the file is processed in the background.`,examples:["resend contacts imports cre
|
|
|
560
560
|
|
|
561
561
|
Pagination: use --after or --before with a contact ID as the cursor.
|
|
562
562
|
Only one of --after or --before may be used at a time.
|
|
563
|
-
The response includes has_more: true when additional pages exist.`,output:' {"object":"list","data":[{"id":"...","email":"...","first_name":"...","last_name":"...","unsubscribed":false}],"has_more":false}',errorCodes:["auth_error","invalid_limit","list_error"],examples:["resend contacts list","resend contacts list --limit 25 --json","resend contacts list --after 479e3145-dd38-4932-8c0c-e58b548c9e76 --json"]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=
|
|
564
|
-
The <segmentId> argument must be a segment UUID (not an email).`,output:' {"id":"<segment-id>","deleted":true}',errorCodes:["auth_error","remove_segment_error"],examples:["resend contacts remove-segment e169aa45-1ecf-4183-9955-b1499d5701d3 78261eea-8f8b-4381-83c6-79fa7120f1cf","resend contacts remove-segment steve.wozniak@gmail.com 78261eea-8f8b-4381-83c6-79fa7120f1cf --json"]})).action(async(e,t,o,i)=>{let r=i.optsWithGlobals(),n=await g(e,ye,r),s=await g(t,Oe,r),a={...Yt(n),segmentId:s};await
|
|
563
|
+
The response includes has_more: true when additional pages exist.`,output:' {"object":"list","data":[{"id":"...","email":"...","first_name":"...","last_name":"...","unsubscribed":false}],"has_more":false}',errorCodes:["auth_error","invalid_limit","list_error"],examples:["resend contacts list","resend contacts list --limit 25 --json","resend contacts list --after 479e3145-dd38-4932-8c0c-e58b548c9e76 --json"]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=I(e.limit,o),r=G(i,e.after,e.before,o);await k({loading:"Fetching contacts...",sdkCall:n=>n.contacts.list(r),onInteractive:n=>{console.log(yi(n.data)),j(n,"contacts list",{limit:i,before:e.before,apiKey:o.apiKey,profile:o.profile})}},o)});var fc=new c("remove-segment").description("Remove a contact from a segment").argument("[contactId]","Contact UUID or email address").argument("[segmentId]","Segment ID to remove the contact from").addHelpText("after",d({context:`The <contactId> argument accepts either a UUID or an email address.
|
|
564
|
+
The <segmentId> argument must be a segment UUID (not an email).`,output:' {"id":"<segment-id>","deleted":true}',errorCodes:["auth_error","remove_segment_error"],examples:["resend contacts remove-segment e169aa45-1ecf-4183-9955-b1499d5701d3 78261eea-8f8b-4381-83c6-79fa7120f1cf","resend contacts remove-segment steve.wozniak@gmail.com 78261eea-8f8b-4381-83c6-79fa7120f1cf --json"]})).action(async(e,t,o,i)=>{let r=i.optsWithGlobals(),n=await g(e,ye,r),s=await g(t,Oe,r),a={...Yt(n),segmentId:s};await R({loading:"Removing contact from segment...",sdkCall:l=>l.contacts.segments.remove(a),errorCode:"remove_segment_error",successMsg:`Contact removed from segment: ${s}`},r)});var hc=new c("segments").description("List the segments a contact belongs to").argument("[id]","Contact UUID or email address").addHelpText("after",d({context:"The <id> argument accepts either a UUID or an email address.",output:' {"object":"list","data":[{"id":"<segment-uuid>","name":"Newsletter Subscribers","created_at":"..."}],"has_more":false}',errorCodes:["auth_error","list_error"],examples:["resend contacts segments e169aa45-1ecf-4183-9955-b1499d5701d3","resend contacts segments steve.wozniak@gmail.com","resend contacts segments e169aa45-1ecf-4183-9955-b1499d5701d3 --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,ye,i);await k({loading:"Fetching segments...",sdkCall:n=>n.contacts.segments.list(Yt(r)),onInteractive:n=>console.log(gi(n.data))},i)});var gc=new c("topics").description("List a contact's topic subscriptions").argument("[id]","Contact UUID or email address").addHelpText("after",d({context:`The <id> argument accepts either a UUID or an email address.
|
|
565
565
|
|
|
566
566
|
Topics control which broadcast email types a contact receives.
|
|
567
567
|
subscription values: "opt_in" (receiving) | "opt_out" (not receiving)
|
|
@@ -574,7 +574,7 @@ Subscription toggle:
|
|
|
574
574
|
Omitting both flags leaves the subscription status unchanged.
|
|
575
575
|
|
|
576
576
|
Properties: --properties merges the given JSON object with existing properties.
|
|
577
|
-
Set a key to null to clear it: '{"company":null}'.`,output:' {"object":"contact","id":"<id>"}',errorCodes:["auth_error","invalid_properties","update_error"],examples:["resend contacts update e169aa45-1ecf-4183-9955-b1499d5701d3 --unsubscribed","resend contacts update acme@example.com --no-unsubscribed",`resend contacts update e169aa45-1ecf-4183-9955-b1499d5701d3 --properties '{"plan":"pro"}'`,"resend contacts update acme@example.com --unsubscribed --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,ye,i),n=xi(t.properties,i),s={...zt(r),...t.unsubscribed!==void 0&&{unsubscribed:t.unsubscribed},...n&&{properties:n}};await
|
|
577
|
+
Set a key to null to clear it: '{"company":null}'.`,output:' {"object":"contact","id":"<id>"}',errorCodes:["auth_error","invalid_properties","update_error"],examples:["resend contacts update e169aa45-1ecf-4183-9955-b1499d5701d3 --unsubscribed","resend contacts update acme@example.com --no-unsubscribed",`resend contacts update e169aa45-1ecf-4183-9955-b1499d5701d3 --properties '{"plan":"pro"}'`,"resend contacts update acme@example.com --unsubscribed --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,ye,i),n=xi(t.properties,i),s={...zt(r),...t.unsubscribed!==void 0&&{unsubscribed:t.unsubscribed},...n&&{properties:n}};await R({loading:"Updating contact...",sdkCall:a=>a.contacts.update(s),errorCode:"update_error",successMsg:`Contact updated: ${r}`},i)});X();var bc=new c("update-topics").description("Update a contact's topic subscription statuses").argument("[id]","Contact UUID or email address").option("--topics <json>",`JSON array of topic subscriptions (required) \u2014 e.g. '[{"id":"topic-uuid","subscription":"opt_in"}]'`).addHelpText("after",d({context:`The <id> argument accepts either a UUID or an email address.
|
|
578
578
|
|
|
579
579
|
Non-interactive: --topics is required.
|
|
580
580
|
|
|
@@ -583,7 +583,7 @@ Topics JSON format:
|
|
|
583
583
|
subscription values: "opt_in" | "opt_out"
|
|
584
584
|
|
|
585
585
|
This operation replaces all topic subscriptions for the specified topics.
|
|
586
|
-
Topics not included in the array are left unchanged.`,output:' {"id":"<contact-id>"}',errorCodes:["auth_error","missing_topics","invalid_topics","update_topics_error"],examples:[`resend contacts update-topics e169aa45-1ecf-4183-9955-b1499d5701d3 --topics '[{"id":"b6d24b8e-af0b-4c3c-be0c-359bbd97381e","subscription":"opt_in"}]'`,`resend contacts update-topics steve.wozniak@gmail.com --topics '[{"id":"b6d24b8e-af0b-4c3c-be0c-359bbd97381e","subscription":"opt_out"},{"id":"07d84122-7224-4881-9c31-1c048e204602","subscription":"opt_in"}]' --json`]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,ye,i),n=await ee(i),s=t.topics;if(!s){(!w()||i.json)&&h({message:"Missing --topics flag.",code:"missing_topics"},{json:i.json});let u=await Z({message:`Topics JSON (e.g. '[{"id":"topic-uuid","subscription":"opt_in"}]')`,placeholder:'[{"id":"topic-uuid","subscription":"opt_in"}]',validate:m=>m?void 0:"Required"});
|
|
586
|
+
Topics not included in the array are left unchanged.`,output:' {"id":"<contact-id>"}',errorCodes:["auth_error","missing_topics","invalid_topics","update_topics_error"],examples:[`resend contacts update-topics e169aa45-1ecf-4183-9955-b1499d5701d3 --topics '[{"id":"b6d24b8e-af0b-4c3c-be0c-359bbd97381e","subscription":"opt_in"}]'`,`resend contacts update-topics steve.wozniak@gmail.com --topics '[{"id":"b6d24b8e-af0b-4c3c-be0c-359bbd97381e","subscription":"opt_out"},{"id":"07d84122-7224-4881-9c31-1c048e204602","subscription":"opt_in"}]' --json`]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,ye,i),n=await ee(i),s=t.topics;if(!s){(!w()||i.json)&&h({message:"Missing --topics flag.",code:"missing_topics"},{json:i.json});let u=await Z({message:`Topics JSON (e.g. '[{"id":"topic-uuid","subscription":"opt_in"}]')`,placeholder:'[{"id":"topic-uuid","subscription":"opt_in"}]',validate:m=>m?void 0:"Required"});F(u)&&D("Cancelled."),s=u}let a=Ci(s,i),l=await ce("Updating topic subscriptions...",()=>n.contacts.topics.update({...zt(r),topics:a}),"update_topics_error",i);!i.json&&w()?console.log(`Topic subscriptions updated for contact: ${r}`):N(l,{json:i.json})});var yc=new c("contacts").description("Manage contacts").addHelpText("after",d({context:`Contacts are global entities (not audience-scoped since the 2025 migration).
|
|
587
587
|
Each contact is identified by a UUID or email address \u2014 both are accepted in all subcommands.
|
|
588
588
|
|
|
589
589
|
Properties:
|
|
@@ -600,7 +600,7 @@ Segments:
|
|
|
600
600
|
Manage membership with "resend contacts add-segment" and "resend contacts remove-segment".
|
|
601
601
|
|
|
602
602
|
Imports:
|
|
603
|
-
Bulk-import contacts from a CSV file with "resend contacts imports create --file <path>".`,examples:["resend contacts list","resend contacts create --email steve.wozniak@gmail.com --first-name Steve","resend contacts get e169aa45-1ecf-4183-9955-b1499d5701d3","resend contacts get steve.wozniak@gmail.com","resend contacts update acme@example.com --unsubscribed","resend contacts delete e169aa45-1ecf-4183-9955-b1499d5701d3 --yes","resend contacts segments steve.wozniak@gmail.com","resend contacts add-segment steve.wozniak@gmail.com --segment-id 78261eea-8f8b-4381-83c6-79fa7120f1cf","resend contacts remove-segment steve.wozniak@gmail.com 78261eea-8f8b-4381-83c6-79fa7120f1cf","resend contacts topics steve.wozniak@gmail.com",`resend contacts update-topics steve.wozniak@gmail.com --topics '[{"id":"b6d24b8e-af0b-4c3c-be0c-359bbd97381e","subscription":"opt_in"}]'`,"resend contacts imports create --file ./contacts.csv"]})).addCommand(tc).addCommand(ic).addCommand(pc,{isDefault:!0}).addCommand(Ac).addCommand(oc).addCommand(hc).addCommand(ec).addCommand(fc).addCommand(gc).addCommand(bc).addCommand(mc);var Cc=new c("docs").description("Open the Resend documentation in your browser").addHelpText("after",d({context:"Opens https://resend.com/docs in your default browser.",examples:["resend docs"]})).action(async(e,t)=>{let o=t.optsWithGlobals();await Te(fe.documentation,o)});be();vr();Zo();X();vo();Kt();var Qr="TimeoutError",Kc=(e,t)=>{let o,i=new Promise((r,n)=>{o=setTimeout(()=>{let s=new Error(`Operation timed out after ${t}ms`);s.name=Qr,n(s)},t)});return Promise.race([e,i]).finally(()=>{clearTimeout(o)})};var tg=5e3;function og(e){return e instanceof Error&&e.name===
|
|
603
|
+
Bulk-import contacts from a CSV file with "resend contacts imports create --file <path>".`,examples:["resend contacts list","resend contacts create --email steve.wozniak@gmail.com --first-name Steve","resend contacts get e169aa45-1ecf-4183-9955-b1499d5701d3","resend contacts get steve.wozniak@gmail.com","resend contacts update acme@example.com --unsubscribed","resend contacts delete e169aa45-1ecf-4183-9955-b1499d5701d3 --yes","resend contacts segments steve.wozniak@gmail.com","resend contacts add-segment steve.wozniak@gmail.com --segment-id 78261eea-8f8b-4381-83c6-79fa7120f1cf","resend contacts remove-segment steve.wozniak@gmail.com 78261eea-8f8b-4381-83c6-79fa7120f1cf","resend contacts topics steve.wozniak@gmail.com",`resend contacts update-topics steve.wozniak@gmail.com --topics '[{"id":"b6d24b8e-af0b-4c3c-be0c-359bbd97381e","subscription":"opt_in"}]'`,"resend contacts imports create --file ./contacts.csv"]})).addCommand(tc).addCommand(ic).addCommand(pc,{isDefault:!0}).addCommand(Ac).addCommand(oc).addCommand(hc).addCommand(ec).addCommand(fc).addCommand(gc).addCommand(bc).addCommand(mc);var Cc=new c("docs").description("Open the Resend documentation in your browser").addHelpText("after",d({context:"Opens https://resend.com/docs in your default browser.",examples:["resend docs"]})).action(async(e,t)=>{let o=t.optsWithGlobals();await Te(fe.documentation,o)});be();vr();Zo();X();vo();Kt();var Qr="TimeoutError",Kc=(e,t)=>{let o,i=new Promise((r,n)=>{o=setTimeout(()=>{let s=new Error(`Operation timed out after ${t}ms`);s.name=Qr,n(s)},t)});return Promise.race([e,i]).finally(()=>{clearTimeout(o)})};var tg=5e3;function og(e){return e instanceof Error&&e.name===Fr}async function ig(){try{let e=await fetch(Gr,{headers:{Accept:"application/vnd.github.v3+json"},signal:AbortSignal.timeout(5e3)});if(!e.ok)return{name:"CLI Version",status:"warn",message:`v${se} (could not check for updates)`};let t=await e.json();if(t.prerelease||t.draft)return{name:"CLI Version",status:"warn",message:`v${se} (could not check for updates)`};let o=t.tag_name?.replace(/^v/,"")??"unknown";return o===se?{name:"CLI Version",status:"pass",message:`v${se} (latest)`}:{name:"CLI Version",status:"warn",message:`v${se} (latest: v${o})`,detail:"Update available"}}catch{return{name:"CLI Version",status:"warn",message:`v${se} (could not check for updates)`}}}async function rg(e){let t;try{t=await Rt(e,void 0,{refresh:!1})}catch(n){return{name:"API Key",status:"fail",message:W(n,"Authentication failed"),detail:"Run: resend login"}}if(!t)return{name:"API Key",status:"fail",message:"No API key found",detail:"Run: resend login"};let o=t.type==="api_key"?t.key:t.access_token,i=t.profile?`, profile: ${t.profile}`:"",r=t.type==="oauth_grant"?`${t.source} (oauth)`:t.source;return{name:"API Key",status:"pass",message:`${At(o)} (source: ${r}${i})`}}async function ng(e){let t;try{t=await Rt(e)}catch(r){let n=og(r);return{name:"API Validation",status:n?"warn":"fail",message:W(r,"Authentication failed"),...n?{}:{detail:"Run: resend login"}}}if(!t)return{name:"API Validation",status:"fail",message:"Skipped \u2014 no API key"};let o=t.type==="api_key"?t.key:t.access_token,i=t.type==="api_key"?"API key":"credential";try{let r=new Gt(o),{data:n,error:s}=await Kc(r.domains.list(),tg);if(s){let m=s;return m.name==="restricted_api_key"?{name:"API Validation",status:"warn",message:`Sending-only ${i}`,detail:Qt}:m.name==="application_error"?{name:"API Validation",status:"warn",message:"Network error. Check your connection and try again"}:{name:"API Validation",status:"fail",message:`Invalid ${i}: ${s.message}`}}let a=n?.data??[],l=a.filter(m=>m.status==="verified"),u=a.filter(m=>m.status!=="verified");return a.length===0?{name:"Domains",status:"warn",message:"No domains configured",detail:"Add a domain at https://resend.com/domains"}:l.length===0?{name:"Domains",status:"warn",message:`${u.length} domain(s) pending verification`,detail:a.map(m=>`${m.name} (${m.status})`).join(", ")}:{name:"Domains",status:"pass",message:`${l.length} verified, ${u.length} pending`,detail:a.map(m=>`${m.name} (${m.status})`).join(", ")}}catch(r){return r instanceof Error&&r.name===Qr?{name:"API Validation",status:"warn",message:"Request timed out"}:{name:"API Validation",status:"fail",message:W(r,`Failed to validate ${i}`)}}}var kc=new c("doctor").description("Check CLI version, API key, and domain status").addHelpText("after",d({setup:!0,context:`Checks performed:
|
|
604
604
|
CLI Version Is the installed version up to date?
|
|
605
605
|
API Key Is a key present (--api-key, RESEND_API_KEY, or credentials file)?
|
|
606
606
|
Credential Storage Which backend is storing credentials (secure storage vs plaintext file)?
|
|
@@ -615,37 +615,37 @@ Imports:
|
|
|
615
615
|
status values: "pass" | "warn" | "fail"
|
|
616
616
|
Exit code 1 if any check has status "fail"`,examples:["resend doctor","resend doctor --json"]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=[],r=w()&&!o.json;r&&console.log(`
|
|
617
617
|
Resend Doctor
|
|
618
|
-
`);let n=r?ae("Checking CLI version..."):null,s=await ig();i.push(s),s.status==="warn"?n?.warn(s.message):n?.stop(s.message),n=r?ae("Checking API key..."):null;let a=await rg(o.apiKey);i.push(a),a.status==="fail"?n?.fail(a.message):n?.stop(a.message),n=r?ae("Checking credential storage..."):null;let l=await rt(),u=Se(),m=l.isSecure,p={name:"Credential Storage",status:m?"pass":"warn",message:m?l.name:"plaintext file",...!m&&process.env.RESEND_CREDENTIAL_STORE!=="file"&&(u?.storage==="secure_storage"||process.env.RESEND_CREDENTIAL_STORE==="secure_storage")?{detail:"Secure backend unavailable despite secure storage preference \u2014 falling back to plaintext"}:{}};i.push(p),p.status==="warn"?n?.warn(p.message):n?.stop(p.message),n=r?ae("Validating API key & domains..."):null;let f=await ng(o.apiKey);i.push(f),f.status==="fail"?n?.fail(f.message):f.status==="warn"?n?.warn(f.message):n?.stop(f.message);let y=i.some(A=>A.status==="fail");!o.json&&w()?console.log(""):N({ok:!y,checks:i},{json:o.json}),y&&process.exit(1)});var
|
|
618
|
+
`);let n=r?ae("Checking CLI version..."):null,s=await ig();i.push(s),s.status==="warn"?n?.warn(s.message):n?.stop(s.message),n=r?ae("Checking API key..."):null;let a=await rg(o.apiKey);i.push(a),a.status==="fail"?n?.fail(a.message):n?.stop(a.message),n=r?ae("Checking credential storage..."):null;let l=await rt(),u=Se(),m=l.isSecure,p={name:"Credential Storage",status:m?"pass":"warn",message:m?l.name:"plaintext file",...!m&&process.env.RESEND_CREDENTIAL_STORE!=="file"&&(u?.storage==="secure_storage"||process.env.RESEND_CREDENTIAL_STORE==="secure_storage")?{detail:"Secure backend unavailable despite secure storage preference \u2014 falling back to plaintext"}:{}};i.push(p),p.status==="warn"?n?.warn(p.message):n?.stop(p.message),n=r?ae("Validating API key & domains..."):null;let f=await ng(o.apiKey);i.push(f),f.status==="fail"?n?.fail(f.message):f.status==="warn"?n?.warn(f.message):n?.stop(f.message);let y=i.some(A=>A.status==="fail");!o.json&&w()?console.log(""):N({ok:!y,checks:i},{json:o.json}),y&&process.exit(1)});var _c=new c("create").description("Start a claim for a domain another Resend account has verified").option("--name <domain>","Domain name to claim (e.g. example.com)").addOption(new M("--region <region>","Sending region").choices(["us-east-1","eu-west-1","sa-east-1","ap-northeast-1"])).option("--tracking-subdomain <subdomain>","Subdomain for click and open tracking (e.g. track)").option("--custom-return-path <subdomain>","Subdomain for the Return-Path address (e.g. bounce)").option("--open-tracking","Enable open tracking").option("--no-open-tracking","Disable open tracking").option("--click-tracking","Enable click tracking").option("--no-click-tracking","Disable click tracking").addHelpText("after",d({context:"Non-interactive: --name is required (no prompts when stdin/stdout is not a TTY)",output:" domain_claim object with the placeholder domain_id and the TXT record to add to DNS.",errorCodes:["auth_error","missing_name","create_error"],examples:["resend domains claim create --name example.com","resend domains claim create --name example.com --region eu-west-1","resend domains claim create --name example.com --json"]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=await T(e.name,{message:"Domain name to claim",placeholder:"example.com"},{message:"Missing --name flag.",code:"missing_name"},o);await B({loading:"Starting domain claim...",sdkCall:r=>r.domains.claims.create({name:i,...e.region&&{region:e.region},...e.customReturnPath!==void 0&&{customReturnPath:e.customReturnPath},...e.openTracking!==void 0&&{openTracking:e.openTracking},...e.clickTracking!==void 0&&{clickTracking:e.clickTracking},...e.trackingSubdomain!==void 0&&{trackingSubdomain:e.trackingSubdomain}}),onInteractive:r=>{console.log(`Claim started for ${r.name} (claim id: ${r.id}, domain id: ${r.domain_id})`),console.log(`Status: ${r.status}`),console.log(`
|
|
619
619
|
Add this TXT record at your DNS provider:`),console.log(` ${r.record.name} TXT ${r.record.value}`),console.log(`
|
|
620
|
-
Then run \`resend domains claim verify ${r.domain_id}\`.`)}},o)});var
|
|
620
|
+
Then run \`resend domains claim verify ${r.domain_id}\`.`)}},o)});var Fc=new c("get").description("Retrieve the latest claim for a domain").argument("[id]","Domain ID (the placeholder domain created by the claim)").addHelpText("after",d({output:` domain_claim object: status, domain_id, the TXT record, blocked_reason, expires_at.
|
|
621
621
|
|
|
622
|
-
Claim status values: pending | verified | completed | blocked | expired | superseded | canceled | failed`,errorCodes:["auth_error","fetch_error","not_found"],examples:["resend domains claim get 4dd369bc-aa82-4ff3-97de-514ae3000ee0","resend domains claim get 4dd369bc-aa82-4ff3-97de-514ae3000ee0 --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,De,i);await
|
|
623
|
-
TXT record:`),console.log(` ${n.record.name} TXT ${n.record.value}`)}},i)});var
|
|
622
|
+
Claim status values: pending | verified | completed | blocked | expired | superseded | canceled | failed`,errorCodes:["auth_error","fetch_error","not_found"],examples:["resend domains claim get 4dd369bc-aa82-4ff3-97de-514ae3000ee0","resend domains claim get 4dd369bc-aa82-4ff3-97de-514ae3000ee0 --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,De,i);await E({loading:"Fetching domain claim...",sdkCall:n=>n.domains.claims.get(r),onInteractive:n=>{console.log(`${n.name} \u2014 ${n.status}`),console.log(`Claim ID: ${n.id}`),console.log(`Domain ID: ${n.domain_id}`),n.blocked_reason&&console.log(`Blocked: ${n.blocked_reason}`),console.log(`Expires: ${n.expires_at}`),console.log(`
|
|
623
|
+
TXT record:`),console.log(` ${n.record.name} TXT ${n.record.value}`)}},i)});var Rc=new c("verify").description("Trigger DNS verification and transfer for a domain claim").argument("[id]","Domain ID (the placeholder domain created by the claim)").addHelpText("after",d({output:" domain_claim object (status stays pending while verification runs async).",errorCodes:["auth_error","verify_error","not_found"],examples:["resend domains claim verify 4dd369bc-aa82-4ff3-97de-514ae3000ee0"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,De,i);await R({loading:"Verifying domain claim...",sdkCall:n=>n.domains.claims.verify(r),errorCode:"verify_error",successMsg:`Domain claim verification started. Check status with resend domains claim get ${r}.`},i)});var Dc=new c("claim").description("Claim a domain already verified by another Resend account").addHelpText("after",d({context:`Claim lifecycle:
|
|
624
624
|
1. resend domains claim create --name example.com (returns the TXT record)
|
|
625
625
|
2. Configure the TXT record at your DNS provider
|
|
626
626
|
3. resend domains claim verify <domain-id> (trigger verification + transfer)
|
|
627
627
|
4. resend domains claim get <domain-id> (poll until "completed")
|
|
628
628
|
5. The transferred domain has NEW DKIM records \u2014 update DNS, then run:
|
|
629
|
-
resend domains verify <domain-id>`,examples:["resend domains claim create --name example.com","resend domains claim get 4dd369bc-aa82-4ff3-97de-514ae3000ee0","resend domains claim verify 4dd369bc-aa82-4ff3-97de-514ae3000ee0"]})).addCommand(
|
|
629
|
+
resend domains verify <domain-id>`,examples:["resend domains claim create --name example.com","resend domains claim get 4dd369bc-aa82-4ff3-97de-514ae3000ee0","resend domains claim verify 4dd369bc-aa82-4ff3-97de-514ae3000ee0"]})).addCommand(_c).addCommand(Fc).addCommand(Rc);var Tc=new c("create").description("Create a new domain and receive DNS records to configure").option("--name <domain>","Domain name (e.g. example.com)").addOption(new M("--region <region>","Sending region").choices(["us-east-1","eu-west-1","sa-east-1","ap-northeast-1"])).addOption(new M("--tls <mode>","TLS mode (default: opportunistic)").choices(["opportunistic","enforced"])).option("--tracking-subdomain <subdomain>","Subdomain for click and open tracking (e.g. track)").option("--custom-return-path <subdomain>","Subdomain for the Return-Path address (e.g. bounce)").option("--sending","Enable sending capability (default: enabled)").option("--receiving","Enable receiving capability (default: disabled)").addHelpText("after",d({context:"Non-interactive: --name is required (no prompts when stdin/stdout is not a TTY)",output:" Full domain object with DNS records array to configure in your DNS provider.",errorCodes:["auth_error","missing_name","create_error"],examples:["resend domains create --name example.com","resend domains create --name example.com --region eu-west-1 --tls enforced","resend domains create --name example.com --tracking-subdomain track","resend domains create --name example.com --custom-return-path bounce","resend domains create --name example.com --receiving --json","resend domains create --name example.com --sending --receiving --json"]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=await T(e.name,{message:"Domain name",placeholder:"example.com"},{message:"Missing --name flag.",code:"missing_name"},o);await B({loading:"Creating domain...",sdkCall:r=>r.domains.create({name:i,...e.region&&{region:e.region},...e.tls&&{tls:e.tls},...e.trackingSubdomain&&{trackingSubdomain:e.trackingSubdomain},...e.customReturnPath!==void 0&&{customReturnPath:e.customReturnPath},...(e.sending||e.receiving)&&{capabilities:{...e.sending&&{sending:"enabled"},...e.receiving&&{receiving:"enabled"}}}}),onInteractive:r=>{console.log(`Domain created: ${r.name} (id: ${r.id})`),console.log(`
|
|
630
630
|
DNS Records to configure:`),console.log(li(r.records,r.name)),console.log(`
|
|
631
631
|
Run \`resend domains verify ${r.id}\` after configuring DNS.`)}},o)});var Oc=new c("delete").alias("rm").description("Delete a domain").argument("[id]","Domain ID").option("--yes","Skip confirmation prompt").addHelpText("after",d({context:"Non-interactive: --yes is required to confirm deletion when stdin/stdout is not a TTY.",output:' {"object":"domain","id":"<id>","deleted":true}',errorCodes:["auth_error","confirmation_required","delete_error"],examples:["resend domains delete 4dd369bc-aa82-4ff3-97de-514ae3000ee0 --yes","resend domains delete 4dd369bc-aa82-4ff3-97de-514ae3000ee0 --yes --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await J(e,De,i);await z(r.id,!!t.yes,{confirmMessage:`Delete domain "${r.label}"?
|
|
632
632
|
ID: ${r.id}
|
|
633
|
-
This cannot be undone.`,loading:"Deleting domain...",object:"domain",successMsg:"Domain deleted",sdkCall:n=>n.domains.remove(r.id)},i)});var
|
|
633
|
+
This cannot be undone.`,loading:"Deleting domain...",object:"domain",successMsg:"Domain deleted",sdkCall:n=>n.domains.remove(r.id)},i)});var Ec=new c("get").description("Retrieve a domain with its DNS records and current verification status").argument("[id]","Domain ID").addHelpText("after",d({output:` Full domain object including records array and current status.
|
|
634
634
|
|
|
635
|
-
Domain status values: not_started | pending | verified | failed | partially_verified | partially_failed`,errorCodes:["auth_error","fetch_error"],examples:["resend domains get 4dd369bc-aa82-4ff3-97de-514ae3000ee0","resend domains get 4dd369bc-aa82-4ff3-97de-514ae3000ee0 --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,De,i);await
|
|
636
|
-
DNS Records:`),console.log(li(n.records,n.name)))}},i)});var
|
|
637
|
-
The list response does not include DNS records \u2014 use "resend domains get <id>" for that.`,errorCodes:["auth_error","invalid_limit","list_error"],examples:["resend domains list","resend domains list --limit 25 --json","resend domains list --after <cursor> --json"]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=
|
|
638
|
-
Poll the status with: resend domains get <id>`,output:' {"object":"domain","id":"<id>"}',errorCodes:["auth_error","verify_error"],examples:["resend domains verify 4dd369bc-aa82-4ff3-97de-514ae3000ee0","resend domains verify 4dd369bc-aa82-4ff3-97de-514ae3000ee0 --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,De,i);await
|
|
635
|
+
Domain status values: not_started | pending | verified | failed | partially_verified | partially_failed`,errorCodes:["auth_error","fetch_error"],examples:["resend domains get 4dd369bc-aa82-4ff3-97de-514ae3000ee0","resend domains get 4dd369bc-aa82-4ff3-97de-514ae3000ee0 --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,De,i);await E({loading:"Fetching domain...",sdkCall:n=>n.domains.get(r),onInteractive:n=>{console.log(`${n.name} \u2014 ${wa(n.status)}`),console.log(`ID: ${n.id}`),console.log(`Region: ${n.region}`),console.log(`Created: ${n.created_at}`),n.open_tracking!==void 0&&console.log(`Open tracking: ${n.open_tracking?"enabled":"disabled"}`),n.click_tracking!==void 0&&console.log(`Click tracking: ${n.click_tracking?"enabled":"disabled"}`),n.tracking_subdomain&&console.log(`Tracking subdomain: ${n.tracking_subdomain}`),n.records.length>0&&(console.log(`
|
|
636
|
+
DNS Records:`),console.log(li(n.records,n.name)))}},i)});var Bc=new c("list").alias("ls").description("List all domains").option("--limit <n>","Maximum number of domains to return (1-100)","10").option("--after <cursor>","Return domains after this cursor (next page)").option("--before <cursor>","Return domains before this cursor (previous page)").addHelpText("after",d({output:` {"object":"list","data":[...],"has_more":true}
|
|
637
|
+
The list response does not include DNS records \u2014 use "resend domains get <id>" for that.`,errorCodes:["auth_error","invalid_limit","list_error"],examples:["resend domains list","resend domains list --limit 25 --json","resend domains list --after <cursor> --json"]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=I(e.limit,o),r=G(i,e.after,e.before,o);await k({loading:"Fetching domains...",sdkCall:n=>n.domains.list(r),onInteractive:n=>{console.log(xa(n.data)),j(n,"domains list",{limit:i,before:e.before,apiKey:o.apiKey,profile:o.profile})}},o)});var Ic=new c("update").description("Update domain settings: TLS mode, tracking, and tracking subdomain").argument("[id]","Domain ID").addOption(new M("--tls <mode>","TLS mode").choices(["opportunistic","enforced"])).option("--open-tracking","Enable open tracking").option("--no-open-tracking","Disable open tracking").option("--click-tracking","Enable click tracking").option("--no-click-tracking","Disable click tracking").option("--tracking-subdomain <subdomain>","Subdomain for click and open tracking (e.g. track)").addHelpText("after",d({output:' {"object":"domain","id":"<id>"}',errorCodes:["auth_error","no_changes","update_error"],examples:["resend domains update <id> --tls enforced","resend domains update <id> --open-tracking --click-tracking","resend domains update <id> --tracking-subdomain track","resend domains update <id> --no-open-tracking --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,De,i),{tls:n,openTracking:s,clickTracking:a,trackingSubdomain:l}=t;!n&&s===void 0&&a===void 0&&!l&&h({message:"Provide at least one option to update: --tls, --open-tracking, --click-tracking, or --tracking-subdomain.",code:"no_changes"},{json:i.json});let u={id:r};n&&(u.tls=n),s!==void 0&&(u.openTracking=s),a!==void 0&&(u.clickTracking=a),l&&(u.trackingSubdomain=l),await R({loading:"Updating domain...",sdkCall:m=>m.domains.update(u),errorCode:"update_error",successMsg:`Domain updated: ${r}`},i)});var jc=new c("verify").description("Trigger async DNS verification for a domain").argument("[id]","Domain ID").addHelpText("after",d({context:`Verification is async \u2014 the domain enters "pending" status while DNS records are checked.
|
|
638
|
+
Poll the status with: resend domains get <id>`,output:' {"object":"domain","id":"<id>"}',errorCodes:["auth_error","verify_error"],examples:["resend domains verify 4dd369bc-aa82-4ff3-97de-514ae3000ee0","resend domains verify 4dd369bc-aa82-4ff3-97de-514ae3000ee0 --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,De,i);await R({loading:"Verifying domain...",sdkCall:n=>n.domains.verify(r),errorCode:"verify_error",successMsg:`Domain verification started. Check status with resend domains get ${r}.`},i)});var Pc=new c("domains").description("Manage verified sending and receiving domains").addHelpText("after",d({context:`Domain lifecycle:
|
|
639
639
|
1. resend domains create --name example.com (get DNS records)
|
|
640
640
|
2. Configure DNS records at your DNS provider
|
|
641
641
|
3. resend domains verify <id> (trigger verification)
|
|
642
|
-
4. resend domains get <id> (poll until "verified")`,examples:["resend domains list","resend domains create --name example.com --region us-east-1","resend domains verify 4dd369bc-aa82-4ff3-97de-514ae3000ee0","resend domains get 4dd369bc-aa82-4ff3-97de-514ae3000ee0","resend domains update <id> --tls enforced --open-tracking","resend domains delete <id> --yes","resend domains claim create --name example.com"]})).addCommand(Tc).addCommand(jc).addCommand(
|
|
643
|
-
resend emails attachment <emailId> <attachmentId> --json | jq -r .download_url | xargs curl -O`,output:' {"object":"attachment","id":"<uuid>","filename":"invoice.pdf","size":51200,"content_type":"application/pdf","content_disposition":"attachment","content_id":null,"download_url":"<signed-url>","expires_at":"<date>"}',errorCodes:["auth_error","fetch_error"],examples:["resend emails attachment <email-id> <attachment-id>","resend emails attachment <email-id> <attachment-id> --json"]})).action(async(e,t,o,i)=>{let r=i.optsWithGlobals(),n=await g(e,qe,r),s=await g(t,$c(n),r);await
|
|
642
|
+
4. resend domains get <id> (poll until "verified")`,examples:["resend domains list","resend domains create --name example.com --region us-east-1","resend domains verify 4dd369bc-aa82-4ff3-97de-514ae3000ee0","resend domains get 4dd369bc-aa82-4ff3-97de-514ae3000ee0","resend domains update <id> --tls enforced --open-tracking","resend domains delete <id> --yes","resend domains claim create --name example.com"]})).addCommand(Tc).addCommand(jc).addCommand(Ec).addCommand(Bc,{isDefault:!0}).addCommand(Ic).addCommand(Oc).addCommand(Dc);var qe={resource:"email",resourcePlural:"emails",fetchItems:(e,{limit:t,after:o})=>e.emails.list({limit:t,...o&&{after:o}}),display:e=>({label:e.subject||"(no subject)",hint:e.id})};function $c(e){return{resource:"attachment",resourcePlural:"attachments",fetchItems:(t,{limit:o,after:i})=>t.emails.attachments.list({emailId:e,limit:o,...i&&{after:i}}),display:t=>({label:t.filename??"(unnamed)",hint:t.id})}}function vi(e){let t=e.map(o=>[o.filename??"(unnamed)",o.content_type,String(o.size),o.id]);return _(["Filename","Content-Type","Size (bytes)","ID"],t,"(no attachments)")}var Gc=new c("attachment").description("Retrieve a single attachment from a sent (outbound) email").argument("[emailId]","Email UUID").argument("[attachmentId]","Attachment UUID").addHelpText("after",d({context:`The download_url is a signed URL that expires in ~1 hour. Download the file directly:
|
|
643
|
+
resend emails attachment <emailId> <attachmentId> --json | jq -r .download_url | xargs curl -O`,output:' {"object":"attachment","id":"<uuid>","filename":"invoice.pdf","size":51200,"content_type":"application/pdf","content_disposition":"attachment","content_id":null,"download_url":"<signed-url>","expires_at":"<date>"}',errorCodes:["auth_error","fetch_error"],examples:["resend emails attachment <email-id> <attachment-id>","resend emails attachment <email-id> <attachment-id> --json"]})).action(async(e,t,o,i)=>{let r=i.optsWithGlobals(),n=await g(e,qe,r),s=await g(t,$c(n),r);await E({loading:"Fetching attachment...",sdkCall:a=>a.emails.attachments.get({emailId:n,id:s}),onInteractive:a=>{console.log(`${a.filename??"(unnamed)"}`),console.log(`ID: ${a.id}`),console.log(`Content-Type: ${a.content_type}`),console.log(`Size: ${a.size} bytes`),console.log(`Disposition: ${a.content_disposition}`),console.log(`Download URL: ${a.download_url}`),console.log(`Expires: ${a.expires_at}`)}},r)});var Hc=new c("attachments").description("List attachments on a sent (outbound) email").argument("[emailId]","Email UUID").option("--limit <n>","Maximum number of attachments to return (1-100)","10").option("--after <cursor>","Return attachments after this cursor (next page)").option("--before <cursor>","Return attachments before this cursor (previous page)").addHelpText("after",d({context:`Each attachment has a download_url (signed, expires ~1 hour).
|
|
644
644
|
Use the attachment sub-command to retrieve a single attachment with its download URL:
|
|
645
645
|
resend emails attachment <emailId> <attachmentId>
|
|
646
646
|
|
|
647
647
|
content_disposition: "inline" means the attachment is embedded in the HTML body (e.g. an image).
|
|
648
|
-
content_disposition: "attachment" means it is a standalone file download.`,output:' {"object":"list","has_more":false,"data":[{"id":"<uuid>","filename":"invoice.pdf","size":51200,"content_type":"application/pdf","content_disposition":"attachment","content_id":null,"download_url":"<url>","expires_at":"<date>"}]}',errorCodes:["auth_error","invalid_limit","list_error"],examples:["resend emails attachments <email-id>","resend emails attachments <email-id> --json","resend emails attachments <email-id> --limit 25 --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,qe,i),n=
|
|
648
|
+
content_disposition: "attachment" means it is a standalone file download.`,output:' {"object":"list","has_more":false,"data":[{"id":"<uuid>","filename":"invoice.pdf","size":51200,"content_type":"application/pdf","content_disposition":"attachment","content_id":null,"download_url":"<url>","expires_at":"<date>"}]}',errorCodes:["auth_error","invalid_limit","list_error"],examples:["resend emails attachments <email-id>","resend emails attachments <email-id> --json","resend emails attachments <email-id> --limit 25 --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,qe,i),n=I(t.limit,i),s=G(n,t.after,t.before,i);await k({loading:"Fetching attachments...",sdkCall:a=>a.emails.attachments.list({emailId:r,...s}),onInteractive:a=>{console.log(vi(a.data)),j(a,`emails attachments ${r}`,{limit:n,before:t.before,apiKey:i.apiKey,profile:i.profile})}},i)});X();var Qc=new c("batch").description("Send up to 100 emails in a single API request from a JSON file").option("--file <path>",'Path to a JSON file containing an array of email objects (use "-" for stdin; required in non-interactive mode)').option("--react-email <path>","Path to a React Email template (.tsx) \u2014 rendered HTML is set on every email in the batch").option("--idempotency-key <key>","Deduplicate this batch request using this key").addOption(new M("--batch-validation <mode>","Validation mode: strict (default, fail all on error) or permissive (partial success)").choices(["strict","permissive"])).addHelpText("after",d({context:`Non-interactive: --file
|
|
649
649
|
Limit: 100 emails per request (API hard limit \u2014 warned if exceeded)
|
|
650
650
|
Unsupported per-email fields: attachments
|
|
651
651
|
|
|
@@ -654,26 +654,26 @@ File format (--file path):
|
|
|
654
654
|
{"from":"onboarding@resend.dev","to":["delivered@resend.dev"],"subject":"Hello","text":"Hi"},
|
|
655
655
|
{"from":"onboarding@resend.dev","to":["delivered@resend.dev"],"subject":"Hello","html":"<b>Hi</b>","scheduled_at":"in 1 hour","tags":[{"name":"campaign","value":"welcome"}]}
|
|
656
656
|
]`,output:' [{"id":"<email-id>"},{"id":"<email-id>"}]',errorCodes:["auth_error","missing_file","file_read_error","stdin_read_error","invalid_json","invalid_format","react_email_build_error","react_email_render_error","batch_error"],examples:["resend emails batch --file ./emails.json","resend emails batch --file ./emails.json --batch-validation permissive",`echo '[{"from":"onboarding@resend.dev","to":["delivered@resend.dev"],"subject":"Hi","text":"Hello"}]' | resend emails batch --file -`]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=await ee(o,{permission:"sending_access"}),r=await T(e.file,{message:"Path to JSON file",placeholder:"./emails.json"},{message:"Missing --file flag. Provide a JSON file with an array of email objects.",code:"missing_file"},o),n=ie(r,o),s;try{s=JSON.parse(n)}catch{h({message:"File content is not valid JSON.",code:"invalid_json"},{json:o.json})}Array.isArray(s)||h({message:"File content must be a JSON array of email objects.",code:"invalid_format"},{json:o.json});let a=s;if(a.length>100&&console.warn(`Warning: ${a.length} emails exceeds the 100-email limit. The API may reject this request.`),e.reactEmail){let f=await Me(e.reactEmail,o);for(let y of a)y.html=f}let l={reply_to:"replyTo",scheduled_at:"scheduledAt",topic_id:"topicId"};for(let f=0;f<a.length;f++){let y=a[f];(y===null||typeof y!="object"||Array.isArray(y))&&h({message:`Email at index ${f} must be a JSON object.`,code:"invalid_format"},{json:o.json}),"attachments"in y&&h({message:`Email at index ${f} contains "attachments", which is not supported in batch sends.`,code:"batch_error"},{json:o.json});let A=y;for(let[b,x]of Object.entries(l))b in A&&(A[x]??=A[b],delete A[b])}let u=await ce("Sending batch...",()=>{let f={...e.idempotencyKey&&{idempotencyKey:e.idempotencyKey},...e.batchValidation&&{batchValidation:e.batchValidation}};return i.batch.send(a,Object.keys(f).length>0?f:void 0)},"batch_error",o),m=u.data,p=u.errors;if(!o.json&&w()){console.log(`Sent ${m.length} email${m.length===1?"":"s"}`);for(let f of m)console.log(` ${f.id}`);if(p&&p.length>0){console.warn(`
|
|
657
|
-
${p.length} email${p.length===1?"":"s"} failed:`);for(let f of p)console.warn(` [${f.index}] ${f.message}`)}}else N(p&&p.length>0?{data:m,errors:p}:m,{json:o.json})});var Nc=new c("cancel").description("Cancel a scheduled email").argument("[id]","Email ID").addHelpText("after",d({output:' {"object":"email","id":"<email-id>"}',errorCodes:["auth_error","cancel_error"],examples:["resend emails cancel <email-id>","resend emails cancel <email-id> --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,qe,i);await
|
|
658
|
-
resend emails receiving attachment <emailId> <attachmentId> --json | jq -r .download_url | xargs curl -O`,output:' {"object":"attachment","id":"<uuid>","filename":"invoice.pdf","size":51200,"content_type":"application/pdf","content_disposition":"attachment","content_id":null,"download_url":"<signed-url>","expires_at":"<date>"}',errorCodes:["auth_error","fetch_error"],examples:["resend emails receiving attachment <email-id> <attachment-id>","resend emails receiving attachment <email-id> <attachment-id> --json"]})).action(async(e,t,o,i)=>{let r=i.optsWithGlobals(),n=await g(e,xt,r),s=await g(t,Wc(n),r);await
|
|
657
|
+
${p.length} email${p.length===1?"":"s"} failed:`);for(let f of p)console.warn(` [${f.index}] ${f.message}`)}}else N(p&&p.length>0?{data:m,errors:p}:m,{json:o.json})});var Nc=new c("cancel").description("Cancel a scheduled email").argument("[id]","Email ID").addHelpText("after",d({output:' {"object":"email","id":"<email-id>"}',errorCodes:["auth_error","cancel_error"],examples:["resend emails cancel <email-id>","resend emails cancel <email-id> --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,qe,i);await R({loading:"Cancelling email...",sdkCall:n=>n.emails.cancel(r),errorCode:"cancel_error",successMsg:`Email cancelled: ${r}`},i)});var Mc=new c("get").description("Retrieve a sent email by ID").argument("[id]","Email ID").addHelpText("after",d({output:' {"object":"email","id":"<uuid>","message_id":"<111-222-333@email.example.com>","from":"onboarding@resend.dev","to":["delivered@resend.dev"],"subject":"Hello","html":"<p>Hi</p>","text":"Hi","last_event":"delivered","created_at":"<date>","scheduled_at":null,"bcc":null,"cc":null,"reply_to":null}',errorCodes:["auth_error","fetch_error"],examples:["resend emails get <email-id>","resend emails get <email-id> --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,qe,i);await E({loading:"Fetching email...",sdkCall:n=>n.emails.get(r),onInteractive:n=>{console.log(`From: ${n.from}`),console.log(`To: ${n.to.join(", ")}`),console.log(`Subject: ${n.subject}`),console.log(`Message-ID: ${n.message_id}`),console.log(`Status: ${n.last_event}`),console.log(`Date: ${n.created_at}`),n.scheduled_at&&console.log(`Scheduled: ${n.scheduled_at}`)}},i)});function sg(e){let t=e.map(o=>{let i=o.to.join(", "),r=i.length>40?`${i.slice(0,37)}...`:i,n=o.subject.length>50?`${o.subject.slice(0,47)}...`:o.subject;return[o.from,r,n,o.last_event??"\u2014",o.created_at,o.id]});return _(["From","To","Subject","Status","Created","ID"],t,"(no sent emails)")}var qc=new c("list").alias("ls").description('List sent emails \u2014 returns summary (use "get <id>" for full details)').option("--limit <n>","Maximum number of emails to return (1-100)","10").option("--after <cursor>","Cursor for forward pagination \u2014 list items after this ID").option("--before <cursor>","Cursor for backward pagination \u2014 list items before this ID").addHelpText("after",d({context:"Lists emails sent by your team. For emails received by your domain, use: resend emails receiving list",output:' {"object":"list","has_more":false,"data":[{"id":"...","message_id":"<111-222-333@email.example.com>","to":["..."],"from":"...","subject":"...","created_at":"...","last_event":"delivered|opened|...","scheduled_at":null}]}',errorCodes:["auth_error","invalid_limit","list_error"],examples:["resend emails list","resend emails list --limit 5","resend emails list --after <email-id> --limit 10","resend emails list --json"]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=I(e.limit,o),r=G(i,e.after,e.before,o);await k({loading:"Fetching sent emails...",sdkCall:n=>n.emails.list(r),onInteractive:n=>{console.log(sg(n.data)),j(n,"emails list",{limit:i,before:e.before,apiKey:o.apiKey,profile:o.profile})}},o)});function So(e){if(e!==void 0)return e.split(",").map(t=>t.trim()).filter(t=>t.length>0)}function ag(e){let t=Object.entries(e).map(([o,i])=>[o,String(i)]);return _(["Metric","Value"],t,"(no metrics)")}function lg(e,t){let i=[...Object.keys(e[0]??{}).filter(n=>!t.includes(n)),...t],r=e.map(n=>i.map(s=>String(n[s]??"")));return _(i,r,"(no breakdown rows)")}var Lc=new c("metrics").description("Retrieve account-level email metrics").option("--start-date <date>","ISO 8601 date/datetime, defaults to 6 days before --end-date").option("--end-date <date>","ISO 8601 date/datetime, defaults to now").option("--timezone <tz>","IANA timezone, e.g. America/New_York, defaults to UTC").addOption(new M("--granularity <granularity>",'Bucket size used when "period" is a dimension (default: daily)').choices(["hourly","daily","weekly","monthly"])).option("--metrics <list>","Comma-separated metrics to include, defaults to all").option("--dimensions <list>","Comma-separated dimensions to break down by: period, domain, email, broadcast").option("--domain-id <list>","Comma-separated sending domain IDs (max 100)").option("--email-id <list>",'Comma-separated email IDs (max 100). Cannot be combined with the "broadcast" dimension or --broadcast-id').option("--broadcast-id <list>",'Comma-separated broadcast IDs (max 100). Cannot be combined with the "email" dimension or --email-id').addHelpText("after",d({output:' {"object":"metrics","start_date":"...","end_date":"...","metrics":["sent","delivered"],"dimensions":[],"granularity":"daily","totals":{"sent":100,"delivered":95}}',errorCodes:["auth_error","invalid_options","fetch_error"],examples:["resend emails metrics","resend emails metrics --start-date 2026-07-01 --end-date 2026-07-08","resend emails metrics --dimensions period,broadcast --broadcast-id <broadcast-id>","resend emails metrics --json"]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=So(e.dimensions),r=So(e.emailId),n=So(e.broadcastId),s=(i?.includes("email")??!1)||e.emailId!==void 0,a=(i?.includes("broadcast")??!1)||e.broadcastId!==void 0;s&&a&&h({message:'The "broadcast" dimension/--broadcast-id cannot be combined with the "email" dimension/--email-id.',code:"invalid_options"},{json:o.json});let l=So(e.metrics);await E({loading:"Fetching email metrics...",sdkCall:u=>u.emails.metrics({startDate:e.startDate,endDate:e.endDate,timezone:e.timezone,granularity:e.granularity,metrics:l,dimensions:i,domainId:So(e.domainId),emailId:r,broadcastId:n}),onInteractive:u=>{console.log(`Metrics for ${u.start_date} to ${u.end_date} (${u.granularity} granularity)`),console.log(),console.log("Totals:"),console.log(ag(u.totals)),u.data&&u.data.length>0&&(console.log(),console.log(`Breakdown by ${u.dimensions.join(", ")}:`),console.log(lg(u.data,u.metrics)))}},o)});var xt={resource:"received email",resourcePlural:"received emails",fetchItems:(e,{limit:t,after:o})=>e.emails.receiving.list({limit:t,...o&&{after:o}}),display:e=>({label:e.subject||"(no subject)",hint:e.id})};function Wc(e){return{resource:"attachment",resourcePlural:"attachments",fetchItems:(t,{limit:o,after:i})=>t.emails.receiving.attachments.list({emailId:e,limit:o,...i&&{after:i}}),display:t=>({label:t.filename??"(unnamed)",hint:t.id})}}function Jc(e){let t=e.map(o=>{let i=o.to.join(", "),r=i.length>40?`${i.slice(0,37)}...`:i,n=o.subject.length>50?`${o.subject.slice(0,47)}...`:o.subject;return[o.from,r,n,o.created_at,o.id]});return _(["From","To","Subject","Created At","ID"],t,"(no received emails)")}var Vc=new c("attachment").description("Retrieve a single attachment from a received (inbound) email").argument("[emailId]","Received email UUID").argument("[attachmentId]","Attachment UUID").addHelpText("after",d({context:`The download_url is a signed URL that expires in ~1 hour. Download the file directly:
|
|
658
|
+
resend emails receiving attachment <emailId> <attachmentId> --json | jq -r .download_url | xargs curl -O`,output:' {"object":"attachment","id":"<uuid>","filename":"invoice.pdf","size":51200,"content_type":"application/pdf","content_disposition":"attachment","content_id":null,"download_url":"<signed-url>","expires_at":"<date>"}',errorCodes:["auth_error","fetch_error"],examples:["resend emails receiving attachment <email-id> <attachment-id>","resend emails receiving attachment <email-id> <attachment-id> --json"]})).action(async(e,t,o,i)=>{let r=i.optsWithGlobals(),n=await g(e,xt,r),s=await g(t,Wc(n),r);await E({loading:"Fetching attachment...",sdkCall:a=>a.emails.receiving.attachments.get({emailId:n,id:s}),onInteractive:a=>{console.log(`${a.filename??"(unnamed)"}`),console.log(`ID: ${a.id}`),console.log(`Content-Type: ${a.content_type}`),console.log(`Size: ${a.size} bytes`),console.log(`Disposition: ${a.content_disposition}`),console.log(`Download URL: ${a.download_url}`),console.log(`Expires: ${a.expires_at}`)}},r)});var zc=new c("attachments").description("List attachments on a received (inbound) email").argument("[emailId]","Received email UUID").option("--limit <n>","Maximum number of attachments to return (1-100)","10").option("--after <cursor>","Return attachments after this cursor (next page)").option("--before <cursor>","Return attachments before this cursor (previous page)").addHelpText("after",d({context:`Each attachment has a download_url (signed, expires ~1 hour).
|
|
659
659
|
Use the attachment sub-command to retrieve a single attachment with its download URL:
|
|
660
660
|
resend emails receiving attachment <emailId> <attachmentId>
|
|
661
661
|
|
|
662
662
|
content_disposition: "inline" means the attachment is embedded in the HTML body (e.g. an image).
|
|
663
|
-
content_disposition: "attachment" means it is a standalone file download.`,output:' {"object":"list","has_more":false,"data":[{"id":"<uuid>","filename":"invoice.pdf","size":51200,"content_type":"application/pdf","content_disposition":"attachment","content_id":null,"download_url":"<url>","expires_at":"<date>"}]}',errorCodes:["auth_error","invalid_limit","list_error"],examples:["resend emails receiving attachments <email-id>","resend emails receiving attachments <email-id> --json","resend emails receiving attachments <email-id> --limit 25 --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,xt,i),n=
|
|
664
|
-
Forwards the original email content (passthrough mode).`,output:' {"id":"<email-id>"}',errorCodes:["auth_error","create_error"],examples:["resend emails receiving forward <email-id> --to delivered@resend.dev --from onboarding@resend.dev","resend emails receiving forward <email-id> --to delivered@resend.dev --from onboarding@resend.dev --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,xt,i);await
|
|
663
|
+
content_disposition: "attachment" means it is a standalone file download.`,output:' {"object":"list","has_more":false,"data":[{"id":"<uuid>","filename":"invoice.pdf","size":51200,"content_type":"application/pdf","content_disposition":"attachment","content_id":null,"download_url":"<url>","expires_at":"<date>"}]}',errorCodes:["auth_error","invalid_limit","list_error"],examples:["resend emails receiving attachments <email-id>","resend emails receiving attachments <email-id> --json","resend emails receiving attachments <email-id> --limit 25 --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,xt,i),n=I(t.limit,i),s=G(n,t.after,t.before,i);await k({loading:"Fetching attachments...",sdkCall:a=>a.emails.receiving.attachments.list({emailId:r,...s}),onInteractive:a=>{console.log(vi(a.data)),j(a,`emails receiving attachments ${r}`,{limit:n,before:t.before,apiKey:i.apiKey,profile:i.profile})}},i)});var Yc=new c("forward").description("Forward a received email").argument("[id]","Received email ID").requiredOption("--to <addresses...>","Recipient address(es)").requiredOption("--from <address>","Sender address").addHelpText("after",d({context:`Required: --to, --from
|
|
664
|
+
Forwards the original email content (passthrough mode).`,output:' {"id":"<email-id>"}',errorCodes:["auth_error","create_error"],examples:["resend emails receiving forward <email-id> --to delivered@resend.dev --from onboarding@resend.dev","resend emails receiving forward <email-id> --to delivered@resend.dev --from onboarding@resend.dev --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,xt,i);await B({loading:"Forwarding email...",sdkCall:n=>n.emails.receiving.forward({emailId:r,to:t.to,from:t.from}),onInteractive:n=>{console.log(`Email forwarded: ${n.id}`)}},i)});var Xc=new c("get").description("Retrieve a single received (inbound) email with full details including HTML, text, and headers").argument("[id]","Received email UUID").addHelpText("after",d({context:`The raw.download_url field is a signed URL (expires ~1 hour) containing the full RFC 2822
|
|
665
665
|
MIME message. Pipe it to curl to save the original email:
|
|
666
666
|
resend emails receiving get <id> --json | jq -r .raw.download_url | xargs curl > email.eml
|
|
667
667
|
|
|
668
668
|
Attachments are listed in the attachments array. Use the attachments sub-command to get
|
|
669
669
|
download URLs:
|
|
670
|
-
resend emails receiving attachments <id>`,output:' {"object":"email","id":"<uuid>","to":["inbox@example.com"],"from":"sender@external.com","subject":"Hello","html":"<p>Hello!</p>","text":"Hello!","headers":{"x-mailer":"..."},"message_id":"<str>","bcc":[],"cc":[],"reply_to":[],"raw":{"download_url":"<url>","expires_at":"<date>"},"attachments":[]}',errorCodes:["auth_error","fetch_error"],examples:["resend emails receiving get <email-id>","resend emails receiving get <email-id> --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,xt,i);await
|
|
670
|
+
resend emails receiving attachments <id>`,output:' {"object":"email","id":"<uuid>","to":["inbox@example.com"],"from":"sender@external.com","subject":"Hello","html":"<p>Hello!</p>","text":"Hello!","headers":{"x-mailer":"..."},"message_id":"<str>","bcc":[],"cc":[],"reply_to":[],"raw":{"download_url":"<url>","expires_at":"<date>"},"attachments":[]}',errorCodes:["auth_error","fetch_error"],examples:["resend emails receiving get <email-id>","resend emails receiving get <email-id> --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,xt,i);await E({loading:"Fetching received email...",sdkCall:n=>n.emails.receiving.get(r),onInteractive:n=>{if(console.log(`From: ${n.from}`),console.log(`To: ${n.to.join(", ")}`),console.log(`Subject: ${n.subject}`),console.log(`Date: ${n.created_at}`),n.attachments.length>0&&console.log(`Files: ${n.attachments.length} attachment(s)`),n.text){let s=n.text.length>200?`${n.text.slice(0,197)}...`:n.text;console.log(`${s}`)}else n.html&&console.log(`
|
|
671
671
|
(HTML body only \u2014 use --json to view or pipe to a browser)`)}},i)});var Zc=new c("list").alias("ls").description("List received (inbound) emails for domains with receiving enabled").option("--limit <n>","Maximum number of emails to return (1-100)","10").option("--after <cursor>","Return emails after this cursor (next page)").option("--before <cursor>","Return emails before this cursor (previous page)").addHelpText("after",d({context:`Receiving must be enabled on the domain first:
|
|
672
672
|
resend domains update <id> --receiving enabled
|
|
673
673
|
|
|
674
674
|
Pagination: use --after or --before with a received email ID as the cursor.
|
|
675
675
|
Only one of --after or --before may be used at a time.
|
|
676
|
-
The response includes has_more: true when additional pages exist.`,output:' {"object":"list","has_more":false,"data":[{"id":"<uuid>","to":["inbox@example.com"],"from":"sender@external.com","subject":"Hello","created_at":"<date>","message_id":"<str>","bcc":null,"cc":null,"reply_to":null,"attachments":[]}]}',errorCodes:["auth_error","invalid_limit","list_error"],examples:["resend emails receiving list","resend emails receiving list --limit 25 --json","resend emails receiving list --after <email-id> --json"]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=
|
|
676
|
+
The response includes has_more: true when additional pages exist.`,output:' {"object":"list","has_more":false,"data":[{"id":"<uuid>","to":["inbox@example.com"],"from":"sender@external.com","subject":"Hello","created_at":"<date>","message_id":"<str>","bcc":null,"cc":null,"reply_to":null,"attachments":[]}]}',errorCodes:["auth_error","invalid_limit","list_error"],examples:["resend emails receiving list","resend emails receiving list --limit 25 --json","resend emails receiving list --after <email-id> --json"]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=I(e.limit,o),r=G(i,e.after,e.before,o);await k({loading:"Fetching received emails...",sdkCall:n=>n.emails.receiving.list(r),onInteractive:n=>{console.log(Jc(n.data)),j(n,"emails receiving list",{limit:i,before:e.before,apiKey:o.apiKey,profile:o.profile})}},o)});var at=me(Je(),1);X();var ed=(e=1e4)=>{if(!Number.isInteger(e)||e<1)throw new RangeError(`maxSize must be a positive integer, got ${e}`);let t=new Map,o=()=>{let i=t.keys().next();i.done||t.delete(i.value)};return{has:i=>t.has(i)?(t.delete(i),t.set(i,!0),!0):!1,add:i=>{if(t.has(i)){t.delete(i),t.set(i,!0);return}t.size>=e&&o(),t.set(i,!0)},size:()=>t.size}};var Nr=100,td=5,Mr=()=>new Date().toLocaleTimeString("en-GB",{hour12:!1}),cg=(e,t)=>{if(t)console.log(JSON.stringify(e));else{let o=e.to.map(Fe).join(", "),i=at.default.dim(`[${Mr()}]`),r=Fe(e.subject),n=r.length>50?`${r.slice(0,47)}...`:r,s=Fe(e.from),a=Fe(e.id);process.stderr.write(`${i} ${s} -> ${o} ${at.default.bold(`"${n}"`)} ${at.default.dim(a)}
|
|
677
677
|
`)}},dg=(e,t)=>{let o=e.findIndex(i=>t.has(i.id));return o===-1?{newEmails:e,foundSeen:!1}:{newEmails:e.slice(0,o),foundSeen:!0}},od=new c("listen").description("Poll for new inbound emails and display them as they arrive").option("--interval <seconds>","Polling interval in seconds (minimum 2)","5").addHelpText("after",d({context:`Long-running command that polls the receiving API at a fixed
|
|
678
678
|
interval and prints each new email as it arrives.
|
|
679
679
|
|
|
@@ -695,13 +695,13 @@ Attachments: --attachment takes a local path or https:// URL plus optional ;cid=
|
|
|
695
695
|
URL attachments are fetched by the API after send: an unreachable URL fails the email (check \`emails get <id>\`), and filename/MIME type are not derived from the URL \u2014 pass ;filename= and ;type=.
|
|
696
696
|
Use --dry-run to print the request JSON without sending (attachment content shows byteLength only).`,output:' {"id":"<email-id>"}',errorCodes:["auth_error","missing_body","file_read_error","invalid_options","stdin_read_error","invalid_header","invalid_tag","invalid_var","invalid_attachment","template_body_conflict","template_attachment_conflict","react_email_build_error","react_email_render_error","send_error"],examples:['resend emails send --from onboarding@resend.dev --to delivered@resend.dev --subject "Hello" --text "Hi"','resend emails send --from onboarding@resend.dev --to delivered@resend.dev --subject "Hello" --html "<b>Hi</b>"','resend emails send --from onboarding@resend.dev --to delivered@resend.dev --subject "Hello" --text "Hi" --attachment ./report.pdf','resend emails send --from onboarding@resend.dev --to delivered@resend.dev --subject "Hello" --html "<img src=cid:logo>" --attachment "./logo.png;cid=logo"','resend emails send --from onboarding@resend.dev --to delivered@resend.dev --subject "Hello" --text "Hi" --attachment "https://example.com/report.pdf;filename=report.pdf;type=application/pdf"','resend emails send --from onboarding@resend.dev --to delivered@resend.dev --subject "Hello" --text "Hi" --attachments-file ./attachments.json',"resend emails send --template tmpl_123 --to delivered@resend.dev"]})).action(async(e,t)=>{let o=t.optsWithGlobals();[e.htmlFile,e.textFile,e.attachmentsFile].filter(S=>S==="-").length>1&&h({message:'Only one of --html-file, --text-file, or --attachments-file can read from stdin ("-"). Pass the others as file paths.',code:"invalid_options"},{json:o.json}),e.from===""&&h({message:"--from cannot be empty",code:"invalid_options"},{json:o.json});let r=!!e.template;e.var&&!r&&h({message:"--var can only be used with --template",code:"invalid_var"},{json:o.json}),e.reactEmail&&(e.html||e.htmlFile||r)&&h({message:"Cannot use --react-email with --html, --html-file, or --template",code:"invalid_options"},{json:o.json}),r&&(e.html||e.htmlFile||e.text||e.textFile)&&h({message:"Cannot use --template with --html, --html-file, --text, or --text-file",code:"template_body_conflict"},{json:o.json}),r&&(e.attachment||e.attachmentsFile!==void 0)&&h({message:"Cannot use --attachment or --attachments-file with --template",code:"template_attachment_conflict"},{json:o.json});let n=e.var?Object.fromEntries(e.var.map(S=>{let K=S.indexOf("=");K<1&&h({message:`Invalid var format: "${S}". Expected key=value.`,code:"invalid_var"},{json:o.json});let O=S.slice(0,K),$=S.slice(K+1);return[O,$]})):void 0,s=e.from;if(!e.dryRun&&!s&&!r&&w()&&!o.json){let S=await ee(o,{permission:"sending_access"}),K=await pi(S);K.length>0&&(s=await fi(K))}let a=[{flag:"from",message:"From address",placeholder:"onboarding@resend.dev",defaultValue:"onboarding@resend.dev",required:!r},{flag:"to",message:"To address",placeholder:"delivered@resend.dev",defaultValue:"delivered@resend.dev"},{flag:"subject",message:"Subject",placeholder:"Hello!",defaultValue:"Hello!",required:!r}],l=await ya({from:s,to:e.to?.[0],subject:e.subject},a,o),u=e.html,m=e.text;e.htmlFile&&(e.html&&process.stderr.write(`Warning: both --html and --html-file provided; using --html-file
|
|
697
697
|
`),u=ie(e.htmlFile,o)),e.textFile&&(e.text&&process.stderr.write(`Warning: both --text and --text-file provided; using --text-file
|
|
698
|
-
`),m=ie(e.textFile,o)),e.reactEmail&&(u=await Me(e.reactEmail,o));let p=m;!r&&!e.reactEmail&&!u&&!m&&(p=await T(void 0,{message:"Email body (plain text)",placeholder:"Hello, World!",defaultValue:"Hello, World!"},{message:"Missing email body. Provide --html, --html-file, --text, --text-file, or --react-email",code:"missing_body"},o));let f=e.to??[l.to],y=e.attachment?.map(S=>{let K;try{K=nd(S)}catch($){return h({message:$.message,code:"invalid_attachment"},{json:o.json})}let O={...K.contentType&&{contentType:K.contentType},...K.contentId&&{contentId:K.contentId}};if(K.isUrl)return{path:K.source,...K.filename&&{filename:K.filename},...O};try{let $=(0,ad.readFileSync)(K.source);return{filename:K.filename??(0,ld.basename)(K.source),content:$,...O}}catch{return h({message:`Failed to read file: ${K.source}`,code:"file_read_error"},{json:o.json})}});if(e.attachmentsFile!==void 0){let S=ie(e.attachmentsFile,o);try{y=[...y??[],...sd(S)]}catch(K){h({message:K.message,code:"invalid_attachment"},{json:o.json})}}let A=e.headers?Object.fromEntries(e.headers.map(S=>{let K=S.indexOf("=");return K<1&&h({message:`Invalid header format: "${S}". Expected key=value.`,code:"invalid_header"},{json:o.json}),[S.slice(0,K),S.slice(K+1)]})):void 0,b=e.tags?.map(S=>{let K=S.indexOf("=");return K<1&&h({message:`Invalid tag format: "${S}". Expected name=value.`,code:"invalid_tag"},{json:o.json}),{name:S.slice(0,K),value:S.slice(K+1)}}),x;if(r?x={template:{id:e.template,...n&&{variables:n}},to:f,...l.from&&{from:l.from},...l.subject&&{subject:l.subject},...e.cc&&{cc:e.cc},...e.bcc&&{bcc:e.bcc},...e.replyTo&&{replyTo:e.replyTo},...e.scheduledAt&&{scheduledAt:e.scheduledAt},...A&&{headers:A},...b&&{tags:b}}:x={from:l.from,to:f,subject:l.subject,...u&&{html:u},...p&&{text:p},...e.cc&&{cc:e.cc},...e.bcc&&{bcc:e.bcc},...e.replyTo&&{replyTo:e.replyTo},...e.scheduledAt&&{scheduledAt:e.scheduledAt},...y&&{attachments:y},...A&&{headers:A},...b&&{tags:b}},e.dryRun){N({dryRun:!0,request:hg(x)},{json:o.json});return}let U=await ee(o,{permission:"sending_access"}),v=await ce(e.scheduledAt?"Scheduling email...":"Sending email...",()=>U.emails.send(x,e.idempotencyKey?{idempotencyKey:e.idempotencyKey}:void 0),"send_error",o);!o.json&&w()?e.scheduledAt?console.log(`Email scheduled: ${v.id}`):console.log(`Email sent: ${v.id}`):N(v,{json:o.json})});var qr=me(Je(),1);var dd=new c("share").description("Create a shareable link for a sent or received email").argument("[id]","Email ID").option("--expires-in <duration>",'Link expiration, e.g. "10m", "2 hours", "1 day" (max 48h, default 48h)').addHelpText("after",d({output:' {"object":"email","id":"<email-id>","url":"<share-link-url>"}',errorCodes:["auth_error","create_error"],examples:["resend emails share <email-id>",'resend emails share <email-id> --expires-in "1 day"',"resend emails share <email-id> --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,qe,i);await
|
|
698
|
+
`),m=ie(e.textFile,o)),e.reactEmail&&(u=await Me(e.reactEmail,o));let p=m;!r&&!e.reactEmail&&!u&&!m&&(p=await T(void 0,{message:"Email body (plain text)",placeholder:"Hello, World!",defaultValue:"Hello, World!"},{message:"Missing email body. Provide --html, --html-file, --text, --text-file, or --react-email",code:"missing_body"},o));let f=e.to??[l.to],y=e.attachment?.map(S=>{let K;try{K=nd(S)}catch($){return h({message:$.message,code:"invalid_attachment"},{json:o.json})}let O={...K.contentType&&{contentType:K.contentType},...K.contentId&&{contentId:K.contentId}};if(K.isUrl)return{path:K.source,...K.filename&&{filename:K.filename},...O};try{let $=(0,ad.readFileSync)(K.source);return{filename:K.filename??(0,ld.basename)(K.source),content:$,...O}}catch{return h({message:`Failed to read file: ${K.source}`,code:"file_read_error"},{json:o.json})}});if(e.attachmentsFile!==void 0){let S=ie(e.attachmentsFile,o);try{y=[...y??[],...sd(S)]}catch(K){h({message:K.message,code:"invalid_attachment"},{json:o.json})}}let A=e.headers?Object.fromEntries(e.headers.map(S=>{let K=S.indexOf("=");return K<1&&h({message:`Invalid header format: "${S}". Expected key=value.`,code:"invalid_header"},{json:o.json}),[S.slice(0,K),S.slice(K+1)]})):void 0,b=e.tags?.map(S=>{let K=S.indexOf("=");return K<1&&h({message:`Invalid tag format: "${S}". Expected name=value.`,code:"invalid_tag"},{json:o.json}),{name:S.slice(0,K),value:S.slice(K+1)}}),x;if(r?x={template:{id:e.template,...n&&{variables:n}},to:f,...l.from&&{from:l.from},...l.subject&&{subject:l.subject},...e.cc&&{cc:e.cc},...e.bcc&&{bcc:e.bcc},...e.replyTo&&{replyTo:e.replyTo},...e.scheduledAt&&{scheduledAt:e.scheduledAt},...A&&{headers:A},...b&&{tags:b}}:x={from:l.from,to:f,subject:l.subject,...u&&{html:u},...p&&{text:p},...e.cc&&{cc:e.cc},...e.bcc&&{bcc:e.bcc},...e.replyTo&&{replyTo:e.replyTo},...e.scheduledAt&&{scheduledAt:e.scheduledAt},...y&&{attachments:y},...A&&{headers:A},...b&&{tags:b}},e.dryRun){N({dryRun:!0,request:hg(x)},{json:o.json});return}let U=await ee(o,{permission:"sending_access"}),v=await ce(e.scheduledAt?"Scheduling email...":"Sending email...",()=>U.emails.send(x,e.idempotencyKey?{idempotencyKey:e.idempotencyKey}:void 0),"send_error",o);!o.json&&w()?e.scheduledAt?console.log(`Email scheduled: ${v.id}`):console.log(`Email sent: ${v.id}`):N(v,{json:o.json})});var qr=me(Je(),1);var dd=new c("share").description("Create a shareable link for a sent or received email").argument("[id]","Email ID").option("--expires-in <duration>",'Link expiration, e.g. "10m", "2 hours", "1 day" (max 48h, default 48h)').addHelpText("after",d({output:' {"object":"email","id":"<email-id>","url":"<share-link-url>"}',errorCodes:["auth_error","create_error"],examples:["resend emails share <email-id>",'resend emails share <email-id> --expires-in "1 day"',"resend emails share <email-id> --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,qe,i);await B({loading:"Creating share link...",sdkCall:n=>n.emails.share(r,t.expiresIn!==void 0?{expiresIn:t.expiresIn}:void 0),onInteractive:n=>{console.log(` ${qr.default.gray("ID:")} ${n.id}`),console.log(` ${qr.default.gray("URL:")} ${n.url}`)}},i)});var ud=new c("update").description("Update a scheduled email").argument("[id]","Email ID").requiredOption("--scheduled-at <datetime>","New scheduled date in ISO 8601 format (e.g. 2024-08-05T11:52:01.858Z)").addHelpText("after",d({context:"Required: --scheduled-at",output:' {"object":"email","id":"<email-id>"}',errorCodes:["auth_error","update_error"],examples:["resend emails update <email-id> --scheduled-at 2024-08-05T11:52:01.858Z","resend emails update <email-id> --scheduled-at 2024-08-05T11:52:01.858Z --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,qe,i);await R({loading:"Updating email...",sdkCall:n=>n.emails.update({id:r,scheduledAt:t.scheduledAt}),errorCode:"update_error",successMsg:`Email updated: ${r}`},i)});var md=new c("emails").description("Send and manage emails").addHelpText("after",d({examples:['resend emails send --from onboarding@resend.dev --to delivered@resend.dev --subject "Hello" --text "Hi"',"resend emails get <email-id>","resend emails batch --file ./emails.json","resend emails cancel <email-id>","resend emails share <email-id>","resend emails metrics","resend emails attachments <email-id>","resend emails attachment <email-id> <attachment-id>","resend emails receiving list","resend emails receiving forward <email-id> --to delivered@resend.dev --from onboarding@resend.dev"]})).addCommand(qc,{isDefault:!0}).addCommand(cd).addCommand(Mc).addCommand(Qc).addCommand(Nc).addCommand(ud).addCommand(dd).addCommand(Lc).addCommand(Hc).addCommand(Gc).addCommand(id);var gg=new Set(["string","number","boolean","date"]);function Lr(e){if(!e)return"(none)";let t=Object.entries(e);return t.length===0?"(empty)":t.map(([o,i])=>`${o}:${i}`).join(", ")}function pd(e){let t=e.map(o=>[o.name,Lr(o.schema),o.created_at,o.id]);return _(["Name","Schema","Created","ID"],t,"(no events)")}function Si(e,t){if(e==="null")return null;let o=Dt(e,"--schema",t);(typeof o!="object"||o===null||Array.isArray(o))&&h({message:"--schema must be a JSON object mapping field names to types (string | number | boolean | date).",code:"invalid_schema"},{json:t.json});for(let[i,r]of Object.entries(o))(typeof r!="string"||!gg.has(r))&&h({message:`Invalid schema type for "${i}": "${r}". Must be one of: string, number, boolean, date.`,code:"invalid_schema"},{json:t.json});return o}var Zt={resource:"event",resourcePlural:"events",fetchItems:(e,{limit:t,after:o})=>e.events.list({limit:t,...o&&{after:o}}),display:e=>({label:e.name,hint:e.id})};var fd=new c("create").description("Create a new event definition").option("--name <name>","Event name (e.g. user.signed_up)").option("--schema <json>","Schema as JSON mapping field names to types (string | number | boolean | date)").addHelpText("after",d({context:`Non-interactive: --name is required. --schema is optional.
|
|
699
699
|
|
|
700
700
|
Schema format:
|
|
701
701
|
A JSON object mapping field names to type strings.
|
|
702
702
|
Valid types: string, number, boolean, date.
|
|
703
|
-
Example: '{"plan":"string","age":"number","active":"boolean"}'`,output:' {"object":"event","id":"<id>"}',errorCodes:["auth_error","missing_name","invalid_schema","create_error"],examples:['resend events create --name "user.signed_up"',`resend events create --name "order.completed" --schema '{"amount":"number","currency":"string"}'`,'resend events create --name "user.signed_up" --json']})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=await T(e.name,{message:"Event name",placeholder:"e.g. user.signed_up"},{message:"Missing --name flag.",code:"missing_name"},o),r=e.schema?Si(e.schema,o):void 0;await
|
|
704
|
-
This cannot be undone.`,loading:"Deleting event...",object:"event",successMsg:"Event deleted",sdkCall:n=>n.events.remove(r)},i)});var gd=new c("get").description("Retrieve an event definition").argument("[id]","Event ID").addHelpText("after",d({output:" Full event object including schema.",errorCodes:["auth_error","fetch_error"],examples:["resend events get <id>","resend events get <id> --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,Zt,i);await
|
|
703
|
+
Example: '{"plan":"string","age":"number","active":"boolean"}'`,output:' {"object":"event","id":"<id>"}',errorCodes:["auth_error","missing_name","invalid_schema","create_error"],examples:['resend events create --name "user.signed_up"',`resend events create --name "order.completed" --schema '{"amount":"number","currency":"string"}'`,'resend events create --name "user.signed_up" --json']})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=await T(e.name,{message:"Event name",placeholder:"e.g. user.signed_up"},{message:"Missing --name flag.",code:"missing_name"},o),r=e.schema?Si(e.schema,o):void 0;await B({loading:"Creating event...",sdkCall:n=>n.events.create({name:i,...r!==void 0&&{schema:r}}),onInteractive:n=>{console.log(`Event created: ${n.id}`)}},o)});var hd=new c("delete").alias("rm").description("Delete an event definition").argument("[id]","Event ID").option("--yes","Skip confirmation prompt").addHelpText("after",d({context:"Non-interactive: --yes is required to confirm deletion when stdin/stdout is not a TTY.",output:' {"object":"event","id":"<id>","deleted":true}',errorCodes:["auth_error","confirmation_required","delete_error"],examples:["resend events delete <id> --yes","resend events delete <id> --yes --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,Zt,i);await z(r,!!t.yes,{confirmMessage:`Delete event ${r}?
|
|
704
|
+
This cannot be undone.`,loading:"Deleting event...",object:"event",successMsg:"Event deleted",sdkCall:n=>n.events.remove(r)},i)});var gd=new c("get").description("Retrieve an event definition").argument("[id]","Event ID").addHelpText("after",d({output:" Full event object including schema.",errorCodes:["auth_error","fetch_error"],examples:["resend events get <id>","resend events get <id> --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,Zt,i);await E({loading:"Fetching event...",sdkCall:n=>n.events.get(r),onInteractive:n=>{console.log(n.name),console.log(`ID: ${n.id}`),console.log(`Schema: ${Lr(n.schema)}`),console.log(`Created: ${n.created_at}`),n.updated_at&&console.log(`Updated: ${n.updated_at}`)}},i)});var Ad=new c("list").alias("ls").description("List all events").option("--limit <n>","Maximum number of events to return (1-100)","10").option("--after <cursor>","Return events after this cursor (next page)").option("--before <cursor>","Return events before this cursor (previous page)").addHelpText("after",d({output:' {"object":"list","data":[...],"has_more":true}',errorCodes:["auth_error","invalid_limit","list_error"],examples:["resend events list","resend events list --limit 25 --json","resend events list --after <cursor> --json"]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=I(e.limit,o),r=G(i,e.after,e.before,o);await k({loading:"Fetching events...",sdkCall:n=>n.events.list(r),onInteractive:n=>{console.log(pd(n.data)),j(n,"events list",{limit:i,before:e.before,apiKey:o.apiKey,profile:o.profile})}},o)});var bd=new c("open").description("Open the events page in the Resend dashboard").addHelpText("after",d({context:"Opens the events management page in the Resend dashboard in your default browser.",examples:["resend events open"]})).action(async(e,t)=>{let o=t.optsWithGlobals();await Te(fe.events,o)});var yd=new c("send").description("Send an event to trigger automations for a contact").option("--event <name>","Event name (e.g. user.signed_up)").option("--contact-id <id>","Contact ID (mutually exclusive with --email)").option("--email <email>","Contact email (mutually exclusive with --contact-id)").option("--payload <json>","Event payload as JSON string").addHelpText("after",d({context:`Sends an event for a specific contact, triggering any automations listening for it.
|
|
705
705
|
|
|
706
706
|
Contact targeting:
|
|
707
707
|
Provide exactly one of --contact-id or --email to identify the contact.
|
|
@@ -709,12 +709,12 @@ Contact targeting:
|
|
|
709
709
|
|
|
710
710
|
Payload:
|
|
711
711
|
Optional JSON object with event-specific data.
|
|
712
|
-
Must match the event's schema if one is defined.`,output:' {"object":"event","event":"<name>"}',errorCodes:["auth_error","missing_event","missing_contact","conflicting_contact","invalid_json","send_error"],examples:['resend events send --event "user.signed_up" --contact-id <id>','resend events send --event "user.signed_up" --email user@example.com',`resend events send --event "order.completed" --contact-id <id> --payload '{"amount":99,"currency":"usd"}'`]})).action(async(e,t)=>{let o=t.optsWithGlobals();e.contactId!==void 0&&e.email!==void 0&&h({message:"Cannot use both --contact-id and --email. Provide only one.",code:"conflicting_contact"},{json:o.json});let i=await T(e.event,{message:"Event name",placeholder:"e.g. user.signed_up"},{message:"Missing --event flag.",code:"missing_event"},o),r=e.contactId,n=e.email;!r&&!n&&(await bt(void 0,{message:"Identify contact by",options:[{value:"contact-id",label:"Contact ID"},{value:"email",label:"Email address"}]},{message:"Missing --contact-id or --email flag.",code:"missing_contact"},o)==="contact-id"?r=await T(void 0,{message:"Contact ID"},{message:"Missing contact ID.",code:"missing_contact"},o):n=await T(void 0,{message:"Email address",placeholder:"user@example.com"},{message:"Missing email.",code:"missing_contact"},o));let s=Dt(e.payload,"--payload",o),a=r?{event:i,contactId:r,...s&&{payload:s}}:{event:i,email:n,...s&&{payload:s}};await
|
|
712
|
+
Must match the event's schema if one is defined.`,output:' {"object":"event","event":"<name>"}',errorCodes:["auth_error","missing_event","missing_contact","conflicting_contact","invalid_json","send_error"],examples:['resend events send --event "user.signed_up" --contact-id <id>','resend events send --event "user.signed_up" --email user@example.com',`resend events send --event "order.completed" --contact-id <id> --payload '{"amount":99,"currency":"usd"}'`]})).action(async(e,t)=>{let o=t.optsWithGlobals();e.contactId!==void 0&&e.email!==void 0&&h({message:"Cannot use both --contact-id and --email. Provide only one.",code:"conflicting_contact"},{json:o.json});let i=await T(e.event,{message:"Event name",placeholder:"e.g. user.signed_up"},{message:"Missing --event flag.",code:"missing_event"},o),r=e.contactId,n=e.email;!r&&!n&&(await bt(void 0,{message:"Identify contact by",options:[{value:"contact-id",label:"Contact ID"},{value:"email",label:"Email address"}]},{message:"Missing --contact-id or --email flag.",code:"missing_contact"},o)==="contact-id"?r=await T(void 0,{message:"Contact ID"},{message:"Missing contact ID.",code:"missing_contact"},o):n=await T(void 0,{message:"Email address",placeholder:"user@example.com"},{message:"Missing email.",code:"missing_contact"},o));let s=Dt(e.payload,"--payload",o),a=r?{event:i,contactId:r,...s&&{payload:s}}:{event:i,email:n,...s&&{payload:s}};await R({loading:"Sending event...",sdkCall:l=>l.events.send(a),errorCode:"send_error",successMsg:`Event sent: ${i}`},o)});X();var Cd=new c("update").description("Update an event schema").argument("[id]","Event ID").option("--schema <json>",'New schema as JSON (or "null" to clear the schema)').addHelpText("after",d({context:`Non-interactive: --schema is required. Pass "null" to remove the schema.
|
|
713
713
|
|
|
714
714
|
Schema format:
|
|
715
715
|
A JSON object mapping field names to type strings.
|
|
716
716
|
Valid types: string, number, boolean, date.
|
|
717
|
-
Example: '{"plan":"string","age":"number"}'`,output:' {"object":"event","id":"<id>"}',errorCodes:["auth_error","missing_schema","invalid_schema","update_error"],examples:[`resend events update <id> --schema '{"plan":"string","age":"number"}'`,"resend events update <id> --schema null",`resend events update <id> --schema '{"plan":"string"}' --json`]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,Zt,i),n=t.schema;n===void 0&&((!w()||i.json)&&h({message:"Missing --schema flag.",code:"missing_schema"},{json:i.json}),n=await T(void 0,{message:'Schema JSON (or "null" to clear)',placeholder:'{"field":"string"}'},{message:"Missing --schema flag.",code:"missing_schema"},i));let s=Si(n,i);await
|
|
717
|
+
Example: '{"plan":"string","age":"number"}'`,output:' {"object":"event","id":"<id>"}',errorCodes:["auth_error","missing_schema","invalid_schema","update_error"],examples:[`resend events update <id> --schema '{"plan":"string","age":"number"}'`,"resend events update <id> --schema null",`resend events update <id> --schema '{"plan":"string"}' --json`]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,Zt,i),n=t.schema;n===void 0&&((!w()||i.json)&&h({message:"Missing --schema flag.",code:"missing_schema"},{json:i.json}),n=await T(void 0,{message:'Schema JSON (or "null" to clear)',placeholder:'{"field":"string"}'},{message:"Missing --schema flag.",code:"missing_schema"},i));let s=Si(n,i);await R({loading:"Updating event...",sdkCall:a=>a.events.update(r,{schema:s}),errorCode:"update_error",successMsg:`Event updated: ${r}`},i)});var xd=new c("events").description("Manage events").addHelpText("after",d({context:`Events define the signals that trigger automations.
|
|
718
718
|
Each event has a name and an optional typed schema (string | number | boolean | date fields).
|
|
719
719
|
|
|
720
720
|
Lifecycle:
|
|
@@ -723,62 +723,64 @@ Lifecycle:
|
|
|
723
723
|
3. resend events list
|
|
724
724
|
4. resend events get <id>
|
|
725
725
|
5. resend events update <id> --schema '{"plan":"string","trial":"boolean"}'
|
|
726
|
-
6. resend events delete <id> --yes`,examples:["resend events list",'resend events create --name "user.signed_up"',`resend events create --name "order.completed" --schema '{"amount":"number","currency":"string"}'`,"resend events get <id>",`resend events update <id> --schema '{"plan":"string"}'`,"resend events update <id> --schema null","resend events delete <id> --yes",'resend events send --event "user.signed_up" --contact-id <id>',`resend events send --event "user.signed_up" --email user@example.com --payload '{"plan":"pro"}'`]})).addCommand(fd).addCommand(gd).addCommand(Ad,{isDefault:!0}).addCommand(Cd).addCommand(hd).addCommand(bd).addCommand(yd);var Xd=me(Je(),1);var wd=new c("create").description("Create a new inbox at one of your verified domains").option("--
|
|
726
|
+
6. resend events delete <id> --yes`,examples:["resend events list",'resend events create --name "user.signed_up"',`resend events create --name "order.completed" --schema '{"amount":"number","currency":"string"}'`,"resend events get <id>",`resend events update <id> --schema '{"plan":"string"}'`,"resend events update <id> --schema null","resend events delete <id> --yes",'resend events send --event "user.signed_up" --contact-id <id>',`resend events send --event "user.signed_up" --email user@example.com --payload '{"plan":"pro"}'`]})).addCommand(fd).addCommand(gd).addCommand(Ad,{isDefault:!0}).addCommand(Cd).addCommand(hd).addCommand(bd).addCommand(yd);var Xd=me(Je(),1);var wd=new c("create").description("Create a new inbox at one of your verified domains").option("--email_address <address>","Email address for the inbox, e.g. support@yourdomain.com (required)").option("--name <name>","Inbox name shown in the dashboard").option("--friendly_name <name>",'Name used when sending from this inbox, e.g. "Ada from Support"').option("--forwarding","Enable forwarding \u2014 received emails are also forwarded to a generated forwarding address").addHelpText("after",d({context:`The address must belong to one of your verified domains with receiving enabled.
|
|
727
727
|
|
|
728
|
-
Non-interactive: --
|
|
728
|
+
Non-interactive: --email_address is required.`,output:' {"object":"inbox","id":"<uuid>","name":"<name>","email_address":"<address>","domain_id":"<uuid>","forwarding_address":"<address>|null","unread":0,"created_at":"<date>"}',errorCodes:["auth_error","missing_email_address","create_error"],examples:["resend inboxes create --email_address support@yourdomain.com",'resend inboxes create --email_address hello@yourdomain.com --name "Hello" --friendly_name "Team Hello" --forwarding',"resend inboxes create --email_address support@yourdomain.com --json"]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=await T(e.email_address,{message:"Inbox email address",placeholder:"e.g. support@yourdomain.com"},{message:"Missing --email_address flag.",code:"missing_email_address"},o);await B({loading:"Creating inbox...",sdkCall:r=>r.inboxes.create({emailAddress:i,...e.name&&{name:e.name},...e.friendly_name&&{friendlyName:e.friendly_name},...e.forwarding&&{forwarding:!0}}),onInteractive:r=>{console.log(`Inbox created: ${r.id}`),console.log(`Email address: ${r.email_address}`),r.forwarding_address&&console.log(`Forwarding address: ${r.forwarding_address}`)}},o)});var L={resource:"inbox",resourcePlural:"inboxes",fetchItems:(e,{limit:t,after:o})=>e.inboxes.list({limit:t,...o&&{after:o}}),display:e=>({label:e.email_address,hint:e.id})};function Ud(e){let t=e.map(o=>[o.email_address,o.name??"",String(o.unread),o.id]);return _(["Email","Name","Unread","ID"],t,"(no inboxes)")}var vd=new c("delete").alias("rm").description("Delete an inbox").argument("[id]","Inbox UUID").option("--yes","Skip the confirmation prompt (required in non-interactive mode)").addHelpText("after",d({context:`Warning: Deleting an inbox removes its threads and messages, and the address
|
|
729
729
|
stops receiving email.
|
|
730
730
|
|
|
731
731
|
Non-interactive: --yes is required to confirm deletion when stdin/stdout is not a TTY.`,output:' {"object":"inbox","id":"<uuid>","deleted":true}',errorCodes:["auth_error","confirmation_required","delete_error"],examples:["resend inboxes delete 78261eea-8f8b-4381-83c6-79fa7120f1cf --yes","resend inboxes delete 78261eea-8f8b-4381-83c6-79fa7120f1cf --yes --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await J(e,L,i);await z(r.id,!!t.yes,{confirmMessage:`Delete inbox "${r.label}"?
|
|
732
732
|
ID: ${r.id}
|
|
733
|
-
All threads and messages in this inbox will be removed.`,loading:"Deleting inbox...",object:"inbox",successMsg:"Inbox deleted",sdkCall:n=>n.inboxes.remove(r.id)},i)});var Wr=(e,t)=>[...t,e],Sd=new c("create").description("Create a draft in an inbox").option("--
|
|
734
|
-
--
|
|
733
|
+
All threads and messages in this inbox will be removed.`,loading:"Deleting inbox...",object:"inbox",successMsg:"Inbox deleted",sdkCall:n=>n.inboxes.remove(r.id)},i)});var Wr=(e,t)=>[...t,e],Sd=new c("create").description("Create a draft in an inbox").option("--inbox_id <id>","Inbox UUID").option("--to <address>","Recipient address (repeat the flag for multiple recipients)",Wr,[]).option("--cc <address>","Cc address (repeatable)",Wr,[]).option("--bcc <address>","Bcc address (repeatable)",Wr,[]).option("--subject <subject>","Draft subject").option("--text <text>","Plain text body").option("--html <html>","HTML body").option("--thread_id <thread_id>","Thread to reply to (requires --reply_to_email_id)").option("--reply_to_email_id <email_id>","Email the draft replies to (requires --thread_id)").addHelpText("after",d({context:`Creates a standalone draft, or a reply draft when --thread_id and
|
|
734
|
+
--reply_to_email_id are passed together. At least one content field
|
|
735
735
|
(--to, --cc, --bcc, --subject, --text, --html) is required.
|
|
736
736
|
|
|
737
|
-
Send the draft later with "resend inboxes drafts send".`,output:' {"object":"inbox_draft","id":"<uuid>","type":"standalone|reply","to":["<address>"]|null,"cc":[],"bcc":[],"subject":"<subject>|null","html":"<html>|null","text":"<text>|null","thread_id":"<uuid>|null","reply_to_email_id":"<uuid>|null","email_id":null,"created_at":"<date>","updated_at":"<date>"}',errorCodes:["auth_error","invalid_options","missing_content","create_error"],examples:['resend inboxes drafts create --
|
|
738
|
-
ID: ${r.id}`,loading:"Deleting draft...",object:"inbox_draft",successMsg:"Draft deleted",sdkCall:n=>n.inboxes.drafts.remove({inboxId:i,draftId:r.id})},o)});var
|
|
737
|
+
Send the draft later with "resend inboxes drafts send".`,output:' {"object":"inbox_draft","id":"<uuid>","type":"standalone|reply","to":["<address>"]|null,"cc":[],"bcc":[],"subject":"<subject>|null","html":"<html>|null","text":"<text>|null","thread_id":"<uuid>|null","reply_to_email_id":"<uuid>|null","email_id":null,"created_at":"<date>","updated_at":"<date>"}',errorCodes:["auth_error","invalid_options","missing_content","create_error"],examples:['resend inboxes drafts create --inbox_id <inbox_id> --to user@example.com --subject "Hello" --text "Draft body"','resend inboxes drafts create --inbox_id <inbox_id> --thread_id <thread_id> --reply_to_email_id <email_id> --text "Reply draft" --json']})).action(async(e,t)=>{let o=t.optsWithGlobals();!!e.thread_id!=!!e.reply_to_email_id&&h({message:"--thread_id and --reply_to_email_id must be provided together.",code:"invalid_options"},{json:o.json}),e.to.length>0||e.cc.length>0||e.bcc.length>0||e.subject!==void 0||e.text!==void 0||e.html!==void 0||h({message:"Provide at least one of --to, --cc, --bcc, --subject, --text, or --html.",code:"missing_content"},{json:o.json});let n={inboxId:await g(e.inbox_id,L,o),...e.to.length>0&&{to:e.to},...e.cc.length>0&&{cc:e.cc},...e.bcc.length>0&&{bcc:e.bcc},...e.subject!==void 0&&{subject:e.subject},...e.text!==void 0&&{text:e.text},...e.html!==void 0&&{html:e.html},...e.thread_id&&{threadId:e.thread_id,replyToEmailId:e.reply_to_email_id}};await B({loading:"Creating draft...",sdkCall:s=>s.inboxes.drafts.create(n),onInteractive:s=>{console.log(`Draft created: ${s.id}`),console.log(`Type: ${s.type}`)}},o)});function wt(e){return{resource:"draft",resourcePlural:"drafts",fetchItems:t=>t.inboxes.drafts.list({inboxId:e}).then(o=>({...o,data:o.data?{data:o.data.data,has_more:!1}:null})),display:t=>({label:t.subject??t.to?.join(", ")??"(no subject)",hint:t.id})}}function Kd(e){let t=e.map(o=>[o.to?.join(", ")??"",o.subject??"(no subject)",o.type,o.updated_at,o.id]);return _(["To","Subject","Type","Updated","ID"],t,"(no drafts)")}var kd=new c("delete").alias("rm").description("Delete a draft").option("--inbox_id <id>","Inbox UUID").option("--draft_id <id>","Draft UUID").option("--yes","Skip the confirmation prompt (required in non-interactive mode)").addHelpText("after",d({context:"Non-interactive: --yes is required to confirm deletion when stdin/stdout is not a TTY.",output:' {"object":"inbox_draft","id":"<uuid>","deleted":true}',errorCodes:["auth_error","confirmation_required","delete_error"],examples:["resend inboxes drafts delete --inbox_id <inbox_id> --draft_id <draft_id> --yes","resend inboxes drafts delete --inbox_id <inbox_id> --draft_id <draft_id> --yes --json"]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=await g(e.inbox_id,L,o),r=await J(e.draft_id,wt(i),o);await z(r.id,!!e.yes,{confirmMessage:`Delete draft "${r.label}"?
|
|
738
|
+
ID: ${r.id}`,loading:"Deleting draft...",object:"inbox_draft",successMsg:"Draft deleted",sdkCall:n=>n.inboxes.drafts.remove({inboxId:i,draftId:r.id})},o)});var _d=new c("get").description("Retrieve a draft by ID").option("--inbox_id <id>","Inbox UUID").option("--draft_id <id>","Draft UUID").addHelpText("after",d({output:' {"object":"inbox_draft","id":"<uuid>","type":"standalone|reply","to":["<address>"]|null,"cc":[],"bcc":[],"subject":"<subject>|null","html":"<html>|null","text":"<text>|null","thread_id":"<uuid>|null","reply_to_email_id":"<uuid>|null","email_id":"<uuid>|null","created_at":"<date>","updated_at":"<date>"}',errorCodes:["auth_error","fetch_error"],examples:["resend inboxes drafts get --inbox_id <inbox_id> --draft_id <draft_id>","resend inboxes drafts get --inbox_id <inbox_id> --draft_id <draft_id> --json"]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=await g(e.inbox_id,L,o),r=await g(e.draft_id,wt(i),o);await E({loading:"Fetching draft...",sdkCall:n=>n.inboxes.drafts.get({inboxId:i,draftId:r}),onInteractive:n=>{console.log(`${n.subject??"(no subject)"}`),console.log(`ID: ${n.id}`),console.log(`Type: ${n.type}`),n.to?.length&&console.log(`To: ${n.to.join(", ")}`),console.log(`Updated: ${n.updated_at}`),console.log(""),console.log(n.text??n.html??"(no body)")}},o)});var Fd=new c("list").alias("ls").description("List drafts in an inbox").option("--inbox_id <id>","Inbox UUID").option("--cursor <cursor>","Pagination cursor from a previous response").addHelpText("after",d({context:"Pass next_cursor from the previous response as --cursor to fetch the next page.",output:' {"object":"list","has_more":false,"next_cursor":"<cursor>|null","data":[{"id":"<uuid>","type":"standalone|reply","to":["<address>"]|null,"cc":[],"bcc":[],"subject":"<subject>|null","snippet":"<text>|null","thread_id":"<uuid>|null","reply_to_email_id":"<uuid>|null","updated_at":"<date>"}]}',errorCodes:["auth_error","list_error"],examples:["resend inboxes drafts list --inbox_id 78261eea-8f8b-4381-83c6-79fa7120f1cf","resend inboxes drafts list --inbox_id 78261eea-8f8b-4381-83c6-79fa7120f1cf --json"]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=await g(e.inbox_id,L,o);await k({loading:"Fetching drafts...",sdkCall:r=>r.inboxes.drafts.list({inboxId:i,...e.cursor&&{cursor:e.cursor}}),onInteractive:r=>{console.log(Kd(r.data)),r.has_more&&r.next_cursor&&console.log(`
|
|
739
739
|
Fetch the next page:
|
|
740
|
-
$ resend inboxes drafts list ${i} --cursor ${r.next_cursor}`)}},o)});var
|
|
741
|
-
with --
|
|
740
|
+
$ resend inboxes drafts list ${i} --cursor ${r.next_cursor}`)}},o)});var Rd=new c("send").description("Send a draft").option("--inbox_id <id>","Inbox UUID").option("--draft_id <id>","Draft UUID").addHelpText("after",d({context:"Sends the draft from the inbox address. The draft must have recipients and a body.",output:' {"object":"inbox_draft","id":"<uuid>","thread_id":"<uuid>","email_id":"<uuid>"}',errorCodes:["auth_error","send_error"],examples:["resend inboxes drafts send --inbox_id <inbox_id> --draft_id <draft_id>","resend inboxes drafts send --inbox_id <inbox_id> --draft_id <draft_id> --json"]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=await g(e.inbox_id,L,o),r=await g(e.draft_id,wt(i),o);await R({loading:"Sending draft...",sdkCall:n=>n.inboxes.drafts.send({inboxId:i,draftId:r}),errorCode:"send_error",successMsg:`Draft sent: ${r}`},o)});var Jr=(e,t)=>[...t,e],Dd=new c("update").description("Update a draft's recipients, subject, or body").option("--inbox_id <id>","Inbox UUID").option("--draft_id <id>","Draft UUID").option("--to <address>","Replace recipients (repeatable)",Jr,[]).option("--cc <address>","Replace cc addresses (repeatable)",Jr,[]).option("--bcc <address>","Replace bcc addresses (repeatable)",Jr,[]).option("--subject <subject>","New subject").option("--text <text>","New plain text body").option("--html <html>","New HTML body").addHelpText("after",d({context:"At least one option is required. Provided fields replace the existing values.",output:' {"object":"inbox_draft","id":"<uuid>","type":"standalone|reply","to":["<address>"]|null,"cc":[],"bcc":[],"subject":"<subject>|null","html":"<html>|null","text":"<text>|null","thread_id":"<uuid>|null","reply_to_email_id":"<uuid>|null","email_id":"<uuid>|null","created_at":"<date>","updated_at":"<date>"}',errorCodes:["auth_error","no_changes","update_error"],examples:['resend inboxes drafts update --inbox_id <inbox_id> --draft_id <draft_id> --subject "Updated subject"','resend inboxes drafts update --inbox_id <inbox_id> --draft_id <draft_id> --text "New body" --json']})).action(async(e,t)=>{let o=t.optsWithGlobals();e.to.length>0||e.cc.length>0||e.bcc.length>0||e.subject!==void 0||e.text!==void 0||e.html!==void 0||h({message:"Provide at least one option to update: --to, --cc, --bcc, --subject, --text, or --html.",code:"no_changes"},{json:o.json});let r=await g(e.inbox_id,L,o),n=await g(e.draft_id,wt(r),o),s={inboxId:r,draftId:n,...e.to.length>0&&{to:e.to},...e.cc.length>0&&{cc:e.cc},...e.bcc.length>0&&{bcc:e.bcc},...e.subject!==void 0&&{subject:e.subject},...e.text!==void 0&&{text:e.text},...e.html!==void 0&&{html:e.html}};await R({loading:"Updating draft...",sdkCall:a=>a.inboxes.drafts.update(s),errorCode:"update_error",successMsg:`Draft updated: ${n}`},o)});var Td=new c("drafts").description("Manage email drafts in an inbox").addHelpText("after",d({context:`Drafts are unsent emails in an inbox \u2014 standalone, or replies when created
|
|
741
|
+
with --thread_id and --reply_to_email_id. Send one with "drafts send".`,examples:["resend inboxes drafts list --inbox_id <inbox_id>",'resend inboxes drafts create --inbox_id <inbox_id> --to user@example.com --subject "Hello" --text "Body"',"resend inboxes drafts send --inbox_id <inbox_id> --draft_id <draft_id>"]})).addCommand(Fd,{isDefault:!0}).addCommand(Sd).addCommand(_d).addCommand(Dd).addCommand(kd).addCommand(Rd);var Od=new c("get").description("Retrieve an inbox by ID").argument("[id]","Inbox UUID").addHelpText("after",d({output:' {"object":"inbox","id":"<uuid>","name":"<name>|null","email_address":"<address>","forwarding_address":"<address>|null","unread":0,"drafts":0,"last_received":"<date>|null"}',errorCodes:["auth_error","fetch_error"],examples:["resend inboxes get 78261eea-8f8b-4381-83c6-79fa7120f1cf","resend inboxes get 78261eea-8f8b-4381-83c6-79fa7120f1cf --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,L,i);await E({loading:"Fetching inbox...",sdkCall:n=>n.inboxes.get(r),onInteractive:n=>{console.log(`${n.email_address}`),console.log(`ID: ${n.id}`),n.name&&console.log(`Name: ${n.name}`),n.forwarding_address&&console.log(`Forwarding address: ${n.forwarding_address}`),console.log(`Unread: ${n.unread}`),console.log(`Drafts: ${n.drafts}`),n.last_received&&console.log(`Last received: ${n.last_received}`)}},i)});var Ed=new c("create").description("Create a label in an inbox").option("--inbox_id <id>","Inbox UUID").option("--name <name>","Label name (required, max 64 characters)").addOption(new M("--color <color>","Label color (random when omitted)").choices(Lo)).addHelpText("after",d({context:`An inbox can have up to 100 labels.
|
|
742
742
|
|
|
743
|
-
Non-interactive: --name is required.`,output:' {"object":"inbox_label","id":"<uuid>","name":"<name>","color":"<color>","created_at":"<date>"}',errorCodes:["auth_error","missing_name","create_error"],examples:['resend inboxes labels create --
|
|
743
|
+
Non-interactive: --name is required.`,output:' {"object":"inbox_label","id":"<uuid>","name":"<name>","color":"<color>","created_at":"<date>"}',errorCodes:["auth_error","missing_name","create_error"],examples:['resend inboxes labels create --inbox_id <inbox_id> --name "Billing"','resend inboxes labels create --inbox_id <inbox_id> --name "Urgent" --color crimson --json']})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=await g(e.inbox_id,L,o),r=await T(e.name,{message:"Label name",placeholder:"e.g. Billing"},{message:"Missing --name flag.",code:"missing_name"},o);await B({loading:"Creating label...",sdkCall:n=>n.inboxes.labels.create({inboxId:i,name:r,...e.color&&{color:e.color}}),onInteractive:n=>{console.log(`Label created: ${n.id}`),console.log(`Name: ${n.name} (${n.color})`)}},o)});function Ki(e){return{resource:"label",resourcePlural:"labels",fetchItems:t=>t.inboxes.labels.list({inboxId:e}).then(o=>({...o,data:o.data?{data:o.data.data,has_more:!1}:null})),display:t=>({label:t.name,hint:t.id})}}function Bd(e){let t=e.map(o=>[o.name,o.color,o.created_at,o.id]);return _(["Name","Color","Created","ID"],t,"(no labels)")}var Id=new c("delete").alias("rm").description("Delete a label").option("--inbox_id <id>","Inbox UUID").option("--label_id <id>","Label UUID").option("--yes","Skip the confirmation prompt (required in non-interactive mode)").addHelpText("after",d({context:`The label is removed from every thread that has it. Threads themselves are
|
|
744
744
|
not deleted.
|
|
745
745
|
|
|
746
|
-
Non-interactive: --yes is required to confirm deletion when stdin/stdout is not a TTY.`,output:' {"object":"inbox_label","id":"<uuid>","deleted":true}',errorCodes:["auth_error","confirmation_required","delete_error"],examples:["resend inboxes labels delete --
|
|
746
|
+
Non-interactive: --yes is required to confirm deletion when stdin/stdout is not a TTY.`,output:' {"object":"inbox_label","id":"<uuid>","deleted":true}',errorCodes:["auth_error","confirmation_required","delete_error"],examples:["resend inboxes labels delete --inbox_id <inbox_id> --label_id <label_id> --yes","resend inboxes labels delete --inbox_id <inbox_id> --label_id <label_id> --yes --json"]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=await g(e.inbox_id,L,o),r=await J(e.label_id,Ki(i),o);await z(r.id,!!e.yes,{confirmMessage:`Delete label "${r.label}"?
|
|
747
747
|
ID: ${r.id}
|
|
748
|
-
It will be removed from every thread that has it.`,loading:"Deleting label...",object:"inbox_label",successMsg:"Label deleted",sdkCall:n=>n.inboxes.labels.remove({inboxId:i,labelId:r.id})},o)});var jd=new c("list").alias("ls").description("List labels in an inbox").option("--
|
|
749
|
-
"resend inboxes threads update --
|
|
750
|
-
filter with "resend inboxes threads list --
|
|
748
|
+
It will be removed from every thread that has it.`,loading:"Deleting label...",object:"inbox_label",successMsg:"Label deleted",sdkCall:n=>n.inboxes.labels.remove({inboxId:i,labelId:r.id})},o)});var jd=new c("list").alias("ls").description("List labels in an inbox").option("--inbox_id <id>","Inbox UUID").addHelpText("after",d({context:'Returns all labels in the inbox (not paginated). Use the label IDs with "threads update --label_id" and "threads list --label".',output:' {"object":"list","has_more":false,"data":[{"id":"<uuid>","name":"<name>","color":"cyan|teal|grass|lime|yellow|orange|iris|plum|crimson|bronze|mauve","created_at":"<date>"}]}',errorCodes:["auth_error","list_error"],examples:["resend inboxes labels list --inbox_id 78261eea-8f8b-4381-83c6-79fa7120f1cf","resend inboxes labels list --inbox_id 78261eea-8f8b-4381-83c6-79fa7120f1cf --json"]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=await g(e.inbox_id,L,o);await k({loading:"Fetching labels...",sdkCall:r=>r.inboxes.labels.list({inboxId:i}),onInteractive:r=>console.log(Bd(r.data))},o)});var Pd=new c("update").description("Update a label's name or color").option("--inbox_id <id>","Inbox UUID").option("--label_id <id>","Label UUID").option("--name <name>","New label name (max 64 characters)").addOption(new M("--color <color>","New label color").choices(Lo)).addHelpText("after",d({context:"At least one of --name or --color must be provided.",output:' {"object":"inbox_label","id":"<uuid>"}',errorCodes:["auth_error","no_changes","update_error"],examples:['resend inboxes labels update --inbox_id <inbox_id> --label_id <label_id> --name "Billing"',"resend inboxes labels update --inbox_id <inbox_id> --label_id <label_id> --color teal --json"]})).action(async(e,t)=>{let o=t.optsWithGlobals();!e.name&&!e.color&&h({message:"Provide at least one option to update: --name or --color.",code:"no_changes"},{json:o.json});let i=await g(e.inbox_id,L,o),r=await g(e.label_id,Ki(i),o);await R({loading:"Updating label...",sdkCall:n=>n.inboxes.labels.update({inboxId:i,labelId:r,...e.name&&{name:e.name},...e.color&&{color:e.color}}),errorCode:"update_error",successMsg:`Label updated: ${r}`},o)});var $d=new c("labels").description("Manage labels for organizing threads in an inbox").addHelpText("after",d({context:`Labels organize threads within an inbox. Apply one with
|
|
749
|
+
"resend inboxes threads update --inbox_id <inbox_id> --thread_id <thread_id> --label_id <label_id>" and
|
|
750
|
+
filter with "resend inboxes threads list --inbox_id <inbox_id> --label <label_id>".`,examples:["resend inboxes labels list --inbox_id <inbox_id>",'resend inboxes labels create --inbox_id <inbox_id> --name "Billing" --color teal',"resend inboxes labels delete --inbox_id <inbox_id> --label_id <label_id> --yes"]})).addCommand(jd,{isDefault:!0}).addCommand(Ed).addCommand(Pd).addCommand(Id);var Gd=new c("list").alias("ls").description("List all inboxes").option("--limit <n>","Maximum number of inboxes to return (1-100)","10").option("--after <cursor>","Cursor for forward pagination \u2014 list items after this ID").option("--before <cursor>","Cursor for backward pagination \u2014 list items before this ID").addHelpText("after",d({output:' {"object":"list","has_more":false,"data":[{"id":"<uuid>","name":"<name>|null","email_address":"<address>","unread":0,"last_received":"<date>|null"}]}',errorCodes:["auth_error","invalid_limit","list_error"],examples:["resend inboxes list","resend inboxes list --json","resend inboxes list --limit 25 --after <cursor> --json"]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=I(e.limit,o),r=G(i,e.after,e.before,o);await k({loading:"Fetching inboxes...",sdkCall:n=>n.inboxes.list(r),onInteractive:n=>{console.log(Ud(n.data)),j(n,"inboxes list",{limit:i,before:e.before,apiKey:o.apiKey,profile:o.profile})}},o)});function Le(e){return{resource:"thread",resourcePlural:"threads",fetchItems:t=>t.inboxes.threads.list({inboxId:e}).then(o=>({...o,data:o.data?{data:o.data.data,has_more:!1}:null})),display:t=>({label:t.subject??"(no subject)",hint:t.id})}}function Hd(e){let t=e.map(o=>[o.from??"",o.subject??"(no subject)",o.read?"yes":"no",String(o.message_count),o.received_at,o.id]);return _(["From","Subject","Read","Msgs","Received","ID"],t,"(no threads)")}var Qd=new c("delete").alias("rm").description("Delete a thread and all of its messages").option("--inbox_id <id>","Inbox UUID").option("--thread_id <id>","Thread UUID").option("--yes","Skip the confirmation prompt (required in non-interactive mode)").addHelpText("after",d({context:"Non-interactive: --yes is required to confirm deletion when stdin/stdout is not a TTY.",output:' {"object":"inbox_thread","id":"<uuid>","deleted":true}',errorCodes:["auth_error","confirmation_required","delete_error"],examples:["resend inboxes threads delete --inbox_id <inbox_id> --thread_id <thread_id> --yes","resend inboxes threads delete --inbox_id <inbox_id> --thread_id <thread_id> --yes --json"]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=await g(e.inbox_id,L,o),r=await J(e.thread_id,Le(i),o);await z(r.id,!!e.yes,{confirmMessage:`Delete thread "${r.label}"?
|
|
751
751
|
ID: ${r.id}
|
|
752
|
-
All messages in this thread will be removed.`,loading:"Deleting thread...",object:"inbox_thread",successMsg:"Thread deleted",sdkCall:n=>n.inboxes.threads.remove({inboxId:i,threadId:r.id})},o)});var Ag=(e,t)=>[...t,e],Nd=new c("forward").description("Forward an email in a thread to other recipients").option("--
|
|
753
|
-
At least one of --text or --html is required.`,output:' {"id":"<uuid>","email_id":"<uuid>","direction":"outbound","from":"<inbox-address>","to":["<recipient>"],"text":"<text>|null","html":"<html>|null","read":true,"received_at":"<date>"}',errorCodes:["auth_error","missing_id","missing_content","create_error"],examples:['resend inboxes threads emails reply --
|
|
752
|
+
All messages in this thread will be removed.`,loading:"Deleting thread...",object:"inbox_thread",successMsg:"Thread deleted",sdkCall:n=>n.inboxes.threads.remove({inboxId:i,threadId:r.id})},o)});var Ag=(e,t)=>[...t,e],Nd=new c("forward").description("Forward an email in a thread to other recipients").option("--inbox_id <id>","Inbox UUID").option("--thread_id <id>","Thread UUID").option("--email_id <id>",'Email UUID to forward (from "threads get")').option("--to <address>","Recipient address (repeat the flag for multiple recipients)",Ag,[]).option("--text <text>","Plain text note to include with the forward").option("--html <html>","HTML note to include with the forward").option("--subject <subject>","Override the forwarded subject").addHelpText("after",d({context:"Forwards the email from the inbox address. --to is required; --text/--html add an optional note.",output:' {"id":"<uuid>","email_id":"<uuid>","direction":"outbound","from":"<inbox-address>","to":["<recipient>"],"text":"<text>|null","html":"<html>|null","attachments":[],"read":true,"received_at":"<date>"}',errorCodes:["auth_error","missing_id","missing_to","create_error"],examples:["resend inboxes threads emails forward --inbox_id <inbox_id> --thread_id <thread_id> --email_id <email_id> --to teammate@example.com",'resend inboxes threads emails forward --inbox_id <inbox_id> --thread_id <thread_id> --email_id <email_id> --to a@x.com --to b@x.com --text "FYI" --json']})).action(async(e,t)=>{let o=t.optsWithGlobals();e.to.length===0&&h({message:"Provide at least one recipient with --to.",code:"missing_to"},{json:o.json});let i=await g(e.inbox_id,L,o),r=await g(e.thread_id,Le(i),o),n=await T(e.email_id,{message:"Email ID to forward",placeholder:'from "threads get"'},{message:"Missing --email_id flag.",code:"missing_id"},o);await B({loading:"Forwarding email...",sdkCall:s=>s.inboxes.threads.emails.forward({inboxId:i,threadId:r,emailId:n,to:e.to,...e.text&&{text:e.text},...e.html&&{html:e.html},...e.subject&&{subject:e.subject}}),onInteractive:s=>{console.log(`Email forwarded: ${s.email_id}`),console.log(`To: ${s.to.join(", ")}`)}},o)});var Md=new c("get").description("Retrieve a single email from a thread").option("--inbox_id <id>","Inbox UUID").option("--thread_id <id>","Thread UUID").option("--email_id <id>",'Email UUID (from "threads get")').addHelpText("after",d({output:' {"id":"<uuid>","direction":"inbound|outbound","from":"<sender>","to":[],"cc":[],"bcc":[],"reply_to":[],"subject":"<subject>|null","html":"<html>|null","text":"<text>|null","attachments":[{"id":"<id>","filename":"<name>|null","size":123}],"read":true,"received_at":"<date>"}',errorCodes:["auth_error","missing_id","fetch_error"],examples:["resend inboxes threads emails get --inbox_id <inbox_id> --thread_id <thread_id> --email_id <email_id>","resend inboxes threads emails get --inbox_id <inbox_id> --thread_id <thread_id> --email_id <email_id> --json"]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=await g(e.inbox_id,L,o),r=await g(e.thread_id,Le(i),o),n=await T(e.email_id,{message:"Email ID",placeholder:'from "threads get"'},{message:"Missing --email_id flag.",code:"missing_id"},o);await E({loading:"Fetching email...",sdkCall:s=>s.inboxes.threads.emails.get({inboxId:i,threadId:r,emailId:n}),onInteractive:s=>{console.log(`${s.subject??"(no subject)"}`),console.log(`ID: ${s.id}`),console.log(`[${s.direction}] ${s.from} \xB7 ${s.received_at}`),console.log(`To: ${s.to.join(", ")}`),s.attachments.length>0&&console.log(`Attachments: ${s.attachments.map(a=>a.filename??a.id).join(", ")}`),console.log(""),console.log(s.text??s.html??"(no body)")}},o)});var qd=new c("reply").description("Reply to an email in a thread").option("--inbox_id <id>","Inbox UUID").option("--thread_id <id>","Thread UUID").option("--email_id <id>",'Email UUID to reply to (from "threads get")').option("--text <text>","Plain text body of the reply").option("--html <html>","HTML body of the reply").option("--subject <subject>","Override the reply subject").addHelpText("after",d({context:`Sends the reply from the inbox address to the sender of the original email.
|
|
753
|
+
At least one of --text or --html is required.`,output:' {"id":"<uuid>","email_id":"<uuid>","direction":"outbound","from":"<inbox-address>","to":["<recipient>"],"text":"<text>|null","html":"<html>|null","read":true,"received_at":"<date>"}',errorCodes:["auth_error","missing_id","missing_content","create_error"],examples:['resend inboxes threads emails reply --inbox_id <inbox_id> --thread_id <thread_id> --email_id <email_id> --text "On it \u2014 reply to follow."','resend inboxes threads emails reply --inbox_id <inbox_id> --thread_id <thread_id> --email_id <email_id> --html "<p>Done!</p>" --json']})).action(async(e,t)=>{let o=t.optsWithGlobals(),{text:i,html:r}=e;!i&&!r&&h({message:"Provide --text or --html for the reply body.",code:"missing_content"},{json:o.json});let n=await g(e.inbox_id,L,o),s=await g(e.thread_id,Le(n),o),a=await T(e.email_id,{message:"Email ID to reply to",placeholder:'from "threads get"'},{message:"Missing --email_id flag.",code:"missing_id"},o),l=i?{text:i,...r&&{html:r}}:{html:r};await B({loading:"Sending reply...",sdkCall:u=>u.inboxes.threads.emails.reply({inboxId:n,threadId:s,emailId:a,...l,...e.subject&&{subject:e.subject}}),onInteractive:u=>{console.log(`Reply sent: ${u.email_id}`),console.log(`To: ${u.to.join(", ")}`)}},o)});var Ld=new c("emails").description("Work with individual emails in a thread").addHelpText("after",d({context:'Email IDs come from "resend inboxes threads get", which lists every message in a thread.',examples:["resend inboxes threads emails get --inbox_id <inbox_id> --thread_id <thread_id> --email_id <email_id>",'resend inboxes threads emails reply --inbox_id <inbox_id> --thread_id <thread_id> --email_id <email_id> --text "Thanks!"',"resend inboxes threads emails forward --inbox_id <inbox_id> --thread_id <thread_id> --email_id <email_id> --to teammate@example.com"]})).addCommand(Md).addCommand(qd).addCommand(Nd);var Wd=new c("get").description("Retrieve a thread with all of its messages").option("--inbox_id <id>","Inbox UUID").option("--thread_id <id>","Thread UUID").addHelpText("after",d({context:"Returns the thread summary and every message in the thread, including html and text bodies.",output:' {"object":"inbox_thread","id":"<uuid>","subject":"<subject>|null","folder":"inbox|archive|spam|sent|trash","labels":[],"read":true,"messages":{"has_more":false,"data":[{"id":"<uuid>","direction":"inbound|outbound","from":"<sender>","to":[],"subject":"<subject>|null","html":"<html>|null","text":"<text>|null","attachments":[],"read":true,"received_at":"<date>"}]}}',errorCodes:["auth_error","fetch_error"],examples:["resend inboxes threads get --inbox_id 78261eea-8f8b-4381-83c6-79fa7120f1cf --thread_id 3deaccfa-f572-443c-be6f-92b74f9d5c48","resend inboxes threads get --inbox_id 78261eea-8f8b-4381-83c6-79fa7120f1cf --thread_id 3deaccfa-f572-443c-be6f-92b74f9d5c48 --json"]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=await g(e.inbox_id,L,o),r=await g(e.thread_id,Le(i),o);await E({loading:"Fetching thread...",sdkCall:n=>n.inboxes.threads.get({inboxId:i,threadId:r}),onInteractive:n=>{console.log(`${n.subject??"(no subject)"}`),console.log(`ID: ${n.id}`),console.log(`Folder: ${n.folder}`),n.labels.length>0&&console.log(`Labels: ${n.labels.map(s=>s.name).join(", ")}`),console.log(`Read: ${n.read?"yes":"no"}`);for(let s of n.messages.data){console.log(""),console.log(`[${s.direction}] ${s.from} \xB7 ${s.received_at}`),console.log(`Email ID: ${s.id}`);let a=s.text??s.html??"(no body)";console.log(a)}}},o)});var bg=(e,t)=>[...t,e],Jd=new c("list").alias("ls").description("List threads in an inbox").option("--inbox_id <id>","Inbox UUID").addOption(new M("--folder <folder>","Folder to list (default: inbox)").choices(Ks)).option("--query <text>","Search subject, sender, and label names").option("--from <sender>","Filter by sender address or name").option("--label <label_id>","Filter by label UUID (repeat the flag for multiple labels)",bg,[]).option("--cursor <cursor>","Pagination cursor from a previous response").addHelpText("after",d({context:`Pages are fixed at 50 threads, newest activity first. Pass next_cursor from the
|
|
754
754
|
previous response as --cursor to fetch the next page.
|
|
755
755
|
|
|
756
|
-
--label takes label UUIDs (from "resend inboxes labels list"), not label names.`,output:' {"object":"list","has_more":false,"next_cursor":"<cursor>|null","data":[{"id":"<uuid>","subject":"<subject>|null","from":"<sender>|null","to":[],"cc":[],"bcc":[],"labels":[],"message_count":1,"has_attachment":false,"has_draft":false,"read":false,"received_at":"<date>"}]}',errorCodes:["auth_error","list_error"],examples:["resend inboxes threads list --
|
|
756
|
+
--label takes label UUIDs (from "resend inboxes labels list"), not label names.`,output:' {"object":"list","has_more":false,"next_cursor":"<cursor>|null","data":[{"id":"<uuid>","subject":"<subject>|null","from":"<sender>|null","to":[],"cc":[],"bcc":[],"labels":[],"message_count":1,"has_attachment":false,"has_draft":false,"read":false,"received_at":"<date>"}]}',errorCodes:["auth_error","list_error"],examples:["resend inboxes threads list --inbox_id 78261eea-8f8b-4381-83c6-79fa7120f1cf","resend inboxes threads list --inbox_id 78261eea-8f8b-4381-83c6-79fa7120f1cf --folder archive --json","resend inboxes threads list --inbox_id 78261eea-8f8b-4381-83c6-79fa7120f1cf --query billing --json"]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=await g(e.inbox_id,L,o);await k({loading:"Fetching threads...",sdkCall:r=>r.inboxes.threads.list({inboxId:i,...e.folder&&{folder:e.folder},...e.query&&{query:e.query},...e.from&&{from:e.from},...e.label.length>0&&{label:e.label},...e.cursor&&{cursor:e.cursor}}),onInteractive:r=>{console.log(Hd(r.data)),r.has_more&&r.next_cursor&&console.log(`
|
|
757
757
|
Fetch the next page:
|
|
758
|
-
$ resend inboxes threads list --
|
|
759
|
-
Threads cannot be moved to "sent".`,output:' {"object":"inbox_thread","id":"<uuid>","subject":"<subject>|null","folder":"inbox|archive|spam|sent|trash","labels":[],"read":true}',errorCodes:["auth_error","invalid_options","no_changes","update_error"],examples:["resend inboxes threads update --
|
|
758
|
+
$ resend inboxes threads list --inbox_id ${i} --cursor ${r.next_cursor}`)}},o)});var Vd=new c("update").description("Mark a thread read or unread, move it, or apply a label").option("--inbox_id <id>","Inbox UUID").option("--thread_id <id>","Thread UUID").option("--read","Mark every message in the thread as read").option("--unread","Mark every message in the thread as unread").addOption(new M("--folder <folder>","Move the thread to a folder").choices(ks)).option("--label_id <label_id>","Apply this label (UUID) to the thread").addHelpText("after",d({context:`At least one of --read/--unread, --folder, or --label_id is required.
|
|
759
|
+
Threads cannot be moved to "sent".`,output:' {"object":"inbox_thread","id":"<uuid>","subject":"<subject>|null","folder":"inbox|archive|spam|sent|trash","labels":[],"read":true}',errorCodes:["auth_error","invalid_options","no_changes","update_error"],examples:["resend inboxes threads update --inbox_id <inbox_id> --thread_id <thread_id> --read","resend inboxes threads update --inbox_id <inbox_id> --thread_id <thread_id> --folder archive --json","resend inboxes threads update --inbox_id <inbox_id> --thread_id <thread_id> --label_id <label_id> --json"]})).action(async(e,t)=>{let o=t.optsWithGlobals();e.read&&e.unread&&h({message:"Use either --read or --unread, not both.",code:"invalid_options"},{json:o.json});let i=e.read?!0:e.unread?!1:void 0;i===void 0&&!e.folder&&!e.label_id&&h({message:"Provide at least one option to update: --read/--unread, --folder, or --label_id.",code:"no_changes"},{json:o.json});let r=await g(e.inbox_id,L,o),n=await g(e.thread_id,Le(r),o),s={inboxId:r,threadId:n,...i!==void 0&&{read:i},...e.folder&&{folder:e.folder},...e.label_id&&{labelId:e.label_id}};await R({loading:"Updating thread...",sdkCall:a=>a.inboxes.threads.update(s),errorCode:"update_error",successMsg:`Thread updated: ${n}`},o)});var zd=new c("threads").description("Browse and reply to email threads in an inbox").addHelpText("after",d({context:`Received messages are grouped into threads. "list" shows threads in a folder,
|
|
760
760
|
"get" returns a thread with full message bodies, "update" marks read/unread,
|
|
761
|
-
moves, or labels a thread, and "emails" works with individual messages.`,examples:["resend inboxes threads list --
|
|
762
|
-
|
|
761
|
+
moves, or labels a thread, and "emails" works with individual messages.`,examples:["resend inboxes threads list --inbox_id <inbox_id>","resend inboxes threads get --inbox_id <inbox_id> --thread_id <thread_id>","resend inboxes threads update --inbox_id <inbox_id> --thread_id <thread_id> --read",'resend inboxes threads emails reply --inbox_id <inbox_id> --thread_id <thread_id> --email_id <email_id> --text "Thanks!"']})).addCommand(Jd,{isDefault:!0}).addCommand(Wd).addCommand(Vd).addCommand(Qd).addCommand(Ld);var Yd=new c("update").description("Update an inbox's name or friendly name").argument("[id]","Inbox UUID").option("--name <name>","New inbox name").option("--friendly_name <name>",'New name used when sending from this inbox, e.g. "Ada from Support"').addHelpText("after",d({context:`At least one of --name or --friendly_name is required.
|
|
762
|
+
|
|
763
|
+
Note: the email address cannot be changed after creation.
|
|
764
|
+
To use a different address, create a new inbox.`,output:' {"object":"inbox","id":"<uuid>"}',errorCodes:["auth_error","no_changes","update_error"],examples:['resend inboxes update 78261eea-8f8b-4381-83c6-79fa7120f1cf --name "Support"','resend inboxes update 78261eea-8f8b-4381-83c6-79fa7120f1cf --friendly_name "Ada from Support" --json']})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,L,i);!t.name&&!t.friendly_name&&h({message:"Provide at least one option to update: --name or --friendly_name.",code:"no_changes"},{json:i.json});let n={...t.name&&{name:t.name},...t.friendly_name&&{friendlyName:t.friendly_name}};await R({loading:"Updating inbox...",sdkCall:s=>s.inboxes.update(r,n),errorCode:"update_error",successMsg:`Inbox updated: ${r}`},i)});var Zd=new c("inboxes").description(`${Xd.default.cyan("\u25CF beta")} \xB7 Manage inboxes \u2014 email addresses at your domains that receive mail (request access to enable)`).addHelpText("after",d({context:`Beta: this command requires inboxes to be enabled on your account.
|
|
763
765
|
Not enabled yet? Reach out to Resend to join the beta. Calls return an API error until then.
|
|
764
766
|
|
|
765
767
|
An inbox is an email address at one of your verified domains that can receive email.
|
|
766
768
|
Received messages are grouped into threads inside the inbox.
|
|
767
769
|
|
|
768
|
-
Inboxes require a full-access API key \u2014 sending-only keys are rejected.`,examples:["resend inboxes list","resend inboxes create --
|
|
770
|
+
Inboxes require a full-access API key \u2014 sending-only keys are rejected.`,examples:["resend inboxes list","resend inboxes create --email_address support@yourdomain.com","resend inboxes get 78261eea-8f8b-4381-83c6-79fa7120f1cf","resend inboxes threads list --inbox_id 78261eea-8f8b-4381-83c6-79fa7120f1cf",'resend inboxes update 78261eea-8f8b-4381-83c6-79fa7120f1cf --name "Support"',"resend inboxes delete 78261eea-8f8b-4381-83c6-79fa7120f1cf --yes"]})).addCommand(wd).addCommand(Od).addCommand(Gd,{isDefault:!0}).addCommand(zd).addCommand($d).addCommand(Td).addCommand(Yd).addCommand(vd);function eu(e){let t=e.map(o=>[o.method,o.endpoint,String(o.response_status),o.created_at,o.id]);return _(["Method","Endpoint","Status","Created","ID"],t,"(no logs)")}var tu={resource:"log",resourcePlural:"logs",fetchItems:(e,{limit:t,after:o})=>e.logs.list({limit:t,...o&&{after:o}}),display:e=>({label:`${e.method} ${e.endpoint}`,hint:e.id})};var ou=new c("get").description("Retrieve a single API request log with full request/response bodies").argument("[id]","Log ID").addHelpText("after",d({output:" Full log object including request_body and response_body.",errorCodes:["auth_error","fetch_error"],examples:["resend logs get 3d4a472d-bc6d-4dd2-aa9d-d3d11b549e55","resend logs get 3d4a472d-bc6d-4dd2-aa9d-d3d11b549e55 --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,tu,i);await E({loading:"Fetching log...",sdkCall:n=>n.logs.get(r),onInteractive:n=>{console.log(`${n.method} ${n.endpoint} \u2014 ${n.response_status}`),console.log(`ID: ${n.id}`),console.log(`Created: ${n.created_at}`),console.log(`User-Agent: ${n.user_agent??"(none)"}`),n.request_body&&console.log(`
|
|
769
771
|
Request Body:
|
|
770
772
|
${JSON.stringify(n.request_body,null,2)}`),n.response_body&&console.log(`
|
|
771
773
|
Response Body:
|
|
772
774
|
${JSON.stringify(n.response_body,null,2)}`)}},i)});var iu=new c("list").alias("ls").description("List API request logs").option("--limit <n>","Maximum number of logs to return (1-100)","10").option("--after <cursor>","Return logs after this cursor (next page)").option("--before <cursor>","Return logs before this cursor (previous page)").addHelpText("after",d({output:` {"object":"list","data":[...],"has_more":true}
|
|
773
|
-
The list response does not include request/response bodies \u2014 use "resend logs get <id>" for that.`,errorCodes:["auth_error","invalid_limit","list_error"],examples:["resend logs list","resend logs list --limit 25 --json","resend logs list --after <cursor> --json"]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=
|
|
775
|
+
The list response does not include request/response bodies \u2014 use "resend logs get <id>" for that.`,errorCodes:["auth_error","invalid_limit","list_error"],examples:["resend logs list","resend logs list --limit 25 --json","resend logs list --after <cursor> --json"]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=I(e.limit,o),r=G(i,e.after,e.before,o);await k({loading:"Fetching logs...",sdkCall:n=>n.logs.list(r),onInteractive:n=>{console.log(eu(n.data)),j(n,"logs list",{limit:i,before:e.before,apiKey:o.apiKey,profile:o.profile})}},o)});var ru=new c("open").description("Open a log or the logs list in the Resend dashboard").argument("[id]","Log ID \u2014 omit to open the logs list").addHelpText("after",d({context:`Opens the Resend dashboard in your default browser.
|
|
774
776
|
With an ID: opens that log's detail page.
|
|
775
|
-
Without an ID: opens the logs list.`,examples:["resend logs open","resend logs open 3d4a472d-bc6d-4dd2-aa9d-d3d11b549e55"]})).action(async(e,t,o)=>{let i=e?fe.log(e):fe.logs,r=o.optsWithGlobals();await Te(i,r)});var nu=new c("logs").description("View API request logs").addHelpText("after",d({examples:["resend logs list","resend logs list --limit 25 --json","resend logs get 3d4a472d-bc6d-4dd2-aa9d-d3d11b549e55","resend logs open","resend logs open 3d4a472d-bc6d-4dd2-aa9d-d3d11b549e55"]})).addCommand(ou).addCommand(iu,{isDefault:!0}).addCommand(ru);var su={resource:"OAuth grant",resourcePlural:"OAuth grants",fetchItems:(e,{limit:t,after:o})=>e.oauthGrants.list({limit:t,...o&&{after:o}}),display:e=>({label:e.client.name,hint:e.id})};function au(e){let t=e.map(o=>[o.client.name,o.id,o.scopes.join(", "),o.created_at,o.revoked_at??""]);return
|
|
776
|
-
Revoked grants have non-null revoked_at and revoked_reason.`,errorCodes:["auth_error","invalid_limit","list_error"],examples:["resend oauth-grants list","resend oauth-grants list --limit 25 --json","resend oauth-grants list --after <cursor> --json"]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=
|
|
777
|
+
Without an ID: opens the logs list.`,examples:["resend logs open","resend logs open 3d4a472d-bc6d-4dd2-aa9d-d3d11b549e55"]})).action(async(e,t,o)=>{let i=e?fe.log(e):fe.logs,r=o.optsWithGlobals();await Te(i,r)});var nu=new c("logs").description("View API request logs").addHelpText("after",d({examples:["resend logs list","resend logs list --limit 25 --json","resend logs get 3d4a472d-bc6d-4dd2-aa9d-d3d11b549e55","resend logs open","resend logs open 3d4a472d-bc6d-4dd2-aa9d-d3d11b549e55"]})).addCommand(ou).addCommand(iu,{isDefault:!0}).addCommand(ru);var su={resource:"OAuth grant",resourcePlural:"OAuth grants",fetchItems:(e,{limit:t,after:o})=>e.oauthGrants.list({limit:t,...o&&{after:o}}),display:e=>({label:e.client.name,hint:e.id})};function au(e){let t=e.map(o=>[o.client.name,o.id,o.scopes.join(", "),o.created_at,o.revoked_at??""]);return _(["Client","ID","Scopes","Created","Revoked"],t,"(no OAuth grants)")}var lu=new c("list").alias("ls").description("List OAuth grants for the team (both active and revoked), including each grant's client, scopes, and revocation status").option("--limit <n>","Maximum number of OAuth grants to return (1-100)","10").option("--after <cursor>","Cursor for forward pagination \u2014 list items after this ID").option("--before <cursor>","Cursor for backward pagination \u2014 list items before this ID").addHelpText("after",d({output:` {"object":"list","has_more":false,"data":[{"id":"<id>","client_id":"<id>","scopes":["<scope>"],"created_at":"<date>","revoked_at":"<date>|null","revoked_reason":"<reason>|null","client":{"name":"<name>","logo_uri":"<url>|null"}}]}
|
|
778
|
+
Revoked grants have non-null revoked_at and revoked_reason.`,errorCodes:["auth_error","invalid_limit","list_error"],examples:["resend oauth-grants list","resend oauth-grants list --limit 25 --json","resend oauth-grants list --after <cursor> --json"]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=I(e.limit,o),r=G(i,e.after,e.before,o);await k({loading:"Fetching OAuth grants...",sdkCall:n=>n.oauthGrants.list(r),onInteractive:n=>{console.log(au(n.data)),j(n,"oauth-grants list",{limit:i,before:e.before,apiKey:o.apiKey,profile:o.profile})}},o)});var cu=new c("revoke").description("Revoke an OAuth grant \u2014 every access and refresh token issued under it stops working immediately").argument("[id]","OAuth grant ID").option("--yes","Skip confirmation prompt").addHelpText("after",d({context:`Non-interactive: --yes is required to confirm revocation when stdin/stdout is not a TTY.
|
|
777
779
|
|
|
778
780
|
Any team API key can revoke any of the team's grants. Revocation is immediate and
|
|
779
781
|
irreversible \u2014 the client would need to re-authorize to regain access.`,output:' {"object":"oauth_grant","id":"<id>","revoked_at":"<date>","revoked_reason":"<reason>"}',errorCodes:["auth_error","confirmation_required","revoke_error"],examples:["resend oauth-grants revoke 650e8400-e29b-41d4-a716-446655440001 --yes","resend oauth-grants revoke 650e8400-e29b-41d4-a716-446655440001 --yes --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await J(e,su,i);t.yes||await si(r.id,`Revoke OAuth grant for "${r.label}"?
|
|
780
782
|
ID: ${r.id}
|
|
781
|
-
Every access and refresh token issued under it will stop working.`,i),await
|
|
783
|
+
Every access and refresh token issued under it will stop working.`,i),await R({loading:"Revoking OAuth grant...",sdkCall:n=>n.oauthGrants.revoke(r.id),errorCode:"revoke_error",successMsg:"OAuth grant revoked"},i)});var du=new c("oauth-grants").description("Manage OAuth grants (apps authorized to act on the team)").addHelpText("after",d({context:`An OAuth grant is a durable record of a client (app) authorized by the team.
|
|
782
784
|
- Listing returns every grant, active and revoked. revoked_at/revoked_reason are null while active.
|
|
783
785
|
- Revoking is immediate: all access and refresh tokens issued under the grant stop working.`,examples:["resend oauth-grants list","resend oauth-grants list --limit 25 --json","resend oauth-grants revoke <id> --yes"]})).addCommand(lu,{isDefault:!0}).addCommand(cu);var uu=new c("open").description("Open the Resend dashboard in your browser").addHelpText("after",d({context:"Opens https://resend.com/emails in your default browser.",examples:["resend open"]})).action(async(e,t)=>{let o=t.optsWithGlobals();await Te(fe.emails,o)});var mu=new c("contacts").description("List contacts belonging to a segment").argument("[segmentId]","ID of the segment").option("--limit <n>","Maximum number of contacts to return (1-100)","10").option("--after <cursor>","Return contacts after this cursor (next page)").option("--before <cursor>","Return contacts before this cursor (previous page)").addHelpText("after",d({context:`Lists all contacts that belong to the given segment.
|
|
784
786
|
|
|
@@ -786,20 +788,20 @@ If no segment ID is provided interactively, a picker will prompt you to choose o
|
|
|
786
788
|
|
|
787
789
|
Pagination: use --after or --before with a contact ID as the cursor.
|
|
788
790
|
Only one of --after or --before may be used at a time.
|
|
789
|
-
The response includes has_more: true when additional pages exist.`,output:' {"object":"list","data":[{"id":"...","email":"...","first_name":"...","last_name":"...","unsubscribed":false}],"has_more":false}',errorCodes:["auth_error","invalid_limit","list_error"],examples:["resend segments contacts 78261eea-8f8b-4381-83c6-79fa7120f1cf","resend segments contacts 78261eea-8f8b-4381-83c6-79fa7120f1cf --limit 25 --json","resend segments contacts 78261eea-8f8b-4381-83c6-79fa7120f1cf --after 479e3145-dd38-4932-8c0c-e58b548c9e76"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,Oe,i),n=
|
|
791
|
+
The response includes has_more: true when additional pages exist.`,output:' {"object":"list","data":[{"id":"...","email":"...","first_name":"...","last_name":"...","unsubscribed":false}],"has_more":false}',errorCodes:["auth_error","invalid_limit","list_error"],examples:["resend segments contacts 78261eea-8f8b-4381-83c6-79fa7120f1cf","resend segments contacts 78261eea-8f8b-4381-83c6-79fa7120f1cf --limit 25 --json","resend segments contacts 78261eea-8f8b-4381-83c6-79fa7120f1cf --after 479e3145-dd38-4932-8c0c-e58b548c9e76"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,Oe,i),n=I(t.limit,i),s=G(n,t.after,t.before,i);await k({loading:"Fetching segment contacts...",sdkCall:a=>a.contacts.list({segmentId:r,...s}),onInteractive:a=>{console.log(yi(a.data)),j(a,`segments contacts ${r}`,{limit:n,before:t.before,apiKey:i.apiKey,profile:i.profile})}},i)});var pu=new c("create").description("Create a new segment").option("--name <name>","Segment name (required)").addHelpText("after",d({context:`Segments are named groups of contacts. Broadcasts target segments via segment_id.
|
|
790
792
|
Contacts can belong to multiple segments. Audiences are deprecated \u2014 use segments instead.
|
|
791
793
|
|
|
792
|
-
Non-interactive: --name is required.`,output:' {"object":"segment","id":"<uuid>","name":"<name>"}',errorCodes:["auth_error","missing_name","create_error"],examples:['resend segments create --name "Newsletter Subscribers"','resend segments create --name "Beta Users" --json']})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=await T(e.name,{message:"Segment name",placeholder:"e.g. Newsletter Subscribers"},{message:"Missing --name flag.",code:"missing_name"},o);await
|
|
794
|
+
Non-interactive: --name is required.`,output:' {"object":"segment","id":"<uuid>","name":"<name>"}',errorCodes:["auth_error","missing_name","create_error"],examples:['resend segments create --name "Newsletter Subscribers"','resend segments create --name "Beta Users" --json']})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=await T(e.name,{message:"Segment name",placeholder:"e.g. Newsletter Subscribers"},{message:"Missing --name flag.",code:"missing_name"},o);await B({loading:"Creating segment...",sdkCall:r=>r.segments.create({name:i}),onInteractive:r=>{console.log(`Segment created: ${r.id}`),console.log(`Name: ${r.name}`)}},o)});var fu=new c("delete").alias("rm").description("Delete a segment").argument("[id]","Segment UUID").option("--yes","Skip the confirmation prompt (required in non-interactive mode)").addHelpText("after",d({context:`Warning: Deleting a segment removes it as a target for future broadcasts,
|
|
793
795
|
but does NOT delete the contacts within it.
|
|
794
796
|
|
|
795
797
|
Non-interactive: --yes is required to confirm deletion when stdin/stdout is not a TTY.`,output:' {"object":"segment","id":"<uuid>","deleted":true}',errorCodes:["auth_error","confirmation_required","delete_error"],examples:["resend segments delete 78261eea-8f8b-4381-83c6-79fa7120f1cf --yes","resend segments delete 78261eea-8f8b-4381-83c6-79fa7120f1cf --yes --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await J(e,Oe,i);await z(r.id,!!t.yes,{confirmMessage:`Delete segment "${r.label}"?
|
|
796
798
|
ID: ${r.id}
|
|
797
|
-
Contacts will not be deleted, but broadcasts targeting this segment will no longer work.`,loading:"Deleting segment...",object:"segment",successMsg:"Segment deleted",sdkCall:n=>n.segments.remove(r.id)},i)});var hu=new c("get").description("Retrieve a segment by ID").argument("[id]","Segment UUID").addHelpText("after",d({output:' {"object":"segment","id":"<uuid>","name":"<name>","created_at":"<date>"}',errorCodes:["auth_error","fetch_error"],examples:["resend segments get 78261eea-8f8b-4381-83c6-79fa7120f1cf","resend segments get 78261eea-8f8b-4381-83c6-79fa7120f1cf --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,Oe,i);await
|
|
799
|
+
Contacts will not be deleted, but broadcasts targeting this segment will no longer work.`,loading:"Deleting segment...",object:"segment",successMsg:"Segment deleted",sdkCall:n=>n.segments.remove(r.id)},i)});var hu=new c("get").description("Retrieve a segment by ID").argument("[id]","Segment UUID").addHelpText("after",d({output:' {"object":"segment","id":"<uuid>","name":"<name>","created_at":"<date>"}',errorCodes:["auth_error","fetch_error"],examples:["resend segments get 78261eea-8f8b-4381-83c6-79fa7120f1cf","resend segments get 78261eea-8f8b-4381-83c6-79fa7120f1cf --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,Oe,i);await E({loading:"Fetching segment...",sdkCall:n=>n.segments.get(r),onInteractive:n=>{console.log(`${n.name}`),console.log(`ID: ${n.id}`),console.log(`Created: ${n.created_at}`)}},i)});var gu=new c("list").alias("ls").description("List all segments").option("--limit <n>","Maximum number of segments to return (1-100)","10").option("--after <cursor>","Return segments after this cursor (next page)").option("--before <cursor>","Return segments before this cursor (previous page)").addHelpText("after",d({context:`Pagination: use --after or --before with a segment ID as the cursor.
|
|
798
800
|
Only one of --after or --before may be used at a time.
|
|
799
801
|
The response includes has_more: true when additional pages exist.
|
|
800
802
|
|
|
801
803
|
Use "resend segments list" to discover segment IDs for use with broadcasts
|
|
802
|
-
or "resend contacts add-segment".`,output:' {"object":"list","data":[{"id":"<uuid>","name":"<name>","created_at":"<date>"}],"has_more":false}',errorCodes:["auth_error","invalid_limit","list_error"],examples:["resend segments list","resend segments list --limit 25 --json","resend segments list --after 78261eea-8f8b-4381-83c6-79fa7120f1cf --json"]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=
|
|
804
|
+
or "resend contacts add-segment".`,output:' {"object":"list","data":[{"id":"<uuid>","name":"<name>","created_at":"<date>"}],"has_more":false}',errorCodes:["auth_error","invalid_limit","list_error"],examples:["resend segments list","resend segments list --limit 25 --json","resend segments list --after 78261eea-8f8b-4381-83c6-79fa7120f1cf --json"]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=I(e.limit,o),r=G(i,e.after,e.before,o);await k({loading:"Fetching segments...",sdkCall:n=>n.segments.list(r),onInteractive:n=>{console.log(gi(n.data)),j(n,"segments list",{limit:i,before:e.before,apiKey:o.apiKey,profile:o.profile})}},o)});var Au=new c("update").description("Rename a segment").argument("[id]","Segment UUID").option("--name <name>","New segment name").addHelpText("after",d({context:"Non-interactive: --name is required (no prompts when stdin/stdout is not a TTY).",output:' {"object":"segment","id":"<uuid>"}',errorCodes:["auth_error","missing_name","update_error"],examples:['resend segments update 78261eea-8f8b-4381-83c6-79fa7120f1cf --name "Active Subscribers"','resend segments update 78261eea-8f8b-4381-83c6-79fa7120f1cf --name "Active Subscribers" --json']})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,Oe,i),n=await T(t.name,{message:"New segment name",placeholder:"e.g. Active Subscribers",validate:s=>{if(!s)return"Name is required"}},{message:"Missing --name flag.",code:"missing_name"},i);n||h({message:"Name is required.",code:"missing_name"},{json:i.json}),await R({loading:"Updating segment...",sdkCall:s=>s.segments.update(r,{name:n}),errorCode:"update_error",successMsg:`Segment updated: ${r}`},i)});var bu=new c("segments").description("Manage segments").addHelpText("after",d({context:`Segments are the modern replacement for Audiences (deprecated).
|
|
803
805
|
A segment is a named group of contacts. Broadcasts target segments via segment_id.
|
|
804
806
|
Contacts can belong to multiple segments.
|
|
805
807
|
|
|
@@ -809,7 +811,7 @@ Segment membership is managed through the contacts namespace:
|
|
|
809
811
|
resend contacts segments <contactId>`,examples:["resend segments list",'resend segments create --name "Newsletter Subscribers"',"resend segments get 78261eea-8f8b-4381-83c6-79fa7120f1cf",'resend segments update 78261eea-8f8b-4381-83c6-79fa7120f1cf --name "Active Subscribers"',"resend segments contacts 78261eea-8f8b-4381-83c6-79fa7120f1cf","resend segments delete 78261eea-8f8b-4381-83c6-79fa7120f1cf --yes"]})).addCommand(mu).addCommand(pu).addCommand(hu).addCommand(gu,{isDefault:!0}).addCommand(Au).addCommand(fu);var Vr=me(Je(),1);var yu=new c("add").description("Suppress an email address so it stops receiving your emails").argument("[email]","Email address to suppress").addHelpText("after",d({context:`Non-interactive: <email> is required (no prompts when stdin/stdout is not a TTY).
|
|
810
812
|
|
|
811
813
|
A suppressed address is skipped on future sends. Added this way, the entry has
|
|
812
|
-
origin "manual". Use "suppressions delete" to remove it again.`,output:' {"object":"suppression","id":"<id>"}',errorCodes:["auth_error","missing_email","create_error"],examples:["resend suppressions add spam@example.com","resend suppressions add spam@example.com --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await T(e,{message:"Email to suppress",placeholder:"e.g. spam@example.com"},{message:"Missing <email> argument.",code:"missing_email"},i);await
|
|
814
|
+
origin "manual". Use "suppressions delete" to remove it again.`,output:' {"object":"suppression","id":"<id>"}',errorCodes:["auth_error","missing_email","create_error"],examples:["resend suppressions add spam@example.com","resend suppressions add spam@example.com --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await T(e,{message:"Email to suppress",placeholder:"e.g. spam@example.com"},{message:"Missing <email> argument.",code:"missing_email"},i);await B({loading:"Suppressing address...",sdkCall:n=>n.suppressions.add({email:r}),onInteractive:n=>{console.log(` ${Vr.default.gray("Email:")} ${r}`),console.log(` ${Vr.default.gray("ID:")} ${n.id}`)}},i)});X();function ki(e,t){let o;try{o=JSON.parse(e)}catch{h({message:"File content is not valid JSON.",code:"invalid_json"},{json:t.json})}Array.isArray(o)||h({message:"File content must be a JSON array of strings.",code:"invalid_format"},{json:t.json});let i=o;for(let r=0;r<i.length;r++)(typeof i[r]!="string"||i[r]==="")&&h({message:`Item at index ${r} must be a non-empty string.`,code:"invalid_format"},{json:t.json});return i}var Cu=new c("add").description("Suppress up to 100 email addresses from a JSON file in one request").option("--file <path>",'Path to a JSON file containing an array of email strings (use "-" for stdin; required in non-interactive mode)').addHelpText("after",d({context:`Non-interactive: --file
|
|
813
815
|
Limit: 100 emails per request (API hard limit \u2014 warned if exceeded)
|
|
814
816
|
|
|
815
817
|
File format (--file path):
|
|
@@ -819,16 +821,16 @@ By default entries are treated as email addresses; pass --ids to remove by suppr
|
|
|
819
821
|
|
|
820
822
|
File format (--file path):
|
|
821
823
|
["spam@example.com", "bounce@example.com"]`,output:' {"data":[{"object":"suppression","id":"<id>","deleted":true}]}',errorCodes:["auth_error","missing_file","file_read_error","stdin_read_error","invalid_json","invalid_format","delete_error"],examples:["resend suppressions batch remove --file ./emails.json","resend suppressions batch remove --file ./ids.json --ids",`echo '["a@example.com","b@example.com"]' | resend suppressions batch rm --file -`]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=await ee(o),r=await T(e.file,{message:"Path to JSON file",placeholder:"./emails.json"},{message:"Missing --file flag. Provide a JSON file with an array of strings.",code:"missing_file"},o),n=ie(r,o),s=ki(n,o);s.length>100&&console.warn(`Warning: ${s.length} entries exceeds the 100-entry limit. The API may reject this request.`);let a=await ce("Removing suppressions...",()=>i.suppressions.batch.remove(e.ids?{ids:s}:{emails:s}),"delete_error",o);if(!o.json&&w()){console.log(`Removed ${a.data.length} suppression${a.data.length===1?"":"s"}`);for(let l of a.data)console.log(` ${l.id}`)}else N(a,{json:o.json})});var wu=new c("batch").description("Suppress or remove many addresses in a single request").addHelpText("after",d({context:`Batch operations read a JSON array of strings from --file (up to 100 per request).
|
|
822
|
-
"add" always operates on emails. "remove" defaults to emails; pass --ids to remove by ID.`,examples:["resend suppressions batch add --file ./emails.json","resend suppressions batch remove --file ./emails.json","resend suppressions batch remove --file ./ids.json --ids"]})).addCommand(Cu).addCommand(xu);var
|
|
824
|
+
"add" always operates on emails. "remove" defaults to emails; pass --ids to remove by ID.`,examples:["resend suppressions batch add --file ./emails.json","resend suppressions batch remove --file ./emails.json","resend suppressions batch remove --file ./ids.json --ids"]})).addCommand(Cu).addCommand(xu);var _i={resource:"suppression",resourcePlural:"suppressions",fetchItems:(e,{limit:t,after:o})=>e.suppressions.list({limit:t,...o&&{after:o}}),display:e=>({label:e.email,hint:e.id})};function Uu(e){let t=e.map(o=>[o.email,o.id,o.origin,o.created_at]);return _(["Email","ID","Origin","Created"],t,"(no suppressions)")}var vu=new c("delete").alias("rm").description("Remove a suppression so the address can receive your emails again").argument("[id-or-email]","Suppression ID or the suppressed email address").option("--yes","Skip confirmation prompt").addHelpText("after",d({context:`Non-interactive: --yes is required to confirm removal when stdin/stdout is not a TTY.
|
|
823
825
|
|
|
824
|
-
Removing a suppression means future sends to this address are no longer skipped.`,output:' {"object":"suppression","id":"<id>","deleted":true}',errorCodes:["auth_error","confirmation_required","delete_error"],examples:["resend suppressions delete spam@example.com --yes","resend suppressions rm 78261eea-8f8b-4381-83c6-79fa7120f1cf --yes --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await J(e,
|
|
826
|
+
Removing a suppression means future sends to this address are no longer skipped.`,output:' {"object":"suppression","id":"<id>","deleted":true}',errorCodes:["auth_error","confirmation_required","delete_error"],examples:["resend suppressions delete spam@example.com --yes","resend suppressions rm 78261eea-8f8b-4381-83c6-79fa7120f1cf --yes --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await J(e,_i,i);await z(r.id,!!t.yes,{confirmMessage:`Remove suppression "${r.label}"?
|
|
825
827
|
ID: ${r.id}
|
|
826
|
-
Resend will be able to send to this address again.`,loading:"Removing suppression...",object:"suppression",successMsg:"Suppression removed",sdkCall:n=>n.suppressions.remove(r.id)},i)});var Su=new c("get").description("Retrieve a suppression by ID or email address").argument("[id-or-email]","Suppression ID or the suppressed email address").addHelpText("after",d({output:' {"object":"suppression","id":"<id>","email":"<email>","origin":"bounce|complaint|manual","source_id":"<id>|null","created_at":"<date>"}',errorCodes:["auth_error","fetch_error"],examples:["resend suppressions get spam@example.com","resend suppressions get 78261eea-8f8b-4381-83c6-79fa7120f1cf --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,
|
|
828
|
+
Resend will be able to send to this address again.`,loading:"Removing suppression...",object:"suppression",successMsg:"Suppression removed",sdkCall:n=>n.suppressions.remove(r.id)},i)});var Su=new c("get").description("Retrieve a suppression by ID or email address").argument("[id-or-email]","Suppression ID or the suppressed email address").addHelpText("after",d({output:' {"object":"suppression","id":"<id>","email":"<email>","origin":"bounce|complaint|manual","source_id":"<id>|null","created_at":"<date>"}',errorCodes:["auth_error","fetch_error"],examples:["resend suppressions get spam@example.com","resend suppressions get 78261eea-8f8b-4381-83c6-79fa7120f1cf --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,_i,i);await E({loading:"Fetching suppression...",sdkCall:n=>n.suppressions.get(r),onInteractive:n=>{console.log(`${n.email}`),console.log(`ID: ${n.id}`),console.log(`Origin: ${n.origin}`),n.source_id&&console.log(`Source: ${n.source_id}`),console.log(`Created: ${n.created_at}`)}},i)});var Ku=new c("list").alias("ls").description("List suppressed email addresses").option("--limit <n>","Maximum number of suppressions to return (1-100)","10").option("--after <cursor>","Cursor for forward pagination \u2014 list items after this ID").option("--before <cursor>","Cursor for backward pagination \u2014 list items before this ID").addOption(new M("--origin <origin>","Filter by how the address was suppressed").choices(["bounce","complaint","manual"])).addHelpText("after",d({output:' {"object":"list","has_more":false,"data":[{"object":"suppression","id":"<id>","email":"<email>","origin":"bounce|complaint|manual","source_id":"<id>|null","created_at":"<date>"}]}',errorCodes:["auth_error","invalid_limit","list_error"],examples:["resend suppressions list","resend suppressions list --origin bounce --json","resend suppressions list --limit 25 --after <cursor> --json"]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=I(e.limit,o),r=G(i,e.after,e.before,o);await k({loading:"Fetching suppressions...",sdkCall:n=>n.suppressions.list({...r,...e.origin&&{origin:e.origin}}),onInteractive:n=>{console.log(Uu(n.data)),j(n,"suppressions list",{limit:i,before:e.before,apiKey:o.apiKey,profile:o.profile,...e.origin&&{extraFlags:`--origin ${e.origin}`}})}},o)});var ku=new c("suppressions").description("Manage the suppression list \u2014 addresses that won't receive your emails").addHelpText("after",d({context:`Suppressions block future sends to an address. Entries have an origin:
|
|
827
829
|
bounce added automatically after a hard bounce
|
|
828
830
|
complaint added automatically after a spam complaint
|
|
829
831
|
manual added by you via "suppressions add"
|
|
830
832
|
|
|
831
|
-
get/delete accept either a suppression ID or the email address.`,examples:["resend suppressions list","resend suppressions add spam@example.com","resend suppressions get spam@example.com","resend suppressions delete spam@example.com --yes","resend suppressions batch add --file ./emails.json"]})).addCommand(Ku,{isDefault:!0}).addCommand(yu).addCommand(Su).addCommand(vu).addCommand(wu);X();function
|
|
833
|
+
get/delete accept either a suppression ID or the email address.`,examples:["resend suppressions list","resend suppressions add spam@example.com","resend suppressions get spam@example.com","resend suppressions delete spam@example.com --yes","resend suppressions batch add --file ./emails.json"]})).addCommand(Ku,{isDefault:!0}).addCommand(yu).addCommand(Su).addCommand(vu).addCommand(wu);X();function Fi(e){return e.map(t=>{let[o,i,...r]=t.split(":");if(!o)throw new Error(`Invalid --var "${t}": key is required.`);if(i!=="string"&&i!=="number")throw new Error(`Invalid --var "${t}": type must be "string" or "number".`);let n=r.length?r.join(":"):void 0;if(n!=null&&n==="")throw new Error(`Invalid --var "${t}": fallback value cannot be empty.`);let s=n;if(i==="number"){if(s!=null&&Number.isNaN(Number(s)))throw new Error(`Invalid --var "${t}": fallback "${s}" is not a valid number.`);return{key:o,type:"number",...s!=null?{fallbackValue:Number(s)}:{}}}return{key:o,type:"string",...s!=null?{fallbackValue:s}:{}}})}var tt={resource:"template",resourcePlural:"templates",fetchItems:(e,{limit:t,after:o})=>e.templates.list({limit:t,...o&&{after:o}}),display:e=>({label:e.name,hint:e.id})};function _u(e){let t=e.map(o=>[o.name,o.status,o.alias??"",o.id,o.created_at]);return _(["Name","Status","Alias","ID","Created"],t,"(no templates)")}var Fu=new c("create").description("Create a new template").option("--name <name>","Template name \u2014 required").option("--html <html>","HTML body").option("--html-file <path>",'Path to an HTML file for the body (use "-" for stdin)').option("--subject <subject>","Email subject").option("--text <text>","Plain-text body").option("--text-file <path>",'Path to a plain-text file for the body (use "-" for stdin)').option("--react-email <path>","Path to a React Email template (.tsx) to bundle, render, and use as HTML body").option("--from <address>","Sender address").option("--reply-to <address>","Reply-to address").option("--alias <alias>","Template alias for lookup by name").option("--var <var...>","Template variable: KEY:type or KEY:type:fallback (repeatable)").addHelpText("after",d({context:`Creates a new draft template. Use "resend templates publish" to make it available for sending.
|
|
832
834
|
|
|
833
835
|
--name is required. Body: provide --html, --html-file, or --react-email. Optionally add --text or --text-file for plain-text.
|
|
834
836
|
|
|
@@ -838,24 +840,24 @@ get/delete accept either a suppression ID or the email address.`,examples:["rese
|
|
|
838
840
|
--html "<p>Hi {{{NAME}}}, your total is {{{PRICE}}}</p>"
|
|
839
841
|
--var NAME:string --var PRICE:number:0
|
|
840
842
|
|
|
841
|
-
Non-interactive: --name and a body (--html, --html-file, or --react-email) are required. --text-file provides a plain-text fallback.`,output:' {"object":"template","id":"<template-id>"}',errorCodes:["auth_error","missing_name","missing_body","file_read_error","invalid_options","stdin_read_error","react_email_build_error","react_email_render_error","create_error"],examples:['resend templates create --name "Welcome" --html "<h1>Hello</h1>" --subject "Welcome!"','resend templates create --name "Newsletter" --html-file ./template.html --from acme@example.com','resend templates create --name "Onboarding" --html "<p>Hi</p>" --alias onboarding --json','resend templates create --name "Order" --html "<p>{{{PRODUCT}}}: {{{PRICE}}}</p>" --var PRODUCT:string:item --var PRICE:number:25']})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=e.name;if(!i){(!w()||o.json)&&h({message:"Missing --name flag.",code:"missing_name"},{json:o.json});let s=await Z({message:"Template name",placeholder:"e.g. Welcome Email",validate:a=>a?void 0:"Required"});
|
|
843
|
+
Non-interactive: --name and a body (--html, --html-file, or --react-email) are required. --text-file provides a plain-text fallback.`,output:' {"object":"template","id":"<template-id>"}',errorCodes:["auth_error","missing_name","missing_body","file_read_error","invalid_options","stdin_read_error","react_email_build_error","react_email_render_error","create_error"],examples:['resend templates create --name "Welcome" --html "<h1>Hello</h1>" --subject "Welcome!"','resend templates create --name "Newsletter" --html-file ./template.html --from acme@example.com','resend templates create --name "Onboarding" --html "<p>Hi</p>" --alias onboarding --json','resend templates create --name "Order" --html "<p>{{{PRODUCT}}}: {{{PRICE}}}</p>" --var PRODUCT:string:item --var PRICE:number:25']})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=e.name;if(!i){(!w()||o.json)&&h({message:"Missing --name flag.",code:"missing_name"},{json:o.json});let s=await Z({message:"Template name",placeholder:"e.g. Welcome Email",validate:a=>a?void 0:"Required"});F(s)&&D("Cancelled."),i=s}e.htmlFile==="-"&&e.textFile==="-"&&h({message:"Cannot read both --html-file and --text-file from stdin. Pipe to one and pass the other as a file path.",code:"invalid_options"},{json:o.json}),e.reactEmail&&(e.html||e.htmlFile)&&h({message:"Cannot use --react-email with --html or --html-file",code:"invalid_options"},{json:o.json});let r=e.html,n=e.text;if(e.htmlFile&&(e.html&&process.stderr.write(`Warning: both --html and --html-file provided; using --html-file
|
|
842
844
|
`),r=ie(e.htmlFile,o)),e.textFile&&(e.text&&process.stderr.write(`Warning: both --text and --text-file provided; using --text-file
|
|
843
|
-
`),n=ie(e.textFile,o)),e.reactEmail&&(r=await Me(e.reactEmail,o)),!r){(!w()||o.json)&&h({message:"Missing body. Provide --html, --html-file, or --react-email.",code:"missing_body"},{json:o.json});let s=await Z({message:"HTML body",placeholder:"<h1>Hello {{name}}</h1>",validate:a=>a?void 0:"Required"});
|
|
845
|
+
`),n=ie(e.textFile,o)),e.reactEmail&&(r=await Me(e.reactEmail,o)),!r){(!w()||o.json)&&h({message:"Missing body. Provide --html, --html-file, or --react-email.",code:"missing_body"},{json:o.json});let s=await Z({message:"HTML body",placeholder:"<h1>Hello {{name}}</h1>",validate:a=>a?void 0:"Required"});F(s)&&D("Cancelled."),r=s}await B({loading:"Creating template...",sdkCall:s=>Promise.resolve(s.templates.create({name:i,html:r,...e.subject&&{subject:e.subject},...n&&{text:n},...e.from&&{from:e.from},...e.replyTo&&{replyTo:e.replyTo},...e.alias&&{alias:e.alias},...e.var&&{variables:Fi(e.var)}})),onInteractive:s=>{console.log(`Template created: ${s.id}`)}},o)});var Ru=new c("delete").alias("rm").description("Delete a template").argument("[id]","Template ID or alias").option("--yes","Skip the confirmation prompt (required in non-interactive mode)").addHelpText("after",d({context:`Warning: Deleting a template is permanent and cannot be undone.
|
|
844
846
|
|
|
845
847
|
Non-interactive: --yes is required to confirm deletion when stdin/stdout is not a TTY.`,output:' {"object":"template","id":"<uuid>","deleted":true}',errorCodes:["auth_error","confirmation_required","delete_error"],examples:["resend templates delete 78261eea-8f8b-4381-83c6-79fa7120f1cf","resend templates delete 78261eea-8f8b-4381-83c6-79fa7120f1cf --yes","resend templates rm my-template-alias --yes","resend templates delete 78261eea-8f8b-4381-83c6-79fa7120f1cf --yes --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await J(e,tt,i);await z(r.id,!!t.yes,{confirmMessage:`Delete template "${r.label}"?
|
|
846
848
|
ID: ${r.id}
|
|
847
849
|
This action is permanent and cannot be undone.`,loading:"Deleting template...",object:"template",successMsg:"Template deleted",sdkCall:n=>n.templates.remove(r.id)},i)});var Du=new c("duplicate").description("Duplicate a template").argument("[id]","Template ID or alias to duplicate").addHelpText("after",d({context:`Creates a copy of an existing template and returns the new template ID.
|
|
848
850
|
The duplicate is created as a draft with " (Copy)" appended to the original name.
|
|
849
|
-
All fields (HTML, subject, variables, etc.) are copied to the new template.`,output:' {"object":"template","id":"<new-template-id>"}',errorCodes:["auth_error","create_error"],examples:["resend templates duplicate 78261eea-8f8b-4381-83c6-79fa7120f1cf","resend templates duplicate my-template-alias --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,tt,i);await
|
|
851
|
+
All fields (HTML, subject, variables, etc.) are copied to the new template.`,output:' {"object":"template","id":"<new-template-id>"}',errorCodes:["auth_error","create_error"],examples:["resend templates duplicate 78261eea-8f8b-4381-83c6-79fa7120f1cf","resend templates duplicate my-template-alias --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,tt,i);await B({loading:"Duplicating template...",sdkCall:n=>Promise.resolve(n.templates.duplicate(r)),onInteractive:n=>{console.log(`Template duplicated: ${n.id}`)}},i)});var Tu=new c("get").description("Retrieve a template by ID or alias").argument("[id]","Template ID or alias").addHelpText("after",d({context:"Returns the full template including HTML body, variables, and publication status.",output:' {"object":"template","id":"...","name":"...","subject":"...","status":"draft|published","html":"...","alias":"...","from":"...","reply_to":["..."],"variables":[...],"created_at":"...","updated_at":"..."}',errorCodes:["auth_error","fetch_error"],examples:["resend templates get 78261eea-8f8b-4381-83c6-79fa7120f1cf","resend templates get my-template-alias","resend templates get 78261eea-8f8b-4381-83c6-79fa7120f1cf --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,tt,i);await E({loading:"Fetching template...",sdkCall:n=>n.templates.get(r),onInteractive:n=>{if(console.log(`${n.name}`),console.log(`ID: ${n.id}`),console.log(`Status: ${n.status}`),n.alias&&console.log(`Alias: ${n.alias}`),n.subject&&console.log(`Subject: ${n.subject}`),n.from&&console.log(`From: ${n.from}`),n.reply_to?.length&&console.log(`Reply-To: ${n.reply_to.join(", ")}`),n.html){let s=n.html.length>200?`${n.html.slice(0,197)}...`:n.html;console.log(`HTML: ${s}`)}n.variables?.length&&console.log(`Variables: ${n.variables.map(s=>s.key).join(", ")}`),n.published_at&&console.log(`Published: ${n.published_at}`),console.log(`Created: ${n.created_at}`),console.log(`Updated: ${n.updated_at}`)}},i)});var Ou=new c("list").alias("ls").description("List all templates").option("--limit <n>","Maximum number of templates to return (1-100)","10").option("--after <cursor>","Cursor for forward pagination \u2014 list items after this ID").option("--before <cursor>","Cursor for backward pagination \u2014 list items before this ID").addHelpText("after",d({output:' {"object":"list","has_more":false,"data":[{"id":"...","name":"...","status":"draft|published","alias":"...","created_at":"..."}]}',errorCodes:["auth_error","invalid_limit","list_error"],examples:["resend templates list","resend templates list --limit 5","resend templates list --after <template-id> --limit 10","resend templates list --json"]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=I(e.limit,o),r=G(i,e.after,e.before,o);await k({loading:"Fetching templates...",sdkCall:n=>n.templates.list(r),onInteractive:n=>{console.log(_u(n.data)),j(n,"templates list",{limit:i,before:e.before,apiKey:o.apiKey,profile:o.profile})}},o)});var Eu=new c("open").description("Open a template or the templates list in the Resend dashboard").argument("[id]","Template ID \u2014 omit to open the templates list").addHelpText("after",d({context:`Opens the Resend dashboard in your default browser.
|
|
850
852
|
With an ID: opens that template's page for editing or viewing.
|
|
851
|
-
Without an ID: opens the templates list.`,examples:["resend templates open","resend templates open 78261eea-8f8b-4381-83c6-79fa7120f1cf"]})).action(async(e,t,o)=>{let i=e?fe.template(e):fe.templates,r=o.optsWithGlobals();await Te(i,r)});var
|
|
853
|
+
Without an ID: opens the templates list.`,examples:["resend templates open","resend templates open 78261eea-8f8b-4381-83c6-79fa7120f1cf"]})).action(async(e,t,o)=>{let i=e?fe.template(e):fe.templates,r=o.optsWithGlobals();await Te(i,r)});var Bu=new c("publish").description("Publish a draft template").argument("[id]","Template ID or alias").addHelpText("after",d({context:`Promotes a draft template to published status, making it available for use in emails.
|
|
852
854
|
After updating a published template, re-publish to make the changes live.
|
|
853
|
-
Publishing an already-published template re-publishes it with the latest draft changes.`,output:' {"object":"template","id":"<template-id>"}',errorCodes:["auth_error","publish_error"],examples:["resend templates publish 78261eea-8f8b-4381-83c6-79fa7120f1cf","resend templates publish 78261eea-8f8b-4381-83c6-79fa7120f1cf --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,tt,i);await
|
|
855
|
+
Publishing an already-published template re-publishes it with the latest draft changes.`,output:' {"object":"template","id":"<template-id>"}',errorCodes:["auth_error","publish_error"],examples:["resend templates publish 78261eea-8f8b-4381-83c6-79fa7120f1cf","resend templates publish 78261eea-8f8b-4381-83c6-79fa7120f1cf --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,tt,i);await R({loading:"Publishing template...",sdkCall:n=>n.templates.publish(r),errorCode:"publish_error",successMsg:`Template published: ${r}`,retryTransient:!0},i)});var Iu=new c("update").description("Update an existing template").argument("[id]","Template ID or alias").option("--name <name>","Update template name").option("--html <html>","Update HTML body").option("--html-file <path>",'Path to an HTML file to replace the body (use "-" for stdin)').option("--subject <subject>","Update subject").option("--text <text>","Update plain-text body").option("--text-file <path>",'Path to a plain-text file to replace the body (use "-" for stdin)').option("--react-email <path>","Path to a React Email template (.tsx) to bundle, render, and use as HTML body").option("--from <address>","Update sender address").option("--reply-to <address>","Update reply-to address").option("--alias <alias>","Update template alias").option("--var <var...>","Template variable: KEY:type or KEY:type:fallback (repeatable)").addHelpText("after",d({context:`At least one option is required. Only the provided fields are changed; others are left as-is.
|
|
854
856
|
|
|
855
857
|
--var declares a template variable using the format KEY:type or KEY:type:fallback.
|
|
856
858
|
Valid types: string, number.
|
|
857
859
|
Variables must match {{{KEY}}} placeholders in the HTML body.`,output:' {"object":"template","id":"<template-id>"}',errorCodes:["auth_error","no_changes","file_read_error","invalid_options","stdin_read_error","react_email_build_error","react_email_render_error","update_error"],examples:['resend templates update 78261eea-8f8b-4381-83c6-79fa7120f1cf --name "Updated Name"',"resend templates update 78261eea-8f8b-4381-83c6-79fa7120f1cf --html-file ./new-template.html",'resend templates update 78261eea-8f8b-4381-83c6-79fa7120f1cf --subject "New Subject" --from "acme@example.com" --json',"resend templates update 78261eea-8f8b-4381-83c6-79fa7120f1cf --var PRODUCT:string:item --var PRICE:number:25"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals();t.name==null&&t.html==null&&t.htmlFile==null&&t.reactEmail==null&&t.subject==null&&t.text==null&&t.textFile==null&&t.from==null&&t.replyTo==null&&t.alias==null&&t.var==null&&h({message:"Provide at least one option to update: --name, --html, --html-file, --react-email, --subject, --text, --text-file, --from, --reply-to, --alias, or --var.",code:"no_changes"},{json:i.json}),t.reactEmail!=null&&(t.html!=null||t.htmlFile!=null)&&h({message:"Cannot use --react-email with --html or --html-file",code:"invalid_options"},{json:i.json}),t.html!=null&&t.htmlFile!=null&&h({message:"--html and --html-file are mutually exclusive.",code:"invalid_options"},{json:i.json}),t.htmlFile==="-"&&t.textFile==="-"&&h({message:"Cannot read both --html-file and --text-file from stdin. Pipe to one and pass the other as a file path.",code:"invalid_options"},{json:i.json});let r=await g(e,tt,i),n=t.html,s=t.text;t.htmlFile!=null&&(n=ie(t.htmlFile,i)),t.textFile!=null&&(t.text!=null&&process.stderr.write(`Warning: both --text and --text-file provided; using --text-file
|
|
858
|
-
`),s=ie(t.textFile,i)),t.reactEmail!=null&&(n=await Me(t.reactEmail,i)),await
|
|
860
|
+
`),s=ie(t.textFile,i)),t.reactEmail!=null&&(n=await Me(t.reactEmail,i)),await R({loading:"Updating template...",sdkCall:a=>a.templates.update(r,{...t.name!=null&&{name:t.name},...n!=null&&{html:n},...t.subject!=null&&{subject:t.subject},...s!=null&&{text:s},...t.from!=null&&{from:t.from},...t.replyTo!=null&&{replyTo:t.replyTo},...t.alias!=null&&{alias:t.alias},...t.var!=null&&{variables:Fi(t.var)}}),errorCode:"update_error",successMsg:`Template updated: ${r}`,retryTransient:!0},i)});var ju=new c("templates").description("Manage templates").addHelpText("after",d({context:`Lifecycle:
|
|
859
861
|
Templates follow a draft \u2192 published workflow:
|
|
860
862
|
1. create \u2014 creates a draft template
|
|
861
863
|
2. update \u2014 edits name, subject, HTML, variables, etc.
|
|
@@ -869,7 +871,7 @@ Template variables:
|
|
|
869
871
|
Each variable must be declared with --var when creating or updating:
|
|
870
872
|
--var KEY:type e.g. --var NAME:string
|
|
871
873
|
--var KEY:type:fallback e.g. --var PRICE:number:25
|
|
872
|
-
Valid types: string, number.`,examples:["resend templates list",'resend templates create --name "Welcome" --html "<h1>Hello {{{NAME}}}</h1>" --subject "Welcome!" --var NAME:string',"resend templates get 78261eea-8f8b-4381-83c6-79fa7120f1cf",'resend templates update 78261eea-8f8b-4381-83c6-79fa7120f1cf --subject "Updated Subject"',"resend templates publish 78261eea-8f8b-4381-83c6-79fa7120f1cf","resend templates duplicate 78261eea-8f8b-4381-83c6-79fa7120f1cf","resend templates delete 78261eea-8f8b-4381-83c6-79fa7120f1cf --yes","resend templates open","resend templates open 78261eea-8f8b-4381-83c6-79fa7120f1cf"]})).addCommand(
|
|
874
|
+
Valid types: string, number.`,examples:["resend templates list",'resend templates create --name "Welcome" --html "<h1>Hello {{{NAME}}}</h1>" --subject "Welcome!" --var NAME:string',"resend templates get 78261eea-8f8b-4381-83c6-79fa7120f1cf",'resend templates update 78261eea-8f8b-4381-83c6-79fa7120f1cf --subject "Updated Subject"',"resend templates publish 78261eea-8f8b-4381-83c6-79fa7120f1cf","resend templates duplicate 78261eea-8f8b-4381-83c6-79fa7120f1cf","resend templates delete 78261eea-8f8b-4381-83c6-79fa7120f1cf --yes","resend templates open","resend templates open 78261eea-8f8b-4381-83c6-79fa7120f1cf"]})).addCommand(Fu).addCommand(Tu).addCommand(Eu).addCommand(Ou,{isDefault:!0}).addCommand(Iu).addCommand(Ru).addCommand(Bu).addCommand(Du);var Pu=new c("create").description("Create a new topic for subscription management").option("--name <name>","Topic name (required)").option("--description <description>","Description shown to contacts when managing subscriptions").addOption(new M("--default-subscription <mode>","Default subscription state for contacts").choices(["opt_in","opt_out"]).default("opt_in")).addHelpText("after",d({context:`Topics enable fine-grained subscription management. Contacts can opt in or out of
|
|
873
875
|
individual topics. Broadcasts can target only contacts opted into a specific topic.
|
|
874
876
|
|
|
875
877
|
Example topics: "Product Updates", "Security Alerts", "Weekly Digest".
|
|
@@ -878,16 +880,16 @@ Example topics: "Product Updates", "Security Alerts", "Weekly Digest".
|
|
|
878
880
|
opt_in Contacts receive broadcasts unless they explicitly opt out (default)
|
|
879
881
|
opt_out Contacts do NOT receive broadcasts unless they explicitly opt in
|
|
880
882
|
|
|
881
|
-
Non-interactive: --name is required.`,output:' {"id":"<uuid>"}',errorCodes:["auth_error","missing_name","create_error"],examples:['resend topics create --name "Product Updates"','resend topics create --name "Weekly Digest" --default-subscription opt_out','resend topics create --name "Security Alerts" --description "Critical security notices" --json']})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=await T(e.name,{message:"Topic name",placeholder:"e.g. Product Updates"},{message:"Missing --name flag.",code:"missing_name"},o);await
|
|
883
|
+
Non-interactive: --name is required.`,output:' {"id":"<uuid>"}',errorCodes:["auth_error","missing_name","create_error"],examples:['resend topics create --name "Product Updates"','resend topics create --name "Weekly Digest" --default-subscription opt_out','resend topics create --name "Security Alerts" --description "Critical security notices" --json']})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=await T(e.name,{message:"Topic name",placeholder:"e.g. Product Updates"},{message:"Missing --name flag.",code:"missing_name"},o);await B({loading:"Creating topic...",sdkCall:r=>r.topics.create({name:i,defaultSubscription:e.defaultSubscription,...e.description&&{description:e.description}}),onInteractive:r=>{console.log(`Topic created: ${r.id}`)}},o)});var $u=new c("delete").alias("rm").description("Delete a topic").argument("[id]","Topic UUID").option("--yes","Skip the confirmation prompt (required in non-interactive mode)").addHelpText("after",d({context:`Warning: Deleting a topic removes all contact subscriptions to that topic and may affect
|
|
882
884
|
broadcasts that reference this topic_id. Contacts themselves are not deleted.
|
|
883
885
|
|
|
884
886
|
Non-interactive: --yes is required to confirm deletion when stdin/stdout is not a TTY.`,output:' {"object":"topic","id":"<uuid>","deleted":true}',errorCodes:["auth_error","confirmation_required","delete_error"],examples:["resend topics delete 78261eea-8f8b-4381-83c6-79fa7120f1cf --yes","resend topics delete 78261eea-8f8b-4381-83c6-79fa7120f1cf --yes --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await J(e,yt,i);await z(r.id,!!t.yes,{confirmMessage:`Delete topic "${r.label}"?
|
|
885
887
|
ID: ${r.id}
|
|
886
|
-
All contact subscriptions and broadcast associations will be removed.`,loading:"Deleting topic...",object:"topic",successMsg:"Topic deleted",sdkCall:n=>n.topics.remove(r.id)},i)});var Gu=new c("get").description("Retrieve a topic by ID").argument("[id]","Topic UUID").addHelpText("after",d({output:' {"id":"<uuid>","name":"<name>","description":"<desc>","default_subscription":"opt_in|opt_out","created_at":"<date>"}',errorCodes:["auth_error","fetch_error"],examples:["resend topics get 78261eea-8f8b-4381-83c6-79fa7120f1cf","resend topics get 78261eea-8f8b-4381-83c6-79fa7120f1cf --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,yt,i);await
|
|
888
|
+
All contact subscriptions and broadcast associations will be removed.`,loading:"Deleting topic...",object:"topic",successMsg:"Topic deleted",sdkCall:n=>n.topics.remove(r.id)},i)});var Gu=new c("get").description("Retrieve a topic by ID").argument("[id]","Topic UUID").addHelpText("after",d({output:' {"id":"<uuid>","name":"<name>","description":"<desc>","default_subscription":"opt_in|opt_out","created_at":"<date>"}',errorCodes:["auth_error","fetch_error"],examples:["resend topics get 78261eea-8f8b-4381-83c6-79fa7120f1cf","resend topics get 78261eea-8f8b-4381-83c6-79fa7120f1cf --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,yt,i);await E({loading:"Fetching topic...",sdkCall:n=>n.topics.get(r),onInteractive:n=>{console.log(`${n.name}`),console.log(`ID: ${n.id}`),n.description&&console.log(`Description: ${n.description}`),console.log(`Default subscription: ${n.default_subscription}`),console.log(`Created: ${n.created_at}`)}},i)});var Hu=new c("list").alias("ls").description("List all topics").addHelpText("after",d({context:`Returns all topics in your account. Topic subscription management for individual
|
|
887
889
|
contacts is handled via "resend contacts topics <contactId>".`,output:' {"data":[{"id":"<uuid>","name":"<name>","description":"<desc>","default_subscription":"opt_in|opt_out","created_at":"<date>"}]}',errorCodes:["auth_error","list_error"],examples:["resend topics list","resend topics list --json"]})).action(async(e,t)=>{let o=t.optsWithGlobals();await k({loading:"Fetching topics...",sdkCall:i=>i.topics.list(),onInteractive:i=>console.log(hl(i.data))},o)});var Qu=new c("update").description("Update a topic's name or description").argument("[id]","Topic UUID").option("--name <name>","New topic name").option("--description <description>","New description shown to contacts").addHelpText("after",d({context:`At least one of --name or --description must be provided to update the topic.
|
|
888
890
|
|
|
889
891
|
Note: --default-subscription cannot be changed after creation.
|
|
890
|
-
To change the default subscription, delete the topic and recreate it.`,output:' {"id":"<uuid>"}',errorCodes:["auth_error","no_changes","update_error"],examples:['resend topics update 78261eea-8f8b-4381-83c6-79fa7120f1cf --name "Security Alerts"','resend topics update 78261eea-8f8b-4381-83c6-79fa7120f1cf --description "Critical notices" --json']})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,yt,i);!t.name&&!t.description&&h({message:"Provide at least one option to update: --name or --description.",code:"no_changes"},{json:i.json}),await
|
|
892
|
+
To change the default subscription, delete the topic and recreate it.`,output:' {"id":"<uuid>"}',errorCodes:["auth_error","no_changes","update_error"],examples:['resend topics update 78261eea-8f8b-4381-83c6-79fa7120f1cf --name "Security Alerts"','resend topics update 78261eea-8f8b-4381-83c6-79fa7120f1cf --description "Critical notices" --json']})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,yt,i);!t.name&&!t.description&&h({message:"Provide at least one option to update: --name or --description.",code:"no_changes"},{json:i.json}),await R({loading:"Updating topic...",sdkCall:n=>n.topics.update({id:r,...t.name&&{name:t.name},...t.description&&{description:t.description}}),errorCode:"update_error",successMsg:`Topic updated: ${r}`},i)});var Nu=new c("topics").description("Manage topics for contact subscription preferences").addHelpText("after",d({context:`Topics enable fine-grained subscription management beyond the global unsubscribe flag.
|
|
891
893
|
A contact can opt in or out of individual topics independently.
|
|
892
894
|
|
|
893
895
|
Broadcasts can target a topic_id so only contacts who have opted into that topic
|
|
@@ -904,7 +906,7 @@ Contact topic subscriptions are managed via the contacts namespace:
|
|
|
904
906
|
Shows the current version, latest version, and how to upgrade.`,output:` {"current":"1.4.0","latest":"1.5.0","update_available":true,"upgrade_command":"npm install -g resend-cli"}
|
|
905
907
|
{"current":"1.5.0","latest":"1.5.0","update_available":false}`,examples:["resend update","resend update --json"]})).action(async(e,t)=>{let o=t.optsWithGlobals(),r=w()&&!o.json?ae("Checking for updates..."):null,n=await Hr();if(!n){r?.fail("Could not check for updates"),h({message:"Could not reach GitHub releases",code:"fetch_failed"},{json:o.json});return}let s=wi(se,n),a=Ui();if(o.json||!w()){N({current:se,latest:n,update_available:s,...s?{upgrade_command:a}:{}},{json:o.json});return}if(s){let l=a.startsWith("http");r?.warn(`Update available: v${se} \u2192 v${n}`),console.log(`
|
|
906
908
|
${l?"Visit":"Run"}: \x1B[36m${a}\x1B[0m
|
|
907
|
-
`)}else r?.stop(`Already up to date (v${se})`)});X();var lt=["email.sent","email.delivered","email.delivery_delayed","email.bounced","email.complained","email.opened","email.clicked","email.failed","email.scheduled","email.suppressed","email.received","contact.created","contact.updated","contact.deleted","domain.created","domain.updated","domain.deleted","suppression.added","suppression.removed"];function eo(e){return e.flatMap(t=>t.split(",")).map(t=>t.trim()).filter(Boolean)}var Ce={resource:"webhook",resourcePlural:"webhooks",fetchItems:(e,{limit:t,after:o})=>e.webhooks.list({limit:t,...o&&{after:o}}),display:e=>({label:e.endpoint,hint:e.id})};function qu(e){let t=e.map(o=>{let i=(o.events??[]).join(", "),r=i.length>60?`${i.slice(0,57)}...`:i;return[o.endpoint,r,o.status,o.id]});return
|
|
909
|
+
`)}else r?.stop(`Already up to date (v${se})`)});X();var lt=["email.sent","email.delivered","email.delivery_delayed","email.bounced","email.complained","email.opened","email.clicked","email.failed","email.scheduled","email.suppressed","email.received","contact.created","contact.updated","contact.deleted","domain.created","domain.updated","domain.deleted","suppression.added","suppression.removed"];function eo(e){return e.flatMap(t=>t.split(",")).map(t=>t.trim()).filter(Boolean)}var Ce={resource:"webhook",resourcePlural:"webhooks",fetchItems:(e,{limit:t,after:o})=>e.webhooks.list({limit:t,...o&&{after:o}}),display:e=>({label:e.endpoint,hint:e.id})};function qu(e){let t=e.map(o=>{let i=(o.events??[]).join(", "),r=i.length>60?`${i.slice(0,57)}...`:i;return[o.endpoint,r,o.status,o.id]});return _(["Endpoint","Events","Status","ID"],t,"(no webhooks)")}var Lu=new c("create").description("Register a new webhook endpoint to receive real-time event notifications").option("--endpoint <endpoint>","HTTPS URL to receive webhook events (required)").option("--events <events...>",'Event types to subscribe to (comma or space-separated). Use "all" for all 17 events.').addHelpText("after",d({context:`Webhooks deliver real-time event notifications to your HTTPS endpoint.
|
|
908
910
|
Events fire per-recipient: a batch email to 3 recipients generates 3 email.sent events.
|
|
909
911
|
|
|
910
912
|
--endpoint must use HTTPS.
|
|
@@ -926,35 +928,35 @@ Use the signing_secret in the response to verify webhook payloads using Svix
|
|
|
926
928
|
signature headers (svix-id, svix-timestamp, svix-signature). "resend webhooks get" returns it again.
|
|
927
929
|
Use resend.webhooks.verify() in your application to validate incoming payloads.
|
|
928
930
|
|
|
929
|
-
Non-interactive: --endpoint and --events are required.`,output:' {"object":"webhook","id":"<uuid>","signing_secret":"<whsec_...>"}',errorCodes:["auth_error","missing_endpoint","missing_events","create_error"],examples:["resend webhooks create --endpoint https://app.example.com/hooks/resend --events all","resend webhooks create --endpoint https://app.example.com/hooks/resend --events email.sent email.bounced","resend webhooks create --endpoint https://app.example.com/hooks/resend --events all --json"]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=await T(e.endpoint,{message:"Webhook endpoint URL",placeholder:"https://your-app.com/webhooks/resend",validate:s=>{if(!s)return"Endpoint URL is required";if(!s.startsWith("https://"))return"Endpoint must use HTTPS"}},{message:"Missing --endpoint flag.",code:"missing_endpoint"},o),r,n=e.events?.length?eo(e.events):void 0;if(n?.includes("all"))r=lt;else if(n?.length)r=n;else{(!w()||o.json)&&h({message:"Missing --events flag.",code:"missing_events"},{json:o.json});let s=await Jn({message:"Select event types to subscribe to",options:lt.map(a=>({value:a,label:a}))});
|
|
931
|
+
Non-interactive: --endpoint and --events are required.`,output:' {"object":"webhook","id":"<uuid>","signing_secret":"<whsec_...>"}',errorCodes:["auth_error","missing_endpoint","missing_events","create_error"],examples:["resend webhooks create --endpoint https://app.example.com/hooks/resend --events all","resend webhooks create --endpoint https://app.example.com/hooks/resend --events email.sent email.bounced","resend webhooks create --endpoint https://app.example.com/hooks/resend --events all --json"]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=await T(e.endpoint,{message:"Webhook endpoint URL",placeholder:"https://your-app.com/webhooks/resend",validate:s=>{if(!s)return"Endpoint URL is required";if(!s.startsWith("https://"))return"Endpoint must use HTTPS"}},{message:"Missing --endpoint flag.",code:"missing_endpoint"},o),r,n=e.events?.length?eo(e.events):void 0;if(n?.includes("all"))r=lt;else if(n?.length)r=n;else{(!w()||o.json)&&h({message:"Missing --events flag.",code:"missing_events"},{json:o.json});let s=await Jn({message:"Select event types to subscribe to",options:lt.map(a=>({value:a,label:a}))});F(s)&&D("Cancelled."),r=s}await B({loading:"Creating webhook...",sdkCall:s=>s.webhooks.create({endpoint:i,events:r}),onInteractive:s=>{console.log("Webhook created"),console.log(`ID: ${s.id}`),console.log(`Signing Secret: ${s.signing_secret}`)}},o)});var Wu=new c("delete").alias("rm").description("Delete a webhook endpoint and stop all event deliveries to it").argument("[id]","Webhook UUID").option("--yes","Skip the confirmation prompt (required in non-interactive mode)").addHelpText("after",d({context:`Warning: Deleting a webhook immediately stops event delivery to the endpoint.
|
|
930
932
|
In-flight events may still be attempted once before the deletion takes effect.
|
|
931
933
|
To temporarily pause delivery without losing configuration, use:
|
|
932
934
|
resend webhooks update <id> --status disabled
|
|
933
935
|
|
|
934
936
|
Non-interactive: --yes is required to confirm deletion when stdin/stdout is not a TTY.`,output:' {"object":"webhook","id":"<uuid>","deleted":true}',errorCodes:["auth_error","confirmation_required","delete_error"],examples:["resend webhooks delete wh_abc123 --yes","resend webhooks delete wh_abc123 --yes --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await J(e,Ce,i);await z(r.id,!!t.yes,{confirmMessage:`Delete webhook "${r.label}"?
|
|
935
937
|
ID: ${r.id}
|
|
936
|
-
Events will no longer be delivered to this endpoint.`,loading:"Deleting webhook...",object:"webhook",successMsg:"Webhook deleted",sdkCall:n=>n.webhooks.remove(r.id)},i)});function to(e){return{resource:"webhook event",resourcePlural:"webhook events",fetchItems:(t,{limit:o,after:i})=>t.webhooks.events.list({webhookId:e,limit:o,...i&&{after:i}}),display:t=>({label:`${t.type} (${t.status})`,hint:t.id})}}function Ju(e){let t=e.map(o=>[o.type,o.status,o.created_at,o.id]);return
|
|
938
|
+
Events will no longer be delivered to this endpoint.`,loading:"Deleting webhook...",object:"webhook",successMsg:"Webhook deleted",sdkCall:n=>n.webhooks.remove(r.id)},i)});function to(e){return{resource:"webhook event",resourcePlural:"webhook events",fetchItems:(t,{limit:o,after:i})=>t.webhooks.events.list({webhookId:e,limit:o,...i&&{after:i}}),display:t=>({label:`${t.type} (${t.status})`,hint:t.id})}}function Ju(e){let t=e.map(o=>[o.type,o.status,o.created_at,o.id]);return _(["Type","Status","Created","ID"],t,"(no webhook events)")}function Vu(e){let t=e.map(o=>{let i=o.response.replace(/\s+/g," ").trim();return[String(o.http_status_code),o.sent_at,i.length>60?`${i.slice(0,57)}...`:i,o.id]});return _(["HTTP","Sent","Response","ID"],t,"(no delivery attempts)")}var zu=new c("attempts").description("List the delivery attempts for a webhook event, most recent first").argument("[webhookId]","Webhook ID").argument("[eventId]","Webhook event ID").option("--limit <n>","Maximum number of attempts to return (1-100)","10").option("--after <cursor>","Return attempts after this attempt ID (next page)").addHelpText("after",d({context:`Each attempt records what your endpoint returned: http_status_code and the
|
|
937
939
|
response body. Use this to debug why an event ended up in the failed status.
|
|
938
940
|
|
|
939
|
-
This endpoint paginates forward only \u2014 there is no --before cursor.`,output:' {"object":"list","has_more":false,"data":[{"id":"atmpt_...","http_status_code":500,"response":"Internal Server Error","sent_at":"..."}]}',errorCodes:["auth_error","invalid_limit","list_error"],examples:["resend webhooks events attempts 4dd369bc-aa82-4ff3-97de-514ae3000ee0 msg_1srOrx2ZWZBpBUvZwXKQmoEYga2","resend webhooks events attempts 4dd369bc-aa82-4ff3-97de-514ae3000ee0 msg_1srOrx2ZWZBpBUvZwXKQmoEYga2 --json"]})).action(async(e,t,o,i)=>{let r=i.optsWithGlobals(),n=await g(e,Ce,r),s=await g(t,to(n),r),a=
|
|
941
|
+
This endpoint paginates forward only \u2014 there is no --before cursor.`,output:' {"object":"list","has_more":false,"data":[{"id":"atmpt_...","http_status_code":500,"response":"Internal Server Error","sent_at":"..."}]}',errorCodes:["auth_error","invalid_limit","list_error"],examples:["resend webhooks events attempts 4dd369bc-aa82-4ff3-97de-514ae3000ee0 msg_1srOrx2ZWZBpBUvZwXKQmoEYga2","resend webhooks events attempts 4dd369bc-aa82-4ff3-97de-514ae3000ee0 msg_1srOrx2ZWZBpBUvZwXKQmoEYga2 --json"]})).action(async(e,t,o,i)=>{let r=i.optsWithGlobals(),n=await g(e,Ce,r),s=await g(t,to(n),r),a=I(o.limit,r);await k({loading:"Fetching delivery attempts...",sdkCall:l=>l.webhooks.events.attempts.list({webhookId:n,eventId:s,limit:a,...o.after!==void 0&&{after:o.after}}),onInteractive:l=>{console.log(Vu(l.data)),j(l,`webhooks events attempts ${n} ${s}`,{limit:a,apiKey:r.apiKey,profile:r.profile})}},r)});var Yu=new c("get").description("Retrieve a single event delivered to a webhook").argument("[webhookId]","Webhook ID").argument("[eventId]","Webhook event ID").addHelpText("after",d({context:`next_attempt_at is when the next delivery attempt is scheduled. It is null
|
|
940
942
|
once the event reaches success or failed.
|
|
941
943
|
|
|
942
|
-
payload is the JSON body that was sent to your endpoint.`,output:' {"object":"webhook_event","id":"msg_...","type":"email.sent","created_at":"...","status":"attempting","next_attempt_at":"...","payload":{...}}',errorCodes:["auth_error","fetch_error"],examples:["resend webhooks events get 4dd369bc-aa82-4ff3-97de-514ae3000ee0 msg_1srOrx2ZWZBpBUvZwXKQmoEYga2","resend webhooks events get 4dd369bc-aa82-4ff3-97de-514ae3000ee0 msg_1srOrx2ZWZBpBUvZwXKQmoEYga2 --json"]})).action(async(e,t,o,i)=>{let r=i.optsWithGlobals(),n=await g(e,Ce,r),s=await g(t,to(n),r);await
|
|
944
|
+
payload is the JSON body that was sent to your endpoint.`,output:' {"object":"webhook_event","id":"msg_...","type":"email.sent","created_at":"...","status":"attempting","next_attempt_at":"...","payload":{...}}',errorCodes:["auth_error","fetch_error"],examples:["resend webhooks events get 4dd369bc-aa82-4ff3-97de-514ae3000ee0 msg_1srOrx2ZWZBpBUvZwXKQmoEYga2","resend webhooks events get 4dd369bc-aa82-4ff3-97de-514ae3000ee0 msg_1srOrx2ZWZBpBUvZwXKQmoEYga2 --json"]})).action(async(e,t,o,i)=>{let r=i.optsWithGlobals(),n=await g(e,Ce,r),s=await g(t,to(n),r);await E({loading:"Fetching webhook event...",sdkCall:a=>a.webhooks.events.get({webhookId:n,eventId:s}),onInteractive:a=>{console.log(`${a.type} - ${a.status}`),console.log(`ID: ${a.id}`),console.log(`Created: ${a.created_at}`),console.log(`Next attempt: ${a.next_attempt_at??"none scheduled"}`),console.log(`
|
|
943
945
|
Payload:
|
|
944
946
|
${JSON.stringify(a.payload,null,2)}`)}},r)});var Xu=new c("list").alias("ls").description("List the events delivered to a webhook, most recent first").argument("[webhookId]","Webhook ID").option("--limit <n>","Maximum number of events to return (1-100)","10").option("--after <cursor>","Return events after this event ID (next page)").addHelpText("after",d({context:`status is the delivery status of the event to this webhook:
|
|
945
947
|
pending, attempting, success, or failed.
|
|
946
948
|
|
|
947
|
-
This endpoint paginates forward only \u2014 there is no --before cursor.`,output:' {"object":"list","has_more":false,"data":[{"id":"msg_...","type":"email.sent","created_at":"...","status":"success"}]}',errorCodes:["auth_error","invalid_limit","list_error"],examples:["resend webhooks events list 4dd369bc-aa82-4ff3-97de-514ae3000ee0","resend webhooks events list 4dd369bc-aa82-4ff3-97de-514ae3000ee0 --limit 50","resend webhooks events list 4dd369bc-aa82-4ff3-97de-514ae3000ee0 --after msg_1srOrx2ZWZBpBUvZwXKQmoEYga2","resend webhooks events list 4dd369bc-aa82-4ff3-97de-514ae3000ee0 --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,Ce,i),n=
|
|
948
|
-
The webhook must be enabled \u2014 re-enable it first with: resend webhooks update <webhook-id> --status enabled`,output:' {"object":"webhook_event","id":"msg_..."}',errorCodes:["auth_error","replay_error"],examples:["resend webhooks events replay 4dd369bc-aa82-4ff3-97de-514ae3000ee0 msg_1srOrx2ZWZBpBUvZwXKQmoEYga2","resend webhooks events replay 4dd369bc-aa82-4ff3-97de-514ae3000ee0 msg_1srOrx2ZWZBpBUvZwXKQmoEYga2 --json"]})).action(async(e,t,o,i)=>{let r=i.optsWithGlobals(),n=await g(e,Ce,r),s=await g(t,to(n),r);await
|
|
949
|
+
This endpoint paginates forward only \u2014 there is no --before cursor.`,output:' {"object":"list","has_more":false,"data":[{"id":"msg_...","type":"email.sent","created_at":"...","status":"success"}]}',errorCodes:["auth_error","invalid_limit","list_error"],examples:["resend webhooks events list 4dd369bc-aa82-4ff3-97de-514ae3000ee0","resend webhooks events list 4dd369bc-aa82-4ff3-97de-514ae3000ee0 --limit 50","resend webhooks events list 4dd369bc-aa82-4ff3-97de-514ae3000ee0 --after msg_1srOrx2ZWZBpBUvZwXKQmoEYga2","resend webhooks events list 4dd369bc-aa82-4ff3-97de-514ae3000ee0 --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,Ce,i),n=I(t.limit,i);await k({loading:"Fetching webhook events...",sdkCall:s=>s.webhooks.events.list({webhookId:r,limit:n,...t.after!==void 0&&{after:t.after}}),onInteractive:s=>{console.log(Ju(s.data)),j(s,`webhooks events list ${r}`,{limit:n,apiKey:i.apiKey,profile:i.profile})}},i)});var Zu=new c("replay").description("Queue another delivery attempt for a webhook event").argument("[webhookId]","Webhook ID").argument("[eventId]","Webhook event ID").addHelpText("after",d({context:`Queues one more delivery of the event. Does not schedule automatic retries.
|
|
950
|
+
The webhook must be enabled \u2014 re-enable it first with: resend webhooks update <webhook-id> --status enabled`,output:' {"object":"webhook_event","id":"msg_..."}',errorCodes:["auth_error","replay_error"],examples:["resend webhooks events replay 4dd369bc-aa82-4ff3-97de-514ae3000ee0 msg_1srOrx2ZWZBpBUvZwXKQmoEYga2","resend webhooks events replay 4dd369bc-aa82-4ff3-97de-514ae3000ee0 msg_1srOrx2ZWZBpBUvZwXKQmoEYga2 --json"]})).action(async(e,t,o,i)=>{let r=i.optsWithGlobals(),n=await g(e,Ce,r),s=await g(t,to(n),r);await R({loading:"Replaying webhook event...",sdkCall:a=>a.webhooks.events.replay({webhookId:n,eventId:s}),errorCode:"replay_error",successMsg:`Webhook event replay queued: ${s}`},r)});var em=new c("events").description("Inspect or replay the events Resend delivered to a webhook").addHelpText("after",d({context:`Debugging a webhook that is missing deliveries:
|
|
949
951
|
1. resend webhooks events list <webhook-id> (find the event)
|
|
950
952
|
2. resend webhooks events get <webhook-id> <event-id> (see the payload we sent)
|
|
951
953
|
3. resend webhooks events attempts <webhook-id> <event-id> (see what your endpoint returned)
|
|
952
954
|
4. resend webhooks events replay <webhook-id> <event-id> (queue another delivery)
|
|
953
955
|
|
|
954
956
|
Events are listed most recent first. Both list commands paginate forward only,
|
|
955
|
-
with --after.`,examples:["resend webhooks events list 4dd369bc-aa82-4ff3-97de-514ae3000ee0","resend webhooks events get 4dd369bc-aa82-4ff3-97de-514ae3000ee0 msg_1srOrx2ZWZBpBUvZwXKQmoEYga2","resend webhooks events attempts 4dd369bc-aa82-4ff3-97de-514ae3000ee0 msg_1srOrx2ZWZBpBUvZwXKQmoEYga2","resend webhooks events replay 4dd369bc-aa82-4ff3-97de-514ae3000ee0 msg_1srOrx2ZWZBpBUvZwXKQmoEYga2"]})).addCommand(Xu,{isDefault:!0}).addCommand(Yu).addCommand(zu).addCommand(Zu);var tm=new c("get").description("Retrieve a webhook endpoint configuration by ID").argument("[id]","Webhook UUID").addHelpText("after",d({context:'The response includes the signing_secret. Rotate it with "resend webhooks rotate-signing-secret <id>".',output:' {"object":"webhook","id":"<uuid>","endpoint":"<url>","events":["<event>"],"status":"enabled|disabled","created_at":"<date>","signing_secret":"<whsec_...>"}',errorCodes:["auth_error","fetch_error"],examples:["resend webhooks get wh_abc123","resend webhooks get wh_abc123 --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,Ce,i);await
|
|
957
|
+
with --after.`,examples:["resend webhooks events list 4dd369bc-aa82-4ff3-97de-514ae3000ee0","resend webhooks events get 4dd369bc-aa82-4ff3-97de-514ae3000ee0 msg_1srOrx2ZWZBpBUvZwXKQmoEYga2","resend webhooks events attempts 4dd369bc-aa82-4ff3-97de-514ae3000ee0 msg_1srOrx2ZWZBpBUvZwXKQmoEYga2","resend webhooks events replay 4dd369bc-aa82-4ff3-97de-514ae3000ee0 msg_1srOrx2ZWZBpBUvZwXKQmoEYga2"]})).addCommand(Xu,{isDefault:!0}).addCommand(Yu).addCommand(zu).addCommand(Zu);var tm=new c("get").description("Retrieve a webhook endpoint configuration by ID").argument("[id]","Webhook UUID").addHelpText("after",d({context:'The response includes the signing_secret. Rotate it with "resend webhooks rotate-signing-secret <id>".',output:' {"object":"webhook","id":"<uuid>","endpoint":"<url>","events":["<event>"],"status":"enabled|disabled","created_at":"<date>","signing_secret":"<whsec_...>"}',errorCodes:["auth_error","fetch_error"],examples:["resend webhooks get wh_abc123","resend webhooks get wh_abc123 --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,Ce,i);await E({loading:"Fetching webhook...",sdkCall:n=>n.webhooks.get(r),onInteractive:n=>{console.log(`${n.endpoint}`),console.log(`ID: ${n.id}`),console.log(`Status: ${n.status}`),console.log(`Events: ${(n.events??[]).join(", ")||"(none)"}`),console.log(`Created: ${n.created_at}`),console.log(`Signing Secret: ${n.signing_secret}`)}},i)});var om=new c("list").alias("ls").description("List all registered webhook endpoints").option("--limit <n>","Maximum number of webhooks to return (1-100)","10").option("--after <cursor>","Return webhooks after this cursor (next page)").option("--before <cursor>","Return webhooks before this cursor (previous page)").addHelpText("after",d({context:`Pagination: use --after or --before with a webhook ID as the cursor.
|
|
956
958
|
Only one of --after or --before may be used at a time.
|
|
957
|
-
The response includes has_more: true when additional pages exist.`,output:' {"object":"list","data":[{"id":"<uuid>","endpoint":"<url>","events":["<event>"],"status":"enabled","created_at":"<date>"}],"has_more":false}',errorCodes:["auth_error","invalid_limit","list_error"],examples:["resend webhooks list","resend webhooks list --limit 25 --json","resend webhooks list --after wh_abc123 --json"]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=
|
|
959
|
+
The response includes has_more: true when additional pages exist.`,output:' {"object":"list","data":[{"id":"<uuid>","endpoint":"<url>","events":["<event>"],"status":"enabled","created_at":"<date>"}],"has_more":false}',errorCodes:["auth_error","invalid_limit","list_error"],examples:["resend webhooks list","resend webhooks list --limit 25 --json","resend webhooks list --after wh_abc123 --json"]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=I(e.limit,o),r=G(i,e.after,e.before,o);await k({loading:"Fetching webhooks...",sdkCall:n=>n.webhooks.list(r),onInteractive:n=>{console.log(qu(n.data)),j(n,"webhooks list",{limit:i,before:e.before,apiKey:o.apiKey,profile:o.profile})}},o)});var rm=require("node:http");var xe=me(Je(),1);X();function im(e){return e?"error"in e?e.timeout?{status:504,body:"Forward target timed out"}:{status:502,body:"Forward target unreachable"}:e.status>=200&&e.status<300?{status:200,body:"OK"}:{status:e.status,body:"Forward target failed"}:{status:200,body:"OK"}}var nm=["svix-id","svix-timestamp","svix-signature"],yg=3e4;function Cg(){return new Date().toLocaleTimeString("en-GB",{hour12:!1})}function xg(e){let t=Fe(e.type??"unknown"),o=e.data??{},i=Fe(o.id??""),r="";if(t.startsWith("email.")){let n=Fe(o.from??""),s=Fe(Array.isArray(o.to)?o.to[0]:"");(n||s)&&(r=`${n} -> ${s}`)}else t.startsWith("domain.")?r=Fe(o.name??""):(t.startsWith("contact.")||t.startsWith("suppression."))&&(r=Fe(o.email??""));return{type:t,resourceId:i,detail:r}}function wg(e){let t=`${e} ${Ug(e)}`;return e>=200&&e<300?xe.default.green(t):e>=400&&e<500?xe.default.yellow(t):xe.default.red(t)}function Ug(e){return{200:"OK",201:"Created",204:"No Content",400:"Bad Request",401:"Unauthorized",403:"Forbidden",404:"Not Found",500:"Internal Server Error",502:"Bad Gateway",503:"Service Unavailable",504:"Gateway Timeout"}[e]??""}async function vg(e,t,o){let i={"content-type":"application/json"};for(let s of nm){let a=o[s];a&&(i[s]=a)}let r=e.startsWith("http")?e:`http://${e}`;return{status:(await fetch(r,{method:"POST",headers:i,body:t,signal:AbortSignal.timeout(yg)})).status}}function Sg(e){return new Promise((t,o)=>{let i=[];e.on("data",r=>i.push(r)),e.on("end",()=>t(Buffer.concat(i).toString())),e.on("error",o)})}async function Kg(e,t,o){process.stderr.write(`
|
|
958
960
|
Cleaning up...`);try{await e.webhooks.remove(t),process.stderr.write(` Webhook ${t} deleted.
|
|
959
961
|
`)}catch{process.stderr.write(` Failed to delete webhook ${t}.
|
|
960
962
|
`)}o.close()}var sm=new c("listen").description("Listen for webhook events locally during development").option("--url <url>","Public URL for receiving webhooks (your tunnel URL)").option("--forward-to <url>","Forward payloads to this local URL").option("--events <events...>","Event types to listen for (default: all)").option("--port <port>","Local server port","4318").addHelpText("after",d({context:`Start a local server that receives Resend webhook events in real time.
|
|
@@ -982,14 +984,14 @@ Ready! Listening for webhook events. Press Ctrl+C to stop.
|
|
|
982
984
|
|
|
983
985
|
`)}let f=!1,y=async()=>{f||(f=!0,await Kg(a,p,u),process.exit(Mt()))};ri(y),process.on("SIGTERM",y),await new Promise(()=>{})});var am=new c("rotate-signing-secret").description("Generate a new signing secret for a webhook").argument("[id]","Webhook UUID").addHelpText("after",d({context:`Generates a new signing secret and returns it. For 24 hours, payloads are
|
|
984
986
|
signed with both the new and the previous secret, so either one verifies them.
|
|
985
|
-
After that, only the new secret does. Update your verification code within that window.`,output:' {"object":"webhook","id":"<uuid>","signing_secret":"<whsec_...>"}',errorCodes:["auth_error","create_error"],examples:["resend webhooks rotate-signing-secret 4dd369bc-aa82-4ff3-97de-514ae3000ee0","resend webhooks rotate-signing-secret 4dd369bc-aa82-4ff3-97de-514ae3000ee0 --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,Ce,i);await
|
|
987
|
+
After that, only the new secret does. Update your verification code within that window.`,output:' {"object":"webhook","id":"<uuid>","signing_secret":"<whsec_...>"}',errorCodes:["auth_error","create_error"],examples:["resend webhooks rotate-signing-secret 4dd369bc-aa82-4ff3-97de-514ae3000ee0","resend webhooks rotate-signing-secret 4dd369bc-aa82-4ff3-97de-514ae3000ee0 --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,Ce,i);await B({loading:"Rotating webhook signing secret...",sdkCall:n=>n.webhooks.rotateSigningSecret(r),onInteractive:n=>{console.log("Webhook signing secret rotated"),console.log(`ID: ${n.id}`),console.log(`Signing Secret: ${n.signing_secret}`)}},i)});var lm=new c("update").description("Update a webhook's endpoint URL, event subscriptions, or enabled status").argument("[id]","Webhook UUID").option("--endpoint <endpoint>","New HTTPS URL for this webhook").option("--events <events...>",'Replace the full event subscription list (comma or space-separated). Use "all" for all 17 events.').addOption(new M("--status <status>","Enable or disable event delivery for this webhook").choices(["enabled","disabled"])).addHelpText("after",d({context:`At least one of --endpoint, --events, or --status must be provided.
|
|
986
988
|
|
|
987
989
|
--events replaces the entire event list (it is not additive).
|
|
988
990
|
Use "all" as a shorthand for all 17 event types.
|
|
989
991
|
|
|
990
992
|
--status controls whether events are delivered to this endpoint:
|
|
991
993
|
enabled Events are delivered (default on creation)
|
|
992
|
-
disabled Events are suppressed without deleting the webhook`,output:' {"object":"webhook","id":"<uuid>"}',errorCodes:["auth_error","no_changes","update_error"],examples:["resend webhooks update wh_abc123 --endpoint https://new-app.example.com/hooks/resend","resend webhooks update wh_abc123 --events email.sent email.bounced","resend webhooks update wh_abc123 --events all","resend webhooks update wh_abc123 --status disabled","resend webhooks update wh_abc123 --endpoint https://new-app.example.com/hooks/resend --events all --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,Ce,i),n=t.events?.length?eo(t.events):void 0,s=n!==void 0;!t.endpoint&&!s&&!t.status&&h({message:"Provide at least one option to update: --endpoint, --events, or --status.",code:"no_changes"},{json:i.json}),s&&!n.length&&h({message:"Missing --events values.",code:"no_changes"},{json:i.json});let a=n?.includes("all")?lt:n?.length?n:void 0;await
|
|
994
|
+
disabled Events are suppressed without deleting the webhook`,output:' {"object":"webhook","id":"<uuid>"}',errorCodes:["auth_error","no_changes","update_error"],examples:["resend webhooks update wh_abc123 --endpoint https://new-app.example.com/hooks/resend","resend webhooks update wh_abc123 --events email.sent email.bounced","resend webhooks update wh_abc123 --events all","resend webhooks update wh_abc123 --status disabled","resend webhooks update wh_abc123 --endpoint https://new-app.example.com/hooks/resend --events all --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,Ce,i),n=t.events?.length?eo(t.events):void 0,s=n!==void 0;!t.endpoint&&!s&&!t.status&&h({message:"Provide at least one option to update: --endpoint, --events, or --status.",code:"no_changes"},{json:i.json}),s&&!n.length&&h({message:"Missing --events values.",code:"no_changes"},{json:i.json});let a=n?.includes("all")?lt:n?.length?n:void 0;await R({loading:"Updating webhook...",sdkCall:l=>l.webhooks.update(r,{...t.endpoint&&{endpoint:t.endpoint},...a?.length&&{events:a},...t.status&&{status:t.status}}),errorCode:"update_error",successMsg:`Webhook updated: ${r}`},i)});var cm=new c("webhooks").description("Manage webhook endpoints for real-time event notifications").addHelpText("after",d({context:`Webhooks let you receive real-time event notifications from Resend at an HTTPS endpoint.
|
|
993
995
|
Payloads are signed with Svix headers for verification.
|
|
994
996
|
|
|
995
997
|
Event categories (19 total):
|
|
@@ -1007,15 +1009,15 @@ Signature verification (Svix):
|
|
|
1007
1009
|
|
|
1008
1010
|
Delivery history:
|
|
1009
1011
|
Inspect what Resend sent and what your endpoint returned with "resend webhooks events".`,examples:["resend webhooks list","resend webhooks create --endpoint https://app.example.com/hooks/resend --events all","resend webhooks get wh_abc123","resend webhooks update wh_abc123 --status disabled","resend webhooks rotate-signing-secret wh_abc123","resend webhooks delete wh_abc123 --yes","resend webhooks events list wh_abc123"]})).addCommand(Lu).addCommand(tm).addCommand(em).addCommand(sm).addCommand(om,{isDefault:!0}).addCommand(lm).addCommand(am).addCommand(Wu);var um=require("node:path");be();X();var dm={flag:"flag",env:"environment variable",config:"config file",secure_storage:"secure storage"},kg={full_access:"full access",sending_access:"sending access"},mm=new c("whoami").description("Show current authentication status").addHelpText("after",d({setup:!0,context:`Local only \u2014 no network calls.
|
|
1010
|
-
Shows which profile is active and where the active credential comes from.`,output:' {"authenticated":true,"profile":"production","api_key":"re_...abcd","source":"config","config_path":"/Users/you/.config/resend/credentials.json"}\n {"error":{"message":"Not authenticated.\\nRun `resend login` to get started.","code":"not_authenticated"}}',examples:["resend whoami","resend whoami --json","resend whoami --profile production"]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=o.profile,r=await
|
|
1011
|
-
Available profiles: ${y.map(v=>v.name).join(", ")||"(none)"}`:"Not authenticated.\nRun `resend login` to get started.",U=b&&!A?"profile_not_found":"not_authenticated";o.json||!w()?h({message:x,code:U},{json:o.json}):h({message:x,code:U},{json:!1})}let n=r.profile??ti(i),s=(0,um.join)(He(),"credentials.json"),a=r.type==="api_key"?r.key:r.access_token,l=r.source,u=r.type==="api_key"?r.permission:void 0;if(o.json||!w()){N({authenticated:!0,profile:n,api_key:At(a),source:l,...u&&{permission:u},config_path:s},{json:o.json});return}let m=r.type==="oauth_grant"?`${dm[l]} (oauth)`:dm[l],p=u?kg[u]:void 0;console.log(""),console.log(` Profile: ${n}`),console.log(r.type==="oauth_grant"?` Token: ${At(a)}`:` API Key: ${At(a)}`),console.log(` Source: ${m}`),p&&console.log(` Access: ${p}`),console.log(` Config: ${s}`),console.log("")});function pm(e,t={}){let o=t.getArgv??(()=>process.argv.slice(2)),i=[],r=[e];for(;r.length>0;){let n=r.pop();if(!n)break;i.push(n);for(let s of n.commands)r.push(s)}for(let n of i){let a=n.configureOutput().outputError??((l,u)=>u(l));n.configureOutput({outputError:(l,u)=>{a(
|
|
1012
|
+
Shows which profile is active and where the active credential comes from.`,output:' {"authenticated":true,"profile":"production","api_key":"re_...abcd","source":"config","config_path":"/Users/you/.config/resend/credentials.json"}\n {"error":{"message":"Not authenticated.\\nRun `resend login` to get started.","code":"not_authenticated"}}',examples:["resend whoami","resend whoami --json","resend whoami --profile production"]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=o.profile,r=await Rt(o.apiKey,i,{refresh:!1});if(!r){let f=i||ti(i),y=_e(),A=y.some(v=>v.name===f),b=i||process.env.RESEND_PROFILE,x=b&&!A?`Profile "${f}" not found.
|
|
1013
|
+
Available profiles: ${y.map(v=>v.name).join(", ")||"(none)"}`:"Not authenticated.\nRun `resend login` to get started.",U=b&&!A?"profile_not_found":"not_authenticated";o.json||!w()?h({message:x,code:U},{json:o.json}):h({message:x,code:U},{json:!1})}let n=r.profile??ti(i),s=(0,um.join)(He(),"credentials.json"),a=r.type==="api_key"?r.key:r.access_token,l=r.source,u=r.type==="api_key"?r.permission:void 0;if(o.json||!w()){N({authenticated:!0,profile:n,api_key:At(a),source:l,...u&&{permission:u},config_path:s},{json:o.json});return}let m=r.type==="oauth_grant"?`${dm[l]} (oauth)`:dm[l],p=u?kg[u]:void 0;console.log(""),console.log(` Profile: ${n}`),console.log(r.type==="oauth_grant"?` Token: ${At(a)}`:` API Key: ${At(a)}`),console.log(` Source: ${m}`),p&&console.log(` Access: ${p}`),console.log(` Config: ${s}`),console.log("")});function pm(e,t={}){let o=t.getArgv??(()=>process.argv.slice(2)),i=[],r=[e];for(;r.length>0;){let n=r.pop();if(!n)break;i.push(n);for(let s of n.commands)r.push(s)}for(let n of i){let a=n.configureOutput().outputError??((l,u)=>u(l));n.configureOutput({outputError:(l,u)=>{a(_g(l,e,o()),u)}})}}function _g(e,t,o){if(!Rg(e))return e;let i=Fg(t,o);return i?Dg(e,i):e}function Fg(e,t){let o=e,i=[];for(let r=0;r<t.length;r+=1){let n=t[r];if(!n||n==="--")return;let s=r;if(n.startsWith("-")&&n!=="-"){let u=n.startsWith("--")?n.split("=",1)[0]:n.length>2?n.slice(0,2):n,m;for(let p of Tg(o)){for(let f of p.createHelp().visibleOptions(p))if(f.long===u||f.short===u){m=f;break}if(m)break}if(!m)s=void 0;else if(!m.required&&!m.optional)s=r+1;else if(m.variadic)s=t.length;else if(n.startsWith("--")&&n.includes("="))s=r+1;else if(!n.startsWith("--")&&n.length>2)s=r+1;else{let p=t[r+1];m.optional&&(p===void 0||p.startsWith("-"))?s=r+1:s=Math.min(r+2,t.length)}}if(s===void 0)return;if(s!==r){r=s-1;continue}if(n.startsWith("-"))return;let a=Og(o).find(u=>hm(u).has(n));if(a){o=a,i.push(a.name());continue}let l=Eg(n,fm(o)).map(u=>[e.name(),...i,u.name()].join(" "));return l.length===0?void 0:{unknownCommand:n,suggestions:l}}}function Rg(e){return/^error: unknown command /.test(e)||/^error: too many arguments/.test(e)}function Dg(e,t){let o=e.endsWith(`
|
|
1012
1014
|
`)?`
|
|
1013
1015
|
`:"",{suggestions:i}=t,r=i.length===1?"Did you mean this?":"Did you mean one of these?",n=i.map(s=>` ${s}`).join(`
|
|
1014
1016
|
`);return`error: unknown command '${t.unknownCommand}'
|
|
1015
1017
|
|
|
1016
1018
|
${r}
|
|
1017
|
-
${n}${o}`}function Tg(e){let t=[];for(let o=e;o;o=o.parent)t.push(o);return t}function fm(e){return e.createHelp().visibleCommands(e).filter(t=>!t._hidden)}function Og(e){let t=[...e.commands];for(let o of fm(e))t.includes(o)||t.push(o);return t}function hm(e){return new Set([e.name(),...e.aliases()])}function
|
|
1018
|
-
`);for(let e of
|
|
1019
|
+
${n}${o}`}function Tg(e){let t=[];for(let o=e;o;o=o.parent)t.push(o);return t}function fm(e){return e.createHelp().visibleCommands(e).filter(t=>!t._hidden)}function Og(e){let t=[...e.commands];for(let o of fm(e))t.includes(o)||t.push(o);return t}function hm(e){return new Set([e.name(),...e.aliases()])}function Eg(e,t){let o=t.map(r=>{let n=Number.POSITIVE_INFINITY;for(let s of hm(r)){if(s.length<=1)continue;let a=Bg(e,s,3),l=Math.max(e.length,s.length),u=(l-a)/l;a<=3&&u>.4&&a<n&&(n=a)}return{command:r,distance:n}}).filter(r=>Number.isFinite(r.distance));if(o.length===0)return[];let i=Math.min(...o.map(r=>r.distance));return o.filter(r=>r.distance===i).sort((r,n)=>r.command.name().localeCompare(n.command.name())).map(r=>r.command)}function Bg(e,t,o=Number.POSITIVE_INFINITY){if(Math.abs(e.length-t.length)>o)return Math.max(e.length,t.length);let i=[];for(let r=0;r<=e.length;r+=1)i[r]=[r];for(let r=0;r<=t.length;r+=1)i[0][r]=r;for(let r=1;r<=t.length;r+=1)for(let n=1;n<=e.length;n+=1){let s=e[n-1]===t[r-1]?0:1;i[n][r]=Math.min(i[n-1][r]+1,i[n][r-1]+1,i[n-1][r-1]+s),n>1&&r>1&&e[n-1]===t[r-2]&&e[n-2]===t[r-1]&&(i[n][r]=Math.min(i[n][r],i[n-2][r-2]+1))}return i[e.length][t.length]}var Ig=[" \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2557 \u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2557 "," \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557"," \u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2554\u2588\u2588\u2557 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551"," \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u255D \u2588\u2588\u2551\u255A\u2588\u2588\u2557\u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551"," \u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2551 \u255A\u2588\u2588\u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D"," \u255A\u2550\u255D \u255A\u2550\u255D\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D\u255A\u2550\u255D \u255A\u2550\u2550\u2550\u255D\u255A\u2550\u2550\u2550\u2550\u2550\u255D "];function gm(){process.stdout.write(`
|
|
1020
|
+
`);for(let e of Ig)process.stdout.write(`${e}
|
|
1019
1021
|
`);process.stdout.write(`
|
|
1020
1022
|
`)}Xr();vo();Kt();fa();var Zr="",vm=[],Sm=[],Ut=new c().name("resend").description("Resend CLI \u2014 email for developers").configureHelp({showGlobalOptions:!0,styleTitle:e=>oo.default.gray(e)}).configureOutput({writeErr:e=>{process.stderr.write(e.replace(/^error:/,()=>oo.default.red("error:")))}}).helpCommand(!0).version(`${Xn} v${se}`,"-v, --version","Output the current version").option("--api-key <key>","Resend API key (overrides env/config)").option("-p, --profile <name>","Profile to use (overrides RESEND_PROFILE)").option("--json","Force JSON output").option("-q, --quiet","Suppress spinners and status output (implies --json)").option("--insecure-storage","Save API key as plaintext instead of secure storage").hook("preAction",(e,t)=>{let o=[];for(let r=t;r?.parent;r=r.parent)o.unshift(r.name());Zr=o.join(" ");let i=r=>r.options.filter(n=>r.getOptionValueSource(n.attributeName())==="cli").map(n=>n.long?.replace(/^--/,"")??n.short?.replace(/^-/,"")??"").filter(Boolean);vm=i(t),Sm=i(e),t.optsWithGlobals().quiet&&e.setOptionValue("json",!0),t.optsWithGlobals().insecureStorage&&(process.env.RESEND_CREDENTIAL_STORE="file")}).addHelpText("after",`
|
|
1021
1023
|
${oo.default.gray("Examples:")}
|
|
@@ -1027,4 +1029,4 @@ ${oo.default.gray("Examples:")}
|
|
|
1027
1029
|
- Send an email
|
|
1028
1030
|
|
|
1029
1031
|
${oo.default.blue("$ resend emails send")}
|
|
1030
|
-
`).action(()=>{process.stdout.isTTY&&gm();let e=Ut.opts();e.apiKey&&h({message:"--api-key is a per-command override and was not saved. To store your API key, run `resend login`.",code:"missing_command"},{json:e.json}),Ut.help()}).addCommand(ui).addCommand(md).addCommand(Kl).addCommand(za).addCommand(xd).addCommand(ju).addCommand(yc).addCommand(Xl).addCommand(bu).addCommand(Nu).addCommand(Pc).addCommand(nu).addCommand(
|
|
1032
|
+
`).action(()=>{process.stdout.isTTY&&gm();let e=Ut.opts();e.apiKey&&h({message:"--api-key is a per-command override and was not saved. To store your API key, run `resend login`.",code:"missing_command"},{json:e.json}),Ut.help()}).addCommand(ui).addCommand(md).addCommand(Kl).addCommand(za).addCommand(xd).addCommand(ju).addCommand(yc).addCommand(Xl).addCommand(bu).addCommand(Nu).addCommand(Pc).addCommand(nu).addCommand(Bl).addCommand(ku).addCommand(Zd).addCommand(_a).addCommand(cm).addCommand(du).addCommand(ja).addCommand(mi).addCommand(mm).addCommand(kc).addCommand(uu).addCommand(Cc).addCommand(Mu).addCommand(Hl).addCommand(ql),Km=new c("telemetry").description("Telemetry management").helpCommand(!1);Km.command("flush").argument("<file>").action(async e=>{let{flushFromFile:t}=await Promise.resolve().then(()=>(Xr(),Um));await t(e)});Ut.addCommand(Km,{hidden:!0});pm(Ut);Ut.parseAsync().then(()=>{let e=Ut.args[0];if(e==="update"||e==="telemetry")return;Zr&&Yr(Zr,{...Ut.opts(),flags:vm,globalFlags:Sm});let t=Ut.opts();Sc({json:!!(t.json||t.quiet)}).catch(()=>{})}).catch(e=>{h({message:W(e,"An unexpected error occurred"),code:"unexpected_error"})});
|