resend-cli 2.22.0-preview-inboxes.2 → 2.22.0-preview-inboxes.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -1
- package/dist/cli.cjs +316 -290
- package/package.json +2 -2
- package/skills/resend-cli/SKILL.md +2 -2
- package/skills/resend-cli/references/inboxes.md +80 -24
- package/skills/resend-cli/references/webhooks.md +4 -2
package/dist/cli.cjs
CHANGED
|
@@ -1,36 +1,36 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";var
|
|
3
|
-
`)}displayWidth(t){return
|
|
2
|
+
"use strict";var Bm=Object.create;var Di=Object.defineProperty;var Im=Object.getOwnPropertyDescriptor;var jm=Object.getOwnPropertyNames;var Pm=Object.getPrototypeOf,$m=Object.prototype.hasOwnProperty;var be=(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)Di(e,o,{get:t[o],enumerable:!0})},Gm=(e,t,o,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of jm(t))!$m.call(e,r)&&r!==o&&Di(e,r,{get:()=>t[r],enumerable:!(i=Im(t,r))||i.enumerable});return e};var me=(e,t,o)=>(o=e!=null?Bm(Pm(e)):{},Gm(t||!e||!e.__esModule?Di(o,"default",{value:e,enumerable:!0}):o,e));var ro=Re(Oi=>{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}},Ti=class extends Ko{constructor(t){super(1,"commander.invalidArgument",t),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}};Oi.CommanderError=Ko;Oi.InvalidArgumentError=Ti});var ko=Re(Bi=>{var{InvalidArgumentError:Hm}=ro(),Ei=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 Hm(`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 Qm(e){let t=e.name()+(e.variadic===!0?"...":"");return e.required?"<"+t+">":"["+t+"]"}Bi.Argument=Ei;Bi.humanReadableArgName=Qm});var Pi=Re(ji=>{var{humanReadableArgName:Nm}=ko(),Ii=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=>Nm(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
|
+
`)}displayWidth(t){return on(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
|
|
6
|
+
`)}};function on(e){let t=/\x1b\[\d*(;\d*)*m/g;return e.replace(t,"")}ji.Help=Ii;ji.stripColor=on});var Qi=Re(Hi=>{var{InvalidArgumentError:Mm}=ro(),$i=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=qm(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 Mm(`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?rn(this.name().replace(/^no-/,"")):rn(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}},Gi=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 rn(e){return e.split("-").reduce((t,o)=>t+o[0].toUpperCase()+o.slice(1))}function qm(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}}
|
|
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}}Hi.Option=$i;Hi.DualOptions=Gi});var sn=Re(nn=>{function Lm(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 Wm(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=Lm(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]}?)`:""}
|
|
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
|
|
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
|
|
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
|
|
14
|
+
(Did you mean ${i[0]}?)`:""}nn.suggestSimilar=Wm});var cn=Re(Wi=>{var Jm=require("node:events").EventEmitter,Ni=require("node:child_process"),ot=require("node:path"),_o=require("node:fs"),Y=require("node:process"),{Argument:Vm,humanReadableArgName:zm}=ko(),{CommanderError:Mi}=ro(),{Help:Ym,stripColor:Xm}=Pi(),{Option:an,DualOptions:Zm}=Qi(),{suggestSimilar:ln}=sn(),qi=class e extends Jm{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:()=>Li()??(Y.stdout.isTTY&&Y.stdout.hasColors?.()),getErrHasColors:()=>Li()??(Y.stderr.isTTY&&Y.stderr.hasColors?.()),stripColor:o=>Xm(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 Ym,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
|
+
- 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 Vm(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
|
+
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 Mi(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 an(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
|
+
- 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 an)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
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(_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=
|
|
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=dn(Y.execArgv).concat(o),l=Ni.spawn(Y.argv[0],o,{stdio:"inherit"})):l=Ni.spawn(s,o,{stdio:"inherit"}):(this._checkForMissingExecutable(s,a,t._name),o.unshift(s),o=dn(Y.execArgv).concat(o),l=Ni.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 Mi(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 Mi(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
|
-
`),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
|
|
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=>
|
|
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 Zm(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=ln(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=ln(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
|
+
`),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=>zm(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=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.2",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.1"},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,v,U,S,K,B,G,Q,$,q,we,re,Ut;b>=64;){for(x=f[0],v=f[1],U=f[2],S=f[3],K=f[4],B=f[5],G=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[q-2],re=($>>>17|$<<15)^($>>>19|$<<13)^$>>>10,$=p[q-15],Ut=($>>>7|$<<25)^($>>>18|$<<14)^$>>>3,p[q]=(re+p[q-7]|0)+(Ut+p[q-16]|0);for(q=0;q<64;q++)re=(((K>>>6|K<<26)^(K>>>11|K<<21)^(K>>>25|K<<7))+(K&B^~K&G)|0)+(Q+(t[q]+p[q]|0)|0)|0,Ut=((x>>>2|x<<30)^(x>>>13|x<<19)^(x>>>22|x<<10))+(x&v^x&U^v&U)|0,Q=G,G=B,B=K,K=S+re|0,S=U,U=v,v=x,x=re+Ut|0;f[0]+=x,f[1]+=v,f[2]+=U,f[3]+=S,f[4]+=K,f[5]+=B,f[6]+=G,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,v=y%64<56?64:128;this.buffer[A]=128;for(var U=A+1;U<v-8;U++)this.buffer[U]=0;this.buffer[v-8]=b>>>24&255,this.buffer[v-7]=b>>>16&255,this.buffer[v-6]=b>>>8&255,this.buffer[v-5]=b>>>0&255,this.buffer[v-4]=x>>>24&255,this.buffer[v-3]=x>>>16&255,this.buffer[v-2]=x>>>8&255,this.buffer[v-1]=x>>>0&255,o(this.temp,this.state,this.buffer,0,v),this.finished=!0}for(var U=0;U<8;U++)f[U*4+0]=this.state[U]>>>24&255,f[U*4+1]=this.state[U]>>>16&255,f[U*4+2]=this.state[U]>>>8&255,f[U*4+3]=this.state[U]>>>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),v=new r(x),U=new Uint8Array(v.digestLength),S=U.length,K=new Uint8Array(A),B=0;B<A;B++)S===U.length&&(a(U,v,y,b),S=0),K[B]=U[S++];return v.clean(),U.fill(0),b.fill(0),K}e.hkdf=u;function m(p,f,y,A){for(var b=new r(p),x=b.digestLength,v=new Uint8Array(4),U=new Uint8Array(x),S=new Uint8Array(x),K=new Uint8Array(A),B=0;B*x<A;B++){var G=B+1;v[0]=G>>>24&255,v[1]=G>>>16&255,v[2]=G>>>8&255,v[3]=G>>>0&255,b.reset(),b.update(f),b.update(v),b.finish(S);for(var Q=0;Q<x;Q++)U[Q]=S[Q];for(var Q=2;Q<=y;Q++){b.reset(),b.update(S).finish(S);for(var $=0;$<x;$++)U[$]^=S[$]}for(var Q=0;Q<x&&B*x+Q<A;Q++)K[B*x+Q]=U[Q]}for(var B=0;B<x;B++)U[B]=S[B]=0;for(var B=0;B<4;B++)v[B]=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,v]=b.split(",");if(x==="v1"&&(0,uf.timingSafeEqual)(A.encode(v),A.encode(f))){let U=t.toString();return U===""?void 0:n?JSON.parse(U):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 dn(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 Li(){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}Wi.Command=qi;Wi.useColor=Li});var fn=Re(He=>{var{Argument:un}=ko(),{Command:Ji}=cn(),{CommanderError:ep,InvalidArgumentError:mn}=ro(),{Help:tp}=Pi(),{Option:pn}=Qi();He.program=new Ji;He.createCommand=e=>new Ji(e);He.createOption=(e,t)=>new pn(e,t);He.createArgument=(e,t)=>new un(e,t);He.Command=Ji;He.Option=pn;He.Argument=un;He.Help=tp;He.CommanderError=ep;He.InvalidArgumentError=mn;He.InvalidOptionArgumentError=mn});var gn=Re((Be,hn)=>{var We=fn();Be=hn.exports={};Be.program=new We.Command;Be.Argument=We.Argument;Be.Command=We.Command;Be.CommanderError=We.CommanderError;Be.Help=We.Help;Be.InvalidArgumentError=We.InvalidArgumentError;Be.InvalidOptionArgumentError=We.InvalidArgumentError;Be.Option=We.Option;Be.createCommand=e=>new We.Command(e);Be.createOption=(e,t)=>new We.Option(e,t);Be.createArgument=(e,t)=>new We.Argument(e,t)});var Je=Re((AA,Vi)=>{var Ro=process||{},yn=Ro.argv||[],Fo=Ro.env||{},op=!(Fo.NO_COLOR||yn.includes("--no-color"))&&(!!Fo.FORCE_COLOR||yn.includes("--color")||Ro.platform==="win32"||(Ro.stdout||{}).isTTY&&Fo.TERM!=="dumb"||!!Fo.CI),ip=(e,t,o=e)=>i=>{let r=""+i,n=r.indexOf(t,e.length);return~n?e+rp(r,t,o,n)+t:e+r+t},rp=(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)},Cn=(e=op)=>{let t=e?ip:()=>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")}};Vi.exports=Cn();Vi.exports.createColors=Cn});var er=Re((KA,Bn)=>{"use strict";var Zi={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"},xp={up:(e=1)=>"\x1B[S".repeat(e),down:(e=1)=>"\x1B[T".repeat(e)},wp={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?Zi.up():"");return e&&(t+=Zi.left),t}};Bn.exports={cursor:Zi,scroll:xp,erase:wp,beep:"\x07"}});var rr,Zn=be(()=>{rr={name:"resend-cli",version:"2.22.0-preview-inboxes.4",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.32.1-preview-inboxes.2"},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,es,Kt=be(()=>{"use strict";Zn();se=rr.version,es=rr.name});var ms=Re(Pe=>{"use strict";var mf=Pe&&Pe.__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(Pe,"__esModule",{value:!0});var ce=256,fr=(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&ce,a|=u&ce,a|=m&ce,a|=p&ce;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&ce,a|=u&ce),s<i-2&&(m=this._decodeChar(t.charCodeAt(s+2)),r[n++]=u<<4|m>>>2,a|=m&ce),s<i-3&&(p=this._decodeChar(t.charCodeAt(s+3)),r[n++]=m<<6|p,a|=p&ce),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=ce;return o+=(42-t&t-44)>>>8&-ce+t-43+62,o+=(46-t&t-48)>>>8&-ce+t-47+63,o+=(47-t&t-58)>>>8&-ce+t-48+52,o+=(64-t&t-91)>>>8&-ce+t-65+0,o+=(96-t&t-123)>>>8&-ce+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})();Pe.Coder=fr;var po=new fr;function pf(e){return po.encode(e)}Pe.encode=pf;function ff(e){return po.decode(e)}Pe.decode=ff;var cs=(function(e){mf(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=ce;return i+=(44-o&o-46)>>>8&-ce+o-45+62,i+=(94-o&o-96)>>>8&-ce+o-95+63,i+=(47-o&o-58)>>>8&-ce+o-48+52,i+=(64-o&o-91)>>>8&-ce+o-65+0,i+=(96-o&o-123)>>>8&-ce+o-97+26,i},t})(fr);Pe.URLSafeCoder=cs;var us=new cs;function hf(e){return us.encode(e)}Pe.encodeURLSafe=hf;function gf(e){return us.decode(e)}Pe.decodeURLSafe=gf;Pe.encodedLength=function(e){return po.encodedLength(e)};Pe.maxDecodedLength=function(e){return po.maxDecodedLength(e)};Pe.decodedLength=function(e){return po.decodedLength(e)}});var fs=Re((ps,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})(ps,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,v,U,K,k,j,G,N,$,L,ve,re,Ut;b>=64;){for(x=f[0],v=f[1],U=f[2],K=f[3],k=f[4],j=f[5],G=f[6],N=f[7],L=0;L<16;L++)ve=A+L*4,p[L]=(y[ve]&255)<<24|(y[ve+1]&255)<<16|(y[ve+2]&255)<<8|y[ve+3]&255;for(L=16;L<64;L++)$=p[L-2],re=($>>>17|$<<15)^($>>>19|$<<13)^$>>>10,$=p[L-15],Ut=($>>>7|$<<25)^($>>>18|$<<14)^$>>>3,p[L]=(re+p[L-7]|0)+(Ut+p[L-16]|0);for(L=0;L<64;L++)re=(((k>>>6|k<<26)^(k>>>11|k<<21)^(k>>>25|k<<7))+(k&j^~k&G)|0)+(N+(t[L]+p[L]|0)|0)|0,Ut=((x>>>2|x<<30)^(x>>>13|x<<19)^(x>>>22|x<<10))+(x&v^x&U^v&U)|0,N=G,G=j,j=k,k=K+re|0,K=U,U=v,v=x,x=re+Ut|0;f[0]+=x,f[1]+=v,f[2]+=U,f[3]+=K,f[4]+=k,f[5]+=j,f[6]+=G,f[7]+=N,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,v=y%64<56?64:128;this.buffer[A]=128;for(var U=A+1;U<v-8;U++)this.buffer[U]=0;this.buffer[v-8]=b>>>24&255,this.buffer[v-7]=b>>>16&255,this.buffer[v-6]=b>>>8&255,this.buffer[v-5]=b>>>0&255,this.buffer[v-4]=x>>>24&255,this.buffer[v-3]=x>>>16&255,this.buffer[v-2]=x>>>8&255,this.buffer[v-1]=x>>>0&255,o(this.temp,this.state,this.buffer,0,v),this.finished=!0}for(var U=0;U<8;U++)f[U*4+0]=this.state[U]>>>24&255,f[U*4+1]=this.state[U]>>>16&255,f[U*4+2]=this.state[U]>>>8&255,f[U*4+3]=this.state[U]>>>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),v=new r(x),U=new Uint8Array(v.digestLength),K=U.length,k=new Uint8Array(A),j=0;j<A;j++)K===U.length&&(a(U,v,y,b),K=0),k[j]=U[K++];return v.clean(),U.fill(0),b.fill(0),k}e.hkdf=u;function m(p,f,y,A){for(var b=new r(p),x=b.digestLength,v=new Uint8Array(4),U=new Uint8Array(x),K=new Uint8Array(x),k=new Uint8Array(A),j=0;j*x<A;j++){var G=j+1;v[0]=G>>>24&255,v[1]=G>>>16&255,v[2]=G>>>8&255,v[3]=G>>>0&255,b.reset(),b.update(f),b.update(v),b.finish(K);for(var N=0;N<x;N++)U[N]=K[N];for(var N=2;N<=y;N++){b.reset(),b.update(K).finish(K);for(var $=0;$<x;$++)U[$]^=K[$]}for(var N=0;N<x&&j*x+N<A;N++)k[j*x+N]=U[N]}for(var j=0;j<x;j++)U[j]=K[j]=0;for(var j=0;j<4;j++)v[j]=0;return b.clean(),k}e.pbkdf2=m})});var gs=Re(hr=>{"use strict";Object.defineProperty(hr,"__esModule",{value:!0});hr.timingSafeEqual=Af;function hs(e,t=""){if(!e)throw new Error(t)}function Af(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)),hs(e instanceof DataView),hs(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 ys=Re(Pt=>{"use strict";Object.defineProperty(Pt,"__esModule",{value:!0});Pt.Webhook=Pt.WebhookVerificationError=void 0;var As=ms(),bf=fs(),yf=gs(),bs=300,gr=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 gr{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=As.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,v]=b.split(",");if(x==="v1"&&(0,yf.timingSafeEqual)(A.encode(v),A.encode(f))){let U=t.toString();return U===""?void 0:n?JSON.parse(U):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,${As.encode(bf.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>bs)throw new pt("Message timestamp too old");if(i>o+bs)throw new pt("Message timestamp too new");return new Date(i*1e3)}};Pt.Webhook=qo;qo.prefix="whsec_"});var Jo,Es=be(()=>{"use strict";Jo=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
|
|
29
|
+
To fix: either repair the JSON manually, or delete the file and run: resend login`),this.name="CorruptedCredentialsError"}}});var br={};io(br,{FileBackend:()=>Ar});var Ar,yr=be(()=>{"use strict";ye();Ar=class{name="plaintext file";isSecure=!1;async get(t,o){let i=Ke();if(!i)return null;let r=i.profiles[o];return(r?.type==="api_key"?r.api_key:null)??null}async set(t,o,i){Cr(i,o)}async delete(t,o){try{return Bs(o),!0}catch{return!1}}async isAvailable(){return!0}}});var js={};io(js,{MacOSBackend:()=>wr});function xr(e,t){return new Promise(o=>{(0,Is.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 Is,wr,Ps=be(()=>{"use strict";Is=require("node:child_process");wr=class{name="macOS Keychain";isSecure=!0;async get(t,o){let{stdout:i,stderr:r,code:n}=await xr("/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 xr("/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 xr("/usr/bin/security",["delete-generic-password","-s",t,"-a",o]);return i===0}async isAvailable(){return process.platform==="darwin"}}});var $s={};io($s,{LinuxBackend:()=>vr});function Vo(e,t,o){return new Promise(i=>{(0,zo.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 mh(e,t,o){return new Promise(i=>{let r=(0,zo.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 zo,vr,Gs=be(()=>{"use strict";zo=require("node:child_process");vr=class{name="Secret Service (libsecret)";isSecure=!0;async get(t,o){let{stdout:i,code:r}=await Vo("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 mh("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 Vo("secret-tool",["clear","service",t,"account",o]);return i===0}async isAvailable(){if(process.platform!=="linux"||(await Vo("which",["secret-tool"])).code!==0)return!1;let o=await Vo("secret-tool",["lookup","service","__resend_cli_probe__"],{timeout:3e3});return o.code===0||o.code===1}}});var Hs={};io(Hs,{WindowsBackend:()=>Ur});function Yo(e){return new Promise(t=>{(0,Xo.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 ph(e,t){return new Promise(o=>{let i=(0,Xo.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 Xo,ho,Ur,Qs=be(()=>{"use strict";Xo=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
|
}
|
|
33
|
-
`,
|
|
33
|
+
`,Ur=class{name="Windows Credential Manager";isSecure=!0;async get(t,o){let i=`${ho}
|
|
34
34
|
$v = New-Object Windows.Security.Credentials.PasswordVault
|
|
35
35
|
try {
|
|
36
36
|
$c = $v.Retrieve('${ft(t)}', '${ft(o)}')
|
|
@@ -39,18 +39,18 @@ To fix: either repair the JSON manually, or delete the file and run: resend logi
|
|
|
39
39
|
} catch {
|
|
40
40
|
exit 1
|
|
41
41
|
}
|
|
42
|
-
`,{stdout:r,code:n}=await
|
|
42
|
+
`,{stdout:r,code:n}=await Yo(i);return n!==0||!r.trim()?null:r.trim()}async set(t,o,i){let r=`${ho}
|
|
43
43
|
$v = New-Object Windows.Security.Credentials.PasswordVault
|
|
44
44
|
try {
|
|
45
45
|
$c = $v.Retrieve('${ft(t)}', '${ft(o)}')
|
|
46
46
|
$v.Remove($c)
|
|
47
47
|
} catch {}
|
|
48
|
-
`;await
|
|
48
|
+
`;await Yo(r);let n=`${ho}
|
|
49
49
|
$secret = [Console]::In.ReadLine()
|
|
50
50
|
$v = New-Object Windows.Security.Credentials.PasswordVault
|
|
51
51
|
$c = New-Object Windows.Security.Credentials.PasswordCredential('${ft(t)}', '${ft(o)}', $secret)
|
|
52
52
|
$v.Add($c)
|
|
53
|
-
`,{code:s,stderr:a}=await
|
|
53
|
+
`,{code:s,stderr:a}=await ph(n,i);if(s!==0)throw new Error(`Failed to store credential in Windows Credential Manager: ${a.trim()}`)}async delete(t,o){let i=`${ho}
|
|
54
54
|
$v = New-Object Windows.Security.Credentials.PasswordVault
|
|
55
55
|
try {
|
|
56
56
|
$c = $v.Retrieve('${ft(t)}', '${ft(o)}')
|
|
@@ -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(()=>(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,Ur=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+QnDHgd/Q0uecjlR0pzKu4hQfpTcENg844oAaF6njmlwxJ3dMZH4UrDB44x3FH3evTuKAFDckL0zjmhcjOeo6Uw7dwwCMfpSgncQMH3NAE2QWx1zTwGOQuCw+73pgOBzjd396T5trbQKALiFiqkjI681bibBO8HJ7d/wqlk4DK244wRViEbkBU4+tAGpE3pnjitGEkjJ/GsSOQ7suCM9vetKJxxzxntQBuxMeAOwrTjcYAJrBikOeeDmtKB8nBHBoA1lAPINSdearo3AFWB0oAMegphyOoxUtNI/woArlODVZ0J4A4P8AKrrD/CoXHGB1oAzZYzgKOMGqjqdpAANarpwR6VSkQqBigDIkU5w3B6+1UpEwfn6H9K13Q54xntVKZBnJHOMf59qAMyWNcsTgKP0qhtYAso3BuorVdHbD5+vGR+FU2QfeXjFAFJwG5wM+hHT6VDhQfmPB/SrJQk7uo6+majC9mPzUAQ9FAbg561Jn935Z9aRsE46/1+lC5VunXpQBJtIY85578GpQ2FH96olHKqSc+vXFOOwtgr8p96AAE46cntTmLY4A6Z/D0oCA5VCQQelABI6ZBoATbyN45YcY70kgVlU5x15+vpTzGqIFIPr+NC8A8ZJ7GgCttPU846UuDjLHIU88VMANpJ4XHbqKZgEY546fnQBXbdn5ePWk6EleeO9TFQU3EHjp6+9LzyrDr0oArhTwe1M5P3uQc9KsbRH8wPJ/GotpGWxwOv0oAhxgFhx2qM4BwvOetWf4sZ4/WoyCfl24HoO9AFdl4O7OahKY61aZRuOOvSoStAFZl9qquo6CrzCq7L6UAUitQkdquMvrUDLQBWK1ERVkioiKAK5FNxUpFMPtQB//0vgCiiigAooooAKKKKACiiloASiiigAooooAKKKKACiiigAooo+tABRRRQAUUUUAFFFFAC0lLRQAlFLSUAFFFFABRS0UAJRS0UAJS0UUAJRRRQAUUtJQAUtJS0AJS0UUAJRS/WigBKWkpaAEopaSgApaSigAoopaAEoopaAEpaSigAopaKAEopaKAEopaKAEopaKACiiigApKWigBKKWigBKKWkoAKWkpaAClpKWgAooooAKKKWgBKKKKACiiigAooooAKKKKADtRRRQAUUUUAFFLSUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFAoAWkoooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACu98GartlOmStjcd0f17j+tcHUtvcS2s8dzCdrxsGB9xQB9FROOeRVketYOkX8Oo2kdzGR845HXB7g/St1DwB3oAsA+lSioAfSph6UATDHU04e9NB4xSigBwFL1560gp31/+tQBGRUDLnIq0RUeADzzQBQkTPAHNVWj7jgg1qOpzj8qqMvc0AZboRyOvpVJ4ienFbDqAOeDmqsiHjPbpQBjyRO3zA9qqyROcY/XrmtSSMnG4fdPUVUkQ/NgH8aAMyWP5yVyAetVpEBIychugHOPrWu8YJ4GSB0qk8SpwVAH8jQBQKHIcAgjqPWogrZyTirjAAMp69/8Ki2jAIPUdBzigCv0XcvBzimnaV4GSOtSkEMMn5fU+tNOVBJHfr/9agBrD5txH/16BhTgYw3r7UN1OMD2pMMcZ5oAeCch+M0u0ZHUZpowF6dO5p2QdvagCZeQB0x0PerUZ8s7D1zuz/SqKk/KPzzVgbTnv7UAXI2Jyp4z054q/CTkDI44HpWbFjGW/DvVyJtwGDzQBroxH3uTWnDIBnmsWNscEgA9K0YX54/OgDfibOAOlXFIxxWPBIAoAOfWtKNg3A570AWxSEUBsin44oAiIqJl5xzVjFMI/H3oAqyL1x1P61TcEjkZzWiV71VkXv8AnQBmP8xGRzVKVRjcRjnBrVkBAHGfeqMq4Gw8e9AGayNtOe/ANUnj2gjHsSeK1HUE4IJ9qqSJuwMkjvQBlshAHTap9aqyKDkqeD1rQkXYDt4RePaqbA/dTnnJHb1oAqtjOCCcUmQPmHIPHNTEdT6DmmDK4JXr7dKAFDFMeXwOh/Cn8noRj1/rUQHVQOD0+tCFSGRj04OPSgCcArku3B70pUvjZ19KFXAIY5HbPpTx94lOuOcHFACRgqOOQ3HNABLYJyF6Ef1p2T0Q59qdsBIVuPagCDBQ7ifr9DTCGYjHTrz1FTdCSBt9zzmnFSq4X8+woAhOM/KePXHeowMcdQe54xUxGSxVSDj9PWmsOCG6enQj8aAImBQbiBx71G4X5iByO1S48xdrfMRQUwTt5P8AnNAEWDnHX0qMx5AI65qYDABHXGKaRuG0Dp+dAEBBBJ4zUGD1PerXAOcZ6/hTFTdksen5ZoAqMoqB14Iq4Qcc81E68eo70AUSvBqsy1oshHHrVZl9aAKJWoSKuMo5xUDLzQBVYVGRirDCoiKAP//T+AKKKKACiiigAooooAKKKKAFpKKKAClpKKAClpKKAClpKKACiiigAooooAKWkooAKKKOaAFopKKAFopKKAFopKKAFpDRRQAtFJRQAtFJRQAtFJS0AFJS0lABS0lFABS0lLQAUUUlAC0UUlAC0UlFAC0UlFABS0lFAC0UUlAC0lFLQAUUUlAC0UlLQAUUUUAFFJRQAtJRS0AFFJRQAtFFFABRRSUAFFFFAC0UUlAC0tJRmgBaKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAFpKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo60UUAFLSUUAFFFFABRRRQAZpKWigAopKWgDtPBurfZbo6fL/q5zlST0cf4ivX433D2r5tVmRgynBByCOxr2/wAOasuq2SzMf3ifK6n+8B1/HrQB1q1MKrqeh7GpxQBMKeKjHpxipBzQA8U7BpnFKBQA4j1ppHanjij+lAELL37VXZKtkdqiI4JoAounUHkGqrKw+Yd60mXnIqu6469aAM14yDjpVN0PU1qsuWweT3qq8Y6diPyoAy3XAyDjHNVCm7PTk/lWq6FGA29vr+NU3Rg2KAMySDIODk+9VcBQQ3f07fStd0OSc8kVTZV3HHCjOSexoAolc/KQC2M1AwDHPPv3q6wXgjqD1+veq+3IK4wfUUAVtv8Ad6ik2lcnrzjNT4H3Rx701lbPTPvQA3GMenpRtLsG6Y4xQQM9c9xSg5bJO6gAJOOvU8ipgTkg8nHWokYD0A9aeMZK88UAWkc5VYxke/rVmOQuFC5UgmqQypGBg8Z9anTjp16+4zQBoxyBzgDvjnpWnGynBIAA4xWQkoVcvwQO/er67RwT9B9aANqGReoGP51qRSc5HGKwYXzjd1PStCNwoyetAG6hyMipxWdDJwAevetBTu5oAd1puB0qSkIoArlcCoCAcg81bIPSo2UbTQBQaMjgHrVCVMnJ9PwrWcDAOOlU5VzwcAelAGU6jP8AtY/OqjqADk/XtWo6gk9CcVRdcnKigDMIzlCOP6e9U5dqcldoI5HvmtR0O7KjJNVmVSWDd+3agDLbDkFjj9evtVfODuyfTFXXQoS2Mn3qBlcv0BGOCPSgCAcDb1J6E9qRiEz3bHNScgbXIBPQCo+CNuAMfrQA5ZABlunYc/54qQY3Aj/vrvTFKqF9fWpEjDYKkjk9e1AE25nYjuOM+1ObIHPB7+p/wpkePKJb+H86VmHGM5PBPsfWgB5I4A59cUcElhkClwCenA7j2pdgCgjBY+nSgCFQWPTGBgE9xTThw2RxipdrAENzyMHNMIDsV6DGfxoAiKlRnqMU0AnJOBnrjsaskZJU/eA6CmKm3vlTQBX8sbR13HkUjAHJ796mZQq+gPP4VGQoQHPXjp2oAiY5xkZz7YzUDYzjGAO3YVayTgAbgRnn0qI+Xg7RnJ6GgCAgA9OPemFVGeMCpuvI78UwoxbH1P5UAVGU45PFV2XNX2HzDHBPpUDKB1Bz2oAz3TBIqu68kelaDjg5qs64Y+lAFFlqBlq6y88VAwoA/9T4DxRtpaKAE20baWigBMUYpaKAG4pcClooAbijFLRQAmKMUtJQAmKXFFAoAMUYo+tLQA3FLiiigAxRilpKADFGKKKADFGKKKAEpcUUUAJilxRS0ANpcUtFACUYopfegBMUmKdRQA3FLilooATFGKKWgBMUYpaKAEwKMUtJQAYoxS0UAJijFLRQAmKMUUUAJilxRS0AJRilpKADFJilo4oAMUUUUAJS0UUAJilxRRQAUUUUAFJS0UAFJilooATFGKWigBMUYpaKADFGKKKACkpaKAEoxS0fWgAxSYpaKADFGKKKACiiigAo96KKACiiigAooooAKKKKACiiigAoo+tFABRRRQAUUUUAFJS0UAFFFFABRRRQAUUUUAFFFFABQKKWgBKKKKADiiiigApaSigAooooAKKKWgBKKKKACiiigAooooAKKKKACuh8M6v/AGTqAaQ/uZvkf29D+Fc9RQB9LwMGQHPXpirY4rzjwXrS3VoNPmJM0HQnunb8ulehxsGFAFgVIP5VGORgcGnjoBQBIKfxUYNPFACjrTqaKdQA0imkVJTTQBXYcZqFl7GreOeaiZf/ANdAFJl79D7VWZc53A1fYfgKhZd3K8Y9elAGXJGR071VdOPkz7itRlO71quygnkjnvQBmuuDwMD0NQFMjOMkfyq8y8kNzjvVdlI5boOlAGfIqbw/PAPP9KpkEkFlyP8AOK1XUFvTPTniqzKHOCclaAM943Lt045NV8E4HXPWrrplslQMc4qNoiGJIGPSgCrtKN0PFNByRnofarDAEEc5FRYJXp+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/61SLnJTPJFAGnFIN2SRW/azEHk9OlcmgPGO3Wte3mKnj7tAHbQPuAJPWrn3h9KwrOcECtqNsigBrioWXFWyKiYUAUmUnoKruh+lXiPxqIgfSgCshKNkVog+aoPes10wcg8irEM2w460APYdjyO1QSLmrrLtO7rmoGXd0Gf6UAZEq+vaqTomDnr/8AXrYlXgj86zXQAbulAGZImQQQMHjH9arNGU5I46//AFqvsuQSBk9M1UfJy1AFJ1K/eXg1FIGAyOnpVxlYHIOcVC6ntwBzQBQYBvl+99KYwXdkfeHA9xVllUFvlDe9RHgADp6CgCmyl87TnH4VDsIBJ/T+tWWGFDc+1Mzj7owD1FAFfAztYEH19aXnPzc0hAzjnHYilZcEYOCP5UAO4DDoSeOOtPUnOAc4HAPGKjB5JK4IH4U77wOQCc8ev0oAnAKjPPPJNOViTjg4Oc1AC275zhT+P4VYyCSQdo6gY/nQBNxKA6rjHGOx/wD1U0M+AFbg9QOKapO5XGQpGfp+FIdpjwTjngmgD//Q+EKKdRQA2kp2KSgBtFFFABSUtFACUYpaMUAJRS0UANopcUlABSUtFABSYzS0UAJRS0UAJiilpKADFJTqKAG0U6igBKKMUUAFJS4oxQAUlLRigBKKWigBKWjFFACUUtFACUUuKKAEopaKAEooxS4oASilooASilooASloooASilpKACijFGKACij60UAFJS0UAFJilooAMUYoooATFFKaKAG0UtFACUUUYoAKKKKACigUUAFFFFABRRRQAUUUUAJRS0UAJS0UUAJRS0UAJRS0UANopaKAEopaKAEooooAKOtFFABRRS0AJRRRQAUUUUAFFFFABRRRQAUUUUAJR9aKKACkpaKACiiigAooooAKKKKACiiigAooooAWkoooAKKKKACiiigAooooAKKKKACkpaKACkpaKACiiigAooooAKKKKAEpaSigApaKKBoKKKKBhS0lFIAq/p2p3ulXS3lhKYpF7joR6EdxVCimI+kPC3jGy1uJYpG8q9HLRHpgd1PcfrXeKcgdOa+OYJ5baZJ4HMckZDKy8EEdwa9z8I+PY9RIsdWZYrroj9Ff/A+3ft6UgPVscUmM8U2NgwzxTxTERlaiZc/SrXXpTCM0AUmTI5/CoHXngYq+VqBlON1AGeyD8qg8vJ5xmtF171AUGM9KAM9lP8XGO3rUDA4YdM1otGM56d8iqrJlsYBoApsBkk8ADmq7AjB4welXnRXbBycdj0zVZ1IJAwR1z1oAqbeMYwT6VERwHI6cfhVtwwx6VE23JKjrQBUYEDCk9elN6rtxjHr3P1qw+AaiKLvx1IoAjAG3aFHTt60BRwOjAdaUjdxzj0FC5BwOMdfWgBykhRz35q5BIQQAc56iqOMEjt2qRWYNkgkjtQB0tpcMpHP3R2rp7aUsoOetcJDIWHTr6Vv2V0V+Q9jQB1oOaYw9qZFIGqweaAKhXrURXk1cYVXZc0AU2Xj61AVIbg1eK4qBlwc0AS27h8o54NSYOMH9KorlWzjmr+7euR260AVpEP3iOB61mzjaQOMdfxrYccfWqEqYzQBkOo6fgapyKM7QPc+9akyArjH5VTkTLZPXFAGeyMTgdqrOozn04q8w5y2RjjPqaqujD5160AVXVcfWoHAiGAoyatMQcbgCcf1qFwMMSv1NAFWTOA0Yz7fzzUexcbv7xGM1M4bIA5HfNREAgqeN3THSgCu7BSdnAprFuJBjZjBqd1EhPHIxgioXSQ5IIoAhPyjk9+9PDDH4ZH/66Vdg4Pf16Ux1XjBOensaAHszZHp608OuNpOSOc+1REIFBywzxUjbNvQ4PHPrQBPw0ZwxIJ4FO2qoxjdnp6VCuAF2j8KfG5KqMY5wfp34oA//0fhPBoxTsUUANpKdSUANxSYp1B9KAGUUuKKAEpKdSUAJRS4ooASkxS0UAJSAU6igBKMUvSigBKSnUlACUUtJQAe1FLRigBKKWkoAKKWkoAKWiigBKKWigBKKKKACiiloASiiloASilooASiiigAoopaAEooooAKSlooAKSlooASilooASilpKACiiigBPpRS0mKACilxR2oASiiloASilpKACiiigBKKWigBKMUUtACYpKWloASilpKACiiloASiiigAooooAKKKKACkpaKAEpaKKAEopaSgAooooAKKKKACkpaKAEopaSgAoxS0UAJijFLRQAlJTqSgAo60UtACdKSlpaAGUZp1FADaOtLijFACUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFJQAtFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUtJQxoKWkoqRi0lFLTAQ0tFJRcBaKSimI9T8JfEB7AR6drRL264VJurIPRh3Hv1Fe5W1zDcRJNCwZHGQwOQR6g18d113hrxhqXh1hChM9oTloWPT3U84P6GkB9Qj2oFY2j65p+s2y3VjOJE43Doyk9mHUGtrdnpTEIRmomXrVgc5pCMdKAKDpxioSp2+taBSoGTP4UAZ5T/8AVVZkGeBWoUGNuee5qBkOOlAGUy8jk89TUEigf41pyLngDpVV0IyTwD3oAobQOp464qBhzyMnrV5kycBcVDsYA7iOOPwoApMgwTnk9ahbPqOP0q6yAnIA6VXcHGNvA7f40AQEZJxx35qNAo4wfr3qcxbvf1poTDEZA9D60AQnJYhxnHftUgbJ46Dn8qRlwcN8oNG4j0A7f/WoAsxHGEPHNaNvIN3HQfrWPGTn5h14/CrcbEN9KAO0srrOB69K3UOR61xFrNhh711FpcBgOaAL5HeoitWOCKYRQBUZRULLnrVsjtULLQBUK89eRRA21j71KynOQMVEVyM46CgC2xJ681XlQ/nT0Yn5T2qRge/0FAGRLx8uMH17VnyAAgHvW28XGMZFZ8yAADGaAMqVT0HSqj7lGPXpV9k5GT16VVZdpwcnB/OgCkVI5bqagfKgAetXSuBjP1FVnDfdPAoAqbF2kE9eCf61DIoH7sHp0Iq4yqRjGMdqhcbc9ifxoArMRzx97HHSoPK2ZLcZ71ZK7k3E9OfpUOMYEgBznjuKAI3456DuOtRMrkEY6fyFTuScAMAQeM1COeVyw+tACKSQSvPt6UMhQbx39e1D5JBXj1AFIH4KNzgdT0/GgCXAIBYDHpTg24hs8nj/APVUKklSARk9utPUgpt28A9+Me4oA//S+FqKXHFJQAmKMelOooAZikp1JigBtFLSUAJSU6koAT60UvtRigBtJTqTigBKKdRigBuKKdRQA2ilooASilooATpRS0UANxS06koAbiinUGgBKKWigBMUUUUAGKTFLRQAlFLRQAmKKWigApMUtFACUUtFABRRRQAmKKWigBKKWigBKKWigBMUUtFACEUlLRQAlFGKKAExS4oooAKKKKAExRS0UAFJS0UAJRS0UAJikp1HvQAmKSnUUAJSUtFACUUtFACUUtFACUUUtACYopaKAExRS0UAJRS0lACUtFFACUUtFACUUtFACd6MUtFACUUtFACYoxS0UAJiilooASjFFLQA2ilpKACj60UtACUc0uKKAEopaSgAooooACKb0p1FADaKKSgAopaKADFFFFACUUtFACUUUUAFFFFABRRRQAUUtGKAEopaSgBaKKKAEopaKAEopaKACkxS0UAJiilooASloooAMUUUUAFFFFIdwooozRYLhRRRRYLiUUUUxBS0UlAGlpeq32j3Qu9PlMUg4PcMPRh3FfQHhXxxY6+VtZlFven/AJZ5+VvdCf5dfrXzbTkd42DoxVlOQQcEH1BoGfZ6tke9SV4P4U+I0kLLZ+IpCycBbjBJH+/jr9Rz9a9xtrqC4iWWFxIjgMrKcgg980hExWmFDUwwaCOaYFJ48j3qB4ycAdK0GWoiooAzPK5PpVdlx8p571pyRhsEdqgaI5GQM+1AGUUwpJGarFecYzmtVlIGQOaqmPBz2xigDOYZ+UYyR1HWoXUbdzkZ6EVfePA9+1VymTjGcfzoApFWA3ZH4VCy5KnHPr6fnV3b8vPXNQSIysWAzkc0AVXHRsA0gXPPTHarHtjmoAp79KAFUZbHTFSKSQRuxnmocgg5JA7VKMsAeM9qANGBsMOc1v2lyu7pzXLruBznGOvtWpbSbSCe9AHcQyAjmpzyM1i2k/rW0hDLQBCQc5qJlqywFQsOaAK7AmotvfrVkrnnsajYcjHbrQBWHynjirGAwAz161Ew7ZpyHHGc0ADrxgdKzpF5OBya1Dyv16VVlTdkrxmgDGlRQAQe+B7VRYEtjHTr61sSIAcAcg5qnInU42mgDKKqx5Ge9QPtLYPOPyzV1lGcn8Kr7Q31PegCsyE4c4OKqMMrvHrxV0rx83X2qB1bAA+uPSgCpjcScDK9R2qEgbmwOexNXGQkcDAxzUDP8xDYGB+tAFYDf8qrnjqfWmcdffFThDGBv9eoqBh8ueOeg9qAI2XHGRjOR34pG2sCPXvUm0EdCoA61E2FbB4HrQAhKxnLnJxkZ/8ArVKGAT/ZI6VGQVxxn0pxcpkgZ4oA/9P4ZxSU+kxQA2inYpMUANxSEU6igBhFJinkUlADMUU/FNxQA3FFOxSUAM70U7FGKAG0tLRQA2ilooASilooASjFLRQAmKMUtGKAEopaKAEoxS4ooAbRTqTFACUUtFACUUtFACUUtJQAlLRS0AJRS0UANopaWgBtFLSUAFFFLigBKKWigBKKWigBKKOlFACGilooAKSj3paYCUlOpOaQBRRRQAlFLjvRQAYpKdSUAJRS0ntQAUZoooAPaiiigBKWiigBPaloooASilooASiloxQAlFLSUAFFLSUAFFFFACUU6koASloooASjilooASilpKACilooASiiigAooooAKKKKACkpaKAExS0UUAFJzS0UAFNp2KSgBKWlooASiiigBMUmMU6igBlLRikoAKKKWgBKKKKACiikoAWiiigAooooAKKWigBKKWkoAKKKKACiiigAooooAKKWkoAKKKKACiiigAooooAKOlFFABRRRQAUmaWk60AFFFFABRRRQAUUUUAHSur8N+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+tFFACUUGkoAKKKSgAooooAKKKT60AGaKKKAEpKWkoAKKKKACkoooAQ0ZopKAD2paSigBc0neiigAooooAKSikNAC0UlFABRRR1oAKKKM0AFHvRRQAUUUmaAFyaSkpaAEooooAKKKKACikpaACikooAWk70UUAFJRRQAtFJRQAUUUUAFBopKAFooooAKKKKACiikoASijrRQAcUUUUAFFFFABRRRQAlFFLQAlFFFABRSUtAC0UUUAFFFFABRRRQAUlLSUAFFJRQAtFFFABRRSUALSGlpKAEooooAKSnU2gD/1Pk8UtMBp+aAFHWn0wU8UAO9qUelMzTxQA8cUtJRQA4U4daYKcKAH0uaYDS0APBpcimZpc0APFLTM0uaAH5paZS5oAfQKbmjNAElLTM0ZoAfmlzTc0lAEm7jHpRmmUZoAkpc/pUeaXNAEufWlBqMGnUAS5oyajzSg8daAJg2KkDmq4anA0AWw1SB6qhs08H1OKALit2qdXwKoBsD3qVX4oAvB+1TK3SqIepQ1AGijnirscuB1rIR6sI+aANlJKuRycg1iJIBxVuOTAoA6CObpV+ObpXOxyj1q9HMB3oA6SKetKK4zxXLxzDFXYp6AOrinq/HJkhgcEc1y0NxzzWpDcA96APP/H3wys/EayatoKLbat954xhYrj69lf0PQ9/Wvl25t57O4ktLuNoZ4WKvG4KspHqDX3ikoOK5Pxp4K0zxpZHzStvqUQ/cXWOT6JL3ZD+Y7UhnxrSZrZ13QNV8N6i+l6xAYZ1AYc5V1PRkbowPrWORimAmeaM+lJSUCHUtMzRmgB9FNzRmgB1FNzRQA6lpopc0AFHWjNJQAtJ1pM0ZoAWmmjNFABSUUUAFJRmjNABSUZNFABmikzRmgAoppozQAUtNzS0ALTaM0lADqSkooAKSikoAWkoozzQAU2nU2gAoIoooASiikzQAtFJSUALmkzRRQAUUlFAAaTNLSUAJRRR9aAEooooASlpKKACiikoAKKKSgBaSlpKACkoooAKKKKAEoopKACiiigAopKKACg0UUAJRRRQAfWiiigAopKKAFooooAKKTNFABSUtFACUUUUAFJS0UAFJRS0AJRRRQAUlLSUAHel+lJQKACiiigAoxRRQAUUUUAFFFHNABRRRQAlFGaKAA0UlFABRRRQAUUUUAFBopKAFopKWgBKWkooAWkoooAKWkooAWkpaKAEooooAKKKSgBaDS0UAJRRRQAUUUUAFGKKKACkNFFABSUUUALTaWkoA/9X5LzTgaiBp+aAJRQKZmnZoAkp2aYKdQA/NPFRinigBacKbxS+9ADqXNNFGaAHilpgNOFADgaXNMpc0APBoplOzQA+lGKZmloAfS0yjNAD80UyjNAD6M4puaM0ASZoyaYCTS5oAfmlDCo/alzQBLSj0qIGnZoAkzTgfWo+O9Ln1oAmDccU8N2qAEdaeGoAmU81KGxVbdjrTg1AF1W9alD1SV6lDHNAFwN71YRzWer1MHz9aANJXq0shrJWTmrCyZoA145eaupMTWGsmMGrKykUAdAktW0n7CsBJ6uRzUAdDFNjvWpDOK5eOWr8c4wKAOqjn71fSUEVy8U+K0YbgUASa/wCHNH8VWAsNXTcEyYpl/wBZET3Q+nqOhr5U8XeDdW8I3nk3a+dayn9xdIPkkHof7rjup/DivrZZuKZcQ2moWsthqEK3NrOMSxP91gOh9iOx7UgPhk0Zr07x98Op/DDvqmlFrnR2OdzcyQZPCyeo9H6Hvg15fQMdSUlFMBfrS03NGaBC0vvTaWgBaXNNozQApPvSZoooAKM8UUlAC0ZpKM0ALzRSUH1oAKSjrQaAEoopOaACikooADSUtIaAEoozSUALSGgmigAozRR3oAT3pOtGaM0AFFJmigApKM0UAJRRSUALSUUUAFJmlpKACjNJRQAtJmkooAUmkopKAFpKKKACkoooASiikoAWikooAWkooNABmijNJQAUUUlABRRSGgBaSiigAooooAQ0UZooASiij2oASlopKAFooooAKSijvQAtJS0lABSUtJQAUUUUAFFFJQAtJS0UAFFFJQAUUUUAJRRRQAUUUUAFFFFACUtFFABRRSUALSUZooAKM0lFABSUtFABSUtJQAUtJ1paACijpQaAEoopaAEozRSUALRRRQAUUUUAJS5oooAKSiigBaKKKAEooooAKWkooAWiiigAoopKAFpKWm0ALSUtFACUUtJQAUlOptAH/9b5GzTgarg08NigCfNPBzUAPFPBoAm3ZpwNQg08GgCYGng1EDTx0oAfmlzTKKAJBRTQaUc0AOp2aZ70uaAH0tMzS0APFLTBTqAFzTgaZS0AO4opoNFADs0uaZmlzQA7PrRTc0ZoAfRmm5pc+lAC55pc1HmlBoAkzSg4plGaAJQaXJqLPalzQBNu5o3VHmjNAEwb15pwbnrUIOKUHFAFpWp4c5qqpp+aALgcU8PiqQbtUqmgC8r1MkhFZ4Y1MretAGkslWBKB+NZSuanR80AaySVbSX0rGVyKsJL09aAN2OarscwNYKSe9W45TQB0Uc/PXNX45zmubjlwM1ejnPWgDqIZj68VeSQiuZhmwRk1opc470AdBFMuGSRVkjkBR0cBlZTwQwPBBrwjx38KTbRya54PiaSAfNNYjLPH6tF3ZPVeo9x09lSbvmrsV0ynKsQc8HuKAPhYEHpRX0x42+Gtnryy6roKrbapy7wjCxXB9h0Rz69D355r5rngntZpLa6jaGaJiro42spHYg0hkdApM0maYh2aWmZp3agAzRmim0AO60ZpM0tAC5pM5opKAFopKM5oAWjNN4ooAXNBNN60e9ABRmkpKAHZpM02igBaM0nSigAzQaTIooAKM0UlAB9aKKSgBKM0UUAFFFIaAFpKM0lAC5pKM0lABRSUUALSUUUAFJSk0lABRSUUALmk6UUmaACiikoAWkoozQAUlFJTAWjNJSUgFopKKAFopKKAFpKM0lABRRRQAlLSUtACUtJRQAlFFFABRRRQAUUlFABmlpKKACiiigBDRRRQAUUUUAFFFGaACiiigApKWigBKKKDQAUlFFACUUtJQAtJS0lAC0UlFAC0UlJQA6kNFBoASiiigAooooASiiigAooooAWiiigAopKKACiiigAoxRRQAUZoxSUAFFJRQA6ikooAKKKKAClpKKACiiigAooooAKKKKAFpKKKACkpc0lABRRS0AJRRRQAUlLSUAf/9f48U09aYvWnr1oAkFOHXFNFOH3hQA8HmnimDrT1oAevSpu1Qr0qY9KAFo7Zope1AAOtLSDrS0AOHSlpB0o/wAKAFpRRQKAHUvek9KXvQAuaKT/AOtSnrQAo6UUDoaKAClPSkpT0oAQ0tB6UetABQOaKFoAX/CjtR/hR2/CgBBS96B1oHX8KAFp3emd6f3oAUUd6B/WjvQA7vSg/wAqTvQOn4U0A8U7Jpop1IBwPNSAkVGOtSelAEq0/JxTFpx6GgCVWOamBIz7VAvWpuxoAsAnip0YgVXHQVOn3aALKO2auIxzVFOv5VcTrQBcRmq7GzEVQToKuxdKANCN22/lV6J2IH41nx9Pyq9D0/OgDSjdtvWrcTt+VUY/u/jVyLofrQBoKxHSvOPijoGm3+iSa7LHtvrUBRKmAXX+6/HzAdj1HrXoq9B9K5T4h/8AIm330FIZ8lZ4paTt+FL/AI0xCUd6XtSDrQAtJ70tJQADg0uaTuaKAFzSUelJ/hQA6kopRQAdaaacOlNP9KAFpKPSjvQAdqSlPSkoATvRR3oNABSClpBQAUUHqfrRQAlJSmkoADRQaKAEooNFACUlLTexoAWkpaSgBKO9FL3oAQ0UGigA7Uhp3amnpTAKTtS0nagApDSnvQaQCdqSl7UlABSHg4paQ9aAFpDS0hoASlIpKcaAEptOpvf8KbASloopAFHeg0dzQAlFLSdzTAO9IeKXvSGkAUUUUAJRR3ooADSU40096AClHWkpR1oAQ0lKf6UgoQBmik9KdQAlFJ2ooAWiil9KAEpaTvS0AJ2o74o7Ud6ACiij/GgBCaM5oNAoADSUppD0oAKKKBQAnWjNAooAWkpaKAEPSk7Up6UdqAAdM0lKOlFAAKQmgUhoAWijvRQACilFJQAlHfFKKTvQAvfFJS96SgBaKDR60AFIeDS0h6mgBaQc0tIvagAHNLSClFACUUetFACGig9KKACkpaSgB1J3pfWk70wCikpfSkAUnpS0ncUALRS0goADRQaKAEpaQ0UAFFFFABS0Cj1oASlpKX1oATrSUopKAP/Z"});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>
|
|
61
|
+
`,{code:r}=await Yo(i);return r===0}async isAvailable(){if(process.platform!=="win32")return!1;let{code:t}=await Yo(`${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(()=>(yr(),br));return et=new o,et}if(e==="secure_storage"){let o=await Ns();if(o)return et=o,et}if(!e){let o=await Ns();if(o)return et=o,et}let{FileBackend:t}=await Promise.resolve().then(()=>(yr(),br));return et=new t,et}async function Ns(){if(process.platform==="darwin"){let{MacOSBackend:e}=await Promise.resolve().then(()=>(Ps(),js)),t=new e;if(await t.isAvailable())return t}else if(process.platform==="linux"){let{LinuxBackend:e}=await Promise.resolve().then(()=>(Gs(),$s)),t=new e;if(await t.isAvailable())return t}else if(process.platform==="win32"){let{WindowsBackend:e}=await Promise.resolve().then(()=>(Qs(),Hs)),t=new e;if(await t.isAvailable())return t}return null}var ze,et,Sr=be(()=>{"use strict";ze="resend-cli",et=null});function nt(e,t){(0,ke.mkdirSync)((0,Ls.dirname)(e),{recursive:!0});let o=gh(e);try{let i=t();return i instanceof Promise?i.finally(()=>Kr(e,o)):(Kr(e,o),i)}catch(i){throw Kr(e,o),i}}var qs,ke,Ls,fh,hh,Ms,gh,Kr,Ah,bh,Ws=be(()=>{"use strict";qs=require("node:crypto"),ke=require("node:fs"),Ls=require("node:path"),fh=1e4,hh=50,Ms=200;gh=e=>{let t=(0,qs.randomUUID)();for(let o=0;o<Ms;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}bh(hh)}throw new Error(`Could not acquire lock on ${e} after ${Ms} retries. If no other resend process is running, delete the lock file manually.`)},Kr=(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>fh}catch{return!0}},bh=e=>{Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,e)}});var Js,Vs=be(()=>{"use strict";Js="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+lFFABSGlpKADiiiigApKKWgBKBRRQAUUtFABSUtJ70AFFHvRQAlFLSUAFFFFAC0UUUAJRS0lABSUtJQAUUdaKACiiigAooooAKSlooASiiigBKXNJRQAlFLSUAFFLSUAFFLRQAlGaKKACiiloAOlekeEPiNqXh3y7C9zd6cDjYfvxj/YJ7f7J4+lebUUAfcWk61p+s2qXumzLPC/dTyD6MOoI9DWznIr4f0LxDqnh27F3pkpQn76HlHHow7/XqO1fUHhHx5pnihfKhBt7tBl4HOTgdSp7j9R3oA9AxmlHHFIrAj3p1AEEysMuvaiJs4qxjuRmqsgMRz2oAs9aqTqdwcd+CferCNuUGnMm4EH0xQBQfkHHYVTkXHQZHerwXBKn+GoZFIFAGNKvbnP9O1Z8qgELjPqRWzNwuTWdPHtxlskUAf/W+UCBUZFT4qMjigZCRTDUpFNIoEREUwipDSUARYppFSGmkUAMppqQimmgCPFGKU0lACUmO1OpKAG0tO70lADcUlPxSYoAbikxT8UmKAG0lOpDQAU2looASiik5oAKKWkoASjmlpDQAlFLRQA2kp1N5BoAKSlooASjFLiigApMUtFACUlLRQAmOKSnUUAJRRRQAUUUUAJRS0YoAbRSkUUAJS0UUANpKdRQAlJSmkoASloooASkxS0UAJRRRQAlIaWkoAKKXFJigBKSlpaAG4pMU7FJQAlFLSUAJRS0lABSUtFADaKXFFACUlLRQA2iloxQAlJTqSgBKKXFFADaOKXFJQAUhpaSgAopcUn0oAKSlpKACkpaKAEpaO1FAB0pKWigBKKWigBMUUtJQAUUUYoASkpaSgAoopaAG0UUUAFFFFACUUtFACUlLSUAFFFFABRRRQAlJTqQ0AJRRSUALRRRQAUlLSUALSUtFACUYopKACkpaKAG0UtJQAUnelpKACiiigBKWkzS0AJS0lFABRS0UAJRS0UAJRS0UAJRRRQAUUUUAFFFJQAtJS0lABSUtFACUUUUAFFFFABRRRQAUUUUAFJS0lABRRSUAFJS0UAFFFFABRRRQAlFLRQAlFLRQAlFFFAAR2qW3uJ7WVLi2kaKWM5V0JDA+xFRZooA+hfBPxRjuBHpviSQRzkhUuT9189A+Pun36H2r3SORX+6QQe4ORXwNzXpvgv4jXvh5hZahuubEkAZJLxf7vqPb8qAPrP0pkihlINZ+l6nZapZRXthMs8MoyrLyPcH0I7g9K0gc9KAKQbyW8t+nY1cQ571FLD5nIOGHQ1HFJng8UAOuF5Dr0H3veoGG5f1q+MEEHoeDVIr5ZKHoOlAFCZATx0rOlQe/v71sSrWfIpPPtx7UAf/1/E/HPw91PwXItyJDe6ZIcLcBcFD2WQDgH0PQ+1ee5DKCOcjNfoJLDFcQvbTxrNFINrxuAysD2IPBr5w8e/CWay87WvCEJlt8l5bNT80YP8AzyB5I/2eo7UDPCCKYRUhOQc8FThgeMEdQfemsMGgCEimYqbFMIoEREU2pSKYaAIzTTT6aRQAym/SpCKQigBmKSn0UANpKdSUAJSU40lACd6Q0tFADKMU7FGKAGYpKfikoAbSU+koAbRS0lABikp1GKAG0lLijFACUlPpMUAN70uKMUtACU2nGkxQAlJTqSgBKKXFJQAUlLR70AJSU6kxQAlFLRQAlLRRQAlFLikoASjFLRQAhpOlLSUAJSU6koASloooAKbTqT2oAbiinUlACUUtFACUlLSUAJRS0lAB9KSlxSUAJijFOpO1ADcUUUUAJRRRQAUUUYoASig0UAJRS0lACfyopaSgBKWiigBDSU6koAbRS0lABRRRQAlFLSUAFFFFACUUUUAFFHSloASiiigApKWigBKKKKADvSUtJQAUUUlAC4pppTSdaACilpKAEopaKAE5opaSgBKKXikoAKKKKACkpaSgBKKKOhoAKKKSgBaSlooASloooASg0UGgBKKKKACkpaKAG0UuKSgBKKKKAEpaKSgApaKBQAUUUUAFJS0UAFFFFACUUtFACUlLRQAlFLSe1ABS0lFABSU6koASij3paAEooooAKKKKACkpaKACjrSUUAFBoooASiiigAooooAKKKKACiiigAoopKACiiigApKWigBKOlFFAHTeGPFWp+F70XFk5aFiPNhJOxwP5H0NfVXhXxhpfie1M9k5WVDiSF8BlJ9u49xXxf8ASr2najfaVdx3unzNBNGflZf6+oPpQM+8gc81WnjIxInbqK818FfEiy8SFNPvwlpf7ehOEkI/uE9z/d/LNepgqw96AIY3V14pLhCVDr1Tr9DVd90L5/gb9KvKQw24+91oEUCB3yQKpSJxkcf1rRKlH2dCOhqvIuetAH//0PVge49ealzjkHFU1f3qcNQB5P49+FVp4mkfVtFZbPU9uGTGIpyOm4Do3bPfvXyzdW1xZXMlnfQtb3MJIeNwQQRx36j0NfoADXG+NfA2l+NrHyrg+RfRcw3Kj5lPo3qp9PyoGfFBHFMrf8ReGdZ8Kag2mazEFPWOVeY5F7FT/Q81hdeaQEZFRkVPioyKYiLFMNSkU00AR4pKdTTQA2ilooATFNxUlIetAEdFOIpKAEpKdSUANxS0tJQAlNp9JQA3HNJipO1NoAYRSU+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 Xs(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 Zs(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(yh)})}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 ea(e,t){let o=Math.floor(Date.now()/1e3);if(e.access_token_expires_at>o+Ch)return{access_token:e.access_token,scope:e.scope};let i=process.env.RESEND_BASE_URL??"https://api.resend.com",r=await Zs(`${i}/oauth/token`,new URLSearchParams({grant_type:"refresh_token",client_id:Zo,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=Xs(await r.json());return await ti({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 _r(e){return e.toString("base64url")}function zs(e){let{heading:t,message:o}=e;return`<!doctype html>
|
|
62
62
|
<html lang="en">
|
|
63
63
|
<head>
|
|
64
64
|
<meta charset="utf-8" />
|
|
@@ -86,7 +86,7 @@ To fix: either repair the JSON manually, or delete the file and run: resend logi
|
|
|
86
86
|
z-index: 0;
|
|
87
87
|
pointer-events: none;
|
|
88
88
|
user-select: none;
|
|
89
|
-
background-image: url("${
|
|
89
|
+
background-image: url("${Js}");
|
|
90
90
|
background-size: cover;
|
|
91
91
|
background-position: center;
|
|
92
92
|
opacity: 0.2;
|
|
@@ -123,12 +123,12 @@ To fix: either repair the JSON manually, or delete the file and run: resend logi
|
|
|
123
123
|
<body>
|
|
124
124
|
<div class="bg"></div>
|
|
125
125
|
<main>
|
|
126
|
-
${
|
|
126
|
+
${xh}
|
|
127
127
|
<h1>${t}</h1>
|
|
128
128
|
<p>${o}</p>
|
|
129
129
|
</main>
|
|
130
130
|
</body>
|
|
131
|
-
</html>`}function
|
|
131
|
+
</html>`}function ta(){let e=_r((0,go.randomBytes)(64)),t=_r((0,go.createHash)("sha256").update(e).digest()),o=_r((0,go.randomBytes)(24));return{codeVerifier:e,codeChallenge:t,state:o}}function oa(){return new Promise((e,t)=>{let o,i,r=new Promise((a,l)=>{o=a,i=l}),n=(0,Ys.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=zs(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 ia(e){let t=await Zs(`${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 Xs(await t.json())}var go,Ys,Zo,kr,yh,Ch,Rr,xh,ei=be(()=>{"use strict";go=require("node:crypto"),Ys=require("node:http");ye();Vs();Zo="7136aa0b-625c-4c9c-8820-e9784c8eb141",kr="Received an invalid access token from Resend. Please run `resend login` to authenticate again.";yh=3e4,Ch=60,Rr="OAuthNetworkError";xh=`<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,120 +142,120 @@ 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
|
|
146
|
-
`,384),(0
|
|
147
|
-
Create a full access key at https://resend.com/api-keys`;ht=()=>(0,Ht.join)(
|
|
148
|
-
`)}async function
|
|
145
|
+
</svg>`});var ra,_e,na,sa,wh,aa=be(()=>{"use strict";ra=require("node:crypto"),_e=require("node:fs"),na=require("node:path"),sa=(e,t,o)=>{let i=`${e}.tmp.${process.pid}.${(0,ra.randomUUID)()}`;try{let r=(0,_e.openSync)(i,"w",o);try{(0,_e.writeSync)(r,t),(0,_e.fsyncSync)(r)}finally{(0,_e.closeSync)(r)}(0,_e.renameSync)(i,e),wh((0,na.dirname)(e))}catch(r){try{(0,_e.unlinkSync)(i)}catch{}throw r}},wh=e=>{if(process.platform!=="win32")try{let t=(0,_e.openSync)(e,"r");try{(0,_e.fsyncSync)(t)}finally{(0,_e.closeSync)(t)}}catch{}}});function Qe(){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,ca.homedir)(),".config","resend")}function Ft(){return(0,Ht.join)(Qe(),"credentials.json")}function la(e){return e.type==="oauth_grant"?Tr(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 Dr(){try{return Ke()}catch{return null}}function Ke(){let e=Ft();if(!(0,$e.existsSync)(e))return null;let t=(0,$e.readFileSync)(e,"utf-8");if(t.trim().length===0)return null;let o;try{o=JSON.parse(t)}catch{throw new Jo(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,la(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,la(n)]))}}return null}function gt(e){let t=Qe();(0,$e.mkdirSync)(t,{recursive:!0,mode:448});let o=Ft();return sa(o,`${JSON.stringify(e,null,2)}
|
|
146
|
+
`,384),(0,$e.chmodSync)(o,384),o}function oi(e){if(e)return e;let t=process.env.RESEND_PROFILE;if(t)return t;let o=Ke();return o?.active_profile?o.active_profile:"default"}function Cr(e,t,o){let i=t||"default",r=ue(i);if(r)throw new Error(r);return nt(ht(),()=>{let n=Ke()||{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 Bs(e){return nt(ht(),()=>{let t=Ke();if(!t)throw new Error("No credentials file found.");let o=e||oi();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,$e.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=Ke();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 Fe(){let e=Ke();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 Tr(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 vh(e){return Tr(e)?e:null}function Uh(e){let t;try{t=JSON.parse(e)}catch{t=null}if(!Tr(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=Ke(),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=Uh(l);return da(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=vh(s);if(a)return da(a,n,"config",o)}}return null}async function da(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 ea(e,t);return{type:"oauth_grant",access_token:r,profile:t,scope:n,source:o}}async function ua(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=Ke()||{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:Cr(e,i,o),backend:n}}async function ti(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=Ke()||{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 ii(e){return nt(ht(),async()=>{let t=Ke(),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,$e.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 ma(){return nt(ht(),async()=>{let e=Dr(),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,$e.existsSync)(t)&&(0,$e.unlinkSync)(t),t})}async function ri(e,t){if(e===t)return;let o=ue(t);if(o)throw new Error(o);await nt(ht(),async()=>{let i=Ke();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 $e,ca,Ht,Qt,ht,ye=be(()=>{"use strict";$e=require("node:fs"),ca=require("node:os"),Ht=require("node:path");Es();Sr();Ws();ei();aa();Qt=`Sending-only keys work with: emails send, emails batch, broadcasts send.
|
|
147
|
+
Create a full access key at https://resend.com/api-keys`;ht=()=>(0,Ht.join)(Qe(),"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=be(()=>{"use strict";st=process.platform!=="win32"||!!process.env.WT_SESSION||process.env.TERM_PROGRAM==="vscode"});function Sd(){return(0,Ud.join)(Qe(),"update-state.json")}function lg(){try{return JSON.parse((0,Xt.readFileSync)(Sd(),"utf-8"))}catch{return null}}function dg(e){(0,Xt.mkdirSync)(Qe(),{recursive:!0,mode:448}),(0,Xt.writeFileSync)(Sd(),JSON.stringify(e),{mode:384})}function vi(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 Qr(){try{let e=await fetch(Hr,{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 cg(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 Kd(){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 vd(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
|
+
`)}async function kd(e){if(cg(e))return;let t=lg(),o=Date.now();if(t&&o-t.lastChecked<ag){vi(se,t.latestVersion)&&process.stderr.write(vd(t.latestVersion));return}let i=await Qr();i&&(dg({lastChecked:o,latestVersion:i}),vi(se,i)&&process.stderr.write(vd(i)))}var Xt,Ud,ag,Hr,Uo=be(()=>{"use strict";Xt=require("node:fs"),Ud=require("node:path");ye();Kt();ag=3600*1e3,Hr="https://api.github.com/repos/resend/resend-cli/releases/latest"});var Dm={};io(Dm,{flushFromFile:()=>Zg,flushPayload:()=>Rm,getOrCreateAnonymousId:()=>Fm,getSpoolDir:()=>Xr,isDisabled:()=>_m,trackCommand:()=>Zr});function Jg(){return Wg[process.platform]??process.platform}function Xr(){let e=(0,Xe.join)(Qe(),"telemetry-spool");return(0,V.mkdirSync)(e,{recursive:!0,mode:448}),e}function _m(){return!km||process.env.DO_NOT_TRACK==="1"||process.env.RESEND_TELEMETRY_DISABLED==="1"}function Fm(){let e=Qe(),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 Vg(e){if(!e)return;let t=Qe(),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.
|
|
150
150
|
To opt out: export RESEND_TELEMETRY_DISABLED=1
|
|
151
151
|
|
|
152
|
-
`))}function
|
|
152
|
+
`))}function Zr(e,t){if(!_m())try{let o=w()&&!t.json;Vg(o);let i=Fm(),r={command:e,cli_version:se,os:Jg(),node_version:process.version,interactive:o,install_method:Kd()};t.flags?.length&&(r.flags=t.flags),t.globalFlags?.length&&(r.global_flags=t.globalFlags);let n=crypto.randomUUID(),s=JSON.stringify({api_key:km,distinct_id:i,event:"cli.used",properties:r,_nonce:n}),a=Xr(),l=(0,Xe.join)(a,`resend-telemetry-${crypto.randomUUID()}.json`),u=(0,V.openSync)(l,V.constants.O_CREAT|V.constants.O_EXCL|V.constants.O_WRONLY|(V.constants.O_NOFOLLOW??0),384);try{(0,V.writeFileSync)(u,s)}finally{(0,V.closeSync)(u)}let m="pkg"in process,p=m?["telemetry","flush",l]:process.execArgv.concat([process.argv[1],"telemetry","flush",l]);(0,Km.spawn)(process.execPath,p,{detached:!0,stdio:"ignore",env:{...process.env,RESEND_TELEMETRY_DISABLED:"1",...m?{PKG_EXECPATH:""}:{}}}).unref()}catch{}}async function Rm(e){let t=JSON.parse(e);if(!zg(t))throw new Error("invalid telemetry payload schema");let{_nonce:o,...i}=t,r=JSON.stringify(i),n=await fetch(Lg,{method:"POST",headers:{"Content-Type":"application/json"},body:r,signal:AbortSignal.timeout(3e3)});if(!n.ok)throw new Error(`telemetry flush failed: ${n.status}`)}async function Zg(e){let t=(0,Xe.join)(e),o=Xr(),i=(0,Xe.basename)(t);if((0,Xe.dirname)(t)!==o||!Xg.test(i)||(0,V.realpathSync)((0,Xe.dirname)(t))!==(0,V.realpathSync)(o))throw new Error("invalid telemetry flush path");let r=(0,V.openSync)(t,V.constants.O_RDONLY|V.constants.O_NOFOLLOW),n;try{let s=(0,V.fstatSync)(r);if(!s.isFile()||s.nlink!==1)throw new Error("invalid telemetry flush path");n=(0,V.readFileSync)(r,"utf-8")}finally{(0,V.closeSync)(r)}try{await Rm(n)}finally{(0,V.unlinkSync)(t)}}var Km,V,Xe,km,Lg,Wg,Sm,zg,Yg,Xg,en=be(()=>{"use strict";Km=require("node:child_process"),V=require("node:fs"),Xe=require("node:path");ye();X();Uo();Kt();km="phc_AgEBpcQTRsBl3UgQX2U8XvimTlgdXG6YEhfvJl2cUfc",Lg="https://us.i.posthog.com/capture/",Wg={darwin:"macOS",win32:"Windows",linux:"Linux"};Sm=new Set(["api_key","distinct_id","event","properties","_nonce"]),zg=e=>{if(typeof e!="object"||e===null||Array.isArray(e))return!1;let t=e,o=Object.keys(t);return o.length!==Sm.size||o.some(i=>!Sm.has(i))?!1:typeof t.api_key=="string"&&typeof t.distinct_id=="string"&&t.event==="cli.used"&&typeof t.properties=="object"&&t.properties!==null&&!Array.isArray(t.properties)&&typeof t._nonce=="string"&&t._nonce.length>0};Yg="[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}",Xg=new RegExp(`^resend-telemetry-${Yg}\\.json$`)});var An=me(gn(),1),{program:lA,createCommand:dA,createArgument:cA,createOption:uA,CommanderError:mA,InvalidArgumentError:pA,InvalidOptionArgumentError:fA,Command:d,Argument:bn,Option:q,Help:hA}=An.default;var oo=me(Je(),1);var np=`Global options:
|
|
153
153
|
--api-key <key> API key (or set RESEND_API_KEY env var)
|
|
154
154
|
-p, --profile <name> Profile to use (overrides RESEND_PROFILE)
|
|
155
155
|
--json Force JSON output (also auto-enabled when stdout is piped)
|
|
156
|
-
-q, --quiet Suppress spinners and status output (implies --json)`,
|
|
156
|
+
-q, --quiet Suppress spinners and status output (implies --json)`,sp=`Global options:
|
|
157
157
|
-p, --profile <name> Profile to use
|
|
158
158
|
--json Force JSON output
|
|
159
|
-
-q, --quiet Suppress spinners and status output (implies --json)`,
|
|
159
|
+
-q, --quiet Suppress spinners and status output (implies --json)`,ap=' {"error":{"message":"<message>","code":"<code>"}}';function c(e){let t=[];return e.context!=null&&t.push(e.context),t.push(e.setup?sp:np),e.output!=null&&t.push(`Output (--json or piped):
|
|
160
160
|
${e.output}`),e.errorCodes!=null&&t.push(`Errors (exit code 1, JSON on stderr when using --json or non-TTY):
|
|
161
|
-
${
|
|
161
|
+
${ap}
|
|
162
162
|
Codes: ${e.errorCodes.join(" | ")}`),t.push(`Examples:
|
|
163
163
|
${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&&
|
|
171
|
-
`)}var
|
|
167
|
+
`)}`}var Tt=require("node:util"),no=require("node:process");var In=me(require("node:readline"),1);var xn=(()=>{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}})(),wn=e=>e===12288||e>=65281&&e<=65376||e>=65504&&e<=65510,vn=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 lp=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]|\u001b\]8;[^;]*;.*?(?:\u0007|\u001b\u005c)/y,dp=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,Un=/(?:(?![\uFF61-\uFF9F\uFF00-\uFFEF])[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Tangut}]){1,1000}/yu,cp=/\t{1,1000}/y,Sn=/[\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,up=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,mp=/\p{M}+/gu,pp={limit:1/0,ellipsis:""},Kn=(e,t={},o={})=>{let i=t.limit??1/0,r=t.ellipsis??"",n=t?.ellipsisWidth??(r?Kn(r,pp,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=[[up,p],[lp,s],[dp,a],[cp,l],[Sn,u],[Un,f]],A=0,b=0,x=e.length,v=0,U=!1,K=x,k=Math.max(0,i-n),j=0,G=0,N=0,$=0;e:for(;;){if(G>j||b>=x&&b>A){let L=e.slice(j,G)||e.slice(A,b);v=0;for(let ve of L.replaceAll(mp,"")){let re=ve.codePointAt(0)||0;if(wn(re)?$=m:vn(re)?$=f:$=p,N+$>k&&(K=Math.min(K,Math.max(j,A)+v)),N+$>i){U=!0;break e}v+=ve.length,N+=$}j=G=0}if(b>=x)break e;for(let L=0,ve=y.length;L<ve;L++){let[re,Ut]=y[L];if(re.lastIndex=b,re.test(e)){if(v=re===Un?xn(e.slice(b,re.lastIndex)):re===Sn?1:re.lastIndex-b,$=v*Ut,N+$>k&&(K=Math.min(K,b+Math.floor((k-N)/Ut))),N+$>i){U=!0;break e}N+=$,j=A,G=b,b=A=re.lastIndex;continue e}}b+=1}return{width:U?k:N,index:U?K:x,truncated:U,ellipsed:U&&i>=n}},kn=Kn;var fp={limit:1/0,ellipsis:"",ellipsisWidth:0},hp=(e,t={})=>kn(e,fp,t).width,Ue=hp;var Do="\x1B",Tn="\x9B",gp=39,Yi="\x07",On="[",Ap="]",En="m",Xi=`${Ap}8;;`,_n=new RegExp(`(?:\\${On}(?<code>\\d+)m|\\${Xi}(?<uri>.*)${Yi})`,"y"),Fn=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},Rn=e=>`${Do}${On}${e}${En}`,Dn=e=>`${Do}${Xi}${e}${Yi}`,zi=(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===Tn)&&(r=!0,n=t.startsWith(Xi,m+1)),r?n?p===Yi&&(r=!1,n=!1):p===En&&(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())},bp=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("")},yp=(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(""),zi(a,f,t),l=Ue(a.at(-1)??"");continue}if(l+y>t&&l&&y){if(o.wordWrap===!1&&l<t){zi(a,f,t),l=Ue(a.at(-1)??"");continue}a.push(""),l=0}if(l+y>t&&o.wordWrap===!1){zi(a,f,t),l=Ue(a.at(-1)??"");continue}a[a.length-1]+=f,l+=y}o.trim!==!1&&(a=a.map(p=>bp(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===Tn){_n.lastIndex=p+1;let A=_n.exec(u)?.groups;if(A?.code!==void 0){let b=Number.parseFloat(A.code);r=b===gp?void 0:b}else A?.uri!==void 0&&(n=A.uri.length===0?void 0:A.uri)}if(u[p+1]===`
|
|
169
|
+
`){n&&(i+=Dn(""));let y=r?Fn(r):void 0;r&&y&&(i+=Rn(y))}else f===`
|
|
170
|
+
`&&(r&&Fn(r)&&(i+=Rn(r)),n&&(i+=Dn(n)))}return i},Cp=/\r?\n/;function dt(e,t,o){return String(e).normalize().split(Cp).map(i=>yp(i,t,o)).join(`
|
|
171
|
+
`)}var Ie=me(er(),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 vp=["up","down","left","right","space","enter","cancel"],Up=["January","February","March","April","May","June","July","August","September","October","November","December"],Ae={actions:new Set(vp),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:[...Up],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 jn(e,t){if(typeof e=="string")return Ae.aliases.get(e)===t;for(let o of e)if(o!==void 0&&jn(o,t))return!0;return!1}function Sp(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
|
|
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 _A=globalThis.process.platform.startsWith("win"),tr=Symbol("clack:cancel");function R(e){return e===tr}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,or=e=>"rows"in e&&typeof e.rows=="number"?e.rows:20;function ct(e,t,o,i=o,r=o,n){let s=jo(e??no.stdout);return dt(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(
|
|
176
|
-
`),To(this.input,!1),this.rl?.close(),this.rl=void 0,this.emit(`${this.state}`,this.value),this.unsubscribe()}restoreCursor(){let e=
|
|
177
|
-
`).length-1;this.output.write(
|
|
178
|
-
`);this.output.write(s[n]),this._prevFrame=e,this.output.write(
|
|
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(tr);this._abortSignal.addEventListener("abort",()=>{this.state="cancel",this.close()},{once:!0})}this.rl=In.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(Ie.cursor.show),this.output.off("resize",this.render),To(this.input,!1),e(this.value)}),this.once("cancel",()=>{this.output.write(Ie.cursor.show),this.output.off("resize",this.render),To(this.input,!1),e(tr)})})}_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&&Ae.aliases.has(t.name)&&this.emit("cursor",Ae.aliases.get(t.name)),Ae.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")}jn([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
|
+
`),To(this.input,!1),this.rl?.close(),this.rl=void 0,this.emit(`${this.state}`,this.value),this.unsubscribe()}restoreCursor(){let e=dt(this._prevFrame,process.stdout.columns,{hard:!0,trim:!1}).split(`
|
|
177
|
+
`).length-1;this.output.write(Ie.cursor.move(-999,e*-1))}render(){let e=dt(this._render(this)??"",process.stdout.columns,{hard:!0,trim:!1});if(e!==this._prevFrame){if(this.state==="initial")this.output.write(Ie.cursor.hide);else{let t=Sp(this._prevFrame,e),o=or(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(Ie.cursor.move(0,n-r)),this.output.write(Ie.erase.lines(1));let s=e.split(`
|
|
178
|
+
`);this.output.write(s[n]),this._prevFrame=e,this.output.write(Ie.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(Ie.cursor.move(0,a))}this.output.write(Ie.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(G),v+=G.length}if(v>m){let
|
|
180
|
+
`)),this._prevFrame=e;return}}this.output.write(Ie.erase.down())}this.output.write(e),this.state==="initial"&&(this.state="active"),this._prevFrame=e}}};function Kp(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 kp(e,t){return(t.label??String(t.value)).toLowerCase().includes(e.toLowerCase())}function _p(e,t){if(t)return e?t:t[0]}var Pn=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??kp;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=_p(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=Kp(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(Ie.cursor.move(0,-1)),this.value=o,this.state="submit",this.close()}),this.on("cursor",()=>{this.value=!this.value})}};var $n=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"),je=me(require("node:process"),1);var qn=me(er(),1);function Fp(){return je.default.platform!=="win32"?je.default.env.TERM!=="linux":!!je.default.env.CI||!!je.default.env.WT_SESSION||!!je.default.env.TERMINUS_SUBLIME||je.default.env.ConEmuTask==="{cmd::Cmder}"||je.default.env.TERM_PROGRAM==="Terminus-Sublime"||je.default.env.TERM_PROGRAM==="vscode"||je.default.env.TERM==="xterm-256color"||je.default.env.TERM==="alacritty"||je.default.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}var Rp=Fp();var oe=(e,t)=>Rp?e:t,Dp=oe("\u25C6","*"),Tp=oe("\u25A0","x"),Op=oe("\u25B2","x"),ir=oe("\u25C7","o"),Ep=oe("\u250C","T"),Q=oe("\u2502","|"),Ve=oe("\u2514","\u2014"),QA=oe("\u2510","T"),NA=oe("\u2518","\u2014"),$o=oe("\u25CF",">"),Et=oe("\u25CB"," "),Bp=oe("\u25FB","[\u2022]"),Gn=oe("\u25FC","[+]"),Hn=oe("\u25FB","[ ]"),Ip=oe("\u25AA","\u2022"),Qn=oe("\u2500","-"),jp=oe("\u256E","+"),Pp=oe("\u251C","+"),$p=oe("\u256F","+"),Gp=oe("\u2570","+"),MA=oe("\u256D","+"),Hp=oe("\u25CF","\u2022"),Qp=oe("\u25C6","*"),Np=oe("\u25B2","!"),Mp=oe("\u25A0","x"),St=e=>{switch(e){case"initial":case"active":return(0,C.styleText)("cyan",Dp);case"cancel":return(0,C.styleText)("red",Tp);case"error":return(0,C.styleText)("yellow",Op);case"submit":return(0,C.styleText)("green",ir)}},Ln=e=>{switch(e){case"initial":case"active":return(0,C.styleText)("cyan",Q);case"cancel":return(0,C.styleText)("red",Q);case"error":return(0,C.styleText)("yellow",Q);case"submit":return(0,C.styleText)("green",Q)}},Nn=(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=or(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=[],v=0;y&&v++,A&&v++;let U=f+(y?1:0),K=b-(A?1:0);for(let j=U;j<K;j++){let G=dt(o(t[j],j===e),a,{hard:!0,trim:!1}).split(`
|
|
181
|
+
`);x.push(G),v+=G.length}if(v>m){let j=0,G=0,N=v,$=e-U,L=m,ve=()=>Nn(x,N,0,$,L),re=()=>Nn(x,N,$+1,x.length,L,!0);y?({lineCount:N,removals:j}=ve(),N>L&&(A||(L-=1),{lineCount:N,removals:G}=re())):(A||(L-=1),{lineCount:N,removals:G}=re(),N>L&&(L-=1,{lineCount:N,removals:j}=ve())),j>0&&(y=!0,x.splice(0,j)),G>0&&(A=!0,x.splice(x.length-G,G))}let k=[];y&&k.push(u);for(let j of x)for(let G of j)k.push(G);return A&&k.push(u),k};function Mn(e){return e.label??String(e.value??"")}function qp(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 Lp(e,t){let o=[];for(let i of t)e.includes(i.value)&&o.push(i);return o}var Wn=e=>new Pn({options:e.options,initialValue:e.initialValue?[e.initialValue]:void 0,initialUserInput:e.initialUserInput,placeholder:e.placeholder,filter:e.filter??((t,o)=>qp(t,o)),signal:e.signal,input:e.input,output:e.output,validate:e.validate,render(){let t=e.withGuide??Ae.withGuide,o=t?[`${(0,C.styleText)("gray",Q)}`,`${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=Mn(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=Lp(this.selectedValues,r),u=l.length>0?` ${(0,C.styleText)("dim",l.map(Mn).join(", "))}`:"",m=t?(0,C.styleText)("gray",Q):"";return`${o.join(`
|
|
182
182
|
`)}
|
|
183
|
-
${m}${u}`}case"cancel":{let l=i?` ${(0,C.styleText)(["strikethrough","dim"],i)}`:"",u=t?(0,C.styleText)("gray",
|
|
183
|
+
${m}${u}`}case"cancel":{let l=i?` ${(0,C.styleText)(["strikethrough","dim"],i)}`:"",u=t?(0,C.styleText)("gray",Q):"";return`${o.join(`
|
|
184
184
|
`)}
|
|
185
|
-
${u}${l}`}default:{let l=this.state==="error"?"yellow":"cyan",u=t?`${(0,C.styleText)(l,
|
|
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??
|
|
185
|
+
${u}${l}`}default:{let l=this.state==="error"?"yellow":"cyan",u=t?`${(0,C.styleText)(l,Q)} `:"",m=t?(0,C.styleText)(l,Ve):"",p="";if(this.isNavigating||s){let U=s?n:i;p=U!==""?` ${(0,C.styleText)("dim",U)}`:""}else p=` ${this.userInputWithCursor}`;let f=this.filteredOptions.length!==r.length?(0,C.styleText)("dim",` (${this.filteredOptions.length} match${this.filteredOptions.length===1?"":"es"})`):"",y=this.filteredOptions.length===0&&i?[`${u}${(0,C.styleText)("yellow","No matches found")}`]:[],A=this.state==="error"?[`${u}${(0,C.styleText)("yellow",this.error)}`]:[];t&&o.push(`${u.trimEnd()}`),o.push(`${u}${(0,C.styleText)("dim","Search:")}${p}${f}`,...y,...A);let b=[`${(0,C.styleText)("dim","\u2191/\u2193")} to select`,`${(0,C.styleText)("dim","Enter:")} confirm`,`${(0,C.styleText)("dim","Type:")} to search`],x=[`${u}${b.join(" \u2022 ")}`,m],v=this.filteredOptions.length===0?[]:Go({cursor:this.cursor,options:this.filteredOptions,columnPadding:t?3:0,rowPadding:o.length+x.length,style:(U,K)=>a(U,U.disabled?"disabled":K?"active":"inactive"),maxItems:e.maxItems,output:e.output});return[...o,...v.map(U=>`${u}${U}`),...x].join(`
|
|
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??Ae.withGuide,r=`${St(this.state)} `,n=i?`${(0,C.styleText)("gray",Q)} `:"",s=ct(e.output,e.message,n,r),a=`${i?`${(0,C.styleText)("gray",Q)}
|
|
187
187
|
`:""}${s}
|
|
188
|
-
`,l=this.value?t:o;switch(this.state){case"submit":{let u=i?`${(0,C.styleText)("gray",
|
|
189
|
-
${(0,C.styleText)("gray",
|
|
190
|
-
${(0,C.styleText)("cyan",
|
|
188
|
+
`,l=this.value?t:o;switch(this.state){case"submit":{let u=i?`${(0,C.styleText)("gray",Q)} `:"";return`${a}${u}${(0,C.styleText)("dim",l)}`}case"cancel":{let u=i?`${(0,C.styleText)("gray",Q)} `:"";return`${a}${u}${(0,C.styleText)(["strikethrough","dim"],l)}${i?`
|
|
189
|
+
${(0,C.styleText)("gray",Q)}`:""}`}default:{let u=i?`${(0,C.styleText)("cyan",Q)} `:"",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
|
+
${(0,C.styleText)("cyan",Q)} `:`
|
|
191
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
|
|
193
|
+
`}}}}).prompt()};var Jn=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"&&R(s)){o[r]="canceled",t.onCancel({results:o});continue}o[r]=s}return o};var te={message:(e=[],{symbol:t=(0,C.styleText)("gray",Q),secondarySymbol:o=(0,C.styleText)("gray",Q),output:i=process.stdout,spacing:r=1,withGuide:n}={})=>{let s=[],a=n??Ae.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",
|
|
196
|
+
`)},info:(e,t)=>{te.message(e,{...t,symbol:(0,C.styleText)("blue",Hp)})},success:(e,t)=>{te.message(e,{...t,symbol:(0,C.styleText)("green",Qp)})},step:(e,t)=>{te.message(e,{...t,symbol:(0,C.styleText)("green",ir)})},warn:(e,t)=>{te.message(e,{...t,symbol:(0,C.styleText)("yellow",Np)})},warning:(e,t)=>{te.warn(e,t)},error:(e,t)=>{te.message(e,{...t,symbol:(0,C.styleText)("red",Mp)})}},Vn=(e="",t)=>{let o=t?.output??process.stdout,i=t?.withGuide??Ae.withGuide?`${(0,C.styleText)("gray",Ve)} `:"";o.write(`${i}${(0,C.styleText)("red",e)}
|
|
197
197
|
|
|
198
|
-
`)},Ho=(e="",t)=>{let o=t?.output??process.stdout,i=t?.withGuide??
|
|
199
|
-
`)},Bt=(e="",t)=>{let o=t?.output??process.stdout,i=t?.withGuide??
|
|
198
|
+
`)},Ho=(e="",t)=>{let o=t?.output??process.stdout,i=t?.withGuide??Ae.withGuide?`${(0,C.styleText)("gray",Ep)} `:"";o.write(`${i}${e}
|
|
199
|
+
`)},Bt=(e="",t)=>{let o=t?.output??process.stdout,i=t?.withGuide??Ae.withGuide?`${(0,C.styleText)("gray",Q)}
|
|
200
200
|
${(0,C.styleText)("gray",Ve)} `:"";o.write(`${i}${e}
|
|
201
201
|
|
|
202
202
|
`)};var so=(e,t)=>e.split(`
|
|
203
203
|
`).map(o=>t(o)).join(`
|
|
204
|
-
`),
|
|
205
|
-
${(0,C.styleText)("reset",(0,C.styleText)("dim",`Press ${(0,C.styleText)(["gray","bgWhite","inverse"]," space ")} to select, ${(0,C.styleText)("gray",(0,C.styleText)("bgWhite",(0,C.styleText)("inverse"," enter ")))} to submit`))}`},render(){let i=e.withGuide??
|
|
204
|
+
`),zn=e=>{let t=(i,r)=>{let n=i.label??String(i.value);return r==="disabled"?`${(0,C.styleText)("gray",Hn)} ${so(n,s=>(0,C.styleText)(["strikethrough","gray"],s))}${i.hint?` ${(0,C.styleText)("dim",`(${i.hint??"disabled"})`)}`:""}`:r==="active"?`${(0,C.styleText)("cyan",Bp)} ${n}${i.hint?` ${(0,C.styleText)("dim",`(${i.hint})`)}`:""}`:r==="selected"?`${(0,C.styleText)("green",Gn)} ${so(n,s=>(0,C.styleText)("dim",s))}${i.hint?` ${(0,C.styleText)("dim",`(${i.hint})`)}`:""}`:r==="cancelled"?`${so(n,s=>(0,C.styleText)(["strikethrough","dim"],s))}`:r==="active-selected"?`${(0,C.styleText)("green",Gn)} ${n}${i.hint?` ${(0,C.styleText)("dim",`(${i.hint})`)}`:""}`:r==="submitted"?`${so(n,s=>(0,C.styleText)("dim",s))}`:`${(0,C.styleText)("dim",Hn)} ${so(n,s=>(0,C.styleText)("dim",s))}`},o=e.required??!0;return new $n({options:e.options,signal:e.signal,input:e.input,output:e.output,initialValues:e.initialValues,required:o,cursorAt:e.cursorAt,validate(i){if(o&&(i===void 0||i.length===0))return`Please select at least one option.
|
|
205
|
+
${(0,C.styleText)("reset",(0,C.styleText)("dim",`Press ${(0,C.styleText)(["gray","bgWhite","inverse"]," space ")} to select, ${(0,C.styleText)("gray",(0,C.styleText)("bgWhite",(0,C.styleText)("inverse"," enter ")))} to submit`))}`},render(){let i=e.withGuide??Ae.withGuide,r=ct(e.output,e.message,i?`${Ln(this.state)} `:"",`${St(this.state)} `),n=`${i?`${(0,C.styleText)("gray",Q)}
|
|
206
206
|
`:""}${r}
|
|
207
|
-
`,s=this.value??[],a=(l,u)=>{if(l.disabled)return t(l,"disabled");let m=s.includes(l.value);return u&&m?t(l,"active-selected"):m?t(l,"selected"):t(l,u?"active":"inactive")};switch(this.state){case"submit":{let l=this.options.filter(({value:m})=>s.includes(m)).map(m=>t(m,"submitted")).join((0,C.styleText)("dim",", "))||(0,C.styleText)("dim","none"),u=
|
|
208
|
-
${(0,C.styleText)("gray",
|
|
207
|
+
`,s=this.value??[],a=(l,u)=>{if(l.disabled)return t(l,"disabled");let m=s.includes(l.value);return u&&m?t(l,"active-selected"):m?t(l,"selected"):t(l,u?"active":"inactive")};switch(this.state){case"submit":{let l=this.options.filter(({value:m})=>s.includes(m)).map(m=>t(m,"submitted")).join((0,C.styleText)("dim",", "))||(0,C.styleText)("dim","none"),u=ct(e.output,l,i?`${(0,C.styleText)("gray",Q)} `:"");return`${n}${u}`}case"cancel":{let l=this.options.filter(({value:m})=>s.includes(m)).map(m=>t(m,"cancelled")).join((0,C.styleText)("dim",", "));if(l.trim()==="")return`${n}${(0,C.styleText)("gray",Q)}`;let u=ct(e.output,l,i?`${(0,C.styleText)("gray",Q)} `:"");return`${n}${u}${i?`
|
|
208
|
+
${(0,C.styleText)("gray",Q)}`:""}`}case"error":{let l=i?`${(0,C.styleText)("yellow",Q)} `:"",u=this.error.split(`
|
|
209
209
|
`).map((f,y)=>y===0?`${i?`${(0,C.styleText)("yellow",Ve)} `:""}${(0,C.styleText)("yellow",f)}`:` ${f}`).join(`
|
|
210
210
|
`),m=n.split(`
|
|
211
211
|
`).length,p=u.split(`
|
|
212
212
|
`).length+1;return`${n}${l}${Go({output:e.output,options:this.options,cursor:this.cursor,maxItems:e.maxItems,columnPadding:l.length,rowPadding:m+p,style:a}).join(`
|
|
213
213
|
${l}`)}
|
|
214
214
|
${u}
|
|
215
|
-
`}default:{let l=i?`${(0,C.styleText)("cyan",
|
|
215
|
+
`}default:{let l=i?`${(0,C.styleText)("cyan",Q)} `:"",u=n.split(`
|
|
216
216
|
`).length,m=i?2:1;return`${n}${l}${Go({output:e.output,options:this.options,cursor:this.cursor,maxItems:e.maxItems,columnPadding:l.length,rowPadding:u+m,style:a}).join(`
|
|
217
217
|
${l}`)}
|
|
218
218
|
${i?(0,C.styleText)("cyan",Ve):""}
|
|
219
|
-
`}}}}).prompt()}
|
|
220
|
-
`),n=r.reduce((l,u)=>Math.max(
|
|
221
|
-
`).map(n),""],a=
|
|
222
|
-
`),m=r?`${(0,C.styleText)("gray",
|
|
223
|
-
`:"",p=r?
|
|
219
|
+
`}}}}).prompt()},Wp=e=>(0,C.styleText)("dim",e),Jp=(e,t,o)=>{let i={hard:!0,trim:!1},r=dt(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 dt(e,a,i)},Yn=(e="",t="",o)=>{let i=o?.output??je.default.stdout,r=o?.withGuide??Ae.withGuide,n=o?.format??Wp,s=["",...Jp(e,jo(i)-6,n).split(`
|
|
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",Q)} ${f}${" ".repeat(l-Ue(f))}${(0,C.styleText)("gray",Q)}`).join(`
|
|
222
|
+
`),m=r?`${(0,C.styleText)("gray",Q)}
|
|
223
|
+
`:"",p=r?Pp:Gp;i.write(`${m}${(0,C.styleText)("green",ir)} ${(0,C.styleText)("reset",t)} ${(0,C.styleText)("gray",Qn.repeat(Math.max(l-a-1,1))+jp)}
|
|
224
224
|
${u}
|
|
225
|
-
${(0,C.styleText)("gray",p+
|
|
226
|
-
`)},
|
|
225
|
+
${(0,C.styleText)("gray",p+Qn.repeat(l+2)+$p)}
|
|
226
|
+
`)},Xn=e=>new Eo({validate:e.validate,mask:e.mask??Ip,signal:e.signal,input:e.input,output:e.output,render(){let t=e.withGuide??Ae.withGuide,o=`${t?`${(0,C.styleText)("gray",Q)}
|
|
227
227
|
`:""}${St(this.state)} ${e.message}
|
|
228
|
-
`,i=this.userInputWithCursor,r=this.masked;switch(this.state){case"error":{let n=t?`${(0,C.styleText)("yellow",
|
|
228
|
+
`,i=this.userInputWithCursor,r=this.masked;switch(this.state){case"error":{let n=t?`${(0,C.styleText)("yellow",Q)} `:"",s=t?`${(0,C.styleText)("yellow",Ve)} `:"",a=r??"";return e.clearOnError&&this.clear(),`${o.trim()}
|
|
229
229
|
${n}${a}
|
|
230
230
|
${s}${(0,C.styleText)("yellow",this.error)}
|
|
231
|
-
`}case"submit":{let n=t?`${(0,C.styleText)("gray",
|
|
232
|
-
${(0,C.styleText)("gray",
|
|
231
|
+
`}case"submit":{let n=t?`${(0,C.styleText)("gray",Q)} `:"",s=r?(0,C.styleText)("dim",r):"";return`${o}${n}${s}`}case"cancel":{let n=t?`${(0,C.styleText)("gray",Q)} `:"",s=r?(0,C.styleText)(["strikethrough","dim"],r):"";return`${o}${n}${s}${r&&t?`
|
|
232
|
+
${(0,C.styleText)("gray",Q)}`:""}`}default:{let n=t?`${(0,C.styleText)("cyan",Q)} `:"",s=t?(0,C.styleText)("cyan",Ve):"";return`${o}${n}${i}
|
|
233
233
|
${s}
|
|
234
|
-
`}}}}).prompt();var
|
|
234
|
+
`}}}}).prompt();var qA={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",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??
|
|
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??Ae.withGuide,i=`${St(this.state)} `,r=`${Ln(this.state)} `,n=ct(e.output,e.message,r,i),s=`${o?`${(0,C.styleText)("gray",Q)}
|
|
238
238
|
`:""}${n}
|
|
239
|
-
`;switch(this.state){case"submit":{let a=o?`${(0,C.styleText)("gray",
|
|
240
|
-
${(0,C.styleText)("gray",
|
|
239
|
+
`;switch(this.state){case"submit":{let a=o?`${(0,C.styleText)("gray",Q)} `:"",l=ct(e.output,t(this.options[this.cursor],"selected"),a);return`${s}${l}`}case"cancel":{let a=o?`${(0,C.styleText)("gray",Q)} `:"",l=ct(e.output,t(this.options[this.cursor],"cancelled"),a);return`${s}${l}${o?`
|
|
240
|
+
${(0,C.styleText)("gray",Q)}`:""}`}default:{let a=o?`${(0,C.styleText)("cyan",Q)} `:"",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
|
|
244
|
+
`}}}}).prompt()};var LA=`${(0,C.styleText)("gray",Q)} `;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??Ae.withGuide,o=`${`${t?`${(0,C.styleText)("gray",Q)}
|
|
245
245
|
`:""}${St(this.state)} `}${e.message}
|
|
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",
|
|
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",Q)} `:"",l=t?(0,C.styleText)("yellow",Ve):"";return`${o.trim()}
|
|
247
247
|
${a}${r}
|
|
248
248
|
${l}${s}
|
|
249
|
-
`}case"submit":{let s=n?` ${(0,C.styleText)("dim",n)}`:"",a=t?(0,C.styleText)("gray",
|
|
250
|
-
${a}`:""}`}default:{let s=t?`${(0,C.styleText)("cyan",
|
|
249
|
+
`}case"submit":{let s=n?` ${(0,C.styleText)("dim",n)}`:"",a=t?(0,C.styleText)("gray",Q):"";return`${o}${a}${s}`}case"cancel":{let s=n?` ${(0,C.styleText)(["strikethrough","dim"],n)}`:"",a=t?(0,C.styleText)("gray",Q):"";return`${o}${a}${s}${n.trim()?`
|
|
250
|
+
${a}`:""}`}default:{let s=t?`${(0,C.styleText)("cyan",Q)} `:"",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,
|
|
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
|
|
254
|
-
`;if(o=this.remainder+o,o.length<this.maxChunkSize){this.remainder=o;return}this.remainder="";let i=o.match(
|
|
252
|
+
`}}}}).prompt();var yo=me(Je(),1);Kt();process.env.RESEND_USER_AGENT=`resend-cli:${se}`;var ut=new TextEncoder,ts="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",ao=new Uint8Array(256);for(let e=0;e<ts.length;e++)ao[ts.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 zp=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=zp.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 os(e){return e>=48&&e<=57||e>=97&&e<=102||e>=65&&e<=70?String.fromCharCode(e):!1}function Yp(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=os(n[l+1]),f=os(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)=>Yp(n,s,a));if(t&&i.indexOf("\uFFFD")>=0)t=!1;else return i}}function Xp(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 is(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]=Xp(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
|
+
`)}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 rs=/^=[a-f0-9]{2}$/i,Zp=/(?==[a-f0-9]{2})/i,ef=/=\r?\n/g,tf=/=[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(ef,"");let o=t.split(Zp),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){rs.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);rs.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(tf);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 of=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()),is(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
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
|
-
`+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(
|
|
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,`
|
|
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(of.decode(t));break;case"body":this.contentDecoder.update(t)}}};var rf={"Æ":"\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"},nr=rf;function nf(e){return e.replace(/&(#\d+|#x[a-f0-9]+|[a-z]+\d*);?/gi,(t,o)=>{if(typeof nr[t]=="string")return nr[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 ns(e){return"<div>"+_t(e).replace(/\n/g,"<br />")+"</div>"}function ss(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=
|
|
269
|
-
`)}return n}function
|
|
268
|
+
`),e=nf(e),e}function as(e){return[].concat(e.name||[]).concat(e.name?`<${e.address}>`:e.address).join(" ")}function sr(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(as(i))};return e.forEach(o),t.join("")}function ls(e){return`<a href="mailto:${_t(e.address)}" class="postal-email-address">${_t(e.name||`<${e.address}>`)}</a>`}function ar(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(ls(i))};return e.forEach(o),t.join(" ")}function sf(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
|
+
`)}return n}function lr(e){let t=[];if(e.from&&t.push({key:"From",val:as(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:sr(e.to)}),e.cc&&e.cc.length&&t.push({key:"Cc",val:sr(e.cc)}),e.bcc&&e.bcc.length&&t.push({key:"Bcc",val:sr(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 sf(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
|
|
275
|
-
<div class="postal-email-header-row">`)}${t.length?"</div>":""}</div>`}function
|
|
274
|
+
`}function dr(e){let t=[];if(e.from&&t.push(`<div class="postal-email-header-key">From</div><div class="postal-email-header-value">${ls(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">${ar(e.to)}</div>`),e.cc&&e.cc.length&&t.push(`<div class="postal-email-header-key">Cc</div><div class="postal-email-header-value">${ar(e.cc)}</div>`),e.bcc&&e.bcc.length&&t.push(`<div class="postal-email-header-key">Bcc</div><div class="postal-email-header-value">${ar(e.bcc)}</div>`),`<div class="postal-email-header">${t.length?'<div class="postal-email-header-row">':""}${t.join(`</div>
|
|
275
|
+
<div class="postal-email-header-row">`)}${t.length?"</div>":""}</div>`}function af(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&&ur(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=ur(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
|
-
`&&(t=" "),(t.charCodeAt(0)>=33||[" "," "].includes(t))&&(this.node.value+=t),this.escaped=!1}},
|
|
277
|
+
`&&(t=" "),(t.charCodeAt(0)>=33||[" "," "].includes(t))&&(this.node.value+=t),this.escaped=!1}},lf=50;function ur(e,t){t=t||{};let o=t._depth||0;if(o>lf)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=af(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=ur;function ds(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 df=256,cf=2*1024*1024,uf=10;function mr(e){return e.replace(/-(.)/g,(t,o)=>o.toUpperCase())}function pr(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:pr(this.options.maxNestingDepth,df,"maxNestingDepth"),maxHeadersSize:pr(this.options.maxHeadersSize,cf,"maxHeadersSize")},this.maxRfc822NestingDepth=pr(this.options.maxRfc822NestingDepth,uf,"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
|
-
`);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(
|
|
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.1";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"}}}},vf=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))}},Uf=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 vf(this.resend),this.topics=new Sf(this.resend),this.segments=new Uf(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.limit!==void 0&&o.set("limit",String(t.limit)),t.after!==void 0&&o.set("after",t.after),t.before!==void 0&&o.set("before",t.before);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,limit:o,after:i,before:r}=e,n=Ds(`/inboxes/${t}/drafts`,{limit:o,after:i,before:r});return this.resend.get(n)}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})}},vs="https://api.resend.com",Us=`resend-node:${mf}`;function eh(){return typeof process<"u"&&process.env&&process.env.RESEND_BASE_URL||vs}function th(){return typeof process<"u"&&process.env&&process.env.RESEND_USER_AGENT||Us}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
|
|
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 ${
|
|
283
|
-
`)},fail(a){clearInterval(s),process.stderr.write(`\r\x1B[2K ${
|
|
284
|
-
`)}}}X();function
|
|
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(dr(l.value));break;case"plain":t[a].push(lr(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(ns(u.value));break;case"plain":t[a].push(ss(u.value));break}break;case"subMessage":switch(a){case"html":t[a].push(dr(u.value));break;case"plain":t[a].push(lr(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=mr(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=mr(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=mr(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=ds(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 ks=me(ys(),1),Lo=["draft_reply","forward_thread","add_labels","assign_thread","mark_as_spam","archive_thread","delete_thread"],_s=["inbox","archive","spam","sent","trash"],Fs=["inbox","archive","spam","trash"],Wo=["cyan","teal","grass","lime","yellow","orange","iris","plum","crimson","bronze","mauve"],Cf="6.32.1-preview-inboxes.2";function ae(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 xf=class{constructor(e){this.resend=e}async create(e,t={}){return await this.resend.post("/api-keys",e,t)}async list(e={},t={}){let o=ae("/api-keys",e);return await this.resend.get(o,t)}async update(e,t,o={}){return await this.resend.patch(`/api-keys/${e}`,t,o)}async remove(e,t={}){return await this.resend.delete(`/api-keys/${e}`,void 0,t)}},wf=class{constructor(e){this.resend=e}async get(e,t={}){return await this.resend.get(`/automations/${e.automationId}/runs/${e.runId}`,t)}async list(e,t={}){let o=$t(e),i=new URLSearchParams(o);if(e.status){let s=Array.isArray(e.status)?e.status.join(","):e.status;i.set("status",s)}let r=i.toString(),n=r?`/automations/${e.automationId}/runs?${r}`:`/automations/${e.automationId}/runs`;return await this.resend.get(n,t)}};function Rs(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 Ds(e){return{from:e.from,to:e.to,type:e.type}}function vf(e){return{name:e.name,status:e.status,steps:e.steps.map(Rs),connections:e.connections.map(Ds)}}function Uf(e){return{event:e.event,contact_id:e.contactId,email:e.email,payload:e.payload}}var Sf=class{constructor(e){this.resend=e,this.runs=new wf(this.resend)}async create(e,t={}){return await this.resend.post("/automations",vf(e),t)}async list(e={},t={}){let o=[$t(e)];e.status&&o.push(`status=${encodeURIComponent(e.status)}`);let i=o.filter(Boolean).join("&"),r=i?`/automations?${i}`:"/automations";return await this.resend.get(r,t)}async get(e,t={}){return await this.resend.get(`/automations/${e}`,t)}async remove(e,t={}){return await this.resend.delete(`/automations/${e}`,void 0,t)}async update(e,t,o={}){let i={};return t.name!==void 0&&(i.name=t.name),t.status!==void 0&&(i.status=t.status),t.steps!==void 0&&(i.steps=t.steps.map(Rs)),t.connections!==void 0&&(i.connections=t.connections.map(Ds)),await this.resend.patch(`/automations/${e}`,i,o)}async duplicate(e,t={}){return await this.resend.post(`/automations/${e}/duplicate`,void 0,t)}async stop(e,t={}){return await this.resend.post(`/automations/${e}/stop`,void 0,t)}};function Kf(e){return e?.map(t=>({content:t.content,filename:t.filename,path:t.path,content_type:t.contentType,content_id:t.contentId}))}function Ts(e){return{attachments:Kf(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 kf=class{constructor(e){this.resend=e}async send(e,t){return this.create(e,t)}async create(e,t){let o=[];for(let r of e)r.react&&(r.html=await fo(r.react),r.react=void 0),o.push(Ts(r));let i=new Headers({"x-batch-validation":t?.batchValidation??"strict"});for(let[r,n]of new Headers(t?.headers||void 0))i.set(r,n);return await this.resend.post("/emails/batch",o,{...t,headers:i})}},_f=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,o={}){return await this.resend.post(`/broadcasts/${e}/send`,{scheduled_at:t?.scheduledAt},o)}async list(e={},t={}){let o=ae("/broadcasts",e);return await this.resend.get(o,t)}async get(e,t={}){return await this.resend.get(`/broadcasts/${e}`,t)}async recipients(e,t,o={}){let i=`/broadcasts/${e}/recipients?${Ff(t)}`;return await this.resend.get(i,o)}async clickedLinks(e,t={},o={}){let i=ae(`/broadcasts/${e}/clicked-links`,t);return await this.resend.get(i,o)}async remove(e,t={}){return await this.resend.delete(`/broadcasts/${e}`,void 0,t)}async cancel(e,t={}){return await this.resend.post(`/broadcasts/${e}/cancel`,void 0,t)}async duplicate(e,t={}){return await this.resend.post(`/broadcasts/${e}/duplicate`,void 0,t)}async update(e,t,o={}){let i=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:i,text:t.text,subject:t.subject,reply_to:t.replyTo,preview_text:t.previewText,topic_id:t.topicId},o)}};function Ff(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 Cs(e){return{id:e.id,key:e.key,createdAt:e.created_at,type:e.type,fallbackValue:e.fallback_value}}function xs(e){return"key"in e?{key:e.key,type:e.type,fallback_value:e.fallbackValue}:{fallback_value:e.fallbackValue}}var Rf=class{constructor(e){this.resend=e}async create(e,t={}){let o=xs(e);return await this.resend.post("/contact-properties",o,t)}async list(e={},t={}){let o=ae("/contact-properties",e),i=await this.resend.get(o,t);return i.data?{data:{...i.data,data:i.data.data.map(r=>Cs(r))},headers:i.headers,error:null}:i}async get(e,t={}){if(!e)return{data:null,headers:null,error:{message:"Missing `id` field.",statusCode:null,name:"missing_required_field"}};let o=await this.resend.get(`/contact-properties/${e}`,t);return o.data?{data:{object:"contact_property",...Cs(o.data)},headers:o.headers,error:null}:o}async update(e,t={}){if(!e.id)return{data:null,headers:null,error:{message:"Missing `id` field.",statusCode:null,name:"missing_required_field"}};let o=xs(e);return await this.resend.patch(`/contact-properties/${e.id}`,o,t)}async remove(e,t={}){return e?await this.resend.delete(`/contact-properties/${e}`,void 0,t):{data:null,headers:null,error:{message:"Missing `id` field.",statusCode:null,name:"missing_required_field"}}}},Df=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={},t={}){let o=new URLSearchParams($t(e));e.status!==void 0&&o.set("status",e.status);let i=o.toString(),r=i?`/contacts/imports?${i}`:"/contacts/imports";return this.resend.get(r,t)}async get(e,t={}){return this.resend.get(`/contacts/imports/${e}`,t)}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))}},Tf=class{constructor(e){this.resend=e}async list(e,t={}){if(!e.contactId&&!e.email)return{data:null,headers:null,error:{message:"Missing `id` or `email` field.",statusCode:null,name:"missing_required_field"}};let o=ae(`/contacts/${e.email?e.email:e.contactId}/segments`,e);return await this.resend.get(o,t)}async add(e,t={}){if(!e.contactId&&!e.email)return{data:null,headers:null,error:{message:"Missing `id` or `email` field.",statusCode:null,name:"missing_required_field"}};let o=e.email?e.email:e.contactId;return this.resend.post(`/contacts/${o}/segments/${e.segmentId}`,void 0,t)}async remove(e,t={}){if(!e.contactId&&!e.email)return{data:null,headers:null,error:{message:"Missing `id` or `email` field.",statusCode:null,name:"missing_required_field"}};let o=e.email?e.email:e.contactId;return this.resend.delete(`/contacts/${o}/segments/${e.segmentId}`,void 0,t)}},Of=class{constructor(e){this.resend=e}async update(e,t={}){if(!e.id&&!e.email)return{data:null,headers:null,error:{message:"Missing `id` or `email` field.",statusCode:null,name:"missing_required_field"}};let o=e.email?e.email:e.id;return this.resend.patch(`/contacts/${o}/topics`,e.topics,t)}async list(e,t={}){if(!e.id&&!e.email)return{data:null,headers:null,error:{message:"Missing `id` or `email` field.",statusCode:null,name:"missing_required_field"}};let o=ae(`/contacts/${e.email?e.email:e.id}/topics`,e);return this.resend.get(o,t)}},Ef=class{constructor(e){this.resend=e,this.imports=new Df(this.resend),this.topics=new Of(this.resend),this.segments=new Tf(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={},t={}){let o=e.segmentId??e.audienceId;if(!o){let r=ae("/contacts",e);return await this.resend.get(r,t)}let i=ae(`/segments/${o}/contacts`,e);return await this.resend.get(i,t)}async get(e,t={}){return typeof e=="string"?this.resend.get(`/contacts/${e}`,t):!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}`,t):this.resend.get(`/contacts/${e?.email?e?.email:e?.id}`,t)}async update(e,t={}){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},t):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},t)}async remove(e,t={}){return typeof e=="string"?this.resend.delete(`/contacts/${e}`,void 0,t):!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}`,void 0,t):this.resend.delete(`/contacts/${e?.email?e?.email:e?.id}`,void 0,t)}};function Bf(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 If=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,t={}){return await this.resend.get(`/domains/${e}/claim`,t)}async verify(e,t={}){return await this.resend.post(`/domains/${e}/claim/verify`,void 0,t)}},jf=class{constructor(e){this.resend=e,this.claims=new If(this.resend)}async create(e,t={}){return await this.resend.post("/domains",Bf(e),t)}async list(e={},t={}){let o=ae("/domains",e);return await this.resend.get(o,t)}async get(e,t={}){return await this.resend.get(`/domains/${e}`,t)}async update(e,t={}){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},t)}async remove(e,t={}){return await this.resend.delete(`/domains/${e}`,void 0,t)}async verify(e,t={}){return await this.resend.post(`/domains/${e}/verify`,void 0,t)}},Pf=class{constructor(e){this.resend=e}async get(e,t={}){let{emailId:o,id:i}=e;return await this.resend.get(`/emails/${o}/attachments/${i}`,t)}async list(e,t={}){let{emailId:o}=e,i=ae(`/emails/${o}/attachments`,e);return await this.resend.get(i,t)}},$f=class{constructor(e){this.resend=e}async get(e,t={}){let{emailId:o,id:i}=e;return await this.resend.get(`/emails/receiving/${o}/attachments/${i}`,t)}async list(e,t={}){let{emailId:o}=e,i=ae(`/emails/receiving/${o}/attachments`,e);return await this.resend.get(i,t)}},Gf=class{constructor(e){this.resend=e,this.attachments=new $f(e)}async get(e,t={},o={}){let i=new URLSearchParams;t.html_format!==void 0&&i.set("html_format",t.html_format);let r=i.toString(),n=r?`/emails/receiving/${e}?${r}`:`/emails/receiving/${e}`;return await this.resend.get(n,o)}async list(e={},t={}){let o=ae("/emails/receiving",e);return await this.resend.get(o,t)}async forward(e,t={}){let{emailId:o,to:i,from:r}=e,n=e.passthrough!==!1,s=await this.get(o,{},{signal:t.signal});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 this.downloadRaw(e.raw.download_url,o.signal);if(s.error)return{data:null,error:s.error,headers:null};let a=await mo.parse(s.content,{attachmentEncoding:"base64"}),l=a.attachments.map(u=>{let m=u.contentId?u.contentId.replace(/^<|>$/g,""):void 0;return{filename:u.filename,content:u.content.toString(),content_type:u.mimeType,content_id:m||void 0}});return await this.resend.post("/emails",{from:r,to:i,subject:n,text:a.text||void 0,html:a.html||void 0,attachments:l.length>0?l: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 this.downloadRaw(e.raw.download_url,o.signal);return l.error?{data:null,error:l.error,headers:null}:await this.resend.post("/emails",{from:r,to:i,subject:n,text:s,html:a,attachments:[{filename:"forwarded_message.eml",content:Buffer.from(l.content).toString("base64"),content_type:"message/rfc822"}]},o)}async downloadRaw(e,t){try{let o=await fetch(e,{signal:t});return o.ok?{content:await o.text(),error:null}:{content:null,error:{name:"application_error",message:"Failed to download raw email content",statusCode:o.status}}}catch{return{content:null,error:{name:"application_error",message:"Failed to download raw email content",statusCode:null}}}}},Hf=class{constructor(e){this.resend=e,this.attachments=new Pf(e),this.receiving=new Gf(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",Ts(o),t)}async get(e,t={}){return await this.resend.get(`/emails/${e}`,t)}async list(e={},t={}){let o=ae("/emails",e);return await this.resend.get(o,t)}async update(e,t={}){return await this.resend.patch(`/emails/${e.id}`,{scheduled_at:e.scheduledAt},t)}async cancel(e,t={}){return await this.resend.post(`/emails/${e}/cancel`,void 0,t)}async share(e,t,o={}){return await this.resend.post(`/emails/${e}/share`,{expires_in:t?.expiresIn},o)}async metrics(e={},t={}){let o=Qf(e),i=o?`/emails/metrics?${o}`:"/emails/metrics";return await this.resend.get(i,t)}};function Qf(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 Nf=class{constructor(e){this.resend=e}async send(e,t={}){return await this.resend.post("/events/send",Uf(e),t)}async create(e,t={}){return await this.resend.post("/events",e,t)}async get(e,t={}){return await this.resend.get(`/events/${encodeURIComponent(e)}`,t)}async list(e={},t={}){let o=ae("/events",e);return await this.resend.get(o,t)}async update(e,t,o={}){return await this.resend.patch(`/events/${encodeURIComponent(e)}`,t,o)}async remove(e,t={}){return await this.resend.delete(`/events/${encodeURIComponent(e)}`,void 0,t)}},Mf=class{constructor(e){this.resend=e}async get(e,t={}){return this.resend.get(`/inboxes/${e.inboxId}/agent`,t)}async update(e,t={}){let{inboxId:o,instructions:i,tone:r,enabledActions:n}=e;return this.resend.patch(`/inboxes/${o}/agent`,{instructions:i,tone:r,enabled_actions:n},t)}};function Os(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.limit!==void 0&&o.set("limit",String(t.limit)),t.after!==void 0&&o.set("after",t.after),t.before!==void 0&&o.set("before",t.before);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 qf=class{constructor(e){this.resend=e}async list(e,t={}){let{inboxId:o,limit:i,after:r,before:n}=e,s=Os(`/inboxes/${o}/drafts`,{limit:i,after:r,before:n});return this.resend.get(s,t)}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,t={}){let{inboxId:o,draftId:i}=e;return this.resend.get(`/inboxes/${o}/drafts/${i}`,t)}async update(e,t={}){let{inboxId:o,draftId:i,...r}=e;return this.resend.patch(`/inboxes/${o}/drafts/${i}`,r,t)}async remove(e,t={}){let{inboxId:o,draftId:i}=e;return this.resend.delete(`/inboxes/${o}/drafts/${i}`,void 0,t)}async send(e,t={}){let{inboxId:o,draftId:i}=e;return this.resend.post(`/inboxes/${o}/drafts/${i}/send`,void 0,t)}},Lf=class{constructor(e){this.resend=e}async list(e,t={}){return this.resend.get(`/inboxes/${e.inboxId}/labels`,t)}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,t={}){let{inboxId:o,labelId:i,name:r,color:n}=e;return this.resend.patch(`/inboxes/${o}/labels/${i}`,{name:r,color:n},t)}async remove(e,t={}){let{inboxId:o,labelId:i}=e;return this.resend.delete(`/inboxes/${o}/labels/${i}`,void 0,t)}},Wf=class{constructor(e){this.resend=e}async list(e,t={}){let{inboxId:o,threadId:i,...r}=e,n=ae(`/inboxes/${o}/threads/${i}/emails`,r);return this.resend.get(n,t)}async get(e,t={}){let{inboxId:o,threadId:i,emailId:r}=e;return this.resend.get(`/inboxes/${o}/threads/${i}/emails/${r}`,t)}async reply(e,t={}){let{inboxId:o,threadId:i,emailId:r,cc:n,bcc:s,html:a,text:l,subject:u}=e;return this.resend.post(`/inboxes/${o}/threads/${i}/emails/${r}/reply`,{cc:n,bcc:s,html:a,text:l,subject:u},t)}async forward(e,t={}){let{inboxId:o,threadId:i,emailId:r,to:n,cc:s,bcc:a,html:l,text:u,subject:m}=e;return this.resend.post(`/inboxes/${o}/threads/${i}/emails/${r}/forward`,{to:n,cc:s,bcc:a,html:l,text:u,subject:m},t)}},Jf=class{constructor(e){this.resend=e,this.emails=new Wf(e)}async list(e,t={}){let{inboxId:o,...i}=e,r=Os(`/inboxes/${o}/threads`,i);return this.resend.get(r,t)}async get(e,t={}){let{inboxId:o,threadId:i}=e;return this.resend.get(`/inboxes/${o}/threads/${i}`,t)}async update(e,t={}){let{inboxId:o,threadId:i,read:r,folder:n,labelId:s}=e;return this.resend.patch(`/inboxes/${o}/threads/${i}`,{read:r,folder:n,label_id:s},t)}async remove(e,t={}){let{inboxId:o,threadId:i}=e;return this.resend.delete(`/inboxes/${o}/threads/${i}`,void 0,t)}},Vf=class{constructor(e){this.resend=e,this.threads=new Jf(e),this.labels=new Lf(e),this.drafts=new qf(e),this.agent=new Mf(e)}async create(e,t={}){return this.resend.post("/inboxes",{email_address:e.emailAddress,name:e.name,forwarding:e.forwarding,from_name:e.fromName},t)}async list(e={},t={}){let o=ae("/inboxes",e);return this.resend.get(o,t)}async get(e,t={}){return this.resend.get(`/inboxes/${encodeURIComponent(e)}`,t)}async update(e,t,o={}){return this.resend.patch(`/inboxes/${e}`,{name:t.name,from_name:t.fromName},o)}async remove(e,t={}){return this.resend.delete(`/inboxes/${e}`,void 0,t)}},zf=class{constructor(e){this.resend=e}async list(e={},t={}){let o=ae("/logs",e);return await this.resend.get(o,t)}async get(e,t={}){return await this.resend.get(`/logs/${e}`,t)}},Yf=class{constructor(e){this.resend=e}async list(e={},t={}){let o=ae("/oauth/grants",e);return await this.resend.get(o,t)}async revoke(e,t={}){return await this.resend.delete(`/oauth/grants/${e}`,void 0,t)}},Xf=class{constructor(e){this.resend=e}async create(e,t={}){return await this.resend.post("/segments",e,t)}async list(e={},t={}){let o=ae("/segments",e);return await this.resend.get(o,t)}async get(e,t={}){return await this.resend.get(`/segments/${e}`,t)}async update(e,t,o={}){return await this.resend.patch(`/segments/${e}`,t,o)}async remove(e,t={}){return await this.resend.delete(`/segments/${e}`,void 0,t)}},Zf=class{constructor(e){this.resend=e}async add(e,t={}){return this.resend.post("/suppressions/batch/add",e,t)}async remove(e,t={}){return this.resend.post("/suppressions/batch/remove",e,t)}},ws=()=>({data:null,headers:null,error:{message:"Missing `id` field.",statusCode:null,name:"missing_required_field"}}),eh=class{constructor(e){this.resend=e,this.batch=new Zf(e)}async add(e,t={}){return this.resend.post("/suppressions",e,t)}async list(e={},t={}){let o=th(e),i=o?`/suppressions?${o}`:"/suppressions";return this.resend.get(i,t)}async get(e,t={}){return e?this.resend.get(`/suppressions/${encodeURIComponent(e)}`,t):ws()}async remove(e,t={}){return e?this.resend.delete(`/suppressions/${encodeURIComponent(e)}`,void 0,t):ws()}};function th(e){let{origin:t,...o}=e,i=new URLSearchParams($t(o));return t&&i.set("origin",t),i.toString()}function oh(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 ih(e){return e?.map(t=>({key:t.key,type:t.type,fallback_value:t.fallbackValue}))}function vs(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:ih(e.variables)}}var Us=class{constructor(e,t){this.promise=e,this.publishFn=t}then(e,t){return this.promise.then(e,t)}async publish(e={}){let{data:t,error:o}=await this.promise;return o?{data:null,headers:null,error:o}:this.publishFn(t.id,e)}},rh=class{constructor(e){this.resend=e}create(e,t={}){return new Us(this.performCreate(e,t),this.publish.bind(this))}async performCreate(e,t){let o={...e};return e.react&&(o.html=await fo(e.react)),this.resend.post("/templates",vs(o),t)}async remove(e,t={}){return await this.resend.delete(`/templates/${e}`,void 0,t)}async get(e,t={}){return await this.resend.get(`/templates/${e}`,t)}async list(e={},t={}){return this.resend.get(`/templates${oh(e)}`,t)}duplicate(e,t={}){return new Us(this.resend.post(`/templates/${e}/duplicate`,void 0,t),this.publish.bind(this))}async publish(e,t={}){return await this.resend.post(`/templates/${e}/publish`,void 0,t)}async update(e,t,o={}){return await this.resend.patch(`/templates/${e}`,vs(t),o)}},nh=class{constructor(e){this.resend=e}async create(e,t={}){let{defaultSubscription:o,...i}=e;return await this.resend.post("/topics",{...i,default_subscription:o},t)}async list(e={}){return await this.resend.get("/topics",e)}async get(e,t={}){return e?await this.resend.get(`/topics/${e}`,t):{data:null,headers:null,error:{message:"Missing `id` field.",statusCode:null,name:"missing_required_field"}}}async update(e,t={}){return e.id?await this.resend.patch(`/topics/${e.id}`,e,t):{data:null,headers:null,error:{message:"Missing `id` field.",statusCode:null,name:"missing_required_field"}}}async remove(e,t={}){return e?await this.resend.delete(`/topics/${e}`,void 0,t):{data:null,headers:null,error:{message:"Missing `id` field.",statusCode:null,name:"missing_required_field"}}}},sh=class{constructor(e){this.resend=e}async get(e={}){return await this.resend.get("/usage",e)}},ah=class{constructor(e){this.resend=e}async list(e,t={}){let{webhookId:o,eventId:i}=e,r=ae(`/webhooks/${o}/events/${i}/attempts`,e);return await this.resend.get(r,t)}},lh=class{constructor(e){this.resend=e,this.attempts=new ah(e)}async list(e,t={}){let{webhookId:o}=e,i=ae(`/webhooks/${o}/events`,e);return await this.resend.get(i,t)}async get(e,t={}){let{webhookId:o,eventId:i}=e;return await this.resend.get(`/webhooks/${o}/events/${i}`,t)}async replay(e,t={}){let{webhookId:o,eventId:i}=e;return await this.resend.post(`/webhooks/${o}/events/${i}/replay`,void 0,t)}},dh=class{constructor(e){this.resend=e,this.events=new lh(e)}async create(e,t={}){return await this.resend.post("/webhooks",e,t)}async get(e,t={}){return await this.resend.get(`/webhooks/${e}`,t)}async list(e={},t={}){let o=ae("/webhooks",e);return await this.resend.get(o,t)}async update(e,t,o={}){return await this.resend.patch(`/webhooks/${e}`,t,o)}async remove(e,t={}){return await this.resend.delete(`/webhooks/${e}`,void 0,t)}async rotateSigningSecret(e,t={}){return await this.resend.post(`/webhooks/${e}/signing-secret/rotate`,void 0,t)}verify(e){return new ks.Webhook(e.webhookSecret).verify(e.payload,{"webhook-id":e.headers.id,"webhook-timestamp":e.headers.timestamp,"webhook-signature":e.headers.signature})}},Ss="https://api.resend.com",Ks=`resend-node:${Cf}`;function ch(){return typeof process<"u"&&process.env&&process.env.RESEND_BASE_URL||Ss}function uh(){return typeof process<"u"&&process.env&&process.env.RESEND_USER_AGENT||Ks}var Gt=class{constructor(e,t){if(this.key=e,this.segments=new Xf(this),this.apiKeys=new xf(this),this.audiences=this.segments,this.automations=new Sf(this),this.batch=new kf(this),this.broadcasts=new _f(this),this.contactProperties=new Rf(this),this.contacts=new Ef(this),this.domains=new jf(this),this.emails=new Hf(this),this.events=new Nf(this),this.inboxes=new Vf(this),this.logs=new zf(this),this.oauthGrants=new Yf(this),this.suppressions=new eh(this),this.templates=new rh(this),this.topics=new nh(this),this.usage=new sh(this),this.webhooks=new dh(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??ch(),this.userAgent=t?.userAgent??uh(),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={}){let{signal:o}=t;try{let i=await fetch(`${this.baseUrl}${e}`,t);if(!i.ok)try{let r=await i.text(),n=JSON.parse(r);return this.logError(n,e,i.status),{data:null,error:n,headers:Object.fromEntries(i.headers.entries())}}catch(r){if(o?.aborted&&r===o.reason)throw r;if(r instanceof SyntaxError){let s={name:"application_error",statusCode:i.status,message:"Internal server error. We are unable to process your request right now, please try again later."};return this.logError(s,e,i.status),{data:null,error:s,headers:Object.fromEntries(i.headers.entries())}}let n={message:i.statusText,statusCode:i.status,name:"application_error"};if(r instanceof Error){let s={...n,message:r.message};return this.logError(s,e,i.status),{data:null,error:s,headers:Object.fromEntries(i.headers.entries())}}return this.logError(n,e,i.status),{data:null,error:n,headers:Object.fromEntries(i.headers.entries())}}return{data:await i.json(),error:null,headers:Object.fromEntries(i.headers.entries())}}catch{let i={name:"application_error",statusCode:null,message:"Unable to fetch data. The request could not be resolved."};return this.logError(i,e),{data:null,error:i,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)}};ye();var Or=me(Je(),1);function W(e,t){return e instanceof Error?e.message:t}function pa(e){return!!(e||!process.stdout.isTTY)}function M(e,t={}){pa(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 Sh=new Set(["content-type","retry-after"]);function Kh(e){let t={};for(let[o,i]of Object.entries(e)){let r=o.toLowerCase();(Sh.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?Kh(e.headers):void 0,r=i!==void 0&&Object.keys(i).length>0;if(pa(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(`${Or.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(Or.default.dim(`[${n.join("; ")}]`))}process.exit(o)}var fa={sending_access:0,full_access:1};function kh(e,t){return fa[e]>=fa[t]}async function ee(e,t){let o=e.profile;try{let i=await Rt(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";kh(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 ha=130;function _h(){process.stderr.isTTY&&process.stderr.write("\r\x1B[2K"),console.error("Cancelled."),process.exit(ha)}var Nt;function ga(){Nt=_h,process.on("SIGINT",Nt),process.on("uncaughtException",e=>{h({message:W(e,"An unexpected error occurred"),code:"unexpected_error"},{}),process.exit(1)})}function ni(e){Nt&&process.removeListener("SIGINT",Nt),Nt=e,process.on("SIGINT",Nt)}function Mt(){return ha}ye();var si=me(Je(),1);X();var Aa=[1,2,4],Fh=Aa.length,Rh=new Set(["internal_server_error","service_unavailable","gateway_timeout"]),Dh=(e,t)=>!!(e==="rate_limit_exceeded"||t&&e!==void 0&&Rh.has(e)),Th=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}},Oh=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<Fh&&Dh(i.error.name,r)){let n=Th(i.headers)??Aa[o];return t?.onRetry?.(o,n,i.error.name??""),await Oh(n*1e3),bo(e,t,o+1)}return i};var ba=(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 Bh=st?String.fromCodePoint(10004):"v",Ih=st?String.fromCodePoint(9888):"!",jh=st?String.fromCodePoint(10007):"x",Ph=["\u2839","\u2838","\u2834","\u2826","\u2807","\u280F","\u2819","\u2839"],$h=80;async function de(e,t,o,i,r={}){let n=le(e,i.quiet);try{let{data:s,error:a,headers:l}=await bo(()=>ba(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 le(e,t){if(t||!w())return{update(a){},stop(a){},clear(){},warn(a){},fail(a){}};let o=st?Ph:["-","\\","|","/"],i=$h,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 ${si.default.green(Bh)} ${a}
|
|
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 ${si.default.yellow(Ih)} ${a}
|
|
283
|
+
`)},fail(a){clearInterval(s),process.stderr.write(`\r\x1B[2K ${si.default.red(jh)} ${a}
|
|
284
|
+
`)}}}X();function O(e){Vn(e),process.exit(Mt())}async function ai(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});(R(i)||!i)&&O("Deletion cancelled.")}async function li(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)});R(i)&&O("Rename cancelled.");try{await ri(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 E(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 R(r)&&O("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 R(r)&&O("Cancelled."),r}async function xa(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 Jn(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:()=>O("Operation cancelled.")});return{...e,...n}}var Gh=20,ya="__fetch_more__",Ca="__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=le(s.length===0?`Fetching ${t.resourcePlural}...`:`Fetching more ${t.resourcePlural}...`,o.quiet),u=await t.fetchItems(n,{limit:Gh,...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:v})=>({value:b.id,label:x,hint:v}));r&&y.unshift({value:Ca,label:"None"}),m&&y.push({value:ya,label:"Fetch more..."});let A=await ne({message:`Select a ${t.resource}`,options:y});if(R(A)&&O("Cancelled."),A===Ca)return;if(A!==ya){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 wa=require("node:util"),Hh=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]|\r(?!\n)/g,pe=e=>(0,wa.stripVTControlCharacters)(String(e)).replace(Hh,"");function qt(e){return typeof e=="string"?pe(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 B(e,t){let o=e.permission?{permission:e.permission}:void 0,i=await ee(t,o),r=await de(e.loading,()=>e.sdkCall(i),"fetch_error",t,{retryTransient:!0});!t.json&&w()?e.onInteractive(qt(r)):M(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 ai(e,o.confirmMessage,i),await de(o.loading,()=>o.sdkCall(n),"delete_error",i),!i.json&&w()?console.log(o.successMsg):M({object:o.object,id:e,deleted:!0},{json:i.json})}async function P(e,t){let o=e.permission?{permission:e.permission}:void 0,i=await ee(t,o),r=await de(e.loading,()=>e.sdkCall(i),"create_error",t);!t.json&&w()?e.onInteractive(qt(r)):M(r,{json:t.json})}async function F(e,t){let o=e.permission?{permission:e.permission}:void 0,i=await ee(t,o),r=await de(e.loading,()=>e.sdkCall(i),e.errorCode,t,{retryTransient:e.retryTransient});!t.json&&w()?console.log(e.successMsg):M(r,{json:t.json})}async function S(e,t){let o=e.permission?{permission:e.permission}:void 0,i=await ee(t,o),r=await de(e.loading,()=>e.sdkCall(i),"list_error",t,{retryTransient:!0});!t.json&&w()?e.onInteractive(qt(r)):M(r,{json:t.json})}X();X();var fe=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 Qh(){return process.stdout.columns}function Nh(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=`${fe.h}${fe.h} ${a} ${fe.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 _(e,t,o="(no results)"){if(t.length===0)return o;let i=t.map(m=>m.map(
|
|
288
|
-
`)}X();var
|
|
287
|
+
`)}function _(e,t,o="(no results)"){if(t.length===0)return o;let i=t.map(m=>m.map(pe)),r=e.map((m,p)=>Math.max(m.length,...i.map(f=>f[p].length))),n=Qh();if(n!==void 0&&r.reduce((p,f)=>p+f,0)+3*r.length+1>n)return Nh(e,i,n);let s=fe.tl+r.map(m=>fe.h.repeat(m+2)).join(fe.tm)+fe.tr,a=fe.lm+r.map(m=>fe.h.repeat(m+2)).join(fe.mm)+fe.rm,l=fe.bl+r.map(m=>fe.h.repeat(m+2)).join(fe.bm)+fe.br,u=m=>fe.v+" "+m.map((p,f)=>p.padEnd(r[f])).join(` ${fe.v} `)+" "+fe.v;return[s,u(e),a,...i.map(u),l].join(`
|
|
288
|
+
`)}X();var Er=st?String.fromCodePoint(9472):"-";function di(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[`${Er}${Er} ${i.type} ${Er.repeat(40)}`,` Name ${r}`,` TTL ${i.ttl}`,` Value ${i.value}`].join(`
|
|
289
289
|
`)}).join(`
|
|
290
290
|
|
|
291
|
-
`)}function
|
|
291
|
+
`)}function va(e){let t=e.map(o=>[o.name,o.status,o.region,o.id]);return _(["Name","Status","Region","ID"],t,"(no domains)")}function Ua(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 Sa=new d("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 q("--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",c({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
|
|
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"}});R(s)&&O("Cancelled."),i=s;let a=await ne({message:"Permission level",options:[{value:"full_access",label:"Full access"},{value:"sending_access",label:"Sending access only"}]});R(a)&&O("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 P({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 Ka(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 ka=new d("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",c({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)});
|
|
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)});ye();function D(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 I(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 T(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
|
-
$ resend ${t} ${n} ${r}${s}${u}${a}${l}`)}var
|
|
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=
|
|
305
|
+
$ resend ${t} ${n} ${r}${s}${u}${a}${l}`)}var _a=new d("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",c({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=D(e.limit,o),r=I(i,e.after,e.before,o);await S({loading:"Fetching API keys...",sdkCall:n=>n.apiKeys.list(r),onInteractive:n=>{console.log(Ka(n.data)),T(n,"api-keys list",{limit:i,before:e.before,apiKey:o.apiKey,profile:o.profile})}},o)});var Fa=new d("update").description("Rename an API key").argument("[id]","API key ID").option("--name <name>","New API key name").addHelpText("after",c({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 E(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 F({loading:"Updating API key...",sdkCall:s=>s.apiKeys.update(r,{name:n}),errorCode:"update_error",successMsg:`API key updated: ${r}`},i)});var Ra=new d("api-keys").description("Manage API keys for authentication").addHelpText("after",c({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(
|
|
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(Sa).addCommand(_a,{isDefault:!0}).addCommand(Fa).addCommand(ka);ye();X();function Mh(e){let t=Fe();if(e.json){M({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=
|
|
313
|
-
${Qt}`),m==="browser"&&(await
|
|
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 Da=new d("list").description("List all profiles").action((e,t)=>{Mh(t.optsWithGlobals())});var Ta=require("node:child_process"),Co=me(Je(),1),Ye="https://resend.com";function ui(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,Ta.execFile)(o,r,{timeout:5e3,windowsVerbatimArguments:!0},n=>t(!n))})}async function Te(e,t){let o=await ui(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 he={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`};ye();ei();X();var Br="https://resend.com/api-keys?new=true";async function Oa(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=Fe();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(R(n)&&O("Login cancelled."),n==="__new__"){let s=await Z({message:"Enter a name for the new profile:",validate:l=>ue((l??"").trim())});if(R(s)&&O("Login cancelled."),o=(s??"").trim()||"default",i.some(l=>l.name===o)){let l=await Ze({message:`Profile '${o}' already exists. Overwrite?`});(R(l)||!l)&&O("Login cancelled.")}}else if(ue(n)){let s=await li(n,e);if(!s)return;o=s}else o=n}else o="default";return o}function Ea(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 qh(e){let{codeVerifier:t,codeChallenge:o,state:i}=ta(),r=le("Starting local callback server...",e.quiet),n,s;try{({port:n,waitForCallback:s}=await oa()),r.stop("")}catch(K){r.fail("Failed to start callback server"),h({message:W(K,"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:Zo,response_type:"code",redirect_uri:a,scope:"full_access",state:i,code_challenge:o,code_challenge_method:"S256"}).toString(),await ui(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=le("Waiting for browser authentication...",e.quiet),f;try{f=await s}catch(K){p.fail("Authentication failed"),h({message:W(K,"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=le("Exchanging authorization code...",e.quiet),A;try{A=await ia({code:f.code,codeVerifier:t,redirectUri:a,clientId:Zo,baseUrl:l})}catch(K){y.fail("Token exchange failed"),h({message:W(K,"Token exchange failed"),code:"oauth_error"},{json:e.json})}y.stop("Authenticated successfully");let b=await Oa(e,"Save credentials to which profile?"),x=b||"default",{configPath:v,backend:U}=await ti({access_token:A.access_token,access_token_expires_at:Fr(A.access_token),refresh_token:A.refresh_token,scope:A.scope},b);if(b)try{Ao(x)}catch(K){h({message:W(K,"Failed to switch profile"),code:"switch_failed"},{json:e.json})}e.json?M({success:!0,config_path:v,profile:x,storage:U.name,scope:A.scope},{json:!0}):Ea({noun:"Credentials",profileLabel:x,configPath:v,backend:U})}var mi=new d("login").description("Save a Resend API key").option("--key <key>","API key to store (required in non-interactive mode)").addHelpText("after",c({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(R(m)&&O("Login cancelled."),m==="oauth"){await qh(o);return}te.info(`Use a full access API key for complete CLI access.
|
|
313
|
+
${Qt}`),m==="browser"&&(await ui(Br)?te.info(`Opened ${Br}`):te.warn(`Could not open browser. Visit ${Br} manually.`));let p=await Xn({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_"}});R(p)&&O("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=le("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 Oa(o,"Save API key to which profile?"),{configPath:a,backend:l}=await ua(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?M({success:!0,config_path:a,profile:u,storage:l.name,permission:n},{json:!0}):Ea({noun:"API key",profileLabel:u,configPath:a,backend:l})});var Ba=require("node:fs");ye();X();var pi=new d("logout").description("Remove your saved Resend API key").addHelpText("after",c({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=Ft(),r=
|
|
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=Dr();if(!r&&!(0,Ba.existsSync)(i)){!o.json&&w()?console.log("No saved credentials found. Nothing to remove."):M({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});(R(u)||!u)&&O("Logout cancelled.")}try{s?await ma():await ii(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 M({success:!0,config_path:i,profile:s?"all":a},{json:o.json})});ye();X();async function Lh(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=Fe();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}))});R(r)&&O("Remove cancelled."),o=r}if(!t.json&&w()){let i=await Ze({message:`Remove profile '${o}' and its API key?`});(R(i)||!i)&&O("Remove cancelled.")}try{await ii(o)}catch(i){h({message:W(i,"Failed to remove profile"),code:"remove_failed"},{json:t.json});return}t.json?M({success:!0,removed_profile:o},{json:!0}):console.log(`Profile '${o}' removed.`)}var Ia=new d("remove").description("Remove a profile").argument("[name]","Profile name to remove").action(async(e,t,o)=>{await Lh(e,o.optsWithGlobals())});ye();X();async function Wh(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=Fe();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}))});R(s)&&O("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)});R(n)&&O("Rename cancelled."),r=n}try{await ri(i,r)}catch(n){h({message:W(n,"Failed to rename profile"),code:"rename_failed"},{json:o.json});return}o.json?M({success:!0,old_name:i,new_name:r},{json:!0}):console.log(`Profile '${i}' renamed to '${r}'.`)}var ja=new d("rename").description("Rename a profile").argument("[old-name]","Current profile name").argument("[new-name]","New profile name").action(async(e,t,o,i)=>{await Wh(e,t,i.optsWithGlobals())});ye();X();async function Jh(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=Fe();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}))});R(s)&&O("Switch cancelled."),o=s}if(Fe().some(n=>n.name===o)){let n=await li(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?M({success:!0,active_profile:o},{json:!0}):console.log(`Switched to profile '${o}'.`)}var Pa=new d("switch").description("Switch the active profile").argument("[name]","Profile name to switch to").action(async(e,t,o)=>{await Jh(e,o.optsWithGlobals())});var $a=new d("auth").description("Manage authentication and profiles").addHelpText("after",c({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(
|
|
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(mi).addCommand(pi).addCommand(Da,{isDefault:!0}).addCommand(Pa).addCommand(ja).addCommand(Ia);var Ir=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,Ir.readFileSync)(0,"utf-8")}catch{h({message:"Failed to read from stdin",code:"stdin_read_error"},{json:t.json})}}try{return(0,Ir.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 Ga=new d("create").description("Create a new automation").option("--name <name>","Automation name").addOption(new q("--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",c({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
|
|
330
|
-
This cannot be undone.`,loading:"Deleting automation...",object:"automation",successMsg:"Automation deleted",sdkCall:n=>n.automations.remove(r)},i)});var
|
|
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,
|
|
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 E(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 P({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 Ha(e){let t=e.map(o=>[o.name,jr(o.status),o.created_at,o.id]);return _(["Name","Status","Created","ID"],t,"(no automations)")}function jr(e){switch(e){case"enabled":return"\u2713 Enabled";case"disabled":return"\u25CB Disabled";default:return e}}var Ne={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 Qa=new d("delete").alias("rm").description("Delete an automation").argument("[id]","Automation ID").option("--yes","Skip confirmation prompt").addHelpText("after",c({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,Ne,i);await z(r,!!t.yes,{confirmMessage:`Delete automation ${r}?
|
|
330
|
+
This cannot be undone.`,loading:"Deleting automation...",object:"automation",successMsg:"Automation deleted",sdkCall:n=>n.automations.remove(r)},i)});var Na=new d("duplicate").description("Duplicate an automation").argument("[id]","Automation ID to duplicate").addHelpText("after",c({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,Ne,i);await P({loading:"Duplicating automation...",sdkCall:n=>n.automations.duplicate(r),onInteractive:n=>{console.log(`Automation duplicated: ${n.id}`)}},i)});var Ma=new d("get").description("Retrieve an automation with its steps and connections").argument("[id]","Automation ID").addHelpText("after",c({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,
|
|
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,Ne,i);await B({loading:"Fetching automation...",sdkCall:n=>n.automations.get(r),onInteractive:n=>{if(console.log(`${n.name} \u2014 ${jr(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
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
|
|
335
|
+
Connections:`);let s=n.connections.map(a=>[a.from,a.to,a.type]);console.log(_(["From","To","Type"],s,"(no connections)"))}}},i)});var qa=new d("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",c({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=D(e.limit,o),r=I(i,e.after,e.before,o);await S({loading:"Fetching automations...",sdkCall:n=>n.automations.list(r),onInteractive:n=>{console.log(Ha(n.data)),T(n,"automations list",{limit:i,before:e.before,apiKey:o.apiKey,profile:o.profile})}},o)});var La=new d("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",c({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?
|
|
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?he.automation(e):he.automations,r=o.optsWithGlobals();await Te(i,r)});var Wa=new d("get").description("Retrieve details of a specific automation run").option("--automation-id <id>","Automation ID").option("--run-id <id>","Run ID").addHelpText("after",c({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 E(e.automationId,{message:"Automation ID"},{message:"Missing --automation-id flag.",code:"missing_automation_id"},o),r=await E(e.runId,{message:"Run ID"},{message:"Missing --run-id flag.",code:"missing_run_id"},o);await B({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 Ja=new d("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",c({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,Ne,i),n=D(t.limit,i),s=I(n,t.after,t.before,i);await S({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)")),T(a,`automations runs list ${r}`,{limit:n,before:t.before,apiKey:i.apiKey,profile:i.profile})}},i)});var Va=new d("runs").description("Manage automation runs").addHelpText("after",c({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(
|
|
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(Ja,{isDefault:!0}).addCommand(Wa);var za=new d("stop").description("Stop a running automation").argument("[id]","Automation ID").addHelpText("after",c({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,Ne,i);await F({loading:"Stopping automation...",sdkCall:n=>n.automations.stop(r),errorCode:"stop_error",successMsg:"Automation stopped"},i)});var Ya=new d("update").description("Update an automation status (enable or disable)").argument("[id]","Automation ID").addOption(new q("--status <status>","New status").choices(["enabled","disabled"])).addHelpText("after",c({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,Ne,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 F({loading:"Updating automation...",sdkCall:s=>s.automations.update(r,{status:n}),errorCode:"update_error",successMsg:`Automation updated: ${r} (${n})`},i)});var Xa=new d("automations").description("Manage automations").addHelpText("after",c({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(
|
|
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(Ga).addCommand(Ma).addCommand(qa,{isDefault:!0}).addCommand(Ya).addCommand(Qa).addCommand(Na).addCommand(za).addCommand(La).addCommand(Va);function Pr(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 Me={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 Za(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:`${Pr(t.status)} ${t.id}`}),filter:e}}var el=Za(e=>e.status==="draft"),tl=Za(e=>e.status==="queued"||e.status==="scheduled");function ol(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 il(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 rl(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 nl=new d("cancel").description("Cancel a queued or scheduled broadcast").argument("[id]","Broadcast ID").addHelpText("after",c({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,
|
|
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,tl,i);await F({loading:"Cancelling broadcast...",sdkCall:n=>n.broadcasts.cancel(r),errorCode:"cancel_error",successMsg:"Broadcast cancelled"},i)});var sl=new d("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",c({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,Me,i),n=D(t.limit,i),s=I(n,t.after,t.before,i);await S({loading:"Fetching clicked links...",sdkCall:a=>a.broadcasts.clickedLinks(r,s),onInteractive:a=>{console.log(rl(a.data)),T(a,`broadcasts clicked-links ${r}`,{limit:n,before:t.before,apiKey:i.apiKey,profile:i.profile})}},i)});async function fi(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 Vh=["hello","support"];async function hi(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}))});R(r)&&O("Send cancelled."),t=r}let o=Vh.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(R(i)&&O("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 R(r)&&O("Send cancelled."),r}return i}var Wt=require("node:fs"),gl=require("node:path");var gi=require("node:fs"),ml=require("node:os"),Lt=me(require("node:path"),1);function al(){return"pkg"in process?require("esbuild-wasm"):require("esbuild")}var dl=require("node:fs"),cl=me(require("node:path"),1);function ll(e){return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}var ul=e=>({name:"rendering-utilities-exporter",setup:t=>{t.onLoad({filter:new RegExp(e.map(o=>ll(o)).join("|"))},async({path:o})=>({contents:`${await dl.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:
|
|
356
|
+
`,loader:cl.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 pl(e){let t=Lt.default.resolve(e),o=(0,gi.mkdtempSync)(Lt.default.join((0,ml.tmpdir)(),"resend-react-email-"));try{let{build:n}=al();await n({bundle:!0,entryPoints:[t],format:"cjs",jsx:"automatic",logLevel:"silent",outExtension:{".js":".cjs"},outdir:o,platform:"node",plugins:[ul([t])],write:!0})}catch(n){throw(0,gi.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 fl=require("node:module");async function hl(e){let t=(0,fl.createRequire)(e);delete t.cache[e];let o=t(e);return o.render(o.reactEmailCreateReactElement(o.default,{}),{})}var $r=e=>{e&&(0,Wt.rmSync)(e,{recursive:!0,force:!0})},qe=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,gl.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=le("Bundling React Email template...",t.quiet),r;try{let n=await pl(e);r=n.tmpDir,i.stop("Bundled React Email template");let s=le("Rendering React Email template...",t.quiet);try{let a=await hl(n.cjsPath);return s.stop("Rendered React Email template"),$r(r),a}catch(a){return s.fail("Failed to render React Email template"),$r(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"),$r(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 Ai(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 Al(e){let t=e.map(o=>[o.name,o.description??"",o.id,o.created_at]);return _(["Name","Description","ID","Created"],t,"(no topics)")}var bl=new d("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",c({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
|
|
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 fi(m);p.length>0&&(i=await hi(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"});R(m)&&O("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"});R(m)&&O("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"});R(m)&&O("Cancelled."),n=m}else n=await g(void 0,Oe,o);let s=e.reactEmail?await qe(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"});R(m)&&O("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"});R(m)&&O("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){M({dryRun:!0,request:u},{json:o.json});return}await P({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 yl=new d("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",c({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
|
-
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,
|
|
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,Me,i);await z(r.id,!!t.yes,{confirmMessage:`Delete broadcast "${r.label}"?
|
|
372
372
|
ID: ${r.id}
|
|
373
|
-
If scheduled, delivery will be cancelled.`,loading:"Deleting broadcast...",object:"broadcast",successMsg:"Broadcast deleted",sdkCall:n=>n.broadcasts.remove(r.id)},i)});var
|
|
373
|
+
If scheduled, delivery will be cancelled.`,loading:"Deleting broadcast...",object:"broadcast",successMsg:"Broadcast deleted",sdkCall:n=>n.broadcasts.remove(r.id)},i)});var Cl=new d("duplicate").description("Duplicate a broadcast").argument("[id]","Broadcast ID").addHelpText("after",c({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,
|
|
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,
|
|
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,Me,i);await P({loading:"Duplicating broadcast...",sdkCall:n=>n.broadcasts.duplicate(r),onInteractive:n=>{console.log(`Broadcast duplicated: ${n.id}`)}},i)});var xl=new d("get").description("Retrieve full details for a broadcast including HTML body, status, and delivery times").argument("[id]","Broadcast ID").addHelpText("after",c({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,Me,i);await B({loading:"Fetching broadcast...",sdkCall:n=>n.broadcasts.get(r),onInteractive:n=>{console.log(`Broadcast: ${n.id}`),console.log(` Status: ${Pr(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 wl=new d("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",c({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=D(e.limit,o),r=I(i,e.after,e.before,o);await S({loading:"Fetching broadcasts...",sdkCall:n=>n.broadcasts.list(r),onInteractive:n=>{console.log(ol(n.data)),T(n,"broadcasts list",{limit:i,before:e.before,apiKey:o.apiKey,profile:o.profile})}},o)});var vl=new d("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",c({context:`Opens the Resend dashboard in your default browser.
|
|
378
378
|
With an ID: opens that broadcast's page for viewing or editing.
|
|
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?
|
|
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?he.broadcast(e):he.broadcasts,r=o.optsWithGlobals();await Te(i,r)});var Ul=["sent","delivered","opened","clicked","bounced","complained","unsubscribed","suppressed"],Sl=new d("recipients").description("List a broadcast's recipients for a given event type").argument("[id]","Broadcast ID").addOption(new q("--type <type>","Event type to filter recipients by").choices(Ul)).option("--email <email>","Filter recipients whose email contains this value").addOption(new q("--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",c({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,
|
|
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,Me,i),n=await bt(t.type,{message:"Event type",options:Ul.map(l=>({value:l,label:l}))},{message:"Missing --type flag.",code:"missing_type"},i),s=D(t.limit,i),a=I(s,t.after,t.before,i);await S({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(il(l.data)),T(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 Kl=new d("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",c({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,
|
|
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,el,i);await F({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 kl=new d("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",c({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,
|
|
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,Me,i),n=t.reactEmail!=null?await qe(t.reactEmail,i):t.htmlFile!=null?ie(t.htmlFile,i):t.html,s=t.textFile!=null?ie(t.textFile,i):t.text;await F({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 _l=new d("broadcasts").description("Manage broadcasts").addHelpText("after",c({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(
|
|
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(bl).addCommand(vl).addCommand(Kl).addCommand(xl).addCommand(wl,{isDefault:!0}).addCommand(Sl).addCommand(kl).addCommand(nl).addCommand(Cl).addCommand(yl).addCommand(sl);var El=require("node:fs"),xo=require("node:path");X();var Fl=["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 Rl={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 Dl(e){let t=e.map(o=>[o.title,o.location??"",o.department??"",o.id]);return _(["Title","Location","Department","ID"],t,"(no open positions)")}var zh=10*1024*1024,Yh={".pdf":"application/pdf",".doc":"application/msword",".docx":"application/vnd.openxmlformats-officedocument.wordprocessingml.document",".txt":"text/plain"},Jt="__skip__",Bl=new d("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",c({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,27 +411,27 @@ 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
|
|
415
|
-
`),"Application summary");let n=await Ze({message:"Submit this application?"});(
|
|
416
|
-
Apply with: resend careers apply <id>`)}},o)});var
|
|
417
|
-
`)}function
|
|
418
|
-
`)}function
|
|
419
|
-
`)}function
|
|
420
|
-
`)}var
|
|
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);
|
|
422
|
-
`),process.exit(1));let o=await ne({message:"Which shell do you use?",options:
|
|
423
|
-
`),i}function
|
|
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 Xh(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,Rl,i),a=s.id,l=t.resume,u=s.label;if(n){let A=await ee(i,{permission:"sending_access"}),b=await de("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 Ol(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 v=await Zh(x);v!==void 0&&r.set(x.path,v)}r.has("name")||r.set("name",await Tl("Name")),r.has("email")||r.set("email",await Tl("Email")),l=l??await Ol("Resume"),t.yes||await eg(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=og(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 de("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!`):M(y,{json:i.json})});function Xh(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 Zh(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 R(n)&&O("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 R(n)&&O("Application cancelled."),n===Jt?void 0:n}if(e.type==="Location"){let r=[...e.required?[]:[{value:Jt,label:"Skip"}],...Fl.map(s=>({value:s,label:s}))],n=await Wn({message:t,options:r,maxItems:8,placeholder:"Start typing a country..."});return R(n)&&O("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"}});R(o)&&O("Application cancelled.");let i=o?.trim()??"";return i.length>0?i:void 0}async function Tl(e){let t=await Z({message:e,validate:o=>!o||o.trim().length===0?`${e} is required`:void 0});return R(t)&&O("Application cancelled."),t.trim()}async function Ol(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 R(t)&&O("Application cancelled."),t.trim()}async function eg(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}: ${tg(m,80)}`});r.push(`Resume: ${(0,xo.basename)(o)}`),Yn(r.join(`
|
|
415
|
+
`),"Application summary");let n=await Ze({message:"Submit this application?"});(R(n)||!n)&&O("Application not submitted.")}function tg(e,t){let o=e.replace(/\s+/g," ").trim();return o.length>t?`${o.slice(0,t-3)}...`:o}function og(e,t){let o;try{o=(0,El.readFileSync)(e)}catch{h({message:`Failed to read file: ${e}`,code:"file_read_error"},{json:t.json})}o.length>zh&&h({message:"Resume file is too large. Maximum size is 10MB.",code:"invalid_resume"},{json:t.json});let i=Yh[(0,xo.extname)(e).toLowerCase()]??"application/octet-stream";return{blob:new Blob([new Uint8Array(o)],{type:i}),filename:(0,xo.basename)(e)}}var Il=new d("list").description("List open positions at Resend").addHelpText("after",c({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 S({loading:"Fetching open positions...",sdkCall:i=>i.get("/careers"),permission:"sending_access",onInteractive:i=>{console.log(Dl(i.data)),i.data.length>0&&console.log(`
|
|
416
|
+
Apply with: resend careers apply <id>`)}},o)});var jl=new d("careers").description("Browse open positions at Resend and apply from your terminal").addHelpText("after",c({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(Bl).addCommand(Il,{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 vo(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(...vo(a,i,o));return r}function Gr(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 $l(e){let t=vo(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=Gr(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 Gl(e){let t=vo(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=Gr(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}:${Pl(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}:${Pl(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
|
+
`)}function Hl(e){let t=e.name,o=vo(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 "${bi(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 "${bi(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 "${bi(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 "${bi(u.description)}"`,i.push(p)}}return i.join(`
|
|
419
|
+
`)}function Pl(e){return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/:/g,"\\:")}function bi(e){return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}function Ql(e){let t=e.name,o=vo(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=Gr(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(v=>`"${v}"`).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
|
+
`)}var Nl=new d("commands").description("Print the full command tree as JSON (for agents and tooling)").addHelpText("after",c({context:`Outputs every subcommand, option, and description from the CLI definition.
|
|
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);M(r,{json:i.json})});var ge=require("node:fs"),Ct=require("node:os"),Ge=require("node:path");X();var Ll=["bash","zsh","fish","powershell"],yi="# resend shell completion";function ig(){let e=process.env.SHELL;if(e){let t=(0,Ge.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 rg(e){if(e)return e;let t=ig();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:Ll.map(i=>({value:i,label:i}))});return R(o)&&O("Cancelled."),o}function Ml(e){switch(e){case"bash":return process.platform==="darwin"?(0,Ge.join)((0,Ct.homedir)(),".bash_profile"):(0,Ge.join)((0,Ct.homedir)(),".bashrc");case"zsh":return(0,Ge.join)((0,Ct.homedir)(),".zshrc");case"powershell":return process.platform==="win32"?(0,Ge.join)((0,Ct.homedir)(),"Documents","PowerShell","Microsoft.PowerShell_profile.ps1"):(0,Ge.join)((0,Ct.homedir)(),".config","powershell","Microsoft.PowerShell_profile.ps1")}}function ng(e,t){switch(e){case"bash":return $l(t);case"zsh":return Gl(t);case"fish":return Hl(t);case"powershell":return Ql(t)}}function ql(e,t,o){(0,ge.existsSync)(e)||(0,ge.mkdirSync)(e,{recursive:!0});let i=(0,Ge.join)(e,t);return(0,ge.writeFileSync)(i,`${o}
|
|
423
|
+
`),i}function sg(e,t){switch(e){case"zsh":{let o=(0,Ge.join)((0,Ct.homedir)(),".zsh","completions"),i=ql(o,"_resend",t);te.success(`Completions written to ${i}`);let r=Ml(e),n=!0;if((0,ge.existsSync)(r)&&(0,ge.readFileSync)(r,"utf8").includes(o)&&(n=!1),n){let s=`${yi}
|
|
424
424
|
fpath=(${o} $fpath)
|
|
425
|
-
`,a=(0,
|
|
425
|
+
`,a=(0,ge.existsSync)(r)?(0,ge.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,ge.writeFileSync)(r,`${m}${s}
|
|
426
426
|
${p}`)}else{let u=`
|
|
427
427
|
${s}autoload -Uz compinit && compinit
|
|
428
|
-
`;(0,
|
|
429
|
-
${
|
|
428
|
+
`;(0,ge.writeFileSync)(r,u,{flag:"a"})}te.info(`Added completion path to ${r}`)}te.info("Restart your shell to activate completions.");return}case"fish":{let o=(0,Ge.join)((0,Ct.homedir)(),".config","fish","completions"),i=ql(o,"resend.fish",t);te.success(`Completions written to ${i}`),te.info("Completions will be available in new fish sessions.");return}case"bash":case"powershell":{let o=Ml(e),i=e==="powershell"?`
|
|
429
|
+
${yi}
|
|
430
430
|
resend completion powershell | Invoke-Expression
|
|
431
431
|
`:`
|
|
432
|
-
${
|
|
432
|
+
${yi}
|
|
433
433
|
eval "$(resend completion ${e})"
|
|
434
|
-
`;if((0,
|
|
434
|
+
`;if((0,ge.existsSync)(o)&&(0,ge.readFileSync)(o,"utf8").includes(yi)){te.info(`Completions already installed in ${o}`);return}let r=(0,Ge.dirname)(o);(0,ge.existsSync)(r)||(0,ge.mkdirSync)(r,{recursive:!0}),(0,ge.writeFileSync)(o,i,{flag:"a"}),te.success(`Completions added to ${o}`),te.info("Restart your shell to activate completions.");return}}}var Wl=new d("completion").description("Generate shell completion script").addArgument(new bn("[shell]","Shell type").choices(Ll)).option("--install","Install completions into your shell profile").addHelpText("after",c({context:`Outputs a completion script for the given shell. The shell is auto-detected
|
|
435
435
|
from $SHELL when not specified.
|
|
436
436
|
|
|
437
437
|
Quick setup:
|
|
@@ -451,7 +451,7 @@ Manual setup:
|
|
|
451
451
|
PowerShell (add to $PROFILE):
|
|
452
452
|
resend completion powershell >> $PROFILE
|
|
453
453
|
|
|
454
|
-
Homebrew users: completions may be configured automatically by your formula.`,examples:["resend completion --install","resend completion bash","resend completion zsh",'eval "$(resend completion bash)"']})).action(async(e,t,o)=>{let i=await
|
|
454
|
+
Homebrew users: completions may be configured automatically by your formula.`,examples:["resend completion --install","resend completion bash","resend completion zsh",'eval "$(resend completion bash)"']})).action(async(e,t,o)=>{let i=await rg(e),r=o.parent;if(!r)throw new Error("completion command must be registered under a parent");let n=wo(r),s=ng(i,n);if(t.install){sg(i,s);return}if(!e&&w()){o.help();return}console.log(s)});var Jl=new d("create").description("Create a new contact property definition").addOption(new q("--key <key>","Property key name, used in broadcast template interpolation (e.g. company_name, department)")).addOption(new q("--type <type>","Property data type: 'string' for text values, 'number' for numeric values").choices(["string","number"])).option("--fallback-value <value>","Default value used in broadcast templates when a contact has no value set for this property").addHelpText("after",c({context:`Property keys are used as identifiers in broadcast HTML template interpolation:
|
|
455
455
|
{{{PROPERTY_NAME|fallback}}} \u2014 triple-brace syntax substitutes the contact's value
|
|
456
456
|
{{{company_name|Unknown}}} \u2014 falls back to "Unknown" if the property is not set
|
|
457
457
|
|
|
@@ -459,20 +459,20 @@ 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
|
|
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 E(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 P({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 Vl(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 zl=new d("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",c({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
|
|
|
466
466
|
Non-interactive: --yes is required to confirm deletion when stdin/stdout is not a TTY.`,output:' {"object":"contact_property","id":"<id>","deleted":true}',errorCodes:["auth_error","confirmation_required","delete_error"],examples:["resend contact-properties delete b4a3c2d1-6e5f-8a7b-0c9d-2e1f4a3b6c5d --yes","resend contact-properties delete b4a3c2d1-6e5f-8a7b-0c9d-2e1f4a3b6c5d --yes --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await J(e,Vt,i);await z(r.id,!!t.yes,{confirmMessage:`Delete contact property "${r.label}"?
|
|
467
467
|
ID: ${r.id}
|
|
468
|
-
This will remove this property from ALL contacts permanently.`,loading:"Deleting contact property...",object:"contact_property",successMsg:"Contact property deleted",sdkCall:n=>n.contactProperties.remove(r.id)},i)});var
|
|
468
|
+
This will remove this property from ALL contacts permanently.`,loading:"Deleting contact property...",object:"contact_property",successMsg:"Contact property deleted",sdkCall:n=>n.contactProperties.remove(r.id)},i)});var Yl=new d("get").description("Retrieve a contact property definition by ID").argument("[id]","Contact property UUID").addHelpText("after",c({output:` {
|
|
469
469
|
"object": "contact_property",
|
|
470
470
|
"id": "<uuid>",
|
|
471
471
|
"key": "company_name",
|
|
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 B({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 Xl=new d("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",c({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=D(e.limit,o),r=I(i,e.after,e.before,o);await S({loading:"Fetching contact properties...",sdkCall:n=>n.contactProperties.list(r),onInteractive:n=>{console.log(Vl(n.data)),T(n,"contact-properties list",{limit:i,before:e.before,apiKey:o.apiKey,profile:o.profile})}},o)});var Zl=new d("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",c({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
|
|
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 de("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 F({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 ed=new d("contact-properties").description("Manage contact property definitions").addHelpText("after",c({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(
|
|
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(Jl).addCommand(Yl).addCommand(Xl,{isDefault:!0}).addCommand(Zl).addCommand(zl);function Ci(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 td(e){let t=e.map(o=>[o.name,o.subscription,o.id,o.description??""]);return _(["Name","Subscription","ID","Description"],t,"(no topic subscriptions)")}var Ce={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 xi(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 wi(e,t){if(e)try{return JSON.parse(e)}catch{h({message:"Invalid --properties JSON.",code:"invalid_properties"},{json:t.json})}}var od=new d("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",c({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,
|
|
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,Ce,i),n=await g(t.segmentId,Oe,i),s={...Yt(r),segmentId:n};await F({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 id=new d("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",c({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,11 +512,11 @@ 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
|
|
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 E(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)"});R(l)&&O("Cancelled."),l&&(r=l)}if(w()&&!o.json&&!e.lastName){let l=await Z({message:"Last name (optional)"});R(l)&&O("Cancelled."),l&&(n=l)}let s=wi(e.properties,o),a=e.segmentId??[];await P({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 rd=new d("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",c({context:`The <id> argument accepts either a UUID or an email address.
|
|
516
516
|
|
|
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,
|
|
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,Ce,i);await z(r.id,!!t.yes,{confirmMessage:`Delete contact "${r.label}"?
|
|
518
518
|
ID: ${r.id}
|
|
519
|
-
This cannot be undone.`,loading:"Deleting contact...",object:"contact",successMsg:"Contact deleted",sdkCall:n=>n.contacts.remove(r.id)},i)});var
|
|
519
|
+
This cannot be undone.`,loading:"Deleting contact...",object:"contact",successMsg:"Contact deleted",sdkCall:n=>n.contacts.remove(r.id)},i)});var nd=new d("get").description("Retrieve a contact by ID or email address").argument("[id]","Contact UUID or email address \u2014 both are accepted by the API").addHelpText("after",c({output:` {
|
|
520
520
|
"object": "contact",
|
|
521
521
|
"id": "e169aa45-1ecf-4183-9955-b1499d5701d3",
|
|
522
522
|
"email": "steve.wozniak@gmail.com",
|
|
@@ -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,
|
|
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,Ce,i);await B({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 dd=require("node:fs"),cd=require("node:path");function sd(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 ad={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 ld(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 ud=new d("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 q("--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",c({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,32 +541,32 @@ 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
|
|
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 E(e.file,{message:"Path to the CSV file",placeholder:"./contacts.csv"},{message:"Missing --file flag.",code:"missing_file"},o),r;try{r=(0,dd.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,cd.basename)(i),{type:"text/csv"}),s=ld(e.columnMap,o),a=(e.segmentId??[]).map(u=>({id:u})),l=e.topics!==void 0?xi(e.topics,o):void 0;await P({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 md=new d("get").description("Retrieve a contact import by ID").argument("[id]","Contact import ID").addHelpText("after",c({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,
|
|
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,ad,i);await B({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 pd=new d("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 q("--status <status>","Filter by import status").choices(["queued","in_progress","completed","failed"])).addHelpText("after",c({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=D(e.limit,o),r=I(i,e.after,e.before,o);await S({loading:"Fetching contact imports...",sdkCall:n=>n.contacts.imports.list({...r,...e.status&&{status:e.status}}),onInteractive:n=>{console.log(sd(n.data)),T(n,"contacts imports list",{limit:i,before:e.before,apiKey:o.apiKey,profile:o.profile})}},o)});var fd=new d("imports").description("Import contacts in bulk from a CSV file").addHelpText("after",c({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)
|
|
557
557
|
|
|
558
558
|
Imports run asynchronously. The create command returns immediately with an id while
|
|
559
|
-
the file is processed in the background.`,examples:["resend contacts imports create --file ./contacts.csv","resend contacts imports get 479e3145-dd38-476b-932c-529ceb705947","resend contacts imports list --status completed"]})).addCommand(
|
|
559
|
+
the file is processed in the background.`,examples:["resend contacts imports create --file ./contacts.csv","resend contacts imports get 479e3145-dd38-476b-932c-529ceb705947","resend contacts imports list --status completed"]})).addCommand(ud).addCommand(md).addCommand(pd,{isDefault:!0});var hd=new d("list").alias("ls").description("List all contacts").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",c({context:`Contacts are global \u2014 they are not scoped to audiences or segments since the 2025 migration.
|
|
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,
|
|
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=D(e.limit,o),r=I(i,e.after,e.before,o);await S({loading:"Fetching contacts...",sdkCall:n=>n.contacts.list(r),onInteractive:n=>{console.log(Ci(n.data)),T(n,"contacts list",{limit:i,before:e.before,apiKey:o.apiKey,profile:o.profile})}},o)});var gd=new d("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",c({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,Ce,r),s=await g(t,Oe,r),a={...Yt(n),segmentId:s};await F({loading:"Removing contact from segment...",sdkCall:l=>l.contacts.segments.remove(a),errorCode:"remove_segment_error",successMsg:`Contact removed from segment: ${s}`},r)});var Ad=new d("segments").description("List the segments a contact belongs to").argument("[id]","Contact UUID or email address").addHelpText("after",c({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,Ce,i);await S({loading:"Fetching segments...",sdkCall:n=>n.contacts.segments.list(Yt(r)),onInteractive:n=>console.log(Ai(n.data))},i)});var bd=new d("topics").description("List a contact's topic subscriptions").argument("[id]","Contact UUID or email address").addHelpText("after",c({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)
|
|
568
568
|
|
|
569
|
-
Use "resend contacts update-topics <id>" to change subscription statuses.`,output:' {"object":"list","data":[{"id":"...","name":"Product Updates","description":"...","subscription":"opt_in"}],"has_more":false}',errorCodes:["auth_error","list_error"],examples:["resend contacts topics e169aa45-1ecf-4183-9955-b1499d5701d3","resend contacts topics steve.wozniak@gmail.com","resend contacts topics e169aa45-1ecf-4183-9955-b1499d5701d3 --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,
|
|
569
|
+
Use "resend contacts update-topics <id>" to change subscription statuses.`,output:' {"object":"list","data":[{"id":"...","name":"Product Updates","description":"...","subscription":"opt_in"}],"has_more":false}',errorCodes:["auth_error","list_error"],examples:["resend contacts topics e169aa45-1ecf-4183-9955-b1499d5701d3","resend contacts topics steve.wozniak@gmail.com","resend contacts topics e169aa45-1ecf-4183-9955-b1499d5701d3 --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,Ce,i);await S({loading:"Fetching topic subscriptions...",sdkCall:n=>n.contacts.topics.list(zt(r)),onInteractive:n=>console.log(td(n.data))},i)});var yd=new d("update").description("Update a contact's subscription status or custom properties").argument("[id]","Contact UUID or email address \u2014 both are accepted by the API").option("--unsubscribed","Globally unsubscribe the contact from all broadcasts").option("--no-unsubscribed","Re-subscribe the contact (clears the global unsubscribe flag)").option("--properties <json>",`JSON object of properties to merge (e.g. '{"company":"Acme"}'); set a key to null to clear it`).addHelpText("after",c({context:`The <id> argument accepts either a UUID or an email address.
|
|
570
570
|
|
|
571
571
|
Subscription toggle:
|
|
572
572
|
--unsubscribed Sets unsubscribed: true \u2014 contact will not receive any broadcasts.
|
|
@@ -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,
|
|
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,Ce,i),n=wi(t.properties,i),s={...zt(r),...t.unsubscribed!==void 0&&{unsubscribed:t.unsubscribed},...n&&{properties:n}};await F({loading:"Updating contact...",sdkCall:a=>a.contacts.update(s),errorCode:"update_error",successMsg:`Contact updated: ${r}`},i)});X();var Cd=new d("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",c({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,
|
|
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,Ce,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"});R(u)&&O("Cancelled."),s=u}let a=xi(s,i),l=await de("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}`):M(l,{json:i.json})});var xd=new d("contacts").description("Manage contacts").addHelpText("after",c({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(
|
|
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(id).addCommand(nd).addCommand(hd,{isDefault:!0}).addCommand(yd).addCommand(rd).addCommand(Ad).addCommand(od).addCommand(gd).addCommand(bd).addCommand(Cd).addCommand(fd);var wd=new d("docs").description("Open the Resend documentation in your browser").addHelpText("after",c({context:"Opens https://resend.com/docs in your default browser.",examples:["resend docs"]})).action(async(e,t)=>{let o=t.optsWithGlobals();await Te(he.documentation,o)});ye();Sr();ei();X();Uo();Kt();var Nr="TimeoutError",_d=(e,t)=>{let o,i=new Promise((r,n)=>{o=setTimeout(()=>{let s=new Error(`Operation timed out after ${t}ms`);s.name=Nr,n(s)},t)});return Promise.race([e,i]).finally(()=>{clearTimeout(o)})};var ug=5e3;function mg(e){return e instanceof Error&&e.name===Rr}async function pg(){try{let e=await fetch(Hr,{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 fg(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 hg(e){let t;try{t=await Rt(e)}catch(r){let n=mg(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 _d(r.domains.list(),ug);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===Nr?{name:"API Validation",status:"warn",message:"Request timed out"}:{name:"API Validation",status:"fail",message:W(r,`Failed to validate ${i}`)}}}var Fd=new d("doctor").description("Check CLI version, API key, and domain status").addHelpText("after",c({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?
|
|
618
|
+
`);let n=r?le("Checking CLI version..."):null,s=await pg();i.push(s),s.status==="warn"?n?.warn(s.message):n?.stop(s.message),n=r?le("Checking API key..."):null;let a=await fg(o.apiKey);i.push(a),a.status==="fail"?n?.fail(a.message):n?.stop(a.message),n=r?le("Checking credential storage..."):null;let l=await rt(),u=Ke(),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?le("Validating API key & domains..."):null;let f=await hg(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(""):M({ok:!y,checks:i},{json:o.json}),y&&process.exit(1)});var Rd=new d("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 q("--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",c({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 E(e.name,{message:"Domain name to claim",placeholder:"example.com"},{message:"Missing --name flag.",code:"missing_name"},o);await P({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 Dd=new d("get").description("Retrieve the latest claim for a domain").argument("[id]","Domain ID (the placeholder domain created by the claim)").addHelpText("after",c({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 B({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 Td=new d("verify").description("Trigger DNS verification and transfer for a domain claim").argument("[id]","Domain ID (the placeholder domain created by the claim)").addHelpText("after",c({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 F({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 Od=new d("claim").description("Claim a domain already verified by another Resend account").addHelpText("after",c({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(
|
|
630
|
-
DNS Records to configure:`),console.log(
|
|
631
|
-
Run \`resend domains verify ${r.id}\` after configuring DNS.`)}},o)});var
|
|
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(Rd).addCommand(Dd).addCommand(Td);var Ed=new d("create").description("Create a new domain and receive DNS records to configure").option("--name <domain>","Domain name (e.g. example.com)").addOption(new q("--region <region>","Sending region").choices(["us-east-1","eu-west-1","sa-east-1","ap-northeast-1"])).addOption(new q("--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",c({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 E(e.name,{message:"Domain name",placeholder:"example.com"},{message:"Missing --name flag.",code:"missing_name"},o);await P({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
|
+
DNS Records to configure:`),console.log(di(r.records,r.name)),console.log(`
|
|
631
|
+
Run \`resend domains verify ${r.id}\` after configuring DNS.`)}},o)});var Bd=new d("delete").alias("rm").description("Delete a domain").argument("[id]","Domain ID").option("--yes","Skip confirmation prompt").addHelpText("after",c({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 Id=new d("get").description("Retrieve a domain with its DNS records and current verification status").argument("[id]","Domain ID").addHelpText("after",c({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(
|
|
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 B({loading:"Fetching domain...",sdkCall:n=>n.domains.get(r),onInteractive:n=>{console.log(`${n.name} \u2014 ${Ua(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(di(n.records,n.name)))}},i)});var jd=new d("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",c({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=D(e.limit,o),r=I(i,e.after,e.before,o);await S({loading:"Fetching domains...",sdkCall:n=>n.domains.list(r),onInteractive:n=>{console.log(va(n.data)),T(n,"domains list",{limit:i,before:e.before,apiKey:o.apiKey,profile:o.profile})}},o)});var Pd=new d("update").description("Update domain settings: TLS mode, tracking, and tracking subdomain").argument("[id]","Domain ID").addOption(new q("--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",c({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 F({loading:"Updating domain...",sdkCall:m=>m.domains.update(u),errorCode:"update_error",successMsg:`Domain updated: ${r}`},i)});var $d=new d("verify").description("Trigger async DNS verification for a domain").argument("[id]","Domain ID").addHelpText("after",c({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 F({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 Gd=new d("domains").description("Manage verified sending and receiving domains").addHelpText("after",c({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(
|
|
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,
|
|
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(Ed).addCommand($d).addCommand(Id).addCommand(jd,{isDefault:!0}).addCommand(Pd).addCommand(Bd).addCommand(Od);var Le={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 Hd(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 Si(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 Qd=new d("attachment").description("Retrieve a single attachment from a sent (outbound) email").argument("[emailId]","Email UUID").argument("[attachmentId]","Attachment UUID").addHelpText("after",c({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,Le,r),s=await g(t,Hd(n),r);await B({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 Nd=new d("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",c({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,
|
|
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,Le,i),n=D(t.limit,i),s=I(n,t.after,t.before,i);await S({loading:"Fetching attachments...",sdkCall:a=>a.emails.attachments.list({emailId:r,...s}),onInteractive:a=>{console.log(Si(a.data)),T(a,`emails attachments ${r}`,{limit:n,before:t.before,apiKey:i.apiKey,profile:i.profile})}},i)});X();var Md=new d("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 q("--batch-validation <mode>","Validation mode: strict (default, fail all on error) or permissive (partial success)").choices(["strict","permissive"])).addHelpText("after",c({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
|
|
|
@@ -653,55 +653,55 @@ File format (--file path):
|
|
|
653
653
|
[
|
|
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
|
-
]`,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
|
|
657
|
-
${p.length} email${p.length===1?"":"s"} failed:`);for(let f of p)console.warn(` [${f.index}] ${f.message}`)}}else
|
|
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,
|
|
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 E(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 qe(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 de("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 M(p&&p.length>0?{data:m,errors:p}:m,{json:o.json})});var qd=new d("cancel").description("Cancel a scheduled email").argument("[id]","Email ID").addHelpText("after",c({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,Le,i);await F({loading:"Cancelling email...",sdkCall:n=>n.emails.cancel(r),errorCode:"cancel_error",successMsg:`Email cancelled: ${r}`},i)});var Ld=new d("get").description("Retrieve a sent email by ID").argument("[id]","Email ID").addHelpText("after",c({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,Le,i);await B({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 gg(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 Wd=new d("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",c({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=D(e.limit,o),r=I(i,e.after,e.before,o);await S({loading:"Fetching sent emails...",sdkCall:n=>n.emails.list(r),onInteractive:n=>{console.log(gg(n.data)),T(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 bg(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 Jd=new d("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 q("--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",c({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 B({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(bg(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 Vd(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 zd(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 Yd=new d("attachment").description("Retrieve a single attachment from a received (inbound) email").argument("[emailId]","Received email UUID").argument("[attachmentId]","Attachment UUID").addHelpText("after",c({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,Vd(n),r);await B({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 Xd=new d("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",c({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=D(t.limit,i),s=I(n,t.after,t.before,i);await S({loading:"Fetching attachments...",sdkCall:a=>a.emails.receiving.attachments.list({emailId:r,...s}),onInteractive:a=>{console.log(Si(a.data)),T(a,`emails receiving attachments ${r}`,{limit:n,before:t.before,apiKey:i.apiKey,profile:i.profile})}},i)});var Zd=new d("forward").description("Forward a received email").argument("[id]","Received email ID").requiredOption("--to <addresses...>","Recipient address(es)").requiredOption("--from <address>","Sender address").addHelpText("after",c({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 P({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 ec=new d("get").description("Retrieve a single received (inbound) email with full details including HTML, text, and headers").argument("[id]","Received email UUID").addHelpText("after",c({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
|
|
671
|
-
(HTML body only \u2014 use --json to view or pipe to a browser)`)}},i)});var
|
|
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 B({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
|
+
(HTML body only \u2014 use --json to view or pipe to a browser)`)}},i)});var tc=new d("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",c({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=
|
|
677
|
-
`)}},
|
|
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=D(e.limit,o),r=I(i,e.after,e.before,o);await S({loading:"Fetching received emails...",sdkCall:n=>n.emails.receiving.list(r),onInteractive:n=>{console.log(zd(n.data)),T(n,"emails receiving list",{limit:i,before:e.before,apiKey:o.apiKey,profile:o.profile})}},o)});var at=me(Je(),1);X();var oc=(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 Mr=100,ic=5,qr=()=>new Date().toLocaleTimeString("en-GB",{hour12:!1}),yg=(e,t)=>{if(t)console.log(JSON.stringify(e));else{let o=e.to.map(pe).join(", "),i=at.default.dim(`[${qr()}]`),r=pe(e.subject),n=r.length>50?`${r.slice(0,47)}...`:r,s=pe(e.from),a=pe(e.id);process.stderr.write(`${i} ${s} -> ${o} ${at.default.bold(`"${n}"`)} ${at.default.dim(a)}
|
|
677
|
+
`)}},Cg=(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}},rc=new d("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",c({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
|
|
|
680
680
|
Interactive output shows one line per email. When piped (or with --json),
|
|
681
681
|
output is NDJSON (one JSON object per line).
|
|
682
682
|
|
|
683
|
-
Ctrl+C exits cleanly.`,examples:["resend emails receiving listen","resend emails receiving listen --interval 10","resend emails receiving listen --json | head -3"]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=Number.parseInt(e.interval??"5",10);(Number.isNaN(i)||i<2)&&h({message:"Polling interval must be at least 2 seconds.",code:"invalid_interval"},{json:o.json});let r=await ee(o),n=o.json||!w(),s=
|
|
683
|
+
Ctrl+C exits cleanly.`,examples:["resend emails receiving listen","resend emails receiving listen --interval 10","resend emails receiving listen --json | head -3"]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=Number.parseInt(e.interval??"5",10);(Number.isNaN(i)||i<2)&&h({message:"Polling interval must be at least 2 seconds.",code:"invalid_interval"},{json:o.json});let r=await ee(o),n=o.json||!w(),s=le("Connecting...",o.quiet||n),a=oc(),l=0;try{let{data:b,error:x}=await r.emails.receiving.list({limit:1});(x||!b)&&(s.fail("Failed to connect"),h({message:x?.message??"Unexpected empty response",code:"list_error"},{json:o.json}));for(let v of b.data)a.add(v.id);s.stop("Ready")}catch(b){s.fail("Failed to connect"),h({message:W(b,"Unknown error"),code:"list_error"},{json:o.json})}n||(process.stderr.write(`
|
|
684
684
|
`),process.stderr.write(` ${at.default.bold("Polling:")} every ${i}s
|
|
685
685
|
`),process.stderr.write(`
|
|
686
686
|
Listening for new inbound emails. Press Ctrl+C to stop.
|
|
687
687
|
|
|
688
|
-
`));let u=b=>{l++,n||process.stderr.write(`${at.default.dim(`[${
|
|
689
|
-
`),l>=5&&h({message:"Exiting after 5 consecutive API failures.",code:"poll_error"},{json:o.json})},m=async(b,x,v)=>{if(v<=0)return{emails:x,hasMore:!0};let U=b?{limit:
|
|
690
|
-
`)},y=async()=>{try{let b=await m(void 0,[],
|
|
688
|
+
`));let u=b=>{l++,n||process.stderr.write(`${at.default.dim(`[${qr()}]`)} ${at.default.yellow("Warning:")} ${b}
|
|
689
|
+
`),l>=5&&h({message:"Exiting after 5 consecutive API failures.",code:"poll_error"},{json:o.json})},m=async(b,x,v)=>{if(v<=0)return{emails:x,hasMore:!0};let U=b?{limit:Mr,after:b}:{limit:Mr},{data:K,error:k}=await bo(()=>r.emails.receiving.list(U));if(k||!K)return{emails:x,error:k?.message??"Empty response",hasMore:!1};let{newEmails:j,foundSeen:G}=Cg(K.data,a),N=[...x,...j];if(G||!K.has_more)return{emails:N,hasMore:!1};let $=K.data[K.data.length-1]?.id;return $?m($,N,v-1):{emails:N,hasMore:!0}},p,f=()=>{let b=`Hit page cap of ${ic*Mr} emails this poll; remaining will be picked up next tick.`;n?console.log(JSON.stringify({warning:"page_cap_reached",message:b})):process.stderr.write(`${at.default.dim(`[${qr()}]`)} ${at.default.yellow("Warning:")} ${b}
|
|
690
|
+
`)},y=async()=>{try{let b=await m(void 0,[],ic);b.error&&u(b.error),b.hasMore&&f();let x=b.emails.toReversed();for(let v of x)a.add(v.id);if(b.emails.length>0){l=0;for(let v of x)yg(v,n)}else b.error||(l=0)}catch(b){u(W(b,"Unknown error"))}finally{p=setTimeout(y,i*1e3)}};p=setTimeout(y,i*1e3);let A=()=>{clearTimeout(p),n||process.stderr.write(`
|
|
691
691
|
Stopped listening.
|
|
692
|
-
`),process.exit(Mt())};
|
|
693
|
-
resend domains update <id> --receiving enabled`,examples:["resend emails receiving list","resend emails receiving listen","resend emails receiving get <email-id>","resend emails receiving attachments <email-id>","resend emails receiving attachment <email-id> <attachment-id>","resend emails receiving forward <email-id> --to delivered@resend.dev --from onboarding@resend.dev"]})).addCommand(
|
|
692
|
+
`),process.exit(Mt())};ni(A),process.on("SIGTERM",A),await new Promise(()=>{})});var nc=new d("receiving").description("Manage received (inbound) emails \u2014 requires domain receiving to be enabled").addHelpText("after",c({context:`Receiving must be enabled on the domain first:
|
|
693
|
+
resend domains update <id> --receiving enabled`,examples:["resend emails receiving list","resend emails receiving listen","resend emails receiving get <email-id>","resend emails receiving attachments <email-id>","resend emails receiving attachment <email-id> <attachment-id>","resend emails receiving forward <email-id> --to delivered@resend.dev --from onboarding@resend.dev"]})).addCommand(tc,{isDefault:!0}).addCommand(ec).addCommand(rc).addCommand(Xd).addCommand(Yd).addCommand(Zd);var dc=require("node:fs"),cc=require("node:path");var xg=/;(cid|type|filename)=/,sc=/;[\w-]+=/,wg={cid:"contentId",type:"contentType",filename:"filename"};function ac(e){let t=e.split(xg),o=t[0];if(!o)throw new Error(`Missing file path or URL in attachment "${e}".`);if(sc.test(o))throw new Error(`Unrecognized attachment parameter in "${e}". Supported: ;cid=, ;type=, ;filename= (use --attachments-file for paths containing ";key=").`);let i={source:o,isUrl:/^https?:\/\//i.test(o)};for(let r=1;r<t.length;r+=2){let n=t[r],s=t[r+1],a=wg[n];if(i[a]!==void 0)throw new Error(`Duplicate ";${n}=" in attachment "${e}".`);if(!s)throw new Error(`Empty ";${n}=" in attachment "${e}".`);if(a!=="contentType"&&sc.test(s))throw new Error(`Unrecognized attachment parameter in "${e}". Supported: ;cid=, ;type=, ;filename= (use --attachments-file for paths containing ";key=").`);i[a]=s}return i}var vg={content_type:"contentType",content_id:"contentId"},Ug=new Set(["content","filename","path","contentType","contentId"]);function lc(e){let t;try{t=JSON.parse(e)}catch{throw new Error("Attachments file is not valid JSON.")}if(!Array.isArray(t))throw new Error("Attachments file must contain a JSON array of attachment objects.");return t.map((o,i)=>{if(o===null||typeof o!="object"||Array.isArray(o))throw new Error(`Attachment at index ${i} must be a JSON object.`);let r={};for(let[n,s]of Object.entries(o)){let a=vg[n]??n;if(!Ug.has(a))throw new Error(`Attachment at index ${i} has unsupported field "${n}". Supported: content, filename, path, content_type/contentType, content_id/contentId.`);if(a in r)throw new Error(`Attachment at index ${i} sets "${a}" more than once (snake_case and camelCase are aliases).`);if(typeof s!="string")throw new Error(`Attachment at index ${i}: "${n}" must be a string.`);r[a]=s}if(!r.content&&!r.path)throw new Error(`Attachment at index ${i} must include "content" (base64) or "path" (hosted URL).`);return r})}X();function Sg(e){let{attachments:t,...o}=e;return t?.length?{...o,attachments:t.map(i=>({...i.filename!==void 0&&{filename:i.filename},...i.path&&{path:i.path},...i.contentType&&{contentType:i.contentType},...i.contentId&&{contentId:i.contentId},...i.content!==void 0&&{byteLength:Buffer.isBuffer(i.content)?i.content.byteLength:Buffer.byteLength(String(i.content),"utf8")}}))}:o}var uc=new d("send").description("Send an email").option("--from <address>","Sender address (required unless using --template)").option("--to <addresses...>","Recipient address(es) (required)").option("--subject <subject>","Email subject (required unless using --template)").option("--html <html>","HTML body").option("--html-file <path>",'Path to an HTML file for the body (use "-" for stdin)').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 send").option("--cc <addresses...>","CC recipients").option("--bcc <addresses...>","BCC recipients").option("--reply-to <address>","Reply-to address").option("--scheduled-at <datetime>",'Schedule email for later \u2014 ISO 8601 or natural language e.g. "in 1 hour", "tomorrow at 9am ET"').option("--attachment <specs...>","File path or URL to attach, with optional ;cid= ;type= ;filename= params (quote the value)").option("--attachments-file <path>",'Path to a JSON array of attachment objects (use "-" for stdin)').option("--headers <key=value...>","Custom headers as key=value pairs (e.g. X-Entity-Ref-ID=123)").option("--tags <name=value...>","Email tags as name=value pairs (e.g. category=marketing)").option("--idempotency-key <key>","Deduplicate this send request using this key").option("--dry-run","Validate input and print the request JSON without calling the API (interactive: verified-domain list is not fetched)").option("--template <id>","Template ID to use").option("--var <key=value...>","Template variables as key=value pairs (repeatable, e.g. --var name=John --var count=42)").addHelpText("after",c({context:`Required: --to and either --template, --react-email, or (--from, --subject, and one of --text | --text-file | --html | --html-file).
|
|
694
694
|
Attachments: --attachment takes a local path or https:// URL plus optional ;cid= (inline content-id), ;type= (MIME type), ;filename= params. Always double-quote values containing ";" \u2014 required on every shell (bash, PowerShell, cmd). For paths containing ";key=" or scripted use, pass a JSON array via --attachments-file.
|
|
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
|
-
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(
|
|
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(K=>K==="-").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(K=>{let k=K.indexOf("=");k<1&&h({message:`Invalid var format: "${K}". Expected key=value.`,code:"invalid_var"},{json:o.json});let j=K.slice(0,k),G=K.slice(k+1);return[j,G]})):void 0,s=e.from;if(!e.dryRun&&!s&&!r&&w()&&!o.json){let K=await ee(o,{permission:"sending_access"}),k=await fi(K);k.length>0&&(s=await hi(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 xa({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
|
|
698
|
+
`),m=ie(e.textFile,o)),e.reactEmail&&(u=await qe(e.reactEmail,o));let p=m;!r&&!e.reactEmail&&!u&&!m&&(p=await E(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(K=>{let k;try{k=ac(K)}catch(G){return h({message:G.message,code:"invalid_attachment"},{json:o.json})}let j={...k.contentType&&{contentType:k.contentType},...k.contentId&&{contentId:k.contentId}};if(k.isUrl)return{path:k.source,...k.filename&&{filename:k.filename},...j};try{let G=(0,dc.readFileSync)(k.source);return{filename:k.filename??(0,cc.basename)(k.source),content:G,...j}}catch{return h({message:`Failed to read file: ${k.source}`,code:"file_read_error"},{json:o.json})}});if(e.attachmentsFile!==void 0){let K=ie(e.attachmentsFile,o);try{y=[...y??[],...lc(K)]}catch(k){h({message:k.message,code:"invalid_attachment"},{json:o.json})}}let A=e.headers?Object.fromEntries(e.headers.map(K=>{let k=K.indexOf("=");return k<1&&h({message:`Invalid header format: "${K}". Expected key=value.`,code:"invalid_header"},{json:o.json}),[K.slice(0,k),K.slice(k+1)]})):void 0,b=e.tags?.map(K=>{let k=K.indexOf("=");return k<1&&h({message:`Invalid tag format: "${K}". Expected name=value.`,code:"invalid_tag"},{json:o.json}),{name:K.slice(0,k),value:K.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){M({dryRun:!0,request:Sg(x)},{json:o.json});return}let v=await ee(o,{permission:"sending_access"}),U=await de(e.scheduledAt?"Scheduling email...":"Sending email...",()=>v.emails.send(x,e.idempotencyKey?{idempotencyKey:e.idempotencyKey}:void 0),"send_error",o);!o.json&&w()?e.scheduledAt?console.log(`Email scheduled: ${U.id}`):console.log(`Email sent: ${U.id}`):M(U,{json:o.json})});var Lr=me(Je(),1);var mc=new d("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",c({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,Le,i);await P({loading:"Creating share link...",sdkCall:n=>n.emails.share(r,t.expiresIn!==void 0?{expiresIn:t.expiresIn}:void 0),onInteractive:n=>{console.log(` ${Lr.default.gray("ID:")} ${n.id}`),console.log(` ${Lr.default.gray("URL:")} ${n.url}`)}},i)});var pc=new d("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",c({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,Le,i);await F({loading:"Updating email...",sdkCall:n=>n.emails.update({id:r,scheduledAt:t.scheduledAt}),errorCode:"update_error",successMsg:`Email updated: ${r}`},i)});var fc=new d("emails").description("Send and manage emails").addHelpText("after",c({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(Wd,{isDefault:!0}).addCommand(uc).addCommand(Ld).addCommand(Md).addCommand(qd).addCommand(pc).addCommand(mc).addCommand(Jd).addCommand(Nd).addCommand(Qd).addCommand(nc);var Kg=new Set(["string","number","boolean","date"]);function Wr(e){if(!e)return"(none)";let t=Object.entries(e);return t.length===0?"(empty)":t.map(([o,i])=>`${o}:${i}`).join(", ")}function hc(e){let t=e.map(o=>[o.name,Wr(o.schema),o.created_at,o.id]);return _(["Name","Schema","Created","ID"],t,"(no events)")}function Ki(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"||!Kg.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 gc=new d("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",c({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
|
|
704
|
-
This cannot be undone.`,loading:"Deleting event...",object:"event",successMsg:"Event deleted",sdkCall:n=>n.events.remove(r)},i)});var
|
|
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 E(e.name,{message:"Event name",placeholder:"e.g. user.signed_up"},{message:"Missing --name flag.",code:"missing_name"},o),r=e.schema?Ki(e.schema,o):void 0;await P({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 Ac=new d("delete").alias("rm").description("Delete an event definition").argument("[id]","Event ID").option("--yes","Skip confirmation prompt").addHelpText("after",c({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 bc=new d("get").description("Retrieve an event definition").argument("[id]","Event ID").addHelpText("after",c({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 B({loading:"Fetching event...",sdkCall:n=>n.events.get(r),onInteractive:n=>{console.log(n.name),console.log(`ID: ${n.id}`),console.log(`Schema: ${Wr(n.schema)}`),console.log(`Created: ${n.created_at}`),n.updated_at&&console.log(`Updated: ${n.updated_at}`)}},i)});var yc=new d("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",c({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=D(e.limit,o),r=I(i,e.after,e.before,o);await S({loading:"Fetching events...",sdkCall:n=>n.events.list(r),onInteractive:n=>{console.log(hc(n.data)),T(n,"events list",{limit:i,before:e.before,apiKey:o.apiKey,profile:o.profile})}},o)});var Cc=new d("open").description("Open the events page in the Resend dashboard").addHelpText("after",c({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(he.events,o)});var xc=new d("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",c({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
|
|
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 E(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 E(void 0,{message:"Contact ID"},{message:"Missing contact ID.",code:"missing_contact"},o):n=await E(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 F({loading:"Sending event...",sdkCall:l=>l.events.send(a),errorCode:"send_error",successMsg:`Event sent: ${i}`},o)});X();var wc=new d("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",c({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
|
|
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 E(void 0,{message:'Schema JSON (or "null" to clear)',placeholder:'{"field":"string"}'},{message:"Missing --schema flag.",code:"missing_schema"},i));let s=Ki(n,i);await F({loading:"Updating event...",sdkCall:a=>a.events.update(r,{schema:s}),errorCode:"update_error",successMsg:`Event updated: ${r}`},i)});var vc=new d("events").description("Manage events").addHelpText("after",c({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,110 +723,122 @@ 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(
|
|
727
|
-
|
|
728
|
-
|
|
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(gc).addCommand(bc).addCommand(yc,{isDefault:!0}).addCommand(wc).addCommand(Ac).addCommand(Cc).addCommand(xc);var su=me(Je(),1);var H={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 Uc(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 Sc=new d("get").description("Retrieve an inbox's agent settings").option("--inbox_id <id>","Inbox UUID").addHelpText("after",c({context:"An inbox without a configured agent returns empty settings.",output:' {"object":"inbox_agent","instructions":"<text>|null","tone":"<tone>|null","enabled_actions":["draft_reply"]}',errorCodes:["auth_error","fetch_error"],examples:["resend inboxes agent get --inbox_id <inbox_id>","resend inboxes agent get --inbox_id <inbox_id> --json"]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=await g(e.inbox_id,H,o);await B({loading:"Fetching agent settings...",sdkCall:r=>r.inboxes.agent.get({inboxId:i}),onInteractive:r=>{console.log(`Instructions: ${r.instructions||"(none)"}`),console.log(`Tone: ${r.tone||"(none)"}`),console.log(`Enabled actions: ${r.enabled_actions.join(", ")||"(none)"}`)}},o)});var Kc=new d("update").description("Update an inbox's agent instructions, tone, or enabled actions").option("--inbox_id <id>","Inbox UUID").option("--instructions <text>","Instructions the agent follows (max 4000 characters)").option("--tone <tone>",'Tone the agent writes in, e.g. "friendly and concise" (max 64 characters)').option("--enabled_actions <actions...>",`Replace the enabled actions (comma or space-separated): ${Lo.join(", ")}`).addHelpText("after",c({context:`At least one of --instructions, --tone, or --enabled_actions is required.
|
|
727
|
+
Omitted fields keep their current value.
|
|
728
|
+
Pass --instructions "" or --tone "" to clear the value.
|
|
729
|
+
--enabled_actions replaces the whole set. Pass --enabled_actions "" to disable all actions.`,output:' {"object":"inbox_agent","id":"<uuid>"}',errorCodes:["auth_error","no_changes","invalid_enabled_actions","update_error"],examples:['resend inboxes agent update --inbox_id <inbox_id> --instructions "Answer refund questions yourself."',"resend inboxes agent update --inbox_id <inbox_id> --enabled_actions draft_reply add_labels --json",'resend inboxes agent update --inbox_id <inbox_id> --tone ""']})).action(async(e,t)=>{let o=t.optsWithGlobals();e.instructions===void 0&&e.tone===void 0&&e.enabled_actions===void 0&&h({message:"Provide at least one option to update: --instructions, --tone, or --enabled_actions.",code:"no_changes"},{json:o.json});let i=e.enabled_actions?.flatMap(a=>a.split(",")).map(a=>a.trim()).filter(Boolean),r=i?.filter(a=>!Lo.includes(a));r?.length&&h({message:`Invalid --enabled_actions value: ${r.join(", ")}. Use: ${Lo.join(", ")}.`,code:"invalid_enabled_actions"},{json:o.json});let n=await g(e.inbox_id,H,o),s={inboxId:n,...e.instructions!==void 0&&{instructions:e.instructions||null},...e.tone!==void 0&&{tone:e.tone||null},...i&&{enabledActions:i}};await F({loading:"Updating agent settings...",sdkCall:a=>a.inboxes.agent.update(s),errorCode:"update_error",successMsg:`Agent settings updated for inbox: ${n}`},o)});var kc=new d("agent").description("Manage an inbox's agent settings").addHelpText("after",c({context:`The agent settings set the instructions and the tone the inbox agent follows,
|
|
730
|
+
and which actions it is allowed to take.`,examples:["resend inboxes agent get --inbox_id <inbox_id>",'resend inboxes agent update --inbox_id <inbox_id> --tone "friendly and concise"']})).addCommand(Sc,{isDefault:!0}).addCommand(Kc);var _c=new d("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("--from_name <name>",'Name used when sending from this inbox, e.g. "Ada from Support" (a plain name, not "Name <email>")').option("--forwarding","Receive mail without an MX record \u2014 Resend returns a receiving address to forward mail to").addHelpText("after",c({context:`The address must belong to one of your verified domains.
|
|
731
|
+
Receiving must be enabled on the domain, unless you pass --forwarding.
|
|
732
|
+
|
|
733
|
+
Non-interactive: --email_address is required.`,output:' {"object":"inbox","id":"<uuid>","name":"<name>","email_address":"<address>","domain_id":"<uuid>","receiving_address":"<address>|null","from_name":"<name>|null","unread":0,"drafts":0,"last_received":"<date>|null","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" --from_name "Team Hello" --forwarding',"resend inboxes create --email_address support@yourdomain.com --json"]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=await E(e.email_address,{message:"Inbox email address",placeholder:"e.g. support@yourdomain.com"},{message:"Missing --email_address flag.",code:"missing_email_address"},o);await P({loading:"Creating inbox...",sdkCall:r=>r.inboxes.create({emailAddress:i,...e.name&&{name:e.name},...e.from_name!==void 0&&{fromName:e.from_name},...e.forwarding&&{forwarding:!0}}),onInteractive:r=>{console.log(`Inbox created: ${r.id}`),console.log(`Email address: ${r.email_address}`),r.receiving_address&&console.log(`Receiving address: ${r.receiving_address}`)}},o)});var Fc=new d("delete").alias("rm").description("Delete an inbox").argument("[id]","Inbox UUID").option("--yes","Skip the confirmation prompt (required in non-interactive mode)").addHelpText("after",c({context:`Warning: Deleting an inbox removes its threads and messages, and the address
|
|
729
734
|
stops receiving email.
|
|
730
735
|
|
|
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,
|
|
736
|
+
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,H,i);await z(r.id,!!t.yes,{confirmMessage:`Delete inbox "${r.label}"?
|
|
732
737
|
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
|
|
734
|
-
--reply_to_email_id are passed together.
|
|
735
|
-
|
|
738
|
+
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 Jr=(e,t)=>[...t,e],Rc=new d("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)",Jr,[]).option("--cc <address>","Cc address (repeatable)",Jr,[]).option("--bcc <address>","Bcc address (repeatable)",Jr,[]).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",c({context:`Creates a standalone draft, or a reply draft when --thread_id and
|
|
739
|
+
--reply_to_email_id are passed together. A reply draft does not copy
|
|
740
|
+
recipients from the email it replies to, so set --to before you send it.
|
|
741
|
+
At least one content field (--to, --cc, --bcc, --subject, --text, --html)
|
|
742
|
+
is required. Combined recipients cannot exceed 50.
|
|
736
743
|
|
|
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,
|
|
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
|
|
739
|
-
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(
|
|
744
|
+
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> --to customer@example.com --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,H,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 P({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,{limit:o,after:i})=>t.inboxes.drafts.list({inboxId:e,limit:o,...i&&{after:i}}),display:t=>({label:t.subject??t.to?.join(", ")??"(no subject)",hint:t.id})}}function Dc(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 Tc=new d("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",c({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,H,o),r=await J(e.draft_id,wt(i),o);await z(r.id,!!e.yes,{confirmMessage:`Delete draft "${r.label}"?
|
|
745
|
+
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 Oc=new d("get").description("Retrieve a draft by ID").option("--inbox_id <id>","Inbox UUID").option("--draft_id <id>","Draft UUID").addHelpText("after",c({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,H,o),r=await g(e.draft_id,wt(i),o);await B({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 Ec=new d("list").alias("ls").description("List drafts in an inbox").option("--inbox_id <id>","Inbox UUID").option("--limit <n>","Maximum number of drafts to return (1-100)","10").option("--after <cursor>","Cursor for forward pagination \u2014 list drafts after this draft ID").option("--before <cursor>","Cursor for backward pagination \u2014 list drafts before this draft ID").addHelpText("after",c({context:"Pass the last draft ID of the previous page as --after to fetch the next page.",output:' {"object":"list","has_more":false,"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","invalid_limit","invalid_pagination","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","resend inboxes drafts list --inbox_id 78261eea-8f8b-4381-83c6-79fa7120f1cf --limit 25 --after <draft_id> --json"]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=D(e.limit,o),r=I(i,e.after,e.before,o),n=await g(e.inbox_id,H,o);await S({loading:"Fetching drafts...",sdkCall:s=>s.inboxes.drafts.list({inboxId:n,...r}),onInteractive:s=>{console.log(Dc(s.data)),T(s,"inboxes drafts list",{limit:i,before:e.before,apiKey:o.apiKey,profile:o.profile,extraFlags:`--inbox_id ${n}`})}},o)});var Bc=new d("send").description("Send a draft").option("--inbox_id <id>","Inbox UUID").option("--draft_id <id>","Draft UUID").addHelpText("after",c({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,H,o),r=await g(e.draft_id,wt(i),o);await F({loading:"Sending draft...",sdkCall:n=>n.inboxes.drafts.send({inboxId:i,draftId:r}),errorCode:"send_error",successMsg:`Draft sent: ${r}`},o)});var Vr=(e,t)=>[...t,e],Ic=new d("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)",Vr,[]).option("--cc <address>","Replace cc addresses (repeatable)",Vr,[]).option("--bcc <address>","Replace bcc addresses (repeatable)",Vr,[]).option("--subject <subject>","New subject").option("--text <text>","New plain text body").option("--html <html>","New HTML body").addHelpText("after",c({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,H,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 F({loading:"Updating draft...",sdkCall:a=>a.inboxes.drafts.update(s),errorCode:"update_error",successMsg:`Draft updated: ${n}`},o)});var jc=new d("drafts").description("Manage email drafts in an inbox").addHelpText("after",c({context:`Drafts are unsent emails in an inbox \u2014 standalone, or replies when created
|
|
746
|
+
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(Ec,{isDefault:!0}).addCommand(Rc).addCommand(Oc).addCommand(Ic).addCommand(Tc).addCommand(Bc);var Pc=new d("get").description("Retrieve an inbox by ID or email address").argument("[id]","Inbox UUID or inbox email address").addHelpText("after",c({output:' {"object":"inbox","id":"<uuid>","name":"<name>","email_address":"<address>","domain_id":"<uuid>","receiving_address":"<address>|null","from_name":"<name>|null","unread":0,"drafts":0,"last_received":"<date>|null","created_at":"<date>"}',errorCodes:["auth_error","fetch_error"],examples:["resend inboxes get 78261eea-8f8b-4381-83c6-79fa7120f1cf","resend inboxes get 78261eea-8f8b-4381-83c6-79fa7120f1cf --json","resend inboxes get support@yourdomain.com --json"]})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,H,i);await B({loading:"Fetching inbox...",sdkCall:n=>n.inboxes.get(r),onInteractive:n=>{console.log(`${n.email_address}`),console.log(`ID: ${n.id}`),console.log(`Name: ${n.name}`),n.from_name&&console.log(`From name: ${n.from_name}`),n.receiving_address&&console.log(`Receiving address: ${n.receiving_address}`),console.log(`Unread: ${n.unread}`),console.log(`Drafts: ${n.drafts}`),n.last_received&&console.log(`Last received: ${n.last_received}`)}},i)});var $c=new d("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 q("--color <color>","Label color (random when omitted)").choices(Wo)).addHelpText("after",c({context:`An inbox can have up to 100 labels.
|
|
740
747
|
|
|
741
|
-
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,
|
|
748
|
+
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,H,o),r=await E(e.name,{message:"Label name",placeholder:"e.g. Billing"},{message:"Missing --name flag.",code:"missing_name"},o);await P({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 Gc(e){let t=e.map(o=>[o.name,o.color,o.created_at,o.id]);return _(["Name","Color","Created","ID"],t,"(no labels)")}var Hc=new d("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",c({context:`The label is removed from every thread that has it. Threads themselves are
|
|
742
749
|
not deleted.
|
|
743
750
|
|
|
744
|
-
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,
|
|
751
|
+
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,H,o),r=await J(e.label_id,ki(i),o);await z(r.id,!!e.yes,{confirmMessage:`Delete label "${r.label}"?
|
|
745
752
|
ID: ${r.id}
|
|
746
|
-
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
|
|
753
|
+
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 Qc=new d("list").alias("ls").description("List labels in an inbox").option("--inbox_id <id>","Inbox UUID").addHelpText("after",c({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","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,H,o);await S({loading:"Fetching labels...",sdkCall:r=>r.inboxes.labels.list({inboxId:i}),onInteractive:r=>console.log(Gc(r.data))},o)});var Nc=new d("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 q("--color <color>","New label color").choices(Wo)).addHelpText("after",c({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,H,o),r=await g(e.label_id,ki(i),o);await F({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 Mc=new d("labels").description("Manage labels for organizing threads in an inbox").addHelpText("after",c({context:`Labels organize threads within an inbox. Apply one with
|
|
747
754
|
"resend inboxes threads update --inbox_id <inbox_id> --thread_id <thread_id> --label_id <label_id>" and
|
|
748
|
-
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(
|
|
755
|
+
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(Qc,{isDefault:!0}).addCommand($c).addCommand(Nc).addCommand(Hc);var qc=new d("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",c({output:' {"object":"list","has_more":false,"data":[{"id":"<uuid>","name":"<name>|null","email_address":"<address>","from_name":"<name>|null","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=D(e.limit,o),r=I(i,e.after,e.before,o);await S({loading:"Fetching inboxes...",sdkCall:n=>n.inboxes.list(r),onInteractive:n=>{console.log(Uc(n.data)),T(n,"inboxes list",{limit:i,before:e.before,apiKey:o.apiKey,profile:o.profile})}},o)});function Ee(e){return{resource:"thread",resourcePlural:"threads",fetchItems:(t,{limit:o,after:i})=>t.inboxes.threads.list({inboxId:e,limit:o,...i&&{after:i}}),display:t=>({label:t.subject??"(no subject)",hint:t.id})}}function Lc(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)")}function Wc(e){let t=e.map(o=>[o.direction,o.from,o.subject??"(no subject)",o.received_at,o.id]);return _(["Direction","From","Subject","Received","ID"],t,"(no emails)")}var Jc=new d("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",c({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,H,o),r=await J(e.thread_id,Ee(i),o);await z(r.id,!!e.yes,{confirmMessage:`Delete thread "${r.label}"?
|
|
749
756
|
ID: ${r.id}
|
|
750
|
-
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
|
|
751
|
-
|
|
757
|
+
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 zr=(e,t)=>[...t,e],Vc=new d("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 emails list")').option("--to <address>","Recipient address (repeat the flag for multiple recipients)",zr,[]).option("--cc <address>","Cc address (repeat the flag for multiple addresses)",zr,[]).option("--bcc <address>","Bcc address (repeat the flag for multiple addresses)",zr,[]).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",c({context:`Forwards the email from the inbox address. --to is required; --text/--html add an optional note.
|
|
758
|
+
--to, --cc, and --bcc combined cannot exceed 50 recipients.`,output:' {"id":"<uuid>","email_id":"<uuid>","direction":"outbound","from":"<inbox-address>","to":["<recipient>"],"cc":[],"bcc":[],"reply_to":[],"subject":"<subject>|null","message_id":"<message-id>|null","html":"<html>|null","text":"<text>|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 --cc c@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,H,o),r=await g(e.thread_id,Ee(i),o),n=await E(e.email_id,{message:"Email ID to forward",placeholder:'from "threads emails list"'},{message:"Missing --email_id flag.",code:"missing_id"},o);await P({loading:"Forwarding email...",sdkCall:s=>s.inboxes.threads.emails.forward({inboxId:i,threadId:r,emailId:n,to:e.to,...e.cc.length>0&&{cc:e.cc},...e.bcc.length>0&&{bcc:e.bcc},...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 zc=new d("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 emails list")').addHelpText("after",c({output:' {"id":"<uuid>","direction":"inbound|outbound","from":"<sender>","to":[],"cc":[],"bcc":[],"reply_to":[],"subject":"<subject>|null","message_id":"<message-id>|null","html":"<html>|null","text":"<text>|null","attachments":[{"id":"<id>","filename":"<name>|null","size":123|null}],"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,H,o),r=await g(e.thread_id,Ee(i),o),n=await E(e.email_id,{message:"Email ID",placeholder:'from "threads emails list"'},{message:"Missing --email_id flag.",code:"missing_id"},o);await B({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 Yc=new d("list").alias("ls").description("List the emails in a thread").option("--inbox_id <id>","Inbox UUID").option("--thread_id <id>","Thread UUID").option("--limit <n>","Maximum number of emails to return (1-100)","10").option("--after <cursor>","Cursor for forward pagination \u2014 list emails after this email ID").option("--before <cursor>","Cursor for backward pagination \u2014 list emails before this email ID").addHelpText("after",c({context:`Emails are ordered oldest first and include their html and text bodies.
|
|
759
|
+
Pass the last email ID of the previous page as --after to fetch the next page.`,output:' {"object":"list","has_more":false,"data":[{"id":"<uuid>","direction":"inbound|outbound","from":"<sender>","to":[],"cc":[],"bcc":[],"reply_to":[],"subject":"<subject>|null","message_id":"<message-id>|null","html":"<html>|null","text":"<text>|null","attachments":[],"read":true,"received_at":"<date>"}]}',errorCodes:["auth_error","invalid_limit","invalid_pagination","list_error"],examples:["resend inboxes threads emails list --inbox_id <inbox_id> --thread_id <thread_id>","resend inboxes threads emails list --inbox_id <inbox_id> --thread_id <thread_id> --json","resend inboxes threads emails list --inbox_id <inbox_id> --thread_id <thread_id> --limit 25 --after <email_id> --json"]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=D(e.limit,o),r=I(i,e.after,e.before,o),n=await g(e.inbox_id,H,o),s=await g(e.thread_id,Ee(n),o);await S({loading:"Fetching emails...",sdkCall:a=>a.inboxes.threads.emails.list({inboxId:n,threadId:s,...r}),onInteractive:a=>{console.log(Wc(a.data)),T(a,"inboxes threads emails list",{limit:i,before:e.before,apiKey:o.apiKey,profile:o.profile,extraFlags:`--inbox_id ${n} --thread_id ${s}`})}},o)});var Xc=(e,t)=>[...t,e],Zc=new d("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 emails list")').option("--cc <address>","Cc address (repeat the flag for multiple addresses)",Xc,[]).option("--bcc <address>","Bcc address (repeat the flag for multiple addresses)",Xc,[]).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",c({context:`Sends the reply from the inbox address. The recipient comes from the original email.
|
|
760
|
+
At least one of --text or --html is required.
|
|
761
|
+
--cc and --bcc are not copied from the original email; pass them to add recipients.
|
|
762
|
+
The total number of recipients cannot exceed 50.`,output:' {"id":"<uuid>","email_id":"<uuid>","direction":"outbound","from":"<inbox-address>","to":["<recipient>"],"cc":[],"bcc":[],"reply_to":[],"subject":"<subject>|null","message_id":"<message-id>|null","html":"<html>|null","text":"<text>|null","attachments":[],"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','resend inboxes threads emails reply --inbox_id <inbox_id> --thread_id <thread_id> --email_id <email_id> --text "Looping in finance." --cc finance@example.com']})).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,H,o),s=await g(e.thread_id,Ee(n),o),a=await E(e.email_id,{message:"Email ID to reply to",placeholder:'from "threads emails list"'},{message:"Missing --email_id flag.",code:"missing_id"},o),l=i?{text:i,...r&&{html:r}}:{html:r};await P({loading:"Sending reply...",sdkCall:u=>u.inboxes.threads.emails.reply({inboxId:n,threadId:s,emailId:a,...l,...e.cc.length>0&&{cc:e.cc},...e.bcc.length>0&&{bcc:e.bcc},...e.subject&&{subject:e.subject}}),onInteractive:u=>{console.log(`Reply sent: ${u.email_id}`),console.log(`To: ${u.to.join(", ")}`)}},o)});var eu=new d("emails").description("Work with individual emails in a thread").addHelpText("after",c({context:'Email IDs come from "resend inboxes threads emails list", which lists the messages in a thread.',examples:["resend inboxes threads emails list --inbox_id <inbox_id> --thread_id <thread_id>","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(Yc,{isDefault:!0}).addCommand(zc).addCommand(Zc).addCommand(Vc);var tu=new d("get").description("Retrieve a thread").option("--inbox_id <id>","Inbox UUID").option("--thread_id <id>","Thread UUID").addHelpText("after",c({context:'Returns the thread summary. To read its messages, use "resend inboxes threads emails list".',output:' {"object":"inbox_thread","id":"<uuid>","subject":"<subject>|null","folder":"inbox|archive|spam|sent|trash","labels":[],"read":true}',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,H,o),r=await g(e.thread_id,Ee(i),o);await B({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"}`)}},o)});var kg=(e,t)=>[...t,e],ou=new d("list").alias("ls").description("List threads in an inbox").option("--inbox_id <id>","Inbox UUID").addOption(new q("--folder <folder>","Folder to list (default: inbox)").choices(_s)).option("--query <text>","Case-insensitive match against thread subjects and label names").option("--label <label_id>","Filter by label UUID (repeat the flag for multiple labels)",kg,[]).option("--limit <n>","Maximum number of threads to return (1-100)","10").option("--after <cursor>","Cursor for forward pagination \u2014 list threads after this thread ID").option("--before <cursor>","Cursor for backward pagination \u2014 list threads before this thread ID").addHelpText("after",c({context:`Threads are ordered by newest activity first. Pass the last thread ID of the
|
|
752
763
|
previous page as --after to fetch the next page.
|
|
753
764
|
|
|
754
|
-
--label takes label UUIDs (from "resend inboxes labels list"), not label names.`,output:' {"object":"list","has_more":false,"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","invalid_limit","invalid_pagination","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","resend inboxes threads list --inbox_id 78261eea-8f8b-4381-83c6-79fa7120f1cf --limit 25 --after <thread_id> --json"]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=
|
|
755
|
-
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,
|
|
756
|
-
"get" returns
|
|
757
|
-
|
|
765
|
+
--label takes label UUIDs (from "resend inboxes labels list"), not label names.`,output:' {"object":"list","has_more":false,"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","invalid_limit","invalid_pagination","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","resend inboxes threads list --inbox_id 78261eea-8f8b-4381-83c6-79fa7120f1cf --limit 25 --after <thread_id> --json"]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=D(e.limit,o),r=I(i,e.after,e.before,o),n=await g(e.inbox_id,H,o);await S({loading:"Fetching threads...",sdkCall:s=>s.inboxes.threads.list({inboxId:n,...e.folder&&{folder:e.folder},...e.query&&{query:e.query},...e.label.length>0&&{label:e.label},...r}),onInteractive:s=>{console.log(Lc(s.data)),T(s,"inboxes threads list",{limit:i,before:e.before,apiKey:o.apiKey,profile:o.profile,extraFlags:[`--inbox_id ${n}`,e.folder&&`--folder ${e.folder}`,e.query&&`--query ${e.query}`,...e.label.map(a=>`--label ${a}`)].filter(Boolean).join(" ")})}},o)});var iu=new d("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 q("--folder <folder>","Move the thread to a folder").choices(Fs)).option("--label_id <label_id>","Apply this label (UUID) to the thread").addHelpText("after",c({context:`At least one of --read/--unread, --folder, or --label_id is required.
|
|
766
|
+
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,H,o),n=await g(e.thread_id,Ee(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 F({loading:"Updating thread...",sdkCall:a=>a.inboxes.threads.update(s),errorCode:"update_error",successMsg:`Thread updated: ${n}`},o)});var ru=new d("threads").description("Browse and reply to email threads in an inbox").addHelpText("after",c({context:`Received messages are grouped into threads. "list" shows threads in a folder,
|
|
767
|
+
"get" returns one thread's summary, "update" marks read/unread, moves, or
|
|
768
|
+
labels a thread, and "emails" lists and works with the messages in a thread.`,examples:["resend inboxes threads list --inbox_id <inbox_id>","resend inboxes threads get --inbox_id <inbox_id> --thread_id <thread_id>","resend inboxes threads emails list --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(ou,{isDefault:!0}).addCommand(tu).addCommand(iu).addCommand(Jc).addCommand(eu);var nu=new d("update").description("Update an inbox's name or from name").argument("[id]","Inbox UUID").option("--name <name>","New inbox name").option("--from_name <name>",'New name used when sending from this inbox, e.g. "Ada from Support" (a plain name, not "Name <email>")').addHelpText("after",c({context:`At least one of --name or --from_name is required.
|
|
769
|
+
Pass --from_name "" to clear the from name.
|
|
758
770
|
|
|
759
771
|
Note: the email address cannot be changed after creation.
|
|
760
|
-
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 --
|
|
772
|
+
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 --from_name "Ada from Support" --json']})).action(async(e,t,o)=>{let i=o.optsWithGlobals(),r=await g(e,H,i);!t.name&&t.from_name===void 0&&h({message:"Provide at least one option to update: --name or --from_name.",code:"no_changes"},{json:i.json});let n={...t.name&&{name:t.name},...t.from_name!==void 0&&{fromName:t.from_name}};await F({loading:"Updating inbox...",sdkCall:s=>s.inboxes.update(r,n),errorCode:"update_error",successMsg:`Inbox updated: ${r}`},i)});var au=new d("inboxes").description(`${su.default.cyan("\u25CF beta")} \xB7 Manage inboxes \u2014 email addresses at your domains that send and receive mail (request access to enable)`).addHelpText("after",c({context:`Beta: this command requires inboxes to be enabled on your account.
|
|
761
773
|
Not enabled yet? Reach out to Resend to join the beta. Calls return an API error until then.
|
|
762
774
|
|
|
763
|
-
An inbox is an email address at one of your verified domains that
|
|
775
|
+
An inbox is an email address at one of your verified domains that sends and receives email.
|
|
764
776
|
Received messages are grouped into threads inside the inbox.
|
|
765
777
|
|
|
766
|
-
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(
|
|
778
|
+
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(_c).addCommand(Pc).addCommand(qc,{isDefault:!0}).addCommand(ru).addCommand(Mc).addCommand(jc).addCommand(kc).addCommand(nu).addCommand(Fc);function lu(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 du={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 cu=new d("get").description("Retrieve a single API request log with full request/response bodies").argument("[id]","Log ID").addHelpText("after",c({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,du,i);await B({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(`
|
|
767
779
|
Request Body:
|
|
768
780
|
${JSON.stringify(n.request_body,null,2)}`),n.response_body&&console.log(`
|
|
769
781
|
Response Body:
|
|
770
|
-
${JSON.stringify(n.response_body,null,2)}`)}},i)});var
|
|
771
|
-
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=
|
|
782
|
+
${JSON.stringify(n.response_body,null,2)}`)}},i)});var uu=new d("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",c({output:` {"object":"list","data":[...],"has_more":true}
|
|
783
|
+
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=D(e.limit,o),r=I(i,e.after,e.before,o);await S({loading:"Fetching logs...",sdkCall:n=>n.logs.list(r),onInteractive:n=>{console.log(lu(n.data)),T(n,"logs list",{limit:i,before:e.before,apiKey:o.apiKey,profile:o.profile})}},o)});var mu=new d("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",c({context:`Opens the Resend dashboard in your default browser.
|
|
772
784
|
With an ID: opens that log's detail page.
|
|
773
|
-
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?
|
|
774
|
-
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=
|
|
785
|
+
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?he.log(e):he.logs,r=o.optsWithGlobals();await Te(i,r)});var pu=new d("logs").description("View API request logs").addHelpText("after",c({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(cu).addCommand(uu,{isDefault:!0}).addCommand(mu);var fu={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 hu(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 gu=new d("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",c({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"}}]}
|
|
786
|
+
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=D(e.limit,o),r=I(i,e.after,e.before,o);await S({loading:"Fetching OAuth grants...",sdkCall:n=>n.oauthGrants.list(r),onInteractive:n=>{console.log(hu(n.data)),T(n,"oauth-grants list",{limit:i,before:e.before,apiKey:o.apiKey,profile:o.profile})}},o)});var Au=new d("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",c({context:`Non-interactive: --yes is required to confirm revocation when stdin/stdout is not a TTY.
|
|
775
787
|
|
|
776
788
|
Any team API key can revoke any of the team's grants. Revocation is immediate and
|
|
777
|
-
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,
|
|
789
|
+
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,fu,i);t.yes||await ai(r.id,`Revoke OAuth grant for "${r.label}"?
|
|
778
790
|
ID: ${r.id}
|
|
779
|
-
Every access and refresh token issued under it will stop working.`,i),await
|
|
791
|
+
Every access and refresh token issued under it will stop working.`,i),await F({loading:"Revoking OAuth grant...",sdkCall:n=>n.oauthGrants.revoke(r.id),errorCode:"revoke_error",successMsg:"OAuth grant revoked"},i)});var bu=new d("oauth-grants").description("Manage OAuth grants (apps authorized to act on the team)").addHelpText("after",c({context:`An OAuth grant is a durable record of a client (app) authorized by the team.
|
|
780
792
|
- Listing returns every grant, active and revoked. revoked_at/revoked_reason are null while active.
|
|
781
|
-
- 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(
|
|
793
|
+
- 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(gu,{isDefault:!0}).addCommand(Au);var yu=new d("open").description("Open the Resend dashboard in your browser").addHelpText("after",c({context:"Opens https://resend.com/emails in your default browser.",examples:["resend open"]})).action(async(e,t)=>{let o=t.optsWithGlobals();await Te(he.emails,o)});var Cu=new d("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",c({context:`Lists all contacts that belong to the given segment.
|
|
782
794
|
|
|
783
795
|
If no segment ID is provided interactively, a picker will prompt you to choose one.
|
|
784
796
|
|
|
785
797
|
Pagination: use --after or --before with a contact ID as the cursor.
|
|
786
798
|
Only one of --after or --before may be used at a time.
|
|
787
|
-
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=
|
|
799
|
+
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=D(t.limit,i),s=I(n,t.after,t.before,i);await S({loading:"Fetching segment contacts...",sdkCall:a=>a.contacts.list({segmentId:r,...s}),onInteractive:a=>{console.log(Ci(a.data)),T(a,`segments contacts ${r}`,{limit:n,before:t.before,apiKey:i.apiKey,profile:i.profile})}},i)});var xu=new d("create").description("Create a new segment").option("--name <name>","Segment name (required)").addHelpText("after",c({context:`Segments are named groups of contacts. Broadcasts target segments via segment_id.
|
|
788
800
|
Contacts can belong to multiple segments. Audiences are deprecated \u2014 use segments instead.
|
|
789
801
|
|
|
790
|
-
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
|
|
802
|
+
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 E(e.name,{message:"Segment name",placeholder:"e.g. Newsletter Subscribers"},{message:"Missing --name flag.",code:"missing_name"},o);await P({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 wu=new d("delete").alias("rm").description("Delete a segment").argument("[id]","Segment UUID").option("--yes","Skip the confirmation prompt (required in non-interactive mode)").addHelpText("after",c({context:`Warning: Deleting a segment removes it as a target for future broadcasts,
|
|
791
803
|
but does NOT delete the contacts within it.
|
|
792
804
|
|
|
793
805
|
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}"?
|
|
794
806
|
ID: ${r.id}
|
|
795
|
-
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
|
|
807
|
+
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 vu=new d("get").description("Retrieve a segment by ID").argument("[id]","Segment UUID").addHelpText("after",c({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 B({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 Uu=new d("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",c({context:`Pagination: use --after or --before with a segment ID as the cursor.
|
|
796
808
|
Only one of --after or --before may be used at a time.
|
|
797
809
|
The response includes has_more: true when additional pages exist.
|
|
798
810
|
|
|
799
811
|
Use "resend segments list" to discover segment IDs for use with broadcasts
|
|
800
|
-
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=
|
|
812
|
+
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=D(e.limit,o),r=I(i,e.after,e.before,o);await S({loading:"Fetching segments...",sdkCall:n=>n.segments.list(r),onInteractive:n=>{console.log(Ai(n.data)),T(n,"segments list",{limit:i,before:e.before,apiKey:o.apiKey,profile:o.profile})}},o)});var Su=new d("update").description("Rename a segment").argument("[id]","Segment UUID").option("--name <name>","New segment name").addHelpText("after",c({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 E(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 F({loading:"Updating segment...",sdkCall:s=>s.segments.update(r,{name:n}),errorCode:"update_error",successMsg:`Segment updated: ${r}`},i)});var Ku=new d("segments").description("Manage segments").addHelpText("after",c({context:`Segments are the modern replacement for Audiences (deprecated).
|
|
801
813
|
A segment is a named group of contacts. Broadcasts target segments via segment_id.
|
|
802
814
|
Contacts can belong to multiple segments.
|
|
803
815
|
|
|
804
816
|
Segment membership is managed through the contacts namespace:
|
|
805
817
|
resend contacts add-segment <contactId> --segment-id <segmentId>
|
|
806
818
|
resend contacts remove-segment <contactId> <segmentId>
|
|
807
|
-
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(
|
|
819
|
+
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(Cu).addCommand(xu).addCommand(vu).addCommand(Uu,{isDefault:!0}).addCommand(Su).addCommand(wu);var Yr=me(Je(),1);var ku=new d("add").description("Suppress an email address so it stops receiving your emails").argument("[email]","Email address to suppress").addHelpText("after",c({context:`Non-interactive: <email> is required (no prompts when stdin/stdout is not a TTY).
|
|
808
820
|
|
|
809
821
|
A suppressed address is skipped on future sends. Added this way, the entry has
|
|
810
|
-
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
|
|
822
|
+
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 E(e,{message:"Email to suppress",placeholder:"e.g. spam@example.com"},{message:"Missing <email> argument.",code:"missing_email"},i);await P({loading:"Suppressing address...",sdkCall:n=>n.suppressions.add({email:r}),onInteractive:n=>{console.log(` ${Yr.default.gray("Email:")} ${r}`),console.log(` ${Yr.default.gray("ID:")} ${n.id}`)}},i)});X();function _i(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 _u=new d("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",c({context:`Non-interactive: --file
|
|
811
823
|
Limit: 100 emails per request (API hard limit \u2014 warned if exceeded)
|
|
812
824
|
|
|
813
825
|
File format (--file path):
|
|
814
|
-
["spam@example.com", "bounce@example.com"]`,output:' {"data":[{"object":"suppression","id":"<id>"}]}',errorCodes:["auth_error","missing_file","file_read_error","stdin_read_error","invalid_json","invalid_format","create_error"],examples:["resend suppressions batch add --file ./emails.json",`echo '["a@example.com","b@example.com"]' | resend suppressions batch add --file -`]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=await ee(o),r=await
|
|
826
|
+
["spam@example.com", "bounce@example.com"]`,output:' {"data":[{"object":"suppression","id":"<id>"}]}',errorCodes:["auth_error","missing_file","file_read_error","stdin_read_error","invalid_json","invalid_format","create_error"],examples:["resend suppressions batch add --file ./emails.json",`echo '["a@example.com","b@example.com"]' | resend suppressions batch add --file -`]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=await ee(o),r=await E(e.file,{message:"Path to JSON file",placeholder:"./emails.json"},{message:"Missing --file flag. Provide a JSON file with an array of email strings.",code:"missing_file"},o),n=ie(r,o),s=_i(n,o);s.length>100&&console.warn(`Warning: ${s.length} emails exceeds the 100-email limit. The API may reject this request.`);let a=await de("Suppressing addresses...",()=>i.suppressions.batch.add({emails:s}),"create_error",o);if(!o.json&&w()){console.log(`Suppressed ${a.data.length} address${a.data.length===1?"":"es"}`);for(let l of a.data)console.log(` ${l.id}`)}else M(a,{json:o.json})});X();var Fu=new d("remove").alias("rm").description("Remove up to 100 suppressions 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)').option("--ids","Treat the file entries as suppression IDs instead of email addresses").addHelpText("after",c({context:`Non-interactive: --file
|
|
815
827
|
Limit: 100 entries per request (API hard limit \u2014 warned if exceeded)
|
|
816
828
|
By default entries are treated as email addresses; pass --ids to remove by suppression ID.
|
|
817
829
|
|
|
818
830
|
File format (--file path):
|
|
819
|
-
["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
|
|
820
|
-
"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(
|
|
831
|
+
["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 E(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=_i(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 de("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 M(a,{json:o.json})});var Ru=new d("batch").description("Suppress or remove many addresses in a single request").addHelpText("after",c({context:`Batch operations read a JSON array of strings from --file (up to 100 per request).
|
|
832
|
+
"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(_u).addCommand(Fu);var Fi={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 Du(e){let t=e.map(o=>[o.email,o.id,o.origin,o.created_at]);return _(["Email","ID","Origin","Created"],t,"(no suppressions)")}var Tu=new d("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",c({context:`Non-interactive: --yes is required to confirm removal when stdin/stdout is not a TTY.
|
|
821
833
|
|
|
822
|
-
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,
|
|
834
|
+
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,Fi,i);await z(r.id,!!t.yes,{confirmMessage:`Remove suppression "${r.label}"?
|
|
823
835
|
ID: ${r.id}
|
|
824
|
-
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
|
|
836
|
+
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 Ou=new d("get").description("Retrieve a suppression by ID or email address").argument("[id-or-email]","Suppression ID or the suppressed email address").addHelpText("after",c({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,Fi,i);await B({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 Eu=new d("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 q("--origin <origin>","Filter by how the address was suppressed").choices(["bounce","complaint","manual"])).addHelpText("after",c({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=D(e.limit,o),r=I(i,e.after,e.before,o);await S({loading:"Fetching suppressions...",sdkCall:n=>n.suppressions.list({...r,...e.origin&&{origin:e.origin}}),onInteractive:n=>{console.log(Du(n.data)),T(n,"suppressions list",{limit:i,before:e.before,apiKey:o.apiKey,profile:o.profile,...e.origin&&{extraFlags:`--origin ${e.origin}`}})}},o)});var Bu=new d("suppressions").description("Manage the suppression list \u2014 addresses that won't receive your emails").addHelpText("after",c({context:`Suppressions block future sends to an address. Entries have an origin:
|
|
825
837
|
bounce added automatically after a hard bounce
|
|
826
838
|
complaint added automatically after a spam complaint
|
|
827
839
|
manual added by you via "suppressions add"
|
|
828
840
|
|
|
829
|
-
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(
|
|
841
|
+
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(Eu,{isDefault:!0}).addCommand(ku).addCommand(Ou).addCommand(Tu).addCommand(Ru);X();function Ri(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 Iu(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 ju=new d("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",c({context:`Creates a new draft template. Use "resend templates publish" to make it available for sending.
|
|
830
842
|
|
|
831
843
|
--name is required. Body: provide --html, --html-file, or --react-email. Optionally add --text or --text-file for plain-text.
|
|
832
844
|
|
|
@@ -836,24 +848,24 @@ get/delete accept either a suppression ID or the email address.`,examples:["rese
|
|
|
836
848
|
--html "<p>Hi {{{NAME}}}, your total is {{{PRICE}}}</p>"
|
|
837
849
|
--var NAME:string --var PRICE:number:0
|
|
838
850
|
|
|
839
|
-
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"});
|
|
851
|
+
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"});R(s)&&O("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
|
|
840
852
|
`),r=ie(e.htmlFile,o)),e.textFile&&(e.text&&process.stderr.write(`Warning: both --text and --text-file provided; using --text-file
|
|
841
|
-
`),n=ie(e.textFile,o)),e.reactEmail&&(r=await
|
|
853
|
+
`),n=ie(e.textFile,o)),e.reactEmail&&(r=await qe(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"});R(s)&&O("Cancelled."),r=s}await P({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:Ri(e.var)}})),onInteractive:s=>{console.log(`Template created: ${s.id}`)}},o)});var Pu=new d("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",c({context:`Warning: Deleting a template is permanent and cannot be undone.
|
|
842
854
|
|
|
843
855
|
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}"?
|
|
844
856
|
ID: ${r.id}
|
|
845
|
-
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
|
|
857
|
+
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 $u=new d("duplicate").description("Duplicate a template").argument("[id]","Template ID or alias to duplicate").addHelpText("after",c({context:`Creates a copy of an existing template and returns the new template ID.
|
|
846
858
|
The duplicate is created as a draft with " (Copy)" appended to the original name.
|
|
847
|
-
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
|
|
859
|
+
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 P({loading:"Duplicating template...",sdkCall:n=>Promise.resolve(n.templates.duplicate(r)),onInteractive:n=>{console.log(`Template duplicated: ${n.id}`)}},i)});var Gu=new d("get").description("Retrieve a template by ID or alias").argument("[id]","Template ID or alias").addHelpText("after",c({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 B({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 Hu=new d("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",c({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=D(e.limit,o),r=I(i,e.after,e.before,o);await S({loading:"Fetching templates...",sdkCall:n=>n.templates.list(r),onInteractive:n=>{console.log(Iu(n.data)),T(n,"templates list",{limit:i,before:e.before,apiKey:o.apiKey,profile:o.profile})}},o)});var Qu=new d("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",c({context:`Opens the Resend dashboard in your default browser.
|
|
848
860
|
With an ID: opens that template's page for editing or viewing.
|
|
849
|
-
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?
|
|
861
|
+
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?he.template(e):he.templates,r=o.optsWithGlobals();await Te(i,r)});var Nu=new d("publish").description("Publish a draft template").argument("[id]","Template ID or alias").addHelpText("after",c({context:`Promotes a draft template to published status, making it available for use in emails.
|
|
850
862
|
After updating a published template, re-publish to make the changes live.
|
|
851
|
-
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
|
|
863
|
+
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 F({loading:"Publishing template...",sdkCall:n=>n.templates.publish(r),errorCode:"publish_error",successMsg:`Template published: ${r}`,retryTransient:!0},i)});var Mu=new d("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",c({context:`At least one option is required. Only the provided fields are changed; others are left as-is.
|
|
852
864
|
|
|
853
865
|
--var declares a template variable using the format KEY:type or KEY:type:fallback.
|
|
854
866
|
Valid types: string, number.
|
|
855
867
|
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
|
|
856
|
-
`),s=ie(t.textFile,i)),t.reactEmail!=null&&(n=await
|
|
868
|
+
`),s=ie(t.textFile,i)),t.reactEmail!=null&&(n=await qe(t.reactEmail,i)),await F({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:Ri(t.var)}}),errorCode:"update_error",successMsg:`Template updated: ${r}`,retryTransient:!0},i)});var qu=new d("templates").description("Manage templates").addHelpText("after",c({context:`Lifecycle:
|
|
857
869
|
Templates follow a draft \u2192 published workflow:
|
|
858
870
|
1. create \u2014 creates a draft template
|
|
859
871
|
2. update \u2014 edits name, subject, HTML, variables, etc.
|
|
@@ -867,7 +879,7 @@ Template variables:
|
|
|
867
879
|
Each variable must be declared with --var when creating or updating:
|
|
868
880
|
--var KEY:type e.g. --var NAME:string
|
|
869
881
|
--var KEY:type:fallback e.g. --var PRICE:number:25
|
|
870
|
-
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(
|
|
882
|
+
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(ju).addCommand(Gu).addCommand(Qu).addCommand(Hu,{isDefault:!0}).addCommand(Mu).addCommand(Pu).addCommand(Nu).addCommand($u);var Lu=new d("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 q("--default-subscription <mode>","Default subscription state for contacts").choices(["opt_in","opt_out"]).default("opt_in")).addHelpText("after",c({context:`Topics enable fine-grained subscription management. Contacts can opt in or out of
|
|
871
883
|
individual topics. Broadcasts can target only contacts opted into a specific topic.
|
|
872
884
|
|
|
873
885
|
Example topics: "Product Updates", "Security Alerts", "Weekly Digest".
|
|
@@ -876,16 +888,16 @@ Example topics: "Product Updates", "Security Alerts", "Weekly Digest".
|
|
|
876
888
|
opt_in Contacts receive broadcasts unless they explicitly opt out (default)
|
|
877
889
|
opt_out Contacts do NOT receive broadcasts unless they explicitly opt in
|
|
878
890
|
|
|
879
|
-
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
|
|
891
|
+
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 E(e.name,{message:"Topic name",placeholder:"e.g. Product Updates"},{message:"Missing --name flag.",code:"missing_name"},o);await P({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 Wu=new d("delete").alias("rm").description("Delete a topic").argument("[id]","Topic UUID").option("--yes","Skip the confirmation prompt (required in non-interactive mode)").addHelpText("after",c({context:`Warning: Deleting a topic removes all contact subscriptions to that topic and may affect
|
|
880
892
|
broadcasts that reference this topic_id. Contacts themselves are not deleted.
|
|
881
893
|
|
|
882
894
|
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}"?
|
|
883
895
|
ID: ${r.id}
|
|
884
|
-
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
|
|
885
|
-
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
|
|
896
|
+
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 Ju=new d("get").description("Retrieve a topic by ID").argument("[id]","Topic UUID").addHelpText("after",c({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 B({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 Vu=new d("list").alias("ls").description("List all topics").addHelpText("after",c({context:`Returns all topics in your account. Topic subscription management for individual
|
|
897
|
+
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 S({loading:"Fetching topics...",sdkCall:i=>i.topics.list(),onInteractive:i=>console.log(Al(i.data))},o)});var zu=new d("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",c({context:`At least one of --name or --description must be provided to update the topic.
|
|
886
898
|
|
|
887
899
|
Note: --default-subscription cannot be changed after creation.
|
|
888
|
-
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
|
|
900
|
+
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 F({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 Yu=new d("topics").description("Manage topics for contact subscription preferences").addHelpText("after",c({context:`Topics enable fine-grained subscription management beyond the global unsubscribe flag.
|
|
889
901
|
A contact can opt in or out of individual topics independently.
|
|
890
902
|
|
|
891
903
|
Broadcasts can target a topic_id so only contacts who have opted into that topic
|
|
@@ -898,11 +910,11 @@ Subscription states:
|
|
|
898
910
|
|
|
899
911
|
Contact topic subscriptions are managed via the contacts namespace:
|
|
900
912
|
resend contacts topics <contactId>
|
|
901
|
-
resend contacts update-topics <contactId> --topic-id <id> --subscription opt_in`,examples:["resend topics list",'resend topics create --name "Product Updates"','resend topics create --name "Weekly Digest" --default-subscription opt_out',"resend topics get 78261eea-8f8b-4381-83c6-79fa7120f1cf",'resend topics update 78261eea-8f8b-4381-83c6-79fa7120f1cf --name "Security Alerts"',"resend topics delete 78261eea-8f8b-4381-83c6-79fa7120f1cf --yes"]})).addCommand(
|
|
913
|
+
resend contacts update-topics <contactId> --topic-id <id> --subscription opt_in`,examples:["resend topics list",'resend topics create --name "Product Updates"','resend topics create --name "Weekly Digest" --default-subscription opt_out',"resend topics get 78261eea-8f8b-4381-83c6-79fa7120f1cf",'resend topics update 78261eea-8f8b-4381-83c6-79fa7120f1cf --name "Security Alerts"',"resend topics delete 78261eea-8f8b-4381-83c6-79fa7120f1cf --yes"]})).addCommand(Lu).addCommand(Ju).addCommand(Vu,{isDefault:!0}).addCommand(zu).addCommand(Wu);X();Uo();Kt();var Xu=new d("update").description("Check for available CLI updates").addHelpText("after",c({context:`Checks the latest release on GitHub (bypasses the cache).
|
|
902
914
|
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"}
|
|
903
|
-
{"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?
|
|
915
|
+
{"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?le("Checking for updates..."):null,n=await Qr();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=vi(se,n),a=Ui();if(o.json||!w()){M({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(`
|
|
904
916
|
${l?"Visit":"Run"}: \x1B[36m${a}\x1B[0m
|
|
905
|
-
`)}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
|
|
917
|
+
`)}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","contact.topics.updated","domain.created","domain.updated","domain.deleted","suppression.added","suppression.removed","topic.created","topic.updated","topic.deleted","inbox.created","inbox.updated","inbox.deleted","inbox.thread.created","inbox.email.received","inbox.email.sent","inbox.thread.folder.updated","inbox.thread.assigned","inbox.thread.unassigned","inbox.thread.labels.updated","inbox.draft.created","inbox.draft.updated","inbox.draft.sent","inbox.draft.deleted"];function eo(e){return e.flatMap(t=>t.split(",")).map(t=>t.trim()).filter(Boolean)}var xe={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 Zu(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 em=new d("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 37 events.').addHelpText("after",c({context:`Webhooks deliver real-time event notifications to your HTTPS endpoint.
|
|
906
918
|
Events fire per-recipient: a batch email to 3 recipients generates 3 email.sent events.
|
|
907
919
|
|
|
908
920
|
--endpoint must use HTTPS.
|
|
@@ -912,50 +924,57 @@ Events fire per-recipient: a batch email to 3 recipients generates 3 email.sent
|
|
|
912
924
|
resend webhooks create --endpoint https://... --events email.sent,email.delivered
|
|
913
925
|
resend webhooks create --endpoint https://... --events all
|
|
914
926
|
|
|
915
|
-
Available event types (
|
|
927
|
+
Available event types (37 total):
|
|
916
928
|
Email: email.sent, email.delivered, email.delivery_delayed, email.bounced,
|
|
917
929
|
email.complained, email.opened, email.clicked, email.failed,
|
|
918
930
|
email.scheduled, email.suppressed, email.received
|
|
919
|
-
Contact: contact.created, contact.updated, contact.deleted
|
|
931
|
+
Contact: contact.created, contact.updated, contact.deleted,
|
|
932
|
+
contact.topics.updated
|
|
920
933
|
Domain: domain.created, domain.updated, domain.deleted
|
|
921
934
|
Suppression: suppression.added, suppression.removed
|
|
935
|
+
Topic: topic.created, topic.updated, topic.deleted
|
|
936
|
+
Inbox: inbox.created, inbox.updated, inbox.deleted, inbox.thread.created,
|
|
937
|
+
inbox.email.received, inbox.email.sent, inbox.thread.folder.updated,
|
|
938
|
+
inbox.thread.assigned, inbox.thread.unassigned,
|
|
939
|
+
inbox.thread.labels.updated, inbox.draft.created, inbox.draft.updated,
|
|
940
|
+
inbox.draft.sent, inbox.draft.deleted (beta)
|
|
922
941
|
|
|
923
942
|
Use the signing_secret in the response to verify webhook payloads using Svix
|
|
924
943
|
signature headers (svix-id, svix-timestamp, svix-signature). "resend webhooks get" returns it again.
|
|
925
944
|
Use resend.webhooks.verify() in your application to validate incoming payloads.
|
|
926
945
|
|
|
927
|
-
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
|
|
946
|
+
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 E(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 zn({message:"Select event types to subscribe to",options:lt.map(a=>({value:a,label:a}))});R(s)&&O("Cancelled."),r=s}await P({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 tm=new d("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",c({context:`Warning: Deleting a webhook immediately stops event delivery to the endpoint.
|
|
928
947
|
In-flight events may still be attempted once before the deletion takes effect.
|
|
929
948
|
To temporarily pause delivery without losing configuration, use:
|
|
930
949
|
resend webhooks update <id> --status disabled
|
|
931
950
|
|
|
932
|
-
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,
|
|
951
|
+
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,xe,i);await z(r.id,!!t.yes,{confirmMessage:`Delete webhook "${r.label}"?
|
|
933
952
|
ID: ${r.id}
|
|
934
|
-
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
|
|
953
|
+
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 om(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 im(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 rm=new d("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",c({context:`Each attempt records what your endpoint returned: http_status_code and the
|
|
935
954
|
response body. Use this to debug why an event ended up in the failed status.
|
|
936
955
|
|
|
937
|
-
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,
|
|
956
|
+
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,xe,r),s=await g(t,to(n),r),a=D(o.limit,r);await S({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(im(l.data)),T(l,`webhooks events attempts ${n} ${s}`,{limit:a,apiKey:r.apiKey,profile:r.profile})}},r)});var nm=new d("get").description("Retrieve a single event delivered to a webhook").argument("[webhookId]","Webhook ID").argument("[eventId]","Webhook event ID").addHelpText("after",c({context:`next_attempt_at is when the next delivery attempt is scheduled. It is null
|
|
938
957
|
once the event reaches success or failed.
|
|
939
958
|
|
|
940
|
-
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,
|
|
959
|
+
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,xe,r),s=await g(t,to(n),r);await B({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(`
|
|
941
960
|
Payload:
|
|
942
|
-
${JSON.stringify(a.payload,null,2)}`)}},r)});var
|
|
961
|
+
${JSON.stringify(a.payload,null,2)}`)}},r)});var sm=new d("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",c({context:`status is the delivery status of the event to this webhook:
|
|
943
962
|
pending, attempting, success, or failed.
|
|
944
963
|
|
|
945
|
-
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,
|
|
946
|
-
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,
|
|
964
|
+
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,xe,i),n=D(t.limit,i);await S({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(om(s.data)),T(s,`webhooks events list ${r}`,{limit:n,apiKey:i.apiKey,profile:i.profile})}},i)});var am=new d("replay").description("Queue another delivery attempt for a webhook event").argument("[webhookId]","Webhook ID").argument("[eventId]","Webhook event ID").addHelpText("after",c({context:`Queues one more delivery of the event. Does not schedule automatic retries.
|
|
965
|
+
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,xe,r),s=await g(t,to(n),r);await F({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 lm=new d("events").description("Inspect or replay the events Resend delivered to a webhook").addHelpText("after",c({context:`Debugging a webhook that is missing deliveries:
|
|
947
966
|
1. resend webhooks events list <webhook-id> (find the event)
|
|
948
967
|
2. resend webhooks events get <webhook-id> <event-id> (see the payload we sent)
|
|
949
968
|
3. resend webhooks events attempts <webhook-id> <event-id> (see what your endpoint returned)
|
|
950
969
|
4. resend webhooks events replay <webhook-id> <event-id> (queue another delivery)
|
|
951
970
|
|
|
952
971
|
Events are listed most recent first. Both list commands paginate forward only,
|
|
953
|
-
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(
|
|
972
|
+
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(sm,{isDefault:!0}).addCommand(nm).addCommand(rm).addCommand(am);var dm=new d("get").description("Retrieve a webhook endpoint configuration by ID").argument("[id]","Webhook UUID").addHelpText("after",c({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,xe,i);await B({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 cm=new d("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",c({context:`Pagination: use --after or --before with a webhook ID as the cursor.
|
|
954
973
|
Only one of --after or --before may be used at a time.
|
|
955
|
-
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=
|
|
974
|
+
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=D(e.limit,o),r=I(i,e.after,e.before,o);await S({loading:"Fetching webhooks...",sdkCall:n=>n.webhooks.list(r),onInteractive:n=>{console.log(Zu(n.data)),T(n,"webhooks list",{limit:i,before:e.before,apiKey:o.apiKey,profile:o.profile})}},o)});var mm=require("node:http");var we=me(Je(),1);X();function um(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 pm=["svix-id","svix-timestamp","svix-signature"],_g=3e4;function Fg(){return new Date().toLocaleTimeString("en-GB",{hour12:!1})}function Rg(e){let t=pe(e.type??"unknown"),o=e.data??{},i=pe(o.id??o.email_id??o.draft_id??o.thread_id??o.inbox_id??""),r="";if(t.startsWith("email.")){let n=pe(o.from??""),s=pe(Array.isArray(o.to)?o.to[0]:"");(n||s)&&(r=`${n} -> ${s}`)}else if(t.startsWith("domain.")||t.startsWith("topic."))r=pe(o.name??"");else if(t.startsWith("contact.")||t.startsWith("suppression."))r=pe(o.email??"");else if(t.startsWith("inbox.")){let n=o.email,s=o.draft,a=o.thread,l=o.inbox;if(n){let u=pe(n.from??""),m=pe(Array.isArray(n.to)?n.to[0]:"");r=`${u} -> ${m}`}else s||a?r=pe(s?.subject??a?.subject??""):l&&(r=pe(l.email_address??""))}return{type:t,resourceId:i,detail:r}}function Dg(e){let t=`${e} ${Tg(e)}`;return e>=200&&e<300?we.default.green(t):e>=400&&e<500?we.default.yellow(t):we.default.red(t)}function Tg(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 Og(e,t,o){let i={"content-type":"application/json"};for(let s of pm){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(_g)})).status}}function Eg(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 Bg(e,t,o){process.stderr.write(`
|
|
956
975
|
Cleaning up...`);try{await e.webhooks.remove(t),process.stderr.write(` Webhook ${t} deleted.
|
|
957
976
|
`)}catch{process.stderr.write(` Failed to delete webhook ${t}.
|
|
958
|
-
`)}o.close()}var
|
|
977
|
+
`)}o.close()}var fm=new d("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",c({context:`Start a local server that receives Resend webhook events in real time.
|
|
959
978
|
|
|
960
979
|
You must provide a public URL (e.g. from ngrok or localtunnel) that
|
|
961
980
|
points to the local server port. The CLI will:
|
|
@@ -966,37 +985,44 @@ points to the local server port. The CLI will:
|
|
|
966
985
|
5. Delete the temporary webhook on exit (Ctrl+C)
|
|
967
986
|
|
|
968
987
|
Important: your tunnel must forward traffic to the same port as --port (default 4318).
|
|
969
|
-
For example, if using ngrok: ngrok http 4318`,examples:["resend webhooks listen --url https://example.ngrok-free.app","resend webhooks listen --url https://example.ngrok-free.app --forward-to localhost:3000/webhook","resend webhooks listen --url https://example.ngrok-free.app --events email.sent email.bounced","resend webhooks listen --url https://example.ngrok-free.app --port 8080"]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=await
|
|
970
|
-
`),e.forwardTo&&G){let re=e.forwardTo.startsWith("http")?e.forwardTo:`http://${e.forwardTo}`;"error"in G?process.stderr.write(`${
|
|
971
|
-
`):process.stderr.write(`${
|
|
972
|
-
`)}}let
|
|
973
|
-
`),process.stderr.write(` ${
|
|
974
|
-
`),process.stderr.write(` ${
|
|
975
|
-
`),process.stderr.write(` ${
|
|
976
|
-
`),process.stderr.write(` ${
|
|
977
|
-
`),e.forwardTo){let b=e.forwardTo.startsWith("http")?e.forwardTo:`http://${e.forwardTo}`;process.stderr.write(` ${
|
|
988
|
+
For example, if using ngrok: ngrok http 4318`,examples:["resend webhooks listen --url https://example.ngrok-free.app","resend webhooks listen --url https://example.ngrok-free.app --forward-to localhost:3000/webhook","resend webhooks listen --url https://example.ngrok-free.app --events email.sent email.bounced","resend webhooks listen --url https://example.ngrok-free.app --port 8080"]})).action(async(e,t)=>{let o=t.optsWithGlobals(),i=await E(e.url,{message:"Public tunnel URL",placeholder:"https://example.ngrok-free.app",validate:A=>{if(!A)return"URL is required";if(!A.startsWith("https://")&&!A.startsWith("http://"))return"URL must start with http:// or https://"}},{message:"Missing --url flag.",code:"missing_url"},o),r=Number.parseInt(e.port??"4318",10);(Number.isNaN(r)||r<1||r>65535)&&h({message:"Invalid port number.",code:"invalid_port"},{json:o.json});let n=e.events?.length?eo(e.events):void 0,s;n?.includes("all")?s=lt:n?.length?s=n:s=lt;let a=await ee(o),l=o.json||!w(),u=(0,mm.createServer)(async(A,b)=>{try{if(A.method!=="POST"){b.writeHead(405).end("Method not allowed");return}let x=await Eg(A),v;try{v=JSON.parse(x)}catch{b.writeHead(400).end("Invalid JSON");return}let U={};for(let $ of pm){let L=A.headers[$];U[$]=Array.isArray(L)?L[0]:L}let{type:K,resourceId:k,detail:j}=Rg(v),G;if(e.forwardTo)try{let{status:$}=await Og(e.forwardTo,x,U);G={status:$}}catch($){let L=$ instanceof DOMException&&$.name==="TimeoutError";G={error:$ instanceof Error?$.message:"Unknown error",timeout:L}}if(l){let $={timestamp:new Date().toISOString(),type:K,resource_id:k,payload:v};e.forwardTo&&G&&($.forwarded="error"in G?{url:e.forwardTo,error:G.error}:{url:e.forwardTo,status:G.status}),console.log(JSON.stringify($))}else{let $=we.default.dim(`[${Fg()}]`),L=K.padEnd(20),ve=k.padEnd(14);if(process.stderr.write(`${$} ${we.default.bold(L)} ${we.default.cyan(ve)} ${j}
|
|
989
|
+
`),e.forwardTo&&G){let re=e.forwardTo.startsWith("http")?e.forwardTo:`http://${e.forwardTo}`;"error"in G?process.stderr.write(`${we.default.dim(" -> POST")} ${re} ${we.default.red(`[Error: ${G.error}]`)}
|
|
990
|
+
`):process.stderr.write(`${we.default.dim(" -> POST")} ${re} ${we.default.dim(`[${Dg(G.status)}]`)}
|
|
991
|
+
`)}}let N=um(G);b.writeHead(N.status).end(N.body)}catch{b.headersSent||b.writeHead(500).end("Internal error")}});try{await new Promise((A,b)=>{u.on("error",b),u.listen(r,A)})}catch(A){h({message:A instanceof Error?`Failed to start local server on port ${r}: ${A.message}`:`Failed to start local server on port ${r}`,code:"server_listen_error"},{json:o.json})}let m=le("Setting up webhook listener...",o.quiet),p;try{let{data:A,error:b}=await a.webhooks.create({endpoint:i,events:s});(b||!A)&&(m.fail("Failed to create webhook"),u.close(),h({message:b?.message??"Unexpected empty response",code:"create_error"},{json:o.json})),p=A.id}catch(A){m.fail("Failed to create webhook"),u.close(),h({message:A instanceof Error?A.message:"Unknown error",code:"create_error"},{json:o.json})}if(m.stop("Webhook listener ready"),!l){let A=s.length===lt.length?"all events":s.length<=3?s.join(", "):`${s.slice(0,3).join(", ")} (+${s.length-3} more)`;if(process.stderr.write(`
|
|
992
|
+
`),process.stderr.write(` ${we.default.bold("Webhook:")} ${p}
|
|
993
|
+
`),process.stderr.write(` ${we.default.bold("Endpoint:")} ${i}
|
|
994
|
+
`),process.stderr.write(` ${we.default.bold("Events:")} ${A}
|
|
995
|
+
`),process.stderr.write(` ${we.default.bold("Server:")} http://localhost:${r}
|
|
996
|
+
`),e.forwardTo){let b=e.forwardTo.startsWith("http")?e.forwardTo:`http://${e.forwardTo}`;process.stderr.write(` ${we.default.bold("Forward:")} ${b}
|
|
978
997
|
`)}process.stderr.write(`
|
|
979
998
|
Ready! Listening for webhook events. Press Ctrl+C to stop.
|
|
980
999
|
|
|
981
|
-
`)}let f=!1,y=async()=>{f||(f=!0,await
|
|
1000
|
+
`)}let f=!1,y=async()=>{f||(f=!0,await Bg(a,p,u),process.exit(Mt()))};ni(y),process.on("SIGTERM",y),await new Promise(()=>{})});var hm=new d("rotate-signing-secret").description("Generate a new signing secret for a webhook").argument("[id]","Webhook UUID").addHelpText("after",c({context:`Generates a new signing secret and returns it. For 24 hours, payloads are
|
|
982
1001
|
signed with both the new and the previous secret, so either one verifies them.
|
|
983
|
-
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,
|
|
1002
|
+
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,xe,i);await P({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 gm=new d("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 37 events.').addOption(new q("--status <status>","Enable or disable event delivery for this webhook").choices(["enabled","disabled"])).addHelpText("after",c({context:`At least one of --endpoint, --events, or --status must be provided.
|
|
984
1003
|
|
|
985
1004
|
--events replaces the entire event list (it is not additive).
|
|
986
|
-
Use "all" as a shorthand for all
|
|
1005
|
+
Use "all" as a shorthand for all 37 event types.
|
|
987
1006
|
|
|
988
1007
|
--status controls whether events are delivered to this endpoint:
|
|
989
1008
|
enabled Events are delivered (default on creation)
|
|
990
|
-
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,
|
|
1009
|
+
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,xe,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 F({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 Am=new d("webhooks").description("Manage webhook endpoints for real-time event notifications").addHelpText("after",c({context:`Webhooks let you receive real-time event notifications from Resend at an HTTPS endpoint.
|
|
991
1010
|
Payloads are signed with Svix headers for verification.
|
|
992
1011
|
|
|
993
|
-
Event categories (
|
|
1012
|
+
Event categories (37 total):
|
|
994
1013
|
Email: email.sent, email.delivered, email.delivery_delayed, email.bounced,
|
|
995
1014
|
email.complained, email.opened, email.clicked, email.failed,
|
|
996
1015
|
email.scheduled, email.suppressed, email.received
|
|
997
|
-
Contact: contact.created, contact.updated, contact.deleted
|
|
1016
|
+
Contact: contact.created, contact.updated, contact.deleted,
|
|
1017
|
+
contact.topics.updated
|
|
998
1018
|
Domain: domain.created, domain.updated, domain.deleted
|
|
999
1019
|
Suppression: suppression.added, suppression.removed
|
|
1020
|
+
Topic: topic.created, topic.updated, topic.deleted
|
|
1021
|
+
Inbox: inbox.created, inbox.updated, inbox.deleted, inbox.thread.created,
|
|
1022
|
+
inbox.email.received, inbox.email.sent, inbox.thread.folder.updated,
|
|
1023
|
+
inbox.thread.assigned, inbox.thread.unassigned,
|
|
1024
|
+
inbox.thread.labels.updated, inbox.draft.created, inbox.draft.updated,
|
|
1025
|
+
inbox.draft.sent, inbox.draft.deleted (beta)
|
|
1000
1026
|
|
|
1001
1027
|
Signature verification (Svix):
|
|
1002
1028
|
Each delivery includes headers: svix-id, svix-timestamp, svix-signature
|
|
@@ -1004,18 +1030,18 @@ Signature verification (Svix):
|
|
|
1004
1030
|
Rotate a secret with "resend webhooks rotate-signing-secret <id>"; "resend webhooks get" returns the current one.
|
|
1005
1031
|
|
|
1006
1032
|
Delivery history:
|
|
1007
|
-
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(
|
|
1008
|
-
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||
|
|
1009
|
-
Available profiles: ${y.map(U=>U.name).join(", ")||"(none)"}`:"Not authenticated.\nRun `resend login` to get started.",v=b&&!A?"profile_not_found":"not_authenticated";o.json||!w()?h({message:x,code:v},{json:o.json}):h({message:x,code:v},{json:!1})}let n=r.profile??
|
|
1033
|
+
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(em).addCommand(dm).addCommand(lm).addCommand(fm).addCommand(cm,{isDefault:!0}).addCommand(gm).addCommand(hm).addCommand(tm);var ym=require("node:path");ye();X();var bm={flag:"flag",env:"environment variable",config:"config file",secure_storage:"secure storage"},Ig={full_access:"full access",sending_access:"sending access"},Cm=new d("whoami").description("Show current authentication status").addHelpText("after",c({setup:!0,context:`Local only \u2014 no network calls.
|
|
1034
|
+
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||oi(i),y=Fe(),A=y.some(U=>U.name===f),b=i||process.env.RESEND_PROFILE,x=b&&!A?`Profile "${f}" not found.
|
|
1035
|
+
Available profiles: ${y.map(U=>U.name).join(", ")||"(none)"}`:"Not authenticated.\nRun `resend login` to get started.",v=b&&!A?"profile_not_found":"not_authenticated";o.json||!w()?h({message:x,code:v},{json:o.json}):h({message:x,code:v},{json:!1})}let n=r.profile??oi(i),s=(0,ym.join)(Qe(),"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()){M({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"?`${bm[l]} (oauth)`:bm[l],p=u?Ig[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 xm(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(jg(l,e,o()),u)}})}}function jg(e,t,o){if(!$g(e))return e;let i=Pg(t,o);return i?Gg(e,i):e}function Pg(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 Hg(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=Qg(o).find(u=>vm(u).has(n));if(a){o=a,i.push(a.name());continue}let l=Ng(n,wm(o)).map(u=>[e.name(),...i,u.name()].join(" "));return l.length===0?void 0:{unknownCommand:n,suggestions:l}}}function $g(e){return/^error: unknown command /.test(e)||/^error: too many arguments/.test(e)}function Gg(e,t){let o=e.endsWith(`
|
|
1010
1036
|
`)?`
|
|
1011
1037
|
`:"",{suggestions:i}=t,r=i.length===1?"Did you mean this?":"Did you mean one of these?",n=i.map(s=>` ${s}`).join(`
|
|
1012
1038
|
`);return`error: unknown command '${t.unknownCommand}'
|
|
1013
1039
|
|
|
1014
1040
|
${r}
|
|
1015
|
-
${n}${o}`}function
|
|
1016
|
-
`);for(let e of
|
|
1041
|
+
${n}${o}`}function Hg(e){let t=[];for(let o=e;o;o=o.parent)t.push(o);return t}function wm(e){return e.createHelp().visibleCommands(e).filter(t=>!t._hidden)}function Qg(e){let t=[...e.commands];for(let o of wm(e))t.includes(o)||t.push(o);return t}function vm(e){return new Set([e.name(),...e.aliases()])}function Ng(e,t){let o=t.map(r=>{let n=Number.POSITIVE_INFINITY;for(let s of vm(r)){if(s.length<=1)continue;let a=Mg(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 Mg(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 qg=[" \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 Um(){process.stdout.write(`
|
|
1042
|
+
`);for(let e of qg)process.stdout.write(`${e}
|
|
1017
1043
|
`);process.stdout.write(`
|
|
1018
|
-
`)}
|
|
1044
|
+
`)}en();Uo();Kt();ga();var tn="",Tm=[],Om=[],vt=new d().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(`${es} 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());tn=o.join(" ");let i=r=>r.options.filter(n=>r.getOptionValueSource(n.attributeName())==="cli").map(n=>n.long?.replace(/^--/,"")??n.short?.replace(/^-/,"")??"").filter(Boolean);Tm=i(t),Om=i(e),t.optsWithGlobals().quiet&&e.setOptionValue("json",!0),t.optsWithGlobals().insecureStorage&&(process.env.RESEND_CREDENTIAL_STORE="file")}).addHelpText("after",`
|
|
1019
1045
|
${oo.default.gray("Examples:")}
|
|
1020
1046
|
|
|
1021
1047
|
- Login to Resend
|
|
@@ -1025,4 +1051,4 @@ ${oo.default.gray("Examples:")}
|
|
|
1025
1051
|
- Send an email
|
|
1026
1052
|
|
|
1027
1053
|
${oo.default.blue("$ resend emails send")}
|
|
1028
|
-
`).action(()=>{process.stdout.isTTY&&
|
|
1054
|
+
`).action(()=>{process.stdout.isTTY&&Um();let e=vt.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}),vt.help()}).addCommand(mi).addCommand(fc).addCommand(_l).addCommand(Xa).addCommand(vc).addCommand(qu).addCommand(xd).addCommand(ed).addCommand(Ku).addCommand(Yu).addCommand(Gd).addCommand(pu).addCommand(jl).addCommand(Bu).addCommand(au).addCommand(Ra).addCommand(Am).addCommand(bu).addCommand($a).addCommand(pi).addCommand(Cm).addCommand(Fd).addCommand(yu).addCommand(wd).addCommand(Xu).addCommand(Nl).addCommand(Wl),Em=new d("telemetry").description("Telemetry management").helpCommand(!1);Em.command("flush").argument("<file>").action(async e=>{let{flushFromFile:t}=await Promise.resolve().then(()=>(en(),Dm));await t(e)});vt.addCommand(Em,{hidden:!0});xm(vt);vt.parseAsync().then(()=>{let e=vt.args[0];if(e==="update"||e==="telemetry")return;tn&&Zr(tn,{...vt.opts(),flags:Tm,globalFlags:Om});let t=vt.opts();kd({json:!!(t.json||t.quiet)}).catch(()=>{})}).catch(e=>{h({message:W(e,"An unexpected error occurred"),code:"unexpected_error"})});
|