@sequenzy/cli 0.0.128 → 0.0.129

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/index.js +3 -3
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -259,7 +259,7 @@ Check the top-level render call using <`+Me+">."}return he}}function Ci(P,he){{i
259
259
  <%s {...props} />
260
260
  React keys must be passed directly to JSX without using spread:
261
261
  let props = %s;
262
- <%s key={someKey} {...props} />`,ks,ta,Rs,ta),vc[ta+ks]=!0}}if(P===n)ci($n);else ho($n);return $n}}var Wr=zu;yGe.Fragment=n,yGe.jsxDEV=Wr})()});var N1={};Afe(N1,{program:()=>nF,createCommand:()=>rF,createOption:()=>iF,createArgument:()=>oF,Command:()=>aF,Option:()=>sF,Argument:()=>lF,Help:()=>cF,CommanderError:()=>uF,InvalidArgumentError:()=>dF,InvalidOptionArgumentError:()=>pF},{program:(zZe)=>nF=zZe,createCommand:(zZe)=>rF=zZe,createOption:(zZe)=>iF=zZe,createArgument:(zZe)=>oF=zZe,Command:(zZe)=>aF=zZe,Option:(zZe)=>sF=zZe,Argument:(zZe)=>lF=zZe,Help:(zZe)=>cF=zZe,CommanderError:(zZe)=>uF=zZe,InvalidArgumentError:(zZe)=>dF=zZe,InvalidOptionArgumentError:(zZe)=>pF=zZe});var{Argument:XR}=ah(),{Command:F1}=ZR(),{CommanderError:Vfe,InvalidArgumentError:eF}=$0(),{Help:Wfe}=I1(),{Option:tF}=D1();var nF=new F1,rF=(e)=>new F1(e),iF=(e,t)=>new tF(e,t),oF=(e,t)=>new XR(e,t),aF=F1,sF=tF,lF=XR,cF=Wfe,uF=Vfe,dF=eF,pF=eF;var{program:jZe,createCommand:GZe,createArgument:VZe,createOption:WZe,CommanderError:KZe,InvalidArgumentError:JZe,InvalidOptionArgumentError:YZe,Command:mF,Argument:ZZe,Option:XZe,Help:eXe}=N1;var sh={name:"@sequenzy/cli",version:"0.0.128",description:"Sequenzy CLI for email marketing from the terminal",type:"module",bin:{sequenzy:"./dist/index.js"},main:"./src/index.tsx",types:"./src/index.tsx",exports:{".":"./src/index.tsx"},scripts:{dev:"bun --watch src/index.tsx",build:"bun ../../scripts/build-ink-cli.ts",start:"node dist/index.js",lint:"eslint src","type-check":"tsc --noEmit",test:"sh ../../scripts/run-package-tests.sh src","test:watch":"bun test --watch",prepublishOnly:"bun run build"},dependencies:{commander:"^12.1.0",ink:"^5.0.1","ink-spinner":"^5.0.0","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","ink-table":"^3.1.0",open:"^10.1.0",react:"^18.3.1",conf:"^13.0.0"},devDependencies:{"@emailer/shared":"workspace:*","@types/bun":"latest","@types/node":"^22.0.0","@types/react":"^18.3.0","bun-types":"latest",typescript:"^7.0.2"},files:["dist"],keywords:["sequenzy","email","cli","marketing"],license:"MIT",repository:{type:"git",url:"https://github.com/sequenzy/sequenzy"}};var lh="Variant copy is edited with `sequenzy ab-tests update-variant`, not with `sequenzy sequences update-node`.";import{isDeepStrictEqual as Y_e}from"node:util";import zU from"node:process";import Cd from"node:fs";import HU from"node:path";import Cg from"node:crypto";import Z_e from"node:assert";var pd=(e)=>{let t=typeof e;return e!==null&&(t==="object"||t==="function")};var P1=new Set(["__proto__","prototype","constructor"]),Jfe=new Set("0123456789");function ch(e){let t=[],n="",r="start",i=!1;for(let o of e)switch(o){case"\\":{if(r==="index")throw Error("Invalid character in an index");if(r==="indexEnd")throw Error("Invalid character after an index");if(i)n+=o;r="property",i=!i;break}case".":{if(r==="index")throw Error("Invalid character in an index");if(r==="indexEnd"){r="property";break}if(i){i=!1,n+=o;break}if(P1.has(n))return[];t.push(n),n="",r="property";break}case"[":{if(r==="index")throw Error("Invalid character in an index");if(r==="indexEnd"){r="index";break}if(i){i=!1,n+=o;break}if(r==="property"){if(P1.has(n))return[];t.push(n),n=""}r="index";break}case"]":{if(r==="index"){t.push(Number.parseInt(n,10)),n="",r="indexEnd";break}if(r==="indexEnd")throw Error("Invalid character after an index")}default:{if(r==="index"&&!Jfe.has(o))throw Error("Invalid character in an index");if(r==="indexEnd")throw Error("Invalid character after an index");if(r==="start")r="property";if(i)i=!1,n+="\\";n+=o}}if(i)n+="\\";switch(r){case"property":{if(P1.has(n))return[];t.push(n);break}case"index":throw Error("Index was not closed");case"start":{t.push("");break}}return t}function O1(e,t){if(typeof t!=="number"&&Array.isArray(e)){let n=Number.parseInt(t,10);return Number.isInteger(n)&&e[n]===e[t]}return!1}function fF(e,t){if(O1(e,t))throw Error("Cannot use string index")}function gF(e,t,n){if(!pd(e)||typeof t!=="string")return n===void 0?e:n;let r=ch(t);if(r.length===0)return n;for(let i=0;i<r.length;i++){let o=r[i];if(O1(e,o))e=i===r.length-1?void 0:null;else e=e[o];if(e===void 0||e===null){if(i!==r.length-1)return n;break}}return e===void 0?n:e}function L1(e,t,n){if(!pd(e)||typeof t!=="string")return e;let r=e,i=ch(t);for(let o=0;o<i.length;o++){let a=i[o];if(fF(e,a),o===i.length-1)e[a]=n;else if(!pd(e[a]))e[a]=typeof i[o+1]==="number"?[]:{};e=e[a]}return r}function xF(e,t){if(!pd(e)||typeof t!=="string")return!1;let n=ch(t);for(let r=0;r<n.length;r++){let i=n[r];if(fF(e,i),r===n.length-1)return delete e[i],!0;if(e=e[i],!pd(e))return!1}}function AF(e,t){if(!pd(e)||typeof t!=="string")return!1;let n=ch(t);if(n.length===0)return!1;for(let r of n){if(!pd(e)||!(r in e)||O1(e,r))return!1;e=e[r]}return!0}import Fr from"node:path";import EF from"node:os";import M1 from"node:process";var jc=EF.homedir(),U1=EF.tmpdir(),{env:rm}=M1,Yfe=(e)=>{let t=Fr.join(jc,"Library");return{data:Fr.join(t,"Application Support",e),config:Fr.join(t,"Preferences",e),cache:Fr.join(t,"Caches",e),log:Fr.join(t,"Logs",e),temp:Fr.join(U1,e)}},Zfe=(e)=>{let t=rm.APPDATA||Fr.join(jc,"AppData","Roaming"),n=rm.LOCALAPPDATA||Fr.join(jc,"AppData","Local");return{data:Fr.join(n,e,"Data"),config:Fr.join(t,e,"Config"),cache:Fr.join(n,e,"Cache"),log:Fr.join(n,e,"Log"),temp:Fr.join(U1,e)}},Xfe=(e)=>{let t=Fr.basename(jc);return{data:Fr.join(rm.XDG_DATA_HOME||Fr.join(jc,".local","share"),e),config:Fr.join(rm.XDG_CONFIG_HOME||Fr.join(jc,".config"),e),cache:Fr.join(rm.XDG_CACHE_HOME||Fr.join(jc,".cache"),e),log:Fr.join(rm.XDG_STATE_HOME||Fr.join(jc,".local","state"),e),temp:Fr.join(U1,t,e)}};function $1(e,{suffix:t="nodejs"}={}){if(typeof e!=="string")throw TypeError(`Expected a string, got ${typeof e}`);if(t)e+=`-${t}`;if(M1.platform==="darwin")return Yfe(e);if(M1.platform==="win32")return Zfe(e);return Xfe(e)}import s0e from"node:path";import Rn from"node:fs";import{promisify as so}from"node:util";var e0e=(e,t)=>{let{onError:n}=t;return function(...i){return e.apply(void 0,i).catch(n)}},tl=e0e;var t0e=(e,t)=>{let{onError:n}=t;return function(...i){try{return e.apply(void 0,i)}catch(o){return n(o)}}},os=t0e;var hF=250;var n0e=(e,t)=>{let{isRetriable:n}=t;return function(i){let{timeout:o}=i,a=i.interval??hF,c=Date.now()+o;return function u(...p){return e.apply(void 0,p).catch((g)=>{if(!n(g))throw g;if(Date.now()>=c)throw g;let A=Math.round(a*Math.random());if(A>0)return new Promise((h)=>setTimeout(h,A)).then(()=>u.apply(void 0,p));else return u.apply(void 0,p)})}}},nl=n0e;var r0e=(e,t)=>{let{isRetriable:n}=t;return function(i){let{timeout:o}=i,a=Date.now()+o;return function(...u){while(!0)try{return e.apply(void 0,u)}catch(p){if(!n(p))throw p;if(Date.now()>=a)throw p;continue}}}},rl=r0e;import bF from"node:process";var q0={isChangeErrorOk:(e)=>{if(!q0.isNodeError(e))return!1;let{code:t}=e;if(t==="ENOSYS")return!0;if(!yF&&(t==="EINVAL"||t==="EPERM"))return!0;return!1},isNodeError:(e)=>e instanceof Error,isRetriableError:(e)=>{if(!q0.isNodeError(e))return!1;let{code:t}=e;if(t==="EMFILE"||t==="ENFILE"||t==="EAGAIN"||t==="EBUSY"||t==="EACCESS"||t==="EACCES"||t==="EACCS"||t==="EPERM")return!0;return!1},onChangeError:(e)=>{if(!q0.isNodeError(e))throw e;if(q0.isChangeErrorOk(e))return;throw e}},q1=q0;var Q0={onError:q1.onChangeError},zo={onError:()=>{return}},yF=bF.getuid?!bF.getuid():!1,Wi={isRetriable:q1.isRetriableError};var i0e={attempt:{chmod:tl(so(Rn.chmod),Q0),chown:tl(so(Rn.chown),Q0),close:tl(so(Rn.close),zo),fsync:tl(so(Rn.fsync),zo),mkdir:tl(so(Rn.mkdir),zo),realpath:tl(so(Rn.realpath),zo),stat:tl(so(Rn.stat),zo),unlink:tl(so(Rn.unlink),zo),chmodSync:os(Rn.chmodSync,Q0),chownSync:os(Rn.chownSync,Q0),closeSync:os(Rn.closeSync,zo),existsSync:os(Rn.existsSync,zo),fsyncSync:os(Rn.fsync,zo),mkdirSync:os(Rn.mkdirSync,zo),realpathSync:os(Rn.realpathSync,zo),statSync:os(Rn.statSync,zo),unlinkSync:os(Rn.unlinkSync,zo)},retry:{close:nl(so(Rn.close),Wi),fsync:nl(so(Rn.fsync),Wi),open:nl(so(Rn.open),Wi),readFile:nl(so(Rn.readFile),Wi),rename:nl(so(Rn.rename),Wi),stat:nl(so(Rn.stat),Wi),write:nl(so(Rn.write),Wi),writeFile:nl(so(Rn.writeFile),Wi),closeSync:rl(Rn.closeSync,Wi),fsyncSync:rl(Rn.fsyncSync,Wi),openSync:rl(Rn.openSync,Wi),readFileSync:rl(Rn.readFileSync,Wi),renameSync:rl(Rn.renameSync,Wi),statSync:rl(Rn.statSync,Wi),writeSync:rl(Rn.writeSync,Wi),writeFileSync:rl(Rn.writeFileSync,Wi)}},Di=i0e;import md from"node:process";var CF="utf8",Q1=438,BF=511;var SF={},vF=md.geteuid?md.geteuid():-1,_F=md.getegid?md.getegid():-1;var IF=1000,DF=!!md.getuid,RXe=md.getuid?!md.getuid():!1,z1=128;var wF=(e)=>e instanceof Error&&("code"in e);var H1=(e)=>typeof e==="string",uh=(e)=>e===void 0;import a0e from"node:path";import im from"node:process";import TF from"node:process";var kF=TF.platform==="linux",dh=TF.platform==="win32";var j1=["SIGHUP","SIGINT","SIGTERM"];if(!dh)j1.push("SIGALRM","SIGABRT","SIGVTALRM","SIGXCPU","SIGXFSZ","SIGUSR2","SIGTRAP","SIGSYS","SIGQUIT","SIGIOT");if(kF)j1.push("SIGIO","SIGPOLL","SIGPWR","SIGSTKFLT");var RF=j1;class FF{constructor(){this.callbacks=new Set,this.exited=!1,this.exit=(e)=>{if(this.exited)return;this.exited=!0;for(let t of this.callbacks)t();if(e)if(dh&&(e!=="SIGINT"&&e!=="SIGTERM"&&e!=="SIGKILL"))im.kill(im.pid,"SIGTERM");else im.kill(im.pid,e)},this.hook=()=>{im.once("exit",()=>this.exit());for(let e of RF)try{im.once(e,()=>this.exit(e))}catch{}},this.register=(e)=>(this.callbacks.add(e),()=>{this.callbacks.delete(e)}),this.hook()}}var NF=new FF;var o0e=NF.register,PF=o0e;var ca={store:{},create:(e)=>{let t=`000000${Math.floor(Math.random()*16777215).toString(16)}`.slice(-6),n=Date.now().toString().slice(-10),r="tmp-",i=`.tmp-${n}${t}`;return`${e}${i}`},get:(e,t,n=!0)=>{let r=ca.truncate(t(e));if(r in ca.store)return ca.get(e,t,n);return ca.store[r]=n,[r,()=>delete ca.store[r]]},purge:(e)=>{if(!ca.store[e])return;delete ca.store[e],Di.attempt.unlink(e)},purgeSync:(e)=>{if(!ca.store[e])return;delete ca.store[e],Di.attempt.unlinkSync(e)},purgeSyncAll:()=>{for(let e in ca.store)ca.purgeSync(e)},truncate:(e)=>{let t=a0e.basename(e);if(t.length<=z1)return e;let n=/^(\.?)(.*?)((?:\.[^.]+)?(?:\.tmp-\d{10}[a-f0-9]{6})?)$/.exec(t);if(!n)return e;let r=t.length-z1;return`${e.slice(0,-t.length)}${n[1]}${n[2].slice(0,-r)}${n[3]}`}};PF(ca.purgeSyncAll);var z0=ca;function G1(e,t,n=SF){if(H1(n))return G1(e,t,{encoding:n});let i={timeout:n.timeout??IF},o=null,a=null,c=null;try{let u=Di.attempt.realpathSync(e),p=!!u;e=u||e,[a,o]=z0.get(e,n.tmpCreate||z0.create,n.tmpPurge!==!1);let g=DF&&uh(n.chown),A=uh(n.mode);if(p&&(g||A)){let E=Di.attempt.statSync(e);if(E){if(n={...n},g)n.chown={uid:E.uid,gid:E.gid};if(A)n.mode=E.mode}}if(!p){let E=s0e.dirname(e);Di.attempt.mkdirSync(E,{mode:BF,recursive:!0})}if(c=Di.retry.openSync(i)(a,"w",n.mode||Q1),n.tmpCreated)n.tmpCreated(a);if(H1(t))Di.retry.writeSync(i)(c,t,0,n.encoding||CF);else if(!uh(t))Di.retry.writeSync(i)(c,t,0,t.length,0);if(n.fsync!==!1)if(n.fsyncWait!==!1)Di.retry.fsyncSync(i)(c);else Di.attempt.fsync(c);if(Di.retry.closeSync(i)(c),c=null,n.chown&&(n.chown.uid!==vF||n.chown.gid!==_F))Di.attempt.chownSync(a,n.chown.uid,n.chown.gid);if(n.mode&&n.mode!==Q1)Di.attempt.chmodSync(a,n.mode);try{Di.retry.renameSync(i)(a,e)}catch(E){if(!wF(E))throw E;if(E.code!=="ENAMETOOLONG")throw E;Di.retry.renameSync(i)(a,z0.truncate(e))}o(),a=null}finally{if(c)Di.attempt.closeSync(c);if(a)z0.purge(a)}}var GU=Ft(IL(),1),VU=Ft(KL(),1);var HBe=(e,t,n,r)=>{if(n==="length"||n==="prototype")return;if(n==="arguments"||n==="caller")return;let i=Object.getOwnPropertyDescriptor(e,n),o=Object.getOwnPropertyDescriptor(t,n);if(!jBe(i,o)&&r)return;Object.defineProperty(e,n,o)},jBe=function(e,t){return e===void 0||e.configurable||e.writable===t.writable&&e.enumerable===t.enumerable&&e.configurable===t.configurable&&(e.writable||e.value===t.value)},GBe=(e,t)=>{let n=Object.getPrototypeOf(t);if(n===Object.getPrototypeOf(e))return;Object.setPrototypeOf(e,n)},VBe=(e,t)=>`/* Wrapped ${e}*/
262
+ <%s key={someKey} {...props} />`,ks,ta,Rs,ta),vc[ta+ks]=!0}}if(P===n)ci($n);else ho($n);return $n}}var Wr=zu;yGe.Fragment=n,yGe.jsxDEV=Wr})()});var N1={};Afe(N1,{program:()=>nF,createCommand:()=>rF,createOption:()=>iF,createArgument:()=>oF,Command:()=>aF,Option:()=>sF,Argument:()=>lF,Help:()=>cF,CommanderError:()=>uF,InvalidArgumentError:()=>dF,InvalidOptionArgumentError:()=>pF},{program:(zZe)=>nF=zZe,createCommand:(zZe)=>rF=zZe,createOption:(zZe)=>iF=zZe,createArgument:(zZe)=>oF=zZe,Command:(zZe)=>aF=zZe,Option:(zZe)=>sF=zZe,Argument:(zZe)=>lF=zZe,Help:(zZe)=>cF=zZe,CommanderError:(zZe)=>uF=zZe,InvalidArgumentError:(zZe)=>dF=zZe,InvalidOptionArgumentError:(zZe)=>pF=zZe});var{Argument:XR}=ah(),{Command:F1}=ZR(),{CommanderError:Vfe,InvalidArgumentError:eF}=$0(),{Help:Wfe}=I1(),{Option:tF}=D1();var nF=new F1,rF=(e)=>new F1(e),iF=(e,t)=>new tF(e,t),oF=(e,t)=>new XR(e,t),aF=F1,sF=tF,lF=XR,cF=Wfe,uF=Vfe,dF=eF,pF=eF;var{program:jZe,createCommand:GZe,createArgument:VZe,createOption:WZe,CommanderError:KZe,InvalidArgumentError:JZe,InvalidOptionArgumentError:YZe,Command:mF,Argument:ZZe,Option:XZe,Help:eXe}=N1;var sh={name:"@sequenzy/cli",version:"0.0.129",description:"Sequenzy CLI for email marketing from the terminal",type:"module",bin:{sequenzy:"./dist/index.js"},main:"./src/index.tsx",types:"./src/index.tsx",exports:{".":"./src/index.tsx"},scripts:{dev:"bun --watch src/index.tsx",build:"bun ../../scripts/build-ink-cli.ts",start:"node dist/index.js",lint:"eslint src","type-check":"tsc --noEmit",test:"sh ../../scripts/run-package-tests.sh src","test:watch":"bun test --watch",prepublishOnly:"bun run build"},dependencies:{commander:"^12.1.0",ink:"^5.0.1","ink-spinner":"^5.0.0","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","ink-table":"^3.1.0",open:"^10.1.0",react:"^18.3.1",conf:"^13.0.0"},devDependencies:{"@emailer/shared":"workspace:*","@types/bun":"latest","@types/node":"^22.0.0","@types/react":"^18.3.0","bun-types":"latest",typescript:"^7.0.2"},files:["dist"],keywords:["sequenzy","email","cli","marketing"],license:"MIT",repository:{type:"git",url:"https://github.com/sequenzy/sequenzy"}};var lh="Variant copy is edited with `sequenzy ab-tests update-variant`, not with `sequenzy sequences update-node`.";import{isDeepStrictEqual as Y_e}from"node:util";import zU from"node:process";import Cd from"node:fs";import HU from"node:path";import Cg from"node:crypto";import Z_e from"node:assert";var pd=(e)=>{let t=typeof e;return e!==null&&(t==="object"||t==="function")};var P1=new Set(["__proto__","prototype","constructor"]),Jfe=new Set("0123456789");function ch(e){let t=[],n="",r="start",i=!1;for(let o of e)switch(o){case"\\":{if(r==="index")throw Error("Invalid character in an index");if(r==="indexEnd")throw Error("Invalid character after an index");if(i)n+=o;r="property",i=!i;break}case".":{if(r==="index")throw Error("Invalid character in an index");if(r==="indexEnd"){r="property";break}if(i){i=!1,n+=o;break}if(P1.has(n))return[];t.push(n),n="",r="property";break}case"[":{if(r==="index")throw Error("Invalid character in an index");if(r==="indexEnd"){r="index";break}if(i){i=!1,n+=o;break}if(r==="property"){if(P1.has(n))return[];t.push(n),n=""}r="index";break}case"]":{if(r==="index"){t.push(Number.parseInt(n,10)),n="",r="indexEnd";break}if(r==="indexEnd")throw Error("Invalid character after an index")}default:{if(r==="index"&&!Jfe.has(o))throw Error("Invalid character in an index");if(r==="indexEnd")throw Error("Invalid character after an index");if(r==="start")r="property";if(i)i=!1,n+="\\";n+=o}}if(i)n+="\\";switch(r){case"property":{if(P1.has(n))return[];t.push(n);break}case"index":throw Error("Index was not closed");case"start":{t.push("");break}}return t}function O1(e,t){if(typeof t!=="number"&&Array.isArray(e)){let n=Number.parseInt(t,10);return Number.isInteger(n)&&e[n]===e[t]}return!1}function fF(e,t){if(O1(e,t))throw Error("Cannot use string index")}function gF(e,t,n){if(!pd(e)||typeof t!=="string")return n===void 0?e:n;let r=ch(t);if(r.length===0)return n;for(let i=0;i<r.length;i++){let o=r[i];if(O1(e,o))e=i===r.length-1?void 0:null;else e=e[o];if(e===void 0||e===null){if(i!==r.length-1)return n;break}}return e===void 0?n:e}function L1(e,t,n){if(!pd(e)||typeof t!=="string")return e;let r=e,i=ch(t);for(let o=0;o<i.length;o++){let a=i[o];if(fF(e,a),o===i.length-1)e[a]=n;else if(!pd(e[a]))e[a]=typeof i[o+1]==="number"?[]:{};e=e[a]}return r}function xF(e,t){if(!pd(e)||typeof t!=="string")return!1;let n=ch(t);for(let r=0;r<n.length;r++){let i=n[r];if(fF(e,i),r===n.length-1)return delete e[i],!0;if(e=e[i],!pd(e))return!1}}function AF(e,t){if(!pd(e)||typeof t!=="string")return!1;let n=ch(t);if(n.length===0)return!1;for(let r of n){if(!pd(e)||!(r in e)||O1(e,r))return!1;e=e[r]}return!0}import Fr from"node:path";import EF from"node:os";import M1 from"node:process";var jc=EF.homedir(),U1=EF.tmpdir(),{env:rm}=M1,Yfe=(e)=>{let t=Fr.join(jc,"Library");return{data:Fr.join(t,"Application Support",e),config:Fr.join(t,"Preferences",e),cache:Fr.join(t,"Caches",e),log:Fr.join(t,"Logs",e),temp:Fr.join(U1,e)}},Zfe=(e)=>{let t=rm.APPDATA||Fr.join(jc,"AppData","Roaming"),n=rm.LOCALAPPDATA||Fr.join(jc,"AppData","Local");return{data:Fr.join(n,e,"Data"),config:Fr.join(t,e,"Config"),cache:Fr.join(n,e,"Cache"),log:Fr.join(n,e,"Log"),temp:Fr.join(U1,e)}},Xfe=(e)=>{let t=Fr.basename(jc);return{data:Fr.join(rm.XDG_DATA_HOME||Fr.join(jc,".local","share"),e),config:Fr.join(rm.XDG_CONFIG_HOME||Fr.join(jc,".config"),e),cache:Fr.join(rm.XDG_CACHE_HOME||Fr.join(jc,".cache"),e),log:Fr.join(rm.XDG_STATE_HOME||Fr.join(jc,".local","state"),e),temp:Fr.join(U1,t,e)}};function $1(e,{suffix:t="nodejs"}={}){if(typeof e!=="string")throw TypeError(`Expected a string, got ${typeof e}`);if(t)e+=`-${t}`;if(M1.platform==="darwin")return Yfe(e);if(M1.platform==="win32")return Zfe(e);return Xfe(e)}import s0e from"node:path";import Rn from"node:fs";import{promisify as so}from"node:util";var e0e=(e,t)=>{let{onError:n}=t;return function(...i){return e.apply(void 0,i).catch(n)}},tl=e0e;var t0e=(e,t)=>{let{onError:n}=t;return function(...i){try{return e.apply(void 0,i)}catch(o){return n(o)}}},os=t0e;var hF=250;var n0e=(e,t)=>{let{isRetriable:n}=t;return function(i){let{timeout:o}=i,a=i.interval??hF,c=Date.now()+o;return function u(...p){return e.apply(void 0,p).catch((g)=>{if(!n(g))throw g;if(Date.now()>=c)throw g;let A=Math.round(a*Math.random());if(A>0)return new Promise((h)=>setTimeout(h,A)).then(()=>u.apply(void 0,p));else return u.apply(void 0,p)})}}},nl=n0e;var r0e=(e,t)=>{let{isRetriable:n}=t;return function(i){let{timeout:o}=i,a=Date.now()+o;return function(...u){while(!0)try{return e.apply(void 0,u)}catch(p){if(!n(p))throw p;if(Date.now()>=a)throw p;continue}}}},rl=r0e;import bF from"node:process";var q0={isChangeErrorOk:(e)=>{if(!q0.isNodeError(e))return!1;let{code:t}=e;if(t==="ENOSYS")return!0;if(!yF&&(t==="EINVAL"||t==="EPERM"))return!0;return!1},isNodeError:(e)=>e instanceof Error,isRetriableError:(e)=>{if(!q0.isNodeError(e))return!1;let{code:t}=e;if(t==="EMFILE"||t==="ENFILE"||t==="EAGAIN"||t==="EBUSY"||t==="EACCESS"||t==="EACCES"||t==="EACCS"||t==="EPERM")return!0;return!1},onChangeError:(e)=>{if(!q0.isNodeError(e))throw e;if(q0.isChangeErrorOk(e))return;throw e}},q1=q0;var Q0={onError:q1.onChangeError},zo={onError:()=>{return}},yF=bF.getuid?!bF.getuid():!1,Wi={isRetriable:q1.isRetriableError};var i0e={attempt:{chmod:tl(so(Rn.chmod),Q0),chown:tl(so(Rn.chown),Q0),close:tl(so(Rn.close),zo),fsync:tl(so(Rn.fsync),zo),mkdir:tl(so(Rn.mkdir),zo),realpath:tl(so(Rn.realpath),zo),stat:tl(so(Rn.stat),zo),unlink:tl(so(Rn.unlink),zo),chmodSync:os(Rn.chmodSync,Q0),chownSync:os(Rn.chownSync,Q0),closeSync:os(Rn.closeSync,zo),existsSync:os(Rn.existsSync,zo),fsyncSync:os(Rn.fsync,zo),mkdirSync:os(Rn.mkdirSync,zo),realpathSync:os(Rn.realpathSync,zo),statSync:os(Rn.statSync,zo),unlinkSync:os(Rn.unlinkSync,zo)},retry:{close:nl(so(Rn.close),Wi),fsync:nl(so(Rn.fsync),Wi),open:nl(so(Rn.open),Wi),readFile:nl(so(Rn.readFile),Wi),rename:nl(so(Rn.rename),Wi),stat:nl(so(Rn.stat),Wi),write:nl(so(Rn.write),Wi),writeFile:nl(so(Rn.writeFile),Wi),closeSync:rl(Rn.closeSync,Wi),fsyncSync:rl(Rn.fsyncSync,Wi),openSync:rl(Rn.openSync,Wi),readFileSync:rl(Rn.readFileSync,Wi),renameSync:rl(Rn.renameSync,Wi),statSync:rl(Rn.statSync,Wi),writeSync:rl(Rn.writeSync,Wi),writeFileSync:rl(Rn.writeFileSync,Wi)}},Di=i0e;import md from"node:process";var CF="utf8",Q1=438,BF=511;var SF={},vF=md.geteuid?md.geteuid():-1,_F=md.getegid?md.getegid():-1;var IF=1000,DF=!!md.getuid,RXe=md.getuid?!md.getuid():!1,z1=128;var wF=(e)=>e instanceof Error&&("code"in e);var H1=(e)=>typeof e==="string",uh=(e)=>e===void 0;import a0e from"node:path";import im from"node:process";import TF from"node:process";var kF=TF.platform==="linux",dh=TF.platform==="win32";var j1=["SIGHUP","SIGINT","SIGTERM"];if(!dh)j1.push("SIGALRM","SIGABRT","SIGVTALRM","SIGXCPU","SIGXFSZ","SIGUSR2","SIGTRAP","SIGSYS","SIGQUIT","SIGIOT");if(kF)j1.push("SIGIO","SIGPOLL","SIGPWR","SIGSTKFLT");var RF=j1;class FF{constructor(){this.callbacks=new Set,this.exited=!1,this.exit=(e)=>{if(this.exited)return;this.exited=!0;for(let t of this.callbacks)t();if(e)if(dh&&(e!=="SIGINT"&&e!=="SIGTERM"&&e!=="SIGKILL"))im.kill(im.pid,"SIGTERM");else im.kill(im.pid,e)},this.hook=()=>{im.once("exit",()=>this.exit());for(let e of RF)try{im.once(e,()=>this.exit(e))}catch{}},this.register=(e)=>(this.callbacks.add(e),()=>{this.callbacks.delete(e)}),this.hook()}}var NF=new FF;var o0e=NF.register,PF=o0e;var ca={store:{},create:(e)=>{let t=`000000${Math.floor(Math.random()*16777215).toString(16)}`.slice(-6),n=Date.now().toString().slice(-10),r="tmp-",i=`.tmp-${n}${t}`;return`${e}${i}`},get:(e,t,n=!0)=>{let r=ca.truncate(t(e));if(r in ca.store)return ca.get(e,t,n);return ca.store[r]=n,[r,()=>delete ca.store[r]]},purge:(e)=>{if(!ca.store[e])return;delete ca.store[e],Di.attempt.unlink(e)},purgeSync:(e)=>{if(!ca.store[e])return;delete ca.store[e],Di.attempt.unlinkSync(e)},purgeSyncAll:()=>{for(let e in ca.store)ca.purgeSync(e)},truncate:(e)=>{let t=a0e.basename(e);if(t.length<=z1)return e;let n=/^(\.?)(.*?)((?:\.[^.]+)?(?:\.tmp-\d{10}[a-f0-9]{6})?)$/.exec(t);if(!n)return e;let r=t.length-z1;return`${e.slice(0,-t.length)}${n[1]}${n[2].slice(0,-r)}${n[3]}`}};PF(ca.purgeSyncAll);var z0=ca;function G1(e,t,n=SF){if(H1(n))return G1(e,t,{encoding:n});let i={timeout:n.timeout??IF},o=null,a=null,c=null;try{let u=Di.attempt.realpathSync(e),p=!!u;e=u||e,[a,o]=z0.get(e,n.tmpCreate||z0.create,n.tmpPurge!==!1);let g=DF&&uh(n.chown),A=uh(n.mode);if(p&&(g||A)){let E=Di.attempt.statSync(e);if(E){if(n={...n},g)n.chown={uid:E.uid,gid:E.gid};if(A)n.mode=E.mode}}if(!p){let E=s0e.dirname(e);Di.attempt.mkdirSync(E,{mode:BF,recursive:!0})}if(c=Di.retry.openSync(i)(a,"w",n.mode||Q1),n.tmpCreated)n.tmpCreated(a);if(H1(t))Di.retry.writeSync(i)(c,t,0,n.encoding||CF);else if(!uh(t))Di.retry.writeSync(i)(c,t,0,t.length,0);if(n.fsync!==!1)if(n.fsyncWait!==!1)Di.retry.fsyncSync(i)(c);else Di.attempt.fsync(c);if(Di.retry.closeSync(i)(c),c=null,n.chown&&(n.chown.uid!==vF||n.chown.gid!==_F))Di.attempt.chownSync(a,n.chown.uid,n.chown.gid);if(n.mode&&n.mode!==Q1)Di.attempt.chmodSync(a,n.mode);try{Di.retry.renameSync(i)(a,e)}catch(E){if(!wF(E))throw E;if(E.code!=="ENAMETOOLONG")throw E;Di.retry.renameSync(i)(a,z0.truncate(e))}o(),a=null}finally{if(c)Di.attempt.closeSync(c);if(a)z0.purge(a)}}var GU=Ft(IL(),1),VU=Ft(KL(),1);var HBe=(e,t,n,r)=>{if(n==="length"||n==="prototype")return;if(n==="arguments"||n==="caller")return;let i=Object.getOwnPropertyDescriptor(e,n),o=Object.getOwnPropertyDescriptor(t,n);if(!jBe(i,o)&&r)return;Object.defineProperty(e,n,o)},jBe=function(e,t){return e===void 0||e.configurable||e.writable===t.writable&&e.enumerable===t.enumerable&&e.configurable===t.configurable&&(e.writable||e.value===t.value)},GBe=(e,t)=>{let n=Object.getPrototypeOf(t);if(n===Object.getPrototypeOf(e))return;Object.setPrototypeOf(e,n)},VBe=(e,t)=>`/* Wrapped ${e}*/
263
263
  ${t}`,WBe=Object.getOwnPropertyDescriptor(Function.prototype,"toString"),KBe=Object.getOwnPropertyDescriptor(Function.prototype.toString,"name"),JBe=(e,t,n)=>{let r=n===""?"":`with ${n.trim()}() `,i=VBe.bind(null,r,t.toString());Object.defineProperty(i,"name",KBe);let{writable:o,enumerable:a,configurable:c}=WBe;Object.defineProperty(e,"toString",{value:i,writable:o,enumerable:a,configurable:c})};function s2(e,t,{ignoreNonConfigurable:n=!1}={}){let{name:r}=e;for(let i of Reflect.ownKeys(t))HBe(e,t,i,n);return GBe(e,t),JBe(e,t,r),e}var YBe=(e,t={})=>{if(typeof e!=="function")throw TypeError(`Expected the first argument to be a function, got \`${typeof e}\``);let{wait:n=0,maxWait:r=Number.POSITIVE_INFINITY,before:i=!1,after:o=!0}=t;if(n<0||r<0)throw RangeError("`wait` and `maxWait` must not be negative.");if(!i&&!o)throw Error("Both `before` and `after` are false, function wouldn't be called.");let a,c,u,p=function(...g){let A=this,E=()=>{if(a=void 0,c)clearTimeout(c),c=void 0;if(o)u=e.apply(A,g)},h=()=>{if(c=void 0,a)clearTimeout(a),a=void 0;if(o)u=e.apply(A,g)},D=i&&!a;if(clearTimeout(a),a=setTimeout(E,n),r>0&&r!==Number.POSITIVE_INFINITY&&!c)c=setTimeout(h,r);if(D)u=e.apply(A,g);return u};return s2(p,e),p.cancel=()=>{if(a)clearTimeout(a),a=void 0;if(c)clearTimeout(c),c=void 0},p},l2=YBe;var Bd=Ft(UU(),1);var H_e=Object.prototype.toString;function qU(e,t,n){if(!e)return!1;if(e.constructor===t)return!0;return H_e.call(e)===n}function QU(e){return qU(e,Uint8Array,"[object Uint8Array]")}function j_e(e){return qU(e,ArrayBuffer,"[object ArrayBuffer]")}function G_e(e){return QU(e)||j_e(e)}function V_e(e){if(!QU(e))throw TypeError(`Expected \`Uint8Array\`, got \`${typeof e}\``)}function W_e(e){if(!G_e(e))throw TypeError(`Expected \`Uint8Array\` or \`ArrayBuffer\`, got \`${typeof e}\``)}function S2(e,t){if(e.length===0)return new Uint8Array(0);t??=e.reduce((i,o)=>i+o.length,0);let n=new Uint8Array(t),r=0;for(let i of e)V_e(i),n.set(i,r),r+=i.length;return n}var $U={utf8:new globalThis.TextDecoder("utf8")};function v2(e,t="utf8"){return W_e(e),$U[t]??=new globalThis.TextDecoder(t),$U[t].decode(e)}function K_e(e){if(typeof e!=="string")throw TypeError(`Expected \`string\`, got \`${typeof e}\``)}var J_e=new globalThis.TextEncoder;function cy(e){return K_e(e),J_e.encode(e)}var brt=Array.from({length:256},(e,t)=>t.toString(16).padStart(2,"0"));var X_e=VU.default.default,jU="aes-256-cbc",ym=()=>Object.create(null),e1e=(e)=>e!==void 0&&e!==null,t1e=(e,t)=>{let n=new Set(["undefined","symbol","function"]),r=typeof t;if(n.has(r))throw TypeError(`Setting a value of type \`${r}\` for key \`${e}\` is not allowed as it's not supported by JSON`)},uy="__internal__",_2=`${uy}.migrations.version`;class dy{path;events;#r;#t;#e;#n={};constructor(e={}){let t={configName:"config",fileExtension:"json",projectSuffix:"nodejs",clearInvalidConfig:!1,accessPropertiesByDotNotation:!0,configFileMode:438,...e};if(!t.cwd){if(!t.projectName)throw Error("Please specify the `projectName` option.");t.cwd=$1(t.projectName,{suffix:t.projectSuffix}).config}if(this.#e=t,t.schema??t.ajvOptions??t.rootSchema){if(t.schema&&typeof t.schema!=="object")throw TypeError("The `schema` option must be an object.");let o=new GU.Ajv2020({allErrors:!0,useDefaults:!0,...t.ajvOptions});X_e(o);let a={...t.rootSchema,type:"object",properties:t.schema};this.#r=o.compile(a);for(let[c,u]of Object.entries(t.schema??{}))if(u?.default)this.#n[c]=u.default}if(t.defaults)this.#n={...this.#n,...t.defaults};if(t.serialize)this._serialize=t.serialize;if(t.deserialize)this._deserialize=t.deserialize;this.events=new EventTarget,this.#t=t.encryptionKey;let n=t.fileExtension?`.${t.fileExtension}`:"";this.path=HU.resolve(t.cwd,`${t.configName??"config"}${n}`);let r=this.store,i=Object.assign(ym(),t.defaults,r);if(t.migrations){if(!t.projectVersion)throw Error("Please specify the `projectVersion` option.");this._migrate(t.migrations,t.projectVersion,t.beforeEachMigration)}this._validate(i);try{Z_e.deepEqual(r,i)}catch{this.store=i}if(t.watch)this._watch()}get(e,t){if(this.#e.accessPropertiesByDotNotation)return this._get(e,t);let{store:n}=this;return e in n?n[e]:t}set(e,t){if(typeof e!=="string"&&typeof e!=="object")throw TypeError(`Expected \`key\` to be of type \`string\` or \`object\`, got ${typeof e}`);if(typeof e!=="object"&&t===void 0)throw TypeError("Use `delete()` to clear values");if(this._containsReservedKey(e))throw TypeError(`Please don't use the ${uy} key, as it's used to manage this module internal operations.`);let{store:n}=this,r=(i,o)=>{if(t1e(i,o),this.#e.accessPropertiesByDotNotation)L1(n,i,o);else n[i]=o};if(typeof e==="object"){let i=e;for(let[o,a]of Object.entries(i))r(o,a)}else r(e,t);this.store=n}has(e){if(this.#e.accessPropertiesByDotNotation)return AF(this.store,e);return e in this.store}reset(...e){for(let t of e)if(e1e(this.#n[t]))this.set(t,this.#n[t])}delete(e){let{store:t}=this;if(this.#e.accessPropertiesByDotNotation)xF(t,e);else delete t[e];this.store=t}clear(){this.store=ym();for(let e of Object.keys(this.#n))this.reset(e)}onDidChange(e,t){if(typeof e!=="string")throw TypeError(`Expected \`key\` to be of type \`string\`, got ${typeof e}`);if(typeof t!=="function")throw TypeError(`Expected \`callback\` to be of type \`function\`, got ${typeof t}`);return this._handleChange(()=>this.get(e),t)}onDidAnyChange(e){if(typeof e!=="function")throw TypeError(`Expected \`callback\` to be of type \`function\`, got ${typeof e}`);return this._handleChange(()=>this.store,e)}get size(){return Object.keys(this.store).length}get store(){try{let e=Cd.readFileSync(this.path,this.#t?null:"utf8"),t=this._encryptData(e),n=this._deserialize(t);return this._validate(n),Object.assign(ym(),n)}catch(e){if(e?.code==="ENOENT")return this._ensureDirectory(),ym();if(this.#e.clearInvalidConfig&&e.name==="SyntaxError")return ym();throw e}}set store(e){this._ensureDirectory(),this._validate(e),this._write(e),this.events.dispatchEvent(new Event("change"))}*[Symbol.iterator](){for(let[e,t]of Object.entries(this.store))yield[e,t]}_encryptData(e){if(!this.#t)return typeof e==="string"?e:v2(e);try{let t=e.slice(0,16),n=Cg.pbkdf2Sync(this.#t,t.toString(),1e4,32,"sha512"),r=Cg.createDecipheriv(jU,n,t),i=e.slice(17),o=typeof i==="string"?cy(i):i;return v2(S2([r.update(o),r.final()]))}catch{}return e.toString()}_handleChange(e,t){let n=e(),r=()=>{let i=n,o=e();if(Y_e(o,i))return;n=o,t.call(this,o,i)};return this.events.addEventListener("change",r),()=>{this.events.removeEventListener("change",r)}}_deserialize=(e)=>JSON.parse(e);_serialize=(e)=>JSON.stringify(e,void 0,"\t");_validate(e){if(!this.#r)return;if(this.#r(e)||!this.#r.errors)return;let n=this.#r.errors.map(({instancePath:r,message:i=""})=>`\`${r.slice(1)}\` ${i}`);throw Error("Config schema violation: "+n.join("; "))}_ensureDirectory(){Cd.mkdirSync(HU.dirname(this.path),{recursive:!0})}_write(e){let t=this._serialize(e);if(this.#t){let n=Cg.randomBytes(16),r=Cg.pbkdf2Sync(this.#t,n.toString(),1e4,32,"sha512"),i=Cg.createCipheriv(jU,r,n);t=S2([n,cy(":"),i.update(cy(t)),i.final()])}if(zU.env.SNAP)Cd.writeFileSync(this.path,t,{mode:this.#e.configFileMode});else try{G1(this.path,t,{mode:this.#e.configFileMode})}catch(n){if(n?.code==="EXDEV"){Cd.writeFileSync(this.path,t,{mode:this.#e.configFileMode});return}throw n}}_watch(){if(this._ensureDirectory(),!Cd.existsSync(this.path))this._write(ym());if(zU.platform==="win32")Cd.watch(this.path,{persistent:!1},l2(()=>{this.events.dispatchEvent(new Event("change"))},{wait:100}));else Cd.watchFile(this.path,{persistent:!1},l2(()=>{this.events.dispatchEvent(new Event("change"))},{wait:5000}))}_migrate(e,t,n){let r=this._get(_2,"0.0.0"),i=Object.keys(e).filter((a)=>this._shouldPerformMigration(a,r,t)),o={...this.store};for(let a of i)try{if(n)n(this,{fromVersion:r,toVersion:a,finalVersion:t,versions:i});let c=e[a];c?.(this),this._set(_2,a),r=a,o={...this.store}}catch(c){throw this.store=o,Error(`Something went wrong during the migration! Changes applied to the store until this failed migration will be restored. ${c}`)}if(this._isVersionInRangeFormat(r)||!Bd.default.eq(r,t))this._set(_2,t)}_containsReservedKey(e){if(typeof e==="object"){if(Object.keys(e)[0]===uy)return!0}if(typeof e!=="string")return!1;if(this.#e.accessPropertiesByDotNotation){if(e.startsWith(`${uy}.`))return!0;return!1}return!1}_isVersionInRangeFormat(e){return Bd.default.clean(e)===null}_shouldPerformMigration(e,t,n){if(this._isVersionInRangeFormat(e)){if(t!=="0.0.0"&&Bd.default.satisfies(t,e))return!1;return Bd.default.satisfies(n,e)}if(Bd.default.lte(e,t))return!1;if(Bd.default.gt(e,n))return!1;return!0}_get(e,t){return gF(this.store,e,t)}_set(e,t){let{store:n}=this;L1(n,e,t),this.store=n}}var I2="com.sequenzy.cli",D2="api-key",w2=typeof globalThis.Bun<"u",eu=new dy({projectName:"sequenzy",schema:{userId:{type:"string"},userEmail:{type:"string"},_apiKey:{type:"string"}}});async function T2(){let e=process.env.SEQUENZY_API_KEY;if(e)return e;if(w2)try{let t=await globalThis.Bun.secrets.get({service:I2,name:D2});if(t)return t}catch{}return eu.get("_apiKey")}async function WU(e){if(w2)try{await globalThis.Bun.secrets.set({service:I2,name:D2,value:e,allowUnrestrictedAccess:!1});return}catch{}eu.set("_apiKey",e)}async function KU(){if(w2)try{await globalThis.Bun.secrets.delete({service:I2,name:D2})}catch{}eu.delete("_apiKey")}async function ue(){return!!await T2()}function py(){return{userId:eu.get("userId"),userEmail:eu.get("userEmail")}}function JU(e){if(e.userId!==void 0)eu.set("userId",e.userId);if(e.userEmail!==void 0)eu.set("userEmail",e.userEmail)}function YU(){eu.clear()}var n1e=process.env.SEQUENZY_API_URL??"https://api.sequenzy.com";class y extends Error{statusCode;rawDetails;code;constructor(e,t,n,r){super(e);this.statusCode=t;this.rawDetails=n;this.code=r;this.name="ApiError"}}function r1e(e){if(!e.trim())return{message:"Request failed"};try{let t=JSON.parse(e);if(typeof t==="string")return{message:t};if(typeof t.error==="string")return{message:t.error,code:t.code};if(t.error&&typeof t.error==="object")return{message:t.error.message??t.message??e,code:t.error.code??t.code};return{message:t.message??e,code:t.code}}catch{return{message:e}}}async function w(e,t,n,r,i){let o=await T2();if(!o)throw new y("Not logged in. Run `sequenzy login` first.",401);let a={"Content-Type":"application/json",Authorization:`Bearer ${o}`,"x-sequenzy-client":`cli/${sh.version}`};if(r)a["x-company-id"]=r;Object.assign(a,i);let c;try{c=await fetch(`${n1e}${t}`,{method:e,headers:a,body:n?JSON.stringify(n):void 0})}catch(u){throw new y(u instanceof Error?u.message:"Failed to reach Sequenzy API",0,void 0,"NETWORK_ERROR")}if(!c.ok){let u=await c.text(),p=r1e(u);throw new y(p.message,c.status,u,p.code)}return c.json()}var R2="https://docs.sequenzy.com",Jl=`${R2}/concepts/cli`,k2=`${R2}/authentication`,ZU="https://sequenzy.com/dashboard";function i1e(e){if(e instanceof y)return{message:e.message,statusCode:e.statusCode,code:e.code,rawDetails:e.rawDetails};if(e instanceof Error)return{message:e.message};return{message:String(e)}}function o1e(e){let t=e.match(/api key is missing required scopes?:\s*(.+)$/i);if(!t?.[1])return[];return[...new Set(t[1].match(/[a-z_]+:[a-z_]+/gi)??[])]}function a1e(e){let t=i1e(e),n=t.message.trim()||"Unknown error",r=n.toLowerCase(),i=t.rawDetails?.trim()||n;if(t.code==="CLI_AUTH_REQUIRED"||r.includes("not logged in"))return{title:"Authentication required",description:"This command needs a Sequenzy API key, but the CLI could not find one in your local login state or environment.",howToFix:"Run `sequenzy login` and approve the session, or set `SEQUENZY_API_KEY` for non-interactive environments.",docsUrl:Jl,details:i};if(r.includes("already logged in"))return{title:"CLI already authenticated",description:"The CLI already has a saved Sequenzy login for this machine.",howToFix:"Run `sequenzy logout` first if you want to switch accounts, then run `sequenzy login` again.",docsUrl:Jl,details:i};if(t.statusCode===401||t.code==="UNAUTHORIZED")return{title:"Authentication failed",description:"The request reached Sequenzy, but the current API key was rejected.",howToFix:"Run `sequenzy login` again, or replace the key with a valid personal API key that still has access to your account.",docsUrl:k2,details:i};if(t.code==="COMPANY_CREATE_REQUIRES_PERSONAL_KEY")return{title:"Personal account key required",description:"Company creation is account-level and cannot be performed with a company/workspace-scoped API key.",howToFix:"Create or use a personal account key beginning with `seq_user_` from Account → API Keys, replace `SEQUENZY_API_KEY`, and retry the same command; alternatively, create the company in the Sequenzy dashboard. Widening the current company key or switching companies will not fix this restriction.",docsUrl:k2,details:i};let o=o1e(n);if(o.length>0){let a=o.map((p)=>`\`${p}\``).join(", "),c=o.every((p)=>p.endsWith(":read"))?"the Read-only or Safer agent access preset":"Safer agent access when it covers the task, or Custom permissions",u=o.includes("api_keys:manage")?` This command manages API keys, so the missing scope cannot be granted through the API by the key that is missing it. If the active key has \`account:read\`, run \`sequenzy api-keys handoff\` (add \`--replaces current\` when rotating) to get a dashboard link that opens the create-key form prefilled, then give it to the workspace owner. It creates nothing and never prints a key. If handoff is also denied because \`account:read\` is missing, open ${ZU} directly and choose the matching API Keys page.`:"";return{title:"API key permission required",description:`The current API key is valid, but this operation requires the missing ${o.length===1?"scope":"scopes"}: ${a}.`,howToFix:`Permissions can be widened on the key you are already using - no new key and no re-login. Run \`sequenzy account\` to see the active key, its type, and its API Keys settings URL, then have the key owner enable ${a} there. Personal keys open Account → API Keys; company keys open workspace Settings → API Keys. If account metadata is unavailable, open ${ZU} directly and choose the matching API Keys page. When the active key type is \`company\` and it holds \`api_keys:manage\`, run \`sequenzy api-keys list --json\` and then \`sequenzy api-keys update <api-key-id> --scopes\` with the current scopes plus ${a}, or \`--preset\` covering all of them (${c}). Personal keys cannot be changed through \`sequenzy api-keys update\`. Both options replace the whole selection rather than merging. Retry the same command once the key is updated. Issuing a replacement key and swapping \`SEQUENZY_API_KEY\` also works but is not required.${u}`,docsUrl:Jl,details:i}}if(t.statusCode===403||r.includes("access denied"))return{title:"Access denied",description:"The current API key is valid, but it does not have permission to perform this action or access the requested company.",howToFix:"Use an API key with access to the target company, or switch to a company you can access before retrying.",docsUrl:k2,details:i};if(t.statusCode===404||r.includes("not found"))return{title:"Requested resource not found",description:"Sequenzy could not find the company, template, campaign, sequence, or subscriber you asked for.",howToFix:"Double-check the ID or email value and list the resource first before retrying the command.",docsUrl:Jl,details:i};if(t.statusCode===429||r.includes("rate limit"))return{title:"Rate limited",description:"Sequenzy temporarily slowed this request because too many requests were sent in a short period.",howToFix:"Wait a moment and retry. If an agent is looping, reduce the retry frequency before calling the CLI again.",docsUrl:Jl,details:i};if(t.code==="AB_TEST_VARIANT_CONTENT_EDIT"||r.includes("update_ab_test_variant")&&(r.includes("a/b test")||r.includes("ab test")))return{title:"A/B variant copy cannot be edited here",description:n,howToFix:"Use `sequenzy ab-tests update-variant` with the `abTestId` and `variantId` from `sequenzy sequences get` or `sequenzy ab-tests get`. Repeat once per variant for a whole-step rewrite. If the sequence is live or the test has activity, pass `--confirm-live-change`. Do not retry with `sequenzy templates update` or `sequenzy sequences update-node`.",docsUrl:`${R2}/concepts/cli#editing-the-copy-of-a-sequence-ab-step`,details:i};if(r.includes("--subject")||r.includes("--template")||r.includes("is required"))return{title:"Invalid command input",description:"The CLI command arguments are incomplete or incompatible for this action.",howToFix:"Review the flags you passed, add the missing values, and run the command again.",docsUrl:Jl,details:i};if(t.code==="NETWORK_ERROR"||r.includes("fetch failed")||r.includes("failed to initiate login"))return{title:"Network or configuration error",description:"The CLI could not reach the Sequenzy API or app URL from this environment.",howToFix:"Check your network connection and verify `SEQUENZY_API_URL` or `SEQUENZY_APP_URL` if you override them locally.",docsUrl:Jl,details:i};if(t.statusCode&&t.statusCode>=500)return{title:"Sequenzy server error",description:"The request reached Sequenzy, but the server could not complete it successfully.",howToFix:"Retry once. If the error persists, keep the details below and check the docs before escalating.",docsUrl:Jl,details:i};return{title:"Command failed",description:"The CLI could not complete the requested operation.",howToFix:"Review the details below, adjust the command or credentials, and retry.",docsUrl:Jl,details:i}}function fe(){return new y("Not logged in. Run `sequenzy login` first.",401,void 0,"CLI_AUTH_REQUIRED")}function Bg(e){let t=a1e(e);return[`Sequenzy CLI error: ${t.title}`,`Description: ${t.description}`,`How to fix: ${t.howToFix}`,`Docs: ${t.docsUrl}`,`Details: ${t.details}`].join(`
264
264
  `)}function Q(e){console.error(Bg(e))}import{readFileSync as s1e}from"node:fs";import{createInterface as l1e}from"node:readline/promises";function R(e){console.log(JSON.stringify(e,null,2))}function qr(e){if(typeof e!=="object"||e===null)return;let t=e.warnings;if(!Array.isArray(t)||t.length===0)return;for(let n of t)if(typeof n==="string")console.warn(`Warning: ${n}`)}function xe(e){if(!e)return"None";let t=e instanceof Date?e:new Date(e);if(Number.isNaN(t.getTime()))return String(e);return t.toISOString()}function ms(e){if(e==="branded")return"Branded";if(e==="minimal")return"Minimal";if(e===null)return"Raw HTML";return"Unknown"}function XU(e){if(!e)return"Company default";let t=[`Override: ${e.presetId??"custom"}`];if(e.colors?.background)t.push(`background ${e.colors.background}`);if(e.colors?.content)t.push(`content ${e.colors.content}`);if(e.colors?.primary)t.push(`primary ${e.colors.primary}`);return t.join(", ")}function wi(e,t,n){if(e&&t)throw new y(`Provide either --${n} or --${n}-file, not both`,400);if(!t)return e;try{return s1e(t,"utf8")}catch(r){throw new y(`Failed to read ${n} file '${t}': ${r instanceof Error?r.message:"Unknown error"}`,400)}}function ht(e,t,n){let r=wi(e,t,n);if(!r)return;try{return JSON.parse(r)}catch(i){throw new y(`Invalid ${n} JSON: ${i instanceof Error?i.message:"Unknown error"}`,400)}}function Yl(e){let t=wi(e.html,e.htmlFile,"html"),n=ht(e.blocksJson,e.blocksFile,"blocks");if(t!==void 0&&n!==void 0)throw new y("Provide either --html/--html-file or --blocks-json/--blocks-file, not both",400);if(n!==void 0&&!Array.isArray(n))throw new y("blocks JSON must be an array",400);if(e.required&&t===void 0&&n===void 0)throw new y(e.requiredMessage??"Provide either --html/--html-file or --blocks-json/--blocks-file",400);return{...t!==void 0&&{html:t},...n!==void 0&&{blocks:n}}}function Mt(e,t){if(e===void 0)return;let n=e.trim();if(!/^[+-]?\d+$/.test(n))throw new y(`${t} must be an integer`,400);let r=Number(n);if(!Number.isInteger(r))throw new y(`${t} must be an integer`,400);return r}function ua(e,t){if(e===void 0)return;let n=e.trim().toLowerCase();if(["on","true","yes","enabled"].includes(n))return!0;if(["off","false","no","disabled"].includes(n))return!1;throw new y(`${t} must be "on" or "off"`,400)}async function zn(e,t){if(t.yes===!0)return!0;if(!process.stdin.isTTY)throw new y(`${e} Confirmation is required: re-run with --yes when stdin is not interactive`,400);let n=l1e({input:process.stdin,output:process.stdout});try{let r=(await n.question(`${e} [y/N] `)).trim().toLowerCase();return r==="y"||r==="yes"}finally{n.close()}}function ll(e,t){if(!e||e.trim()==="")throw new y(`${t} is required`,400);return e}var e$=new Set(["open_rate","click_rate"]);function c1e(e,t){if(typeof e!=="object"||e===null)throw new y(`${t} must be an object with a subject field`,400);let n=e;if(typeof n.subject!=="string"||n.subject.trim()==="")throw new y(`${t}.subject must be a non-empty string`,400);if(n.previewText!==void 0&&typeof n.previewText!=="string")throw new y(`${t}.previewText must be a string`,400);if(n.blocks!==void 0&&!Array.isArray(n.blocks))throw new y(`${t}.blocks must be an array`,400);return{subject:n.subject,...n.previewText!==void 0&&{previewText:n.previewText},...Array.isArray(n.blocks)&&{blocks:n.blocks}}}function u1e(e){if(Boolean(e.campaignId)===Boolean(e.automationNodeId))throw new y("Provide exactly one campaign ID or --automation-node",400);let t=Mt(e.testPercentage,"--test-percentage");if(t!==void 0&&(t<5||t>50))throw new y("--test-percentage must be an integer between 5 and 50",400);if(e.testType!==void 0&&e.testType!=="subject"&&e.testType!=="content")throw new y("--test-type must be subject or content",400);let n=Mt(e.winnerThreshold,"--winner-threshold");if(n!==void 0&&(n<10||n>1000))throw new y("--winner-threshold must be an integer between 10 and 1000",400);let r=Mt(e.durationMinutes,"--duration-minutes");if(r!==void 0&&(r<15||r>1440))throw new y("--duration-minutes must be an integer between 15 and 1440",400);if(e.winnerCriteria!==void 0&&!e$.has(e.winnerCriteria))throw new y("--winner-criteria must be open_rate or click_rate",400);let i=ht(e.variantsJson,e.variantsFile,"variants"),o;if(i!==void 0){if(!Array.isArray(i))throw new y("variants JSON must be an array",400);o=i.map((a,c)=>c1e(a,`variants[${c}]`))}if(e.automationNodeId&&(o?.length??0)===0)throw new y("Sequence A/B tests need at least one variant in addition to control variant A; provide --variants-json or --variants-file",400);return{...e.campaignId!==void 0&&{campaignId:e.campaignId},...e.automationNodeId!==void 0&&{automationNodeId:e.automationNodeId},...e.confirmLiveChange===!0&&{confirmLiveChange:!0},...e.name!==void 0&&{name:e.name},...t!==void 0&&{testPercentage:t},...r!==void 0&&{testDurationMinutes:r},...e.winnerCriteria!==void 0&&{winnerCriteria:e.winnerCriteria},...e.testType!==void 0&&{testType:e.testType},...n!==void 0&&{winnerThreshold:n},...o!==void 0&&{variants:o}}}function d1e(e){let t=Mt(e.testPercentage,"--test-percentage");if(t!==void 0&&(t<5||t>50))throw new y("--test-percentage must be an integer between 5 and 50",400);let n=Mt(e.durationMinutes,"--duration-minutes");if(n!==void 0&&(n<15||n>1440))throw new y("--duration-minutes must be an integer between 15 and 1440",400);if(e.winnerCriteria!==void 0&&!e$.has(e.winnerCriteria))throw new y("--winner-criteria must be open_rate or click_rate",400);if(e.testType!==void 0&&e.testType!=="subject"&&e.testType!=="content")throw new y("--test-type must be subject or content",400);let r=Mt(e.winnerThreshold,"--winner-threshold");if(r!==void 0&&(r<10||r>1000))throw new y("--winner-threshold must be an integer between 10 and 1000",400);let i={...e.name!==void 0&&{name:e.name},...t!==void 0&&{testPercentage:t},...n!==void 0&&{testDurationMinutes:n},...e.winnerCriteria!==void 0&&{winnerCriteria:e.winnerCriteria},...e.testType!==void 0&&{testType:e.testType},...r!==void 0&&{winnerThreshold:r},...e.confirmLiveChange===!0&&{confirmLiveChange:!0}};if(Object.keys(i).every((o)=>o==="confirmLiveChange"))throw new y("Provide at least one A/B test setting to update",400);return i}function p1e(e){if(!e.subject||e.subject.trim()==="")throw new y("--subject is required",400);let t=ht(e.blocksJson,e.blocksFile,"blocks");if(t!==void 0&&!Array.isArray(t))throw new y("blocks JSON must be an array",400);return{subject:e.subject,...e.previewText!==void 0&&{previewText:e.previewText},...t!==void 0&&{blocks:t},...e.confirmLiveChange===!0&&{confirmLiveChange:!0}}}function m1e(e){let t=e.isWinner?" winner":"";return` - Variant ${e.label} [${e.id}]${t}`}function Sd(e){if(console.log(`${e.name??"A/B Test"} [${e.id}]`),console.log(`Status: ${e.status}`),console.log(`Winner criteria: ${e.winnerCriteria}`),e.automationNodeId){if(e.testType)console.log(`Test type: ${e.testType}`);if(e.winnerThreshold!==void 0)console.log(`Winner threshold: ${e.winnerThreshold} recipients`)}else console.log(`Test audience: ${e.testPercentage}%`),console.log(`Test duration: ${e.testDurationMinutes} minutes`);if(console.log(`Updated: ${xe(e.updatedAt)}`),e.campaignId)console.log(`Campaign: ${e.campaignId}`);if(e.automationNodeId)console.log(`Automation node: ${e.automationNodeId}`);console.log(`Variants: ${e.variants.length}`);for(let t of e.variants)console.log(m1e(t)),console.log(` Email: ${t.emailId}`),console.log(` Subject: ${t.subject||"(no subject)"}`),console.log(` Preview: ${t.previewText??"None"}`),console.log(` Blocks: ${t.blocks.length}`)}function my(e){return`${e.toFixed(1)}%`}function f1e(e){let t=e.period??(e.start&&e.end?`${e.start} - ${e.end}`:"all time");console.log(`A/B test stats (${t})`),console.log(`Sent: ${e.stats.sent.toLocaleString()}`),console.log(`Delivered: ${e.stats.delivered.toLocaleString()}`),console.log(`Opened: ${e.stats.opened.toLocaleString()} (${my(e.stats.openRate)})`),console.log(`Clicked: ${e.stats.clicked.toLocaleString()} (${my(e.stats.clickRate)})`),console.log(),console.log("Variants:");for(let n of e.variants){let r=n.isWinner?" winner":"";console.log(`- Variant ${n.label} [${n.id}]${r}`),console.log(` Subject: ${n.subject||"(no subject)"}`),console.log(` Sent ${n.stats.sent.toLocaleString()}, opened ${n.stats.opened.toLocaleString()} (${my(n.stats.openRate)}), clicked ${n.stats.clicked.toLocaleString()} (${my(n.stats.clickRate)})`)}}async function Pa(e,t){if(!await ue())Q(fe()),process.exit(1);try{if(e==="list"){let i=new URLSearchParams;if(t.sequence)i.set("sequenceId",t.sequence);let o=await w("GET",`/api/v1/ab-tests${i.size>0?`?${i.toString()}`:""}`,void 0,t.company);if(t.json){R(o);return}console.log(`A/B tests (${o.abTests.length})`);for(let a of o.abTests)console.log(`- ${a.name??"A/B Test"} [${a.id}]`),console.log(` Status: ${a.status}`),console.log(` Variants: ${a.variants.length}`);return}if(e==="create"){let i=await w("POST","/api/v1/ab-tests",u1e(t),t.company);if(t.json){R(i);return}if(qr(i),console.log("Created A/B test"),Sd(i.abTest),i.abTest.automationNodeId)console.log(lh);return}if(!t.id)throw new y("A/B test ID is required",400);if(e==="update"){let i=await w("PATCH",`/api/v1/ab-tests/${t.id}`,d1e(t),t.company);if(t.json){R(i);return}console.log(`Updated A/B test ${t.id}`),Sd(i.abTest);return}if(e==="add-variant"){let i=await w("POST",`/api/v1/ab-tests/${t.id}/variants`,p1e(t),t.company);if(t.json){R(i);return}qr(i),console.log(`Added variant to A/B test ${t.id}`),Sd(i.abTest);return}if(e==="delete-variant"){if(!t.variantId)throw new y("Variant ID is required",400);if(!await zn(`Delete variant ${t.variantId} from A/B test ${t.id}?`,t)){console.log("Aborted.");return}let i=t.confirmLiveChange===!0?"?confirmLiveChange=true":"",o=await w("DELETE",`/api/v1/ab-tests/${t.id}/variants/${t.variantId}${i}`,void 0,t.company);if(t.json){R(o);return}console.log(`Removed variant ${t.variantId}`),Sd(o.abTest);return}if(e==="delete"){if(!await zn(`Delete A/B test ${t.id}?`,t)){console.log("Aborted.");return}let i=await w("DELETE",`/api/v1/ab-tests/${t.id}`,void 0,t.company);if(t.json){R(i);return}console.log(`Deleted A/B test: ${t.id}`);return}if(e==="get"){let i=await w("GET",`/api/v1/ab-tests/${t.id}`,void 0,t.company);if(t.json){R(i);return}Sd(i.abTest);return}if(e==="stats"){let i=new URLSearchParams;if(t.period)i.set("period",t.period);if(t.start)i.set("start",t.start);if(t.end)i.set("end",t.end);if(t.includeBots)i.set("includeMachineEngagement","true");let o=await w("GET",`/api/v1/ab-tests/${t.id}/stats${i.size>0?`?${i.toString()}`:""}`,void 0,t.company);if(t.json){R(o);return}f1e(o);return}if(e==="restart"){if(t.testType!==void 0&&t.testType!=="subject"&&t.testType!=="content")throw new y("--test-type must be subject or content",400);let i=t.testType,o;if(t.variantCount!==void 0)o=Number.parseInt(t.variantCount,10);let a;if(t.winnerThreshold!==void 0)a=Number.parseInt(t.winnerThreshold,10);if(o!==void 0&&(!Number.isInteger(o)||o<2||o>4))throw new y("--variant-count must be an integer from 2 to 4",400);if(a!==void 0&&(!Number.isInteger(a)||a<10||a>1000))throw new y("--winner-threshold must be an integer from 10 to 1000",400);let c=await w("POST",`/api/v1/ab-tests/${t.id}/restart`,{sourceVariantId:t.sourceVariant,testType:i,winnerThreshold:a,variantCount:o},t.company);if(t.json){R(c);return}console.log(`Started new A/B test: ${c.abTest.id}`),console.log(`Previous test: ${c.previousAbTestId}`),console.log(`Control variant: ${c.sourceVariantId}`),Sd(c.abTest);return}if(e==="select-winner"){if(!t.variantId)throw new y("Variant ID is required",400);let i=await w("POST",`/api/v1/ab-tests/${t.id}/select-winner`,{variantId:t.variantId},t.company);if(t.json){R(i);return}console.log(`Selected winner ${t.variantId}; remaining-audience delivery queued`),Sd(i.abTest);return}if(!t.variantId)throw new y("Variant ID is required",400);let n=Yl({html:t.html,htmlFile:t.htmlFile,blocksJson:t.blocksJson,blocksFile:t.blocksFile});if(t.subject===void 0&&t.previewText===void 0&&n.html===void 0&&n.blocks===void 0)throw new y("Provide at least one of: --subject, --preview-text, --html, --html-file, --blocks-json, --blocks-file",400);let r=await w("PATCH",`/api/v1/ab-tests/${t.id}/variants/${t.variantId}`,{subject:t.subject,previewText:t.previewText,html:n.html,blocks:n.blocks,...t.confirmLiveChange===!0&&{confirmLiveChange:!0}},t.company);if(t.json){R(r);return}qr(r),console.log(`Updated variant ${r.variant.label}`),console.log(`ID: ${r.variant.id}`),console.log(`Email: ${r.variant.emailId}`),console.log(`Subject: ${r.variant.subject}`)}catch(n){Q(n instanceof y?n:n),process.exit(1)}}var t$=[{scope:"account:read",label:"Read account",description:"View account and workspace metadata.",group:"account"},{scope:"companies:manage",label:"Manage workspaces",description:"Create workspaces, and change account-wide sending identity and tracking defaults.",group:"account"},{scope:"company_profile:manage",label:"Manage workspace profile",description:"Update workspace name, branding, compliance details, and AI writing context. Cannot create workspaces or change sending defaults.",group:"account"},{scope:"subscribers:read",label:"Read subscribers",description:"View subscriber profiles, notes, list memberships, and activity.",group:"contacts"},{scope:"subscribers:write",label:"Write subscribers",description:"Create, update, tag, and unsubscribe subscribers.",group:"contacts"},{scope:"subscribers:tag",label:"Tag subscribers",description:"Add and remove tags on subscribers that already exist. Cannot create, update, or unsubscribe them.",group:"contacts"},{scope:"subscribers:delete",label:"Delete subscribers",description:"Permanently delete subscriber records.",group:"contacts",destructive:!0},{scope:"events:write",label:"Write events",description:"Record subscriber events and event properties.",group:"contacts"},{scope:"automations:trigger",label:"Trigger automations",description:"Allow subscriber, event, commerce, and tag changes to start or continue live automations and opt-in emails.",group:"contacts",liveDelivery:!0},{scope:"tags:read",label:"Read tags",description:"View tag definitions.",group:"contacts"},{scope:"tags:write",label:"Write tags",description:"Create and update tag definitions.",group:"contacts"},{scope:"tags:delete",label:"Delete tags",description:"Delete tag definitions and remove them from subscribers.",group:"contacts",destructive:!0},{scope:"lists:read",label:"Read lists",description:"View subscriber lists.",group:"contacts"},{scope:"lists:write",label:"Write lists",description:"Create, update, and manage subscriber lists.",group:"contacts"},{scope:"lists:delete",label:"Delete lists",description:"Delete subscriber lists.",group:"contacts",destructive:!0},{scope:"segments:read",label:"Read segments",description:"View saved segments and counts.",group:"contacts"},{scope:"segments:write",label:"Write segments",description:"Create and update saved segments.",group:"contacts"},{scope:"segments:delete",label:"Delete segments",description:"Delete saved segments.",group:"contacts",destructive:!0},{scope:"templates:read",label:"Read templates",description:"View reusable email templates.",group:"content"},{scope:"templates:write",label:"Write templates",description:"Create and update reusable email templates.",group:"content"},{scope:"templates:delete",label:"Delete templates",description:"Delete reusable email templates.",group:"content",destructive:!0},{scope:"emails:read",label:"Read emails",description:"View email content and render previews.",group:"content"},{scope:"emails:write",label:"Write emails",description:"Create and update email content.",group:"content"},{scope:"emails:delete",label:"Delete emails",description:"Delete email content records.",group:"content",destructive:!0},{scope:"landing_pages:read",label:"Read landing pages",description:"View landing pages and landing page domains.",group:"content"},{scope:"landing_pages:write",label:"Write landing pages",description:"Create, update, and verify landing pages and domains.",group:"content"},{scope:"landing_pages:delete",label:"Delete landing pages",description:"Delete landing pages and landing page domains.",group:"content",destructive:!0},{scope:"websites:read",label:"Read websites",description:"View discovered website and brand data.",group:"content"},{scope:"websites:write",label:"Write websites",description:"Create and process website records.",group:"content"},{scope:"websites:delete",label:"Delete websites",description:"Delete website records.",group:"content",destructive:!0},{scope:"campaigns:read",label:"Read campaigns",description:"View campaigns and campaign details.",group:"campaigns"},{scope:"campaigns:write",label:"Write campaigns",description:"Create, edit, and duplicate draft campaigns.",group:"campaigns"},{scope:"campaigns:delete",label:"Delete campaigns",description:"Delete campaigns.",group:"campaigns",destructive:!0},{scope:"campaigns:send",label:"Send campaigns",description:"Schedule, resume, pause, cancel, or test live campaign delivery.",group:"campaigns",liveDelivery:!0},{scope:"ab_tests:read",label:"Read A/B tests",description:"View campaign and sequence A/B tests, variant copy, and metrics.",group:"campaigns"},{scope:"ab_tests:write",label:"Write A/B tests",description:"Create, update, and run campaign and sequence A/B tests.",group:"campaigns"},{scope:"ab_tests:delete",label:"Delete A/B tests",description:"Delete campaign and sequence A/B tests and variants.",group:"campaigns",destructive:!0},{scope:"sequences:read",label:"Read sequences",description:"View sequences, steps, and sequence stats.",group:"sequences"},{scope:"sequences:write",label:"Write sequences",description:"Create and edit sequence drafts and steps.",group:"sequences"},{scope:"sequences:delete",label:"Delete sequences",description:"Delete sequences.",group:"sequences",destructive:!0},{scope:"sequences:activate",label:"Activate sequences",description:"Enable, disable, pause, and resume live sequence enrollment.",group:"sequences",liveDelivery:!0},{scope:"sequences:enroll",label:"Enroll subscribers",description:"Manually enroll or cancel subscribers in sequences, and realign waiting enrollments to a changed sending window.",group:"sequences",liveDelivery:!0},{scope:"transactional:read",label:"Read transactional emails",description:"View transactional email templates.",group:"transactional"},{scope:"transactional:write",label:"Write transactional emails",description:"Create and update transactional email templates.",group:"transactional"},{scope:"transactional:delete",label:"Delete transactional emails",description:"Delete transactional email templates.",group:"transactional",destructive:!0},{scope:"transactional:send",label:"Send via transactional API",description:"Send live transactional emails, or single-recipient marketing emails with compliance handling, through the transactional API.",group:"transactional",liveDelivery:!0},{scope:"commerce:read",label:"Read commerce data",description:"View products and commerce records.",group:"commerce"},{scope:"commerce:write",label:"Write commerce data",description:"Push products, customers, orders, checkouts, and stock requests.",group:"commerce"},{scope:"commerce:delete",label:"Delete commerce data",description:"Delete products and commerce records.",group:"commerce",destructive:!0},{scope:"analytics:read",label:"Read analytics",description:"View campaign, sequence, subscriber, and email event analytics.",group:"analytics"},{scope:"audience_syncs:read",label:"Read audience syncs",description:"View external audience sync configuration.",group:"integrations"},{scope:"audience_syncs:write",label:"Write audience syncs",description:"Create, update, and run external audience syncs.",group:"integrations"},{scope:"audience_syncs:delete",label:"Delete audience syncs",description:"Delete external audience syncs.",group:"integrations",destructive:!0},{scope:"integrations:manage",label:"Manage integrations",description:"Manage integration, migration, and connected service setup.",group:"integrations"},{scope:"webhooks:read",label:"Read webhooks",description:"View outbound webhooks and deliveries.",group:"integrations"},{scope:"webhooks:write",label:"Write webhooks",description:"Create, update, and test outbound webhooks.",group:"integrations"},{scope:"webhooks:delete",label:"Delete webhooks",description:"Delete outbound webhooks.",group:"integrations",destructive:!0},{scope:"widgets:read",label:"Read widgets",description:"View widget configuration.",group:"integrations"},{scope:"widgets:write",label:"Write widgets",description:"Create and update widget configuration.",group:"integrations"},{scope:"widgets:delete",label:"Delete widgets",description:"Delete widget configuration.",group:"integrations",destructive:!0},{scope:"conversations:read",label:"Read conversations",description:"View inbound reply conversations.",group:"integrations"},{scope:"conversations:write",label:"Write conversations",description:"Update conversation state and send conversation replies.",group:"integrations",liveDelivery:!0},{scope:"team:read",label:"Read team",description:"View team members and invitations.",group:"admin"},{scope:"team:manage",label:"Manage team",description:"Invite, remove, and update team members.",group:"admin",liveDelivery:!0},{scope:"api_keys:manage",label:"Manage API keys",description:"List, create, and revoke company API keys through the public API.",group:"admin"}],F2=t$.map((e)=>e.scope),Xrt=new Set(F2),eit=t$.filter((e)=>e.liveDelivery===!0).map((e)=>e.scope),n$={full_access:{label:"Full access",description:"Can read, write, manage, and send across the workspace.",scopes:F2},read_only:{label:"Read-only",description:"Can inspect workspace data, but cannot make changes.",scopes:["account:read","subscribers:read","tags:read","lists:read","segments:read","templates:read","emails:read","landing_pages:read","websites:read","campaigns:read","ab_tests:read","sequences:read","transactional:read","commerce:read","analytics:read","audience_syncs:read","webhooks:read","widgets:read","conversations:read","team:read"]},agent_safe:{label:"Safer agent access",description:"Default for AI agents. Can inspect data, define lists and tags, tag existing contacts, complete workspace setup, and draft content (including sequence A/B variant copy) without changing list membership, live delivery, destructive deletes, team changes, or API key creation.",scopes:["account:read","company_profile:manage","subscribers:read","subscribers:tag","tags:read","tags:write","lists:read","lists:write","segments:read","templates:read","templates:write","emails:read","emails:write","landing_pages:read","landing_pages:write","websites:read","campaigns:read","campaigns:write","ab_tests:read","ab_tests:write","sequences:read","sequences:write","transactional:read","transactional:write","commerce:read","analytics:read","audience_syncs:read","webhooks:read","widgets:read","widgets:write","conversations:read","team:read"]},ai_drafting:{label:"AI drafting",description:"Can inspect data, build subscriber lists, complete workspace setup, and draft content, campaigns, sequences, and templates without live delivery.",scopes:["account:read","company_profile:manage","subscribers:read","subscribers:write","tags:read","tags:write","lists:read","lists:write","segments:read","segments:write","templates:read","templates:write","emails:read","emails:write","landing_pages:read","landing_pages:write","websites:read","websites:write","campaigns:read","campaigns:write","ab_tests:read","ab_tests:write","sequences:read","sequences:write","transactional:read","transactional:write","commerce:read","analytics:read","audience_syncs:read","webhooks:read","widgets:read","widgets:write","conversations:read"]},data_ingest_safe:{label:"Data ingest, no automations",description:"Can sync subscribers and events, but cannot start or continue automations.",scopes:["account:read","subscribers:read","subscribers:write","events:write","tags:read","lists:read","segments:read","commerce:read","commerce:write"]},data_ingest_automations:{label:"Data ingest with automations",description:"Can sync subscribers, events, and commerce data that may trigger automations.",scopes:["account:read","subscribers:read","subscribers:write","events:write","automations:trigger","tags:read","tags:write","lists:read","segments:read","commerce:read","commerce:write"]},transactional_sender:{label:"Transactional sender",description:"Can manage transactional templates and send through the transactional API, including its compliant single-recipient marketing mode.",scopes:["account:read","subscribers:read","transactional:read","transactional:write","transactional:send","emails:read","emails:write","analytics:read"]},marketing_sender:{label:"Marketing sender",description:"Can complete workspace setup, and manage and send campaigns and live sequences.",scopes:["account:read","company_profile:manage","subscribers:read","subscribers:write","events:write","automations:trigger","tags:read","tags:write","lists:read","lists:write","segments:read","segments:write","templates:read","templates:write","emails:read","emails:write","campaigns:read","campaigns:write","campaigns:send","ab_tests:read","ab_tests:write","sequences:read","sequences:write","sequences:activate","sequences:enroll","analytics:read"]}};function g1e(e,t){if(e==null)return t==="full_access";let n=n$[t].scopes;if(e.length!==n.length)return!1;let r=new Set(e);return n.every((i)=>r.has(i))}function x1e(e){if(e==null)return"full_access";for(let t of Object.keys(n$)){if(t==="full_access")continue;if(g1e(e,t))return t}return"custom"}function vd(e){let t=F2.length;if(e==null)return{preset:"full_access",fullAccess:!0,selectedScopeCount:t,currentScopeCount:t,description:"All current and future permissions are enabled."};let n=e.length,r=n===t?`All ${n} current permissions are enabled as a fixed custom selection.`:`${n} of ${t} current permissions are enabled.`;return{preset:x1e(e),fullAccess:!1,selectedScopeCount:n,currentScopeCount:t,description:r}}var A1e=["admin","marketer","viewer","restricted"],nit=new Set(A1e);var E1e=["account:read","subscribers:read","subscribers:write","subscribers:tag","subscribers:delete","events:write","automations:trigger","tags:read","tags:write","tags:delete","lists:read","lists:write","lists:delete","segments:read","segments:write","segments:delete","templates:read","templates:write","templates:delete","emails:read","emails:write","emails:delete","landing_pages:read","landing_pages:write","landing_pages:delete","websites:read","campaigns:read","campaigns:write","campaigns:delete","campaigns:send","ab_tests:read","ab_tests:write","ab_tests:delete","sequences:read","sequences:write","sequences:delete","sequences:activate","sequences:enroll","commerce:read","analytics:read","widgets:read","widgets:write","widgets:delete","conversations:read","conversations:write"],rit=new Set(E1e);function h1e({allowIcannDomains:e=!0,allowPrivateDomains:t=!1,detectIp:n=!0,extractHostname:r=!0,mixedInputs:i=!0,validHosts:o=null,validateHostname:a=!0}){return{allowIcannDomains:e,allowPrivateDomains:t,detectIp:n,extractHostname:r,mixedInputs:i,validHosts:o,validateHostname:a}}var uit=h1e({});function y1e(){return{domain:null,domainWithoutSuffix:null,hostname:null,isIcann:null,isIp:null,isPrivate:null,publicSuffix:null,subdomain:null}}var dit=function(){let e=[1,{}],t=[0,{city:e}];return[0,{ck:[0,{www:e}],jp:[0,{kawasaki:t,kitakyushu:t,kobe:t,nagoya:t,sapporo:t,sendai:t,yokohama:t}]}]}(),pit=function(){let e=[1,{}],t=[2,{}],n=[1,{com:e,edu:e,gov:e,net:e,org:e}],r=[1,{com:e,edu:e,gov:e,mil:e,net:e,org:e}],i=[0,{"*":t}],o=[2,{s:i}],a=[0,{relay:t}],c=[2,{id:t}],u=[1,{gov:e}],p=[0,{airflow:i,"lambda-url":t,"transfer-webapp":t}],g=[0,{airflow:i,"transfer-webapp":t}],A=[0,{"transfer-webapp":t}],E=[0,{"transfer-webapp":t,"transfer-webapp-fips":t}],h=[0,{notebook:t,studio:t}],D=[0,{labeling:t,notebook:t,studio:t}],O=[0,{notebook:t}],q=[0,{labeling:t,notebook:t,"notebook-fips":t,studio:t}],ee=[0,{notebook:t,"notebook-fips":t,studio:t,"studio-fips":t}],Oe=[0,{shop:t}],Ae=[0,{"*":e}],te=[1,{co:t}],X=[0,{objects:t}],dt=[2,{"eu-west-1":t,"us-east-1":t}],qe=[2,{nodes:t}],it=[0,{my:t}],Ie=[0,{s3:t,"s3-accesspoint":t,"s3-website":t}],ot=[0,{s3:t,"s3-accesspoint":t}],dn=[0,{direct:t}],Bt=[0,{"webview-assets":t}],pt=[0,{vfs:t,"webview-assets":t}],nn=[0,{"execute-api":t,"emrappui-prod":t,"emrnotebooks-prod":t,"emrstudio-prod":t,dualstack:Ie,s3:t,"s3-accesspoint":t,"s3-object-lambda":t,"s3-website":t,"aws-cloud9":Bt,cloud9:pt}],Te=[0,{"execute-api":t,"emrappui-prod":t,"emrnotebooks-prod":t,"emrstudio-prod":t,dualstack:ot,s3:t,"s3-accesspoint":t,"s3-object-lambda":t,"s3-website":t,"aws-cloud9":Bt,cloud9:pt}],Zt=[0,{"execute-api":t,"emrappui-prod":t,"emrnotebooks-prod":t,"emrstudio-prod":t,dualstack:Ie,s3:t,"s3-accesspoint":t,"s3-object-lambda":t,"s3-website":t,"analytics-gateway":t,"aws-cloud9":Bt,cloud9:pt}],ve=[0,{"execute-api":t,"emrappui-prod":t,"emrnotebooks-prod":t,"emrstudio-prod":t,dualstack:Ie,s3:t,"s3-accesspoint":t,"s3-object-lambda":t,"s3-website":t}],st=[0,{s3:t,"s3-accesspoint":t,"s3-accesspoint-fips":t,"s3-fips":t,"s3-website":t}],lt=[0,{"execute-api":t,"emrappui-prod":t,"emrnotebooks-prod":t,"emrstudio-prod":t,dualstack:st,s3:t,"s3-accesspoint":t,"s3-accesspoint-fips":t,"s3-fips":t,"s3-object-lambda":t,"s3-website":t,"aws-cloud9":Bt,cloud9:pt}],an=[0,{"execute-api":t,"emrappui-prod":t,"emrnotebooks-prod":t,"emrstudio-prod":t,dualstack:st,s3:t,"s3-accesspoint":t,"s3-accesspoint-fips":t,"s3-fips":t,"s3-object-lambda":t,"s3-website":t}],Un=[0,{"execute-api":t,"emrappui-prod":t,"emrnotebooks-prod":t,"emrstudio-prod":t,dualstack:st,s3:t,"s3-accesspoint":t,"s3-accesspoint-fips":t,"s3-deprecated":t,"s3-fips":t,"s3-object-lambda":t,"s3-website":t,"analytics-gateway":t,"aws-cloud9":Bt,cloud9:pt}],mt=[0,{auth:t}],hn=[0,{auth:t,"auth-fips":t}],Zn=[0,{"auth-fips":t}],At=[0,{apps:t}],Wn=[0,{paas:t}],ar=[2,{eu:t}],Xn=[0,{app:t}],ft=[0,{site:t}],Hn=[1,{com:e,edu:e,net:e,org:e}],Kn=[0,{j:t}],yi=[0,{dyn:t}],ei=[2,{web:t}],Wt=[1,{co:e,com:e,edu:e,gov:e,net:e,org:e}],Jn=[0,{p:t}],Or=[0,{user:t}],_r=[1,{ms:t}],pn=[0,{cdn:t}],Ir=[2,{raw:i}],_n=[0,{cust:t,reservd:t}],to=[0,{cust:t}],Ni=[0,{s3:t}],Lr=[1,{biz:e,com:e,edu:e,gov:e,info:e,net:e,org:e}],bi=[0,{ipfs:t}],Pi=[1,{framer:t}],li=[0,{forgot:t}],go=[0,{blob:t,file:t,web:t}],Mo=[0,{core:go,servicebus:t}],Xt=[1,{gs:e}],Oi=[0,{nes:e}],oe=[1,{k12:e,cc:e,lib:e}],we=[1,{cc:e}],Ct=[1,{cc:e,lib:e}];return[0,{ac:[1,{com:e,edu:e,gov:e,mil:e,net:e,org:e,drr:t,feedback:t,forms:t}],ad:e,ae:[1,{ac:e,co:e,gov:e,mil:e,net:e,org:e,sch:e}],aero:[1,{airline:e,airport:e,"accident-investigation":e,"accident-prevention":e,aerobatic:e,aeroclub:e,aerodrome:e,agents:e,"air-surveillance":e,"air-traffic-control":e,aircraft:e,airtraffic:e,ambulance:e,association:e,author:e,ballooning:e,broker:e,caa:e,cargo:e,catering:e,certification:e,championship:e,charter:e,civilaviation:e,club:e,conference:e,consultant:e,consulting:e,control:e,council:e,crew:e,design:e,dgca:e,educator:e,emergency:e,engine:e,engineer:e,entertainment:e,equipment:e,exchange:e,express:e,federation:e,flight:e,freight:e,fuel:e,gliding:e,government:e,groundhandling:e,group:e,hanggliding:e,homebuilt:e,insurance:e,journal:e,journalist:e,leasing:e,logistics:e,magazine:e,maintenance:e,marketplace:e,media:e,microlight:e,modelling:e,navigation:e,parachuting:e,paragliding:e,"passenger-association":e,pilot:e,press:e,production:e,recreation:e,repbody:e,res:e,research:e,rotorcraft:e,safety:e,scientist:e,services:e,show:e,skydiving:e,software:e,student:e,taxi:e,trader:e,trading:e,trainer:e,union:e,workinggroup:e,works:e}],af:n,ag:[1,{co:e,com:e,net:e,nom:e,org:e,obj:t}],ai:[1,{com:e,net:e,off:e,org:e,uwu:t,framer:t,kiloapps:t}],al:r,am:[1,{co:e,com:e,commune:e,net:e,org:e,radio:t}],ao:[1,{co:e,ed:e,edu:e,gov:e,gv:e,it:e,og:e,org:e,pb:e}],aq:e,ar:[1,{bet:e,com:e,coop:e,edu:e,gob:e,gov:e,int:e,mil:e,musica:e,mutual:e,net:e,org:e,seg:e,senasa:e,tur:e}],arpa:[1,{e164:e,home:e,"in-addr":e,ip6:e,iris:e,uri:e,urn:e}],as:u,asia:[1,{cloudns:t,daemon:t,dix:t}],at:[1,{"4":t,ac:[1,{sth:e}],co:e,gv:e,or:e,funkfeuer:[0,{wien:t}],futurecms:[0,{"*":t,ex:i,in:i}],futurehosting:t,futuremailing:t,ortsinfo:[0,{ex:i,kunden:i}],biz:t,info:t,"123webseite":t,priv:t,my:t,myspreadshop:t,"12hp":t,"2ix":t,"4lima":t,"lima-city":t}],au:[1,{asn:e,com:[1,{cloudlets:[0,{mel:t}],myspreadshop:t}],edu:[1,{act:e,catholic:e,nsw:e,nt:e,qld:e,sa:e,tas:e,vic:e,wa:e}],gov:[1,{qld:e,sa:e,tas:e,vic:e,wa:e}],id:e,net:e,org:e,conf:e,oz:e,act:e,nsw:e,nt:e,qld:e,sa:e,tas:e,vic:e,wa:e,hrsn:[0,{vps:t}]}],aw:[1,{com:e}],ax:e,az:[1,{biz:e,co:e,com:e,edu:e,gov:e,info:e,int:e,mil:e,name:e,net:e,org:e,pp:e,pro:e}],ba:[1,{com:e,edu:e,gov:e,mil:e,net:e,org:e,brendly:Oe,rs:t}],bb:[1,{biz:e,co:e,com:e,edu:e,gov:e,info:e,net:e,org:e,store:e,tv:e}],bd:[1,{ac:e,ai:e,co:e,com:e,edu:e,gov:e,id:e,info:e,it:e,mil:e,net:e,org:e,sch:e,tv:e}],be:[1,{ac:e,cloudns:t,webhosting:t,interhostsolutions:[0,{cloud:t}],kuleuven:[0,{ezproxy:t}],my:t,"123website":t,myspreadshop:t,transurl:i}],bf:u,bg:[1,{"0":e,"1":e,"2":e,"3":e,"4":e,"5":e,"6":e,"7":e,"8":e,"9":e,a:e,b:e,c:e,d:e,e,f:e,g:e,h:e,i:e,j:e,k:e,l:e,m:e,n:e,o:e,p:e,q:e,r:e,s:e,t:e,u:e,v:e,w:e,x:e,y:e,z:e,barsy:t}],bh:n,bi:[1,{co:e,com:e,edu:e,or:e,org:e}],biz:[1,{activetrail:t,"cloud-ip":t,cloudns:t,jozi:t,dyndns:t,"for-better":t,"for-more":t,"for-some":t,"for-the":t,selfip:t,webhop:t,orx:t,mmafan:t,myftp:t,"no-ip":t,dscloud:t}],bj:[1,{africa:e,agro:e,architectes:e,assur:e,avocats:e,co:e,com:e,eco:e,econo:e,edu:e,info:e,loisirs:e,money:e,net:e,org:e,ote:e,restaurant:e,resto:e,tourism:e,univ:e}],bm:n,bn:[1,{com:e,edu:e,gov:e,net:e,org:e,co:t}],bo:[1,{com:e,edu:e,gob:e,int:e,mil:e,net:e,org:e,tv:e,web:e,academia:e,agro:e,arte:e,blog:e,bolivia:e,ciencia:e,cooperativa:e,democracia:e,deporte:e,ecologia:e,economia:e,empresa:e,indigena:e,industria:e,info:e,medicina:e,movimiento:e,musica:e,natural:e,nombre:e,noticias:e,patria:e,plurinacional:e,politica:e,profesional:e,pueblo:e,revista:e,salud:e,tecnologia:e,tksat:e,transporte:e,wiki:e}],br:[1,{"9guacu":e,abc:e,adm:e,adv:e,agr:e,aju:e,am:e,anani:e,aparecida:e,api:e,app:e,arq:e,art:e,ato:e,b:e,barueri:e,belem:e,bet:e,bhz:e,bib:e,bio:e,blog:e,bmd:e,boavista:e,bsb:e,campinagrande:e,campinas:e,caxias:e,cim:e,cng:e,cnt:e,com:[1,{simplesite:t}],contagem:e,coop:e,coz:e,cri:e,cuiaba:e,curitiba:e,def:e,des:e,det:e,dev:e,ecn:e,eco:e,edu:e,emp:e,enf:e,eng:e,esp:e,etc:e,eti:e,far:e,feira:e,flog:e,floripa:e,fm:e,fnd:e,fortal:e,fot:e,foz:e,fst:e,g12:e,geo:e,ggf:e,goiania:e,gov:[1,{ac:e,al:e,am:e,ap:e,ba:e,ce:e,df:e,es:e,go:e,ma:e,mg:e,ms:e,mt:e,pa:e,pb:e,pe:e,pi:e,pr:e,rj:e,rn:e,ro:e,rr:e,rs:e,sc:e,se:e,sp:e,to:e}],gru:e,ia:e,imb:e,ind:e,inf:e,jab:e,jampa:e,jdf:e,joinville:e,jor:e,jus:e,leg:[1,{ac:t,al:t,am:t,ap:t,ba:t,ce:t,df:t,es:t,go:t,ma:t,mg:t,ms:t,mt:t,pa:t,pb:t,pe:t,pi:t,pr:t,rj:t,rn:t,ro:t,rr:t,rs:t,sc:t,se:t,sp:t,to:t}],leilao:e,lel:e,log:e,londrina:e,macapa:e,maceio:e,manaus:e,maringa:e,mat:e,med:e,mil:e,morena:e,mp:e,mus:e,natal:e,net:e,niteroi:e,nom:Ae,not:e,ntr:e,odo:e,ong:e,org:e,osasco:e,palmas:e,poa:e,ppg:e,pro:e,psc:e,psi:e,pvh:e,qsl:e,radio:e,rec:e,recife:e,rep:e,ribeirao:e,rio:e,riobranco:e,riopreto:e,salvador:e,sampa:e,santamaria:e,santoandre:e,saobernardo:e,saogonca:e,seg:e,sjc:e,slg:e,slz:e,social:e,sorocaba:e,srv:e,taxi:e,tc:e,tec:e,teo:e,the:e,tmp:e,trd:e,tur:e,tv:e,udi:e,vet:e,vix:e,vlog:e,wiki:e,xyz:e,zlg:e,tche:t}],bs:[1,{com:e,edu:e,gov:e,net:e,org:e,we:t}],bt:n,bv:e,bw:[1,{ac:e,co:e,gov:e,net:e,org:e}],by:[1,{gov:e,mil:e,com:e,of:e,mediatech:t}],bz:[1,{co:e,com:e,edu:e,gov:e,net:e,org:e,za:t,mydns:t,gsj:t}],ca:[1,{ab:e,bc:e,mb:e,nb:e,nf:e,nl:e,ns:e,nt:e,nu:e,on:e,pe:e,qc:e,sk:e,yk:e,gc:e,barsy:t,awdev:i,co:t,"no-ip":t,onid:t,myspreadshop:t,box:t}],cat:e,cc:[1,{cleverapps:t,"cloud-ip":t,cloudns:t,ccwu:t,ftpaccess:t,"game-server":t,myphotos:t,scrapping:t,twmail:t,csx:t,fantasyleague:t,spawn:[0,{instances:t}],ec:t,eu:t,gu:t,uk:t,us:t}],cd:[1,{gov:e,cc:t}],cf:e,cg:e,ch:[1,{square7:t,cloudns:t,cloudscale:[0,{cust:t,lpg:X,rma:X}],objectstorage:[0,{lpg:t,rma:t}],flow:[0,{ae:[0,{alp1:t}],appengine:t}],"linkyard-cloud":t,gotdns:t,dnsking:t,"123website":t,myspreadshop:t,firenet:[0,{"*":t,svc:i}],"12hp":t,"2ix":t,"4lima":t,"lima-city":t}],ci:[1,{ac:e,"xn--aroport-bya":e,"aéroport":e,asso:e,co:e,com:e,ed:e,edu:e,go:e,gouv:e,int:e,net:e,or:e,org:e,us:t}],ck:Ae,cl:[1,{co:e,gob:e,gov:e,mil:e,cloudns:t}],cm:[1,{co:e,com:e,gov:e,net:e}],cn:[1,{ac:e,com:[1,{amazonaws:[0,{"cn-north-1":[0,{"execute-api":t,"emrappui-prod":t,"emrnotebooks-prod":t,"emrstudio-prod":t,rds:i,dualstack:Ie,s3:t,"s3-accesspoint":t,"s3-deprecated":t,"s3-object-lambda":t,"s3-website":t}],"cn-northwest-1":[0,{"execute-api":t,"emrappui-prod":t,"emrnotebooks-prod":t,"emrstudio-prod":t,rds:i,dualstack:ot,s3:t,"s3-accesspoint":t,"s3-object-lambda":t,"s3-website":t}],compute:i,airflow:[0,{"cn-north-1":i,"cn-northwest-1":i}],eb:[0,{"cn-north-1":t,"cn-northwest-1":t}],elb:i}],amazonwebservices:[0,{on:[0,{"cn-north-1":g,"cn-northwest-1":g}]}],sagemaker:[0,{"cn-north-1":h,"cn-northwest-1":h}]}],edu:e,gov:e,mil:e,net:e,org:e,"xn--55qx5d":e,"公司":e,"xn--od0alg":e,"網絡":e,"xn--io0a7i":e,"网络":e,ah:e,bj:e,cq:e,fj:e,gd:e,gs:e,gx:e,gz:e,ha:e,hb:e,he:e,hi:e,hk:e,hl:e,hn:e,jl:e,js:e,jx:e,ln:e,mo:e,nm:e,nx:e,qh:e,sc:e,sd:e,sh:[1,{as:t}],sn:e,sx:e,tj:e,tw:e,xj:e,xz:e,yn:e,zj:e,"canva-apps":t,canvasite:it,myqnapcloud:t,quickconnect:dn}],co:[1,{com:e,edu:e,gov:e,mil:e,net:e,nom:e,org:e,carrd:t,crd:t,otap:i,hidns:t,leadpages:t,lpages:t,mypi:t,xmit:i,rdpa:[0,{clusters:i,srvrless:i}],firewalledreplit:c,repl:c,supabase:[2,{realtime:t,storage:t}],umso:t}],com:[1,{a2hosted:t,cpserver:t,adobeaemcloud:[2,{dev:i}],africa:t,auiusercontent:i,aivencloud:t,alibabacloudcs:t,kasserver:t,amazonaws:[0,{"af-south-1":nn,"ap-east-1":Te,"ap-northeast-1":Zt,"ap-northeast-2":Zt,"ap-northeast-3":nn,"ap-south-1":Zt,"ap-south-2":ve,"ap-southeast-1":Zt,"ap-southeast-2":Zt,"ap-southeast-3":ve,"ap-southeast-4":ve,"ap-southeast-5":[0,{"execute-api":t,dualstack:Ie,s3:t,"s3-accesspoint":t,"s3-deprecated":t,"s3-object-lambda":t,"s3-website":t}],"ca-central-1":lt,"ca-west-1":an,"eu-central-1":Zt,"eu-central-2":ve,"eu-north-1":Te,"eu-south-1":nn,"eu-south-2":ve,"eu-west-1":[0,{"execute-api":t,"emrappui-prod":t,"emrnotebooks-prod":t,"emrstudio-prod":t,dualstack:Ie,s3:t,"s3-accesspoint":t,"s3-deprecated":t,"s3-object-lambda":t,"s3-website":t,"analytics-gateway":t,"aws-cloud9":Bt,cloud9:pt}],"eu-west-2":Te,"eu-west-3":nn,"il-central-1":[0,{"execute-api":t,"emrappui-prod":t,"emrnotebooks-prod":t,"emrstudio-prod":t,dualstack:Ie,s3:t,"s3-accesspoint":t,"s3-object-lambda":t,"s3-website":t,"aws-cloud9":Bt,cloud9:[0,{vfs:t}]}],"me-central-1":ve,"me-south-1":Te,"sa-east-1":nn,"us-east-1":[2,{"execute-api":t,"emrappui-prod":t,"emrnotebooks-prod":t,"emrstudio-prod":t,dualstack:st,s3:t,"s3-accesspoint":t,"s3-accesspoint-fips":t,"s3-deprecated":t,"s3-fips":t,"s3-object-lambda":t,"s3-website":t,"analytics-gateway":t,"aws-cloud9":Bt,cloud9:pt}],"us-east-2":Un,"us-gov-east-1":an,"us-gov-west-1":an,"us-west-1":lt,"us-west-2":Un,compute:i,"compute-1":i,airflow:[0,{"af-south-1":i,"ap-east-1":i,"ap-northeast-1":i,"ap-northeast-2":i,"ap-northeast-3":i,"ap-south-1":i,"ap-south-2":i,"ap-southeast-1":i,"ap-southeast-2":i,"ap-southeast-3":i,"ap-southeast-4":i,"ap-southeast-5":i,"ap-southeast-7":i,"ca-central-1":i,"ca-west-1":i,"eu-central-1":i,"eu-central-2":i,"eu-north-1":i,"eu-south-1":i,"eu-south-2":i,"eu-west-1":i,"eu-west-2":i,"eu-west-3":i,"il-central-1":i,"me-central-1":i,"me-south-1":i,"sa-east-1":i,"us-east-1":i,"us-east-2":i,"us-west-1":i,"us-west-2":i}],rds:[0,{"af-south-1":i,"ap-east-1":i,"ap-east-2":i,"ap-northeast-1":i,"ap-northeast-2":i,"ap-northeast-3":i,"ap-south-1":i,"ap-south-2":i,"ap-southeast-1":i,"ap-southeast-2":i,"ap-southeast-3":i,"ap-southeast-4":i,"ap-southeast-5":i,"ap-southeast-6":i,"ap-southeast-7":i,"ca-central-1":i,"ca-west-1":i,"eu-central-1":i,"eu-central-2":i,"eu-west-1":i,"eu-west-2":i,"eu-west-3":i,"il-central-1":i,"me-central-1":i,"me-south-1":i,"mx-central-1":i,"sa-east-1":i,"us-east-1":i,"us-east-2":i,"us-gov-east-1":i,"us-gov-west-1":i,"us-northeast-1":i,"us-west-1":i,"us-west-2":i}],s3:t,"s3-1":t,"s3-ap-east-1":t,"s3-ap-northeast-1":t,"s3-ap-northeast-2":t,"s3-ap-northeast-3":t,"s3-ap-south-1":t,"s3-ap-southeast-1":t,"s3-ap-southeast-2":t,"s3-ca-central-1":t,"s3-eu-central-1":t,"s3-eu-north-1":t,"s3-eu-west-1":t,"s3-eu-west-2":t,"s3-eu-west-3":t,"s3-external-1":t,"s3-fips-us-gov-east-1":t,"s3-fips-us-gov-west-1":t,"s3-global":[0,{accesspoint:[0,{mrap:t}]}],"s3-me-south-1":t,"s3-sa-east-1":t,"s3-us-east-2":t,"s3-us-gov-east-1":t,"s3-us-gov-west-1":t,"s3-us-west-1":t,"s3-us-west-2":t,"s3-website-ap-northeast-1":t,"s3-website-ap-southeast-1":t,"s3-website-ap-southeast-2":t,"s3-website-eu-west-1":t,"s3-website-sa-east-1":t,"s3-website-us-east-1":t,"s3-website-us-gov-west-1":t,"s3-website-us-west-1":t,"s3-website-us-west-2":t,elb:i}],amazoncognito:[0,{"af-south-1":mt,"ap-east-1":mt,"ap-northeast-1":mt,"ap-northeast-2":mt,"ap-northeast-3":mt,"ap-south-1":mt,"ap-south-2":mt,"ap-southeast-1":mt,"ap-southeast-2":mt,"ap-southeast-3":mt,"ap-southeast-4":mt,"ap-southeast-5":mt,"ap-southeast-7":mt,"ca-central-1":mt,"ca-west-1":mt,"eu-central-1":mt,"eu-central-2":mt,"eu-north-1":mt,"eu-south-1":mt,"eu-south-2":mt,"eu-west-1":mt,"eu-west-2":mt,"eu-west-3":mt,"il-central-1":mt,"me-central-1":mt,"me-south-1":mt,"mx-central-1":mt,"sa-east-1":mt,"us-east-1":hn,"us-east-2":hn,"us-gov-east-1":Zn,"us-gov-west-1":Zn,"us-west-1":hn,"us-west-2":hn}],amplifyapp:t,awsapprunner:i,awsapps:t,elasticbeanstalk:[2,{"af-south-1":t,"ap-east-1":t,"ap-northeast-1":t,"ap-northeast-2":t,"ap-northeast-3":t,"ap-south-1":t,"ap-southeast-1":t,"ap-southeast-2":t,"ap-southeast-3":t,"ap-southeast-5":t,"ap-southeast-7":t,"ca-central-1":t,"eu-central-1":t,"eu-north-1":t,"eu-south-1":t,"eu-south-2":t,"eu-west-1":t,"eu-west-2":t,"eu-west-3":t,"il-central-1":t,"me-central-1":t,"me-south-1":t,"sa-east-1":t,"us-east-1":t,"us-east-2":t,"us-gov-east-1":t,"us-gov-west-1":t,"us-west-1":t,"us-west-2":t}],awsglobalaccelerator:t,siiites:t,appspacehosted:t,appspaceusercontent:t,"on-aptible":t,myasustor:t,"balena-devices":t,boutir:t,bplaced:t,cafjs:t,"canva-apps":t,"canva-hosted-embed":t,canvacode:t,"rice-labs":t,"cdn77-storage":t,br:t,cn:t,de:t,eu:t,jpn:t,mex:t,ru:t,sa:t,uk:t,us:t,za:t,"clever-cloud":[0,{services:i}],abrdns:t,dnsabr:t,"ip-ddns":t,jdevcloud:t,wpdevcloud:t,"cf-ipfs":t,"cloudflare-ipfs":t,trycloudflare:t,co:t,devinapps:i,builtwithdark:t,datadetect:[0,{demo:t,instance:t}],dattolocal:t,dattorelay:t,dattoweb:t,mydatto:t,digitaloceanspaces:i,discordsays:t,discordsez:t,drayddns:t,dreamhosters:t,durumis:t,blogdns:t,cechire:t,dnsalias:t,dnsdojo:t,doesntexist:t,dontexist:t,doomdns:t,"dyn-o-saur":t,dynalias:t,"dyndns-at-home":t,"dyndns-at-work":t,"dyndns-blog":t,"dyndns-free":t,"dyndns-home":t,"dyndns-ip":t,"dyndns-mail":t,"dyndns-office":t,"dyndns-pics":t,"dyndns-remote":t,"dyndns-server":t,"dyndns-web":t,"dyndns-wiki":t,"dyndns-work":t,"est-a-la-maison":t,"est-a-la-masion":t,"est-le-patron":t,"est-mon-blogueur":t,"from-ak":t,"from-al":t,"from-ar":t,"from-ca":t,"from-ct":t,"from-dc":t,"from-de":t,"from-fl":t,"from-ga":t,"from-hi":t,"from-ia":t,"from-id":t,"from-il":t,"from-in":t,"from-ks":t,"from-ky":t,"from-ma":t,"from-md":t,"from-mi":t,"from-mn":t,"from-mo":t,"from-ms":t,"from-mt":t,"from-nc":t,"from-nd":t,"from-ne":t,"from-nh":t,"from-nj":t,"from-nm":t,"from-nv":t,"from-oh":t,"from-ok":t,"from-or":t,"from-pa":t,"from-pr":t,"from-ri":t,"from-sc":t,"from-sd":t,"from-tn":t,"from-tx":t,"from-ut":t,"from-va":t,"from-vt":t,"from-wa":t,"from-wi":t,"from-wv":t,"from-wy":t,getmyip:t,gotdns:t,"hobby-site":t,homelinux:t,homeunix:t,iamallama:t,"is-a-anarchist":t,"is-a-blogger":t,"is-a-bookkeeper":t,"is-a-bulls-fan":t,"is-a-caterer":t,"is-a-chef":t,"is-a-conservative":t,"is-a-cpa":t,"is-a-cubicle-slave":t,"is-a-democrat":t,"is-a-designer":t,"is-a-doctor":t,"is-a-financialadvisor":t,"is-a-geek":t,"is-a-green":t,"is-a-guru":t,"is-a-hard-worker":t,"is-a-hunter":t,"is-a-landscaper":t,"is-a-lawyer":t,"is-a-liberal":t,"is-a-libertarian":t,"is-a-llama":t,"is-a-musician":t,"is-a-nascarfan":t,"is-a-nurse":t,"is-a-painter":t,"is-a-personaltrainer":t,"is-a-photographer":t,"is-a-player":t,"is-a-republican":t,"is-a-rockstar":t,"is-a-socialist":t,"is-a-student":t,"is-a-teacher":t,"is-a-techie":t,"is-a-therapist":t,"is-an-accountant":t,"is-an-actor":t,"is-an-actress":t,"is-an-anarchist":t,"is-an-artist":t,"is-an-engineer":t,"is-an-entertainer":t,"is-certified":t,"is-gone":t,"is-into-anime":t,"is-into-cars":t,"is-into-cartoons":t,"is-into-games":t,"is-leet":t,"is-not-certified":t,"is-slick":t,"is-uberleet":t,"is-with-theband":t,"isa-geek":t,"isa-hockeynut":t,issmarterthanyou:t,"likes-pie":t,likescandy:t,"neat-url":t,"saves-the-whales":t,selfip:t,"sells-for-less":t,"sells-for-u":t,servebbs:t,"simple-url":t,"space-to-rent":t,"teaches-yoga":t,writesthisblog:t,"1cooldns":t,bumbleshrimp:t,ddnsfree:t,ddnsgeek:t,ddnsguru:t,dynuddns:t,dynuhosting:t,giize:t,gleeze:t,kozow:t,loseyourip:t,ooguy:t,pivohosting:t,theworkpc:t,wiredbladehosting:t,emergentagent:[0,{preview:t}],mytuleap:t,"tuleap-partners":t,encoreapi:t,evennode:[0,{"eu-1":t,"eu-2":t,"eu-3":t,"eu-4":t,"us-1":t,"us-2":t,"us-3":t,"us-4":t}],onfabrica:t,"fastly-edge":t,"fastly-terrarium":t,"fastvps-server":t,mydobiss:t,firebaseapp:t,fldrv:t,framercanvas:t,"freebox-os":t,freeboxos:t,freemyip:t,aliases121:t,gentapps:t,gentlentapis:t,githubusercontent:t,"0emm":i,appspot:[2,{r:i}],blogspot:t,codespot:t,googleapis:t,googlecode:t,pagespeedmobilizer:t,withgoogle:t,withyoutube:t,grayjayleagues:t,hatenablog:t,hatenadiary:t,"hercules-app":t,"hercules-dev":t,herokuapp:t,gr:t,smushcdn:t,wphostedmail:t,wpmucdn:t,pixolino:t,"apps-1and1":t,"live-website":t,"webspace-host":t,dopaas:t,"hosted-by-previder":Wn,hosteur:[0,{"rag-cloud":t,"rag-cloud-ch":t}],"ik-server":[0,{jcloud:t,"jcloud-ver-jpc":t}],jelastic:[0,{demo:t}],massivegrid:Wn,wafaicloud:[0,{jed:t,ryd:t}],"eu1-plenit":t,"la1-plenit":t,"us1-plenit":t,webadorsite:t,"on-forge":t,"on-vapor":t,lpusercontent:t,linode:[0,{members:t,nodebalancer:i}],linodeobjects:i,linodeusercontent:[0,{ip:t}],localtonet:t,lovableproject:t,barsycenter:t,barsyonline:t,lutrausercontent:i,magicpatternsapp:t,modelscape:t,mwcloudnonprod:t,polyspace:t,miniserver:t,atmeta:t,fbsbx:At,meteorapp:ar,routingthecloud:t,"same-app":t,"same-preview":t,mydbserver:t,mochausercontent:t,hostedpi:t,"mythic-beasts":[0,{caracal:t,customer:t,fentiger:t,lynx:t,ocelot:t,oncilla:t,onza:t,sphinx:t,vs:t,x:t,yali:t}],nospamproxy:[0,{cloud:[2,{o365:t}]}],"4u":t,nfshost:t,"3utilities":t,blogsyte:t,ciscofreak:t,damnserver:t,ddnsking:t,ditchyourip:t,dnsiskinky:t,dynns:t,geekgalaxy:t,"health-carereform":t,homesecuritymac:t,homesecuritypc:t,myactivedirectory:t,mysecuritycamera:t,myvnc:t,"net-freaks":t,onthewifi:t,point2this:t,quicksytes:t,securitytactics:t,servebeer:t,servecounterstrike:t,serveexchange:t,serveftp:t,servegame:t,servehalflife:t,servehttp:t,servehumour:t,serveirc:t,servemp3:t,servep2p:t,servepics:t,servequake:t,servesarcasm:t,stufftoread:t,unusualperson:t,workisboring:t,myiphost:t,observableusercontent:[0,{static:t}],simplesite:t,oaiusercontent:i,orsites:t,operaunite:t,"customer-oci":[0,{"*":t,oci:i,ocp:i,ocs:i}],oraclecloudapps:i,oraclegovcloudapps:i,"authgear-staging":t,authgearapps:t,outsystemscloud:t,ownprovider:t,pgfog:t,pagexl:t,gotpantheon:t,paywhirl:i,forgeblocks:t,upsunapp:t,"postman-echo":t,prgmr:[0,{xen:t}],"project-study":[0,{dev:t}],pythonanywhere:ar,qa2:t,"alpha-myqnapcloud":t,"dev-myqnapcloud":t,mycloudnas:t,mynascloud:t,myqnapcloud:t,qualifioapp:t,ladesk:t,qualyhqpartner:i,qualyhqportal:i,qbuser:t,quipelements:i,rackmaze:t,"readthedocs-hosted":t,rhcloud:t,onrender:t,render:Xn,"subsc-pay":t,"180r":t,dojin:t,sakuratan:t,sakuraweb:t,x0:t,code:[0,{builder:i,"dev-builder":i,"stg-builder":i}],salesforce:[0,{platform:[0,{"code-builder-stg":[0,{test:[0,{"001":i}]}]}]}],logoip:t,scrysec:t,"firewall-gateway":t,myshopblocks:t,myshopify:t,shopitsite:t,"1kapp":t,appchizi:t,applinzi:t,sinaapp:t,vipsinaapp:t,streamlitapp:t,"try-snowplow":t,"playstation-cloud":t,myspreadshop:t,"w-corp-staticblitz":t,"w-credentialless-staticblitz":t,"w-staticblitz":t,"stackhero-network":t,stdlib:[0,{api:t}],strapiapp:[2,{media:t}],"streak-link":t,streaklinks:t,streakusercontent:t,"temp-dns":t,dsmynas:t,familyds:t,mytabit:t,taveusercontent:t,"tb-hosting":ft,reservd:t,thingdustdata:t,"townnews-staging":t,typeform:[0,{pro:t}],hk:t,it:t,"deus-canvas":t,vultrobjects:i,wafflecell:t,hotelwithflight:t,"reserve-online":t,cprapid:t,pleskns:t,remotewd:t,wiardweb:[0,{pages:t}],"drive-platform":t,"base44-sandbox":t,wixsite:t,wixstudio:t,messwithdns:t,"woltlab-demo":t,wpenginepowered:[2,{js:t}],xnbay:[2,{u2:t,"u2-local":t}],xtooldevice:t,yolasite:t}],coop:e,cr:[1,{ac:e,co:e,ed:e,fi:e,go:e,or:e,sa:e}],cu:[1,{com:e,edu:e,gob:e,inf:e,nat:e,net:e,org:e}],cv:[1,{com:e,edu:e,id:e,int:e,net:e,nome:e,org:e,publ:e}],cw:Hn,cx:[1,{gov:e,cloudns:t,ath:t,info:t,assessments:t,calculators:t,funnels:t,paynow:t,quizzes:t,researched:t,tests:t}],cy:[1,{ac:e,biz:e,com:[1,{scaleforce:Kn}],ekloges:e,gov:e,ltd:e,mil:e,net:e,org:e,press:e,pro:e,tm:e}],cz:[1,{gov:e,contentproxy9:[0,{rsc:t}],realm:t,e4:t,co:t,metacentrum:[0,{cloud:i,custom:t}],muni:[0,{cloud:[0,{flt:t,usr:t}]}]}],de:[1,{bplaced:t,square7:t,"bwcloud-os-instance":i,com:t,cosidns:yi,dnsupdater:t,"dynamisches-dns":t,"internet-dns":t,"l-o-g-i-n":t,ddnss:[2,{dyn:t,dyndns:t}],"dyn-ip24":t,dyndns1:t,"home-webserver":[2,{dyn:t}],"myhome-server":t,dnshome:t,fuettertdasnetz:t,isteingeek:t,istmein:t,lebtimnetz:t,leitungsen:t,traeumtgerade:t,frusky:i,goip:t,"xn--gnstigbestellen-zvb":t,"günstigbestellen":t,"xn--gnstigliefern-wob":t,"günstigliefern":t,"hs-heilbronn":[0,{it:[0,{pages:t,"pages-research":t}]}],"dyn-berlin":t,"in-berlin":t,"in-brb":t,"in-butter":t,"in-dsl":t,"in-vpn":t,iservschule:t,"mein-iserv":t,schuldock:t,schulplattform:t,schulserver:t,"test-iserv":t,keymachine:t,co:t,"git-repos":t,"lcube-server":t,"svn-repos":t,barsy:t,webspaceconfig:t,"123webseite":t,rub:t,"ruhr-uni-bochum":[2,{noc:[0,{io:t}]}],logoip:t,"firewall-gateway":t,"my-gateway":t,"my-router":t,spdns:t,my:t,speedpartner:[0,{customer:t}],myspreadshop:t,"taifun-dns":t,"12hp":t,"2ix":t,"4lima":t,"lima-city":t,"virtual-user":t,virtualuser:t,"community-pro":t,diskussionsbereich:t,xenonconnect:i}],dj:e,dk:[1,{biz:t,co:t,firm:t,reg:t,store:t,"123hjemmeside":t,myspreadshop:t}],dm:Wt,do:[1,{art:e,com:e,edu:e,gob:e,gov:e,mil:e,net:e,org:e,sld:e,web:e}],dz:[1,{art:e,asso:e,com:e,edu:e,gov:e,net:e,org:e,pol:e,soc:e,tm:e}],ec:[1,{abg:e,adm:e,agron:e,arqt:e,art:e,bar:e,chef:e,com:e,cont:e,cpa:e,cue:e,dent:e,dgn:e,disco:e,doc:e,edu:e,eng:e,esm:e,fin:e,fot:e,gal:e,gob:e,gov:e,gye:e,ibr:e,info:e,k12:e,lat:e,loj:e,med:e,mil:e,mktg:e,mon:e,net:e,ntr:e,odont:e,org:e,pro:e,prof:e,psic:e,psiq:e,pub:e,rio:e,rrpp:e,sal:e,tech:e,tul:e,tur:e,uio:e,vet:e,xxx:e,base:t,official:t}],edu:[1,{rit:[0,{"git-pages":t}]}],ee:[1,{aip:e,com:e,edu:e,fie:e,gov:e,lib:e,med:e,org:e,pri:e,riik:e}],eg:[1,{ac:e,com:e,edu:e,eun:e,gov:e,info:e,me:e,mil:e,name:e,net:e,org:e,sci:e,sport:e,tv:e}],er:Ae,es:[1,{com:e,edu:e,gob:e,nom:e,org:e,"123miweb":t,myspreadshop:t}],et:[1,{biz:e,com:e,edu:e,gov:e,info:e,name:e,net:e,org:e}],eu:[1,{amazonwebservices:[0,{on:[0,{"eusc-de-east-1":[0,{"cognito-idp":mt}]}]}],cloudns:t,prvw:t,deuxfleurs:t,dogado:[0,{jelastic:t}],barsy:t,spdns:t,nxa:i,directwp:t,transurl:i}],fi:[1,{aland:e,dy:t,"xn--hkkinen-5wa":t,"häkkinen":t,iki:t,cloudplatform:[0,{fi:t}],datacenter:[0,{demo:t,paas:t}],kapsi:t,"123kotisivu":t,myspreadshop:t}],fj:[1,{ac:e,biz:e,com:e,edu:e,gov:e,id:e,info:e,mil:e,name:e,net:e,org:e,pro:e}],fk:Ae,fm:[1,{com:e,edu:e,net:e,org:e,radio:t,user:i}],fo:e,fr:[1,{asso:e,com:e,gouv:e,nom:e,prd:e,tm:e,avoues:e,cci:e,greta:e,"huissier-justice":e,"fbx-os":t,fbxos:t,"freebox-os":t,freeboxos:t,goupile:t,kdns:t,"123siteweb":t,"on-web":t,"chirurgiens-dentistes-en-france":t,dedibox:t,aeroport:t,avocat:t,chambagri:t,"chirurgiens-dentistes":t,"experts-comptables":t,medecin:t,notaires:t,pharmacien:t,port:t,veterinaire:t,myspreadshop:t,ynh:t}],ga:e,gb:e,gd:[1,{edu:e,gov:e}],ge:[1,{com:e,edu:e,gov:e,net:e,org:e,pvt:e,school:e}],gf:e,gg:[1,{co:e,net:e,org:e,ply:[0,{at:i,d6:t}],botdash:t,kaas:t,stackit:t,panel:[2,{daemon:t}]}],gh:[1,{biz:e,com:e,edu:e,gov:e,mil:e,net:e,org:e}],gi:[1,{com:e,edu:e,gov:e,ltd:e,mod:e,org:e}],gl:[1,{co:e,com:e,edu:e,net:e,org:e}],gm:e,gn:[1,{ac:e,com:e,edu:e,gov:e,net:e,org:e}],gov:e,gp:[1,{asso:e,com:e,edu:e,mobi:e,net:e,org:e}],gq:e,gr:[1,{com:e,edu:e,gov:e,net:e,org:e,barsy:t,simplesite:t}],gs:e,gt:[1,{com:e,edu:e,gob:e,ind:e,mil:e,net:e,org:e}],gu:[1,{com:e,edu:e,gov:e,guam:e,info:e,net:e,org:e,web:e}],gw:[1,{nx:t}],gy:Wt,hk:[1,{com:e,edu:e,gov:e,idv:e,net:e,org:e,"xn--ciqpn":e,"个人":e,"xn--gmqw5a":e,"個人":e,"xn--55qx5d":e,"公司":e,"xn--mxtq1m":e,"政府":e,"xn--lcvr32d":e,"敎育":e,"xn--wcvs22d":e,"教育":e,"xn--gmq050i":e,"箇人":e,"xn--uc0atv":e,"組織":e,"xn--uc0ay4a":e,"組织":e,"xn--od0alg":e,"網絡":e,"xn--zf0avx":e,"網络":e,"xn--mk0axi":e,"组織":e,"xn--tn0ag":e,"组织":e,"xn--od0aq3b":e,"网絡":e,"xn--io0a7i":e,"网络":e,inc:t,ltd:t}],hm:e,hn:[1,{com:e,edu:e,gob:e,mil:e,net:e,org:e}],hr:[1,{com:e,from:e,iz:e,name:e,brendly:Oe}],ht:[1,{adult:e,art:e,asso:e,com:e,coop:e,edu:e,firm:e,gouv:e,info:e,med:e,net:e,org:e,perso:e,pol:e,pro:e,rel:e,shop:e,rt:t}],hu:[1,{"2000":e,agrar:e,bolt:e,casino:e,city:e,co:e,erotica:e,erotika:e,film:e,forum:e,games:e,hotel:e,info:e,ingatlan:e,jogasz:e,konyvelo:e,lakas:e,media:e,news:e,org:e,priv:e,reklam:e,sex:e,shop:e,sport:e,suli:e,szex:e,tm:e,tozsde:e,utazas:e,video:e}],id:[1,{ac:e,biz:e,co:e,desa:e,go:e,kop:e,mil:e,my:e,net:e,or:e,ponpes:e,sch:e,web:e,"xn--9tfky":e,"ᬩᬮᬶ":e,e:t,zone:t}],ie:[1,{gov:e,myspreadshop:t}],il:[1,{ac:e,co:[1,{ravpage:t,mytabit:t,tabitorder:t}],gov:e,idf:e,k12:e,muni:e,net:e,org:e}],"xn--4dbrk0ce":[1,{"xn--4dbgdty6c":e,"xn--5dbhl8d":e,"xn--8dbq2a":e,"xn--hebda8b":e}],"ישראל":[1,{"אקדמיה":e,"ישוב":e,"צהל":e,"ממשל":e}],im:[1,{ac:e,co:[1,{ltd:e,plc:e}],com:e,net:e,org:e,tt:e,tv:e}],in:[1,{"5g":e,"6g":e,ac:e,ai:e,am:e,bank:e,bihar:e,biz:e,business:e,ca:e,cn:e,co:e,com:e,coop:e,cs:e,delhi:e,dr:e,edu:e,er:e,fin:e,firm:e,gen:e,gov:e,gujarat:e,ind:e,info:e,int:e,internet:e,io:e,me:e,mil:e,net:e,nic:e,org:e,pg:e,post:e,pro:e,res:e,travel:e,tv:e,uk:e,up:e,us:e,cloudns:t,barsy:t,web:t,indevs:t,supabase:t}],info:[1,{cloudns:t,"dynamic-dns":t,"barrel-of-knowledge":t,"barrell-of-knowledge":t,dyndns:t,"for-our":t,"groks-the":t,"groks-this":t,"here-for-more":t,knowsitall:t,selfip:t,webhop:t,barsy:t,mayfirst:t,mittwald:t,mittwaldserver:t,typo3server:t,dvrcam:t,ilovecollege:t,"no-ip":t,forumz:t,nsupdate:t,dnsupdate:t,"v-info":t}],int:[1,{eu:e}],io:[1,{"2038":t,co:e,com:e,edu:e,gov:e,mil:e,net:e,nom:e,org:e,"on-acorn":i,myaddr:t,apigee:t,"b-data":t,beagleboard:t,bitbucket:t,bluebite:t,boxfuse:t,brave:o,browsersafetymark:t,bubble:pn,bubbleapps:t,bigv:[0,{uk0:t}],cleverapps:t,cloudbeesusercontent:t,dappnode:[0,{dyndns:t}],darklang:t,definima:t,dedyn:t,icp0:Ir,icp1:Ir,qzz:t,"fh-muenster":t,gitbook:t,github:t,gitlab:t,lolipop:t,"hasura-app":t,hostyhosting:t,hypernode:t,moonscale:i,beebyte:Wn,beebyteapp:[0,{sekd1:t}],jele:t,keenetic:t,kiloapps:t,webthings:t,loginline:t,barsy:t,azurecontainer:i,ngrok:[2,{ap:t,au:t,eu:t,in:t,jp:t,sa:t,us:t}],nodeart:[0,{stage:t}],pantheonsite:t,forgerock:[0,{id:t}],pstmn:[2,{mock:t}],protonet:t,qcx:[2,{sys:i}],qoto:t,vaporcloud:t,myrdbx:t,"rb-hosting":ft,"on-k3s":i,"on-rio":i,readthedocs:t,resindevice:t,resinstaging:[0,{devices:t}],hzc:t,sandcats:t,scrypted:[0,{client:t}],"mo-siemens":t,lair:At,stolos:i,musician:t,utwente:t,edugit:t,telebit:t,thingdust:[0,{dev:_n,disrec:_n,prod:to,testing:_n}],tickets:t,webflow:t,webflowtest:t,"drive-platform":t,editorx:t,wixstudio:t,basicserver:t,virtualserver:t}],iq:r,ir:[1,{ac:e,co:e,gov:e,id:e,net:e,org:e,sch:e,"xn--mgba3a4f16a":e,"ایران":e,"xn--mgba3a4fra":e,"ايران":e,arvanedge:t,vistablog:t}],is:e,it:[1,{edu:e,gov:e,abr:e,abruzzo:e,"aosta-valley":e,aostavalley:e,bas:e,basilicata:e,cal:e,calabria:e,cam:e,campania:e,"emilia-romagna":e,emiliaromagna:e,emr:e,"friuli-v-giulia":e,"friuli-ve-giulia":e,"friuli-vegiulia":e,"friuli-venezia-giulia":e,"friuli-veneziagiulia":e,"friuli-vgiulia":e,"friuliv-giulia":e,"friulive-giulia":e,friulivegiulia:e,"friulivenezia-giulia":e,friuliveneziagiulia:e,friulivgiulia:e,fvg:e,laz:e,lazio:e,lig:e,liguria:e,lom:e,lombardia:e,lombardy:e,lucania:e,mar:e,marche:e,mol:e,molise:e,piedmont:e,piemonte:e,pmn:e,pug:e,puglia:e,sar:e,sardegna:e,sardinia:e,sic:e,sicilia:e,sicily:e,taa:e,tos:e,toscana:e,"trentin-sud-tirol":e,"xn--trentin-sd-tirol-rzb":e,"trentin-süd-tirol":e,"trentin-sudtirol":e,"xn--trentin-sdtirol-7vb":e,"trentin-südtirol":e,"trentin-sued-tirol":e,"trentin-suedtirol":e,trentino:e,"trentino-a-adige":e,"trentino-aadige":e,"trentino-alto-adige":e,"trentino-altoadige":e,"trentino-s-tirol":e,"trentino-stirol":e,"trentino-sud-tirol":e,"xn--trentino-sd-tirol-c3b":e,"trentino-süd-tirol":e,"trentino-sudtirol":e,"xn--trentino-sdtirol-szb":e,"trentino-südtirol":e,"trentino-sued-tirol":e,"trentino-suedtirol":e,"trentinoa-adige":e,trentinoaadige:e,"trentinoalto-adige":e,trentinoaltoadige:e,"trentinos-tirol":e,trentinostirol:e,"trentinosud-tirol":e,"xn--trentinosd-tirol-rzb":e,"trentinosüd-tirol":e,trentinosudtirol:e,"xn--trentinosdtirol-7vb":e,"trentinosüdtirol":e,"trentinosued-tirol":e,trentinosuedtirol:e,"trentinsud-tirol":e,"xn--trentinsd-tirol-6vb":e,"trentinsüd-tirol":e,trentinsudtirol:e,"xn--trentinsdtirol-nsb":e,"trentinsüdtirol":e,"trentinsued-tirol":e,trentinsuedtirol:e,tuscany:e,umb:e,umbria:e,"val-d-aosta":e,"val-daosta":e,"vald-aosta":e,valdaosta:e,"valle-aosta":e,"valle-d-aosta":e,"valle-daosta":e,valleaosta:e,"valled-aosta":e,valledaosta:e,"vallee-aoste":e,"xn--valle-aoste-ebb":e,"vallée-aoste":e,"vallee-d-aoste":e,"xn--valle-d-aoste-ehb":e,"vallée-d-aoste":e,valleeaoste:e,"xn--valleaoste-e7a":e,"valléeaoste":e,valleedaoste:e,"xn--valledaoste-ebb":e,"valléedaoste":e,vao:e,vda:e,ven:e,veneto:e,ag:e,agrigento:e,al:e,alessandria:e,"alto-adige":e,altoadige:e,an:e,ancona:e,"andria-barletta-trani":e,"andria-trani-barletta":e,andriabarlettatrani:e,andriatranibarletta:e,ao:e,aosta:e,aoste:e,ap:e,aq:e,aquila:e,ar:e,arezzo:e,"ascoli-piceno":e,ascolipiceno:e,asti:e,at:e,av:e,avellino:e,ba:e,balsan:e,"balsan-sudtirol":e,"xn--balsan-sdtirol-nsb":e,"balsan-südtirol":e,"balsan-suedtirol":e,bari:e,"barletta-trani-andria":e,barlettatraniandria:e,belluno:e,benevento:e,bergamo:e,bg:e,bi:e,biella:e,bl:e,bn:e,bo:e,bologna:e,bolzano:e,"bolzano-altoadige":e,bozen:e,"bozen-sudtirol":e,"xn--bozen-sdtirol-2ob":e,"bozen-südtirol":e,"bozen-suedtirol":e,br:e,brescia:e,brindisi:e,bs:e,bt:e,bulsan:e,"bulsan-sudtirol":e,"xn--bulsan-sdtirol-nsb":e,"bulsan-südtirol":e,"bulsan-suedtirol":e,bz:e,ca:e,cagliari:e,caltanissetta:e,"campidano-medio":e,campidanomedio:e,campobasso:e,"carbonia-iglesias":e,carboniaiglesias:e,"carrara-massa":e,carraramassa:e,caserta:e,catania:e,catanzaro:e,cb:e,ce:e,"cesena-forli":e,"xn--cesena-forl-mcb":e,"cesena-forlì":e,cesenaforli:e,"xn--cesenaforl-i8a":e,"cesenaforlì":e,ch:e,chieti:e,ci:e,cl:e,cn:e,co:e,como:e,cosenza:e,cr:e,cremona:e,crotone:e,cs:e,ct:e,cuneo:e,cz:e,"dell-ogliastra":e,dellogliastra:e,en:e,enna:e,fc:e,fe:e,fermo:e,ferrara:e,fg:e,fi:e,firenze:e,florence:e,fm:e,foggia:e,"forli-cesena":e,"xn--forl-cesena-fcb":e,"forlì-cesena":e,forlicesena:e,"xn--forlcesena-c8a":e,"forlìcesena":e,fr:e,frosinone:e,ge:e,genoa:e,genova:e,go:e,gorizia:e,gr:e,grosseto:e,"iglesias-carbonia":e,iglesiascarbonia:e,im:e,imperia:e,is:e,isernia:e,kr:e,"la-spezia":e,laquila:e,laspezia:e,latina:e,lc:e,le:e,lecce:e,lecco:e,li:e,livorno:e,lo:e,lodi:e,lt:e,lu:e,lucca:e,macerata:e,mantova:e,"massa-carrara":e,massacarrara:e,matera:e,mb:e,mc:e,me:e,"medio-campidano":e,mediocampidano:e,messina:e,mi:e,milan:e,milano:e,mn:e,mo:e,modena:e,monza:e,"monza-brianza":e,"monza-e-della-brianza":e,monzabrianza:e,monzaebrianza:e,monzaedellabrianza:e,ms:e,mt:e,na:e,naples:e,napoli:e,no:e,novara:e,nu:e,nuoro:e,og:e,ogliastra:e,"olbia-tempio":e,olbiatempio:e,or:e,oristano:e,ot:e,pa:e,padova:e,padua:e,palermo:e,parma:e,pavia:e,pc:e,pd:e,pe:e,perugia:e,"pesaro-urbino":e,pesarourbino:e,pescara:e,pg:e,pi:e,piacenza:e,pisa:e,pistoia:e,pn:e,po:e,pordenone:e,potenza:e,pr:e,prato:e,pt:e,pu:e,pv:e,pz:e,ra:e,ragusa:e,ravenna:e,rc:e,re:e,"reggio-calabria":e,"reggio-emilia":e,reggiocalabria:e,reggioemilia:e,rg:e,ri:e,rieti:e,rimini:e,rm:e,rn:e,ro:e,roma:e,rome:e,rovigo:e,sa:e,salerno:e,sassari:e,savona:e,si:e,siena:e,siracusa:e,so:e,sondrio:e,sp:e,sr:e,ss:e,"xn--sdtirol-n2a":e,"südtirol":e,suedtirol:e,sv:e,ta:e,taranto:e,te:e,"tempio-olbia":e,tempioolbia:e,teramo:e,terni:e,tn:e,to:e,torino:e,tp:e,tr:e,"trani-andria-barletta":e,"trani-barletta-andria":e,traniandriabarletta:e,tranibarlettaandria:e,trapani:e,trento:e,treviso:e,trieste:e,ts:e,turin:e,tv:e,ud:e,udine:e,"urbino-pesaro":e,urbinopesaro:e,va:e,varese:e,vb:e,vc:e,ve:e,venezia:e,venice:e,verbania:e,vercelli:e,verona:e,vi:e,"vibo-valentia":e,vibovalentia:e,vicenza:e,viterbo:e,vr:e,vs:e,vt:e,vv:e,ibxos:t,iliadboxos:t,neen:[0,{jc:t}],"123homepage":t,"16-b":t,"32-b":t,"64-b":t,myspreadshop:t,syncloud:t}],je:[1,{co:e,net:e,org:e,of:t}],jm:Ae,jo:[1,{agri:e,ai:e,com:e,edu:e,eng:e,fm:e,gov:e,mil:e,net:e,org:e,per:e,phd:e,sch:e,tv:e}],jobs:e,jp:[1,{ac:e,ad:e,co:e,ed:e,go:e,gr:e,lg:e,ne:[1,{aseinet:Or,gehirn:t,ivory:t,"mail-box":t,mints:t,mokuren:t,opal:t,sakura:t,sumomo:t,topaz:t}],or:e,aichi:[1,{aisai:e,ama:e,anjo:e,asuke:e,chiryu:e,chita:e,fuso:e,gamagori:e,handa:e,hazu:e,hekinan:e,higashiura:e,ichinomiya:e,inazawa:e,inuyama:e,isshiki:e,iwakura:e,kanie:e,kariya:e,kasugai:e,kira:e,kiyosu:e,komaki:e,konan:e,kota:e,mihama:e,miyoshi:e,nishio:e,nisshin:e,obu:e,oguchi:e,oharu:e,okazaki:e,owariasahi:e,seto:e,shikatsu:e,shinshiro:e,shitara:e,tahara:e,takahama:e,tobishima:e,toei:e,togo:e,tokai:e,tokoname:e,toyoake:e,toyohashi:e,toyokawa:e,toyone:e,toyota:e,tsushima:e,yatomi:e}],akita:[1,{akita:e,daisen:e,fujisato:e,gojome:e,hachirogata:e,happou:e,higashinaruse:e,honjo:e,honjyo:e,ikawa:e,kamikoani:e,kamioka:e,katagami:e,kazuno:e,kitaakita:e,kosaka:e,kyowa:e,misato:e,mitane:e,moriyoshi:e,nikaho:e,noshiro:e,odate:e,oga:e,ogata:e,semboku:e,yokote:e,yurihonjo:e}],aomori:[1,{aomori:e,gonohe:e,hachinohe:e,hashikami:e,hiranai:e,hirosaki:e,itayanagi:e,kuroishi:e,misawa:e,mutsu:e,nakadomari:e,noheji:e,oirase:e,owani:e,rokunohe:e,sannohe:e,shichinohe:e,shingo:e,takko:e,towada:e,tsugaru:e,tsuruta:e}],chiba:[1,{abiko:e,asahi:e,chonan:e,chosei:e,choshi:e,chuo:e,funabashi:e,futtsu:e,hanamigawa:e,ichihara:e,ichikawa:e,ichinomiya:e,inzai:e,isumi:e,kamagaya:e,kamogawa:e,kashiwa:e,katori:e,katsuura:e,kimitsu:e,kisarazu:e,kozaki:e,kujukuri:e,kyonan:e,matsudo:e,midori:e,mihama:e,minamiboso:e,mobara:e,mutsuzawa:e,nagara:e,nagareyama:e,narashino:e,narita:e,noda:e,oamishirasato:e,omigawa:e,onjuku:e,otaki:e,sakae:e,sakura:e,shimofusa:e,shirako:e,shiroi:e,shisui:e,sodegaura:e,sosa:e,tako:e,tateyama:e,togane:e,tohnosho:e,tomisato:e,urayasu:e,yachimata:e,yachiyo:e,yokaichiba:e,yokoshibahikari:e,yotsukaido:e}],ehime:[1,{ainan:e,honai:e,ikata:e,imabari:e,iyo:e,kamijima:e,kihoku:e,kumakogen:e,masaki:e,matsuno:e,matsuyama:e,namikata:e,niihama:e,ozu:e,saijo:e,seiyo:e,shikokuchuo:e,tobe:e,toon:e,uchiko:e,uwajima:e,yawatahama:e}],fukui:[1,{echizen:e,eiheiji:e,fukui:e,ikeda:e,katsuyama:e,mihama:e,minamiechizen:e,obama:e,ohi:e,ono:e,sabae:e,sakai:e,takahama:e,tsuruga:e,wakasa:e}],fukuoka:[1,{ashiya:e,buzen:e,chikugo:e,chikuho:e,chikujo:e,chikushino:e,chikuzen:e,chuo:e,dazaifu:e,fukuchi:e,hakata:e,higashi:e,hirokawa:e,hisayama:e,iizuka:e,inatsuki:e,kaho:e,kasuga:e,kasuya:e,kawara:e,keisen:e,koga:e,kurate:e,kurogi:e,kurume:e,minami:e,miyako:e,miyama:e,miyawaka:e,mizumaki:e,munakata:e,nakagawa:e,nakama:e,nishi:e,nogata:e,ogori:e,okagaki:e,okawa:e,oki:e,omuta:e,onga:e,onojo:e,oto:e,saigawa:e,sasaguri:e,shingu:e,shinyoshitomi:e,shonai:e,soeda:e,sue:e,tachiarai:e,tagawa:e,takata:e,toho:e,toyotsu:e,tsuiki:e,ukiha:e,umi:e,usui:e,yamada:e,yame:e,yanagawa:e,yukuhashi:e}],fukushima:[1,{aizubange:e,aizumisato:e,aizuwakamatsu:e,asakawa:e,bandai:e,date:e,fukushima:e,furudono:e,futaba:e,hanawa:e,higashi:e,hirata:e,hirono:e,iitate:e,inawashiro:e,ishikawa:e,iwaki:e,izumizaki:e,kagamiishi:e,kaneyama:e,kawamata:e,kitakata:e,kitashiobara:e,koori:e,koriyama:e,kunimi:e,miharu:e,mishima:e,namie:e,nango:e,nishiaizu:e,nishigo:e,okuma:e,omotego:e,ono:e,otama:e,samegawa:e,shimogo:e,shirakawa:e,showa:e,soma:e,sukagawa:e,taishin:e,tamakawa:e,tanagura:e,tenei:e,yabuki:e,yamato:e,yamatsuri:e,yanaizu:e,yugawa:e}],gifu:[1,{anpachi:e,ena:e,gifu:e,ginan:e,godo:e,gujo:e,hashima:e,hichiso:e,hida:e,higashishirakawa:e,ibigawa:e,ikeda:e,kakamigahara:e,kani:e,kasahara:e,kasamatsu:e,kawaue:e,kitagata:e,mino:e,minokamo:e,mitake:e,mizunami:e,motosu:e,nakatsugawa:e,ogaki:e,sakahogi:e,seki:e,sekigahara:e,shirakawa:e,tajimi:e,takayama:e,tarui:e,toki:e,tomika:e,wanouchi:e,yamagata:e,yaotsu:e,yoro:e}],gunma:[1,{annaka:e,chiyoda:e,fujioka:e,higashiagatsuma:e,isesaki:e,itakura:e,kanna:e,kanra:e,katashina:e,kawaba:e,kiryu:e,kusatsu:e,maebashi:e,meiwa:e,midori:e,minakami:e,naganohara:e,nakanojo:e,nanmoku:e,numata:e,oizumi:e,ora:e,ota:e,shibukawa:e,shimonita:e,shinto:e,showa:e,takasaki:e,takayama:e,tamamura:e,tatebayashi:e,tomioka:e,tsukiyono:e,tsumagoi:e,ueno:e,yoshioka:e}],hiroshima:[1,{asaminami:e,daiwa:e,etajima:e,fuchu:e,fukuyama:e,hatsukaichi:e,higashihiroshima:e,hongo:e,jinsekikogen:e,kaita:e,kui:e,kumano:e,kure:e,mihara:e,miyoshi:e,naka:e,onomichi:e,osakikamijima:e,otake:e,saka:e,sera:e,seranishi:e,shinichi:e,shobara:e,takehara:e}],hokkaido:[1,{abashiri:e,abira:e,aibetsu:e,akabira:e,akkeshi:e,asahikawa:e,ashibetsu:e,ashoro:e,assabu:e,atsuma:e,bibai:e,biei:e,bifuka:e,bihoro:e,biratori:e,chippubetsu:e,chitose:e,date:e,ebetsu:e,embetsu:e,eniwa:e,erimo:e,esan:e,esashi:e,fukagawa:e,fukushima:e,furano:e,furubira:e,haboro:e,hakodate:e,hamatonbetsu:e,hidaka:e,higashikagura:e,higashikawa:e,hiroo:e,hokuryu:e,hokuto:e,honbetsu:e,horokanai:e,horonobe:e,ikeda:e,imakane:e,ishikari:e,iwamizawa:e,iwanai:e,kamifurano:e,kamikawa:e,kamishihoro:e,kamisunagawa:e,kamoenai:e,kayabe:e,kembuchi:e,kikonai:e,kimobetsu:e,kitahiroshima:e,kitami:e,kiyosato:e,koshimizu:e,kunneppu:e,kuriyama:e,kuromatsunai:e,kushiro:e,kutchan:e,kyowa:e,mashike:e,matsumae:e,mikasa:e,minamifurano:e,mombetsu:e,moseushi:e,mukawa:e,muroran:e,naie:e,nakagawa:e,nakasatsunai:e,nakatombetsu:e,nanae:e,nanporo:e,nayoro:e,nemuro:e,niikappu:e,niki:e,nishiokoppe:e,noboribetsu:e,numata:e,obihiro:e,obira:e,oketo:e,okoppe:e,otaru:e,otobe:e,otofuke:e,otoineppu:e,oumu:e,ozora:e,pippu:e,rankoshi:e,rebun:e,rikubetsu:e,rishiri:e,rishirifuji:e,saroma:e,sarufutsu:e,shakotan:e,shari:e,shibecha:e,shibetsu:e,shikabe:e,shikaoi:e,shimamaki:e,shimizu:e,shimokawa:e,shinshinotsu:e,shintoku:e,shiranuka:e,shiraoi:e,shiriuchi:e,sobetsu:e,sunagawa:e,taiki:e,takasu:e,takikawa:e,takinoue:e,teshikaga:e,tobetsu:e,tohma:e,tomakomai:e,tomari:e,toya:e,toyako:e,toyotomi:e,toyoura:e,tsubetsu:e,tsukigata:e,urakawa:e,urausu:e,uryu:e,utashinai:e,wakkanai:e,wassamu:e,yakumo:e,yoichi:e}],hyogo:[1,{aioi:e,akashi:e,ako:e,amagasaki:e,aogaki:e,asago:e,ashiya:e,awaji:e,fukusaki:e,goshiki:e,harima:e,himeji:e,ichikawa:e,inagawa:e,itami:e,kakogawa:e,kamigori:e,kamikawa:e,kasai:e,kasuga:e,kawanishi:e,miki:e,minamiawaji:e,nishinomiya:e,nishiwaki:e,ono:e,sanda:e,sannan:e,sasayama:e,sayo:e,shingu:e,shinonsen:e,shiso:e,sumoto:e,taishi:e,taka:e,takarazuka:e,takasago:e,takino:e,tamba:e,tatsuno:e,toyooka:e,yabu:e,yashiro:e,yoka:e,yokawa:e}],ibaraki:[1,{ami:e,asahi:e,bando:e,chikusei:e,daigo:e,fujishiro:e,hitachi:e,hitachinaka:e,hitachiomiya:e,hitachiota:e,ibaraki:e,ina:e,inashiki:e,itako:e,iwama:e,joso:e,kamisu:e,kasama:e,kashima:e,kasumigaura:e,koga:e,miho:e,mito:e,moriya:e,naka:e,namegata:e,oarai:e,ogawa:e,omitama:e,ryugasaki:e,sakai:e,sakuragawa:e,shimodate:e,shimotsuma:e,shirosato:e,sowa:e,suifu:e,takahagi:e,tamatsukuri:e,tokai:e,tomobe:e,tone:e,toride:e,tsuchiura:e,tsukuba:e,uchihara:e,ushiku:e,yachiyo:e,yamagata:e,yawara:e,yuki:e}],ishikawa:[1,{anamizu:e,hakui:e,hakusan:e,kaga:e,kahoku:e,kanazawa:e,kawakita:e,komatsu:e,nakanoto:e,nanao:e,nomi:e,nonoichi:e,noto:e,shika:e,suzu:e,tsubata:e,tsurugi:e,uchinada:e,wajima:e}],iwate:[1,{fudai:e,fujisawa:e,hanamaki:e,hiraizumi:e,hirono:e,ichinohe:e,ichinoseki:e,iwaizumi:e,iwate:e,joboji:e,kamaishi:e,kanegasaki:e,karumai:e,kawai:e,kitakami:e,kuji:e,kunohe:e,kuzumaki:e,miyako:e,mizusawa:e,morioka:e,ninohe:e,noda:e,ofunato:e,oshu:e,otsuchi:e,rikuzentakata:e,shiwa:e,shizukuishi:e,sumita:e,tanohata:e,tono:e,yahaba:e,yamada:e}],kagawa:[1,{ayagawa:e,higashikagawa:e,kanonji:e,kotohira:e,manno:e,marugame:e,mitoyo:e,naoshima:e,sanuki:e,tadotsu:e,takamatsu:e,tonosho:e,uchinomi:e,utazu:e,zentsuji:e}],kagoshima:[1,{akune:e,amami:e,hioki:e,isa:e,isen:e,izumi:e,kagoshima:e,kanoya:e,kawanabe:e,kinko:e,kouyama:e,makurazaki:e,matsumoto:e,minamitane:e,nakatane:e,nishinoomote:e,satsumasendai:e,soo:e,tarumizu:e,yusui:e}],kanagawa:[1,{aikawa:e,atsugi:e,ayase:e,chigasaki:e,ebina:e,fujisawa:e,hadano:e,hakone:e,hiratsuka:e,isehara:e,kaisei:e,kamakura:e,kiyokawa:e,matsuda:e,minamiashigara:e,miura:e,nakai:e,ninomiya:e,odawara:e,oi:e,oiso:e,sagamihara:e,samukawa:e,tsukui:e,yamakita:e,yamato:e,yokosuka:e,yugawara:e,zama:e,zushi:e}],kochi:[1,{aki:e,geisei:e,hidaka:e,higashitsuno:e,ino:e,kagami:e,kami:e,kitagawa:e,kochi:e,mihara:e,motoyama:e,muroto:e,nahari:e,nakamura:e,nankoku:e,nishitosa:e,niyodogawa:e,ochi:e,okawa:e,otoyo:e,otsuki:e,sakawa:e,sukumo:e,susaki:e,tosa:e,tosashimizu:e,toyo:e,tsuno:e,umaji:e,yasuda:e,yusuhara:e}],kumamoto:[1,{amakusa:e,arao:e,aso:e,choyo:e,gyokuto:e,kamiamakusa:e,kikuchi:e,kumamoto:e,mashiki:e,mifune:e,minamata:e,minamioguni:e,nagasu:e,nishihara:e,oguni:e,ozu:e,sumoto:e,takamori:e,uki:e,uto:e,yamaga:e,yamato:e,yatsushiro:e}],kyoto:[1,{ayabe:e,fukuchiyama:e,higashiyama:e,ide:e,ine:e,joyo:e,kameoka:e,kamo:e,kita:e,kizu:e,kumiyama:e,kyotamba:e,kyotanabe:e,kyotango:e,maizuru:e,minami:e,minamiyamashiro:e,miyazu:e,muko:e,nagaokakyo:e,nakagyo:e,nantan:e,oyamazaki:e,sakyo:e,seika:e,tanabe:e,uji:e,ujitawara:e,wazuka:e,yamashina:e,yawata:e}],mie:[1,{asahi:e,inabe:e,ise:e,kameyama:e,kawagoe:e,kiho:e,kisosaki:e,kiwa:e,komono:e,kumano:e,kuwana:e,matsusaka:e,meiwa:e,mihama:e,minamiise:e,misugi:e,miyama:e,nabari:e,shima:e,suzuka:e,tado:e,taiki:e,taki:e,tamaki:e,toba:e,tsu:e,udono:e,ureshino:e,watarai:e,yokkaichi:e}],miyagi:[1,{furukawa:e,higashimatsushima:e,ishinomaki:e,iwanuma:e,kakuda:e,kami:e,kawasaki:e,marumori:e,matsushima:e,minamisanriku:e,misato:e,murata:e,natori:e,ogawara:e,ohira:e,onagawa:e,osaki:e,rifu:e,semine:e,shibata:e,shichikashuku:e,shikama:e,shiogama:e,shiroishi:e,tagajo:e,taiwa:e,tome:e,tomiya:e,wakuya:e,watari:e,yamamoto:e,zao:e}],miyazaki:[1,{aya:e,ebino:e,gokase:e,hyuga:e,kadogawa:e,kawaminami:e,kijo:e,kitagawa:e,kitakata:e,kitaura:e,kobayashi:e,kunitomi:e,kushima:e,mimata:e,miyakonojo:e,miyazaki:e,morotsuka:e,nichinan:e,nishimera:e,nobeoka:e,saito:e,shiiba:e,shintomi:e,takaharu:e,takanabe:e,takazaki:e,tsuno:e}],nagano:[1,{achi:e,agematsu:e,anan:e,aoki:e,asahi:e,azumino:e,chikuhoku:e,chikuma:e,chino:e,fujimi:e,hakuba:e,hara:e,hiraya:e,iida:e,iijima:e,iiyama:e,iizuna:e,ikeda:e,ikusaka:e,ina:e,karuizawa:e,kawakami:e,kiso:e,kisofukushima:e,kitaaiki:e,komagane:e,komoro:e,matsukawa:e,matsumoto:e,miasa:e,minamiaiki:e,minamimaki:e,minamiminowa:e,minowa:e,miyada:e,miyota:e,mochizuki:e,nagano:e,nagawa:e,nagiso:e,nakagawa:e,nakano:e,nozawaonsen:e,obuse:e,ogawa:e,okaya:e,omachi:e,omi:e,ookuwa:e,ooshika:e,otaki:e,otari:e,sakae:e,sakaki:e,saku:e,sakuho:e,shimosuwa:e,shinanomachi:e,shiojiri:e,suwa:e,suzaka:e,takagi:e,takamori:e,takayama:e,tateshina:e,tatsuno:e,togakushi:e,togura:e,tomi:e,ueda:e,wada:e,yamagata:e,yamanouchi:e,yasaka:e,yasuoka:e}],nagasaki:[1,{chijiwa:e,futsu:e,goto:e,hasami:e,hirado:e,iki:e,isahaya:e,kawatana:e,kuchinotsu:e,matsuura:e,nagasaki:e,obama:e,omura:e,oseto:e,saikai:e,sasebo:e,seihi:e,shimabara:e,shinkamigoto:e,togitsu:e,tsushima:e,unzen:e}],nara:[1,{ando:e,gose:e,heguri:e,higashiyoshino:e,ikaruga:e,ikoma:e,kamikitayama:e,kanmaki:e,kashiba:e,kashihara:e,katsuragi:e,kawai:e,kawakami:e,kawanishi:e,koryo:e,kurotaki:e,mitsue:e,miyake:e,nara:e,nosegawa:e,oji:e,ouda:e,oyodo:e,sakurai:e,sango:e,shimoichi:e,shimokitayama:e,shinjo:e,soni:e,takatori:e,tawaramoto:e,tenkawa:e,tenri:e,uda:e,yamatokoriyama:e,yamatotakada:e,yamazoe:e,yoshino:e}],niigata:[1,{aga:e,agano:e,gosen:e,itoigawa:e,izumozaki:e,joetsu:e,kamo:e,kariwa:e,kashiwazaki:e,minamiuonuma:e,mitsuke:e,muika:e,murakami:e,myoko:e,nagaoka:e,niigata:e,ojiya:e,omi:e,sado:e,sanjo:e,seiro:e,seirou:e,sekikawa:e,shibata:e,tagami:e,tainai:e,tochio:e,tokamachi:e,tsubame:e,tsunan:e,uonuma:e,yahiko:e,yoita:e,yuzawa:e}],oita:[1,{beppu:e,bungoono:e,bungotakada:e,hasama:e,hiji:e,himeshima:e,hita:e,kamitsue:e,kokonoe:e,kuju:e,kunisaki:e,kusu:e,oita:e,saiki:e,taketa:e,tsukumi:e,usa:e,usuki:e,yufu:e}],okayama:[1,{akaiwa:e,asakuchi:e,bizen:e,hayashima:e,ibara:e,kagamino:e,kasaoka:e,kibichuo:e,kumenan:e,kurashiki:e,maniwa:e,misaki:e,nagi:e,niimi:e,nishiawakura:e,okayama:e,satosho:e,setouchi:e,shinjo:e,shoo:e,soja:e,takahashi:e,tamano:e,tsuyama:e,wake:e,yakage:e}],okinawa:[1,{aguni:e,ginowan:e,ginoza:e,gushikami:e,haebaru:e,higashi:e,hirara:e,iheya:e,ishigaki:e,ishikawa:e,itoman:e,izena:e,kadena:e,kin:e,kitadaito:e,kitanakagusuku:e,kumejima:e,kunigami:e,minamidaito:e,motobu:e,nago:e,naha:e,nakagusuku:e,nakijin:e,nanjo:e,nishihara:e,ogimi:e,okinawa:e,onna:e,shimoji:e,taketomi:e,tarama:e,tokashiki:e,tomigusuku:e,tonaki:e,urasoe:e,uruma:e,yaese:e,yomitan:e,yonabaru:e,yonaguni:e,zamami:e}],osaka:[1,{abeno:e,chihayaakasaka:e,chuo:e,daito:e,fujiidera:e,habikino:e,hannan:e,higashiosaka:e,higashisumiyoshi:e,higashiyodogawa:e,hirakata:e,ibaraki:e,ikeda:e,izumi:e,izumiotsu:e,izumisano:e,kadoma:e,kaizuka:e,kanan:e,kashiwara:e,katano:e,kawachinagano:e,kishiwada:e,kita:e,kumatori:e,matsubara:e,minato:e,minoh:e,misaki:e,moriguchi:e,neyagawa:e,nishi:e,nose:e,osakasayama:e,sakai:e,sayama:e,sennan:e,settsu:e,shijonawate:e,shimamoto:e,suita:e,tadaoka:e,taishi:e,tajiri:e,takaishi:e,takatsuki:e,tondabayashi:e,toyonaka:e,toyono:e,yao:e}],saga:[1,{ariake:e,arita:e,fukudomi:e,genkai:e,hamatama:e,hizen:e,imari:e,kamimine:e,kanzaki:e,karatsu:e,kashima:e,kitagata:e,kitahata:e,kiyama:e,kouhoku:e,kyuragi:e,nishiarita:e,ogi:e,omachi:e,ouchi:e,saga:e,shiroishi:e,taku:e,tara:e,tosu:e,yoshinogari:e}],saitama:[1,{arakawa:e,asaka:e,chichibu:e,fujimi:e,fujimino:e,fukaya:e,hanno:e,hanyu:e,hasuda:e,hatogaya:e,hatoyama:e,hidaka:e,higashichichibu:e,higashimatsuyama:e,honjo:e,ina:e,iruma:e,iwatsuki:e,kamiizumi:e,kamikawa:e,kamisato:e,kasukabe:e,kawagoe:e,kawaguchi:e,kawajima:e,kazo:e,kitamoto:e,koshigaya:e,kounosu:e,kuki:e,kumagaya:e,matsubushi:e,minano:e,misato:e,miyashiro:e,miyoshi:e,moroyama:e,nagatoro:e,namegawa:e,niiza:e,ogano:e,ogawa:e,ogose:e,okegawa:e,omiya:e,otaki:e,ranzan:e,ryokami:e,saitama:e,sakado:e,satte:e,sayama:e,shiki:e,shiraoka:e,soka:e,sugito:e,toda:e,tokigawa:e,tokorozawa:e,tsurugashima:e,urawa:e,warabi:e,yashio:e,yokoze:e,yono:e,yorii:e,yoshida:e,yoshikawa:e,yoshimi:e}],shiga:[1,{aisho:e,gamo:e,higashiomi:e,hikone:e,koka:e,konan:e,kosei:e,koto:e,kusatsu:e,maibara:e,moriyama:e,nagahama:e,nishiazai:e,notogawa:e,omihachiman:e,otsu:e,ritto:e,ryuoh:e,takashima:e,takatsuki:e,torahime:e,toyosato:e,yasu:e}],shimane:[1,{akagi:e,ama:e,gotsu:e,hamada:e,higashiizumo:e,hikawa:e,hikimi:e,izumo:e,kakinoki:e,masuda:e,matsue:e,misato:e,nishinoshima:e,ohda:e,okinoshima:e,okuizumo:e,shimane:e,tamayu:e,tsuwano:e,unnan:e,yakumo:e,yasugi:e,yatsuka:e}],shizuoka:[1,{arai:e,atami:e,fuji:e,fujieda:e,fujikawa:e,fujinomiya:e,fukuroi:e,gotemba:e,haibara:e,hamamatsu:e,higashiizu:e,ito:e,iwata:e,izu:e,izunokuni:e,kakegawa:e,kannami:e,kawanehon:e,kawazu:e,kikugawa:e,kosai:e,makinohara:e,matsuzaki:e,minamiizu:e,mishima:e,morimachi:e,nishiizu:e,numazu:e,omaezaki:e,shimada:e,shimizu:e,shimoda:e,shizuoka:e,susono:e,yaizu:e,yoshida:e}],tochigi:[1,{ashikaga:e,bato:e,haga:e,ichikai:e,iwafune:e,kaminokawa:e,kanuma:e,karasuyama:e,kuroiso:e,mashiko:e,mibu:e,moka:e,motegi:e,nasu:e,nasushiobara:e,nikko:e,nishikata:e,nogi:e,ohira:e,ohtawara:e,oyama:e,sakura:e,sano:e,shimotsuke:e,shioya:e,takanezawa:e,tochigi:e,tsuga:e,ujiie:e,utsunomiya:e,yaita:e}],tokushima:[1,{aizumi:e,anan:e,ichiba:e,itano:e,kainan:e,komatsushima:e,matsushige:e,mima:e,minami:e,miyoshi:e,mugi:e,nakagawa:e,naruto:e,sanagochi:e,shishikui:e,tokushima:e,wajiki:e}],tokyo:[1,{adachi:e,akiruno:e,akishima:e,aogashima:e,arakawa:e,bunkyo:e,chiyoda:e,chofu:e,chuo:e,edogawa:e,fuchu:e,fussa:e,hachijo:e,hachioji:e,hamura:e,higashikurume:e,higashimurayama:e,higashiyamato:e,hino:e,hinode:e,hinohara:e,inagi:e,itabashi:e,katsushika:e,kita:e,kiyose:e,kodaira:e,koganei:e,kokubunji:e,komae:e,koto:e,kouzushima:e,kunitachi:e,machida:e,meguro:e,minato:e,mitaka:e,mizuho:e,musashimurayama:e,musashino:e,nakano:e,nerima:e,ogasawara:e,okutama:e,ome:e,oshima:e,ota:e,setagaya:e,shibuya:e,shinagawa:e,shinjuku:e,suginami:e,sumida:e,tachikawa:e,taito:e,tama:e,toshima:e}],tottori:[1,{chizu:e,hino:e,kawahara:e,koge:e,kotoura:e,misasa:e,nanbu:e,nichinan:e,sakaiminato:e,tottori:e,wakasa:e,yazu:e,yonago:e}],toyama:[1,{asahi:e,fuchu:e,fukumitsu:e,funahashi:e,himi:e,imizu:e,inami:e,johana:e,kamiichi:e,kurobe:e,nakaniikawa:e,namerikawa:e,nanto:e,nyuzen:e,oyabe:e,taira:e,takaoka:e,tateyama:e,toga:e,tonami:e,toyama:e,unazuki:e,uozu:e,yamada:e}],wakayama:[1,{arida:e,aridagawa:e,gobo:e,hashimoto:e,hidaka:e,hirogawa:e,inami:e,iwade:e,kainan:e,kamitonda:e,katsuragi:e,kimino:e,kinokawa:e,kitayama:e,koya:e,koza:e,kozagawa:e,kudoyama:e,kushimoto:e,mihama:e,misato:e,nachikatsuura:e,shingu:e,shirahama:e,taiji:e,tanabe:e,wakayama:e,yuasa:e,yura:e}],yamagata:[1,{asahi:e,funagata:e,higashine:e,iide:e,kahoku:e,kaminoyama:e,kaneyama:e,kawanishi:e,mamurogawa:e,mikawa:e,murayama:e,nagai:e,nakayama:e,nanyo:e,nishikawa:e,obanazawa:e,oe:e,oguni:e,ohkura:e,oishida:e,sagae:e,sakata:e,sakegawa:e,shinjo:e,shirataka:e,shonai:e,takahata:e,tendo:e,tozawa:e,tsuruoka:e,yamagata:e,yamanobe:e,yonezawa:e,yuza:e}],yamaguchi:[1,{abu:e,hagi:e,hikari:e,hofu:e,iwakuni:e,kudamatsu:e,mitou:e,nagato:e,oshima:e,shimonoseki:e,shunan:e,tabuse:e,tokuyama:e,toyota:e,ube:e,yuu:e}],yamanashi:[1,{chuo:e,doshi:e,fuefuki:e,fujikawa:e,fujikawaguchiko:e,fujiyoshida:e,hayakawa:e,hokuto:e,ichikawamisato:e,kai:e,kofu:e,koshu:e,kosuge:e,"minami-alps":e,minobu:e,nakamichi:e,nanbu:e,narusawa:e,nirasaki:e,nishikatsura:e,oshino:e,otsuki:e,showa:e,tabayama:e,tsuru:e,uenohara:e,yamanakako:e,yamanashi:e}],"xn--ehqz56n":e,"三重":e,"xn--1lqs03n":e,"京都":e,"xn--qqqt11m":e,"佐賀":e,"xn--f6qx53a":e,"兵庫":e,"xn--djrs72d6uy":e,"北海道":e,"xn--mkru45i":e,"千葉":e,"xn--0trq7p7nn":e,"和歌山":e,"xn--5js045d":e,"埼玉":e,"xn--kbrq7o":e,"大分":e,"xn--pssu33l":e,"大阪":e,"xn--ntsq17g":e,"奈良":e,"xn--uisz3g":e,"宮城":e,"xn--6btw5a":e,"宮崎":e,"xn--1ctwo":e,"富山":e,"xn--6orx2r":e,"山口":e,"xn--rht61e":e,"山形":e,"xn--rht27z":e,"山梨":e,"xn--nit225k":e,"岐阜":e,"xn--rht3d":e,"岡山":e,"xn--djty4k":e,"岩手":e,"xn--klty5x":e,"島根":e,"xn--kltx9a":e,"広島":e,"xn--kltp7d":e,"徳島":e,"xn--c3s14m":e,"愛媛":e,"xn--vgu402c":e,"愛知":e,"xn--efvn9s":e,"新潟":e,"xn--1lqs71d":e,"東京":e,"xn--4pvxs":e,"栃木":e,"xn--uuwu58a":e,"沖縄":e,"xn--zbx025d":e,"滋賀":e,"xn--8pvr4u":e,"熊本":e,"xn--5rtp49c":e,"石川":e,"xn--ntso0iqx3a":e,"神奈川":e,"xn--elqq16h":e,"福井":e,"xn--4it168d":e,"福岡":e,"xn--klt787d":e,"福島":e,"xn--rny31h":e,"秋田":e,"xn--7t0a264c":e,"群馬":e,"xn--uist22h":e,"茨城":e,"xn--8ltr62k":e,"長崎":e,"xn--2m4a15e":e,"長野":e,"xn--32vp30h":e,"青森":e,"xn--4it797k":e,"静岡":e,"xn--5rtq34k":e,"香川":e,"xn--k7yn95e":e,"高知":e,"xn--tor131o":e,"鳥取":e,"xn--d5qv7z876c":e,"鹿児島":e,kawasaki:Ae,kitakyushu:Ae,kobe:Ae,nagoya:Ae,sapporo:Ae,sendai:Ae,yokohama:Ae,buyshop:t,fashionstore:t,handcrafted:t,kawaiishop:t,supersale:t,theshop:t,"0am":t,"0g0":t,"0j0":t,"0t0":t,mydns:t,pgw:t,wjg:t,usercontent:t,angry:t,babyblue:t,babymilk:t,backdrop:t,bambina:t,bitter:t,blush:t,boo:t,boy:t,boyfriend:t,but:t,candypop:t,capoo:t,catfood:t,cheap:t,chicappa:t,chillout:t,chips:t,chowder:t,chu:t,ciao:t,cocotte:t,coolblog:t,cranky:t,cutegirl:t,daa:t,deca:t,deci:t,digick:t,egoism:t,fakefur:t,fem:t,flier:t,floppy:t,fool:t,frenchkiss:t,girlfriend:t,girly:t,gloomy:t,gonna:t,greater:t,hacca:t,heavy:t,her:t,hiho:t,hippy:t,holy:t,hungry:t,icurus:t,itigo:t,jellybean:t,kikirara:t,kill:t,kilo:t,kuron:t,littlestar:t,lolipopmc:t,lolitapunk:t,lomo:t,lovepop:t,lovesick:t,main:t,mods:t,mond:t,mongolian:t,moo:t,namaste:t,nikita:t,nobushi:t,noor:t,oops:t,parallel:t,parasite:t,pecori:t,peewee:t,penne:t,pepper:t,perma:t,pigboat:t,pinoko:t,punyu:t,pupu:t,pussycat:t,pya:t,raindrop:t,readymade:t,sadist:t,schoolbus:t,secret:t,staba:t,stripper:t,sub:t,sunnyday:t,thick:t,tonkotsu:t,under:t,upper:t,velvet:t,verse:t,versus:t,vivian:t,watson:t,weblike:t,whitesnow:t,zombie:t,hateblo:t,hatenablog:t,hatenadiary:t,"2-d":t,bona:t,crap:t,daynight:t,eek:t,flop:t,halfmoon:t,jeez:t,matrix:t,mimoza:t,netgamers:t,nyanta:t,o0o0:t,rdy:t,rgr:t,rulez:t,sakurastorage:[0,{isk01:Ni,isk02:Ni}],saloon:t,sblo:t,skr:t,tank:t,"uh-oh":t,undo:t,webaccel:[0,{rs:t,user:t}],websozai:t,xii:t}],ke:[1,{ac:e,co:e,go:e,info:e,me:e,mobi:e,ne:e,or:e,sc:e}],kg:[1,{com:e,edu:e,gov:e,mil:e,net:e,org:e,us:t,xx:t,ae:t}],kh:n,ki:Lr,km:[1,{ass:e,com:e,edu:e,gov:e,mil:e,nom:e,org:e,prd:e,tm:e,asso:e,coop:e,gouv:e,medecin:e,notaires:e,pharmaciens:e,presse:e,veterinaire:e}],kn:[1,{edu:e,gov:e,net:e,org:e}],kp:[1,{com:e,edu:e,gov:e,org:e,rep:e,tra:e}],kr:[1,{ac:e,ai:e,co:e,es:e,go:e,hs:e,io:e,it:e,kg:e,me:e,mil:e,ms:e,ne:e,or:e,pe:e,re:e,sc:e,busan:e,chungbuk:e,chungnam:e,daegu:e,daejeon:e,gangwon:e,gwangju:e,gyeongbuk:e,gyeonggi:e,gyeongnam:e,incheon:e,jeju:e,jeonbuk:e,jeonnam:e,seoul:e,ulsan:e,c01:t,"eliv-api":t,"eliv-cdn":t,"eliv-dns":t,mmv:t,vki:t}],kw:[1,{com:e,edu:e,emb:e,gov:e,ind:e,net:e,org:e}],ky:Hn,kz:[1,{com:e,edu:e,gov:e,mil:e,net:e,org:e,jcloud:t}],la:[1,{com:e,edu:e,gov:e,info:e,int:e,net:e,org:e,per:e,bnr:t}],lb:n,lc:[1,{co:e,com:e,edu:e,gov:e,net:e,org:e,oy:t}],li:e,lk:[1,{ac:e,assn:e,com:e,edu:e,gov:e,grp:e,hotel:e,int:e,ltd:e,net:e,ngo:e,org:e,sch:e,soc:e,web:e}],lr:n,ls:[1,{ac:e,biz:e,co:e,edu:e,gov:e,info:e,net:e,org:e,sc:e}],lt:u,lu:[1,{"123website":t}],lv:[1,{asn:e,com:e,conf:e,edu:e,gov:e,id:e,mil:e,net:e,org:e}],ly:[1,{com:e,edu:e,gov:e,id:e,med:e,net:e,org:e,plc:e,sch:e}],ma:[1,{ac:e,co:e,gov:e,net:e,org:e,press:e}],mc:[1,{asso:e,tm:e}],md:[1,{ir:t}],me:[1,{ac:e,co:e,edu:e,gov:e,its:e,net:e,org:e,priv:e,c66:t,craft:t,edgestack:t,mybox:t,filegear:t,"filegear-sg":t,lohmus:t,barsy:t,mcdir:t,brasilia:t,ddns:t,dnsfor:t,hopto:t,loginto:t,noip:t,webhop:t,soundcast:t,tcp4:t,vp4:t,diskstation:t,dscloud:t,i234:t,myds:t,synology:t,transip:ft,nohost:t}],mg:[1,{co:e,com:e,edu:e,gov:e,mil:e,nom:e,org:e,prd:e}],mh:e,mil:e,mk:[1,{com:e,edu:e,gov:e,inf:e,name:e,net:e,org:e}],ml:[1,{ac:e,art:e,asso:e,com:e,edu:e,gouv:e,gov:e,info:e,inst:e,net:e,org:e,pr:e,presse:e}],mm:Ae,mn:[1,{edu:e,gov:e,org:e,nyc:t}],mo:n,mobi:[1,{barsy:t,dscloud:t}],mp:[1,{ju:t}],mq:e,mr:u,ms:[1,{com:e,edu:e,gov:e,net:e,org:e,minisite:t}],mt:Hn,mu:[1,{ac:e,co:e,com:e,gov:e,net:e,or:e,org:e}],museum:e,mv:[1,{aero:e,biz:e,com:e,coop:e,edu:e,gov:e,info:e,int:e,mil:e,museum:e,name:e,net:e,org:e,pro:e}],mw:[1,{ac:e,biz:e,co:e,com:e,coop:e,edu:e,gov:e,int:e,net:e,org:e}],mx:[1,{com:e,edu:e,gob:e,net:e,org:e}],my:[1,{biz:e,com:e,edu:e,gov:e,mil:e,name:e,net:e,org:e}],mz:[1,{ac:e,adv:e,co:e,edu:e,gov:e,mil:e,net:e,org:e}],na:[1,{alt:e,co:e,com:e,gov:e,net:e,org:e}],name:[1,{her:li,his:li,ispmanager:t,keenetic:t}],nc:[1,{asso:e,nom:e}],ne:e,net:[1,{adobeaemcloud:t,"adobeio-static":t,adobeioruntime:t,akadns:t,akamai:t,"akamai-staging":t,akamaiedge:t,"akamaiedge-staging":t,akamaihd:t,"akamaihd-staging":t,akamaiorigin:t,"akamaiorigin-staging":t,akamaized:t,"akamaized-staging":t,edgekey:t,"edgekey-staging":t,edgesuite:t,"edgesuite-staging":t,alwaysdata:t,myamaze:t,cloudfront:t,appudo:t,"atlassian-dev":[0,{prod:pn}],myfritz:t,shopselect:t,blackbaudcdn:t,boomla:t,bplaced:t,square7:t,cdn77:[0,{r:t}],"cdn77-ssl":t,gb:t,hu:t,jp:t,se:t,uk:t,clickrising:t,"ddns-ip":t,"dns-cloud":t,"dns-dynamic":t,cloudaccess:t,cloudflare:[2,{cdn:t}],cloudflareanycast:pn,cloudflarecn:pn,cloudflareglobal:pn,ctfcloud:t,"feste-ip":t,"knx-server":t,"static-access":t,cryptonomic:i,dattolocal:t,mydatto:t,debian:t,definima:t,deno:[2,{sandbox:t}],icp:i,de5:t,"at-band-camp":t,blogdns:t,"broke-it":t,buyshouses:t,dnsalias:t,dnsdojo:t,"does-it":t,dontexist:t,dynalias:t,dynathome:t,endofinternet:t,"from-az":t,"from-co":t,"from-la":t,"from-ny":t,"gets-it":t,"ham-radio-op":t,homeftp:t,homeip:t,homelinux:t,homeunix:t,"in-the-band":t,"is-a-chef":t,"is-a-geek":t,"isa-geek":t,"kicks-ass":t,"office-on-the":t,podzone:t,"scrapper-site":t,selfip:t,"sells-it":t,servebbs:t,serveftp:t,thruhere:t,webhop:t,casacam:t,dynu:t,dynuddns:t,mysynology:t,opik:t,spryt:t,dynv6:t,twmail:t,ru:t,channelsdvr:[2,{u:t}],fastly:[0,{freetls:t,map:t,prod:[0,{a:t,global:t}],ssl:[0,{a:t,b:t,global:t}]}],fastlylb:[2,{map:t}],"keyword-on":t,"live-on":t,"server-on":t,"cdn-edges":t,heteml:t,cloudfunctions:t,"grafana-dev":t,iobb:t,moonscale:t,"in-dsl":t,"in-vpn":t,oninferno:t,botdash:t,"apps-1and1":t,ipifony:t,cloudjiffy:[2,{"fra1-de":t,"west1-us":t}],elastx:[0,{"jls-sto1":t,"jls-sto2":t,"jls-sto3":t}],massivegrid:[0,{paas:[0,{"fr-1":t,"lon-1":t,"lon-2":t,"ny-1":t,"ny-2":t,"sg-1":t}]}],saveincloud:[0,{jelastic:t,"nordeste-idc":t}],scaleforce:Kn,kinghost:t,uni5:t,krellian:t,ggff:t,localto:i,barsy:t,luyani:t,memset:t,"azure-api":t,"azure-mobile":t,azureedge:t,azurefd:t,azurestaticapps:[2,{"1":t,"2":t,"3":t,"4":t,"5":t,"6":t,"7":t,centralus:t,eastasia:t,eastus2:t,westeurope:t,westus2:t}],azurewebsites:t,cloudapp:t,trafficmanager:t,usgovcloudapi:Mo,usgovcloudapp:t,usgovtrafficmanager:t,windows:Mo,mynetname:[0,{sn:t}],routingthecloud:t,bounceme:t,ddns:t,"eating-organic":t,mydissent:t,myeffect:t,mymediapc:t,mypsx:t,mysecuritycamera:t,nhlfan:t,"no-ip":t,pgafan:t,privatizehealthinsurance:t,redirectme:t,serveblog:t,serveminecraft:t,sytes:t,dnsup:t,hicam:t,"now-dns":t,ownip:t,vpndns:t,cloudycluster:t,ovh:[0,{hosting:i,webpaas:i}],rackmaze:t,myradweb:t,in:t,"subsc-pay":t,squares:t,schokokeks:t,"firewall-gateway":t,seidat:t,senseering:t,siteleaf:t,mafelo:t,myspreadshop:t,"vps-host":[2,{jelastic:[0,{atl:t,njs:t,ric:t}]}],srcf:[0,{soc:t,user:t}],supabase:t,dsmynas:t,familyds:t,ts:[2,{c:i}],torproject:[2,{pages:t}],tunnelmole:t,vusercontent:t,"reserve-online":t,localcert:t,"community-pro":t,meinforum:t,yandexcloud:[2,{storage:t,website:t}],za:t,zabc:t}],nf:[1,{arts:e,com:e,firm:e,info:e,net:e,other:e,per:e,rec:e,store:e,web:e}],ng:[1,{com:e,edu:e,gov:e,i:e,mil:e,mobi:e,name:e,net:e,org:e,sch:e,biz:[2,{co:t,dl:t,go:t,lg:t,on:t}],col:t,firm:t,gen:t,ltd:t,ngo:t,plc:t}],ni:[1,{ac:e,biz:e,co:e,com:e,edu:e,gob:e,in:e,info:e,int:e,mil:e,net:e,nom:e,org:e,web:e}],nl:[1,{co:t,"hosting-cluster":t,gov:t,khplay:t,"123website":t,myspreadshop:t,transurl:i,cistron:t,demon:t}],no:[1,{fhs:e,folkebibl:e,fylkesbibl:e,idrett:e,museum:e,priv:e,vgs:e,dep:e,herad:e,kommune:e,mil:e,stat:e,aa:Xt,ah:Xt,bu:Xt,fm:Xt,hl:Xt,hm:Xt,"jan-mayen":Xt,mr:Xt,nl:Xt,nt:Xt,of:Xt,ol:Xt,oslo:Xt,rl:Xt,sf:Xt,st:Xt,svalbard:Xt,tm:Xt,tr:Xt,va:Xt,vf:Xt,akrehamn:e,"xn--krehamn-dxa":e,"åkrehamn":e,algard:e,"xn--lgrd-poac":e,"ålgård":e,arna:e,bronnoysund:e,"xn--brnnysund-m8ac":e,"brønnøysund":e,brumunddal:e,bryne:e,drobak:e,"xn--drbak-wua":e,"drøbak":e,egersund:e,fetsund:e,floro:e,"xn--flor-jra":e,"florø":e,fredrikstad:e,hokksund:e,honefoss:e,"xn--hnefoss-q1a":e,"hønefoss":e,jessheim:e,jorpeland:e,"xn--jrpeland-54a":e,"jørpeland":e,kirkenes:e,kopervik:e,krokstadelva:e,langevag:e,"xn--langevg-jxa":e,"langevåg":e,leirvik:e,mjondalen:e,"xn--mjndalen-64a":e,"mjøndalen":e,"mo-i-rana":e,mosjoen:e,"xn--mosjen-eya":e,"mosjøen":e,nesoddtangen:e,orkanger:e,osoyro:e,"xn--osyro-wua":e,"osøyro":e,raholt:e,"xn--rholt-mra":e,"råholt":e,sandnessjoen:e,"xn--sandnessjen-ogb":e,"sandnessjøen":e,skedsmokorset:e,slattum:e,spjelkavik:e,stathelle:e,stavern:e,stjordalshalsen:e,"xn--stjrdalshalsen-sqb":e,"stjørdalshalsen":e,tananger:e,tranby:e,vossevangen:e,aarborte:e,aejrie:e,afjord:e,"xn--fjord-lra":e,"åfjord":e,agdenes:e,akershus:Oi,aknoluokta:e,"xn--koluokta-7ya57h":e,"ákŋoluokta":e,al:e,"xn--l-1fa":e,"ål":e,alaheadju:e,"xn--laheadju-7ya":e,"álaheadju":e,alesund:e,"xn--lesund-hua":e,"ålesund":e,alstahaug:e,alta:e,"xn--lt-liac":e,"áltá":e,alvdal:e,amli:e,"xn--mli-tla":e,"åmli":e,amot:e,"xn--mot-tla":e,"åmot":e,andasuolo:e,andebu:e,andoy:e,"xn--andy-ira":e,"andøy":e,ardal:e,"xn--rdal-poa":e,"årdal":e,aremark:e,arendal:e,"xn--s-1fa":e,"ås":e,aseral:e,"xn--seral-lra":e,"åseral":e,asker:e,askim:e,askoy:e,"xn--asky-ira":e,"askøy":e,askvoll:e,asnes:e,"xn--snes-poa":e,"åsnes":e,audnedaln:e,aukra:e,aure:e,aurland:e,"aurskog-holand":e,"xn--aurskog-hland-jnb":e,"aurskog-høland":e,austevoll:e,austrheim:e,averoy:e,"xn--avery-yua":e,"averøy":e,badaddja:e,"xn--bdddj-mrabd":e,"bådåddjå":e,"xn--brum-voa":e,"bærum":e,bahcavuotna:e,"xn--bhcavuotna-s4a":e,"báhcavuotna":e,bahccavuotna:e,"xn--bhccavuotna-k7a":e,"báhccavuotna":e,baidar:e,"xn--bidr-5nac":e,"báidár":e,bajddar:e,"xn--bjddar-pta":e,"bájddar":e,balat:e,"xn--blt-elab":e,"bálát":e,balestrand:e,ballangen:e,balsfjord:e,bamble:e,bardu:e,barum:e,batsfjord:e,"xn--btsfjord-9za":e,"båtsfjord":e,bearalvahki:e,"xn--bearalvhki-y4a":e,"bearalváhki":e,beardu:e,beiarn:e,berg:e,bergen:e,berlevag:e,"xn--berlevg-jxa":e,"berlevåg":e,bievat:e,"xn--bievt-0qa":e,"bievát":e,bindal:e,birkenes:e,bjerkreim:e,bjugn:e,bodo:e,"xn--bod-2na":e,"bodø":e,bokn:e,bomlo:e,"xn--bmlo-gra":e,"bømlo":e,bremanger:e,bronnoy:e,"xn--brnny-wuac":e,"brønnøy":e,budejju:e,buskerud:Oi,bygland:e,bykle:e,cahcesuolo:e,"xn--hcesuolo-7ya35b":e,"čáhcesuolo":e,davvenjarga:e,"xn--davvenjrga-y4a":e,"davvenjárga":e,davvesiida:e,deatnu:e,dielddanuorri:e,divtasvuodna:e,divttasvuotna:e,donna:e,"xn--dnna-gra":e,"dønna":e,dovre:e,drammen:e,drangedal:e,dyroy:e,"xn--dyry-ira":e,"dyrøy":e,eid:e,eidfjord:e,eidsberg:e,eidskog:e,eidsvoll:e,eigersund:e,elverum:e,enebakk:e,engerdal:e,etne:e,etnedal:e,evenassi:e,"xn--eveni-0qa01ga":e,"evenášši":e,evenes:e,"evje-og-hornnes":e,farsund:e,fauske:e,fedje:e,fet:e,finnoy:e,"xn--finny-yua":e,"finnøy":e,fitjar:e,fjaler:e,fjell:e,fla:e,"xn--fl-zia":e,"flå":e,flakstad:e,flatanger:e,flekkefjord:e,flesberg:e,flora:e,folldal:e,forde:e,"xn--frde-gra":e,"førde":e,forsand:e,fosnes:e,"xn--frna-woa":e,"fræna":e,frana:e,frei:e,frogn:e,froland:e,frosta:e,froya:e,"xn--frya-hra":e,"frøya":e,fuoisku:e,fuossko:e,fusa:e,fyresdal:e,gaivuotna:e,"xn--givuotna-8ya":e,"gáivuotna":e,galsa:e,"xn--gls-elac":e,"gálsá":e,gamvik:e,gangaviika:e,"xn--ggaviika-8ya47h":e,"gáŋgaviika":e,gaular:e,gausdal:e,giehtavuoatna:e,gildeskal:e,"xn--gildeskl-g0a":e,"gildeskål":e,giske:e,gjemnes:e,gjerdrum:e,gjerstad:e,gjesdal:e,gjovik:e,"xn--gjvik-wua":e,"gjøvik":e,gloppen:e,gol:e,gran:e,grane:e,granvin:e,gratangen:e,grimstad:e,grong:e,grue:e,gulen:e,guovdageaidnu:e,ha:e,"xn--h-2fa":e,"hå":e,habmer:e,"xn--hbmer-xqa":e,"hábmer":e,hadsel:e,"xn--hgebostad-g3a":e,"hægebostad":e,hagebostad:e,halden:e,halsa:e,hamar:e,hamaroy:e,hammarfeasta:e,"xn--hmmrfeasta-s4ac":e,"hámmárfeasta":e,hammerfest:e,hapmir:e,"xn--hpmir-xqa":e,"hápmir":e,haram:e,hareid:e,harstad:e,hasvik:e,hattfjelldal:e,haugesund:e,hedmark:[0,{os:e,valer:e,"xn--vler-qoa":e,"våler":e}],hemne:e,hemnes:e,hemsedal:e,hitra:e,hjartdal:e,hjelmeland:e,hobol:e,"xn--hobl-ira":e,"hobøl":e,hof:e,hol:e,hole:e,holmestrand:e,holtalen:e,"xn--holtlen-hxa":e,"holtålen":e,hordaland:[0,{os:e}],hornindal:e,horten:e,hoyanger:e,"xn--hyanger-q1a":e,"høyanger":e,hoylandet:e,"xn--hylandet-54a":e,"høylandet":e,hurdal:e,hurum:e,hvaler:e,hyllestad:e,ibestad:e,inderoy:e,"xn--indery-fya":e,"inderøy":e,iveland:e,ivgu:e,jevnaker:e,jolster:e,"xn--jlster-bya":e,"jølster":e,jondal:e,kafjord:e,"xn--kfjord-iua":e,"kåfjord":e,karasjohka:e,"xn--krjohka-hwab49j":e,"kárášjohka":e,karasjok:e,karlsoy:e,karmoy:e,"xn--karmy-yua":e,"karmøy":e,kautokeino:e,klabu:e,"xn--klbu-woa":e,"klæbu":e,klepp:e,kongsberg:e,kongsvinger:e,kraanghke:e,"xn--kranghke-b0a":e,"kråanghke":e,kragero:e,"xn--krager-gya":e,"kragerø":e,kristiansand:e,kristiansund:e,krodsherad:e,"xn--krdsherad-m8a":e,"krødsherad":e,"xn--kvfjord-nxa":e,"kvæfjord":e,"xn--kvnangen-k0a":e,"kvænangen":e,kvafjord:e,kvalsund:e,kvam:e,kvanangen:e,kvinesdal:e,kvinnherad:e,kviteseid:e,kvitsoy:e,"xn--kvitsy-fya":e,"kvitsøy":e,laakesvuemie:e,"xn--lrdal-sra":e,"lærdal":e,lahppi:e,"xn--lhppi-xqa":e,"láhppi":e,lardal:e,larvik:e,lavagis:e,lavangen:e,leangaviika:e,"xn--leagaviika-52b":e,"leaŋgaviika":e,lebesby:e,leikanger:e,leirfjord:e,leka:e,leksvik:e,lenvik:e,lerdal:e,lesja:e,levanger:e,lier:e,lierne:e,lillehammer:e,lillesand:e,lindas:e,"xn--linds-pra":e,"lindås":e,lindesnes:e,loabat:e,"xn--loabt-0qa":e,"loabát":e,lodingen:e,"xn--ldingen-q1a":e,"lødingen":e,lom:e,loppa:e,lorenskog:e,"xn--lrenskog-54a":e,"lørenskog":e,loten:e,"xn--lten-gra":e,"løten":e,lund:e,lunner:e,luroy:e,"xn--lury-ira":e,"lurøy":e,luster:e,lyngdal:e,lyngen:e,malatvuopmi:e,"xn--mlatvuopmi-s4a":e,"málatvuopmi":e,malselv:e,"xn--mlselv-iua":e,"målselv":e,malvik:e,mandal:e,marker:e,marnardal:e,masfjorden:e,masoy:e,"xn--msy-ula0h":e,"måsøy":e,"matta-varjjat":e,"xn--mtta-vrjjat-k7af":e,"mátta-várjjat":e,meland:e,meldal:e,melhus:e,meloy:e,"xn--mely-ira":e,"meløy":e,meraker:e,"xn--merker-kua":e,"meråker":e,midsund:e,"midtre-gauldal":e,moareke:e,"xn--moreke-jua":e,"moåreke":e,modalen:e,modum:e,molde:e,"more-og-romsdal":[0,{heroy:e,sande:e}],"xn--mre-og-romsdal-qqb":[0,{"xn--hery-ira":e,sande:e}],"møre-og-romsdal":[0,{"herøy":e,sande:e}],moskenes:e,moss:e,muosat:e,"xn--muost-0qa":e,"muosát":e,naamesjevuemie:e,"xn--nmesjevuemie-tcba":e,"nååmesjevuemie":e,"xn--nry-yla5g":e,"nærøy":e,namdalseid:e,namsos:e,namsskogan:e,nannestad:e,naroy:e,narviika:e,narvik:e,naustdal:e,navuotna:e,"xn--nvuotna-hwa":e,"návuotna":e,"nedre-eiker":e,nesna:e,nesodden:e,nesseby:e,nesset:e,nissedal:e,nittedal:e,"nord-aurdal":e,"nord-fron":e,"nord-odal":e,norddal:e,nordkapp:e,nordland:[0,{bo:e,"xn--b-5ga":e,"bø":e,heroy:e,"xn--hery-ira":e,"herøy":e}],"nordre-land":e,nordreisa:e,"nore-og-uvdal":e,notodden:e,notteroy:e,"xn--nttery-byae":e,"nøtterøy":e,odda:e,oksnes:e,"xn--ksnes-uua":e,"øksnes":e,omasvuotna:e,oppdal:e,oppegard:e,"xn--oppegrd-ixa":e,"oppegård":e,orkdal:e,orland:e,"xn--rland-uua":e,"ørland":e,orskog:e,"xn--rskog-uua":e,"ørskog":e,orsta:e,"xn--rsta-fra":e,"ørsta":e,osen:e,osteroy:e,"xn--ostery-fya":e,"osterøy":e,ostfold:[0,{valer:e}],"xn--stfold-9xa":[0,{"xn--vler-qoa":e}],"østfold":[0,{"våler":e}],"ostre-toten":e,"xn--stre-toten-zcb":e,"østre-toten":e,overhalla:e,"ovre-eiker":e,"xn--vre-eiker-k8a":e,"øvre-eiker":e,oyer:e,"xn--yer-zna":e,"øyer":e,oygarden:e,"xn--ygarden-p1a":e,"øygarden":e,"oystre-slidre":e,"xn--ystre-slidre-ujb":e,"øystre-slidre":e,porsanger:e,porsangu:e,"xn--porsgu-sta26f":e,"porsáŋgu":e,porsgrunn:e,rade:e,"xn--rde-ula":e,"råde":e,radoy:e,"xn--rady-ira":e,"radøy":e,"xn--rlingen-mxa":e,"rælingen":e,rahkkeravju:e,"xn--rhkkervju-01af":e,"ráhkkerávju":e,raisa:e,"xn--risa-5na":e,"ráisa":e,rakkestad:e,ralingen:e,rana:e,randaberg:e,rauma:e,rendalen:e,rennebu:e,rennesoy:e,"xn--rennesy-v1a":e,"rennesøy":e,rindal:e,ringebu:e,ringerike:e,ringsaker:e,risor:e,"xn--risr-ira":e,"risør":e,rissa:e,roan:e,rodoy:e,"xn--rdy-0nab":e,"rødøy":e,rollag:e,romsa:e,romskog:e,"xn--rmskog-bya":e,"rømskog":e,roros:e,"xn--rros-gra":e,"røros":e,rost:e,"xn--rst-0na":e,"røst":e,royken:e,"xn--ryken-vua":e,"røyken":e,royrvik:e,"xn--ryrvik-bya":e,"røyrvik":e,ruovat:e,rygge:e,salangen:e,salat:e,"xn--slat-5na":e,"sálat":e,"xn--slt-elab":e,"sálát":e,saltdal:e,samnanger:e,sandefjord:e,sandnes:e,sandoy:e,"xn--sandy-yua":e,"sandøy":e,sarpsborg:e,sauda:e,sauherad:e,sel:e,selbu:e,selje:e,seljord:e,siellak:e,sigdal:e,siljan:e,sirdal:e,skanit:e,"xn--sknit-yqa":e,"skánit":e,skanland:e,"xn--sknland-fxa":e,"skånland":e,skaun:e,skedsmo:e,ski:e,skien:e,skierva:e,"xn--skierv-uta":e,"skiervá":e,skiptvet:e,skjak:e,"xn--skjk-soa":e,"skjåk":e,skjervoy:e,"xn--skjervy-v1a":e,"skjervøy":e,skodje:e,smola:e,"xn--smla-hra":e,"smøla":e,snaase:e,"xn--snase-nra":e,"snåase":e,snasa:e,"xn--snsa-roa":e,"snåsa":e,snillfjord:e,snoasa:e,sogndal:e,sogne:e,"xn--sgne-gra":e,"søgne":e,sokndal:e,sola:e,solund:e,somna:e,"xn--smna-gra":e,"sømna":e,"sondre-land":e,"xn--sndre-land-0cb":e,"søndre-land":e,songdalen:e,"sor-aurdal":e,"xn--sr-aurdal-l8a":e,"sør-aurdal":e,"sor-fron":e,"xn--sr-fron-q1a":e,"sør-fron":e,"sor-odal":e,"xn--sr-odal-q1a":e,"sør-odal":e,"sor-varanger":e,"xn--sr-varanger-ggb":e,"sør-varanger":e,sorfold:e,"xn--srfold-bya":e,"sørfold":e,sorreisa:e,"xn--srreisa-q1a":e,"sørreisa":e,sortland:e,sorum:e,"xn--srum-gra":e,"sørum":e,spydeberg:e,stange:e,stavanger:e,steigen:e,steinkjer:e,stjordal:e,"xn--stjrdal-s1a":e,"stjørdal":e,stokke:e,"stor-elvdal":e,stord:e,stordal:e,storfjord:e,strand:e,stranda:e,stryn:e,sula:e,suldal:e,sund:e,sunndal:e,surnadal:e,sveio:e,svelvik:e,sykkylven:e,tana:e,telemark:[0,{bo:e,"xn--b-5ga":e,"bø":e}],time:e,tingvoll:e,tinn:e,tjeldsund:e,tjome:e,"xn--tjme-hra":e,"tjøme":e,tokke:e,tolga:e,tonsberg:e,"xn--tnsberg-q1a":e,"tønsberg":e,torsken:e,"xn--trna-woa":e,"træna":e,trana:e,tranoy:e,"xn--trany-yua":e,"tranøy":e,troandin:e,trogstad:e,"xn--trgstad-r1a":e,"trøgstad":e,tromsa:e,tromso:e,"xn--troms-zua":e,"tromsø":e,trondheim:e,trysil:e,tvedestrand:e,tydal:e,tynset:e,tysfjord:e,tysnes:e,"xn--tysvr-vra":e,"tysvær":e,tysvar:e,ullensaker:e,ullensvang:e,ulvik:e,unjarga:e,"xn--unjrga-rta":e,"unjárga":e,utsira:e,vaapste:e,vadso:e,"xn--vads-jra":e,"vadsø":e,"xn--vry-yla5g":e,"værøy":e,vaga:e,"xn--vg-yiab":e,"vågå":e,vagan:e,"xn--vgan-qoa":e,"vågan":e,vagsoy:e,"xn--vgsy-qoa0j":e,"vågsøy":e,vaksdal:e,valle:e,vang:e,vanylven:e,vardo:e,"xn--vard-jra":e,"vardø":e,varggat:e,"xn--vrggt-xqad":e,"várggát":e,varoy:e,vefsn:e,vega:e,vegarshei:e,"xn--vegrshei-c0a":e,"vegårshei":e,vennesla:e,verdal:e,verran:e,vestby:e,vestfold:[0,{sande:e}],vestnes:e,"vestre-slidre":e,"vestre-toten":e,vestvagoy:e,"xn--vestvgy-ixa6o":e,"vestvågøy":e,vevelstad:e,vik:e,vikna:e,vindafjord:e,voagat:e,volda:e,voss:e,co:t,"123hjemmeside":t,myspreadshop:t}],np:Ae,nr:Lr,nu:[1,{merseine:t,mine:t,shacknet:t,enterprisecloud:t}],nz:[1,{ac:e,co:e,cri:e,geek:e,gen:e,govt:e,health:e,iwi:e,kiwi:e,maori:e,"xn--mori-qsa":e,"māori":e,mil:e,net:e,org:e,parliament:e,school:e,cloudns:t}],om:[1,{co:e,com:e,edu:e,gov:e,med:e,museum:e,net:e,org:e,pro:e}],onion:e,org:[1,{altervista:t,pimienta:t,poivron:t,potager:t,sweetpepper:t,cdn77:[0,{c:t,rsc:t}],"cdn77-secure":[0,{origin:[0,{ssl:t}]}],ae:t,cloudns:t,"ip-dynamic":t,ddnss:t,dpdns:t,duckdns:t,tunk:t,blogdns:t,blogsite:t,boldlygoingnowhere:t,dnsalias:t,dnsdojo:t,doesntexist:t,dontexist:t,doomdns:t,dvrdns:t,dynalias:t,dyndns:[2,{go:t,home:t}],endofinternet:t,endoftheinternet:t,"from-me":t,"game-host":t,gotdns:t,"hobby-site":t,homedns:t,homeftp:t,homelinux:t,homeunix:t,"is-a-bruinsfan":t,"is-a-candidate":t,"is-a-celticsfan":t,"is-a-chef":t,"is-a-geek":t,"is-a-knight":t,"is-a-linux-user":t,"is-a-patsfan":t,"is-a-soxfan":t,"is-found":t,"is-lost":t,"is-saved":t,"is-very-bad":t,"is-very-evil":t,"is-very-good":t,"is-very-nice":t,"is-very-sweet":t,"isa-geek":t,"kicks-ass":t,misconfused:t,podzone:t,readmyblog:t,selfip:t,sellsyourhome:t,servebbs:t,serveftp:t,servegame:t,"stuff-4-sale":t,webhop:t,accesscam:t,camdvr:t,freeddns:t,mywire:t,roxa:t,webredirect:t,twmail:t,eu:[2,{al:t,asso:t,at:t,au:t,be:t,bg:t,ca:t,cd:t,ch:t,cn:t,cy:t,cz:t,de:t,dk:t,edu:t,ee:t,es:t,fi:t,fr:t,gr:t,hr:t,hu:t,ie:t,il:t,in:t,int:t,is:t,it:t,jp:t,kr:t,lt:t,lu:t,lv:t,me:t,mk:t,mt:t,my:t,net:t,ng:t,nl:t,no:t,nz:t,pl:t,pt:t,ro:t,ru:t,se:t,si:t,sk:t,tr:t,uk:t,us:t}],fedorainfracloud:t,fedorapeople:t,fedoraproject:[0,{cloud:t,os:Xn,stg:[0,{os:Xn}]}],freedesktop:t,hatenadiary:t,hepforge:t,"in-dsl":t,"in-vpn":t,js:t,barsy:t,mayfirst:t,routingthecloud:t,bmoattachments:t,"cable-modem":t,collegefan:t,couchpotatofries:t,hopto:t,mlbfan:t,myftp:t,mysecuritycamera:t,nflfan:t,"no-ip":t,"read-books":t,ufcfan:t,zapto:t,dynserv:t,"now-dns":t,"is-local":t,httpbin:t,pubtls:t,jpn:t,"my-firewall":t,myfirewall:t,spdns:t,"small-web":t,dsmynas:t,familyds:t,teckids:Ni,tuxfamily:t,hk:t,us:t,toolforge:t,wmcloud:[2,{beta:t}],wmflabs:t,za:t}],pa:[1,{abo:e,ac:e,com:e,edu:e,gob:e,ing:e,med:e,net:e,nom:e,org:e,sld:e}],pe:[1,{com:e,edu:e,gob:e,mil:e,net:e,nom:e,org:e}],pf:[1,{com:e,edu:e,org:e}],pg:Ae,ph:[1,{com:e,edu:e,gov:e,i:e,mil:e,net:e,ngo:e,org:e,cloudns:t}],pk:[1,{ac:e,biz:e,com:e,edu:e,fam:e,gkp:e,gob:e,gog:e,gok:e,gop:e,gos:e,gov:e,net:e,org:e,web:e}],pl:[1,{com:e,net:e,org:e,agro:e,aid:e,atm:e,auto:e,biz:e,edu:e,gmina:e,gsm:e,info:e,mail:e,media:e,miasta:e,mil:e,nieruchomosci:e,nom:e,pc:e,powiat:e,priv:e,realestate:e,rel:e,sex:e,shop:e,sklep:e,sos:e,szkola:e,targi:e,tm:e,tourism:e,travel:e,turystyka:e,gov:[1,{ap:e,griw:e,ic:e,is:e,kmpsp:e,konsulat:e,kppsp:e,kwp:e,kwpsp:e,mup:e,mw:e,oia:e,oirm:e,oke:e,oow:e,oschr:e,oum:e,pa:e,pinb:e,piw:e,po:e,pr:e,psp:e,psse:e,pup:e,rzgw:e,sa:e,sdn:e,sko:e,so:e,sr:e,starostwo:e,ug:e,ugim:e,um:e,umig:e,upow:e,uppo:e,us:e,uw:e,uzs:e,wif:e,wiih:e,winb:e,wios:e,witd:e,wiw:e,wkz:e,wsa:e,wskr:e,wsse:e,wuoz:e,wzmiuw:e,zp:e,zpisdn:e}],augustow:e,"babia-gora":e,bedzin:e,beskidy:e,bialowieza:e,bialystok:e,bielawa:e,bieszczady:e,boleslawiec:e,bydgoszcz:e,bytom:e,cieszyn:e,czeladz:e,czest:e,dlugoleka:e,elblag:e,elk:e,glogow:e,gniezno:e,gorlice:e,grajewo:e,ilawa:e,jaworzno:e,"jelenia-gora":e,jgora:e,kalisz:e,karpacz:e,kartuzy:e,kaszuby:e,katowice:e,"kazimierz-dolny":e,kepno:e,ketrzyn:e,klodzko:e,kobierzyce:e,kolobrzeg:e,konin:e,konskowola:e,kutno:e,lapy:e,lebork:e,legnica:e,lezajsk:e,limanowa:e,lomza:e,lowicz:e,lubin:e,lukow:e,malbork:e,malopolska:e,mazowsze:e,mazury:e,mielec:e,mielno:e,mragowo:e,naklo:e,nowaruda:e,nysa:e,olawa:e,olecko:e,olkusz:e,olsztyn:e,opoczno:e,opole:e,ostroda:e,ostroleka:e,ostrowiec:e,ostrowwlkp:e,pila:e,pisz:e,podhale:e,podlasie:e,polkowice:e,pomorskie:e,pomorze:e,prochowice:e,pruszkow:e,przeworsk:e,pulawy:e,radom:e,"rawa-maz":e,rybnik:e,rzeszow:e,sanok:e,sejny:e,skoczow:e,slask:e,slupsk:e,sosnowiec:e,"stalowa-wola":e,starachowice:e,stargard:e,suwalki:e,swidnica:e,swiebodzin:e,swinoujscie:e,szczecin:e,szczytno:e,tarnobrzeg:e,tgory:e,turek:e,tychy:e,ustka:e,walbrzych:e,warmia:e,warszawa:e,waw:e,wegrow:e,wielun:e,wlocl:e,wloclawek:e,wodzislaw:e,wolomin:e,wroclaw:e,zachpomor:e,zagan:e,zarow:e,zgora:e,zgorzelec:e,art:t,gliwice:t,krakow:t,poznan:t,wroc:t,zakopane:t,beep:t,"ecommerce-shop":t,cfolks:t,dfirma:t,dkonto:t,you2:t,shoparena:t,homesklep:t,sdscloud:t,unicloud:t,lodz:t,pabianice:t,plock:t,sieradz:t,skierniewice:t,zgierz:t,krasnik:t,leczna:t,lubartow:t,lublin:t,poniatowa:t,swidnik:t,co:t,torun:t,simplesite:t,myspreadshop:t,gda:t,gdansk:t,gdynia:t,med:t,sopot:t,bielsko:t}],pm:[1,{own:t,name:t}],pn:[1,{co:e,edu:e,gov:e,net:e,org:e}],post:e,pr:[1,{biz:e,com:e,edu:e,gov:e,info:e,isla:e,name:e,net:e,org:e,pro:e,ac:e,est:e,prof:e}],pro:[1,{aaa:e,aca:e,acct:e,avocat:e,bar:e,cpa:e,eng:e,jur:e,law:e,med:e,recht:e,cloudns:t,keenetic:t,barsy:t,ngrok:t}],ps:[1,{com:e,edu:e,gov:e,net:e,org:e,plo:e,sec:e}],pt:[1,{com:e,edu:e,gov:e,int:e,net:e,nome:e,org:e,publ:e,"123paginaweb":t}],pw:[1,{gov:e,cloudns:t,x443:t}],py:[1,{com:e,coop:e,edu:e,gov:e,mil:e,net:e,org:e}],qa:[1,{com:e,edu:e,gov:e,mil:e,name:e,net:e,org:e,sch:e}],re:[1,{asso:e,com:e,netlib:t,can:t}],ro:[1,{arts:e,com:e,firm:e,info:e,nom:e,nt:e,org:e,rec:e,store:e,tm:e,www:e,co:t,shop:t,barsy:t}],rs:[1,{ac:e,co:e,edu:e,gov:e,in:e,org:e,brendly:Oe,barsy:t,ox:t}],ru:[1,{ac:t,edu:t,gov:t,int:t,mil:t,eurodir:t,adygeya:t,bashkiria:t,bir:t,cbg:t,com:t,dagestan:t,grozny:t,kalmykia:t,kustanai:t,marine:t,mordovia:t,msk:t,mytis:t,nalchik:t,nov:t,pyatigorsk:t,spb:t,vladikavkaz:t,vladimir:t,na4u:t,mircloud:t,myjino:[2,{hosting:i,landing:i,spectrum:i,vps:i}],cldmail:[0,{hb:t}],mcdir:[2,{vps:t}],mcpre:t,net:t,org:t,pp:t,ras:t}],rw:[1,{ac:e,co:e,coop:e,gov:e,mil:e,net:e,org:e}],sa:[1,{com:e,edu:e,gov:e,med:e,net:e,org:e,pub:e,sch:e}],sb:n,sc:n,sd:[1,{com:e,edu:e,gov:e,info:e,med:e,net:e,org:e,tv:e}],se:[1,{a:e,ac:e,b:e,bd:e,brand:e,c:e,d:e,e,f:e,fh:e,fhsk:e,fhv:e,g:e,h:e,i:e,k:e,komforb:e,kommunalforbund:e,komvux:e,l:e,lanbib:e,m:e,n:e,naturbruksgymn:e,o:e,org:e,p:e,parti:e,pp:e,press:e,r:e,s:e,t:e,tm:e,u:e,w:e,x:e,y:e,z:e,com:t,iopsys:t,"123minsida":t,itcouldbewor:t,myspreadshop:t}],sg:[1,{com:e,edu:e,gov:e,net:e,org:e,enscaled:t}],sh:[1,{com:e,gov:e,mil:e,net:e,org:e,hashbang:t,botda:t,lovable:t,platform:[0,{ent:t,eu:t,us:t}],teleport:t,now:t}],si:[1,{f5:t,gitapp:t,gitpage:t}],sj:e,sk:[1,{org:e}],sl:n,sm:e,sn:[1,{art:e,com:e,edu:e,gouv:e,org:e,univ:e}],so:[1,{com:e,edu:e,gov:e,me:e,net:e,org:e,surveys:t}],sr:e,ss:[1,{biz:e,co:e,com:e,edu:e,gov:e,me:e,net:e,org:e,sch:e}],st:[1,{co:e,com:e,consulado:e,edu:e,embaixada:e,mil:e,net:e,org:e,principe:e,saotome:e,store:e,helioho:t,cn:i,kirara:t,noho:t}],su:[1,{abkhazia:t,adygeya:t,aktyubinsk:t,arkhangelsk:t,armenia:t,ashgabad:t,azerbaijan:t,balashov:t,bashkiria:t,bryansk:t,bukhara:t,chimkent:t,dagestan:t,"east-kazakhstan":t,exnet:t,georgia:t,grozny:t,ivanovo:t,jambyl:t,kalmykia:t,kaluga:t,karacol:t,karaganda:t,karelia:t,khakassia:t,krasnodar:t,kurgan:t,kustanai:t,lenug:t,mangyshlak:t,mordovia:t,msk:t,murmansk:t,nalchik:t,navoi:t,"north-kazakhstan":t,nov:t,obninsk:t,penza:t,pokrovsk:t,sochi:t,spb:t,tashkent:t,termez:t,togliatti:t,troitsk:t,tselinograd:t,tula:t,tuva:t,vladikavkaz:t,vladimir:t,vologda:t}],sv:[1,{com:e,edu:e,gob:e,org:e,red:e}],sx:u,sy:r,sz:[1,{ac:e,co:e,org:e}],tc:e,td:e,tel:e,tf:[1,{sch:t}],tg:e,th:[1,{ac:e,co:e,go:e,in:e,mi:e,net:e,or:e,online:t,shop:t}],tj:[1,{ac:e,biz:e,co:e,com:e,edu:e,go:e,gov:e,int:e,mil:e,name:e,net:e,nic:e,org:e,test:e,web:e}],tk:e,tl:u,tm:[1,{co:e,com:e,edu:e,gov:e,mil:e,net:e,nom:e,org:e}],tn:[1,{com:e,ens:e,fin:e,gov:e,ind:e,info:e,intl:e,mincom:e,nat:e,net:e,org:e,perso:e,tourism:e,orangecloud:t}],to:[1,{"611":t,com:e,edu:e,gov:e,mil:e,net:e,org:e,oya:t,x0:t,quickconnect:dn,vpnplus:t,nett:t}],tr:[1,{av:e,bbs:e,bel:e,biz:e,com:e,dr:e,edu:e,gen:e,gov:e,info:e,k12:e,kep:e,mil:e,name:e,net:e,org:e,pol:e,tel:e,tsk:e,tv:e,web:e,nc:u}],tt:[1,{biz:e,co:e,com:e,edu:e,gov:e,info:e,mil:e,name:e,net:e,org:e,pro:e}],tv:[1,{"better-than":t,dyndns:t,"on-the-web":t,"worse-than":t,from:t,sakura:t}],tw:[1,{club:e,com:[1,{mymailer:t}],ebiz:e,edu:e,game:e,gov:e,idv:e,mil:e,net:e,org:e,url:t,mydns:t}],tz:[1,{ac:e,co:e,go:e,hotel:e,info:e,me:e,mil:e,mobi:e,ne:e,or:e,sc:e,tv:e}],ua:[1,{com:e,edu:e,gov:e,in:e,net:e,org:e,cherkassy:e,cherkasy:e,chernigov:e,chernihiv:e,chernivtsi:e,chernovtsy:e,ck:e,cn:e,cr:e,crimea:e,cv:e,dn:e,dnepropetrovsk:e,dnipropetrovsk:e,donetsk:e,dp:e,if:e,"ivano-frankivsk":e,kh:e,kharkiv:e,kharkov:e,kherson:e,khmelnitskiy:e,khmelnytskyi:e,kiev:e,kirovograd:e,km:e,kr:e,kropyvnytskyi:e,krym:e,ks:e,kv:e,kyiv:e,lg:e,lt:e,lugansk:e,luhansk:e,lutsk:e,lv:e,lviv:e,mk:e,mykolaiv:e,nikolaev:e,od:e,odesa:e,odessa:e,pl:e,poltava:e,rivne:e,rovno:e,rv:e,sb:e,sebastopol:e,sevastopol:e,sm:e,sumy:e,te:e,ternopil:e,uz:e,uzhgorod:e,uzhhorod:e,vinnica:e,vinnytsia:e,vn:e,volyn:e,yalta:e,zakarpattia:e,zaporizhzhe:e,zaporizhzhia:e,zhitomir:e,zhytomyr:e,zp:e,zt:e,cc:t,inf:t,ltd:t,cx:t,biz:t,co:t,pp:t,v:t}],ug:[1,{ac:e,co:e,com:e,edu:e,go:e,gov:e,mil:e,ne:e,or:e,org:e,sc:e,us:e}],uk:[1,{ac:e,co:[1,{bytemark:[0,{dh:t,vm:t}],layershift:Kn,barsy:t,barsyonline:t,retrosnub:to,"nh-serv":t,"no-ip":t,adimo:t,myspreadshop:t}],gov:[1,{api:t,campaign:t,service:t}],ltd:e,me:e,net:e,nhs:e,org:[1,{glug:t,lug:t,lugs:t,affinitylottery:t,raffleentry:t,weeklylottery:t}],plc:e,police:e,sch:Ae,conn:t,copro:t,hosp:t,"independent-commission":t,"independent-inquest":t,"independent-inquiry":t,"independent-panel":t,"independent-review":t,"public-inquiry":t,"royal-commission":t,pymnt:t,barsy:t,nimsite:t,oraclegovcloudapps:i}],us:[1,{dni:e,isa:e,nsn:e,ak:oe,al:oe,ar:oe,as:oe,az:oe,ca:oe,co:oe,ct:oe,dc:oe,de:we,fl:oe,ga:oe,gu:oe,hi:Ct,ia:oe,id:oe,il:oe,in:oe,ks:oe,ky:oe,la:oe,ma:[1,{k12:[1,{chtr:e,paroch:e,pvt:e}],cc:e,lib:e}],md:oe,me:oe,mi:[1,{k12:e,cc:e,lib:e,"ann-arbor":e,cog:e,dst:e,eaton:e,gen:e,mus:e,tec:e,washtenaw:e}],mn:oe,mo:oe,ms:[1,{k12:e,cc:e}],mt:oe,nc:oe,nd:Ct,ne:oe,nh:oe,nj:oe,nm:oe,nv:oe,ny:oe,oh:oe,ok:oe,or:oe,pa:oe,pr:oe,ri:Ct,sc:oe,sd:Ct,tn:oe,tx:oe,ut:oe,va:oe,vi:oe,vt:oe,wa:oe,wi:oe,wv:we,wy:oe,cloudns:t,"is-by":t,"land-4-sale":t,"stuff-4-sale":t,heliohost:t,enscaled:[0,{phx:t}],mircloud:t,"azure-api":t,azurewebsites:t,ngo:t,golffan:t,noip:t,pointto:t,freeddns:t,srv:[2,{gh:t,gl:t}],servername:t}],uy:[1,{com:e,edu:e,gub:e,mil:e,net:e,org:e,gv:t}],uz:[1,{co:e,com:e,net:e,org:e}],va:e,vc:[1,{com:e,edu:e,gov:e,mil:e,net:e,org:e,gv:[2,{d:t}],"0e":i,mydns:t}],ve:[1,{arts:e,bib:e,co:e,com:e,e12:e,edu:e,emprende:e,firm:e,gob:e,gov:e,ia:e,info:e,int:e,mil:e,net:e,nom:e,org:e,rar:e,rec:e,store:e,tec:e,web:e}],vg:[1,{edu:e}],vi:[1,{co:e,com:e,k12:e,net:e,org:e}],vn:[1,{ac:e,ai:e,biz:e,com:e,edu:e,gov:e,health:e,id:e,info:e,int:e,io:e,name:e,net:e,org:e,pro:e,angiang:e,bacgiang:e,backan:e,baclieu:e,bacninh:e,"baria-vungtau":e,bentre:e,binhdinh:e,binhduong:e,binhphuoc:e,binhthuan:e,camau:e,cantho:e,caobang:e,daklak:e,daknong:e,danang:e,dienbien:e,dongnai:e,dongthap:e,gialai:e,hagiang:e,haiduong:e,haiphong:e,hanam:e,hanoi:e,hatinh:e,haugiang:e,hoabinh:e,hue:e,hungyen:e,khanhhoa:e,kiengiang:e,kontum:e,laichau:e,lamdong:e,langson:e,laocai:e,longan:e,namdinh:e,nghean:e,ninhbinh:e,ninhthuan:e,phutho:e,phuyen:e,quangbinh:e,quangnam:e,quangngai:e,quangninh:e,quangtri:e,soctrang:e,sonla:e,tayninh:e,thaibinh:e,thainguyen:e,thanhhoa:e,thanhphohochiminh:e,thuathienhue:e,tiengiang:e,travinh:e,tuyenquang:e,vinhlong:e,vinhphuc:e,yenbai:e}],vu:Hn,wf:[1,{biz:t,sch:t}],ws:[1,{com:e,edu:e,gov:e,net:e,org:e,advisor:i,cloud66:t,dyndns:t,mypets:t}],yt:[1,{org:t}],"xn--mgbaam7a8h":e,"امارات":e,"xn--y9a3aq":e,"հայ":e,"xn--54b7fta0cc":e,"বাংলা":e,"xn--90ae":e,"бг":e,"xn--mgbcpq6gpa1a":e,"البحرين":e,"xn--90ais":e,"бел":e,"xn--fiqs8s":e,"中国":e,"xn--fiqz9s":e,"中國":e,"xn--lgbbat1ad8j":e,"الجزائر":e,"xn--wgbh1c":e,"مصر":e,"xn--e1a4c":e,"ею":e,"xn--qxa6a":e,"ευ":e,"xn--mgbah1a3hjkrd":e,"موريتانيا":e,"xn--node":e,"გე":e,"xn--qxam":e,"ελ":e,"xn--j6w193g":[1,{"xn--gmqw5a":e,"xn--55qx5d":e,"xn--mxtq1m":e,"xn--wcvs22d":e,"xn--uc0atv":e,"xn--od0alg":e}],"香港":[1,{"個人":e,"公司":e,"政府":e,"教育":e,"組織":e,"網絡":e}],"xn--2scrj9c":e,"ಭಾರತ":e,"xn--3hcrj9c":e,"ଭାରତ":e,"xn--45br5cyl":e,"ভাৰত":e,"xn--h2breg3eve":e,"भारतम्":e,"xn--h2brj9c8c":e,"भारोत":e,"xn--mgbgu82a":e,"ڀارت":e,"xn--rvc1e0am3e":e,"ഭാരതം":e,"xn--h2brj9c":e,"भारत":e,"xn--mgbbh1a":e,"بارت":e,"xn--mgbbh1a71e":e,"بھارت":e,"xn--fpcrj9c3d":e,"భారత్":e,"xn--gecrj9c":e,"ભારત":e,"xn--s9brj9c":e,"ਭਾਰਤ":e,"xn--45brj9c":e,"ভারত":e,"xn--xkc2dl3a5ee0h":e,"இந்தியா":e,"xn--mgba3a4f16a":e,"ایران":e,"xn--mgba3a4fra":e,"ايران":e,"xn--mgbtx2b":e,"عراق":e,"xn--mgbayh7gpa":e,"الاردن":e,"xn--3e0b707e":e,"한국":e,"xn--80ao21a":e,"қаз":e,"xn--q7ce6a":e,"ລາວ":e,"xn--fzc2c9e2c":e,"ලංකා":e,"xn--xkc2al3hye2a":e,"இலங்கை":e,"xn--mgbc0a9azcg":e,"المغرب":e,"xn--d1alf":e,"мкд":e,"xn--l1acc":e,"мон":e,"xn--mix891f":e,"澳門":e,"xn--mix082f":e,"澳门":e,"xn--mgbx4cd0ab":e,"مليسيا":e,"xn--mgb9awbf":e,"عمان":e,"xn--mgbai9azgqp6j":e,"پاکستان":e,"xn--mgbai9a5eva00b":e,"پاكستان":e,"xn--ygbi2ammx":e,"فلسطين":e,"xn--90a3ac":[1,{"xn--80au":e,"xn--90azh":e,"xn--d1at":e,"xn--c1avg":e,"xn--o1ac":e,"xn--o1ach":e}],"срб":[1,{"ак":e,"обр":e,"од":e,"орг":e,"пр":e,"упр":e}],"xn--p1ai":e,"рф":e,"xn--wgbl6a":e,"قطر":e,"xn--mgberp4a5d4ar":e,"السعودية":e,"xn--mgberp4a5d4a87g":e,"السعودیة":e,"xn--mgbqly7c0a67fbc":e,"السعودیۃ":e,"xn--mgbqly7cvafr":e,"السعوديه":e,"xn--mgbpl2fh":e,"سودان":e,"xn--yfro4i67o":e,"新加坡":e,"xn--clchc0ea0b2g2a9gcd":e,"சிங்கப்பூர்":e,"xn--ogbpf8fl":e,"سورية":e,"xn--mgbtf8fl":e,"سوريا":e,"xn--o3cw4h":[1,{"xn--o3cyx2a":e,"xn--12co0c3b4eva":e,"xn--m3ch0j3a":e,"xn--h3cuzk1di":e,"xn--12c1fe0br":e,"xn--12cfi8ixb8l":e}],"ไทย":[1,{"ทหาร":e,"ธุรกิจ":e,"เน็ต":e,"รัฐบาล":e,"ศึกษา":e,"องค์กร":e}],"xn--pgbs0dh":e,"تونس":e,"xn--kpry57d":e,"台灣":e,"xn--kprw13d":e,"台湾":e,"xn--nnx388a":e,"臺灣":e,"xn--j1amh":e,"укр":e,"xn--mgb2ddes":e,"اليمن":e,xxx:e,ye:r,za:[0,{ac:e,agric:e,alt:e,co:e,edu:e,gov:e,grondar:e,law:e,mil:e,net:e,ngo:e,nic:e,nis:e,nom:e,org:e,school:e,tm:e,web:e}],zm:[1,{ac:e,biz:e,co:e,com:e,edu:e,gov:e,info:e,mil:e,net:e,org:e,sch:e}],zw:[1,{ac:e,co:e,gov:e,mil:e,org:e}],aaa:e,aarp:e,abb:e,abbott:e,abbvie:e,abc:e,able:e,abogado:e,abudhabi:e,academy:[1,{official:t}],accenture:e,accountant:e,accountants:e,aco:e,actor:e,ads:e,adult:e,aeg:e,aetna:e,afl:e,africa:e,agakhan:e,agency:e,aig:e,airbus:e,airforce:e,airtel:e,akdn:e,alibaba:e,alipay:e,allfinanz:e,allstate:e,ally:e,alsace:e,alstom:e,amazon:e,americanexpress:e,americanfamily:e,amex:e,amfam:e,amica:e,amsterdam:e,analytics:e,android:e,anquan:e,anz:e,aol:e,apartments:e,app:[1,{adaptable:t,aiven:t,beget:i,brave:o,clerk:t,clerkstage:t,cloudflare:t,wnext:t,csb:[2,{preview:t}],convex:t,corespeed:t,deta:t,ondigitalocean:t,easypanel:t,encr:[2,{frontend:t}],evervault:a,expo:[2,{on:t,staging:[2,{on:t}]}],edgecompute:t,"on-fleek":t,flutterflow:t,sprites:t,e2b:t,framer:t,gadget:t,github:t,hosted:i,run:[0,{"*":t,mtls:i}],web:t,hackclub:t,hasura:t,onhercules:t,botdash:t,shiptoday:t,leapcell:t,loginline:t,lovable:t,luyani:t,magicpatterns:t,medusajs:t,messerli:t,miren:t,mocha:t,netlify:t,ngrok:t,"ngrok-free":t,developer:i,noop:t,northflank:i,pplx:t,upsun:i,railway:[0,{up:t}],replit:c,nyat:t,snowflake:[0,{"*":t,privatelink:i}],streamlit:t,spawnbase:t,telebit:t,typedream:t,vercel:t,wal:t,wasmer:t,bookonline:t,windsurf:t,base44:t,zeabur:t,zerops:i}],apple:[1,{int:[2,{cloud:[0,{"*":t,r:[0,{"*":t,"ap-north-1":i,"ap-south-1":i,"ap-south-2":i,"eu-central-1":i,"eu-north-1":i,"us-central-1":i,"us-central-2":i,"us-east-1":i,"us-east-2":i,"us-west-1":i,"us-west-2":i,"us-west-3":i}]}]}]}],aquarelle:e,arab:e,aramco:e,archi:e,army:e,art:e,arte:e,asda:e,associates:e,athleta:e,attorney:e,auction:e,audi:e,audible:e,audio:e,auspost:e,author:e,auto:e,autos:e,aws:[1,{on:[0,{"af-south-1":p,"ap-east-1":p,"ap-northeast-1":p,"ap-northeast-2":p,"ap-northeast-3":p,"ap-south-1":p,"ap-south-2":g,"ap-southeast-1":p,"ap-southeast-2":p,"ap-southeast-3":p,"ap-southeast-4":g,"ap-southeast-5":g,"ca-central-1":p,"ca-west-1":g,"eu-central-1":p,"eu-central-2":g,"eu-north-1":p,"eu-south-1":p,"eu-south-2":g,"eu-west-1":p,"eu-west-2":p,"eu-west-3":p,"il-central-1":g,"me-central-1":g,"me-south-1":p,"sa-east-1":p,"us-east-1":p,"us-east-2":p,"us-west-1":p,"us-west-2":p,"ap-southeast-7":A,"mx-central-1":A,"us-gov-east-1":E,"us-gov-west-1":E}],sagemaker:[0,{"ap-northeast-1":D,"ap-northeast-2":D,"ap-south-1":D,"ap-southeast-1":D,"ap-southeast-2":D,"ca-central-1":q,"eu-central-1":D,"eu-west-1":D,"eu-west-2":D,"us-east-1":q,"us-east-2":q,"us-west-2":q,"af-south-1":h,"ap-east-1":h,"ap-northeast-3":h,"ap-south-2":O,"ap-southeast-3":h,"ap-southeast-4":O,"ca-west-1":[0,{notebook:t,"notebook-fips":t}],"eu-central-2":h,"eu-north-1":h,"eu-south-1":h,"eu-south-2":h,"eu-west-3":h,"il-central-1":h,"me-central-1":h,"me-south-1":h,"sa-east-1":h,"us-gov-east-1":ee,"us-gov-west-1":ee,"us-west-1":[0,{notebook:t,"notebook-fips":t,studio:t}],experiments:i}],repost:[0,{private:i}]}],axa:e,azure:e,baby:e,baidu:e,banamex:e,band:e,bank:e,bar:e,barcelona:e,barclaycard:e,barclays:e,barefoot:e,bargains:e,baseball:e,basketball:[1,{aus:t,nz:t}],bauhaus:e,bayern:e,bbc:e,bbt:e,bbva:e,bcg:e,bcn:e,beats:e,beauty:e,beer:e,berlin:e,best:e,bestbuy:e,bet:e,bharti:e,bible:e,bid:e,bike:e,bing:e,bingo:e,bio:e,black:e,blackfriday:e,blockbuster:e,blog:e,bloomberg:e,blue:e,bms:e,bmw:e,bnpparibas:e,boats:e,boehringer:e,bofa:e,bom:e,bond:e,boo:e,book:e,booking:e,bosch:e,bostik:e,boston:e,bot:e,boutique:e,box:e,bradesco:e,bridgestone:e,broadway:e,broker:e,brother:e,brussels:e,build:[1,{shiptoday:t,v0:t,windsurf:t}],builders:[1,{cloudsite:t}],business:te,buy:e,buzz:e,bzh:e,cab:e,cafe:e,cal:e,call:e,calvinklein:e,cam:e,camera:e,camp:[1,{emf:[0,{at:t}]}],canon:e,capetown:e,capital:e,capitalone:e,car:e,caravan:e,cards:e,care:e,career:e,careers:e,cars:e,casa:[1,{nabu:[0,{ui:t}]}],case:[1,{sav:t}],cash:e,casino:e,catering:e,catholic:e,cba:e,cbn:e,cbre:e,center:e,ceo:e,cern:e,cfa:e,cfd:e,chanel:e,channel:e,charity:e,chase:e,chat:e,cheap:e,chintai:e,christmas:e,chrome:e,church:e,cipriani:e,circle:e,cisco:e,citadel:e,citi:e,citic:e,city:e,claims:e,cleaning:e,click:e,clinic:e,clinique:e,clothing:e,cloud:[1,{antagonist:t,begetcdn:i,convex:dt,elementor:t,emergent:t,encoway:[0,{eu:t}],statics:i,ravendb:t,axarnet:[0,{"es-1":t}],diadem:t,jelastic:[0,{vip:t}],jele:t,"jenv-aruba":[0,{aruba:[0,{eur:[0,{it1:t}]}],it1:t}],keliweb:[2,{cs:t}],oxa:[2,{tn:t,uk:t}],primetel:[2,{uk:t}],reclaim:[0,{ca:t,uk:t,us:t}],trendhosting:[0,{ch:t,de:t}],jote:t,jotelulu:t,kuleuven:t,laravel:t,linkyard:t,magentosite:i,matlab:t,observablehq:t,perspecta:t,vapor:t,"on-rancher":i,scw:[0,{baremetal:[0,{"fr-par-1":t,"fr-par-2":t,"nl-ams-1":t}],"fr-par":[0,{cockpit:t,ddl:t,dtwh:t,fnc:[2,{functions:t}],ifr:t,k8s:qe,kafk:t,mgdb:t,rdb:t,s3:t,"s3-website":t,scbl:t,whm:t}],instances:[0,{priv:t,pub:t}],k8s:t,"nl-ams":[0,{cockpit:t,ddl:t,dtwh:t,ifr:t,k8s:qe,kafk:t,mgdb:t,rdb:t,s3:t,"s3-website":t,scbl:t,whm:t}],"pl-waw":[0,{cockpit:t,ddl:t,dtwh:t,ifr:t,k8s:qe,kafk:t,mgdb:t,rdb:t,s3:t,"s3-website":t,scbl:t}],scalebook:t,smartlabeling:t}],servebolt:t,onstackit:[0,{runs:t}],trafficplex:t,"unison-services":t,urown:t,voorloper:t,zap:t}],club:[1,{cloudns:t,jele:t,barsy:t}],clubmed:e,coach:e,codes:[1,{owo:i}],coffee:e,college:e,cologne:e,commbank:e,community:[1,{nog:t,ravendb:t,myforum:t}],company:[1,{mybox:t}],compare:e,computer:e,comsec:e,condos:e,construction:e,consulting:e,contact:e,contractors:e,cooking:e,cool:[1,{elementor:t,de:t}],corsica:e,country:e,coupon:e,coupons:e,courses:e,cpa:e,credit:e,creditcard:e,creditunion:e,cricket:e,crown:e,crs:e,cruise:e,cruises:e,cuisinella:e,cymru:e,cyou:e,dad:e,dance:e,data:e,date:e,dating:e,datsun:e,day:e,dclk:e,dds:e,deal:e,dealer:e,deals:e,degree:e,delivery:e,dell:e,deloitte:e,delta:e,democrat:e,dental:e,dentist:e,desi:e,design:[1,{graphic:t,bss:t}],dev:[1,{myaddr:t,panel:t,bearblog:t,brave:o,lcl:i,lclstage:i,stg:i,stgstage:i,pages:t,r2:t,workers:t,deno:t,"deno-staging":t,deta:t,lp:[2,{api:t,objects:t}],evervault:a,payload:t,fly:t,githubpreview:t,gateway:i,grebedoc:t,botdash:t,inbrowser:i,"is-a-good":t,iserv:t,leapcell:t,runcontainers:t,localcert:[0,{user:i}],loginline:t,barsy:t,mediatech:t,"mocha-sandbox":t,modx:t,ngrok:t,"ngrok-free":t,"is-a-fullstack":t,"is-cool":t,"is-not-a":t,localplayer:t,xmit:t,"platter-app":t,replit:[2,{archer:t,bones:t,canary:t,global:t,hacker:t,id:t,janeway:t,kim:t,kira:t,kirk:t,odo:t,paris:t,picard:t,pike:t,prerelease:t,reed:t,riker:t,sisko:t,spock:t,staging:t,sulu:t,tarpit:t,teams:t,tucker:t,wesley:t,worf:t}],crm:[0,{aa:i,ab:i,ac:i,ad:i,ae:i,af:i,ci:i,d:i,pa:i,pb:i,pc:i,pd:i,pe:i,pf:i,w:i,wa:i,wb:i,wc:i,wd:i,we:i,wf:i}],erp:ei,vercel:t,webhare:i,hrsn:t,"is-a":t}],dhl:e,diamonds:e,diet:e,digital:[1,{cloudapps:[2,{london:t}]}],direct:[1,{libp2p:t}],directory:e,discount:e,discover:e,dish:e,diy:[1,{discourse:t,imagine:t}],dnp:e,docs:e,doctor:e,dog:e,domains:e,dot:e,download:e,drive:e,dtv:e,dubai:e,dupont:e,durban:e,dvag:e,dvr:e,earth:e,eat:e,eco:e,edeka:e,education:te,email:[1,{crisp:[0,{on:t}],intouch:t,tawk:Jn,tawkto:Jn}],emerck:e,energy:e,engineer:e,engineering:e,enterprises:e,epson:e,equipment:e,ericsson:e,erni:e,esq:e,estate:[1,{compute:i}],eurovision:e,eus:[1,{party:Or}],events:[1,{koobin:t,co:t}],exchange:e,expert:e,exposed:e,express:e,extraspace:e,fage:e,fail:e,fairwinds:e,faith:e,family:e,fan:e,fans:e,farm:[1,{storj:t}],farmers:e,fashion:e,fast:e,fedex:e,feedback:e,ferrari:e,ferrero:e,fidelity:e,fido:e,film:e,final:e,finance:e,financial:te,fire:e,firestone:e,firmdale:e,fish:e,fishing:e,fit:e,fitness:e,flickr:e,flights:e,flir:e,florist:e,flowers:e,fly:e,foo:e,food:e,football:e,ford:e,forex:e,forsale:e,forum:e,foundation:e,fox:e,free:e,fresenius:e,frl:e,frogans:e,frontier:e,ftr:e,fujitsu:e,fun:_r,fund:e,furniture:e,futbol:e,fyi:e,gal:e,gallery:e,gallo:e,gallup:e,game:e,games:[1,{pley:t,sheezy:t}],gap:e,garden:e,gay:[1,{pages:t}],gbiz:e,gdn:[1,{cnpy:t}],gea:e,gent:e,genting:e,george:e,ggee:e,gift:e,gifts:e,gives:e,giving:e,glass:e,gle:e,global:[1,{appwrite:t}],globo:e,gmail:e,gmbh:e,gmo:e,gmx:e,godaddy:e,gold:e,goldpoint:e,golf:e,goodyear:e,goog:[1,{cloud:t,translate:t,usercontent:i}],google:e,gop:e,got:e,grainger:e,graphics:e,gratis:e,green:e,gripe:e,grocery:e,group:[1,{discourse:t}],gucci:e,guge:e,guide:e,guitars:e,guru:e,hair:e,hamburg:e,hangout:e,haus:e,hbo:e,hdfc:e,hdfcbank:e,health:[1,{hra:t}],healthcare:e,help:e,helsinki:e,here:e,hermes:e,hiphop:e,hisamitsu:e,hitachi:e,hiv:e,hkt:e,hockey:e,holdings:e,holiday:e,homedepot:e,homegoods:e,homes:e,homesense:e,honda:e,horse:e,hospital:e,host:[1,{cloudaccess:t,freesite:t,easypanel:t,emergent:t,fastvps:t,myfast:t,gadget:t,tempurl:t,wpmudev:t,iserv:t,jele:t,mircloud:t,bolt:t,wp2:t,half:t}],hosting:[1,{opencraft:t}],hot:e,hotel:e,hotels:e,hotmail:e,house:e,how:e,hsbc:e,hughes:e,hyatt:e,hyundai:e,ibm:e,icbc:e,ice:e,icu:e,ieee:e,ifm:e,ikano:e,imamat:e,imdb:e,immo:e,immobilien:e,inc:e,industries:e,infiniti:e,ing:e,ink:e,institute:e,insurance:e,insure:e,international:e,intuit:e,investments:e,ipiranga:e,irish:e,ismaili:e,ist:e,istanbul:e,itau:e,itv:e,jaguar:e,java:e,jcb:e,jeep:e,jetzt:e,jewelry:e,jio:e,jll:e,jmp:e,jnj:e,joburg:e,jot:e,joy:e,jpmorgan:e,jprs:e,juegos:e,juniper:e,kaufen:e,kddi:e,kerryhotels:e,kerryproperties:e,kfh:e,kia:e,kids:e,kim:e,kindle:e,kitchen:e,kiwi:e,koeln:e,komatsu:e,kosher:e,kpmg:e,kpn:e,krd:[1,{co:t,edu:t}],kred:e,kuokgroup:e,kyoto:e,lacaixa:e,lamborghini:e,lamer:e,land:e,landrover:e,lanxess:e,lasalle:e,lat:e,latino:e,latrobe:e,law:e,lawyer:e,lds:e,lease:e,leclerc:e,lefrak:e,legal:e,lego:e,lexus:e,lgbt:e,lidl:e,life:e,lifeinsurance:e,lifestyle:e,lighting:e,like:e,lilly:e,limited:e,limo:e,lincoln:e,link:[1,{myfritz:t,cyon:t,joinmc:t,dweb:i,inbrowser:i,keenetic:t,nftstorage:bi,mypep:t,storacha:bi,w3s:bi}],live:[1,{aem:t,hlx:t,ewp:i}],living:e,llc:e,llp:e,loan:e,loans:e,locker:e,locus:e,lol:[1,{omg:t}],london:e,lotte:e,lotto:e,love:e,lpl:e,lplfinancial:e,ltd:e,ltda:e,lundbeck:e,luxe:e,luxury:e,madrid:e,maif:e,maison:e,makeup:e,man:e,management:e,mango:e,map:e,market:e,marketing:e,markets:e,marriott:e,marshalls:e,mattel:e,mba:e,mckinsey:e,med:e,media:Pi,meet:e,melbourne:e,meme:e,memorial:e,men:e,menu:[1,{barsy:t,barsyonline:t}],merck:e,merckmsd:e,miami:e,microsoft:e,mini:e,mint:e,mit:e,mitsubishi:e,mlb:e,mls:e,mma:e,mobile:e,moda:e,moe:e,moi:e,mom:e,monash:e,money:e,monster:e,mormon:e,mortgage:e,moscow:e,moto:e,motorcycles:e,mov:e,movie:e,msd:e,mtn:e,mtr:e,music:e,nab:e,nagoya:e,navy:e,nba:e,nec:e,netbank:e,netflix:e,network:[1,{aem:t,alces:i,appwrite:t,co:t,arvo:t,azimuth:t,tlon:t}],neustar:e,new:e,news:[1,{noticeable:t}],next:e,nextdirect:e,nexus:e,nfl:e,ngo:e,nhk:e,nico:e,nike:e,nikon:e,ninja:e,nissan:e,nissay:e,nokia:e,norton:e,now:e,nowruz:e,nowtv:e,nra:e,nrw:e,ntt:e,nyc:e,obi:e,observer:e,office:e,okinawa:e,olayan:e,olayangroup:e,ollo:e,omega:e,one:[1,{kin:i,service:t,website:t}],ong:e,onl:e,online:[1,{eero:t,"eero-stage":t,websitebuilder:t,leapcell:t,barsy:t}],ooo:e,open:e,oracle:e,orange:[1,{tech:t}],organic:e,origins:e,osaka:e,otsuka:e,ott:e,ovh:[1,{nerdpol:t}],page:[1,{aem:t,hlx:t,codeberg:t,deuxfleurs:t,mybox:t,heyflow:t,prvcy:t,rocky:t,statichost:t,pdns:t,plesk:t}],panasonic:e,paris:e,pars:e,partners:e,parts:e,party:e,pay:e,pccw:e,pet:e,pfizer:e,pharmacy:e,phd:e,philips:e,phone:e,photo:e,photography:e,photos:Pi,physio:e,pics:e,pictet:e,pictures:[1,{"1337":t}],pid:e,pin:e,ping:e,pink:e,pioneer:e,pizza:[1,{ngrok:t}],place:te,play:e,playstation:e,plumbing:e,plus:[1,{playit:[2,{at:i,with:t}]}],pnc:e,pohl:e,poker:e,politie:e,porn:e,praxi:e,press:e,prime:e,prod:e,productions:e,prof:e,progressive:e,promo:e,properties:e,property:e,protection:e,pru:e,prudential:e,pub:[1,{id:i,kin:i,barsy:t}],pwc:e,qpon:e,quebec:e,quest:e,racing:e,radio:e,read:e,realestate:e,realtor:e,realty:e,recipes:e,red:e,redumbrella:e,rehab:e,reise:e,reisen:e,reit:e,reliance:e,ren:e,rent:e,rentals:e,repair:e,report:e,republican:e,rest:e,restaurant:e,review:e,reviews:[1,{aem:t}],rexroth:e,rich:e,richardli:e,ricoh:e,ril:e,rio:e,rip:[1,{clan:t}],rocks:[1,{myddns:t,stackit:t,"lima-city":t,webspace:t}],rodeo:e,rogers:e,room:e,rsvp:e,rugby:e,ruhr:e,run:[1,{appwrite:i,canva:t,development:t,ravendb:t,liara:[2,{iran:t}],lovable:t,needle:t,build:i,code:i,database:i,migration:i,onporter:t,repl:t,stackit:t,val:ei,vercel:t,wix:t}],rwe:e,ryukyu:e,saarland:e,safe:e,safety:e,sakura:e,sale:e,salon:e,samsclub:e,samsung:e,sandvik:e,sandvikcoromant:e,sanofi:e,sap:e,sarl:e,sas:e,save:e,saxo:e,sbi:e,sbs:e,scb:e,schaeffler:e,schmidt:e,scholarships:e,school:e,schule:e,schwarz:e,science:e,scot:[1,{co:t,me:t,org:t,gov:[2,{service:t}]}],search:e,seat:e,secure:e,security:e,seek:e,select:e,sener:e,services:[1,{loginline:t}],seven:e,sew:e,sex:e,sexy:e,sfr:e,shangrila:e,sharp:e,shell:e,shia:e,shiksha:e,shoes:e,shop:[1,{base:t,hoplix:t,barsy:t,barsyonline:t,shopware:t}],shopping:e,shouji:e,show:_r,silk:e,sina:e,singles:e,site:[1,{square:t,canva:it,cloudera:i,convex:dt,cyon:t,caffeine:t,fastvps:t,figma:t,"figma-gov":t,preview:t,heyflow:t,jele:t,jouwweb:t,loginline:t,barsy:t,co:t,notion:t,omniwe:t,opensocial:t,madethis:t,support:t,platformsh:i,tst:i,byen:t,sol:t,srht:t,novecore:t,cpanel:t,wpsquared:t,sourcecraft:t}],ski:e,skin:e,sky:e,skype:e,sling:e,smart:e,smile:e,sncf:e,soccer:e,social:e,softbank:e,software:e,sohu:e,solar:e,solutions:e,song:e,sony:e,soy:e,spa:e,space:[1,{myfast:t,heiyu:t,hf:[2,{static:t}],"app-ionos":t,project:t,uber:t,xs4all:t}],sport:e,spot:e,srl:e,stada:e,staples:e,star:e,statebank:e,statefarm:e,stc:e,stcgroup:e,stockholm:e,storage:e,store:[1,{barsy:t,sellfy:t,shopware:t,storebase:t}],stream:e,studio:e,study:e,style:e,sucks:e,supplies:e,supply:e,support:[1,{barsy:t}],surf:e,surgery:e,suzuki:e,swatch:e,swiss:e,sydney:e,systems:[1,{knightpoint:t,miren:t}],tab:e,taipei:e,talk:e,taobao:e,target:e,tatamotors:e,tatar:e,tattoo:e,tax:e,taxi:e,tci:e,tdk:e,team:[1,{discourse:t,jelastic:t}],tech:[1,{cleverapps:t}],technology:te,temasek:e,tennis:e,teva:e,thd:e,theater:e,theatre:e,tiaa:e,tickets:e,tienda:e,tips:e,tires:e,tirol:e,tjmaxx:e,tjx:e,tkmaxx:e,tmall:e,today:[1,{prequalifyme:t}],tokyo:e,tools:[1,{addr:yi,myaddr:t}],top:[1,{ntdll:t,wadl:i}],toray:e,toshiba:e,total:e,tours:e,town:e,toyota:e,toys:e,trade:e,trading:e,training:e,travel:e,travelers:e,travelersinsurance:e,trust:e,trv:e,tube:e,tui:e,tunes:e,tushu:e,tvs:e,ubank:e,ubs:e,unicom:e,university:e,uno:e,uol:e,ups:e,vacations:e,vana:e,vanguard:e,vegas:e,ventures:e,verisign:e,versicherung:e,vet:e,viajes:e,video:e,vig:e,viking:e,villas:e,vin:e,vip:[1,{hidns:t}],virgin:e,visa:e,vision:e,viva:e,vivo:e,vlaanderen:e,vodka:e,volvo:e,vote:e,voting:e,voto:e,voyage:e,wales:e,walmart:e,walter:e,wang:e,wanggou:e,watch:e,watches:e,weather:e,weatherchannel:e,webcam:e,weber:e,website:Pi,wed:e,wedding:e,weibo:e,weir:e,whoswho:e,wien:e,wiki:Pi,williamhill:e,win:e,windows:e,wine:e,winners:e,wme:e,woodside:e,work:[1,{"imagine-proxy":t}],works:e,world:e,wow:e,wtc:e,wtf:e,xbox:e,xerox:e,xihuan:e,xin:e,"xn--11b4c3d":e,"कॉम":e,"xn--1ck2e1b":e,"セール":e,"xn--1qqw23a":e,"佛山":e,"xn--30rr7y":e,"慈善":e,"xn--3bst00m":e,"集团":e,"xn--3ds443g":e,"在线":e,"xn--3pxu8k":e,"点看":e,"xn--42c2d9a":e,"คอม":e,"xn--45q11c":e,"八卦":e,"xn--4gbrim":e,"موقع":e,"xn--55qw42g":e,"公益":e,"xn--55qx5d":e,"公司":e,"xn--5su34j936bgsg":e,"香格里拉":e,"xn--5tzm5g":e,"网站":e,"xn--6frz82g":e,"移动":e,"xn--6qq986b3xl":e,"我爱你":e,"xn--80adxhks":e,"москва":e,"xn--80aqecdr1a":e,"католик":e,"xn--80asehdb":e,"онлайн":e,"xn--80aswg":e,"сайт":e,"xn--8y0a063a":e,"联通":e,"xn--9dbq2a":e,"קום":e,"xn--9et52u":e,"时尚":e,"xn--9krt00a":e,"微博":e,"xn--b4w605ferd":e,"淡马锡":e,"xn--bck1b9a5dre4c":e,"ファッション":e,"xn--c1avg":e,"орг":e,"xn--c2br7g":e,"नेट":e,"xn--cck2b3b":e,"ストア":e,"xn--cckwcxetd":e,"アマゾン":e,"xn--cg4bki":e,"삼성":e,"xn--czr694b":e,"商标":e,"xn--czrs0t":e,"商店":e,"xn--czru2d":e,"商城":e,"xn--d1acj3b":e,"дети":e,"xn--eckvdtc9d":e,"ポイント":e,"xn--efvy88h":e,"新闻":e,"xn--fct429k":e,"家電":e,"xn--fhbei":e,"كوم":e,"xn--fiq228c5hs":e,"中文网":e,"xn--fiq64b":e,"中信":e,"xn--fjq720a":e,"娱乐":e,"xn--flw351e":e,"谷歌":e,"xn--fzys8d69uvgm":e,"電訊盈科":e,"xn--g2xx48c":e,"购物":e,"xn--gckr3f0f":e,"クラウド":e,"xn--gk3at1e":e,"通販":e,"xn--hxt814e":e,"网店":e,"xn--i1b6b1a6a2e":e,"संगठन":e,"xn--imr513n":e,"餐厅":e,"xn--io0a7i":e,"网络":e,"xn--j1aef":e,"ком":e,"xn--jlq480n2rg":e,"亚马逊":e,"xn--jvr189m":e,"食品":e,"xn--kcrx77d1x4a":e,"飞利浦":e,"xn--kput3i":e,"手机":e,"xn--mgba3a3ejt":e,"ارامكو":e,"xn--mgba7c0bbn0a":e,"العليان":e,"xn--mgbab2bd":e,"بازار":e,"xn--mgbca7dzdo":e,"ابوظبي":e,"xn--mgbi4ecexp":e,"كاثوليك":e,"xn--mgbt3dhd":e,"همراه":e,"xn--mk1bu44c":e,"닷컴":e,"xn--mxtq1m":e,"政府":e,"xn--ngbc5azd":e,"شبكة":e,"xn--ngbe9e0a":e,"بيتك":e,"xn--ngbrx":e,"عرب":e,"xn--nqv7f":e,"机构":e,"xn--nqv7fs00ema":e,"组织机构":e,"xn--nyqy26a":e,"健康":e,"xn--otu796d":e,"招聘":e,"xn--p1acf":[1,{"xn--90amc":t,"xn--j1aef":t,"xn--j1ael8b":t,"xn--h1ahn":t,"xn--j1adp":t,"xn--c1avg":t,"xn--80aaa0cvac":t,"xn--h1aliz":t,"xn--90a1af":t,"xn--41a":t}],"рус":[1,{"биз":t,"ком":t,"крым":t,"мир":t,"мск":t,"орг":t,"самара":t,"сочи":t,"спб":t,"я":t}],"xn--pssy2u":e,"大拿":e,"xn--q9jyb4c":e,"みんな":e,"xn--qcka1pmc":e,"グーグル":e,"xn--rhqv96g":e,"世界":e,"xn--rovu88b":e,"書籍":e,"xn--ses554g":e,"网址":e,"xn--t60b56a":e,"닷넷":e,"xn--tckwe":e,"コム":e,"xn--tiq49xqyj":e,"天主教":e,"xn--unup4y":e,"游戏":e,"xn--vermgensberater-ctb":e,"vermögensberater":e,"xn--vermgensberatung-pwb":e,"vermögensberatung":e,"xn--vhquv":e,"企业":e,"xn--vuq861b":e,"信息":e,"xn--w4r85el8fhu5dnra":e,"嘉里大酒店":e,"xn--w4rs40l":e,"嘉里":e,"xn--xhq521b":e,"广东":e,"xn--zfr164b":e,"政务":e,xyz:[1,{caffeine:t,exe:t,botdash:t,telebit:i}],yachts:e,yahoo:e,yamaxun:e,yandex:e,yodobashi:e,yoga:e,yokohama:e,you:e,youtube:e,yun:e,zappos:e,zara:e,zero:e,zip:e,zone:[1,{stackit:t,lima:t,triton:i}],zuerich:e}]}();var mit=y1e();var b1e="seq_pk_";var C1e=32,xit=b1e.length+C1e;var bn;(function(e){e[e.AM=0]="AM",e[e.PM=1]="PM"})(bn||(bn={}));var nr;(function(e){e[e.SUNDAY=0]="SUNDAY",e[e.MONDAY=1]="MONDAY",e[e.TUESDAY=2]="TUESDAY",e[e.WEDNESDAY=3]="WEDNESDAY",e[e.THURSDAY=4]="THURSDAY",e[e.FRIDAY=5]="FRIDAY",e[e.SATURDAY=6]="SATURDAY"})(nr||(nr={}));var da;(function(e){e[e.JANUARY=1]="JANUARY",e[e.FEBRUARY=2]="FEBRUARY",e[e.MARCH=3]="MARCH",e[e.APRIL=4]="APRIL",e[e.MAY=5]="MAY",e[e.JUNE=6]="JUNE",e[e.JULY=7]="JULY",e[e.AUGUST=8]="AUGUST",e[e.SEPTEMBER=9]="SEPTEMBER",e[e.OCTOBER=10]="OCTOBER",e[e.NOVEMBER=11]="NOVEMBER",e[e.DECEMBER=12]="DECEMBER"})(da||(da={}));function fs(e,t){e.assign("day",t.getDate()),e.assign("month",t.getMonth()+1),e.assign("year",t.getFullYear())}function fy(e,t){e.assign("hour",t.getHours()),e.assign("minute",t.getMinutes()),e.assign("second",t.getSeconds()),e.assign("millisecond",t.getMilliseconds()),e.assign("meridiem",t.getHours()<12?bn.AM:bn.PM)}function Zl(e,t){e.imply("day",t.getDate()),e.imply("month",t.getMonth()+1),e.imply("year",t.getFullYear())}function Sg(e,t){e.imply("hour",t.getHours()),e.imply("minute",t.getMinutes()),e.imply("second",t.getSeconds()),e.imply("millisecond",t.getMilliseconds()),e.imply("meridiem",t.getHours()<12?bn.AM:bn.PM)}var S1e={ACDT:630,ACST:570,ADT:-180,AEDT:660,AEST:600,AFT:270,AKDT:-480,AKST:-540,ALMT:360,AMST:-180,AMT:-240,ANAST:720,ANAT:720,AQTT:300,ART:-180,AST:-240,AWDT:540,AWST:480,AZOST:0,AZOT:-60,AZST:300,AZT:240,BNT:480,BOT:-240,BRST:-120,BRT:-180,BST:60,BTT:360,CAST:480,CAT:120,CCT:390,CDT:-300,CEST:120,CET:{timezoneOffsetDuringDst:120,timezoneOffsetNonDst:60,dstStart:(e)=>r$(e,da.MARCH,nr.SUNDAY,2),dstEnd:(e)=>r$(e,da.OCTOBER,nr.SUNDAY,3)},CHADT:825,CHAST:765,CKT:-600,CLST:-180,CLT:-240,COT:-300,CST:-360,CT:{timezoneOffsetDuringDst:-300,timezoneOffsetNonDst:-360,dstStart:(e)=>tu(e,da.MARCH,nr.SUNDAY,2,2),dstEnd:(e)=>tu(e,da.NOVEMBER,nr.SUNDAY,1,2)},CVT:-60,CXT:420,ChST:600,DAVT:420,EASST:-300,EAST:-360,EAT:180,ECT:-300,EDT:-240,EEST:180,EET:120,EGST:0,EGT:-60,EST:-300,ET:{timezoneOffsetDuringDst:-240,timezoneOffsetNonDst:-300,dstStart:(e)=>tu(e,da.MARCH,nr.SUNDAY,2,2),dstEnd:(e)=>tu(e,da.NOVEMBER,nr.SUNDAY,1,2)},FJST:780,FJT:720,FKST:-180,FKT:-240,FNT:-120,GALT:-360,GAMT:-540,GET:240,GFT:-180,GILT:720,GMT:0,GST:240,GYT:-240,HAA:-180,HAC:-300,HADT:-540,HAE:-240,HAP:-420,HAR:-360,HAST:-600,HAT:-90,HAY:-480,HKT:480,HLV:-210,HNA:-240,HNC:-360,HNE:-300,HNP:-480,HNR:-420,HNT:-150,HNY:-540,HOVT:420,ICT:420,IDT:180,IOT:360,IRDT:270,IRKST:540,IRKT:540,IRST:210,IST:330,JST:540,KGT:360,KRAST:480,KRAT:480,KST:540,KUYT:240,LHDT:660,LHST:630,LINT:840,MAGST:720,MAGT:720,MART:-510,MAWT:300,MDT:-360,MESZ:120,MEZ:60,MHT:720,MMT:390,MSD:240,MSK:180,MST:-420,MT:{timezoneOffsetDuringDst:-360,timezoneOffsetNonDst:-420,dstStart:(e)=>tu(e,da.MARCH,nr.SUNDAY,2,2),dstEnd:(e)=>tu(e,da.NOVEMBER,nr.SUNDAY,1,2)},MUT:240,MVT:300,MYT:480,NCT:660,NDT:-90,NFT:690,NOVST:420,NOVT:360,NPT:345,NST:-150,NUT:-660,NZDT:780,NZST:720,OMSST:420,OMST:420,PDT:-420,PET:-300,PETST:720,PETT:720,PGT:600,PHOT:780,PHT:480,PKT:300,PMDT:-120,PMST:-180,PONT:660,PST:-480,PT:{timezoneOffsetDuringDst:-420,timezoneOffsetNonDst:-480,dstStart:(e)=>tu(e,da.MARCH,nr.SUNDAY,2,2),dstEnd:(e)=>tu(e,da.NOVEMBER,nr.SUNDAY,1,2)},PWT:540,PYST:-180,PYT:-240,RET:240,SAMT:240,SAST:120,SBT:660,SCT:240,SGT:480,SRT:-180,SST:-660,TAHT:-600,TFT:300,TJT:300,TKT:780,TLT:540,TMT:300,TVT:720,ULAT:480,UTC:0,UYST:-120,UYT:-180,UZT:300,VET:-210,VLAST:660,VLAT:660,VUT:660,WAST:120,WAT:60,WEST:60,WESZ:60,WET:0,WEZ:0,WFT:720,WGST:-120,WGT:-180,WIB:420,WIT:540,WITA:480,WST:780,WT:0,YAKST:600,YAKT:600,YAPT:600,YEKST:360,YEKT:360};function tu(e,t,n,r,i=0){let o=0,a=0;while(a<r)if(o++,new Date(e,t-1,o).getDay()===n)a++;return new Date(e,t-1,o,i)}function r$(e,t,n,r=0){let i=n===0?7:n,o=new Date(e,t-1+1,1,12),a=o.getDay()===0?7:o.getDay(),c;if(a===i)c=7;else if(a<i)c=7+a-i;else c=a-i;return o.setDate(o.getDate()-c),new Date(e,t-1,o.getDate(),r)}function gy(e,t,n={}){if(e==null)return null;if(typeof e==="number")return e;let r=n[e]??S1e[e];if(r==null)return null;if(typeof r=="number")return r;if(t==null)return null;if(t>r.dstStart(t.getFullYear())&&!(t>r.dstEnd(t.getFullYear())))return r.timezoneOffsetDuringDst;return r.timezoneOffsetNonDst}var i$={day:0,second:0,millisecond:0};function Ti(e,t){let n=new Date(e);if(t.y)t.year=t.y,delete t.y;if(t.mo)t.month=t.mo,delete t.mo;if(t.M)t.month=t.M,delete t.M;if(t.w)t.week=t.w,delete t.w;if(t.d)t.day=t.d,delete t.d;if(t.h)t.hour=t.h,delete t.h;if(t.m)t.minute=t.m,delete t.m;if(t.s)t.second=t.s,delete t.s;if(t.ms)t.millisecond=t.ms,delete t.ms;if("year"in t){let r=Math.floor(t.year);n.setFullYear(n.getFullYear()+r);let i=t.year-r;if(i>0)t.month=t?.month??0,t.month+=i*12}if("quarter"in t){let r=Math.floor(t.quarter);n.setMonth(n.getMonth()+r*3)}if("month"in t){let r=Math.floor(t.month);n.setMonth(n.getMonth()+r);let i=t.month-r;if(i>0)t.week=t?.week??0,t.week+=i*4}if("week"in t){let r=Math.floor(t.week);n.setDate(n.getDate()+r*7);let i=t.week-r;if(i>0)t.day=t?.day??0,t.day+=Math.round(i*7)}if("day"in t){let r=Math.floor(t.day);n.setDate(n.getDate()+r);let i=t.day-r;if(i>0)t.hour=t?.hour??0,t.hour+=Math.round(i*24)}if("hour"in t){let r=Math.floor(t.hour);n.setHours(n.getHours()+r);let i=t.hour-r;if(i>0)t.minute=t?.minute??0,t.minute+=Math.round(i*60)}if("minute"in t){let r=Math.floor(t.minute);n.setMinutes(n.getMinutes()+r);let i=t.minute-r;if(i>0)t.second=t?.second??0,t.second+=Math.round(i*60)}if("second"in t){let r=Math.floor(t.second);n.setSeconds(n.getSeconds()+r);let i=t.second-r;if(i>0)t.millisecond=t?.millisecond??0,t.millisecond+=Math.round(i*1000)}if("millisecond"in t){let r=Math.floor(t.millisecond);n.setMilliseconds(n.getMilliseconds()+r)}return n}function nu(e){let t={};for(let n in e)t[n]=-e[n];return t}class cl{instant;timezoneOffset;constructor(e,t){this.instant=e??new Date,this.timezoneOffset=t??null}static fromDate(e){return new cl(e)}static fromInput(e,t){if(e instanceof Date)return cl.fromDate(e);let n=e?.instant??new Date,r=gy(e?.timezone,n,t);return new cl(n,r)}getDateWithAdjustedTimezone(){let e=new Date(this.instant);if(this.timezoneOffset!==null)e.setMinutes(e.getMinutes()-this.getSystemTimezoneAdjustmentMinute(this.instant));return e}getSystemTimezoneAdjustmentMinute(e,t){if(!e||e.getTime()<0)e=new Date;let n=-e.getTimezoneOffset(),r=t??this.timezoneOffset??n;return n-r}getTimezoneOffset(){return this.timezoneOffset??-this.instant.getTimezoneOffset()}}class Sn{knownValues;impliedValues;reference;_tags=new Set;constructor(e,t){if(this.reference=e,this.knownValues={},this.impliedValues={},t)for(let r in t)this.knownValues[r]=t[r];let n=e.getDateWithAdjustedTimezone();this.imply("day",n.getDate()),this.imply("month",n.getMonth()+1),this.imply("year",n.getFullYear()),this.imply("hour",12),this.imply("minute",0),this.imply("second",0),this.imply("millisecond",0)}static createRelativeFromReference(e,t=i$){let n=Ti(e.getDateWithAdjustedTimezone(),t),r=new Sn(e);if(r.addTag("result/relativeDate"),"hour"in t||"minute"in t||"second"in t||"millisecond"in t)r.addTag("result/relativeDateAndTime"),fy(r,n),fs(r,n),r.assign("timezoneOffset",e.getTimezoneOffset());else if(Sg(r,n),r.imply("timezoneOffset",e.getTimezoneOffset()),"day"in t)r.assign("day",n.getDate()),r.assign("month",n.getMonth()+1),r.assign("year",n.getFullYear()),r.assign("weekday",n.getDay());else if("week"in t)r.assign("day",n.getDate()),r.assign("month",n.getMonth()+1),r.assign("year",n.getFullYear()),r.imply("weekday",n.getDay());else if(r.imply("day",n.getDate()),"month"in t)r.assign("month",n.getMonth()+1),r.assign("year",n.getFullYear());else if(r.imply("month",n.getMonth()+1),"year"in t)r.assign("year",n.getFullYear());else r.imply("year",n.getFullYear());return r}get(e){if(e in this.knownValues)return this.knownValues[e];if(e in this.impliedValues)return this.impliedValues[e];return null}isCertain(e){return e in this.knownValues}getCertainComponents(){return Object.keys(this.knownValues)}imply(e,t){if(e in this.knownValues)return this;return this.impliedValues[e]=t,this}assign(e,t){return this.knownValues[e]=t,delete this.impliedValues[e],this}addDurationAsImplied(e){let t=this.dateWithoutTimezoneAdjustment(),n=Ti(t,e);if("day"in e||"week"in e||"month"in e||"year"in e)this.delete(["day","weekday","month","year"]),this.imply("day",n.getDate()),this.imply("weekday",n.getDay()),this.imply("month",n.getMonth()+1),this.imply("year",n.getFullYear());if("second"in e||"minute"in e||"hour"in e)this.delete(["second","minute","hour"]),this.imply("second",n.getSeconds()),this.imply("minute",n.getMinutes()),this.imply("hour",n.getHours());return this}delete(e){if(typeof e==="string")e=[e];for(let t of e)delete this.knownValues[t],delete this.impliedValues[t]}clone(){let e=new Sn(this.reference);e.knownValues={},e.impliedValues={};for(let t in this.knownValues)e.knownValues[t]=this.knownValues[t];for(let t in this.impliedValues)e.impliedValues[t]=this.impliedValues[t];return e}isOnlyDate(){return!this.isCertain("hour")&&!this.isCertain("minute")&&!this.isCertain("second")}isOnlyTime(){return!this.isCertain("weekday")&&!this.isCertain("day")&&!this.isCertain("month")&&!this.isCertain("year")}isOnlyWeekdayComponent(){return this.isCertain("weekday")&&!this.isCertain("day")&&!this.isCertain("month")}isDateWithUnknownYear(){return this.isCertain("month")&&!this.isCertain("year")}isValidDate(){let e=this.dateWithoutTimezoneAdjustment();if(e.getFullYear()!==this.get("year"))return!1;if(e.getMonth()!==this.get("month")-1)return!1;if(e.getDate()!==this.get("day"))return!1;if(this.get("hour")!=null&&e.getHours()!=this.get("hour"))return!1;if(this.get("minute")!=null&&e.getMinutes()!=this.get("minute"))return!1;return!0}toString(){return`[ParsingComponents {
265
265
  tags: ${JSON.stringify(Array.from(this._tags).sort())},
@@ -346,7 +346,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
346
346
  `||r==="\r")&&!t)return e.slice(0,n)}return e}function _8e(e,t){let n=[],r=[],i="",o=!1,a=()=>{r.push(i.trim()),i=""},c=()=>{if(a(),!S8e(r))n.push(r);r=[]};for(let u=0;u<e.length;u++){let p=e[u];if(p==='"'){if(o&&e[u+1]==='"')i+='"',u++;else o=!o;continue}if(p===t&&!o){a();continue}if((p===`
347
347
  `||p==="\r")&&!o){if(p==="\r"&&e[u+1]===`
348
348
  `)u++;c();continue}i+=p}return c(),n}function Zj(e){let t=e.replace(/^\uFEFF/,"");if(!t.trim())return{headers:[],data:[],delimiter:","};let n=v8e(t.trimStart());if(!n.trim())return{headers:[],data:[],delimiter:","};let r=B8e(n),i=_8e(t,r),o=i[0]??[],a=i.slice(1);return{headers:o,data:a,delimiter:r}}function d8(e){let t=e.trim();if(!t)return{firstName:"",lastName:""};let n=t.split(/\s+/);if(n.length===1)return{firstName:n[0]??"",lastName:""};let r=n[0]??"",i=n.slice(1).join(" ");return{firstName:r,lastName:i}}function Nd(e,t){let r={email:[/email/i,/e-mail/i,/mail/i],externalId:[/^id$/i,/external.?id/i,/external_id/i,/^uid$/i,/^user.?id$/i,/^user_id$/i,/^customer.?id$/i,/^customer_id$/i],firstName:[/first.?name/i,/firstname/i,/first_name/i,/^first$/i],lastName:[/last.?name/i,/lastname/i,/last_name/i,/^last$/i],fullName:[/^name$/i,/full.?name/i,/fullname/i,/full_name/i,/^nom$/i],timezone:[/^time.?zone$/i,/^iana.?time.?zone$/i,/^tz$/i]}[t];for(let i=0;i<e.length;i++){let o=e[i];if(o&&r.some((a)=>a.test(o)))return i}return}var P8e=["urgent","act now","limited time","expires","hurry","immediate","instant","don't delay","deadline","last chance","final notice","time sensitive","free","100% free","no cost","no fee","cash","money back","credit card","earn money","make money","double your","million dollars","cash bonus","prize","winner","won","lottery","jackpot","buy now","order now","click here","click below","sign up free","subscribe now","apply now","get started now","call now","discount","special offer","best price","lowest price","bargain","cheap","deal","save big","save up to","% off","50% off","70% off","90% off","guaranteed","100% guaranteed","risk free","no risk","no obligation","satisfaction guaranteed","money back guarantee","weight loss","lose weight","diet","miracle","cure","congratulations","you have been selected","you're a winner","as seen on","this isn't spam","not spam","dear friend","dear customer"],Pft=new RegExp(`\\b(${P8e.join("|")})\\b`,"gi"),O8e=["ass","asshole","bastard","bitch","bullshit","cunt","damn","dick","fuck","fucked","fucker","fucking","motherfucker","piss","shit","shitty","slut","whore"],Oft=new RegExp(`\\b(${O8e.join("|")})\\b`,"gi");var m8=String.raw`(?:enter|submit|provide|share|send|confirm|reply(?:\s+to\s+(?:this\s+)?email)?\s+with)`,f8=String.raw`${m8}(?:(?:,\s*(?:(?:or|and)\s+)?|\s+(?:or|and)\s+)${m8})*`,Nb=String.raw`(?:account\s+)?(?:password|login credentials?|credentials?|otp|one[- ]time pass(?:word|code)|2fa code|mfa code|authentication code|verification code|security code)|bank account|card number|credit card|cvv|debit card|(?:wallet\s+)?(?:private key|recovery phrase|seed phrase)|routing number|social security(?: number)?|ssn`,Kft=new RegExp(String.raw`\b(?:never|do\s+not|don't|don’t|(?:must|should)\s+(?:not|never))\s+(?:ever\s+)?${f8}\s+(?:your\s+)?(?:${Nb})`,"gi"),Jft=new RegExp(String.raw`\b(?:(?:will|would)\s+(?:never|not)|never|won't|won’t)\s+(?:ask|request)\s+(?:(?:you\s+to|that\s+you)\s+)?${f8}\s+(?:your\s+)?(?:${Nb})`,"gi"),Yft=new RegExp(String.raw`\b${m8}\s+(?:your\s+)?(?:${Nb})\s+(?:with|to)\s+(?:no one|nobody)\b`,"gi"),Xj=String.raw`(?:\b(?:never|do\s+not|don't|don’t|(?:must|should)\s+(?:not|never))\s+(?:ever\s+)?|\b(?:(?:will|would)\s+(?:never|not)|never|won't|won’t)\s+(?:ask|request)\s+(?:(?:you\s+to|that\s+you)\s+)?)${f8}\s+(?:your\s+)?(?:${Nb})`,eG=String.raw`(?:(?!\b(?:do\s+not|don't|don’t|never|not)\b)[^.!?\n]){0,120}?`,tG=String.raw`(?:it|them|that|this|those|these|one)`,Zft=new RegExp(String.raw`${Xj}${eG}\b(?:enter|submit|type|confirm)\s+${tG}\b`,"i"),Xft=new RegExp(String.raw`${Xj}${eG}\b(?:share|send|provide|reply(?:\s+to\s+(?:this\s+)?email)?\s+with)\s+${tG}\b`,"i");var M8e=["privaterelay.appleid.com","private.icloud.com","icloud.com"];var t0t=M8e[0],nG="AppleRelayUnregistered";var g8="ConvertedFromTransient_",U8e="ForwardedFailure",$8e="ReputationBlocked",rG="NonRecipientFailure",iG="ProviderSuppressed",q8e={General:"General",NoEmail:"Email address does not exist",Suppressed:"Suppressed address",OnAccountSuppressionList:"Account suppression list",MailboxFull:"Mailbox full",MessageTooLarge:"Message too large",ContentRejected:"Content rejected",AttachmentRejected:"Attachment rejected",[U8e]:"Forwarding failed",[$8e]:"Sending IP blocked by the receiver",[rG]:"Sender or authentication rejected by the receiver",[iG]:"Blocked by the sending provider's own suppression list",[nG]:"Apple Private Relay - sending domain not registered with Apple",Undetermined:"Undetermined"};function Q8e(e){return e.replace(/[_-]+/g," ").replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/\s+/g," ").trim()}function z8e(e){let t=e.trim();if(!t)return"Unknown";return`${t.slice(0,1).toUpperCase()}${t.slice(1)}`}function H8e(e){return`${e.slice(0,1).toLowerCase()}${e.slice(1)}`}function j8e(e){if(e==="Transient")return"temporary";if(e==="Permanent"||e==="Undetermined")return"permanent";return"unknown"}function oG(e){let t=j8e(e);if(t==="permanent")return"Permanent bounce";if(t==="temporary")return"Temporary bounce";return"Unknown bounce"}function G8e(e){let t=e?.trim();if(!t)return"General";if(t.startsWith(g8))return t.slice(g8.length).trim()||"General";return t}function V8e(e){return e?.trim().startsWith(g8)??!1}function aG(e){let t=e?.trim();if(!t)return"General";let n=V8e(t),r=G8e(t),i=q8e[r]??z8e(Q8e(r));if(n)return`Converted from temporary bounce: ${H8e(i)}`;return i}var Hg=[{provider:"google",domains:["gmail.com","googlemail.com"],isPaidLikely:!1},{provider:"microsoft",domains:["outlook.com","hotmail.com","live.com","msn.com"],isPaidLikely:!1},{provider:"yahoo",domains:["yahoo.com","yahoo.co.uk","yahoo.fr","yahoo.de","yahoo.ca","yahoo.co.jp","ymail.com","rocketmail.com"],isPaidLikely:!1},{provider:"apple",domains:["icloud.com","me.com","mac.com"],isPaidLikely:!1},{provider:"proton",domains:["protonmail.com","protonmail.ch","proton.me","pm.me"],isPaidLikely:!1},{provider:"zoho",domains:["zoho.com","zohomail.com","zohomail.eu"],isPaidLikely:null},{provider:"fastmail",domains:["fastmail.com","fastmail.fm","fastmail.co.uk"],isPaidLikely:!0},{provider:"aol",domains:["aol.com","aim.com"],isPaidLikely:!1},{provider:"comcast",domains:["comcast.net"],isPaidLikely:!1},{provider:"hey",domains:["hey.com"],isPaidLikely:!0},{provider:"gmx",domains:["gmx.com","gmx.de","gmx.net","gmx.at","gmx.ch"],isPaidLikely:!1},{provider:"freenet",domains:["freenet.de"],isPaidLikely:!1},{provider:"yandex",domains:["yandex.ru","yandex.com","ya.ru","yandex.kz","yandex.by","yandex.ua"],isPaidLikely:!1},{provider:"qq",domains:["qq.com","foxmail.com"],isPaidLikely:!1},{provider:"naver",domains:["naver.com"],isPaidLikely:!1},{provider:"daum",domains:["daum.net","hanmail.net"],isPaidLikely:!1},{provider:"netease",domains:["163.com","126.com","yeah.net"],isPaidLikely:!1},{provider:"sina",domains:["sina.com","sina.cn"],isPaidLikely:!1},{provider:"sohu",domains:["sohu.com"],isPaidLikely:!1},{provider:"orange",domains:["orange.fr","wanadoo.fr"],isPaidLikely:!1},{provider:"free-fr",domains:["free.fr"],isPaidLikely:!1},{provider:"laposte",domains:["laposte.net"],isPaidLikely:!1},{provider:"sfr",domains:["sfr.fr","neuf.fr"],isPaidLikely:!1},{provider:"libero",domains:["libero.it","iol.it"],isPaidLikely:!1},{provider:"virgilio",domains:["virgilio.it"],isPaidLikely:!1},{provider:"t-online",domains:["t-online.de"],isPaidLikely:!1},{provider:"seznam",domains:["seznam.cz","email.cz","post.cz"],isPaidLikely:!1},{provider:"ukr-net",domains:["ukr.net"],isPaidLikely:!1},{provider:"docomo",domains:["docomo.ne.jp"],isPaidLikely:!1},{provider:"softbank",domains:["softbank.ne.jp","i.softbank.jp","vodafone.ne.jp","disney.ne.jp"],isPaidLikely:!1},{provider:"kddi",domains:["ezweb.ne.jp","au.com"],isPaidLikely:!1},{provider:"nifty",domains:["nifty.com"],isPaidLikely:!1},{provider:"biglobe",domains:["biglobe.ne.jp"],isPaidLikely:!1},{provider:"ocn",domains:["ocn.ne.jp"],isPaidLikely:!1},{provider:"sone",domains:["so-net.ne.jp"],isPaidLikely:!1},{provider:"bol",domains:["bol.com.br"],isPaidLikely:!1},{provider:"uol",domains:["uol.com.br","uol.com"],isPaidLikely:!1},{provider:"terra",domains:["terra.com.br","terra.com"],isPaidLikely:!1},{provider:"wp",domains:["wp.pl"],isPaidLikely:!1},{provider:"onet",domains:["onet.pl","op.pl","vp.pl"],isPaidLikely:!1},{provider:"interia",domains:["interia.pl"],isPaidLikely:!1},{provider:"kpn",domains:["kpnmail.nl","planet.nl","hetnet.nl","tiscali.nl"],isPaidLikely:!1},{provider:"ziggo",domains:["ziggo.nl","upcmail.nl"],isPaidLikely:!1},{provider:"bluewin",domains:["bluewin.ch"],isPaidLikely:!1},{provider:"skynet",domains:["skynet.be"],isPaidLikely:!1},{provider:"telenet",domains:["telenet.be"],isPaidLikely:!1},{provider:"mailcom",domains:["mail.com"],isPaidLikely:!1},{provider:"juno",domains:["juno.com","netzero.net"],isPaidLikely:!1},{provider:"rcn",domains:["rcn.com"],isPaidLikely:!1}];var x0t=new Set(Hg.flatMap((e)=>e.domains));var P0t=Date.UTC(2000,0,1),O0t=Date.UTC(2100,0,1);var rOe=Ft(SZ(),1);var t6=["any_contact","any_list"];function n6(e){return typeof e==="string"&&t6.includes(e)}var VAt=new Set(eb);var WAt={[It.TRIGGER_LIST]:new Set(["label","listId","listIds","listScope","listName","segmentId","segmentName","stopOnSegmentExit","triggerType","tagName","tagNames","eventName","propertyFilters","inactiveDays","inactivityBaseline","minCount","timeWindowDays"]),[It.TRIGGER_EVENT]:new Set(["label","eventName","propertyFilters","triggerType","tagName","inactiveDays","inactivityBaseline","minCount","timeWindowDays"]),[It.TRIGGER_INBOUND_WEBHOOK]:new Set(["label","eventName","propertyFilters","triggerType","active","integrationSlug","integrationEventKey","customIntegration"]),[It.TRIGGER_INACTIVITY]:new Set(["label","eventName","inactiveDays","inactivityBaseline","triggerType"]),[It.TRIGGER_FREQUENCY]:new Set(["label","eventName","minCount","timeWindowDays","triggerType","active"]),[It.ACTION_EMAIL]:new Set(["label","emailId","fromName","replyTo","isTransactional","senderProfileId","replyProfileId","replyToName","ccEmails","bccEmails","attachments","subject","stepTitle","stepDescription","creativeDirection","stepNumber","needsEnrichment"]),[It.ACTION_SMS]:new Set(["label","blocks","ineligibleAction"]),[It.ACTION_WEBHOOK]:new Set(["label","url","method","headers","body","resultKey","onError","isEndNode","isPlaceholder"]),[It.ACTION_ADD_TAG]:new Set(["label","tagId","tagName","firstName","lastName","status","customAttributes","customAttributeUpdates"]),[It.ACTION_REMOVE_TAG]:new Set(["label","tagId","tagName","firstName","lastName","status","customAttributes","customAttributeUpdates"]),[It.ACTION_UPDATE_ATTRIBUTES]:new Set(["label","firstName","lastName","status","customAttributes","customAttributeUpdates"]),[It.ACTION_ADD_TO_LIST]:new Set(["label","listId","listName"]),[It.ACTION_REMOVE_FROM_LIST]:new Set(["label","listId","listName"]),[It.ACTION_AB_TEST]:new Set(["label","abTestId","testType","winnerCriteria","winnerThreshold","winnerId","emailDescription","fromName","replyTo","isTransactional","senderProfileId","replyProfileId","replyToName","ccEmails","bccEmails","variantCount"]),[It.ACTION_AI]:new Set(["label","prompt","resultKey","outputFields","includeTags","includeEventProperties","includeRecentEvents","recentEventLimit","includeAttributes","onError"]),[It.ACTION_CREATE_DISCOUNT]:new Set(["label","provider","discountType","percentOff","amountOff","currency","duration","durationInMonths","appliesToAllPlans","planIds","codePrefix","maxRedemptions","lockToSubscriber","expiresAt","expiresInHours","name"]),[It.LOGIC_DELAY]:new Set(["label","delayDays","delayHours","delayMinutes","delayMs","delayDisplay","mode","untilDateField","untilOffsetDirection","untilMissingAction","untilDays","untilStartTime","untilEndTime","untilTimezone"]),[It.LOGIC_CONDITION]:new Set(["label","conditionType","tagId","tagName","listId","segmentId","segmentName","eventName","linkUrl","activityScope","fieldName","fieldValue"]),[It.LOGIC_BRANCH]:new Set(["label","branches","splitMode","randomPercentages","pathAConditionType","pathATagId","pathATagName","pathAListId","pathASegmentId","pathASegmentName","pathAEventName","pathALinkUrl","pathAActivityScope","pathAFieldName","pathAFieldValue"]),[It.LOGIC_WAIT_FOR_EVENT]:new Set(["label","eventName","timeoutDays","timeoutAction"])};var r6=["source","medium","campaign","content","term"];var aOe=/^[a-zA-Z0-9_.-]{1,64}$/;function Sx(e){if(e==="internal"||e.startsWith("internal."))return!1;return aOe.test(e)}var vx=256;function vZ(e){return e.trim().slice(0,256)}function sOe(e,t,n){let r=new URLSearchParams;if(r.set("b",e.blockId),r.set("t",e.variant),r.set("k",e.attributeKey),r.set("v",t.value),t.label&&t.label!==t.value)r.set("l",t.label);if(r.set("ms","1"),r.set("o",JSON.stringify(n.map((o)=>o.value))),n.some((o)=>o.label!==o.value))r.set("ol",JSON.stringify(n.map((o)=>o.label)));if(e.question?.trim())r.set("q",e.question.trim().slice(0,200));if(e.redirectUrl?.trim())r.set("r",e.redirectUrl.trim());if(e.confirmationMessage?.trim())r.set("m",e.confirmationMessage.trim().slice(0,200));let i=e.language?.trim().toLowerCase();if(i&&i!=="en")r.set("lg",i.slice(0,10));return 35+r.toString().length}function i6(e){if(e.variant!=="options"||!e.allowMultiple)return;if(e.options.some((r)=>Boolean(r.imageUrl?.trim())))return"Multiple-answer polls cannot use answer images. Remove the images or turn off multiple answers.";let t=e.options.map((r)=>{let i=vZ(e.optionsAreResolved?r.value??"":r.value?.trim()||r.label);return{value:i,label:vZ(r.label)||i}}),n=new Set(t.map((r)=>r.value));if(t.length<2||t.some((r)=>!r.value)||n.size!==t.length)return"Multiple-answer polls require at least two unique non-empty answers after personalization.";if(t.some((r)=>sOe(e,r,t)>7000))return"This multiple-answer poll contains too much link data. Shorten its question, redirect, confirmation, answer labels, or stored values.";return}function o6(e){return(e.value?.trim()||e.label).trim().slice(0,256)}function _Z(e){let t=e?.trim();if(!t)return!0;try{let n=t.replace(/\{\{[^{}]+\}\}/g,"placeholder"),r=new URL(n);return(r.protocol==="http:"||r.protocol==="https:")&&r.hostname.length>0}catch{return!1}}var pOe="/poll/response";var IEt=new RegExp(`https://(?:www\\.)?sequenzy\\.com${pOe.replace(/\//g,"\\/")}\\?([^"'\\s<>]*)`,"gi");var mOe=["image/png","image/jpeg","image/gif","image/webp"],HEt=new Set(mOe);var VEt=Ma("i");var DZ=["from-scratch","waitlist","lead-magnet","launch","demo-request","webinar","newsletter","product-hunt","pricing-offer","agency-lead-gen","feature-announcement"];var fOe=["stack","row","grid","overlay"],gOe=["top","center","bottom"],IZ=8,xOe=["top","hero","form","body","footer"];var AOe=["modern-sans","editorial-serif","classic-serif","friendly-rounded","commerce-sans","technical-mono"],wZ="modern-sans",EOe=["compact","balanced","spacious"],hOe=["none","fade","slide-up","zoom-in"],yOe=["slow","normal","fast"],bOe=["pill","underline","bar","badge"],COe=["soft","outlined","solid","minimal"],TZ={enabled:!0,duplicateStrategy:"skip",listMode:"default",listIds:[],tagIds:[],showFirstName:!0,showLastName:!1,showPhone:!1,firstNameRequired:!1,lastNameRequired:!1,phoneRequired:!1,emailPlaceholder:"you@example.com",firstNamePlaceholder:"First name",lastNamePlaceholder:"Last name",phonePlaceholder:"Phone number",customFields:[],buttonText:"Join the list",successMessage:"You're on the list."},kZ={accentColor:"#f97316",backgroundColor:"#ffffff",textColor:"#111827",mutedTextColor:"#6b7280",cardColor:"#ffffff",borderRadius:8,fontPair:"modern-sans",headingFontFamily:"",bodyFontFamily:"",density:"balanced",accentStyle:"pill",surfaceStyle:"soft",sectionAnimation:"none",sectionAnimationSpeed:"normal"};var BOe=24,SOe=96,RZ=36,FZ={enabled:!0,showLogo:!0,logoUrl:"",logoSize:RZ,showName:!0,name:""},NZ={id:"landing-page-footer",kind:"footer",slot:"footer",brandText:"Built by Sequenzy",showBrandText:!0,showPrivacyLink:!0,privacyLabel:"Privacy",privacyUrl:"",showTermsLink:!0,termsLabel:"Terms",termsUrl:""},PZ=ae({title:C().trim().max(120),description:C().trim().max(300)}),vOe=ae({value:C().trim().min(1).max(40),label:C().trim().min(1).max(120)}),_Oe=ae({quote:C().trim().min(1).max(500),name:C().trim().min(1).max(120),role:C().trim().max(160).default(""),avatarUrl:C().trim().max(1000).default("").optional()}),IOe=ae({name:C().trim().min(1).max(80)}),DOe=ae({question:C().trim().min(1).max(160),answer:C().trim().min(1).max(500)}),wOe=["email","firstName","lastName","website"],TOe=ae({name:C().trim().min(1).max(80).regex(/^[A-Za-z][A-Za-z0-9_.-]*$/,{message:"Use letters, numbers, underscores, dots, or dashes, starting with a letter."}).refine((e)=>!wOe.includes(e),{message:"Field name is reserved."}),label:C().trim().max(120).default(""),placeholder:C().trim().max(120).default(""),required:Yt().default(!1),inputType:me(["text","phone","number","textarea","select","radio","checkbox","consent","hidden"]).default("text"),options:Qe(ae({label:C().trim().min(1).max(120),value:C().trim().min(1).max(120)})).max(20).default([]),consentText:C().trim().max(300).default(""),defaultValue:C().trim().max(500).default("")}),OZ=ae({enabled:Yt().default(!0),duplicateStrategy:me(["skip","merge","overwrite"]).default("skip"),listMode:me(["default","none","specific"]).default("default"),listIds:Qe(C()).default([]),tagIds:Qe(C()).default([]),showFirstName:Yt().default(!0),showLastName:Yt().default(!1),showPhone:Yt().default(!1),firstNameRequired:Yt().default(!1),lastNameRequired:Yt().default(!1),phoneRequired:Yt().default(!1),emailPlaceholder:C().trim().max(120).default("you@example.com"),firstNamePlaceholder:C().trim().max(120).default("First name"),lastNamePlaceholder:C().trim().max(120).default("Last name"),phonePlaceholder:C().trim().max(120).default("Phone number"),customFields:Qe(TOe).max(8).default([]),buttonText:C().trim().min(1).max(80).default("Join the list"),successMessage:C().trim().min(1).max(240).default("You're on the list."),redirectUrl:C().trim().max(500).optional()}).superRefine((e,t)=>{let n=new Set;e.customFields.forEach((r,i)=>{if(n.has(r.name))t.addIssue({code:Ai.custom,message:"Custom field keys must be unique.",path:["customFields",i,"name"]});n.add(r.name)})}),Xm=C().trim().regex(/^#[0-9a-fA-F]{6}$/),LZ=ae({accentColor:Xm.default("#f97316"),backgroundColor:Xm.default("#ffffff"),textColor:Xm.default("#111827"),mutedTextColor:Xm.default("#6b7280"),cardColor:Xm.default("#ffffff"),borderRadius:Ce().int().min(0).max(24).default(8),fontPair:me(AOe).default(wZ),headingFontFamily:C().trim().max(160).default(""),bodyFontFamily:C().trim().max(160).default(""),density:me(EOe).default("balanced"),accentStyle:me(bOe).default("pill"),surfaceStyle:me(COe).default("soft"),sectionAnimation:me(hOe).default("none"),sectionAnimationSpeed:me(yOe).default("normal")}),kOe=ae({enabled:Yt().default(!0),showLogo:Yt().default(!0),logoUrl:C().trim().max(1000).default(""),logoSize:Ce().int().min(BOe).max(SOe).default(RZ),showName:Yt().default(!0),name:C().trim().max(120).default("")}),a6=ae({sectionId:C().trim().min(1).max(128).optional(),sectionKind:C().trim().min(1).max(80).optional(),sectionLabel:C().trim().min(1).max(120).optional(),sectionVariant:C().trim().max(80).optional(),sectionLayout:me(["stack","split","center"]).optional(),sectionAlign:me(["left","center","right"]).optional()}),Cs=me(["left","center","right"]),Po=a6.extend({id:C().trim().min(1).max(128),slot:me(xOe)}),ROe=Po.extend({kind:Pe("heading"),level:rc([Pe(1),Pe(2),Pe(3)]).default(2),content:C().trim().min(1).max(180),align:Cs.optional()}),FOe=Po.extend({kind:Pe("text"),variant:me(["paragraph","eyebrow","caption"]).default("paragraph"),content:C().trim().max(700),align:Cs.optional()}),NOe=ae({src:C().trim().max(1000).default(""),alt:C().trim().max(160).default(""),linkUrl:C().trim().max(500).optional()}),POe=["cover","contain"],MZ=25,OOe=80,LOe=640,MOe=Po.extend({kind:Pe("image"),src:C().trim().max(1000).default(""),alt:C().trim().max(160).default(""),images:Qe(NOe).max(3).default([]).optional(),align:Cs.optional(),width:Ce().int().min(MZ).max(100).optional(),height:Ce().int().min(OOe).max(LOe).optional(),fit:me(POe).optional()}),UOe=["16:9","4:3","1:1","9:16"],$Oe="16:9",qOe=Po.extend({kind:Pe("video"),url:C().trim().max(1000).default(""),title:C().trim().max(160).default(""),align:Cs.optional(),width:Ce().int().min(MZ).max(100).optional(),aspectRatio:me(UOe).default($Oe)}),QOe=Po.extend({kind:Pe("button"),text:C().trim().min(1).max(80),url:C().trim().max(500).default(""),variant:me(["primary","secondary"]).default("primary"),align:Cs.optional()}),zOe=Po.extend({kind:Pe("custom-html"),html:C().max(20000).default(""),height:Ce().int().min(40).max(1200).default(320)}),MC=Ce().int().min(1).max(6),HOe=Po.extend({kind:Pe("feature-grid"),features:Qe(PZ).min(1).max(6),align:Cs.optional(),columns:MC.optional(),layout:me(["row","column"]).optional()}),jOe=Po.extend({kind:Pe("stats"),stats:Qe(vOe).min(1).max(6),align:Cs.optional(),columns:MC.optional()}),GOe=Po.extend({kind:Pe("testimonial"),testimonials:Qe(_Oe).min(1).max(3),align:Cs.optional(),columns:MC.optional(),layout:me(["row","column"]).optional()}),VOe=Po.extend({kind:Pe("logo-cloud"),heading:C().trim().max(120).default("Trusted by teams building faster"),logos:Qe(IOe).min(1).max(8),align:Cs.optional(),columns:MC.optional()}),WOe=Po.extend({kind:Pe("faq"),heading:C().trim().max(120).default("Common questions"),items:Qe(DOe).min(1).max(8),align:Cs.optional()}),KOe=Po.extend({kind:Pe("pricing"),eyebrow:C().trim().max(80).default("Simple pricing"),heading:C().trim().min(1).max(140),description:C().trim().max(300).default(""),price:C().trim().min(1).max(80),period:C().trim().max(80).default(""),buttonText:C().trim().min(1).max(80),buttonUrl:C().trim().max(500).default(""),features:Qe(C().trim().min(1).max(160)).min(1).max(8),align:Cs.optional()}),JOe=-3,YOe=3,ZOe=["narrow","medium","wide"],XOe=a6.extend({id:C().trim().min(1).max(128),slot:Pe("form"),kind:Pe("form"),heading:C().trim().max(120).default("Get early access"),description:C().trim().max(240).default(""),form:OZ.default(TZ),cardTilt:Ce().int().min(JOe).max(YOe).optional(),cardWidth:me(ZOe).optional()}),eLe=a6.extend({id:C().trim().min(1).max(128),slot:Pe("footer"),kind:Pe("footer"),brandText:C().trim().max(120).default("Built by Sequenzy"),showBrandText:Yt().default(!0),showPrivacyLink:Yt().default(!0),privacyLabel:C().trim().max(80).default("Privacy"),privacyUrl:C().trim().max(500).default(""),showTermsLink:Yt().default(!0),termsLabel:C().trim().max(80).default("Terms"),termsUrl:C().trim().max(500).default("")}),tLe=Po.extend({kind:Pe("spacer"),height:Ce().int().min(8).max(160).default(32)}),nLe=Po.extend({kind:Pe("divider")});function rLe(e){let t=e.children.filter((r)=>r.kind==="image"),n=t[0];return t.length===1&&n!==void 0&&(!n.images||n.images.length<=1)}function UZ(e){return e.map((t)=>{if(t.kind!=="group")return t;let n={...t,children:UZ(t.children)};return n.layout==="overlay"&&!rLe(n)?{...n,layout:"stack"}:n})}var $Z=Fb(()=>rc([iLe,ROe,FOe,MOe,qOe,QOe,zOe,HOe,jOe,GOe,VOe,WOe,KOe,XOe,eLe,tLe,nLe])),iLe=Po.extend({kind:Pe("group"),label:C().trim().min(1).max(120).default("Group"),layout:me(fOe).default("stack"),columns:Ce().int().min(1).max(4).default(2),gap:Ce().int().min(0).max(64).default(16),padding:Ce().int().min(0).max(64).default(0),overlayColor:Xm.default("#000000"),overlayPosition:me(gOe).default("center"),overlayShade:Ce().int().min(0).max(100).default(35),children:Qe($Z).max(100).default([])}),oLe=ae({title:C().trim().max(70).optional(),description:C().trim().max(160).optional(),faviconUrl:C().trim().max(1000).default(""),hideFromSearchEngines:Yt().default(!1)}),aLe={faviconUrl:"",hideFromSearchEngines:!1},qZ=ae({version:Pe(2),template:me(DZ).default("waitlist"),seo:oLe.default(aLe),header:kOe.default(FZ),theme:LZ.default(kZ),blocks:Qe($Z).min(1)}).superRefine((e,t)=>{let n=QZ(e.blocks),r=n.filter((a)=>a.kind==="form").length,i=n.filter((a)=>a.kind==="footer").length,o=new Set;if(r>1)t.addIssue({code:"custom",message:"Landing pages can contain at most one form block.",path:["blocks"]});if(i!==1)t.addIssue({code:"custom",message:"Landing pages must contain exactly one footer block.",path:["blocks"]});for(let a of n){if(o.has(a.id)){t.addIssue({code:"custom",message:`Landing page block IDs must be unique. Duplicate ID: ${a.id}`,path:["blocks"]});break}o.add(a.id)}zZ(e.blocks,t)}).transform((e)=>({...e,blocks:UZ(e.blocks)})),sLe=ae({template:me(DZ).default("waitlist"),eyebrow:C().trim().max(80).default("Coming soon"),title:C().trim().min(1).max(160),description:C().trim().max(500).default(""),formHeading:C().trim().max(120).default("Get early access"),formDescription:C().trim().max(240).default(""),secondaryCtaText:C().trim().max(80).optional(),secondaryCtaUrl:C().trim().max(500).optional(),imageUrl:C().trim().max(1000).optional(),socialProof:C().trim().max(180).optional(),features:Qe(PZ).max(6).default([]),form:OZ.default(TZ),theme:LZ.default(kZ),seoTitle:C().trim().max(70).optional(),seoDescription:C().trim().max(160).optional()}),lht=l8((e)=>{if(typeof e==="object"&&e!==null&&"version"in e&&e.version===2)return cLe(e);let t=sLe.safeParse(e);if(!t.success)return e;return lLe(t.data)},qZ);function lLe(e){let t=[{id:"hero-eyebrow",kind:"text",slot:"hero",variant:"eyebrow",content:e.eyebrow},{id:"hero-title",kind:"heading",slot:"hero",level:1,content:e.title},{id:"hero-description",kind:"text",slot:"hero",variant:"paragraph",content:e.description}];if(e.secondaryCtaText&&e.secondaryCtaUrl)t.push({id:"hero-secondary-cta",kind:"button",slot:"hero",text:e.secondaryCtaText,url:e.secondaryCtaUrl,variant:"secondary"});if(e.imageUrl)t.push({id:"form-image",kind:"image",slot:"form",src:e.imageUrl,alt:e.title});if(t.push({id:"signup-form",kind:"form",slot:"form",heading:e.formHeading,description:e.formDescription,form:e.form}),e.features.length>0)t.push({id:"body-feature-grid",kind:"feature-grid",slot:"body",features:e.features});if(e.socialProof)t.push({id:"body-social-proof",kind:"text",slot:"body",variant:"caption",content:e.socialProof});return t.push({...NZ}),qZ.parse({version:2,template:e.template,seo:{title:e.seoTitle,description:e.seoDescription},header:FZ,theme:e.theme,blocks:t})}function cLe(e){if(typeof e!=="object"||e===null)return e;let t=e;if(!Array.isArray(t.blocks))return e;if(t.blocks.some(HZ))return e;return{...e,blocks:[...t.blocks,{...NZ}]}}function QZ(e){return e.flatMap((t)=>t.kind==="group"?[t,...QZ(t.children)]:[t])}function zZ(e,t,n=null,r=0,i=["blocks"]){e.forEach((o,a)=>{let c=[...i,a];if(n&&o.slot!==n.slot)t.addIssue({code:"custom",message:"Grouped blocks must use the same page slot as their parent.",path:[...c,"slot"]});if(n&&(o.kind==="form"||o.kind==="footer"))t.addIssue({code:"custom",message:"Form and footer blocks must remain at the page root.",path:c});if(o.kind!=="group")return;if(r>=IZ){t.addIssue({code:"custom",message:`Landing page groups can be nested up to ${IZ} levels.`,path:c});return}zZ(o.children,t,o,r+1,[...c,"children"])})}function HZ(e){if(typeof e!=="object"||e===null||!("kind"in e))return!1;if(e.kind==="footer")return!0;if(e.kind!=="group"||!("children"in e))return!1;return Array.isArray(e.children)&&e.children.some(HZ)}var uLe="form",Aht=`#${uLe}`;var s6=["boxed","minimal","bold","stacked","circle","circle-filled"];var l6=["zeros","message"];var jZ=60,dLe=jZ*1000;var GZ=["paddingTop","paddingBottom","paddingLeft","paddingRight","backgroundColor","backgroundOpacity","textColor","textAlign","borderRadius","borderColor","borderWidth","bleed"];function ef(e){return typeof e==="object"&&e!==null&&!Array.isArray(e)}function VZ(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function pLe(e){if(!ef(e))return e;let t={},n=!1;for(let i of GZ)if(VZ(e,i))n=!0,t[i]=e[i];if(!n)return e;if(VZ(e,"styles")&&!ef(e.styles))return e;let r={...e};for(let i of GZ)delete r[i];return r.styles=ef(e.styles)?{...t,...e.styles}:t,r}function UC(e){if(!Array.isArray(e))return{children:e,changed:!1};let t=!1,n=e.map((r)=>{let i=$C(r);if(i!==r)t=!0;return i});return{children:t?n:e,changed:t}}function WZ(e){if(!ef(e))return{branch:e,changed:!1};let t=UC(e.children);if(!t.changed)return{branch:e,changed:!1};return{branch:{...e,children:t.children},changed:!0}}function mLe(e){if(!Array.isArray(e))return{columns:e,changed:!1};let t=!1,n=e.map((r)=>{if(!ef(r))return r;let i=UC(r.children);if(!i.changed)return r;return t=!0,{...r,children:i.children}});return{columns:t?n:e,changed:t}}function $C(e){let t=pLe(e);if(!ef(t))return t;let n=t!==e,r=t;if(r.type==="button"){for(let[i,o]of[["content","text"],["buttonText","text"],["buttonUrl","url"]])if(typeof r[o]!=="string"&&typeof r[i]==="string")n=!0,r={...r,[o]:r[i]}}if(r.type==="columns"){let i=mLe(r.columns);if(i.changed)n=!0,r={...r,columns:i.columns}}if(r.type==="conditional-group"){let i=WZ(r.ifBranch),o=WZ(r.elseBranch);if(i.changed||o.changed)n=!0,r={...r,ifBranch:i.branch,elseBranch:o.branch}}if(r.type==="repeat"){let i=UC(r.children);if(i.changed)n=!0,r={...r,children:i.children}}if(r.type==="group"){let i=UC(r.children);if(i.changed)n=!0,r={...r,children:i.children}}return n?r:e}var ln=ae({paddingTop:Ce().optional(),paddingBottom:Ce().optional(),paddingLeft:Ce().optional(),paddingRight:Ce().optional(),backgroundColor:C().optional(),backgroundOpacity:Ce().min(0).max(100).optional(),textColor:C().optional(),textAlign:me(["left","center","right"]).optional(),borderRadius:Ce().optional(),borderColor:C().optional(),borderWidth:Ce().optional(),bleed:Yt().optional()}).optional(),Fht=ae({variable:C(),operator:me(["equals","not_equals","contains","not_contains","exists","not_exists","greater_than","greater_than_or_equal","less_than","less_than_or_equal"]),value:C().optional()}).optional(),XZ=ae({id:C(),field:me(ID),operator:me(Wq),value:C()}).superRefine((e,t)=>{let n=Jq(e);if(n){t.addIssue({code:Ai.custom,path:["operator"],message:n});return}if(pb(e.field)){let r=sq(e);if(r)t.addIssue({code:Ai.custom,path:["value"],message:r})}}),En=Qe(XZ).optional(),Oo=ae({utmMode:me(["auto","manual"]).optional()}).optional(),qC=ae({id:C().optional(),type:Pe("text"),content:C(),variant:me(["paragraph","lead","html"]).optional().default("paragraph"),styles:ln,conditions:En}),fLe=ae({id:C().optional(),type:Pe("html"),content:C(),styles:ln,conditions:En}),eX=ae({id:C().optional(),type:Pe("heading"),content:C(),level:rc([Pe(1),Pe(2),Pe(3)]),indexText:C().max(8).optional(),styles:ln,conditions:En}),gLe=ae({id:C().optional(),content:C(),color:C().optional()}),tX=ae({id:C().optional(),type:Pe("list"),variant:me(["bullet","numbered","checklist"]),items:Qe(gLe),color:C().optional(),styles:ln,conditions:En}),nX=ae({id:C().optional(),type:Pe("button"),text:C(),url:C(),variant:me(["primary","secondary","pill","ink","link"]).optional().default("primary"),size:me(["sm","md","lg"]).optional(),width:Ce().min(1).max(100).optional(),height:Ce().min(1).max(200).optional(),tracking:Oo,buttonColor:C().optional(),buttonTextColor:C().optional(),styles:ln,conditions:En}),rX=ae({id:C().optional(),type:Pe("spacer"),height:Ce(),styles:ln,conditions:En}),iX=ae({id:C().optional(),type:Pe("divider"),variant:me(["line","dots","accent"]).optional(),color:C().optional(),width:Ce().min(10).max(100).optional(),styles:ln,conditions:En}),oX=ae({id:C().optional(),type:Pe("hero"),variant:me(["image","color"]),backgroundImage:C().optional(),overlayColor:C().optional(),overlayOpacity:Ce().min(0).max(100).optional(),eyebrow:C().optional(),heading:C(),subheading:C().optional(),buttonText:C().optional(),buttonUrl:C().optional(),buttonColor:C().optional(),buttonTextColor:C().optional(),tracking:Oo,minHeight:Ce().min(120).max(720).optional(),contentAlign:me(["left","center"]).optional(),styles:ln,conditions:En}),aX=ae({id:C().optional(),type:Pe("testimonial"),quote:C(),authorName:C(),authorTitle:C().optional(),avatarUrl:C().optional(),rating:Ce().min(1).max(5).optional(),variant:me(["card","minimal","centered","quote","editorial"]),accentColor:C().optional(),styles:ln,conditions:En}),xLe=ae({id:C().optional(),src:C(),alt:C(),href:C().optional()}),sX=ae({id:C().optional(),type:Pe("gallery"),layout:me(["two-up","three-up","mosaic"]),images:Qe(xLe).min(2).max(6),gap:Ce().min(0).max(32).optional(),imageRadius:Ce().min(0).max(32).optional(),imageHeight:Ce().min(80).max(480).optional(),tracking:Oo,styles:ln,conditions:En}),lX=ae({id:C().optional(),type:Pe("badge"),text:C(),variant:me(["pill","outline","soft"]),color:C().optional(),align:me(["left","center","right"]).optional(),styles:ln,conditions:En}),ALe=ae({id:C().optional(),header:C(),align:me(["left","center","right"]).optional()}),ELe=ae({id:C().optional(),cells:Qe(C())}),cX=ae({id:C().optional(),type:Pe("table"),columns:Qe(ALe).min(1).max(6),rows:Qe(ELe).min(1).max(30),showHeader:Yt().optional(),zebra:Yt().optional(),headerBackgroundColor:C().optional(),borderColor:C().optional(),styles:ln,conditions:En}),hLe=ae({id:C().optional(),emoji:C().optional(),iconUrl:C().optional(),iconAlt:C().optional(),title:C(),description:C().optional()}),uX=ae({id:C().optional(),type:Pe("features"),items:Qe(hLe).min(1).max(9),columns:rc([Pe(1),Pe(2),Pe(3)]).optional(),iconSize:Ce().min(fD).max(gD).optional(),variant:me(["cards","plain","icon-left","bordered"]),styles:ln,conditions:En}),dX=ae({id:C().optional(),type:Pe("image-card"),imageUrl:C(),imageAlt:C(),imageHref:C().optional(),title:C(),description:C().optional(),buttonText:C().optional(),buttonUrl:C().optional(),buttonColor:C().optional(),buttonTextColor:C().optional(),tracking:Oo,variant:me(["image-top","image-left","image-right"]),imageHeight:Ce().min(80).max(480).optional(),styles:ln,conditions:En}),yLe=ae({id:C().optional(),text:C()}),bLe=ae({id:C().optional(),name:C(),price:C(),period:C().optional(),description:C().optional(),features:Qe(yLe).max(10),buttonText:C().optional(),buttonUrl:C().optional(),highlighted:Yt().optional(),badgeText:C().optional()}),pX=ae({id:C().optional(),type:Pe("pricing"),plans:Qe(bLe).min(1).max(3),variant:me(["cards","minimal"]),accentColor:C().optional(),tracking:Oo,styles:ln,conditions:En}),mX=ae({id:C().optional(),type:Pe("author"),name:C(),title:C().optional(),avatarUrl:C().optional(),bio:C().optional(),linkText:C().optional(),linkUrl:C().optional(),tracking:Oo,variant:me(["byline","signature","card"]),styles:ln,conditions:En}),fX=ae({id:C().optional(),type:Pe("article"),imageUrl:C().optional(),imageAlt:C().optional(),category:C().optional(),title:C(),excerpt:C().optional(),metaText:C().optional(),url:C(),linkText:C().optional(),tracking:Oo,variant:me(["image-top","image-left","minimal"]),styles:ln,conditions:En}),gX=ae({id:C().optional(),type:Pe("rating"),rating:Ce().min(0).max(5),caption:C().optional(),starColor:C().optional(),align:me(["left","center","right"]).optional(),variant:me(["inline","stacked"]),styles:ln,conditions:En}),CLe=ae({id:C().optional(),value:C(),label:C()}),xX=ae({id:C().optional(),type:Pe("stats"),items:Qe(CLe).min(2).max(4),variant:me(["plain","tinted","divided"]),accentColor:C().optional(),styles:ln,conditions:En}),BLe=ae({id:C().optional(),title:C(),description:C().optional()}),AX=ae({id:C().optional(),type:Pe("steps"),items:Qe(BLe).min(2).max(8),variant:me(["numbered","timeline"]),accentColor:C().optional(),styles:ln,conditions:En}),SLe=ae({id:C().optional(),imageUrl:C().optional(),imageAlt:C().optional(),title:C(),price:C().optional(),url:C().optional()}),EX=ae({id:C().optional(),type:Pe("product-grid"),items:Qe(SLe).min(1).max(12),columns:rc([Pe(2),Pe(3)]).optional(),imageHeight:Ce().min(80).max(480).optional(),variant:me(["plain","cards"]),tracking:Oo,styles:ln,conditions:En}),hX=ae({id:C().optional(),type:Pe("code"),code:C(),theme:C().optional(),styles:ln,conditions:En}),QC=ae({id:C().optional(),type:Pe("image"),src:C(),alt:C(),width:Ce().optional(),widthType:me(["percent","px"]).optional(),height:Ce().optional(),objectFit:me(["cover","contain"]).optional(),href:C().optional(),tracking:Oo,align:me(["left","center","right"]).optional(),caption:C().optional(),frame:me(["none","border","mat"]).optional(),shape:me(["arch","ellipse","leaf","petal","squircle","scallop","flower","blob"]).optional(),styles:ln,conditions:En}),yX=ae({id:C().optional(),type:Pe("card"),title:C(),content:C(),variant:me(["default","feature","callout"]),emoji:C().optional(),styles:ln,conditions:En}),bX=ae({id:C().optional(),type:Pe("cta"),title:C(),description:C(),buttonText:C(),buttonUrl:C(),tracking:Oo,buttonColor:C().optional(),buttonTextColor:C().optional(),styles:ln,conditions:En}),CX=ae({id:C().optional(),type:Pe("social"),links:Qe(ae({platform:me(ED),url:C()})),styles:ln,conditions:En}),vLe=ae({id:C().optional(),type:Pe("logo"),alt:C(),width:Ce().optional(),align:me(["left","center","right"]).optional(),styles:ln,conditions:En}),_Le=ae({id:C().optional(),label:C(),url:C(),tracking:Oo}),BX=ae({id:C().optional(),type:Pe("header"),showLogo:Yt().optional(),logoSrc:C().optional(),logoAlt:C(),logoHref:C().optional(),logoTracking:Oo,logoWidth:Ce().optional(),layout:me(["stacked","logo-left","logo-right"]).optional(),navItems:Qe(_Le).optional(),navAlign:me(["left","center","right"]).optional(),navGap:Ce().optional(),logoNavGap:Ce().optional(),openLinksInNewTab:Yt().optional(),fontFamily:C().optional(),fontSize:Ce().optional(),fontWeight:me(["normal","medium","semibold","bold"]).optional(),linkUnderline:Yt().optional(),accentPosition:me(["none","top","bottom"]).optional(),accentColor:C().optional(),accentHeight:Ce().optional(),styles:ln,conditions:En}),ILe=ae({id:C().optional(),type:Pe("footer"),companyName:C(),address:C(),variant:me(["simple","full"]),reasonText:C().optional(),privacyPolicyUrl:C().optional(),unsubscribeUrl:C().optional(),showUnsubscribe:Yt().optional(),showCompanyName:Yt().optional(),showPrivacyPolicy:Yt().optional(),unsubscribeText:C().optional(),privacyPolicyText:C().optional(),fontFamily:C().optional(),styles:ln,conditions:En}),SX=ae({id:C().optional(),type:Pe("video"),videoUrl:C(),thumbnailUrl:C().optional(),alt:C(),width:Ce().optional(),align:me(["left","center","right"]).optional(),styles:ln,conditions:En}),DLe=ae({key:C(),value:C()}),wLe=ae({title:C().optional(),description:C().optional(),imageUrl:C().optional(),price:C().optional(),compareAtPrice:C().optional(),url:C().optional(),buttonText:C().optional()}),vX=ae({id:C().optional(),type:Pe("product"),productId:C().optional(),title:C(),description:C().optional(),descriptionMaxSentences:Ce().int().min(0).max(10).optional(),imageUrl:C().optional(),url:C().optional(),tracking:Oo,urlMode:me(["static","dynamic"]).optional(),dynamicUrlBase:C().optional(),dynamicUrlParams:Qe(DLe).optional(),price:C().optional(),compareAtPrice:C().optional(),currency:C().optional(),buttonText:C().optional(),buttonColor:C().optional(),buttonTextColor:C().optional(),showButton:Yt().optional(),variant:me(["small","medium","large"]),contentMode:me(["static","dynamic"]).optional(),dynamicPrefix:C().optional(),dynamicPreview:wLe.optional(),styles:ln,conditions:En}),_X=ae({id:C().optional(),type:Pe("discount-code"),variant:me(["dense","medium","large"]),code:C(),label:C().optional(),codeLabel:C().optional(),headline:C().optional(),description:C().optional(),expiresText:C().optional(),showExpires:Yt().optional(),ctaText:C().optional(),ctaUrl:C().optional(),tracking:Oo,accentColor:C().optional(),styles:ln,conditions:En}),IX=ae({id:C().optional(),type:Pe("countdown"),deadline:C(),style:me(s6).optional(),color:C().optional(),showLabels:Yt().optional(),labels:ae({days:C().optional(),hours:C().optional(),minutes:C().optional(),seconds:C().optional()}).optional(),expiredBehavior:me(l6).optional(),expiredMessage:C().optional(),href:C().optional(),tracking:Oo,styles:ln,conditions:En}),TLe=ae({id:C().optional(),label:C(),value:C().optional(),imageUrl:C().optional()}),KZ=Ce().min(bD).max(CD).optional(),JZ=Ce().int().min(BD).max(SD).optional(),YZ=Ce().min(vD).max(_D).optional(),DX=ae({id:C().optional(),type:Pe("poll"),variant:me(["options","nps"]),appearance:me(hD).optional(),question:C(),options:Qe(TLe).default([]),allowMultiple:Yt().optional(),attributeKey:C(),npsLowLabel:C().optional(),npsHighLabel:C().optional(),redirectUrl:C().optional(),confirmationMessage:C().optional(),accentColor:C().optional(),optionRadius:Ce().int().min(0).max(yD).optional(),questionColor:C().optional(),fontFamily:C().optional(),questionFontSize:KZ,questionFontWeight:JZ,questionLetterSpacing:YZ,questionTextTransform:me(db).optional(),optionFontSize:KZ,optionFontWeight:JZ,optionLetterSpacing:YZ,optionTextTransform:me(db).optional(),styles:ln,conditions:En}).superRefine((e,t)=>{if(!e.question.trim())t.addIssue({code:Ai.custom,path:["question"],message:"Poll question cannot be blank"});if(!Sx(e.attributeKey.trim()))t.addIssue({code:Ai.custom,path:["attributeKey"],message:"Poll attribute key is invalid or reserved"});if(!_Z(e.redirectUrl))t.addIssue({code:Ai.custom,path:["redirectUrl"],message:"Poll redirect URL must be an absolute HTTP or HTTPS URL"});if(e.variant!=="options")return;if(e.options.length<2||e.options.length>8)t.addIssue({code:Ai.custom,path:["options"],message:"Option polls require between 2 and 8 answers"});let n=new Set;e.options.forEach((i,o)=>{let a=i.label.trim();if(!a){t.addIssue({code:Ai.custom,path:["options",o,"label"],message:"Poll answer label cannot be blank"});return}if((i.value?.trim()||a).length>vx)t.addIssue({code:Ai.custom,path:["options",o,i.value?.trim()?"value":"label"],message:`Poll answer values cannot exceed ${vx} characters`});let u=o6(i);if(n.has(u))t.addIssue({code:Ai.custom,path:["options",o,"value"],message:"Poll answer values must be unique"});n.add(u)});let r=i6({blockId:e.id??"poll",variant:e.variant,allowMultiple:e.allowMultiple,attributeKey:e.attributeKey,question:e.question,redirectUrl:e.redirectUrl,confirmationMessage:e.confirmationMessage,options:e.options});if(r)t.addIssue({code:Ai.custom,path:["allowMultiple"],message:r})}),kLe=()=>[qC,fLe,eX,tX,nX,rX,iX,QC,wX,NLe,OLe,kX,yX,bX,CX,vLe,BX,ILe,SX,vX,_X,hX,IX,oX,aX,sX,lX,cX,uX,dX,pX,mX,fX,gX,xX,AX,EX,DX];var fc=Fb(()=>l8($C,s8("type",kLe()))),RLe=Fb(()=>ae({id:C().optional(),children:Qe(fc),width:Ce().optional(),padding:ae({top:Ce().optional(),bottom:Ce().optional(),left:Ce().optional(),right:Ce().optional()}).optional(),backgroundColor:C().optional(),borderRadius:Ce().optional(),borderWidth:Ce().optional(),borderColor:C().optional(),height:Ce().optional(),contentLayout:me(["stack","space-between"]).optional(),contentSpacing:Ce().min(0).max(64).optional()})),wX=ae({id:C().optional(),type:Pe("columns"),columns:Qe(RLe),gap:Ce().optional(),gapMode:me(["between","equal"]).optional(),repeatSource:C().optional(),repeatItemAlias:C().optional(),repeatBlockId:C().optional(),repeatRowPosition:me(["single","first","middle","last"]).optional(),styles:ln,conditions:En});function FLe(e){if(e.type==="columns")return e.columns.map((t)=>t.children);if(e.type==="conditional-group")return[e.ifBranch.children,e.elseBranch.children];if(e.type==="repeat"||e.type==="group")return[e.children];return[]}function TX(e,t,n,r=["children"]){e.forEach((i,o)=>{let a=[...r,o];if(i.type==="footer")t.addIssue({code:Ai.custom,path:a,message:"Managed email footers cannot be placed inside groups."});let c=i.type==="group"?n+1:n;if(c>ub){t.addIssue({code:Ai.custom,path:a,message:`Email groups can be nested up to ${ub} levels.`});return}for(let u of FLe(i))TX(u,t,c,[...a,"children"])})}var NLe=ae({id:C().optional(),type:Pe("group"),label:C().trim().min(1).max(120).default("Group"),layout:me(Lq).default("stack"),columns:Ce().int().min(1).max(4).default(2),gap:Ce().int().min(0).max(64).default(16),padding:Ce().int().min(0).max(64).default(0),overlayColor:C().default("#000000"),overlayPosition:me(Mq).default("center"),overlayShade:Ce().int().min(0).max(100).default(35),children:Qe(fc).min(1).max(100),styles:ln,conditions:En}).superRefine((e,t)=>{TX(e.children,t,1)}),PLe=ae({columns:Ce().int().min(1).max(4).optional(),gap:Ce().min(0).max(64).optional(),itemStyles:ae({padding:ae({top:Ce().optional(),bottom:Ce().optional(),left:Ce().optional(),right:Ce().optional()}).optional(),backgroundColor:C().optional(),borderRadius:Ce().optional(),borderWidth:Ce().optional(),borderColor:C().optional(),height:Ce().optional(),contentLayout:me(["stack","space-between"]).optional(),contentSpacing:Ce().min(0).max(64).optional()}).optional(),presetId:C().optional()}).optional(),ZZ=Fb(()=>ae({id:C().optional(),children:Qe(fc)})),OLe=ae({id:C().optional(),type:Pe("conditional-group"),conditions:Qe(XZ).default([]),ifBranch:ZZ,elseBranch:ZZ,styles:ln}),LLe=ae({search:C().optional(),tags:Qe(C()).optional(),vendors:Qe(C()).optional(),productTypes:Qe(C()).optional(),collectionIds:Qe(C()).optional(),minPriceCents:Ce().int().min(0).optional(),maxPriceCents:Ce().int().min(0).optional(),inStockOnly:Yt().optional()}),MLe=ae({mode:me(Uq),strategy:me(qq).optional(),lookbackDays:Ce().int().min(1).max(365).optional(),providers:Qe(me(vm)).optional(),products:Qe(ae({provider:me(vm),providerProductId:C().min(1),title:C().optional(),imageUrl:C().optional()})).optional(),filters:LLe.optional(),sort:me($q).optional(),excludePurchased:Yt().optional(),rotateSeen:Yt().optional(),relatedToEventProduct:Yt().optional(),eventProductRelation:ae({matchOn:Qe(me(["tags","collections","productType","vendor"])).min(1).optional(),require:me(["any","all"]).optional()}).optional()}),kX=ae({id:C().optional(),type:Pe("repeat"),source:C().min(1).default("items"),itemAlias:C().min(1).default("item"),maxItems:Ce().int().min(0).max(100).optional().default(10),layout:PLe,productSource:MLe.optional(),children:Qe(fc).default([]),styles:ln,conditions:En});var ULe=s8("type",[qC,eX,tX,nX,rX,iX,QC,wX,kX,yX,bX,CX,SX,vX,_X,hX,oX,aX,sX,lX,cX,uX,dX,pX,mX,fX,gX,xX,AX,EX,BX,IX,DX]),Nht=new Set(ULe.options.map((e)=>e.shape.type.value)),Pht=[{type:"heading",creatable:!0,editable:!0,example:{type:"heading",content:"Title",level:1},notes:[`Optional indexText (e.g. "01") renders as a muted number at the heading's own size beside it - use it only when the email's layout is intentionally editorial; for "how it works" steps prefer the "steps" block.`]},{type:"text",creatable:!0,editable:!0,example:{type:"text",content:"<p>Paragraph with <strong>bold</strong></p>",variant:"paragraph"},notes:["Use proper HTML inside content, for example <p>, <strong>, <em>, and <a>."]},{type:"list",creatable:!0,editable:!0,example:{type:"list",variant:"bullet",items:[{content:"First point"},{content:"Second point"}]},notes:['Variants: "bullet", "numbered", or "checklist".','Use variant "checklist" for benefits, included features, or completed items - each item gets a checkmark in the brand primary color automatically.',"List item content must be plain text. Do not include <p>, <strong>, <em>, <br>, or other HTML tags in list items.","If bullet-style copy needs bold labels, use text blocks with bullet characters and HTML instead of a list block."]},{type:"button",creatable:!0,editable:!0,example:{type:"button",text:"Click Me",url:"https://example.com",variant:"primary"},notes:["Use buttonColor and buttonTextColor only for explicit color changes.","Leave buttonColor and buttonTextColor unset to use the email's primary brand color automatically.",'Primary CTA buttons use styles.textAlign: "center". Keep secondary text links aligned with their surrounding copy.','Variants: "primary" (filled brand color), "secondary" (outlined), "pill" (filled, fully rounded), "ink" (filled near-black, editorial), "link" (letterspaced uppercase text link with a trailing arrow - use for quiet secondary actions).']},{type:"spacer",creatable:!0,editable:!0,example:{type:"spacer",height:24}},{type:"divider",creatable:!0,editable:!0,example:{type:"divider",variant:"line"},notes:['Variants: "line" (full-width rule), "dots" (three centered dots for editorial breaks), "accent" (short thick bar in the brand primary color, great under headings).',"Leave color unset to use the theme border color (or the primary color for accent)."]},{type:"image",creatable:!0,editable:!0,example:{type:"image",src:"https://...",alt:"Description",width:100,widthType:"percent",height:240,objectFit:"cover",href:"https://example.com",align:"center"},notes:["For image blocks, use percentage widths only unless you are editing an existing legacy pixel-based block.","Never invent image URLs. Only use URLs that come from the company profile, scraped website content, or the user's request. If you have no real image URL, do not create an image block.","Only combine a fixed height with objectFit cover for large hero or banner photos. Never use image blocks for icons, logos, or badges - for social icons use the social block instead.",'Optional caption renders as a small muted line under the image. Optional frame: "border" (hairline around the photo) or "mat" (white gallery mat inside a hairline) make photography feel art-directed.','Optional shape masks the image into an organic outline ("arch", "ellipse", "leaf", "petal", "squircle", "scallop", "flower", "blob"), baked server-side so it renders in every email client, overriding frame and corner radius. Use media-library uploads or Pexels/Unsplash stock URLs as the src; other external URLs are only shaped after the editor mirrors them into the library, and merge-tag sources are never shaped.']},{type:"columns",creatable:!0,editable:!0,example:{type:"columns",columns:[{children:[{type:"text",content:"<p>Left column</p>",variant:"paragraph"}]},{children:[{type:"text",content:"<p>Right column</p>",variant:"paragraph"}]}]},notes:['Each column supports backgroundColor, borderRadius, and padding for tinted tiles, e.g. { "backgroundColor": "#f9fafb", "borderRadius": 12, "padding": { "top": 20, "bottom": 20, "left": 20, "right": 20 } }.',"A single-column columns block with a tinted column makes a section wrapper (hero, callout).","Use neutral tints (#f9fafb, #f3f4f6) only - never the brand color as a column background."]},{type:"group",creatable:!1,editable:!1,reason:"structural layout wrapper managed by the user in the editor",example:{type:"group",label:"Group",layout:"stack",columns:2,gap:16,padding:0,overlayColor:"#000000",overlayShade:35,overlayPosition:"center",children:[{type:"heading",content:"Grouped content",level:2}]},notes:["Groups are structural editor-managed wrappers and are not emitted by AI generation.","Layouts are stack, row, grid, and overlay. Overlay requires exactly one direct image child.",`Generic groups may be nested up to ${ub} levels and cannot contain a managed footer anywhere in their descendants.`]},{type:"repeat",creatable:!0,editable:!0,example:{type:"repeat",source:"items",itemAlias:"item",maxItems:10,layout:{columns:2,gap:16,itemStyles:{contentLayout:"space-between"}},children:[{type:"heading",content:"{{item.title}}",level:3},{type:"text",content:"<p>{{item.description}}</p>",variant:"paragraph"}]},notes:["Use repeat blocks when the email needs to render one group of child blocks per array item.","source is a variable path to an array, for example items or order.lineItems.","Use itemAlias to define the scoped tag prefix used by child blocks, for example {{item.title}}.","Keep maxItems set to a reasonable cap so unexpectedly large payloads cannot produce huge emails.","Set layout only for grid repeats such as product or event cards. layout.columns controls items per row, and each item takes 100 / columns percent of the row.","Use layout.itemStyles.contentLayout = space-between to align each child row across repeated items, with or without a fixed item height.","Use layout.itemStyles.contentSpacing (px, 0-64) to set a uniform vertical gap between the blocks inside each item; 0 packs them flush. Unset keeps the theme's default block spacing.","Set productSource to fill the list from the synced store catalog instead of variables. mode recommended ranks per the recommendation engine; all, specific (with products refs), and filtered (with filters like tags, collectionIds, vendors, productTypes, min/maxPriceCents) read the catalog at send time.","productSource.strategy picks how mode recommended ranks: personalized (default, per-recipient browsing), bestsellers (store-wide order volume), newest, or recently_viewed. productSource.lookbackDays (1-365, default 30) sets the activity window for personalized, bestsellers, and recently_viewed. strategy is ignored by modes all and filtered, which order by productSource.sort (newest, price_asc, price_desc, title; default newest); mode specific preserves the order of its products array and ignores sort.","For an identical, non-personalized list for every recipient, use mode recommended with strategy bestsellers or newest plus excludePurchased false and rotateSeen false - both default to true under mode recommended, so the list otherwise varies per recipient. mode all with sort newest is a plain catalog feed, not a best-seller ranking.","With productSource set, child blocks read product fields via the alias: {{product.title}}, {{product.imageUrl}}, {{product.price}}, {{product.url}}, {{product.buttonText}}."]},{type:"card",creatable:!0,editable:!0,example:{type:"card",title:"Card Title",content:"Card text",variant:"default"},notes:[`The "emoji" field is OPTIONAL and follows the EMOJI USAGE policy: only add it when the brand's own copy uses emojis.`]},{type:"code",creatable:!0,editable:!0,example:{type:"code",code:"curl https://api.sequenzy.com/v1/subscribers"},notes:["Use for developer-facing snippets. The content is plain text in a monospace panel - it is not syntax highlighted and must not contain HTML tags."]},{type:"cta",creatable:!0,editable:!0,example:{type:"cta",title:"CTA Title",description:"Description",buttonText:"Button",buttonUrl:"https://example.com"},notes:["Renders on the company's primary brand color automatically - do not set a backgroundColor.","Works well as a hero for launches and sales, or as the single closing CTA section. Use at most one per email."]},{type:"video",creatable:!0,editable:!0,example:{type:"video",videoUrl:"https://www.youtube.com/watch?v=dQw4w9WgXcQ",alt:"Video preview",width:100,align:"center"},notes:["Emails cannot play video - this renders a thumbnail with a play button that links to YouTube.","Set `thumbnailUrl` to use a custom cover image instead of the YouTube-hosted still."]},{type:"product",creatable:!0,editable:!0,example:{type:"product",title:"Product Name",description:"Short product description",imageUrl:"https://...",url:"https://example.com/product",price:"$29",buttonText:"Shop Now",showButton:!0,variant:"medium"}},{type:"discount-code",creatable:!0,editable:!0,example:{type:"discount-code",variant:"medium",code:"SUMMER20",label:"Your discount code",description:"Use the code below at checkout to redeem your discount."},notes:["Only create this block when the prompt explicitly supplies a usable literal discount code, or when the email is part of an automation that runs a 'create discount' step before the email.","Variants: 'dense' (compact code row), 'medium' (card with optional CTA), 'large' (hero banner with colored header).","For a literal code supplied by the prompt, copy that exact value into code. For an automation-backed discount, use {{discount.code}} so the platform can inject the per-subscriber value at send time. Never use unresolved {{discount.*}} variables outside that automation context.","For automation-backed copy, prefer {{discount.value}} (renders as '20% off' or '$10 off' depending on discount type). Use {{date.discount.expiresAt}} for expiration copy and {{discount.percentOff}}, {{discount.amountOff}}, {{discount.currency}} only when you need raw values. For literal-code campaigns, use only offer details explicitly supplied by the prompt.","Only set ctaText and ctaUrl when you have a real checkout or landing-page URL.","Set showExpires: true and expiresText only when an expiration is relevant."]},{type:"hero",creatable:!0,editable:!0,example:{type:"hero",variant:"image",backgroundImage:"https://...",overlayColor:"#111827",overlayOpacity:44,eyebrow:"New collection",heading:"Made for golden hour",subheading:"Warm-weather staples, cut to move with you.",buttonText:"Shop the drop",buttonUrl:"https://example.com",minHeight:320,contentAlign:"center",styles:{bleed:!0}},notes:["The signature opening section: headline and CTA overlaid on a full-width background image. Prefer this over a plain image + heading when a suitable image is available.","When the hero includes buttonText/buttonUrl, that button may be the email's one primary CTA. Do not add a redundant CTA at the bottom.",'Use variant "color" with styles.backgroundColor when no good image exists - it renders the same layout as a solid band.',"Always set styles.bleed: true so the hero runs edge-to-edge. Use it as the FIRST content block only.","Keep overlayOpacity between 30 and 60 so the image stays visible while text remains readable. Text is always white over images.","backgroundImage must be a real image URL from the available images list - never invent URLs."]},{type:"testimonial",creatable:!0,editable:!0,example:{type:"testimonial",quote:"I set this up in ten minutes and our repeat orders doubled in a month.",authorName:"Maya Chen",authorTitle:"Founder, Wildgrain Bakery",rating:5,variant:"card"},notes:['Variants: "card" (tinted panel with border radius), "minimal" (left accent border, editorial), "centered" (big centered quote, no panel), "quote" (serif pull-quote with a short accent rule), "editorial" (large serif quote between thin hairline rules - the most magazine-like treatment).',"Use for social proof sections. Quote must be plain text without HTML.","Set rating (1-5) only for review-style quotes. Set avatarUrl only with a real image URL.","Leave accentColor unset to use the brand primary color."]},{type:"gallery",creatable:!0,editable:!0,example:{type:"gallery",layout:"two-up",images:[{src:"https://...",alt:"Lookbook photo 1"},{src:"https://...",alt:"Lookbook photo 2"}],gap:8},notes:['Layouts: "two-up" (pairs per row), "three-up" (triples per row), "mosaic" (first image full width, remaining images in a row below - use 3 images).',"Use for lookbooks, product roundups, event photos. Every src must be a real image URL from the available images list.","Add href per image when each image should link somewhere."]},{type:"badge",creatable:!0,editable:!0,example:{type:"badge",text:"NEW",variant:"soft",align:"center"},notes:['Small eyebrow label rendered as a pill. Variants: "pill" (filled with the brand color), "outline" (bordered), "soft" (tinted background, brand-colored text).',"Use a badge + heading instead of a styled uppercase text block for eyebrows outside of hero blocks.","Keep text short (1-3 words, uppercase reads best)."]},{type:"table",creatable:!0,editable:!0,example:{type:"table",columns:[{header:"Plan"},{header:"Price",align:"right"},{header:"Seats",align:"right"}],rows:[{cells:["Starter","$19/mo","3"]},{cells:["Pro","$49/mo","10"]}],showHeader:!0,zebra:!0},notes:["Use for structured data: pricing tiers, plan comparisons, specs, schedules, order summaries.","Cells are plain text only - no HTML. Keep to 2-4 columns so it stays readable on mobile.","Every row's cells array must have exactly one entry per column.","Leave colors unset - header and borders follow the email theme automatically."]},{type:"features",creatable:!0,editable:!0,example:{type:"features",variant:"cards",columns:3,items:[{title:"Fast setup",description:"Live in minutes."},{title:"Secure",description:"SOC 2 compliant."},{title:"Scalable",description:"Grows with you."}]},notes:['Variants: "cards" (tinted tiles), "plain" (centered, minimal), "icon-left" (icon beside text rows - good for longer descriptions), "bordered" (left-aligned rows split by hairline rules - the strongest choice for brands with no imagery).',`The per-item "emoji" field is OPTIONAL and follows the EMOJI USAGE policy: only add emojis when the brand's own copy uses them. Every layout is designed to work without them.`,`Items can use a custom icon image instead of an emoji via "iconUrl" (plus optional "iconAlt"), sized for the whole block by "iconSize" (16-64 px). Only use image URLs that exist in the brand context or the user's request - never invent one.`,"Prefer this block over hand-built columns of card blocks for feature/benefit grids.","Use 3 or 6 items with columns: 3, or 2 or 4 items with columns: 2. Titles 1-4 words, descriptions one short sentence."]},{type:"image-card",creatable:!0,editable:!0,example:{type:"image-card",variant:"image-left",imageUrl:"https://...",imageAlt:"Feature screenshot",title:"Meet the new dashboard",description:"Everything you track, in one place.",buttonText:"Take a look",buttonUrl:"https://example.com"},notes:['Variants: "image-top" (stacked card), "image-left" / "image-right" (side-by-side).',"Use for article teasers, feature spotlights, and product stories. imageUrl must come from the available images list.","Alternate image-left and image-right when stacking several in a row (editorial zig-zag)."]},{type:"pricing",creatable:!0,editable:!0,example:{type:"pricing",variant:"cards",plans:[{name:"Pro",price:"$49",period:"/month",features:[{text:"Unlimited campaigns"}],buttonText:"Choose Pro",buttonUrl:"https://example.com/pricing",highlighted:!0}]},notes:["Only use plan names, prices, features, and URLs present in the brand context. Never invent pricing."]},{type:"author",creatable:!0,editable:!0,example:{type:"author",variant:"signature",name:"Alex Morgan",title:"Founder"},notes:["Set avatarUrl only when a real image URL is available."]},{type:"article",creatable:!0,editable:!0,example:{type:"article",variant:"image-top",imageUrl:"https://...",imageAlt:"Article cover",title:"A useful guide",excerpt:"A short preview of what readers will learn.",url:"https://example.com/blog/guide",linkText:"Read more"},notes:["Use only real article URLs and real image URLs from the available context."]},{type:"rating",creatable:!0,editable:!0,example:{type:"rating",variant:"inline",rating:4.5,caption:"4.5 from verified customers",align:"center"}},{type:"stats",creatable:!0,editable:!0,example:{type:"stats",variant:"tinted",items:[{value:"12k",label:"Customers"},{value:"99.9%",label:"Uptime"}]},notes:["Only use metrics present in the brand context. Never invent them."]},{type:"steps",creatable:!0,editable:!0,example:{type:"steps",variant:"timeline",items:[{title:"Connect",description:"Link your account."},{title:"Launch",description:"Send your first campaign."}]}},{type:"product-grid",creatable:!0,editable:!0,example:{type:"product-grid",variant:"plain",columns:3,items:[{imageUrl:"https://...",imageAlt:"Product",title:"Everyday Tote",price:"$48",url:"https://example.com/products/tote"}]},notes:["Use only real products, prices, URLs, and image URLs from the available context."]},{type:"header",creatable:!0,editable:!0,example:{type:"header",logoAlt:"Company logo",navItems:[{id:"nav-blog",label:"Blog",url:"https://example.com/blog"},{id:"nav-pricing",label:"Pricing",url:"https://example.com/pricing"}]},notes:["Use showLogo, layout, navItems, and optional logoSrc/logoHref to build compact newsletter headers.","The logo falls back to company branding automatically; set logoSrc only when the user asks for a custom header logo.","When the header contains only a logo and no navigation, keep the logo centered. Logo-plus-navigation headers may use a split layout.","Use as the FIRST block for newsletters and updates (before any hero). Use at most one per email.","Only use real URLs from the company website for nav links."]},{type:"countdown",creatable:!0,editable:!0,example:{type:"countdown",deadline:"2026-08-01T00:00:00.000Z",style:"boxed",showLabels:!0},notes:["Live countdown timer rendered as a server-generated GIF that works in Gmail, Apple Mail, and Outlook.","ONLY use when the email references a genuine deadline: a sale end, launch, webinar, or expiring offer. Never invent urgency.","deadline must be a real future ISO 8601 timestamp taken from the user's request or campaign context - never a made-up date.",'Styles: "boxed", "minimal", "bold", "stacked", "circle", "circle-filled". Uses the brand primary color automatically.','Place it directly under the hero or headline that explains the deadline, and pair with expiredBehavior: "message" plus a short expiredMessage for late opens.']},{type:"poll",creatable:!0,editable:!0,example:{type:"poll",variant:"options",question:"What did you think of this email?",options:[{label:"Loved it",value:"loved"},{label:"It was ok",value:"ok"},{label:"Not for me",value:"not_for_me"}],attributeKey:"email_feedback"},notes:["Each answer renders as a tracked link; clicking stores the answer in the subscriber attribute named by attributeKey and fires a poll.answered event.","Variants: 'options' renders one button per option; 'nps' renders a 0-10 score scale (options are ignored, scores are stored as numbers).","attributeKey must use only letters, digits, underscores, dots, or dashes (e.g. nps_score, email_feedback). Reuse the same key across sends when the latest answer should win.","For NPS use attributeKey nps_score and optionally npsLowLabel / npsHighLabel for the scale captions.","Set redirectUrl only when the user wants respondents to land on their own page instead of the hosted thank-you page.","Appearances: 'soft' (default), 'pill', 'outline', 'filled', 'pop', 'brutal', 'quiz', 'minimal'. accentColor recolors the answer buttons for every appearance, including 'brutal' (which stays monochrome on the brand color when accentColor is unset).","optionRadius sets the answer-button corner radius in px (0 = square) and overrides the appearance default; leave it unset to keep it. styles.borderRadius only rounds the block container, not the buttons.","questionColor recolors the question line only; styles.textColor recolors the question and the answer labels together.","Typography: fontFamily (whole block, defaults to the email font) plus optionFontSize/optionFontWeight/optionLetterSpacing/optionTextTransform for the answer labels and questionFontSize/questionFontWeight/questionLetterSpacing/questionTextTransform for the question. Sizes and tracking are px; weight is 100-900; textTransform is 'none' or 'uppercase'.","Leave a typography field unset to keep the built-in value (16px/600 question, 14px/600 answers) or the appearance default - only 'brutal' uppercases and tracks answers, and optionTextTransform: 'none' turns that off while keeping its slabs.","Alignment is styles.textAlign, which moves the question and the answer labels together ('quiz' and 'minimal' always keep answers start-aligned)."]},{type:"conditional-group",creatable:!1,editable:!1,reason:"conditional if/else wrapper managed by the user in the editor",example:{type:"conditional-group",conditions:[{id:"f1",field:"attribute",operator:"is",value:"plan:pro"}],ifBranch:{children:[]},elseBranch:{children:[]}},notes:["Every condition must match for ifBranch to render; otherwise elseBranch does. An empty conditions array always renders ifBranch.","Each field accepts only its own operators, so `tag` takes contains, not_contains, is_empty, and is_not_empty but not `is`. The field and operator enums pool every field's operators together - the per-field table is `conditionFields` in this response.",'Values are strings with a per-field shape: "attributeName:value" for attribute, "variablePath:value" for variable, a tag name for tag, an id for list and segment, "eventName:timeRange" for event. `conditionFields` in this response carries the format and a worked example for each.',"Fields that read stored subscriber state (tag, segment, list, status, event, purchases, engagement) are evaluated per recipient at send time. A render preview can only evaluate them for a stored subscriberId - or, for tag, an inline subscriber that states `tags` - and reports the rest in unevaluatedConditions rather than failing.","Anything a preview could not evaluate renders as false, so seeing elseBranch in preview HTML is not evidence that the condition is false for a real recipient.","Every block type also takes a `conditions` array of the same filters, which hides that one block when the conditions do not match. Reach for conditional-group when there has to be a fallback."]},{type:"html",creatable:!1,editable:!0,reason:"raw HTML block, avoid creating it from AI output",example:{type:"html",content:"<table>...</table>"}},{type:"social",creatable:!0,editable:!0,example:{type:"social",links:[{platform:"x",url:"https://x.com/example"},{platform:"linkedin",url:"https://linkedin.com/company/example"}]},notes:["Use this block whenever the user asks for social icons, social links, or a follow-us section. Never build social icon rows out of image, columns, or button blocks - the platform renders proper hosted icons for this block automatically.",`Allowed platform values: ${ED.map((e)=>`"${e}"`).join(", ")}.`,"Prefer the platforms and exact URLs listed under Social Profiles in the company profile. If no social profiles are listed, include the platforms the user asked for and use the company website URL as each link's url - the renderer swaps in the company's saved links automatically when they exist."]},{type:"logo",creatable:!1,editable:!1,reason:"managed by company branding",example:{type:"logo",alt:"Company logo",align:"center"}},{type:"footer",creatable:!1,editable:!1,reason:"managed by compliance and company settings",example:{type:"footer",companyName:"Acme",address:"123 Main St",variant:"full"}}];var $Le={AL:"Alabama",AK:"Alaska",AZ:"Arizona",AR:"Arkansas",CA:"California",CO:"Colorado",CT:"Connecticut",DE:"Delaware",DC:"District of Columbia",FL:"Florida",GA:"Georgia",HI:"Hawaii",ID:"Idaho",IL:"Illinois",IN:"Indiana",IA:"Iowa",KS:"Kansas",KY:"Kentucky",LA:"Louisiana",ME:"Maine",MD:"Maryland",MA:"Massachusetts",MI:"Michigan",MN:"Minnesota",MS:"Mississippi",MO:"Missouri",MT:"Montana",NE:"Nebraska",NV:"Nevada",NH:"New Hampshire",NJ:"New Jersey",NM:"New Mexico",NY:"New York",NC:"North Carolina",ND:"North Dakota",OH:"Ohio",OK:"Oklahoma",OR:"Oregon",PA:"Pennsylvania",RI:"Rhode Island",SC:"South Carolina",SD:"South Dakota",TN:"Tennessee",TX:"Texas",UT:"Utah",VT:"Vermont",VA:"Virginia",WA:"Washington",WV:"West Virginia",WI:"Wisconsin",WY:"Wyoming"};var $ht=new Set(Object.values($Le));var qLe=s8("type",[qC,QC]),QLe=["skip","exit"],zLe=ae({label:C(),blocks:Qe(qLe),ineligibleAction:me(QLe).optional()});var HLe=["sunday","monday","tuesday","wednesday","thursday","friday","saturday"];var Qht=[...HLe];var jLe=`@£$¥èéùìòÇ
349
- Øø\rÅåΔ_ΦΓΛΩΠΨΣΘΞÆæßÉ !"#¤%&'()*+,-./0123456789:;<=>?`+"¡ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÑܧ¿abcdefghijklmnopqrstuvwxyzäöñüà",GLe="|^€{}[]~\\\f",oyt=new Set(jLe),ayt=new Set(GLe);function Ve(e,t){return e.map((n)=>[n,t])}var lyt=new Map([...Ve(["203","475","860","959"],"America/New_York"),...Ve(["302"],"America/New_York"),...Ve(["202","771"],"America/New_York"),...Ve(["239","305","321","352","386","407","561","656","689","727"],"America/New_York"),...Ve(["754","772","786","813","863","904","941","954"],"America/New_York"),...Ve(["229","404","470","478","678","706","762","770","912","943"],"America/New_York"),...Ve(["260","317","463","765"],"America/New_York"),...Ve(["502","606","859"],"America/New_York"),...Ve(["207"],"America/New_York"),...Ve(["240","301","410","443","667"],"America/New_York"),...Ve(["339","351","413","508","617","774","781","857","978"],"America/New_York"),...Ve(["231","248","269","313","517","586","616","734","810","947"],"America/New_York"),...Ve(["989"],"America/New_York"),...Ve(["603"],"America/New_York"),...Ve(["201","551","609","640","732","848","856","862","908","973"],"America/New_York"),...Ve(["212","315","332","347","363","516","518","585","607","631"],"America/New_York"),...Ve(["646","680","716","718","838","845","914","917","929","934"],"America/New_York"),...Ve(["252","336","704","743","828","910","919","980","984"],"America/New_York"),...Ve(["216","220","234","283","326","330","380","419","440","513"],"America/New_York"),...Ve(["567","614","740","937"],"America/New_York"),...Ve(["215","223","267","272","412","445","484","570","610","717"],"America/New_York"),...Ve(["724","814","878"],"America/New_York"),...Ve(["401"],"America/New_York"),...Ve(["803","839","843","854","864"],"America/New_York"),...Ve(["865"],"America/New_York"),...Ve(["802"],"America/New_York"),...Ve(["276","434","540","571","703","757","804"],"America/New_York"),...Ve(["304","681"],"America/New_York"),...Ve(["416","437","647","905","289","365","226","519","548","613"],"America/New_York"),...Ve(["343","705","249"],"America/New_York"),...Ve(["418","581","367","438","514","450","579","819","873"],"America/New_York"),...Ve(["205","251","256","334","659","938"],"America/Chicago"),...Ve(["479","501","870"],"America/Chicago"),...Ve(["217","224","309","312","331","447","618","630","708","773"],"America/Chicago"),...Ve(["779","815","847","872"],"America/Chicago"),...Ve(["219"],"America/Chicago"),...Ve(["319","515","563","641","712"],"America/Chicago"),...Ve(["316","913"],"America/Chicago"),...Ve(["225","318","337","504","985"],"America/Chicago"),...Ve(["218","320","507","612","651","763","952"],"America/Chicago"),...Ve(["228","601","662","769"],"America/Chicago"),...Ve(["314","417","573","636","660","816"],"America/Chicago"),...Ve(["402","531"],"America/Chicago"),...Ve(["405","539","572","580","918"],"America/Chicago"),...Ve(["615","629","731","901"],"America/Chicago"),...Ve(["210","214","254","281","325","346","361","409","430","469"],"America/Chicago"),...Ve(["512","682","713","726","737","806","817","830","832","903"],"America/Chicago"),...Ve(["936","940","945","956","972","979"],"America/Chicago"),...Ve(["262","414","534","608","715","920"],"America/Chicago"),...Ve(["204","431"],"America/Chicago"),...Ve(["303","719","720","970","983"],"America/Denver"),...Ve(["406"],"America/Denver"),...Ve(["505","575"],"America/Denver"),...Ve(["915"],"America/Denver"),...Ve(["385","435","801"],"America/Denver"),...Ve(["307"],"America/Denver"),...Ve(["403","587","780","825","368"],"America/Denver"),...Ve(["480","520","602","623"],"America/Phoenix"),...Ve(["209","213","279","310","323","341","350","369","408","415"],"America/Los_Angeles"),...Ve(["424","442","510","530","559","562","619","626","628","650"],"America/Los_Angeles"),...Ve(["657","661","669","707","714","747","760","805","818","820"],"America/Los_Angeles"),...Ve(["831","840","858","909","916","925","949","951"],"America/Los_Angeles"),...Ve(["702","725"],"America/Los_Angeles"),...Ve(["503","971"],"America/Los_Angeles"),...Ve(["206","253","360","425","509","564"],"America/Los_Angeles"),...Ve(["604","778","236","672"],"America/Los_Angeles"),...Ve(["808"],"Pacific/Honolulu"),...Ve(["902","782","506","428"],"America/Halifax"),...Ve(["306","639","474"],"America/Regina"),...Ve(["787","939","340"],"America/Puerto_Rico"),...Ve(["671","670"],"Pacific/Guam"),...Ve(["684"],"Pacific/Pago_Pago")]);var c6=["gmail","microsoft","yahoo","icloud","orange","free","sfr","laposte","comcast","gmx","proton","other"],VLe=["gmail.com","googlemail.com"],WLe=["outlook.com","outlook.co.uk","outlook.fr","outlook.de","outlook.es","outlook.it","outlook.jp","outlook.com.au","outlook.com.br","outlook.be","outlook.co.nz","outlook.co.th","outlook.com.ar","outlook.hu","outlook.ie","outlook.pt","hotmail.com","hotmail.co.uk","hotmail.fr","hotmail.de","hotmail.es","hotmail.it","hotmail.be","hotmail.ca","hotmail.ch","hotmail.co.id","hotmail.co.jp","hotmail.co.nz","hotmail.co.th","hotmail.com.ar","hotmail.com.au","hotmail.com.br","hotmail.com.hk","hotmail.dk","hotmail.fi","hotmail.gr","hotmail.nl","hotmail.no","hotmail.se","live.com","live.co.uk","live.fr","live.de","live.nl","live.at","live.be","live.ca","live.cn","live.co.za","live.com.ar","live.com.au","live.com.mx","live.com.pt","live.com.sg","live.dk","live.fi","live.hk","live.ie","live.in","live.it","live.jp","live.no","live.se","msn.com","windowslive.com"],KLe=["yahoo.com","yahoo.co.uk","yahoo.fr","yahoo.de","yahoo.es","yahoo.it","yahoo.ca","yahoo.com.au","yahoo.com.br","yahoo.co.jp","yahoo.co.in","yahoo.co.id","yahoo.co.kr","yahoo.co.nz","yahoo.co.th","yahoo.com.ar","yahoo.com.hk","yahoo.com.mx","yahoo.com.my","yahoo.com.ph","yahoo.com.sg","yahoo.com.tw","yahoo.dk","yahoo.gr","yahoo.ie","yahoo.in","yahoo.no","yahoo.pl","yahoo.ro","yahoo.se","ymail.com","rocketmail.com","aol.com","aim.com","aol.co.uk","aol.de","aol.fr","netscape.net","verizon.net","att.net","sbcglobal.net","bellsouth.net","swbell.net","pacbell.net","prodigy.net","ameritech.net","snet.net","flash.net","nvbell.net","currently.com","cox.net","frontier.com","rogers.com"],JLe=["icloud.com","me.com","mac.com"],YLe=["orange.fr","wanadoo.fr","orange.be","wanadoo.es"],ZLe=["free.fr","aliceadsl.fr"],XLe=["sfr.fr","sfr.net","neuf.fr","cegetel.net","club-internet.fr","noos.fr","numericable.fr","9online.fr"],eMe=["laposte.net"],tMe=["comcast.net","xfinity.com"],nMe=["gmx.net","gmx.de","gmx.at","gmx.ch","gmx.com","gmx.fr","gmx.co.uk","web.de"],rMe=["proton.me","protonmail.com","protonmail.ch","pm.me"],Ayt=new Map([...VLe.map((e)=>[e,"gmail"]),...WLe.map((e)=>[e,"microsoft"]),...KLe.map((e)=>[e,"yahoo"]),...JLe.map((e)=>[e,"icloud"]),...YLe.map((e)=>[e,"orange"]),...ZLe.map((e)=>[e,"free"]),...XLe.map((e)=>[e,"sfr"]),...eMe.map((e)=>[e,"laposte"]),...tMe.map((e)=>[e,"comcast"]),...nMe.map((e)=>[e,"gmx"]),...rMe.map((e)=>[e,"proton"])]);function RX(e){if(e==="google")return"gmail";if(e==="apple")return"icloud";if(e==="free-fr")return"free";return e}var Eyt=new Map(Hg.flatMap(({provider:e,domains:t})=>t.map((n)=>[n,RX(e)])));var iMe=[...new Set([...c6,...Hg.map(({provider:e})=>RX(e))])],hyt=new Set(iMe);var Bs={hold:{deferralRate:0.1,complaintRate:0.001},reduce:{deferralRate:0.2,complaintRate:0.003}},oMe={gmail:{initialDailyCapacity:500,capacityGrowthRate:0.35,...Bs},microsoft:{initialDailyCapacity:250,capacityGrowthRate:0.15,...Bs},yahoo:{initialDailyCapacity:300,capacityGrowthRate:0.3,...Bs},icloud:{initialDailyCapacity:150,capacityGrowthRate:0.25,...Bs},orange:{initialDailyCapacity:300,capacityGrowthRate:0.2,...Bs},free:{initialDailyCapacity:150,capacityGrowthRate:0.2,hold:{deferralRate:0.25,complaintRate:0.001},reduce:{deferralRate:0.4,complaintRate:0.003}},sfr:{initialDailyCapacity:100,capacityGrowthRate:0.2,...Bs},laposte:{initialDailyCapacity:100,capacityGrowthRate:0.2,...Bs},comcast:{initialDailyCapacity:150,capacityGrowthRate:0.2,...Bs},gmx:{initialDailyCapacity:150,capacityGrowthRate:0.2,...Bs},proton:{initialDailyCapacity:150,capacityGrowthRate:0.2,...Bs},other:{initialDailyCapacity:150,capacityGrowthRate:0.2,...Bs}};var u6=["product-info","domain","tracking","localization","integrations","products","events","tags","labels","goals","sync-rules","api-keys","widgets","team","danger"],FX={dashboard:"/dashboard/company/{companyId}",campaigns:"/dashboard/company/{companyId}/campaign",campaign:"/dashboard/company/{companyId}/campaign/{campaignId}",campaignPreview:"/dashboard/company/{companyId}/campaign/{campaignId}?step=review",campaignList:"/dashboard/company/{companyId}/campaign/list/{status}",landingPages:"/dashboard/company/{companyId}/landing-pages",landingPage:"/dashboard/company/{companyId}/landing-pages/{landingPageId}",sequences:"/dashboard/company/{companyId}/sequences",sequence:"/dashboard/company/{companyId}/sequences/{sequenceId}",sequenceList:"/dashboard/company/{companyId}/sequences/list/{status}",account:"/dashboard/company/{companyId}/account",subscription:"/dashboard/company/{companyId}/account?tab=subscription",settings:"/dashboard/company/{companyId}/settings",settingsTab:"/dashboard/company/{companyId}/settings?tab={tab}",emails:"/dashboard/company/{companyId}/emails",email:"/dashboard/company/{companyId}/emails/{emailId}",subscribers:"/dashboard/company/{companyId}/subscribers",sentEmails:"/dashboard/company/{companyId}/sent-emails",emailSend:"/dashboard/company/{companyId}/sent-emails/{emailSendId}",segments:"/dashboard/company/{companyId}/segments",metrics:"/dashboard/company/{companyId}/metrics",transactional:"/dashboard/company/{companyId}/transactional",transactionalEmail:"/dashboard/company/{companyId}/transactional/{transactionalId}",domain:"/dashboard/company/{companyId}/settings/domain/{domainId}",domainVerify:"/dashboard/company/{companyId}/settings/domain/{domainId}/verify"};function sMe(e){let n=(e??process.env.SEQUENZY_APP_URL??"https://sequenzy.com").trim().replace(/\/+$/,"");return n.length>0?n:"https://sequenzy.com"}function Ss(e){let t=e?.trim();return t?t:void 0}function Bl(e){return encodeURIComponent(e)}function Hr(e,t){return`${e}${t}`}function jr(e,t=""){return`/dashboard/company/${Bl(e)}${t}`}function NX(e,t,n){return Hr(e,`${jr(t,"/settings")}?tab=${encodeURIComponent(n)}`)}function lMe(e,t){let n=u6.map((r)=>[r,t?NX(e,t,r):""]);return Object.fromEntries(n)}function Ot(e={},t){let n=sMe(t),r=Ss(e.companyId),i={},o=lMe(n,r);if(!r)return{appUrl:n,routeTemplates:FX,settingsTabValues:u6,urls:i,settingsUrls:o};i.dashboard=Hr(n,jr(r)),i.campaigns=Hr(n,jr(r,"/campaign")),i.landingPages=Hr(n,jr(r,"/landing-pages")),i.sequences=Hr(n,jr(r,"/sequences")),i.account=Hr(n,jr(r,"/account")),i.subscription=`${i.account}?tab=subscription`,i.settings=Hr(n,jr(r,"/settings")),i.emails=Hr(n,jr(r,"/emails")),i.subscribers=Hr(n,jr(r,"/subscribers")),i.sentEmails=Hr(n,jr(r,"/sent-emails")),i.segments=Hr(n,jr(r,"/segments")),i.metrics=Hr(n,jr(r,"/metrics")),i.transactional=Hr(n,jr(r,"/transactional"));let a=Ss(e.campaignId);if(a)i.campaign=Hr(n,jr(r,`/campaign/${Bl(a)}`)),i.campaignPreview=`${i.campaign}?step=review`;let c=Ss(e.landingPageId);if(c)i.landingPage=Hr(n,jr(r,`/landing-pages/${Bl(c)}`));let u=Ss(e.sequenceId);if(u)i.sequence=Hr(n,jr(r,`/sequences/${Bl(u)}`));let p=Ss(e.emailId)??Ss(e.templateId);if(p)i.email=Hr(n,jr(r,`/emails/${Bl(p)}`)),i.template=i.email;let g=Ss(e.transactionalId);if(g)i.transactionalEmail=Hr(n,jr(r,`/transactional/${Bl(g)}`));let A=Ss(e.emailSendId);if(A)i.emailSend=Hr(n,jr(r,`/sent-emails/${Bl(A)}`));let E=Ss(e.domainId);if(E)i.domain=Hr(n,jr(r,`/settings/domain/${Bl(E)}`)),i.domainVerify=`${i.domain}/verify`;let h=Ss(e.status);if(h)i.campaignList=Hr(n,jr(r,`/campaign/list/${Bl(h)}`)),i.sequenceList=Hr(n,jr(r,`/sequences/list/${Bl(h)}`));let D=Ss(e.settingsTab);if(D)i.settingsTab=D==="billing"||D==="subscription"?i.subscription:NX(n,r,D);return{appUrl:n,routeTemplates:FX,settingsTabValues:u6,urls:i,settingsUrls:o}}async function Fn(e){if(e?.trim())return e.trim();try{return(await w("GET","/api/v1/account")).currentCompanyId??void 0}catch{return}}async function cMe(e,t){let n=await Fn(t);return Ot({...e,companyId:n})}function Ue(e,t){if(t)console.log(`${e}: ${t}`)}function vs(e,t,n,r){let o=Ot({...t,companyId:r}).urls[n];return{...e,...o!==void 0&&{url:o}}}async function PX(e){if(!await ue())Q(fe()),process.exit(1);try{let t=await cMe({campaignId:e.campaign,landingPageId:e.landingPage,sequenceId:e.sequence,emailId:e.email,templateId:e.template,transactionalId:e.transactional,emailSendId:e.emailSend,domainId:e.domain,status:e.status,settingsTab:e.settingsTab},e.company);if(e.company&&!t.urls.dashboard)throw new y("Company ID is required to build dashboard URLs",400);if(e.json){R(t);return}if(console.log(`App: ${t.appUrl}`),console.log(""),Object.keys(t.urls).length===0){console.log("No company selected. Pass --company or run `sequenzy account` to find the current company ID."),console.log(""),console.log("Route templates:");for(let[n,r]of Object.entries(t.routeTemplates))console.log(`- ${n}: ${r}`);return}console.log("URLs:");for(let[n,r]of Object.entries(t.urls))console.log(`- ${n}: ${r}`);console.log(""),console.log("Settings tabs:");for(let[n,r]of Object.entries(t.settingsUrls))console.log(`- ${n}: ${r}`)}catch(t){Q(t instanceof y?t:t),process.exit(1)}}function uMe(e){let t=vd(e.scopes),n={preset:e.preset??t.preset,fullAccess:e.fullAccess??t.fullAccess,selectedScopeCount:e.selectedScopeCount??t.selectedScopeCount,currentScopeCount:e.currentScopeCount??t.currentScopeCount,description:e.description??t.description},r=e.activeKey;if(console.log("API key"),r)console.log(`- Name: ${r.name??"Unknown"}`),console.log(`- ID: ${r.id}`),console.log(`- Prefix: ${r.prefix??"Unknown"}`),console.log(`- Type: ${r.type??"Unknown"}`);if(console.log(`- Permission preset: ${n.preset}`),console.log(`- Full access: ${n.fullAccess?"yes":"no"}`),console.log(`- Permissions: ${n.description}`),e.scopes!==null)console.log(`- Scopes: ${e.scopes.join(", ")}`);if(e.missingMarketingReadScopes.length>0)console.log(`- Missing marketing read scopes: ${e.missingMarketingReadScopes.join(", ")}`);if(e.canSendLive===!0)console.log("- Live delivery: yes");else if(e.canSendLive===!1)console.log(e.liveDeliveryBlockedByRole?"- Live delivery: no (your role in this workspace is read-only, so widening the key's permissions will not help)":"- Live delivery: no (this key holds no permission that can send)");let i=e.roleRestrictedScopes??[];if(i.length>0)console.log(`- Blocked by your workspace role: ${i.join(", ")} (a marketer can send campaigns but not transactional email; ask the owner for admin access if you need these)`);let o=e.missingLiveDeliveryScopes??[];if(o.length>0)console.log(`- Missing live delivery scopes: ${o.join(", ")}`);if(e.manageUrl)console.log(`- API key settings: ${e.manageUrl}`)}async function OX(e){if(!await ue())Q(fe()),process.exit(1);try{let t=await w("GET","/api/v1/account"),n=t.currentCompanyId!==null?Ot({companyId:t.currentCompanyId}):void 0,r=t.companies.map((i)=>{let o=Ot({companyId:i.id});return{...i,url:o.urls.dashboard,settingsUrl:o.urls.settings,subscriptionUrl:o.urls.subscription}});if(e.json){console.log(JSON.stringify({...t,companies:r,...n!==void 0&&{appUrls:n.urls,settingsUrls:n.settingsUrls}},null,2));return}if(console.log(`User ID: ${t.user?.id??"Unknown"}`),console.log(`Current company: ${t.currentCompanyId??"None"}`),Ue("Current company URL",n?.urls.dashboard),Ue("Current company settings",n?.urls.settings),Ue("Current company subscription",n?.urls.subscription),console.log(""),t.apiKeyPermissions)uMe(t.apiKeyPermissions),console.log("");if(t.companies.length===0){console.log(t.message??"No companies found.");return}console.log(`Companies (${t.companies.length})`);for(let i of r){let o=i.id===t.currentCompanyId?" (current)":"";if(console.log(`- ${i.name} [${i.id}]${o}`),i.role)console.log(` Role: ${i.role}`);Ue(" URL",i.url),Ue(" Settings",i.settingsUrl),Ue(" Subscription",i.subscriptionUrl)}}catch(t){Q(t instanceof y?t:t),process.exit(1)}}function d6(e){if(e===void 0)return;return e.split(",").map((t)=>t.trim()).filter((t)=>t.length>0)}async function Vd(e,t){if(!await ue())Q(fe()),process.exit(1);try{if(e==="handoff"){let o=d6(t.scopes),a=await w("POST","/api/v1/api-key-handoff",{...t.name!==void 0&&{name:t.name},...t.preset!==void 0&&{preset:t.preset},...o!==void 0&&{scopes:o},...t.replaces!==void 0&&{replaceApiKeyId:t.replaces}},t.company);if(t.json){R(a);return}let{handoff:c}=a;console.log("Open this link in a browser signed in as the key owner:"),console.log(c.url),console.log(""),console.log(`Key type: ${c.keyType}`),console.log(`Suggested name: ${c.name??"(dashboard default)"}`);let u=c.preset??(c.scopes?(c.permissions??vd(c.scopes)).description:"(dashboard default)");if(console.log(`Suggested permissions: ${u}`),c.scopes!==null)console.log(`Scopes: ${c.scopes.join(", ")}`);if(c.replaces){let p=c.replaces.name??c.replaces.id;console.log(`Replaces: ${p}${c.replaces.isCurrentKey?" (the key you are using now)":""}`)}console.log(""),console.log(a.message);for(let p of a.nextSteps)console.log(`- ${p}`);return}if(e==="list"){let o=await w("GET","/api/v1/api-keys",void 0,t.company);if(t.json){R(o);return}if(o.apiKeys.length===0){console.log("No company API keys found.");return}for(let[a,c]of o.apiKeys.entries()){if(a>0)console.log("");console.log(`${c.name}${c.isCurrent?" (current)":""}`),console.log(`ID: ${c.id}`),console.log(`Prefix: ${c.prefix}`);let u=c.permissions??vd(c.scopes);console.log(`Permission preset: ${u.preset}`),console.log(`Last used: ${xe(c.lastUsedAt)}`),console.log(`Created: ${xe(c.createdAt)}`)}return}if(e==="update"){if(!t.apiKeyId)throw new y("API key ID is required",400);let o=d6(t.scopes);if(t.name===void 0&&t.preset===void 0&&o===void 0)throw new y("Provide --name, --preset, or --scopes to update the key",400);let a=await w("PATCH",`/api/v1/api-keys/${encodeURIComponent(t.apiKeyId)}`,{...t.name!==void 0&&{name:t.name},...t.preset!==void 0&&{preset:t.preset},...o!==void 0&&{scopes:o}},t.company);if(t.json){R(a);return}console.log(a.message),console.log(`Name: ${a.apiKey.name}`),console.log(`ID: ${a.apiKey.id}`),console.log(`Prefix: ${a.apiKey.prefix}`);let c=a.apiKey.permissions??vd(a.apiKey.scopes);if(console.log(`Permission preset: ${c.preset}`),console.log(`Permissions: ${c.description}`),a.apiKey.scopes!==null)console.log(`Scopes: ${a.apiKey.scopes.join(", ")}`);return}if(e==="revoke"||e==="delete"){if(!t.apiKeyId)throw new y("API key ID is required",400);if(!await zn(`Revoke API key ${t.apiKeyId}? This cannot be undone.`,t)){console.log("Aborted.");return}let o=await w("DELETE",`/api/v1/api-keys/${encodeURIComponent(t.apiKeyId)}`,void 0,t.company);if(t.json){R(o);return}console.log(o.message),console.log(`Name: ${o.apiKey.name}`),console.log(`ID: ${o.apiKey.id}`),console.log(`Prefix: ${o.apiKey.prefix}`);return}let n=d6(t.scopes),r=await w("POST","/api/v1/api-keys",{name:t.name,...t.preset!==void 0&&{preset:t.preset},...n!==void 0&&{scopes:n}},t.company);if(t.json){R(r);return}console.log(`Created API key: ${r.apiKey.name}`),console.log(`ID: ${r.apiKey.id}`),console.log(`Prefix: ${r.apiKey.prefix}`);let i=r.apiKey.permissions??vd(r.apiKey.scopes);if(console.log(`Permission preset: ${i.preset}`),console.log(`Full access: ${i.fullAccess?"yes":"no"}`),console.log(`Permissions: ${i.description}`),r.apiKey.scopes!==null)console.log(`Scopes: ${r.apiKey.scopes.join(", ")}`);console.log(`Created: ${xe(r.apiKey.createdAt)}`),console.log(""),console.log(r.message),console.log(`Key: ${r.apiKey.key}`),console.log(`Env: ${r.instructions.example}`),console.log(r.instructions.note)}catch(n){Q(n instanceof y?n:n),process.exit(1)}}var LX=["hourly","daily","weekly"];function dMe(e){let t=e.syncStatus==="disconnected"?"disconnected":!e.isActive?"paused":e.syncStatus==="error"?"error":e.syncStatus;if(console.log(`- ${e.segmentName??e.segmentId} -> "${e.audienceName}" (${e.adAccountId})`),console.log(` id: ${e.id} | ${e.frequency} | status: ${t} | last sync: ${e.lastSyncAt??"never"} | uploaded: ${e.lastSyncedCount}`),e.lastSyncError)console.log(` last error: ${e.lastSyncError}`)}function MX(e){if(e===void 0)return"daily";if(!LX.includes(e))console.error(`Invalid frequency "${e}". Use one of: ${LX.join(", ")}.`),process.exit(1);return e}function p6(e,t){if(!e||e.trim().length===0)console.error(`${t} is required.`),process.exit(1);return e.trim()}async function Wd(e,t){if(!await ue())Q(fe()),process.exit(1);try{if(e==="list"){let i=await w("GET","/api/v1/audience-syncs",void 0,t.company);if(t.json){console.log(JSON.stringify(i,null,2));return}console.log(`Audience syncs (${i.audienceSyncs.length})`);for(let o of i.audienceSyncs)dMe(o);return}if(e==="ad-accounts"){let i=await w("GET","/api/v1/ad-accounts",void 0,t.company);if(t.json){console.log(JSON.stringify(i,null,2));return}console.log(`Ad accounts (${i.adAccounts.length})`);for(let o of i.adAccounts)console.log(`- ${o.name} (${o.id})`);return}if(e==="create"){if(t.segment&&t.template)console.error("Provide either --segment or --template, not both."),process.exit(1);if(!t.segment&&!t.template)console.error("Provide --segment <id> or --template <id> (for example --template recent-buyers)."),process.exit(1);let i=await w("POST","/api/v1/audience-syncs",{...t.segment?{segmentId:t.segment}:{},...t.template?{predefinedSegmentId:t.template}:{},adAccountId:p6(t.adAccount,"--ad-account"),audienceName:p6(t.name,"--name"),frequency:MX(t.frequency)},t.company);if(t.json){console.log(JSON.stringify(i,null,2));return}console.log(`Created audience sync: ${i.audienceSync.segmentName??i.audienceSync.segmentId} -> "${i.audienceSync.audienceName}"`),console.log(`ID: ${i.audienceSync.id}`),console.log(`Frequency: ${i.audienceSync.frequency}`),console.log("The first upload to Meta is running now.");return}let n=p6(t.id,"--id");if(e==="update"){let i={};if(t.frequency!==void 0)i.frequency=MX(t.frequency);if(t.active!==void 0){if(t.active!=="true"&&t.active!=="false")console.error('--active must be "true" or "false".'),process.exit(1);i.isActive=t.active==="true"}if(Object.keys(i).length===0)console.error("Provide --frequency and/or --active to update."),process.exit(1);let o=await w("PATCH",`/api/v1/audience-syncs/${encodeURIComponent(n)}`,i,t.company);if(t.json){console.log(JSON.stringify(o,null,2));return}console.log(`Updated audience sync ${o.audienceSync.id}: ${o.audienceSync.frequency}, ${o.audienceSync.isActive?"active":"paused"}`);return}if(e==="delete"){let i=await w("DELETE",`/api/v1/audience-syncs/${encodeURIComponent(n)}`,void 0,t.company);if(t.json){console.log(JSON.stringify(i,null,2));return}console.log(`Removed audience sync ${n}. The Meta audience itself is kept.`);return}let r=await w("POST",`/api/v1/audience-syncs/${encodeURIComponent(n)}/sync`,void 0,t.company);if(t.json){console.log(JSON.stringify(r,null,2));return}console.log(`Queued sync for ${n}.`)}catch(n){Q(n instanceof y?n:n),process.exit(1)}}function zX(e){let t=e?.trim();return t?t:void 0}function HX(e){if(e.previewText!==void 0&&e.preheaderText!==void 0)throw new y("Provide either --preview-text or --preheader-text, not both",400);return e.previewText??e.preheaderText}function pMe(e,t){if(!e.name)throw new y("Campaign name is required",400);let n=zX(e.prompt);if(e.prompt!==void 0&&n===void 0)throw new y("--prompt cannot be empty",400);if(n!==void 0&&(t.html!==void 0||t.blocks!==void 0))throw new y("Provide either --prompt, --html/--html-file, or --blocks-json/--blocks-file, not multiple content sources",400);if(n===void 0&&(e.style!==void 0||e.tone!==void 0))throw new y("--style and --tone require --prompt",400);if(jX(e,t),!e.subject&&n===void 0)throw new y("Campaign subject is required unless --prompt is provided",400)}function mMe(e,t,n={},r=void 0){if(e.replyTo!==void 0&&e.replyProfile!==void 0)throw new y("Provide either --reply-to or --reply-profile, not both",400);let i=HX(e),o=jX(e,t),a=ZX(e);if(e.name===void 0&&e.subject===void 0&&i===void 0&&e.trackingCode===void 0&&t.html===void 0&&t.blocks===void 0&&o===void 0&&e.fromEmail===void 0&&e.fromName===void 0&&e.senderProfileId===void 0&&e.replyTo===void 0&&e.replyToName===void 0&&e.replyProfile===void 0&&e.label===void 0&&n.campaignData===void 0&&n.computedLists===void 0&&r===void 0&&a===void 0&&e.sendTimeWindowHours===void 0)throw new y("Provide at least one of: --name, --subject, --preview-text, --preheader-text, --tracking-code, --html, --html-file, --blocks-json, --blocks-file, --email-preset, --from-email, --from-name, --sender-profile-id, --reply-to, --reply-to-name, --reply-profile, --label, --campaign-data-json, --campaign-data-file, --computed-lists-json, --computed-lists-file, --segment, --target-lists-json, --target-lists-file, --clear-target-lists, --send-time-optimization, --disable-send-time-optimization, --send-time-window-hours",400);let c=YX(e.sendTimeWindowHours);return{name:e.name,subject:e.subject,...i!==void 0&&{previewText:i},...e.trackingCode!==void 0&&{trackingCode:e.trackingCode},html:t.html,blocks:t.blocks,...o!==void 0&&{emailPreset:o},...e.fromEmail!==void 0&&{fromEmail:e.fromEmail},...e.fromName!==void 0&&{fromName:e.fromName},...e.senderProfileId!==void 0&&{senderProfileId:e.senderProfileId},replyTo:e.replyTo,...e.replyToName!==void 0&&{replyToName:e.replyToName},replyProfileId:e.replyProfile,labels:e.label,...n.campaignData!==void 0&&{campaignData:n.campaignData},...n.computedLists!==void 0&&{computedLists:n.computedLists},...r!==void 0&&{targetLists:r},...a!==void 0&&{sendTimeOptimization:a},...c!==void 0&&{sendTimeWindowHours:c}}}function jX(e,t){if(e.emailPreset===void 0)return;if(e.emailPreset!=="branded"&&e.emailPreset!=="minimal")throw new y("--email-preset must be branded or minimal",400);if(t.html!==void 0)throw new y("--email-preset is only supported for native Sequenzy blocks and cannot be combined with --html/--html-file",400);return e.emailPreset}function fMe(e){let t=ht(e.campaignDataJson,e.campaignDataFile,"campaign-data"),n=ht(e.computedListsJson,e.computedListsFile,"computed-lists");if(t!==void 0&&t!==null&&(typeof t!=="object"||Array.isArray(t)))throw new y("campaign-data JSON must be an object or null",400);if(n!==void 0&&!Array.isArray(n))throw new y("computed-lists JSON must be an array",400);return{...t!==void 0&&{campaignData:t},...n!==void 0&&{computedLists:n}}}function GX(e){let t=ht(e.targetListsJson,e.targetListsFile,"target-lists");if(t!==void 0&&(typeof t!=="object"||t===null||Array.isArray(t)))throw new y("target-lists JSON must be an object",400);return t}function VX(e,t){if([e.segment!==void 0,e.lists!==void 0,t!==void 0].filter(Boolean).length>1)throw new y("Provide at most one of --segment, --lists, or target list options",400)}function WX(e){let t=GX(e);if(VX(e,t),e.segment!==void 0)return{type:"segment",segmentId:e.segment};let n=KX(e);if(n!==void 0)return{type:"lists",listIds:n};return t}function KX(e){if(e.lists===void 0)return;let t=e.lists.flatMap((n)=>n.split(",")).map((n)=>n.trim()).filter((n)=>n.length>0);if(t.length===0)throw new y("--lists requires at least one list ID",400);return t}function gMe(e){let t=WX(e);if(e.clearTargetLists){if(t!==void 0)throw new y("Provide either --clear-target-lists or an audience option, not both",400);return null}return t}function JX(e){if(e===void 0)return;let t=Number(e);if(!Number.isInteger(t)||t<1||t>72)throw new y("--spread-over-hours must be an integer between 1 and 72",400);return t}function YX(e){if(e===void 0)return;let t=Number(e);if(!Number.isInteger(t)||t<1||t>24)throw new y("--send-time-window-hours must be an integer between 1 and 24",400);return t}function ZX(e){if(e.sendTimeOptimization===!0&&e.disableSendTimeOptimization===!0)throw new y("Use either --send-time-optimization or --disable-send-time-optimization, not both",400);if(e.disableSendTimeOptimization===!0)return!1;return e.sendTimeOptimization}var xMe=new Set(["campaign","ab_test","variant"]);function AMe(e){let t=JX(e.spreadOverHours);return{...t!==void 0&&{spreadOverHours:t}}}function EMe(e){let t=e.mode??"campaign";if(!xMe.has(t))throw new y("--mode must be one of: campaign, ab_test, variant",400);if(t==="variant"&&!e.variantId)throw new y("--variant-id is required when --mode is variant",400);if(t!=="variant"&&e.variantId!==void 0)throw new y("--variant-id requires --mode variant",400);return{mode:t,...e.variantId!==void 0&&{variantId:e.variantId}}}function hMe(e){if(e===void 0)return;if(e!=="weekly"&&e!=="monthly")throw new y("--repeat must be one of: weekly, monthly",400);return e}function yMe(e,t){if(!e.at?.trim())throw new y("--at is required",400);let n=JX(e.spreadOverHours),r=ZX(e),i=YX(e.sendTimeWindowHours),o=hMe(e.repeat);if(e.inRecipientTimezone&&!e.scheduledTimezone?.trim())throw new y("--in-recipient-timezone requires --scheduled-timezone (the IANA zone --at refers to, e.g. America/New_York)",400);return{scheduledAt:e.at,...t!==void 0&&{targetLists:t},...r!==void 0&&{sendTimeOptimization:r},...i!==void 0&&{sendTimeWindowHours:i},...n!==void 0&&{spreadOverHours:n},...o!==void 0&&{recurringInterval:o},...e.inRecipientTimezone!==void 0&&{sendInRecipientTimezone:e.inRecipientTimezone},...e.scheduledTimezone!==void 0&&{scheduledTimezone:e.scheduledTimezone.trim()}}}function UX(e){if(!e.replyToEmail)return"None";return e.replyToName?`${e.replyToName} <${e.replyToEmail}>`:e.replyToEmail}function zC(e){return e&&e.length>0?e.join(", "):"None"}function $X(e){if(e.sendInRecipientTimezone)return e.scheduledTimezone?`Recipient's local time (wall clock from ${e.scheduledTimezone})`:"Recipient's local time";if(e.sendTimeOptimization)return`Optimal send time (${e.sendTimeWindowHours??12}h window)`;if(e.spreadOverHours)return`Spread over ${e.spreadOverHours}h`;return"No pacing recorded"}function qX(e,t=""){if(e===void 0||e==="email")return;console.log(`${t}Channel: ${e.toUpperCase()} (managed from the dashboard)`)}function m6(e){let t=c8(e);if(!t)return"Not set (choose it when scheduling)";switch(t.type){case"all":return"All active subscribers";case"lists":return t.listIds.length>0?`Lists: ${t.listIds.join(", ")}`:"Lists: none selected";case"segment":return t.segmentId?`Segment: ${t.segmentId}`:"Segment: none selected";case"filtered":return`Filtered (${t.filters.length} filter${t.filters.length===1?"":"s"})`;case"rules":return`Rules (${t.include.length} include, ${(t.exclude??[]).length} exclude)`}}function HC(e){if(e.length===0)return"none";return e.map((t)=>t.missing?`${t.id} (missing)`:`${t.name} [${t.id}]`).join(", ")}function QX(e){if(e.type==="lists")return`lists ${HC(e.lists??[])}`;if(e.type==="segments")return`segments ${HC(e.segments??[])}`;if(e.type==="filtered")return`${e.filters?.length??0} filter condition(s)`;return"all active subscribers"}function bMe(e){let{audience:t}=e;if(console.log(e.campaignName),console.log(`ID: ${e.campaignId}`),console.log(`Status: ${e.status}`),e.scheduledAt)console.log(`Scheduled: ${xe(e.scheduledAt)}`);if(console.log(""),console.log(`Targeting: ${t.type}`),console.log(`Recipients: ${e.recipientCount}`),console.log(`Summary: ${t.summary}`),t.isUnset)console.log("WARNING: targeting is not set. Scheduling sends to every active subscriber.");if(t.lists.length>0)console.log(`Lists: ${HC(t.lists)}`);if(t.segments.length>0)console.log(`Segments: ${HC(t.segments)}`);if(t.filters.length>0)console.log(`Filters: ${t.filters.length} condition(s)`);for(let n of t.include)console.log(`Include: ${QX(n)}`);for(let n of t.exclude)console.log(`Exclude: ${QX(n)}`);if(t.excludedCampaignOpenerIds.length>0)console.log(`Excluding openers of: ${t.excludedCampaignOpenerIds.join(", ")}`);if(t.excludedSubscriberIds.length>0)console.log(`Excluded subscribers: ${t.excludedSubscriberIds.length}`);if(t.includedSubscriberIds.length>0)console.log(`Individually added subscribers: ${t.includedSubscriberIds.length}`)}function CMe(e,t){if(t===void 0)return e;let n=Ot({companyId:t,campaignId:e.id});return{...e,...n.urls.campaign!==void 0&&{url:n.urls.campaign},...n.urls.campaignPreview!==void 0&&{previewUrl:n.urls.campaignPreview}}}function BMe(e){if(e.isActive&&e.notActive)throw new y("Provide either --active or --inactive, not both",400);return{...e.name!==void 0&&{name:e.name},...e.description!==void 0&&{description:e.description},...e.triggerType!==void 0&&{triggerType:e.triggerType},...e.triggerEventName!==void 0&&{triggerEventName:e.triggerEventName},...e.triggerTagName!==void 0&&{triggerTagName:e.triggerTagName},...e.attributePath!==void 0&&{attributePath:e.attributePath},...e.attributeCondition!==void 0&&{attributeCondition:e.attributeCondition},...e.attributeValue!==void 0&&{attributeValue:e.attributeValue},...e.attributePreviousValue!==void 0&&{attributePreviousValue:e.attributePreviousValue},...e.eventPropertyName!==void 0&&{eventPropertyName:e.eventPropertyName},...e.eventPropertyLabel!==void 0&&{eventPropertyLabel:e.eventPropertyLabel},...Mt(e.attributionWindowHours,"--attribution-window-hours")!==void 0&&{attributionWindowHours:Mt(e.attributionWindowHours,"--attribution-window-hours")},...e.isActive&&{isActive:!0},...e.notActive&&{isActive:!1}}}async function Xr(e,t){if(!await ue())Q(fe()),process.exit(1);try{if(e==="list"){let c=new URLSearchParams;if(t.status)c.set("status",t.status);if(t.label)for(let h of t.label)c.append("label",h);if(t.limit)c.set("limit",t.limit);if(t.offset)c.set("offset",t.offset);let u=await w("GET",`/api/v1/campaigns${c.size>0?`?${c.toString()}`:""}`,void 0,t.company),p=await Fn(t.company),g=p!==void 0?Ot({companyId:p,status:t.status}):void 0,A=u.campaigns.map((h)=>CMe(h,p));if(t.json){R({...u,campaigns:A,...g!==void 0&&{appUrls:g.urls}});return}let E=u.pagination;console.log(E?`Campaigns (${u.campaigns.length} of ${E.total})`:`Campaigns (${u.campaigns.length})`);for(let h of A){if(console.log(`- ${h.name} [${h.id}]`),console.log(` Subject: ${h.subject}`),h.emailId)console.log(` Format: ${ms(h.emailPreset)}`);if(console.log(` Status: ${h.status}`),qX(h.type," "),h.rejectionComment)console.log(` Rejection feedback: ${h.rejectionComment}`);if(console.log(` Labels: ${zC(h.labels)}`),console.log(` Created: ${xe(h.createdAt)}`),Ue(" URL",h.url),Ue(" Preview URL",h.previewUrl),h.scheduledAt)console.log(` Scheduled: ${xe(h.scheduledAt)}`);if(h.sentAt)console.log(` Sent: ${xe(h.sentAt)}`);let D=$X(h);if(D!=="No pacing recorded")console.log(` Delivery: ${D}`)}if(E?.hasMore)console.log(`More campaigns available. Re-run with --offset ${E.offset+E.count} to fetch the next page.`);return}let n=Yl({html:t.html,htmlFile:t.htmlFile,blocksJson:t.blocksJson,blocksFile:t.blocksFile});if(e==="create"){pMe(t,n);let c=zX(t.prompt),u=HX(t),p=GX(t);VX(t,p);let g=KX(t),A=await w("POST","/api/v1/campaigns",{name:t.name,...t.subject!==void 0&&{subject:t.subject},...u!==void 0&&{previewText:u},...c!==void 0&&{prompt:c},...t.style!==void 0&&{style:t.style},...t.tone!==void 0&&{tone:t.tone},...n.html!==void 0&&{html:n.html},...n.blocks!==void 0&&{blocks:n.blocks},...t.emailPreset!==void 0&&{emailPreset:t.emailPreset},...t.label!==void 0&&{labels:t.label},...t.trackingCode!==void 0&&{trackingCode:t.trackingCode},...t.status!==void 0&&{status:t.status},...t.sentAt!==void 0&&{sentAt:t.sentAt},...t.fromEmail!==void 0&&{fromEmail:t.fromEmail},...t.fromName!==void 0&&{fromName:t.fromName},...t.senderProfileId!==void 0&&{senderProfileId:t.senderProfileId},...t.replyTo!==void 0&&{replyTo:t.replyTo},...t.replyToName!==void 0&&{replyToName:t.replyToName},...t.replyProfile!==void 0&&{replyProfileId:t.replyProfile},...t.segment!==void 0&&{segmentId:t.segment},...g!==void 0&&{listIds:g},...p!==void 0&&{targetLists:p}},t.company),E=await Fn(t.company),h=A.campaign?.id??A.campaignId,D=E!==void 0&&h!==void 0?Ot({companyId:E,campaignId:h}):void 0;if(t.json){R({...A,...A.campaign!==void 0&&D?.urls.campaign!==void 0&&{campaign:{...A.campaign,url:D.urls.campaign,previewUrl:D.urls.campaignPreview}},...D!==void 0&&{appUrls:D.urls}});return}if(qr(A),console.log(`Created campaign: ${A.campaign?.name??t.name}`),console.log(`ID: ${A.campaign?.id??"Unknown"}`),console.log(`Status: ${A.campaign?.status??"Unknown"}`),A.campaign?.sentAt)console.log(`Sent: ${xe(A.campaign.sentAt)}`);if(console.log(`Subject: ${A.campaign?.subject??t.subject??"Generated"}`),console.log(`Labels: ${zC(A.campaign?.labels)}`),console.log(`Audience: ${m6(A.campaign?.targetLists)}`),c!==void 0)console.log("Content: generated from prompt");Ue("URL",D?.urls.campaign??A.campaign?.url),Ue("Preview URL",D?.urls.campaignPreview??A.campaign?.previewUrl);return}if(!t.id)throw new y("Campaign ID is required",400);if(e==="unschedule"||e==="cancel"||e==="pause"){let c=await w("POST",`/api/v1/campaigns/${t.id}/${e}`,void 0,t.company);if(t.json){R(c);return}let u=e==="unschedule"?"unscheduled":e==="cancel"?"cancelled":"paused";console.log(`Campaign ${u}: ${c.campaign?.name??t.id}`),console.log(`ID: ${c.campaign?.id??t.id}`),console.log(`Status: ${c.campaign?.status??u}`),Ue("URL",c.campaign?.url);return}if(e==="resume"){let c=await w("POST",`/api/v1/campaigns/${t.id}/resume`,AMe(t),t.company);if(t.json){R(c);return}console.log(`Campaign resumed: ${c.campaign?.name??t.id}`),console.log(`ID: ${c.campaign?.id??t.id}`),console.log(`Status: ${c.campaign?.status??"sending"}`),Ue("URL",c.campaign?.url);return}if(e==="delete"){if(!await zn(`Delete campaign ${t.id}?`,t)){console.log("Aborted.");return}let c=await w("DELETE",`/api/v1/campaigns/${t.id}`,void 0,t.company);if(t.json){R(c);return}console.log(`Deleted campaign: ${t.id}`);return}if(e==="duplicate"){let c=await w("POST",`/api/v1/campaigns/${t.id}/duplicate`,EMe(t),t.company);if(t.json){R(c);return}if(console.log(`Duplicated campaign: ${c.campaign?.name??t.id}`),console.log(`New campaign ID: ${c.campaign?.id??"Unknown"}`),console.log(`Status: ${c.campaign?.status??"draft"}`),c.emailId!==void 0)console.log(`New email ID: ${c.emailId}`);Ue("URL",c.campaign?.url),Ue("Preview URL",c.campaign?.previewUrl);return}if(e==="resend-to-non-openers"){let c=await w("POST",`/api/v1/campaigns/${t.id}/resend-to-non-openers`,void 0,t.company);if(t.json){R(c);return}if(console.log(`Created non-opener resend draft: ${c.campaign?.name??t.id}`),console.log(`New campaign ID: ${c.campaign?.id??"Unknown"}`),console.log(`Status: ${c.campaign?.status??"draft"}`),c.estimatedNonOpenerCount!==void 0)console.log(`Estimated recipients: ~${c.estimatedNonOpenerCount}`);Ue("URL",c.campaign?.url);return}if(e==="schedule"){let c=WX(t),u=await w("POST",`/api/v1/campaigns/${t.id}/schedule`,yMe(t,c),t.company),p=await Fn(t.company),g=p!==void 0?Ot({companyId:p,campaignId:t.id}):void 0;if(t.json){R({...u,...u.campaign!==void 0&&g?.urls.campaign!==void 0&&{campaign:{...u.campaign,url:g.urls.campaign,previewUrl:g.urls.campaignPreview}},previewUrl:u.previewUrl??g?.urls.campaignPreview??void 0,...g!==void 0&&{appUrls:g.urls}});return}console.log(`Scheduled campaign: ${u.campaign?.name??t.id}`),console.log(`ID: ${u.campaign?.id??t.id}`),console.log(`Status: ${u.campaign?.status??"scheduled"}`),console.log(`Scheduled: ${xe(u.scheduledAt??u.campaign?.scheduledAt??null)}`),Ue("URL",g?.urls.campaign??u.campaign?.url),Ue("Preview URL",u.previewUrl??g?.urls.campaignPreview??u.campaign?.previewUrl);return}if(e==="update"){let c=fMe(t),u=gMe(t),p=mMe(t,n,c,u),g=await w("PUT",`/api/v1/campaigns/${t.id}`,p,t.company),A=await Fn(t.company),E=A!==void 0?Ot({companyId:A,campaignId:t.id}):void 0;if(t.json){R({...g,...g.campaign!==void 0&&E?.urls.campaign!==void 0&&{campaign:{...g.campaign,url:E.urls.campaign,previewUrl:E.urls.campaignPreview}},...E!==void 0&&{appUrls:E.urls}});return}if(qr(g),console.log(`Updated campaign: ${g.campaign?.name??t.id}`),console.log(`ID: ${g.campaign?.id??t.id}`),console.log(`Status: ${g.campaign?.status??"Unknown"}`),console.log(`Labels: ${zC(g.campaign?.labels)}`),console.log(`Audience: ${m6(g.campaign?.targetLists)}`),Ue("URL",E?.urls.campaign??g.campaign?.url),Ue("Preview URL",E?.urls.campaignPreview??g.campaign?.previewUrl),g.campaign)console.log(`Reply-To: ${UX(g.campaign)}`);return}if(e==="test"){if(!t.to)throw new y("--to is required",400);let c=await w("POST",`/api/v1/campaigns/${t.id}/test`,{to:t.to},t.company),u=await Fn(t.company),p=u!==void 0?Ot({companyId:u,campaignId:t.id,...c.emailSendId?{emailSendId:c.emailSendId}:{}}):void 0;if(t.json){R({...c,...p!==void 0&&{appUrls:p.urls}});return}if(console.log(c.message??`Test requested for ${t.id}`),c.emailSendId)console.log(`Email send ID: ${c.emailSendId}`);Ue("URL",p?.urls.campaign),Ue("Preview URL",p?.urls.campaignPreview),Ue("Email send URL",p?.urls.emailSend);return}if(e==="audience"){let c=await w("GET",`/api/v1/campaigns/${t.id}/audience`,void 0,t.company);if(t.json){R(c);return}bMe(c);return}if(e==="share"){let c=await w("POST",`/api/v1/campaigns/${t.id}/share-link`,void 0,t.company);if(t.json){R(c);return}console.log(c.created?"Public link created.":"Public link already active."),Ue("Share URL",c.shareUrl),console.log("Anyone with the link sees an anonymized copy - no subscriber data, no tracking.");return}if(e==="unshare"){let c=await w("DELETE",`/api/v1/campaigns/${t.id}/share-link`,void 0,t.company);if(t.json){R(c);return}console.log(c.revoked?"Public link revoked. The old URL now returns 404.":"No public link to revoke.");return}if(e==="goals"){if(!t.id)throw new y("Campaign ID is required",400);let c=await w("GET",`/api/v1/campaigns/${t.id}/goals`,void 0,t.company);if(t.json)return R(c);let u=Array.isArray(c.goals)?c.goals:[];console.log(`Campaign goals (${u.length})`);for(let p of u){if(typeof p!=="object"||p===null)continue;let g=p;console.log(`- ${String(g.name??"Unnamed goal")} [${String(g.id??"unknown")}]`)}return}if(e==="goal-create"||e==="goal-update"){if(!t.id)throw new y("Campaign ID is required",400);if(e==="goal-create"&&!t.name)throw new y("Goal name is required",400);if(e==="goal-update"&&!t.goalId)throw new y("Goal ID is required",400);let c=await w(e==="goal-create"?"POST":"PATCH",`/api/v1/campaigns/${t.id}/goals${t.goalId?`/${t.goalId}`:""}`,BMe(t),t.company);if(t.json)return R(c);let u=c.goal;if(console.log(`${e==="goal-create"?"Created":"Updated"} campaign goal: ${String(u?.name??t.name??t.goalId)}`),u?.id)console.log(`ID: ${String(u.id)}`);return}if(e==="goal-delete"){if(!t.id)throw new y("Campaign ID is required",400);if(!t.goalId)throw new y("Goal ID is required",400);let c=await w("DELETE",`/api/v1/campaigns/${t.id}/goals/${t.goalId}`,void 0,t.company);if(t.json)return R(c);console.log(`Deleted campaign goal: ${t.goalId}`);return}let r=await w("GET",`/api/v1/campaigns/${t.id}`,void 0,t.company),i=await Fn(t.company),o=i!==void 0?Ot({companyId:i,campaignId:t.id}):void 0;if(t.json){R({...r,...o?.urls.campaign!==void 0&&{campaign:{...r.campaign,url:o.urls.campaign,previewUrl:o.urls.campaignPreview}},...o!==void 0&&{appUrls:o.urls}});return}let a=r.campaign;if(console.log(a.name),console.log(`ID: ${a.id}`),Ue("URL",o?.urls.campaign??a.url),Ue("Preview URL",o?.urls.campaignPreview??a.previewUrl),a.shareUrl)Ue("Share URL",a.shareUrl);if(console.log(`Status: ${a.status}`),qX(a.type),a.rejectionComment)console.log(`Rejection feedback: ${a.rejectionComment}`);if(console.log(`Subject: ${a.subject}`),a.emailId)console.log(`Email ID: ${a.emailId}`),console.log(`Format: ${ms(a.emailPreset)}`);if(a.trackingCode)console.log(`Tracking code: ${a.trackingCode}`);if(console.log(`Labels: ${zC(a.labels)}`),console.log(`Audience: ${m6(a.targetLists)}`),console.log(`Preheader: ${a.preheader||"None"}`),a.replyToEmail||a.replyProfileId)console.log(`Reply-To: ${UX(a)}`);console.log(`Blocks: ${a.blocks.length}`),console.log(`Created: ${xe(a.createdAt)}`),console.log(`Scheduled: ${xe(a.scheduledAt)}`),console.log(`Sent: ${xe(a.sentAt)}`),console.log(`Delivery: ${$X(a)}`)}catch(n){Q(n instanceof y?n:n),process.exit(1)}}function tee(e){let t=e.supportedLocales.join(", "),n=e.subscriberLocaleAttribute??"not configured";return`${e.primaryLocale} -> [${t}] | fallback ${e.fallbackLocale} | attr ${n} | sync ${e.autoSyncMode}`}function SMe(e){let t=wi(e.description,e.descriptionFile,"description"),n=wi(e.companyContext,e.companyContextFile,"company-context"),r=wi(e.emailDesignPrompt,e.emailDesignPromptFile,"email-design-prompt"),i=ht(e.brandColorsJson,e.brandColorsFile,"brand-colors"),o=ht(e.valuePropsJson,e.valuePropsFile,"value-props"),a=ht(e.testimonialsJson,e.testimonialsFile,"testimonials"),c=ht(e.socialLinksJson,e.socialLinksFile,"social-links"),u=ht(e.pricingJson,e.pricingFile,"pricing"),p=ht(e.emailThemeJson,e.emailThemeFile,"email-theme");if(i!==void 0&&(typeof i!=="object"||Array.isArray(i)||i===null))throw new y("brand-colors JSON must be an object",400);if(o!==void 0&&!Array.isArray(o))throw new y("value-props JSON must be an array",400);if(a!==void 0&&!Array.isArray(a))throw new y("testimonials JSON must be an array",400);if(c!==void 0&&(typeof c!=="object"||Array.isArray(c)||c===null))throw new y("social-links JSON must be an object",400);if(u!==void 0&&(typeof u!=="object"||Array.isArray(u)||u===null))throw new y("pricing JSON must be an object",400);if(p!==void 0&&p!==null&&(typeof p!=="object"||Array.isArray(p)))throw new y("email-theme JSON must be an object or null",400);if(e.enableReplyTracking&&e.disableReplyTracking)throw new y("Use only one of --enable-reply-tracking or --disable-reply-tracking",400);if(e.enableReplyForwarding&&e.disableReplyForwarding)throw new y("Use only one of --enable-reply-forwarding or --disable-reply-forwarding",400);if(e.replyTrackingDomainMode!==void 0&&e.replyTrackingDomainMode!=="sequenzy"&&e.replyTrackingDomainMode!=="custom")throw new y("reply-tracking-domain-mode must be sequenzy or custom",400);let g=e.defaultList??[];if([g.length>0,e.defaultListsNone===!0,e.defaultListsAll===!0].filter(Boolean).length>1)throw new y("--default-list, --default-lists-none, and --default-lists-all are mutually exclusive",400);let E={},h=[["name","name"],["logoUrl","logoUrl"],["founderName","founderName"],["primaryColor","primaryColor"],["toneVoice","toneVoice"],["emailLengthPreference","emailLengthPreference"],["privacyPolicyUrl","privacyPolicyUrl"],["termsUrl","termsUrl"],["address","address"],["language","language"],["fontFamily","fontFamily"],["emailDirection","emailDirection"],["senderProfileId","senderProfileId"],["fromEmail","fromEmail"],["fromName","fromName"],["replyProfileId","replyProfileId"],["replyTo","replyTo"],["replyToName","replyToName"]];for(let[D,O]of h){let q=e[D];if(typeof q==="string")E[O]=q}if(t!==void 0)E.description=t;if(n!==void 0)E.companyContext=n;if(r!==void 0)E.emailDesignPrompt=r;if(i!==void 0)E.brandColors=i;if(o!==void 0)E.valueProps=o;if(a!==void 0)E.testimonials=a;if(c!==void 0)E.socialLinks=c;if(u!==void 0)E.pricing=u;if(p!==void 0)E.emailTheme=p;if(e.enableReplyTracking)E.replyTrackingEnabled=!0;if(e.disableReplyTracking)E.replyTrackingEnabled=!1;if(e.replyTrackingDomainMode!==void 0)E.replyTrackingDomainMode=e.replyTrackingDomainMode;if(e.enableReplyForwarding)E.forwardReplies=!0;if(e.disableReplyForwarding)E.forwardReplies=!1;if(e.defaultListsAll)E.defaultSubscriberListIds=null;else if(e.defaultListsNone)E.defaultSubscriberListIds=[];else if(g.length>0)E.defaultSubscriberListIds=g;if(Object.keys(E).length===0)throw new y("Provide at least one company update option",400);return E}function XX(e,t){if(!t)return"Not set";return e?`${e} <${t}>`:t}function vMe(e){if(e===null)return"All lists (every current and future list)";if(e.length===0)return"No lists";return`${e.length} specific list${e.length===1?"":"s"}: ${e.join(", ")}`}function _Me(e){if(!e.visible)return e.reason==="email_partner"?"Hidden (email-partner entitlement)":`Hidden (paid plan${e.subscriptionTier?`: ${e.subscriptionTier}`:""})`;if(e.reason==="inactive_subscription")return`Visible (subscription ${e.subscriptionStatus??"inactive"}; renew to remove)`;return"Visible (free plan; upgrade to remove)"}function eee(e){console.log(e.name),console.log(`ID: ${e.id}`),console.log(`Status: ${e.status}`),console.log(`Website: ${e.websiteUrl??"Not set"}`),console.log(`Logo: ${e.logoUrl??"Not set"}`),console.log(`Primary color: ${e.primaryColor??"Not set"}`),console.log(`Founder: ${e.founderName??"Not set"}`),console.log(`Description: ${e.description??"Not set"}`),console.log(`Tone: ${e.toneVoice??"Not set"}`),console.log(`Context: ${e.companyContext??"Not set"}`),console.log(`Design prompt: ${e.emailDesignPrompt??"Not set"}`),console.log(`Email length: ${e.emailLengthPreference}`),console.log(`Primary language: ${e.language}`),console.log(`Email direction: ${e.emailDirection}`),console.log(`Sequenzy email branding: ${_Me(e.emailBranding)}`),console.log(`Subscription: ${e.emailBranding.subscriptionUrl}`),console.log(`Default lists for new contacts: ${vMe(e.defaultSubscriberListIds)}`),console.log(`Default From: ${XX(e.defaultFromName,e.defaultFromEmail)}`),console.log(`Default Reply-To: ${XX(e.defaultReplyToName,e.defaultReplyToEmail)}`),console.log(`Reply tracking: ${e.replyTrackingEnabled?"Enabled":"Disabled"}`),console.log(`Reply domain mode: ${e.replyTrackingDomainMode}`),console.log(`Reply forwarding: ${e.forwardReplies?"Enabled":"Disabled"}`),console.log(`Reply retention: ${e.replyRetentionDays} days`),console.log(`Font family: ${e.fontFamily??"Not set"}`),console.log(`Email theme: ${e.emailTheme?`customized (${e.emailTheme.presetId??"default"} preset)`:"Platform default"}`),console.log(`Address: ${e.address??"Not set"}`),console.log(`Privacy policy: ${e.privacyPolicyUrl??"Not set"}`),console.log(`Terms: ${e.termsUrl??"Not set"}`),console.log(`Created: ${xe(e.createdAt)}`),console.log(`Localization: ${tee(e.emailLocalizationConfig)}`)}async function _x(e,t){if(!await ue())Q(fe()),process.exit(1);try{if(e==="list"){let a=await w("GET","/api/v1/companies"),c=a.companies.map((p)=>{let g=Ot({companyId:p.id});return{...p,url:g.urls.dashboard,settingsUrl:g.urls.settings,subscriptionUrl:g.urls.subscription}}),u=a.currentCompanyId!==null?Ot({companyId:a.currentCompanyId}):void 0;if(t.json){R({...a,companies:c,...u!==void 0&&{appUrls:u.urls}});return}console.log(`Companies (${a.companies.length})`);for(let p of c){let g=p.id===a.currentCompanyId?" (current)":"";console.log(`- ${p.name} [${p.id}]${g}`),console.log(` Status: ${p.status}`),console.log(` Website: ${p.websiteUrl??"Not set"}`),Ue(" URL",p.url),Ue(" Settings",p.settingsUrl),Ue(" Subscription",p.subscriptionUrl),console.log(` Localization: ${tee(p.emailLocalizationConfig)}`)}return}if(!t.id){if(e!=="create")throw new y("Company ID is required",400)}if(e==="create"){if(!t.domain)throw new y("Domain is required",400);let a=await w("POST","/api/v1/companies",{domain:t.domain,name:t.name}),c=Ot({companyId:a.company.id});if(t.json){R({...a,company:{...a.company,url:c.urls.dashboard,settingsUrl:c.urls.settings,subscriptionUrl:c.urls.subscription},appUrls:c.urls,settingsUrls:c.settingsUrls});return}console.log(a.company.name),console.log(`ID: ${a.company.id}`),Ue("URL",c.urls.dashboard),Ue("Settings",c.urls.settings),Ue("Subscription",c.urls.subscription),console.log(`Status: ${a.company.status}`),console.log(`Website: ${a.company.websiteUrl??"Not set"}`),console.log(""),console.log(a.message);return}if(e==="update"){let a=t.id;if(!a)throw new y("Company ID is required",400);let c=await w("PATCH",`/api/v1/companies/${a}`,SMe(t)),u=Ot({companyId:a});if(t.json){R({...c,company:{...c.company,url:u.urls.dashboard,settingsUrl:u.urls.settings,subscriptionUrl:u.urls.subscription},appUrls:u.urls,settingsUrls:u.settingsUrls});return}console.log("Company updated"),eee(c.company),Ue("URL",u.urls.dashboard),Ue("Settings",u.urls.settings);return}let n=await w("GET",`/api/v1/companies/${t.id}`),r=Ot({companyId:t.id});if(t.json){R({...n,company:{...n.company,url:r.urls.dashboard,settingsUrl:r.urls.settings,subscriptionUrl:r.urls.subscription},appUrls:r.urls,settingsUrls:r.settingsUrls});return}let i=n.company;Ue("URL",r.urls.dashboard),Ue("Settings",r.urls.settings),eee(i);let o=Object.entries(i.emailLocalizationConfig.valueMappings);if(o.length>0){console.log("Mappings:");for(let[a,c]of o)console.log(`- ${a} -> ${c}`)}}catch(n){Q(n instanceof y?n:n),process.exit(1)}}import{readFile as IMe}from"node:fs/promises";function nee(e,t){if(t.length===0)return"";return`
349
+ Øø\rÅåΔ_ΦΓΛΩΠΨΣΘΞÆæßÉ !"#¤%&'()*+,-./0123456789:;<=>?`+"¡ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÑܧ¿abcdefghijklmnopqrstuvwxyzäöñüà",GLe="|^€{}[]~\\\f",oyt=new Set(jLe),ayt=new Set(GLe);function Ve(e,t){return e.map((n)=>[n,t])}var lyt=new Map([...Ve(["203","475","860","959"],"America/New_York"),...Ve(["302"],"America/New_York"),...Ve(["202","771"],"America/New_York"),...Ve(["239","305","321","352","386","407","561","656","689","727"],"America/New_York"),...Ve(["754","772","786","813","863","904","941","954"],"America/New_York"),...Ve(["229","404","470","478","678","706","762","770","912","943"],"America/New_York"),...Ve(["260","317","463","765"],"America/New_York"),...Ve(["502","606","859"],"America/New_York"),...Ve(["207"],"America/New_York"),...Ve(["240","301","410","443","667"],"America/New_York"),...Ve(["339","351","413","508","617","774","781","857","978"],"America/New_York"),...Ve(["231","248","269","313","517","586","616","734","810","947"],"America/New_York"),...Ve(["989"],"America/New_York"),...Ve(["603"],"America/New_York"),...Ve(["201","551","609","640","732","848","856","862","908","973"],"America/New_York"),...Ve(["212","315","332","347","363","516","518","585","607","631"],"America/New_York"),...Ve(["646","680","716","718","838","845","914","917","929","934"],"America/New_York"),...Ve(["252","336","704","743","828","910","919","980","984"],"America/New_York"),...Ve(["216","220","234","283","326","330","380","419","440","513"],"America/New_York"),...Ve(["567","614","740","937"],"America/New_York"),...Ve(["215","223","267","272","412","445","484","570","610","717"],"America/New_York"),...Ve(["724","814","878"],"America/New_York"),...Ve(["401"],"America/New_York"),...Ve(["803","839","843","854","864"],"America/New_York"),...Ve(["865"],"America/New_York"),...Ve(["802"],"America/New_York"),...Ve(["276","434","540","571","703","757","804"],"America/New_York"),...Ve(["304","681"],"America/New_York"),...Ve(["416","437","647","905","289","365","226","519","548","613"],"America/New_York"),...Ve(["343","705","249"],"America/New_York"),...Ve(["418","581","367","438","514","450","579","819","873"],"America/New_York"),...Ve(["205","251","256","334","659","938"],"America/Chicago"),...Ve(["479","501","870"],"America/Chicago"),...Ve(["217","224","309","312","331","447","618","630","708","773"],"America/Chicago"),...Ve(["779","815","847","872"],"America/Chicago"),...Ve(["219"],"America/Chicago"),...Ve(["319","515","563","641","712"],"America/Chicago"),...Ve(["316","913"],"America/Chicago"),...Ve(["225","318","337","504","985"],"America/Chicago"),...Ve(["218","320","507","612","651","763","952"],"America/Chicago"),...Ve(["228","601","662","769"],"America/Chicago"),...Ve(["314","417","573","636","660","816"],"America/Chicago"),...Ve(["402","531"],"America/Chicago"),...Ve(["405","539","572","580","918"],"America/Chicago"),...Ve(["615","629","731","901"],"America/Chicago"),...Ve(["210","214","254","281","325","346","361","409","430","469"],"America/Chicago"),...Ve(["512","682","713","726","737","806","817","830","832","903"],"America/Chicago"),...Ve(["936","940","945","956","972","979"],"America/Chicago"),...Ve(["262","414","534","608","715","920"],"America/Chicago"),...Ve(["204","431"],"America/Chicago"),...Ve(["303","719","720","970","983"],"America/Denver"),...Ve(["406"],"America/Denver"),...Ve(["505","575"],"America/Denver"),...Ve(["915"],"America/Denver"),...Ve(["385","435","801"],"America/Denver"),...Ve(["307"],"America/Denver"),...Ve(["403","587","780","825","368"],"America/Denver"),...Ve(["480","520","602","623"],"America/Phoenix"),...Ve(["209","213","279","310","323","341","350","369","408","415"],"America/Los_Angeles"),...Ve(["424","442","510","530","559","562","619","626","628","650"],"America/Los_Angeles"),...Ve(["657","661","669","707","714","747","760","805","818","820"],"America/Los_Angeles"),...Ve(["831","840","858","909","916","925","949","951"],"America/Los_Angeles"),...Ve(["702","725"],"America/Los_Angeles"),...Ve(["503","971"],"America/Los_Angeles"),...Ve(["206","253","360","425","509","564"],"America/Los_Angeles"),...Ve(["604","778","236","672"],"America/Los_Angeles"),...Ve(["808"],"Pacific/Honolulu"),...Ve(["902","782","506","428"],"America/Halifax"),...Ve(["306","639","474"],"America/Regina"),...Ve(["787","939","340"],"America/Puerto_Rico"),...Ve(["671","670"],"Pacific/Guam"),...Ve(["684"],"Pacific/Pago_Pago")]);var c6=["gmail","microsoft","yahoo","icloud","orange","free","sfr","laposte","comcast","gmx","proton","other"],VLe=["gmail.com","googlemail.com"],WLe=["outlook.com","outlook.co.uk","outlook.fr","outlook.de","outlook.es","outlook.it","outlook.jp","outlook.com.au","outlook.com.br","outlook.be","outlook.co.nz","outlook.co.th","outlook.com.ar","outlook.hu","outlook.ie","outlook.pt","hotmail.com","hotmail.co.uk","hotmail.fr","hotmail.de","hotmail.es","hotmail.it","hotmail.be","hotmail.ca","hotmail.ch","hotmail.co.id","hotmail.co.jp","hotmail.co.nz","hotmail.co.th","hotmail.com.ar","hotmail.com.au","hotmail.com.br","hotmail.com.hk","hotmail.dk","hotmail.fi","hotmail.gr","hotmail.nl","hotmail.no","hotmail.se","live.com","live.co.uk","live.fr","live.de","live.nl","live.at","live.be","live.ca","live.cn","live.co.za","live.com.ar","live.com.au","live.com.mx","live.com.pt","live.com.sg","live.dk","live.fi","live.hk","live.ie","live.in","live.it","live.jp","live.no","live.se","msn.com","windowslive.com"],KLe=["yahoo.com","yahoo.co.uk","yahoo.fr","yahoo.de","yahoo.es","yahoo.it","yahoo.ca","yahoo.com.au","yahoo.com.br","yahoo.co.jp","yahoo.co.in","yahoo.co.id","yahoo.co.kr","yahoo.co.nz","yahoo.co.th","yahoo.com.ar","yahoo.com.hk","yahoo.com.mx","yahoo.com.my","yahoo.com.ph","yahoo.com.sg","yahoo.com.tw","yahoo.dk","yahoo.gr","yahoo.ie","yahoo.in","yahoo.no","yahoo.pl","yahoo.ro","yahoo.se","ymail.com","rocketmail.com","aol.com","aim.com","aol.co.uk","aol.de","aol.fr","netscape.net","verizon.net","att.net","sbcglobal.net","bellsouth.net","swbell.net","pacbell.net","prodigy.net","ameritech.net","snet.net","flash.net","nvbell.net","currently.com","cox.net","frontier.com","rogers.com"],JLe=["icloud.com","me.com","mac.com"],YLe=["orange.fr","wanadoo.fr","orange.be","wanadoo.es"],ZLe=["free.fr","aliceadsl.fr"],XLe=["sfr.fr","sfr.net","neuf.fr","cegetel.net","club-internet.fr","noos.fr","numericable.fr","9online.fr"],eMe=["laposte.net"],tMe=["comcast.net","xfinity.com"],nMe=["gmx.net","gmx.de","gmx.at","gmx.ch","gmx.com","gmx.fr","gmx.co.uk","web.de"],rMe=["proton.me","protonmail.com","protonmail.ch","pm.me"],Ayt=new Map([...VLe.map((e)=>[e,"gmail"]),...WLe.map((e)=>[e,"microsoft"]),...KLe.map((e)=>[e,"yahoo"]),...JLe.map((e)=>[e,"icloud"]),...YLe.map((e)=>[e,"orange"]),...ZLe.map((e)=>[e,"free"]),...XLe.map((e)=>[e,"sfr"]),...eMe.map((e)=>[e,"laposte"]),...tMe.map((e)=>[e,"comcast"]),...nMe.map((e)=>[e,"gmx"]),...rMe.map((e)=>[e,"proton"])]);function RX(e){if(e==="google")return"gmail";if(e==="apple")return"icloud";if(e==="free-fr")return"free";return e}var Eyt=new Map(Hg.flatMap(({provider:e,domains:t})=>t.map((n)=>[n,RX(e)])));var iMe=[...new Set([...c6,...Hg.map(({provider:e})=>RX(e))])],hyt=new Set(iMe);var Bs={hold:{deferralRate:0.1,complaintRate:0.001},reduce:{deferralRate:0.2,complaintRate:0.003}},oMe={gmail:{initialDailyCapacity:500,capacityGrowthRate:0.35,...Bs},microsoft:{initialDailyCapacity:250,capacityGrowthRate:0.15,...Bs},yahoo:{initialDailyCapacity:300,capacityGrowthRate:0.3,...Bs},icloud:{initialDailyCapacity:150,capacityGrowthRate:0.25,...Bs},orange:{initialDailyCapacity:300,capacityGrowthRate:0.2,...Bs},free:{initialDailyCapacity:150,capacityGrowthRate:0.2,hold:{deferralRate:0.25,complaintRate:0.001},reduce:{deferralRate:0.4,complaintRate:0.003}},sfr:{initialDailyCapacity:100,capacityGrowthRate:0.2,...Bs},laposte:{initialDailyCapacity:100,capacityGrowthRate:0.2,...Bs},comcast:{initialDailyCapacity:150,capacityGrowthRate:0.2,...Bs},gmx:{initialDailyCapacity:150,capacityGrowthRate:0.2,...Bs},proton:{initialDailyCapacity:150,capacityGrowthRate:0.2,...Bs},other:{initialDailyCapacity:150,capacityGrowthRate:0.2,...Bs}};var u6=["product-info","domain","tracking","localization","integrations","products","events","tags","labels","goals","sync-rules","api-keys","widgets","team","danger"],FX={dashboard:"/dashboard/company/{companyId}",campaigns:"/dashboard/company/{companyId}/campaign",campaign:"/dashboard/company/{companyId}/campaign/{campaignId}",campaignPreview:"/dashboard/company/{companyId}/campaign/{campaignId}?step=review",campaignList:"/dashboard/company/{companyId}/campaign/list/{status}",landingPages:"/dashboard/company/{companyId}/landing-pages",landingPage:"/dashboard/company/{companyId}/landing-pages/{landingPageId}",sequences:"/dashboard/company/{companyId}/sequences",sequence:"/dashboard/company/{companyId}/sequences/{sequenceId}",sequenceList:"/dashboard/company/{companyId}/sequences/list/{status}",account:"/dashboard/company/{companyId}/account",subscription:"/dashboard/company/{companyId}/account?tab=subscription",settings:"/dashboard/company/{companyId}/settings",settingsTab:"/dashboard/company/{companyId}/settings?tab={tab}",emails:"/dashboard/company/{companyId}/emails",email:"/dashboard/company/{companyId}/emails/{emailId}",subscribers:"/dashboard/company/{companyId}/subscribers",sentEmails:"/dashboard/company/{companyId}/sent-emails",emailSend:"/dashboard/company/{companyId}/sent-emails/{emailSendId}",segments:"/dashboard/company/{companyId}/segments",metrics:"/dashboard/company/{companyId}/metrics",transactional:"/dashboard/company/{companyId}/transactional",transactionalEmail:"/dashboard/company/{companyId}/transactional/{transactionalId}",domain:"/dashboard/company/{companyId}/settings/domain/{domainId}",domainVerify:"/dashboard/company/{companyId}/settings/domain/{domainId}/verify"};function sMe(e){let n=(e??process.env.SEQUENZY_APP_URL??"https://sequenzy.com").trim().replace(/\/+$/,"");return n.length>0?n:"https://sequenzy.com"}function Ss(e){let t=e?.trim();return t?t:void 0}function Bl(e){return encodeURIComponent(e)}function Hr(e,t){return`${e}${t}`}function jr(e,t=""){return`/dashboard/company/${Bl(e)}${t}`}function NX(e,t,n){return Hr(e,`${jr(t,"/settings")}?tab=${encodeURIComponent(n)}`)}function lMe(e,t){let n=u6.map((r)=>[r,t?NX(e,t,r):""]);return Object.fromEntries(n)}function Ot(e={},t){let n=sMe(t),r=Ss(e.companyId),i={},o=lMe(n,r);if(!r)return{appUrl:n,routeTemplates:FX,settingsTabValues:u6,urls:i,settingsUrls:o};i.dashboard=Hr(n,jr(r)),i.campaigns=Hr(n,jr(r,"/campaign")),i.landingPages=Hr(n,jr(r,"/landing-pages")),i.sequences=Hr(n,jr(r,"/sequences")),i.account=Hr(n,jr(r,"/account")),i.subscription=`${i.account}?tab=subscription`,i.settings=Hr(n,jr(r,"/settings")),i.emails=Hr(n,jr(r,"/emails")),i.subscribers=Hr(n,jr(r,"/subscribers")),i.sentEmails=Hr(n,jr(r,"/sent-emails")),i.segments=Hr(n,jr(r,"/segments")),i.metrics=Hr(n,jr(r,"/metrics")),i.transactional=Hr(n,jr(r,"/transactional"));let a=Ss(e.campaignId);if(a)i.campaign=Hr(n,jr(r,`/campaign/${Bl(a)}`)),i.campaignPreview=`${i.campaign}?step=review`;let c=Ss(e.landingPageId);if(c)i.landingPage=Hr(n,jr(r,`/landing-pages/${Bl(c)}`));let u=Ss(e.sequenceId);if(u)i.sequence=Hr(n,jr(r,`/sequences/${Bl(u)}`));let p=Ss(e.emailId)??Ss(e.templateId);if(p)i.email=Hr(n,jr(r,`/emails/${Bl(p)}`)),i.template=i.email;let g=Ss(e.transactionalId);if(g)i.transactionalEmail=Hr(n,jr(r,`/transactional/${Bl(g)}`));let A=Ss(e.emailSendId);if(A)i.emailSend=Hr(n,jr(r,`/sent-emails/${Bl(A)}`));let E=Ss(e.domainId);if(E)i.domain=Hr(n,jr(r,`/settings/domain/${Bl(E)}`)),i.domainVerify=`${i.domain}/verify`;let h=Ss(e.status);if(h)i.campaignList=Hr(n,jr(r,`/campaign/list/${Bl(h)}`)),i.sequenceList=Hr(n,jr(r,`/sequences/list/${Bl(h)}`));let D=Ss(e.settingsTab);if(D)i.settingsTab=D==="billing"||D==="subscription"?i.subscription:NX(n,r,D);return{appUrl:n,routeTemplates:FX,settingsTabValues:u6,urls:i,settingsUrls:o}}async function Fn(e){if(e?.trim())return e.trim();try{return(await w("GET","/api/v1/account")).currentCompanyId??void 0}catch{return}}async function cMe(e,t){let n=await Fn(t);return Ot({...e,companyId:n})}function Ue(e,t){if(t)console.log(`${e}: ${t}`)}function vs(e,t,n,r){let o=Ot({...t,companyId:r}).urls[n];return{...e,...o!==void 0&&{url:o}}}async function PX(e){if(!await ue())Q(fe()),process.exit(1);try{let t=await cMe({campaignId:e.campaign,landingPageId:e.landingPage,sequenceId:e.sequence,emailId:e.email,templateId:e.template,transactionalId:e.transactional,emailSendId:e.emailSend,domainId:e.domain,status:e.status,settingsTab:e.settingsTab},e.company);if(e.company&&!t.urls.dashboard)throw new y("Company ID is required to build dashboard URLs",400);if(e.json){R(t);return}if(console.log(`App: ${t.appUrl}`),console.log(""),Object.keys(t.urls).length===0){console.log("No company selected. Pass --company or run `sequenzy account` to find the current company ID."),console.log(""),console.log("Route templates:");for(let[n,r]of Object.entries(t.routeTemplates))console.log(`- ${n}: ${r}`);return}console.log("URLs:");for(let[n,r]of Object.entries(t.urls))console.log(`- ${n}: ${r}`);console.log(""),console.log("Settings tabs:");for(let[n,r]of Object.entries(t.settingsUrls))console.log(`- ${n}: ${r}`)}catch(t){Q(t instanceof y?t:t),process.exit(1)}}function uMe(e){let t=vd(e.scopes),n={preset:e.preset??t.preset,fullAccess:e.fullAccess??t.fullAccess,selectedScopeCount:e.selectedScopeCount??t.selectedScopeCount,currentScopeCount:e.currentScopeCount??t.currentScopeCount,description:e.description??t.description},r=e.activeKey;if(console.log("API key"),r)console.log(`- Name: ${r.name??"Unknown"}`),console.log(`- ID: ${r.id}`),console.log(`- Prefix: ${r.prefix??"Unknown"}`),console.log(`- Type: ${r.type??"Unknown"}`);if(console.log(`- Permission preset: ${n.preset}`),console.log(`- Full access: ${n.fullAccess?"yes":"no"}`),console.log(`- Permissions: ${n.description}`),e.scopes!==null)console.log(`- Scopes: ${e.scopes.join(", ")}`);if(e.missingMarketingReadScopes.length>0)console.log(`- Missing marketing read scopes: ${e.missingMarketingReadScopes.join(", ")}`);if(e.canSendLive===!0)console.log("- Live delivery: yes");else if(e.canSendLive===!1)console.log(e.liveDeliveryBlockedByRole?"- Live delivery: no (your role in this workspace is read-only, so widening the key's permissions will not help)":"- Live delivery: no (this key holds no permission that can send)");let i=e.roleRestrictedScopes??[];if(i.length>0)console.log(`- Blocked by your workspace role: ${i.join(", ")} (a marketer can send campaigns but not transactional email; ask the owner for admin access if you need these)`);let o=e.missingLiveDeliveryScopes??[];if(o.length>0)console.log(`- Missing live delivery scopes: ${o.join(", ")}`);if(e.manageUrl)console.log(`- API key settings: ${e.manageUrl}`)}async function OX(e){if(!await ue())Q(fe()),process.exit(1);try{let t=await w("GET","/api/v1/account"),n=t.currentCompanyId!==null?Ot({companyId:t.currentCompanyId}):void 0,r=t.companies.map((i)=>{let o=Ot({companyId:i.id});return{...i,url:o.urls.dashboard,settingsUrl:o.urls.settings,subscriptionUrl:o.urls.subscription}});if(e.json){console.log(JSON.stringify({...t,companies:r,...n!==void 0&&{appUrls:n.urls,settingsUrls:n.settingsUrls}},null,2));return}if(console.log(`User ID: ${t.user?.id??"Unknown"}`),console.log(`Current company: ${t.currentCompanyId??"None"}`),Ue("Current company URL",n?.urls.dashboard),Ue("Current company settings",n?.urls.settings),Ue("Current company subscription",n?.urls.subscription),console.log(""),t.apiKeyPermissions)uMe(t.apiKeyPermissions),console.log("");if(t.companies.length===0){console.log(t.message??"No companies found.");return}console.log(`Companies (${t.companies.length})`);for(let i of r){let o=i.id===t.currentCompanyId?" (current)":"";if(console.log(`- ${i.name} [${i.id}]${o}`),i.role)console.log(` Role: ${i.role}`);Ue(" URL",i.url),Ue(" Settings",i.settingsUrl),Ue(" Subscription",i.subscriptionUrl)}}catch(t){Q(t instanceof y?t:t),process.exit(1)}}function d6(e){if(e===void 0)return;return e.split(",").map((t)=>t.trim()).filter((t)=>t.length>0)}async function Vd(e,t){if(!await ue())Q(fe()),process.exit(1);try{if(e==="handoff"){let o=d6(t.scopes),a=await w("POST","/api/v1/api-key-handoff",{...t.name!==void 0&&{name:t.name},...t.preset!==void 0&&{preset:t.preset},...o!==void 0&&{scopes:o},...t.replaces!==void 0&&{replaceApiKeyId:t.replaces}},t.company);if(t.json){R(a);return}let{handoff:c}=a;console.log("Open this link in a browser signed in as the key owner:"),console.log(c.url),console.log(""),console.log(`Key type: ${c.keyType}`),console.log(`Suggested name: ${c.name??"(dashboard default)"}`);let u=c.preset??(c.scopes?(c.permissions??vd(c.scopes)).description:"(dashboard default)");if(console.log(`Suggested permissions: ${u}`),c.scopes!==null)console.log(`Scopes: ${c.scopes.join(", ")}`);if(c.replaces){let p=c.replaces.name??c.replaces.id;console.log(`Replaces: ${p}${c.replaces.isCurrentKey?" (the key you are using now)":""}`)}console.log(""),console.log(a.message);for(let p of a.nextSteps)console.log(`- ${p}`);return}if(e==="list"){let o=await w("GET","/api/v1/api-keys",void 0,t.company);if(t.json){R(o);return}if(o.apiKeys.length===0){console.log("No company API keys found.");return}for(let[a,c]of o.apiKeys.entries()){if(a>0)console.log("");console.log(`${c.name}${c.isCurrent?" (current)":""}`),console.log(`ID: ${c.id}`),console.log(`Prefix: ${c.prefix}`);let u=c.permissions??vd(c.scopes);console.log(`Permission preset: ${u.preset}`),console.log(`Last used: ${xe(c.lastUsedAt)}`),console.log(`Created: ${xe(c.createdAt)}`)}return}if(e==="update"){if(!t.apiKeyId)throw new y("API key ID is required",400);let o=d6(t.scopes);if(t.name===void 0&&t.preset===void 0&&o===void 0)throw new y("Provide --name, --preset, or --scopes to update the key",400);let a=await w("PATCH",`/api/v1/api-keys/${encodeURIComponent(t.apiKeyId)}`,{...t.name!==void 0&&{name:t.name},...t.preset!==void 0&&{preset:t.preset},...o!==void 0&&{scopes:o}},t.company);if(t.json){R(a);return}console.log(a.message),console.log(`Name: ${a.apiKey.name}`),console.log(`ID: ${a.apiKey.id}`),console.log(`Prefix: ${a.apiKey.prefix}`);let c=a.apiKey.permissions??vd(a.apiKey.scopes);if(console.log(`Permission preset: ${c.preset}`),console.log(`Permissions: ${c.description}`),a.apiKey.scopes!==null)console.log(`Scopes: ${a.apiKey.scopes.join(", ")}`);return}if(e==="revoke"||e==="delete"){if(!t.apiKeyId)throw new y("API key ID is required",400);if(!await zn(`Revoke API key ${t.apiKeyId}? This cannot be undone.`,t)){console.log("Aborted.");return}let o=await w("DELETE",`/api/v1/api-keys/${encodeURIComponent(t.apiKeyId)}`,void 0,t.company);if(t.json){R(o);return}console.log(o.message),console.log(`Name: ${o.apiKey.name}`),console.log(`ID: ${o.apiKey.id}`),console.log(`Prefix: ${o.apiKey.prefix}`);return}let n=d6(t.scopes),r=await w("POST","/api/v1/api-keys",{name:t.name,...t.preset!==void 0&&{preset:t.preset},...n!==void 0&&{scopes:n}},t.company);if(t.json){R(r);return}console.log(`Created API key: ${r.apiKey.name}`),console.log(`ID: ${r.apiKey.id}`),console.log(`Prefix: ${r.apiKey.prefix}`);let i=r.apiKey.permissions??vd(r.apiKey.scopes);if(console.log(`Permission preset: ${i.preset}`),console.log(`Full access: ${i.fullAccess?"yes":"no"}`),console.log(`Permissions: ${i.description}`),r.apiKey.scopes!==null)console.log(`Scopes: ${r.apiKey.scopes.join(", ")}`);console.log(`Created: ${xe(r.apiKey.createdAt)}`),console.log(""),console.log(r.message),console.log(`Key: ${r.apiKey.key}`),console.log(`Env: ${r.instructions.example}`),console.log(r.instructions.note)}catch(n){Q(n instanceof y?n:n),process.exit(1)}}var LX=["hourly","daily","weekly"];function dMe(e){let t=e.syncStatus==="disconnected"?"disconnected":!e.isActive?"paused":e.syncStatus==="error"?"error":e.syncStatus;if(console.log(`- ${e.segmentName??e.segmentId} -> "${e.audienceName}" (${e.adAccountId})`),console.log(` id: ${e.id} | ${e.frequency} | status: ${t} | last sync: ${e.lastSyncAt??"never"} | uploaded: ${e.lastSyncedCount}`),e.lastSyncError)console.log(` last error: ${e.lastSyncError}`)}function MX(e){if(e===void 0)return"daily";if(!LX.includes(e))console.error(`Invalid frequency "${e}". Use one of: ${LX.join(", ")}.`),process.exit(1);return e}function p6(e,t){if(!e||e.trim().length===0)console.error(`${t} is required.`),process.exit(1);return e.trim()}async function Wd(e,t){if(!await ue())Q(fe()),process.exit(1);try{if(e==="list"){let i=await w("GET","/api/v1/audience-syncs",void 0,t.company);if(t.json){console.log(JSON.stringify(i,null,2));return}console.log(`Audience syncs (${i.audienceSyncs.length})`);for(let o of i.audienceSyncs)dMe(o);return}if(e==="ad-accounts"){let i=await w("GET","/api/v1/ad-accounts",void 0,t.company);if(t.json){console.log(JSON.stringify(i,null,2));return}console.log(`Ad accounts (${i.adAccounts.length})`);for(let o of i.adAccounts)console.log(`- ${o.name} (${o.id})`);return}if(e==="create"){if(t.segment&&t.template)console.error("Provide either --segment or --template, not both."),process.exit(1);if(!t.segment&&!t.template)console.error("Provide --segment <id> or --template <id> (for example --template recent-buyers)."),process.exit(1);let i=await w("POST","/api/v1/audience-syncs",{...t.segment?{segmentId:t.segment}:{},...t.template?{predefinedSegmentId:t.template}:{},adAccountId:p6(t.adAccount,"--ad-account"),audienceName:p6(t.name,"--name"),frequency:MX(t.frequency)},t.company);if(t.json){console.log(JSON.stringify(i,null,2));return}console.log(`Created audience sync: ${i.audienceSync.segmentName??i.audienceSync.segmentId} -> "${i.audienceSync.audienceName}"`),console.log(`ID: ${i.audienceSync.id}`),console.log(`Frequency: ${i.audienceSync.frequency}`),console.log("The first upload to Meta is running now.");return}let n=p6(t.id,"--id");if(e==="update"){let i={};if(t.frequency!==void 0)i.frequency=MX(t.frequency);if(t.active!==void 0){if(t.active!=="true"&&t.active!=="false")console.error('--active must be "true" or "false".'),process.exit(1);i.isActive=t.active==="true"}if(Object.keys(i).length===0)console.error("Provide --frequency and/or --active to update."),process.exit(1);let o=await w("PATCH",`/api/v1/audience-syncs/${encodeURIComponent(n)}`,i,t.company);if(t.json){console.log(JSON.stringify(o,null,2));return}console.log(`Updated audience sync ${o.audienceSync.id}: ${o.audienceSync.frequency}, ${o.audienceSync.isActive?"active":"paused"}`);return}if(e==="delete"){let i=await w("DELETE",`/api/v1/audience-syncs/${encodeURIComponent(n)}`,void 0,t.company);if(t.json){console.log(JSON.stringify(i,null,2));return}console.log(`Removed audience sync ${n}. The Meta audience itself is kept.`);return}let r=await w("POST",`/api/v1/audience-syncs/${encodeURIComponent(n)}/sync`,void 0,t.company);if(t.json){console.log(JSON.stringify(r,null,2));return}console.log(`Queued sync for ${n}.`)}catch(n){Q(n instanceof y?n:n),process.exit(1)}}function zX(e){let t=e?.trim();return t?t:void 0}function HX(e){if(e.previewText!==void 0&&e.preheaderText!==void 0)throw new y("Provide either --preview-text or --preheader-text, not both",400);return e.previewText??e.preheaderText}function pMe(e,t){if(!e.name)throw new y("Campaign name is required",400);let n=zX(e.prompt);if(e.prompt!==void 0&&n===void 0)throw new y("--prompt cannot be empty",400);if(n!==void 0&&(t.html!==void 0||t.blocks!==void 0))throw new y("Provide either --prompt, --html/--html-file, or --blocks-json/--blocks-file, not multiple content sources",400);if(n===void 0&&(e.style!==void 0||e.tone!==void 0))throw new y("--style and --tone require --prompt",400);if(jX(e,t),!e.subject&&n===void 0)throw new y("Campaign subject is required unless --prompt is provided",400)}function mMe(e,t,n={},r=void 0){if(e.replyTo!==void 0&&e.replyProfile!==void 0)throw new y("Provide either --reply-to or --reply-profile, not both",400);let i=HX(e),o=jX(e,t),a=ZX(e);if(e.name===void 0&&e.subject===void 0&&i===void 0&&e.trackingCode===void 0&&t.html===void 0&&t.blocks===void 0&&o===void 0&&e.fromEmail===void 0&&e.fromName===void 0&&e.senderProfileId===void 0&&e.replyTo===void 0&&e.replyToName===void 0&&e.replyProfile===void 0&&e.label===void 0&&n.campaignData===void 0&&n.computedLists===void 0&&r===void 0&&a===void 0&&e.sendTimeWindowHours===void 0)throw new y("Provide at least one of: --name, --subject, --preview-text, --preheader-text, --tracking-code, --html, --html-file, --blocks-json, --blocks-file, --email-preset, --from-email, --from-name, --sender-profile-id, --reply-to, --reply-to-name, --reply-profile, --label, --campaign-data-json, --campaign-data-file, --computed-lists-json, --computed-lists-file, --segment, --target-lists-json, --target-lists-file, --clear-target-lists, --send-time-optimization, --disable-send-time-optimization, --send-time-window-hours",400);let c=YX(e.sendTimeWindowHours);return{name:e.name,subject:e.subject,...i!==void 0&&{previewText:i},...e.trackingCode!==void 0&&{trackingCode:e.trackingCode},html:t.html,blocks:t.blocks,...o!==void 0&&{emailPreset:o},...e.fromEmail!==void 0&&{fromEmail:e.fromEmail},...e.fromName!==void 0&&{fromName:e.fromName},...e.senderProfileId!==void 0&&{senderProfileId:e.senderProfileId},replyTo:e.replyTo,...e.replyToName!==void 0&&{replyToName:e.replyToName},replyProfileId:e.replyProfile,labels:e.label,...n.campaignData!==void 0&&{campaignData:n.campaignData},...n.computedLists!==void 0&&{computedLists:n.computedLists},...r!==void 0&&{targetLists:r},...a!==void 0&&{sendTimeOptimization:a},...c!==void 0&&{sendTimeWindowHours:c}}}function jX(e,t){if(e.emailPreset===void 0)return;if(e.emailPreset!=="branded"&&e.emailPreset!=="minimal")throw new y("--email-preset must be branded or minimal",400);if(t.html!==void 0)throw new y("--email-preset is only supported for native Sequenzy blocks and cannot be combined with --html/--html-file",400);return e.emailPreset}function fMe(e){let t=ht(e.campaignDataJson,e.campaignDataFile,"campaign-data"),n=ht(e.computedListsJson,e.computedListsFile,"computed-lists");if(t!==void 0&&t!==null&&(typeof t!=="object"||Array.isArray(t)))throw new y("campaign-data JSON must be an object or null",400);if(n!==void 0&&!Array.isArray(n))throw new y("computed-lists JSON must be an array",400);return{...t!==void 0&&{campaignData:t},...n!==void 0&&{computedLists:n}}}function GX(e){let t=ht(e.targetListsJson,e.targetListsFile,"target-lists");if(t!==void 0&&(typeof t!=="object"||t===null||Array.isArray(t)))throw new y("target-lists JSON must be an object",400);return t}function VX(e,t){if([e.segment!==void 0,e.lists!==void 0,t!==void 0].filter(Boolean).length>1)throw new y("Provide at most one of --segment, --lists, or target list options",400)}function WX(e){let t=GX(e);if(VX(e,t),e.segment!==void 0)return{type:"segment",segmentId:e.segment};let n=KX(e);if(n!==void 0)return{type:"lists",listIds:n};return t}function KX(e){if(e.lists===void 0)return;let t=e.lists.flatMap((n)=>n.split(",")).map((n)=>n.trim()).filter((n)=>n.length>0);if(t.length===0)throw new y("--lists requires at least one list ID",400);return t}function gMe(e){let t=WX(e);if(e.clearTargetLists){if(t!==void 0)throw new y("Provide either --clear-target-lists or an audience option, not both",400);return null}return t}function JX(e){if(e===void 0)return;let t=Number(e);if(!Number.isInteger(t)||t<1||t>72)throw new y("--spread-over-hours must be an integer between 1 and 72",400);return t}function YX(e){if(e===void 0)return;let t=Number(e);if(!Number.isInteger(t)||t<1||t>24)throw new y("--send-time-window-hours must be an integer between 1 and 24",400);return t}function ZX(e){if(e.sendTimeOptimization===!0&&e.disableSendTimeOptimization===!0)throw new y("Use either --send-time-optimization or --disable-send-time-optimization, not both",400);if(e.disableSendTimeOptimization===!0)return!1;return e.sendTimeOptimization}var xMe=new Set(["campaign","ab_test","variant"]);function AMe(e){let t=JX(e.spreadOverHours);return{...t!==void 0&&{spreadOverHours:t}}}function EMe(e){let t=e.mode??"campaign";if(!xMe.has(t))throw new y("--mode must be one of: campaign, ab_test, variant",400);if(t==="variant"&&!e.variantId)throw new y("--variant-id is required when --mode is variant",400);if(t!=="variant"&&e.variantId!==void 0)throw new y("--variant-id requires --mode variant",400);return{mode:t,...e.variantId!==void 0&&{variantId:e.variantId}}}function hMe(e){if(e===void 0)return;if(e!=="weekly"&&e!=="monthly")throw new y("--repeat must be one of: weekly, monthly",400);return e}function yMe(e,t){if(!e.at?.trim())throw new y("--at is required",400);let n=JX(e.spreadOverHours),r=ZX(e),i=YX(e.sendTimeWindowHours),o=hMe(e.repeat);if(e.inRecipientTimezone&&!e.scheduledTimezone?.trim())throw new y("--in-recipient-timezone requires --scheduled-timezone (the IANA zone --at refers to, e.g. America/New_York)",400);return{scheduledAt:e.at,...t!==void 0&&{targetLists:t},...r!==void 0&&{sendTimeOptimization:r},...i!==void 0&&{sendTimeWindowHours:i},...n!==void 0&&{spreadOverHours:n},...o!==void 0&&{recurringInterval:o},...e.inRecipientTimezone!==void 0&&{sendInRecipientTimezone:e.inRecipientTimezone},...e.scheduledTimezone!==void 0&&{scheduledTimezone:e.scheduledTimezone.trim()}}}function UX(e){if(!e.replyToEmail)return"None";return e.replyToName?`${e.replyToName} <${e.replyToEmail}>`:e.replyToEmail}function zC(e){return e&&e.length>0?e.join(", "):"None"}function $X(e){if(e.sendInRecipientTimezone)return e.scheduledTimezone?`Recipient's local time (wall clock from ${e.scheduledTimezone})`:"Recipient's local time";if(e.sendTimeOptimization)return`Optimal send time (${e.sendTimeWindowHours??12}h window)`;if(e.spreadOverHours)return`Spread over ${e.spreadOverHours}h`;return"No pacing recorded"}function qX(e,t=""){if(e===void 0||e==="email")return;console.log(`${t}Channel: ${e.toUpperCase()} (managed from the dashboard)`)}function m6(e){let t=c8(e);if(!t)return"Not set (choose it when scheduling)";switch(t.type){case"all":return"All active subscribers";case"lists":return t.listIds.length>0?`Lists: ${t.listIds.join(", ")}`:"Lists: none selected";case"segment":return t.segmentId?`Segment: ${t.segmentId}`:"Segment: none selected";case"filtered":return`Filtered (${t.filters.length} filter${t.filters.length===1?"":"s"})`;case"rules":return`Rules (${t.include.length} include, ${(t.exclude??[]).length} exclude)`}}function HC(e){if(e.length===0)return"none";return e.map((t)=>t.missing?`${t.id} (missing)`:`${t.name} [${t.id}]`).join(", ")}function QX(e){if(e.type==="lists")return`lists ${HC(e.lists??[])}`;if(e.type==="segments")return`segments ${HC(e.segments??[])}`;if(e.type==="filtered")return`${e.filters?.length??0} filter condition(s)`;return"all active subscribers"}function bMe(e){let{audience:t}=e;if(console.log(e.campaignName),console.log(`ID: ${e.campaignId}`),console.log(`Status: ${e.status}`),e.scheduledAt)console.log(`Scheduled: ${xe(e.scheduledAt)}`);if(console.log(""),console.log(`Targeting: ${t.type}`),console.log(`Recipients: ${e.recipientCount}`),console.log(`Summary: ${t.summary}`),t.isUnset)console.log("WARNING: targeting is not set. Scheduling sends to every active subscriber.");if(t.lists.length>0)console.log(`Lists: ${HC(t.lists)}`);if(t.segments.length>0)console.log(`Segments: ${HC(t.segments)}`);if(t.filters.length>0)console.log(`Filters: ${t.filters.length} condition(s)`);for(let n of t.include)console.log(`Include: ${QX(n)}`);for(let n of t.exclude)console.log(`Exclude: ${QX(n)}`);if(t.excludedCampaignOpenerIds.length>0)console.log(`Excluding openers of: ${t.excludedCampaignOpenerIds.join(", ")}`);if(t.excludedSubscriberIds.length>0)console.log(`Excluded subscribers: ${t.excludedSubscriberIds.length}`);if(t.includedSubscriberIds.length>0)console.log(`Individually added subscribers: ${t.includedSubscriberIds.length}`)}function CMe(e,t){if(t===void 0)return e;let n=Ot({companyId:t,campaignId:e.id});return{...e,...n.urls.campaign!==void 0&&{url:n.urls.campaign},...n.urls.campaignPreview!==void 0&&{previewUrl:n.urls.campaignPreview}}}function BMe(e){if(e.isActive&&e.notActive)throw new y("Provide either --active or --inactive, not both",400);return{...e.name!==void 0&&{name:e.name},...e.description!==void 0&&{description:e.description},...e.triggerType!==void 0&&{triggerType:e.triggerType},...e.triggerEventName!==void 0&&{triggerEventName:e.triggerEventName},...e.triggerTagName!==void 0&&{triggerTagName:e.triggerTagName},...e.attributePath!==void 0&&{attributePath:e.attributePath},...e.attributeCondition!==void 0&&{attributeCondition:e.attributeCondition},...e.attributeValue!==void 0&&{attributeValue:e.attributeValue},...e.attributePreviousValue!==void 0&&{attributePreviousValue:e.attributePreviousValue},...e.eventPropertyName!==void 0&&{eventPropertyName:e.eventPropertyName},...e.eventPropertyLabel!==void 0&&{eventPropertyLabel:e.eventPropertyLabel},...Mt(e.attributionWindowHours,"--attribution-window-hours")!==void 0&&{attributionWindowHours:Mt(e.attributionWindowHours,"--attribution-window-hours")},...e.isActive&&{isActive:!0},...e.notActive&&{isActive:!1}}}async function Xr(e,t){if(!await ue())Q(fe()),process.exit(1);try{if(e==="list"){let c=new URLSearchParams;if(t.status)c.set("status",t.status);if(t.label)for(let h of t.label)c.append("label",h);if(t.limit)c.set("limit",t.limit);if(t.offset)c.set("offset",t.offset);let u=await w("GET",`/api/v1/campaigns${c.size>0?`?${c.toString()}`:""}`,void 0,t.company),p=await Fn(t.company),g=p!==void 0?Ot({companyId:p,status:t.status}):void 0,A=u.campaigns.map((h)=>CMe(h,p));if(t.json){R({...u,campaigns:A,...g!==void 0&&{appUrls:g.urls}});return}let E=u.pagination;console.log(E?`Campaigns (${u.campaigns.length} of ${E.total})`:`Campaigns (${u.campaigns.length})`);for(let h of A){if(console.log(`- ${h.name} [${h.id}]`),console.log(` Subject: ${h.subject}`),h.emailId)console.log(` Format: ${ms(h.emailPreset)}`);if(console.log(` Status: ${h.status}`),qX(h.type," "),h.rejectionComment)console.log(` Rejection feedback: ${h.rejectionComment}`);if(console.log(` Labels: ${zC(h.labels)}`),console.log(` Created: ${xe(h.createdAt)}`),Ue(" URL",h.url),Ue(" Preview URL",h.previewUrl),h.scheduledAt)console.log(` Scheduled: ${xe(h.scheduledAt)}`);if(h.sentAt)console.log(` Sent: ${xe(h.sentAt)}`);let D=$X(h);if(D!=="No pacing recorded")console.log(` Delivery: ${D}`)}if(E?.hasMore)console.log(`More campaigns available. Re-run with --offset ${E.offset+E.count} to fetch the next page.`);return}let n=Yl({html:t.html,htmlFile:t.htmlFile,blocksJson:t.blocksJson,blocksFile:t.blocksFile});if(e==="create"){pMe(t,n);let c=zX(t.prompt),u=HX(t),p=GX(t);VX(t,p);let g=KX(t),A=await w("POST","/api/v1/campaigns",{name:t.name,...t.subject!==void 0&&{subject:t.subject},...u!==void 0&&{previewText:u},...c!==void 0&&{prompt:c},...t.style!==void 0&&{style:t.style},...t.tone!==void 0&&{tone:t.tone},...n.html!==void 0&&{html:n.html},...n.blocks!==void 0&&{blocks:n.blocks},...t.emailPreset!==void 0&&{emailPreset:t.emailPreset},...t.label!==void 0&&{labels:t.label},...t.trackingCode!==void 0&&{trackingCode:t.trackingCode},...t.status!==void 0&&{status:t.status},...t.sentAt!==void 0&&{sentAt:t.sentAt},...t.fromEmail!==void 0&&{fromEmail:t.fromEmail},...t.fromName!==void 0&&{fromName:t.fromName},...t.senderProfileId!==void 0&&{senderProfileId:t.senderProfileId},...t.replyTo!==void 0&&{replyTo:t.replyTo},...t.replyToName!==void 0&&{replyToName:t.replyToName},...t.replyProfile!==void 0&&{replyProfileId:t.replyProfile},...t.segment!==void 0&&{segmentId:t.segment},...g!==void 0&&{listIds:g},...p!==void 0&&{targetLists:p}},t.company),E=await Fn(t.company),h=A.campaign?.id??A.campaignId,D=E!==void 0&&h!==void 0?Ot({companyId:E,campaignId:h}):void 0;if(t.json){R({...A,...A.campaign!==void 0&&D?.urls.campaign!==void 0&&{campaign:{...A.campaign,url:D.urls.campaign,previewUrl:D.urls.campaignPreview}},...D!==void 0&&{appUrls:D.urls}});return}if(qr(A),console.log(`Created campaign: ${A.campaign?.name??t.name}`),console.log(`ID: ${A.campaign?.id??"Unknown"}`),console.log(`Status: ${A.campaign?.status??"Unknown"}`),A.campaign?.sentAt)console.log(`Sent: ${xe(A.campaign.sentAt)}`);if(console.log(`Subject: ${A.campaign?.subject??t.subject??"Generated"}`),console.log(`Labels: ${zC(A.campaign?.labels)}`),console.log(`Audience: ${m6(A.campaign?.targetLists)}`),c!==void 0)console.log("Content: generated from prompt");Ue("URL",D?.urls.campaign??A.campaign?.url),Ue("Preview URL",D?.urls.campaignPreview??A.campaign?.previewUrl);return}if(!t.id)throw new y("Campaign ID is required",400);if(e==="unschedule"||e==="cancel"||e==="pause"){let c=await w("POST",`/api/v1/campaigns/${t.id}/${e}`,void 0,t.company);if(t.json){R(c);return}let u=e==="unschedule"?"unscheduled":e==="cancel"?"cancelled":"paused";console.log(`Campaign ${u}: ${c.campaign?.name??t.id}`),console.log(`ID: ${c.campaign?.id??t.id}`),console.log(`Status: ${c.campaign?.status??u}`),Ue("URL",c.campaign?.url);return}if(e==="resume"){let c=await w("POST",`/api/v1/campaigns/${t.id}/resume`,AMe(t),t.company);if(t.json){R(c);return}console.log(`Campaign resumed: ${c.campaign?.name??t.id}`),console.log(`ID: ${c.campaign?.id??t.id}`),console.log(`Status: ${c.campaign?.status??"sending"}`),Ue("URL",c.campaign?.url);return}if(e==="delete"){if(!await zn(`Delete campaign ${t.id}?`,t)){console.log("Aborted.");return}let c=await w("DELETE",`/api/v1/campaigns/${t.id}`,void 0,t.company);if(t.json){R(c);return}console.log(`Deleted campaign: ${t.id}`);return}if(e==="duplicate"){let c=await w("POST",`/api/v1/campaigns/${t.id}/duplicate`,EMe(t),t.company);if(t.json){R(c);return}if(console.log(`Duplicated campaign: ${c.campaign?.name??t.id}`),console.log(`New campaign ID: ${c.campaign?.id??"Unknown"}`),console.log(`Status: ${c.campaign?.status??"draft"}`),c.emailId!==void 0)console.log(`New email ID: ${c.emailId}`);Ue("URL",c.campaign?.url),Ue("Preview URL",c.campaign?.previewUrl);return}if(e==="resend-to-non-openers"){let c=await w("POST",`/api/v1/campaigns/${t.id}/resend-to-non-openers`,void 0,t.company);if(t.json){R(c);return}if(console.log(`Created non-opener resend draft: ${c.campaign?.name??t.id}`),console.log(`New campaign ID: ${c.campaign?.id??"Unknown"}`),console.log(`Status: ${c.campaign?.status??"draft"}`),c.estimatedNonOpenerCount!==void 0)console.log(`Estimated recipients: ~${c.estimatedNonOpenerCount}`);Ue("URL",c.campaign?.url);return}if(e==="schedule"){let c=WX(t),u=await w("POST",`/api/v1/campaigns/${t.id}/schedule`,yMe(t,c),t.company),p=await Fn(t.company),g=p!==void 0?Ot({companyId:p,campaignId:t.id}):void 0;if(t.json){R({...u,...u.campaign!==void 0&&g?.urls.campaign!==void 0&&{campaign:{...u.campaign,url:g.urls.campaign,previewUrl:g.urls.campaignPreview}},previewUrl:u.previewUrl??g?.urls.campaignPreview??void 0,...g!==void 0&&{appUrls:g.urls}});return}console.log(`Scheduled campaign: ${u.campaign?.name??t.id}`),console.log(`ID: ${u.campaign?.id??t.id}`),console.log(`Status: ${u.campaign?.status??"scheduled"}`),console.log(`Scheduled: ${xe(u.scheduledAt??u.campaign?.scheduledAt??null)}`),Ue("URL",g?.urls.campaign??u.campaign?.url),Ue("Preview URL",u.previewUrl??g?.urls.campaignPreview??u.campaign?.previewUrl);return}if(e==="update"){let c=fMe(t),u=gMe(t),p=mMe(t,n,c,u),g=await w("PUT",`/api/v1/campaigns/${t.id}`,p,t.company),A=await Fn(t.company),E=A!==void 0?Ot({companyId:A,campaignId:t.id}):void 0;if(t.json){R({...g,...g.campaign!==void 0&&E?.urls.campaign!==void 0&&{campaign:{...g.campaign,url:E.urls.campaign,previewUrl:E.urls.campaignPreview}},...E!==void 0&&{appUrls:E.urls}});return}if(qr(g),console.log(`Updated campaign: ${g.campaign?.name??t.id}`),console.log(`ID: ${g.campaign?.id??t.id}`),console.log(`Status: ${g.campaign?.status??"Unknown"}`),console.log(`Labels: ${zC(g.campaign?.labels)}`),console.log(`Audience: ${m6(g.campaign?.targetLists)}`),Ue("URL",E?.urls.campaign??g.campaign?.url),Ue("Preview URL",E?.urls.campaignPreview??g.campaign?.previewUrl),g.campaign)console.log(`Reply-To: ${UX(g.campaign)}`);return}if(e==="test"){if(!t.to)throw new y("--to is required",400);let c=await w("POST",`/api/v1/campaigns/${t.id}/test`,{to:t.to},t.company),u=await Fn(t.company),p=u!==void 0?Ot({companyId:u,campaignId:t.id,...c.emailSendId?{emailSendId:c.emailSendId}:{}}):void 0;if(t.json){R({...c,...p!==void 0&&{appUrls:p.urls}});return}if(console.log(c.message??`Test requested for ${t.id}`),c.emailSendId)console.log(`Email send ID: ${c.emailSendId}`);Ue("URL",p?.urls.campaign),Ue("Preview URL",p?.urls.campaignPreview),Ue("Email send URL",p?.urls.emailSend);return}if(e==="audience"){let c=await w("GET",`/api/v1/campaigns/${t.id}/audience`,void 0,t.company);if(t.json){R(c);return}bMe(c);return}if(e==="share"){let c=await w("POST",`/api/v1/campaigns/${t.id}/share-link`,void 0,t.company);if(t.json){R(c);return}console.log(c.created?"Public link created.":"Public link already active."),Ue("Share URL",c.shareUrl),console.log("Anyone with the link sees an anonymized copy - no subscriber data, no tracking.");return}if(e==="unshare"){let c=await w("DELETE",`/api/v1/campaigns/${t.id}/share-link`,void 0,t.company);if(t.json){R(c);return}console.log(c.revoked?"Public link revoked. The old URL now returns 404.":"No public link to revoke.");return}if(e==="goals"){if(!t.id)throw new y("Campaign ID is required",400);let c=await w("GET",`/api/v1/campaigns/${t.id}/goals`,void 0,t.company);if(t.json)return R(c);let u=Array.isArray(c.goals)?c.goals:[];console.log(`Campaign goals (${u.length})`);for(let p of u){if(typeof p!=="object"||p===null)continue;let g=p;console.log(`- ${String(g.name??"Unnamed goal")} [${String(g.id??"unknown")}]`)}return}if(e==="goal-create"||e==="goal-update"){if(!t.id)throw new y("Campaign ID is required",400);if(e==="goal-create"&&!t.name)throw new y("Goal name is required",400);if(e==="goal-update"&&!t.goalId)throw new y("Goal ID is required",400);let c=await w(e==="goal-create"?"POST":"PATCH",`/api/v1/campaigns/${t.id}/goals${t.goalId?`/${t.goalId}`:""}`,BMe(t),t.company);if(t.json)return R(c);let u=c.goal;if(console.log(`${e==="goal-create"?"Created":"Updated"} campaign goal: ${String(u?.name??t.name??t.goalId)}`),u?.id)console.log(`ID: ${String(u.id)}`);return}if(e==="goal-delete"){if(!t.id)throw new y("Campaign ID is required",400);if(!t.goalId)throw new y("Goal ID is required",400);let c=await w("DELETE",`/api/v1/campaigns/${t.id}/goals/${t.goalId}`,void 0,t.company);if(t.json)return R(c);console.log(`Deleted campaign goal: ${t.goalId}`);return}let r=await w("GET",`/api/v1/campaigns/${t.id}`,void 0,t.company),i=await Fn(t.company),o=i!==void 0?Ot({companyId:i,campaignId:t.id}):void 0;if(t.json){R({...r,...o?.urls.campaign!==void 0&&{campaign:{...r.campaign,url:o.urls.campaign,previewUrl:o.urls.campaignPreview}},...o!==void 0&&{appUrls:o.urls}});return}let a=r.campaign;if(console.log(a.name),console.log(`ID: ${a.id}`),Ue("URL",o?.urls.campaign??a.url),Ue("Preview URL",o?.urls.campaignPreview??a.previewUrl),a.shareUrl)Ue("Share URL",a.shareUrl);if(console.log(`Status: ${a.status}`),qX(a.type),a.rejectionComment)console.log(`Rejection feedback: ${a.rejectionComment}`);if(console.log(`Subject: ${a.subject}`),a.emailId)console.log(`Email ID: ${a.emailId}`),console.log(`Format: ${ms(a.emailPreset)}`);if(a.trackingCode)console.log(`Tracking code: ${a.trackingCode}`);if(console.log(`Labels: ${zC(a.labels)}`),console.log(`Audience: ${m6(a.targetLists)}`),console.log(`Preheader: ${a.preheader||"None"}`),a.replyToEmail||a.replyProfileId)console.log(`Reply-To: ${UX(a)}`);console.log(`Blocks: ${a.blocks.length}`),console.log(`Created: ${xe(a.createdAt)}`),console.log(`Scheduled: ${xe(a.scheduledAt)}`),console.log(`Sent: ${xe(a.sentAt)}`),console.log(`Delivery: ${$X(a)}`)}catch(n){Q(n instanceof y?n:n),process.exit(1)}}function tee(e){let t=e.supportedLocales.join(", "),n=e.subscriberLocaleAttribute??"not configured";return`${e.primaryLocale} -> [${t}] | fallback ${e.fallbackLocale} | attr ${n} | sync ${e.autoSyncMode}`}function SMe(e){let t=wi(e.description,e.descriptionFile,"description"),n=wi(e.companyContext,e.companyContextFile,"company-context"),r=wi(e.emailDesignPrompt,e.emailDesignPromptFile,"email-design-prompt"),i=ht(e.brandColorsJson,e.brandColorsFile,"brand-colors"),o=ht(e.valuePropsJson,e.valuePropsFile,"value-props"),a=ht(e.testimonialsJson,e.testimonialsFile,"testimonials"),c=ht(e.socialLinksJson,e.socialLinksFile,"social-links"),u=ht(e.pricingJson,e.pricingFile,"pricing"),p=ht(e.emailThemeJson,e.emailThemeFile,"email-theme");if(i!==void 0&&(typeof i!=="object"||Array.isArray(i)||i===null))throw new y("brand-colors JSON must be an object",400);if(o!==void 0&&!Array.isArray(o))throw new y("value-props JSON must be an array",400);if(a!==void 0&&!Array.isArray(a))throw new y("testimonials JSON must be an array",400);if(c!==void 0&&(typeof c!=="object"||Array.isArray(c)||c===null))throw new y("social-links JSON must be an object",400);if(u!==void 0&&(typeof u!=="object"||Array.isArray(u)||u===null))throw new y("pricing JSON must be an object",400);if(p!==void 0&&p!==null&&(typeof p!=="object"||Array.isArray(p)))throw new y("email-theme JSON must be an object or null",400);if(e.enableReplyTracking&&e.disableReplyTracking)throw new y("Use only one of --enable-reply-tracking or --disable-reply-tracking",400);if(e.enableReplyForwarding&&e.disableReplyForwarding)throw new y("Use only one of --enable-reply-forwarding or --disable-reply-forwarding",400);if(e.replyTrackingDomainMode!==void 0&&e.replyTrackingDomainMode!=="sequenzy"&&e.replyTrackingDomainMode!=="custom")throw new y("reply-tracking-domain-mode must be sequenzy or custom",400);let g=e.defaultList??[];if([g.length>0,e.defaultListsNone===!0,e.defaultListsAll===!0].filter(Boolean).length>1)throw new y("--default-list, --default-lists-none, and --default-lists-all are mutually exclusive",400);let E={};if(e.renameMatchingFooters){if(!e.name?.trim()||e.previousCompanyName===void 0)throw new y("--rename-matching-footers requires --name and --previous-company-name",400);E.renameMatchingFooters=!0,E.previousCompanyName=e.previousCompanyName}let h=[["name","name"],["logoUrl","logoUrl"],["founderName","founderName"],["primaryColor","primaryColor"],["toneVoice","toneVoice"],["emailLengthPreference","emailLengthPreference"],["privacyPolicyUrl","privacyPolicyUrl"],["termsUrl","termsUrl"],["address","address"],["language","language"],["fontFamily","fontFamily"],["emailDirection","emailDirection"],["senderProfileId","senderProfileId"],["fromEmail","fromEmail"],["fromName","fromName"],["replyProfileId","replyProfileId"],["replyTo","replyTo"],["replyToName","replyToName"]];for(let[D,O]of h){let q=e[D];if(typeof q==="string")E[O]=q}if(t!==void 0)E.description=t;if(n!==void 0)E.companyContext=n;if(r!==void 0)E.emailDesignPrompt=r;if(i!==void 0)E.brandColors=i;if(o!==void 0)E.valueProps=o;if(a!==void 0)E.testimonials=a;if(c!==void 0)E.socialLinks=c;if(u!==void 0)E.pricing=u;if(p!==void 0)E.emailTheme=p;if(e.enableReplyTracking)E.replyTrackingEnabled=!0;if(e.disableReplyTracking)E.replyTrackingEnabled=!1;if(e.replyTrackingDomainMode!==void 0)E.replyTrackingDomainMode=e.replyTrackingDomainMode;if(e.enableReplyForwarding)E.forwardReplies=!0;if(e.disableReplyForwarding)E.forwardReplies=!1;if(e.defaultListsAll)E.defaultSubscriberListIds=null;else if(e.defaultListsNone)E.defaultSubscriberListIds=[];else if(g.length>0)E.defaultSubscriberListIds=g;if(Object.keys(E).length===0)throw new y("Provide at least one company update option",400);return E}function XX(e,t){if(!t)return"Not set";return e?`${e} <${t}>`:t}function vMe(e){if(e===null)return"All lists (every current and future list)";if(e.length===0)return"No lists";return`${e.length} specific list${e.length===1?"":"s"}: ${e.join(", ")}`}function _Me(e){if(!e.visible)return e.reason==="email_partner"?"Hidden (email-partner entitlement)":`Hidden (paid plan${e.subscriptionTier?`: ${e.subscriptionTier}`:""})`;if(e.reason==="inactive_subscription")return`Visible (subscription ${e.subscriptionStatus??"inactive"}; renew to remove)`;return"Visible (free plan; upgrade to remove)"}function eee(e){console.log(e.name),console.log(`ID: ${e.id}`),console.log(`Status: ${e.status}`),console.log(`Website: ${e.websiteUrl??"Not set"}`),console.log(`Logo: ${e.logoUrl??"Not set"}`),console.log(`Primary color: ${e.primaryColor??"Not set"}`),console.log(`Founder: ${e.founderName??"Not set"}`),console.log(`Description: ${e.description??"Not set"}`),console.log(`Tone: ${e.toneVoice??"Not set"}`),console.log(`Context: ${e.companyContext??"Not set"}`),console.log(`Design prompt: ${e.emailDesignPrompt??"Not set"}`),console.log(`Email length: ${e.emailLengthPreference}`),console.log(`Primary language: ${e.language}`),console.log(`Email direction: ${e.emailDirection}`),console.log(`Sequenzy email branding: ${_Me(e.emailBranding)}`),console.log(`Subscription: ${e.emailBranding.subscriptionUrl}`),console.log(`Default lists for new contacts: ${vMe(e.defaultSubscriberListIds)}`),console.log(`Default From: ${XX(e.defaultFromName,e.defaultFromEmail)}`),console.log(`Default Reply-To: ${XX(e.defaultReplyToName,e.defaultReplyToEmail)}`),console.log(`Reply tracking: ${e.replyTrackingEnabled?"Enabled":"Disabled"}`),console.log(`Reply domain mode: ${e.replyTrackingDomainMode}`),console.log(`Reply forwarding: ${e.forwardReplies?"Enabled":"Disabled"}`),console.log(`Reply retention: ${e.replyRetentionDays} days`),console.log(`Font family: ${e.fontFamily??"Not set"}`),console.log(`Email theme: ${e.emailTheme?`customized (${e.emailTheme.presetId??"default"} preset)`:"Platform default"}`),console.log(`Address: ${e.address??"Not set"}`),console.log(`Privacy policy: ${e.privacyPolicyUrl??"Not set"}`),console.log(`Terms: ${e.termsUrl??"Not set"}`),console.log(`Created: ${xe(e.createdAt)}`),console.log(`Localization: ${tee(e.emailLocalizationConfig)}`)}async function _x(e,t){if(!await ue())Q(fe()),process.exit(1);try{if(e==="list"){let a=await w("GET","/api/v1/companies"),c=a.companies.map((p)=>{let g=Ot({companyId:p.id});return{...p,url:g.urls.dashboard,settingsUrl:g.urls.settings,subscriptionUrl:g.urls.subscription}}),u=a.currentCompanyId!==null?Ot({companyId:a.currentCompanyId}):void 0;if(t.json){R({...a,companies:c,...u!==void 0&&{appUrls:u.urls}});return}console.log(`Companies (${a.companies.length})`);for(let p of c){let g=p.id===a.currentCompanyId?" (current)":"";console.log(`- ${p.name} [${p.id}]${g}`),console.log(` Status: ${p.status}`),console.log(` Website: ${p.websiteUrl??"Not set"}`),Ue(" URL",p.url),Ue(" Settings",p.settingsUrl),Ue(" Subscription",p.subscriptionUrl),console.log(` Localization: ${tee(p.emailLocalizationConfig)}`)}return}if(!t.id){if(e!=="create")throw new y("Company ID is required",400)}if(e==="create"){if(!t.domain)throw new y("Domain is required",400);let a=await w("POST","/api/v1/companies",{domain:t.domain,name:t.name}),c=Ot({companyId:a.company.id});if(t.json){R({...a,company:{...a.company,url:c.urls.dashboard,settingsUrl:c.urls.settings,subscriptionUrl:c.urls.subscription},appUrls:c.urls,settingsUrls:c.settingsUrls});return}console.log(a.company.name),console.log(`ID: ${a.company.id}`),Ue("URL",c.urls.dashboard),Ue("Settings",c.urls.settings),Ue("Subscription",c.urls.subscription),console.log(`Status: ${a.company.status}`),console.log(`Website: ${a.company.websiteUrl??"Not set"}`),console.log(""),console.log(a.message);return}if(e==="update"){let a=t.id;if(!a)throw new y("Company ID is required",400);let c=await w("PATCH",`/api/v1/companies/${a}`,SMe(t)),u=Ot({companyId:a});if(t.json){R({...c,company:{...c.company,url:u.urls.dashboard,settingsUrl:u.urls.settings,subscriptionUrl:u.urls.subscription},appUrls:u.urls,settingsUrls:u.settingsUrls});return}console.log("Company updated"),eee(c.company),Ue("URL",u.urls.dashboard),Ue("Settings",u.urls.settings);return}let n=await w("GET",`/api/v1/companies/${t.id}`),r=Ot({companyId:t.id});if(t.json){R({...n,company:{...n.company,url:r.urls.dashboard,settingsUrl:r.urls.settings,subscriptionUrl:r.urls.subscription},appUrls:r.urls,settingsUrls:r.settingsUrls});return}let i=n.company;Ue("URL",r.urls.dashboard),Ue("Settings",r.urls.settings),eee(i);let o=Object.entries(i.emailLocalizationConfig.valueMappings);if(o.length>0){console.log("Mappings:");for(let[a,c]of o)console.log(`- ${a} -> ${c}`)}}catch(n){Q(n instanceof y?n:n),process.exit(1)}}import{readFile as IMe}from"node:fs/promises";function nee(e,t){if(t.length===0)return"";return`
350
350
  ${e}:
351
351
  ${t.map((n)=>` ${n}`).join(`
352
352
  `)}
@@ -501,4 +501,4 @@ ${Ple}Quick Start${mo}
501
501
  ${Tl}$${mo} sequenzy websites guide --framework nextjs --use-case transactional`,a=`
502
502
  ${Ple}Notes${mo}
503
503
  ${Tl}Generated content should be reviewed before sending.${mo}
504
- ${Tl}Use 'sequenzy --help' and '<command> --help' for detailed examples and caveats.${mo}`;console.log(n),console.log(r),console.log(),console.log(i),console.log(o),console.log(a),console.log()}var Tt=new mF;Tt.name("sequenzy").description("Sequenzy CLI - Email marketing from the terminal").version(Lle).showHelpAfterError().showSuggestionAfterError().action(IWe);k(Tt,{notes:["Use --json on data commands when another tool or agent should parse structured output.","Dashboard-aware JSON responses include appUrls when a company ID can be resolved.","Company-scoped commands accept --company for personal API keys that can access multiple companies.","Content commands prefer file flags such as --html-file, --blocks-file, --steps-file, and --emails-file to avoid shell escaping issues.","Sequence creation supports --goal for AI generation or explicit step JSON."],examples:['sequenzy templates create welcome --subject "Welcome" --html-file ./welcome.html','sequenzy campaigns update camp_123 --subject "Updated subject" --html-file ./campaign.html',"sequenzy sequences create onboarding --trigger contact_added --list-id list_123 --steps-file ./steps.json","sequenzy urls --company comp_123 --sequence seq_123 --settings-tab integrations","sequenzy websites guide --framework nextjs --use-case transactional",'sequenzy api-keys create --name "CI deploy key" --company comp_123']});var DWe=Tt.command("login").description("Log in to your Sequenzy account").action(Mre);k(DWe,{notes:["Starts device authentication and prints a verification URL plus approval code."],examples:["sequenzy login"]});var wWe=Tt.command("logout").description("Log out of your Sequenzy account").action(Ure);k(wWe,{examples:["sequenzy logout"]});var TWe=Tt.command("whoami").description("Show the locally stored Sequenzy identity").action(Fle);k(TWe,{notes:["This checks local CLI credential state only. Use 'sequenzy account' to make a live request and verify the active key, permissions, and company access."],examples:["sequenzy whoami"]});var kWe=Tt.command("stats").description("Show account, campaign, sequence, or transactional email metrics").option("-p, --period <period>","Time period (7d, 30d, 90d)").option("--start <iso>","Start of custom time range (ISO 8601)").option("--end <iso>","End of custom time range (ISO 8601)").option("--campaign <id>","Get stats for a specific campaign").option("--sequence <id>","Get stats for a specific sequence").option("--transactional <id-or-slug>","Get stats for a saved transactional email").option("--email-type <type>","Filter account stats by campaign, transactional, or sequence").option("--emails","List per-email metrics: one row per campaign and per sequence email step").option("--step <number>","With --emails, keep only this 1-based sequence email step").option("--sort <field>","With --emails, sort by sent, delivered, opened, clicked, openRate, clickRate, unsubscribed, conversions, revenue, step, or name").option("--order <order>","With --emails, sort order: asc or desc").option("--page <number>","With --emails, page number").option("--limit <number>","With --emails, emails per page (maximum 500)").option("--mailbox-provider <provider>","Filter by recipient mailbox provider (gmail, microsoft, yahoo, ...)").option("--include-bots","Include machine-classified bot/scanner opens and clicks").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON, including poll and NPS results").action(ile);k(kWe,{notes:["Use exactly one of account-level stats, --campaign, --sequence, or --transactional. --email-type applies only to account-level stats.","--mailbox-provider scopes account or campaign engagement metrics to one recipient mailbox provider (e.g. gmail, microsoft, yahoo); replies, conversions, and revenue cannot be segmented per provider and report 0 under this filter.","Saved transactional email stats are all-time by default; pass --period for a window.","Use --email-type transactional for Send API open and click rates; use 'email-sends get <id>' for one delivery.","Bot/scanner opens and clicks are excluded by default; pass --include-bots to inspect raw engagement.","Sequence stats include per-step sent/delivered/opened/clicked counts, a live active/waiting enrollment breakdown by current node, and per-step failures.","--emails lists one row per campaign and per sequence email step, with totals across every matching email. Combine with --sequence (comma-separated) and --step to answer questions like 'how many step-4 emails went out across these sequences'.","--emails counts come from the retained event stream, so they are not limited to the 14-day `email-sends list` history. Omit --period for all-time totals.","Campaign stats include a Poll & NPS Results section when the email collected answers; use --json for the full polls array."],examples:["sequenzy stats","sequenzy stats --period 30d","sequenzy stats --emails --step 4","sequenzy stats --emails --sequence seq_1,seq_2 --step 4 --json","sequenzy stats --emails --email-type sequence --sort openRate --limit 20","sequenzy stats --campaign camp_123","sequenzy stats --campaign camp_123 --json","sequenzy stats --campaign camp_123 --include-bots","sequenzy stats --sequence seq_123","sequenzy stats --transactional password-reset","sequenzy stats --transactional password-reset --period 30d","sequenzy stats --email-type transactional --period 30d","sequenzy stats --mailbox-provider gmail --period 30d","sequenzy stats --campaign camp_123 --mailbox-provider yahoo"]});var J5=Tt.command("events").description("List raw campaign or sequence email events, or read event payload schemas").option("--campaign <id>","List events for a campaign").option("--sequence <id>","List events for a sequence").option("--automation-node-id <id>","Scope a --sequence stream to one email step").option("--type <type>","Single event type to include, such as delivery, open, or click").option("--event-types <types>","Comma-separated event types to include (default: delivery)").option("-p, --period <period>","Time period (1h, 24h, 7d, 30d, 90d)").option("--start <iso>","Start of custom time range (ISO 8601)").option("--end <iso>","End of custom time range (ISO 8601)").option("--page <number>","Page number").option("--limit <number>","Events per page, capped by the API").option("--include-bots","Include machine-classified bot/scanner opens and clicks").option("-c, --company <id>","Company ID").option("--json","Print JSON").action(lre);k(J5,{notes:["Use exactly one of --campaign or --sequence.","Defaults to delivery events. Use --event-types delivery,open,click when you need engagement events too.","--automation-node-id narrows a sequence stream to one email step; take the node ID from `stats --sequence <id>`.","This is the per-recipient stream. For per-step send totals use `stats --sequence <id>` or `stats --emails`, not a count of these pages.","Bot/scanner opens and clicks are excluded by default; pass --include-bots to inspect raw engagement."],examples:["sequenzy events --campaign camp_123","sequenzy events --sequence seq_123 --limit 100 --json","sequenzy events --sequence seq_123 --automation-node-id node_email_4","sequenzy events --campaign camp_123 --event-types delivery,click --period 30d","sequenzy events schema ecommerce.order_placed"]});J5.command("sample <event>").description("Read the latest received event payload in this workspace").option("-c, --company <id>","Company ID").option("--json","Print JSON").action((e,t)=>pee(e,t));var RWe=J5.command("schema [event]").description("Show the published payload of a built-in event, or list documented events").option("--provider <provider>",rre).option("--example","Print the full sample payload as JSON").option("-c, --company <id>","Company ID").option("--json","Print JSON").action((e,t)=>ore(e,t));k(RWe,{notes:["Read this before writing {{event.*}} merge tags or event property filters: an unrecognized merge tag renders as an empty string rather than an error.","Fields ending in Cents are minor units (8850 = $88.50); price is a preformatted display string, and predictedLtv is whole currency units.","Custom event names are supported everywhere even though they have no published payload here - `documented: false` never means the name is invalid.","This is static reference data. Use `sequenzy events sample <event>` to read the latest actual received payload."],examples:["sequenzy events schema","sequenzy events schema ecommerce.order_placed --provider shopify","sequenzy events schema ecommerce.browse_abandoned --example","sequenzy events schema ecommerce.cart_abandoned --json"]});var FWe=Tt.command("blocks [type]").description("Show the fields each email block type accepts, or list every block type").option("--creatable-only","Hide structural block types the editor manages for you").option("--example","Print the example block as formatted JSON").option("--conditions","Also print the condition field, operator, and value table for this block type").option("-c, --company <id>","Company ID").option("--json","Print JSON").action((e,t)=>oee(e,t));k(FWe,{notes:["Read this before hand-authoring a blocks array: the blocks parameter accepts a 37-type union, so field names are not guessable from the endpoint schema alone.",'Lists are their own block type, not a text variant. A numbered list is {"type":"list","variant":"numbered","items":[{"content":"First"}]}; a visual numbered walkthrough is {"type":"steps","variant":"numbered","items":[{"title":"Step one"},{"title":"Step two"}]}.',"`list` items carry `content`; `steps` items carry `title` and an optional `description`. The two are not interchangeable.","Every block also takes a `conditions` array, and each condition field accepts only its own operators. `blocks conditional-group` prints that table unprompted; any other type takes --conditions, since it is longer than the block reference itself.","This is static reference data derived from the same schemas that validate a write, so it cannot drift from what the API accepts."],examples:["sequenzy blocks","sequenzy blocks --creatable-only","sequenzy blocks list","sequenzy blocks steps --example","sequenzy blocks hero --json","sequenzy blocks conditional-group","sequenzy blocks text --conditions"]});var NWe=Tt.command("poll-responses").description("List individual Poll and NPS responses for a campaign").option("--campaign <id>","Campaign ID (required)").option("--block-id <id>","Scope to one poll block").option("--page <number>","Page number").option("--limit <number>","Responses per page (maximum 500)").option("-c, --company <id>","Company ID").option("--json","Print JSON").action(jre);k(NWe,{notes:["Returns each respondent's latest answer per poll block with the response time, so counts match `stats --campaign <id>`.","Block IDs come from the polls array of `stats --campaign <id> --json`.","For a sequence email step, pass the step's automation node ID as --campaign.","Do not scan subscribers for the poll attribute instead: the attribute carries no response time and reflects the latest answer to any email."],examples:["sequenzy poll-responses --campaign camp_123","sequenzy poll-responses --campaign camp_123 --block-id poll_1 --json","sequenzy poll-responses --campaign camp_123 --limit 500 --page 2"]});var PWe=Tt.command("urls").description("Generate Sequenzy dashboard URLs for known resource IDs").option("-c, --company <id>","Company ID").option("--campaign <id>","Campaign ID for campaign editor URL").option("--landing-page <id>","Landing page ID for landing page editor URL").option("--sequence <id>","Sequence ID for sequence editor URL").option("--template <id>","Template/email ID for email editor URL").option("--email <id>","Email ID for email editor URL").option("--transactional <id>","Transactional email ID").option("--email-send <id>","Email send ID").option("--domain <id>","Sending domain ID").option("--status <status>","Status for campaign/sequence list URLs").option("--settings-tab <tab>","Settings tab slug; billing/subscription opens Account -> Subscription").option("--json","Print JSON").action(PX);k(PWe,{notes:["Uses SEQUENZY_APP_URL when set, otherwise https://sequenzy.com.","If --company is omitted, the CLI tries the current company from `sequenzy account`.","Useful after creating a campaign or sequence when the user wants a review/edit link."],examples:["sequenzy urls --company comp_123","sequenzy urls --company comp_123 --sequence seq_123","sequenzy urls --company comp_123 --campaign camp_123","sequenzy urls --company comp_123 --landing-page lp_123","sequenzy urls --company comp_123 --email-send send_123","sequenzy urls --company comp_123 --settings-tab integrations","sequenzy urls --company comp_123 --settings-tab billing","sequenzy urls --company comp_123 --json"]});var ea=Tt.command("subscribers").description("Manage subscribers").action(()=>ea.help());k(ea,{notes:["Subscriber list fetches every page by default so agents do not silently miss later results.","`subscribers get` includes tags, list memberships, sequence enrollments, email stats, and recent activity.","--attr expects repeated key=value pairs. Example: --attr firstName=Ana --attr plan=pro"],examples:["sequenzy subscribers list --tag vip",'sequenzy subscribers list --list "Master List" --json',"sequenzy subscribers list --tag vip --limit 25 --json","sequenzy subscribers add user@example.com --tag trial --attr firstName=Ana","sequenzy subscribers import copper-contacts.csv --list list_123 --opt-in-mode confirmed","sequenzy subscribers import-status import_123 --json","sequenzy subscribers get user@example.com --json",'sequenzy subscribers notes add user@example.com --body "Customer prefers quarterly reports"',"sequenzy subscribers remove user@example.com --hard"]});var Y5=ea.command("operations").description("Run and monitor background audience tagging");Y5.command("start").requiredOption("--kind <kind>","add_tags").option("--audience-json <json>","Audience filters or subscriberIds as JSON (supports @file)").option("--tag <tags...>","Tags to add").option("--trigger-automations","Trigger tag automations (requires automations:trigger)").option("--request-key <key>","Idempotency key; reuse after an uncertain start response").option("-c, --company <id>","Company ID").option("--json","Print JSON").action((e)=>JB("start",e));Y5.command("list").option("-c, --company <id>").option("--json").action((e)=>JB("list",e));for(let e of["get","cancel"])Y5.command(`${e} <id>`).option("-c, --company <id>").option("--json").action((t,n)=>JB(e,{...n,id:t}));var OWe=ea.command("list").description("List subscribers").option("-s, --segment <id>","Filter by segment").option("-t, --tag <tag>","Filter by tag").option("--list <id-or-name>","Filter by subscriber list ID or exact name").option("--status <status>","active, unsubscribed, bounced, or all").option("--unsubscribed-after <date>","Only contacts whose opt-out is on or after this ISO 8601 date or zoned datetime").option("--unsubscribed-before <date>","Only contacts whose opt-out is on or before this ISO 8601 date or zoned datetime").option("--attribute <name>",'Filter by custom attribute name, e.g. "plan". The "name:value" form also works').option("--attribute-value <value>","Value the custom attribute must match").option("--attribute-operator <operator>","is, contains, gt, gte, lt, lte, or is_not_empty (default: is)").option("-l, --limit <number>","Maximum results to return").option("--offset <number>","Matches to skip (maximum 999999; use --cursor for deeper pagination)").option("--page <number>","1-based page number; requires --limit").option("--cursor <token>","pagination.nextCursor from the previous response; cheaper than --offset").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>ya("list",e));k(OWe,{notes:["Without --limit the command walks every page and returns all matches in one call.","With --limit, page through the audience by re-running with --cursor set to the previous response's pagination.nextCursor. Fall back to --offset (or --page) when nextCursor is null.","--attribute filters on ClickHouse-backed custom attributes and cannot be combined with --segment. Use a saved segment for compound or is_not/is_empty attribute filters.","--unsubscribed-after/--unsubscribed-before match the opt-out date and exclude contacts that have none: active contacts, and contacts imported as already unsubscribed. Bare dates use UTC midnight; datetimes must include Z or an explicit offset."],examples:["sequenzy subscribers list",'sequenzy subscribers list --list "Master List"',"sequenzy subscribers list --segment seg_123","sequenzy subscribers list --tag onboarding --limit 100","sequenzy subscribers list --status unsubscribed --unsubscribed-after 2026-07-01 --json","sequenzy subscribers list --limit 50 --json","sequenzy subscribers list --limit 50 --cursor NEXT_CURSOR --json","sequenzy subscribers list --limit 50 --offset 50 --json","sequenzy subscribers list --attribute plan --attribute-value pro","sequenzy subscribers list --attribute mrr --attribute-value 50 --attribute-operator gte","sequenzy subscribers list --attribute prem_rouge_sample_received --attribute-operator is_not_empty --json"]});var LWe=ea.command("add [email]").description("Add or upsert a subscriber").option("--external-id <id>","Customer-owned subscriber ID").option("--phone <phone>","Phone number (E.164 or national). With no email, creates a phone-only SMS contact").option("--phone-country <country>","Two-letter country used to read a national-format --phone (default US)").option("--sms-consent","Record express written SMS marketing consent for the phone number").option("--first-name <name>","Subscriber first name").option("--last-name <name>","Subscriber last name").option("--timezone <zone>","IANA timezone (e.g. America/New_York) used for recipient-local campaign delivery").option("-t, --tag <tags...>","Tags to apply").option("-l, --list <ids...>","List IDs to add the subscriber to").option("--no-lists","Add the subscriber to no lists").option("--skip-sequences","Do not enroll the subscriber in matching sequences").option("--enroll-sequences","Enroll matching sequences, including when --created-at is supplied (requires automations:trigger)").option("-a, --attr <attrs...>","Attributes (key=value)").option("--created-at <iso-date>","Original signup date when importing history from another platform (only ever moves an existing contact's date earlier; skips sequences unless --enroll-sequences is passed)").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>ya("add",{email:e,...t,noLists:t.lists===!1}));k(LWe,{examples:["sequenzy subscribers add user@example.com","sequenzy subscribers add user@example.com --first-name Ana --tag trial --attr plan=pro","sequenzy subscribers add user@example.com --list list_123","sequenzy subscribers add user@example.com --skip-sequences","sequenzy subscribers add user@example.com --created-at 2019-03-14T09:30:00Z","sequenzy subscribers add user@example.com --created-at 2019-03-14T09:30:00Z --enroll-sequences","sequenzy subscribers add --phone '+14155550123' --sms-consent"],notes:["--created-at preserves a contact's real signup date so date-relative segments are correct right after a migration. It never moves an existing contact's date later, and it suppresses sequence enrollment by default because it describes the past, not a signup happening now. Pass --enroll-sequences to opt in explicitly. New-subscriber account notifications remain eligible when the signup date is at most one hour old; older dates do not notify on creation. Double opt-in confirmation can notify even for imported contacts. Your notification preferences, double opt-in and the daily cap still apply."]});var MWe=ea.command("import [file]").description("Queue a full-record subscriber import from CSV or JSON").option("--records-json <json>","Inline JSON array (alternative to a CSV/JSON file)").option("--duplicate-strategy <strategy>","Existing contact behavior: skip, merge, or overwrite","skip").option("--file-name <name>","Source label shown in import history").option("-l, --list <ids...>","List IDs for every imported subscriber (requires lists:write)").option("--enroll-sequences","Enroll matching subscribers (requires automations:trigger)").option("--default-phone-country <country>","Two-letter country for national phone numbers").option("--sms-consent","Assert express written SMS consent for every imported phone").option("--opt-in-mode <mode>","Email consent mode: default, confirmed, or double_opt_in (default may require automations:trigger; double_opt_in always does)","default").option("--idempotency-key <key>","Caller-owned key (1-255 chars) that makes retrying this request safe: resending the same content returns the already-queued import, while changed content under the same key queues a new import").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>ya("import",{file:e,...t}));k(MWe,{notes:["CSV columns for email, names, external ID, phone, status, and tags are detected automatically; other columns become custom attributes.","Use --opt-in-mode confirmed only when these contacts already gave verified email consent.","Imports run asynchronously. Poll the returned ID with subscribers import-status.","Pass --idempotency-key from pipelines and retry loops so a timed-out request can be resent without double-queueing the batch.","If two identical keyed requests overlap, one may receive a retryable 503; honor Retry-After and resend the same request."],examples:["sequenzy subscribers import copper-contacts.csv --list list_123 --opt-in-mode confirmed",`sequenzy subscribers import --records-json '[{"email":"one@example.com","firstName":"Ana"}]' --opt-in-mode confirmed`,"sequenzy subscribers import contacts.csv --duplicate-strategy merge --idempotency-key nightly-sync-2026-08-25"]});var UWe=ea.command("import-status <importId>").description("Get subscriber import progress and result counts").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>ya("import:get",{importId:e,...t}));k(UWe,{notes:["A completed import can still contain failed rows; inspect failed counts and --json reason maps."],examples:["sequenzy subscribers import-status import_123","sequenzy subscribers import-status import_123 --json"]});var $We=ea.command("events-import [file]").description("Record events for many subscribers from a JSON file").option("--events-json <json>","Inline JSON array (alternative to a JSON file)").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>ya("events:import",{file:e,...t}));k($We,{notes:["Each event needs a name, an eventId, and an email or externalId; externalId-only rows must identify an existing contact because email is required for creation. At most 25 events per request.","History is classified per contact: only contacts whose events are all more than an hour old use the silent historical path. If any event for a contact is recent, every event for that contact uses the live path and can run sequences or webhooks.","Derive each required eventId from your source data so re-running the same file records nothing twice."],examples:["sequenzy subscribers events-import purchases.json",`sequenzy subscribers events-import --events-json '[{"email":"one@example.com","name":"purchase_completed","eventId":"order_1","occurredAt":"2026-08-01T12:00:00Z"}]'`]});var qWe=ea.command("get [email]").description("Get subscriber details").option("--external-id <id>","Customer-owned subscriber ID").option("--include-bots","Include machine-classified bot/scanner opens and clicks in stats/activity").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>ya("get",{email:e,...t}));k(qWe,{notes:["Bot/scanner opens and clicks are excluded by default; pass --include-bots to inspect raw engagement."],examples:["sequenzy subscribers get user@example.com","sequenzy subscribers get user@example.com --include-bots"]});var cA=ea.command("notes").description("Manage subscriber notes").action(()=>cA.help());k(cA,{examples:["sequenzy subscribers notes list user@example.com",'sequenzy subscribers notes add user@example.com --body "Prefers monthly digest"',"sequenzy subscribers notes delete note_123"]});var QWe=cA.command("list [email]").description("List subscriber notes").option("--external-id <id>","Customer-owned subscriber ID").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>ya("notes:list",{email:e,...t}));k(QWe,{examples:["sequenzy subscribers notes list user@example.com","sequenzy subscribers notes list --external-id user_123 --json"]});var zWe=cA.command("add [email]").description("Add a subscriber note").option("--external-id <id>","Customer-owned subscriber ID").requiredOption("-b, --body <body>","Note body").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>ya("notes:add",{email:e,...t}));k(zWe,{examples:['sequenzy subscribers notes add user@example.com --body "Asked about enterprise plan"','sequenzy subscribers notes add --external-id user_123 --body "Imported from sales call"']});var HWe=cA.command("delete <noteId>").description("Delete a subscriber note").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>ya("notes:delete",{noteId:e,...t}));k(HWe,{examples:["sequenzy subscribers notes delete note_123"]});var jWe=ea.command("update [email]").description("Update subscriber status, name, phone, tags, or custom attributes").option("--external-id <id>","Customer-owned subscriber ID").option("--status <status>","Subscriber status").option("--first-name <name>","Subscriber first name").option("--last-name <name>","Subscriber last name").option("--timezone <zone>","IANA timezone (e.g. America/New_York). Pass an empty string to clear it").option("--phone <phone>","Phone number (E.164 or national). Pass an empty string to clear it").option("--phone-country <country>","Two-letter country used to read a national-format --phone (default US)").option("--sms-consent","Record express written SMS marketing consent for the phone number").option("--no-sms-consent","Unsubscribe the contact from SMS").option("-t, --tag <tags...>","Replacement tags").option("-a, --attr <attrs...>","Attributes (key=value)").option("--merge","Merge custom attributes instead of replacing them").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>ya("update",{email:e,...t}));k(jWe,{notes:["--phone writes the native phone field shown on the contact, not a custom attribute.","Changing --phone resets SMS consent unless --sms-consent is passed in the same command."],examples:["sequenzy subscribers update user@example.com --status unsubscribed","sequenzy subscribers update user@example.com --first-name Ana --last-name Silva","sequenzy subscribers update user@example.com --phone '+390512345678'","sequenzy subscribers update user@example.com --phone '051 234 5678' --phone-country IT --sms-consent","sequenzy subscribers update user@example.com --tag churned --attr cancelReason=too_expensive","sequenzy subscribers update user@example.com --attr plan=pro --merge"]});var GWe=ea.command("event [email]").description("Trigger an event for a subscriber").option("--external-id <id>","Customer-owned subscriber ID").requiredOption("-n, --name <event>","Event name").option("-p, --property <properties...>","Event properties (key=value)").option("-a, --attr <attrs...>","Subscriber attributes (key=value)").option("--occurred-at <iso-date>","When the event actually happened; more than an hour ago records it as history without running sequences").option("--event-id <id>","Your own event ID, so re-sending the same event writes nothing new").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>ya("event",{email:e,...t}));k(GWe,{examples:["sequenzy subscribers event user@example.com --name saas.purchase","sequenzy subscribers event user@example.com --name saas.purchase --property plan=pro --property amount=99","sequenzy subscribers event user@example.com --name saas.purchase --occurred-at 2024-11-02T10:00:00Z --event-id inv_9182"],notes:["Without --occurred-at the event is live and runs the full chain: sync rules, sequence enrollment, waiting steps, goal conversions.","--event-id is an idempotency key on both paths: re-sending an ID this contact already has for this event name records nothing and runs no side effects. It is best-effort for live events sent within a second of each other, so a producer that needs a strict guarantee should keep its own ledger.","With an --occurred-at more than an hour in the past the event is recorded as history: stored with its real timestamp and counted by segments, but no sequences enroll and no webhooks fire. The contact's signup date also moves back to when the event occurred (never later). Use it for backfills, never to fake a live event."]});var iS=ea.command("tags").description("Bulk add or remove tags across many existing subscribers").action(()=>iS.help());k(iS,{notes:["These commands only touch contacts that already exist. Unknown identifiers are reported, never created.","Use `subscribers add` or `subscribers update` for single-contact tag changes."],examples:["sequenzy subscribers tags add --tag legacy-plan --emails-file ./backlog.csv","sequenzy subscribers tags remove --tag legacy-plan --emails-file ./backlog.csv"]});var VWe=iS.command("add").description("Add tags to many existing subscribers").requiredOption("-t, --tag <tags...>","Tags to add").option("-e, --email <emails...>","Subscriber emails to tag").option("--emails-json <json>","JSON array of subscriber emails").option("--emails-file <file>","CSV or newline-separated file of emails").option("--external-id <ids...>","Customer-owned subscriber IDs to tag").option("--subscriber-id <ids...>","Sequenzy subscriber IDs to tag").option("--trigger-automations","Allow tag_added sequences to enroll these contacts (requires automations:trigger)").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>M5("add",e));k(VWe,{notes:["Tag automations are skipped by default, which is what historical backfills want.","Requests are chunked at 500 targets each; totals in the output are combined across chunks."],examples:["sequenzy subscribers tags add --tag vip --email a@example.com --email b@example.com","sequenzy subscribers tags add --tag derived-churn --emails-file ./backlog.csv --json","sequenzy subscribers tags add --tag welcome --emails-file ./new.csv --trigger-automations"]});var WWe=iS.command("remove").description("Remove tags from many existing subscribers").requiredOption("-t, --tag <tags...>","Tags to remove").option("-e, --email <emails...>","Subscriber emails to untag").option("--emails-json <json>","JSON array of subscriber emails").option("--emails-file <file>","CSV or newline-separated file of emails").option("--external-id <ids...>","Customer-owned subscriber IDs to untag").option("--subscriber-id <ids...>","Sequenzy subscriber IDs to untag").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>M5("remove",e));k(WWe,{examples:["sequenzy subscribers tags remove --tag legacy-plan --emails-file ./backlog.csv","sequenzy subscribers tags remove --tag vip --subscriber-id sub_1 sub_2"]});var KWe=ea.command("remove [email]").description("Unsubscribe or permanently delete a subscriber").option("--external-id <id>","Customer-owned subscriber ID").option("--hard","Permanently delete (not just unsubscribe)").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>ya("remove",{email:e,...t}));k(KWe,{examples:["sequenzy subscribers remove user@example.com","sequenzy subscribers remove user@example.com --hard"]});var xp=Tt.command("transactional").description("Manage transactional email templates").action(()=>xp.help());k(xp,{notes:["Use the top-level `sequenzy send` command to send email."],examples:["sequenzy transactional list","sequenzy transactional get welcome","sequenzy transactional update welcome --no-enabled","sequenzy transactional delete welcome --yes","sequenzy send user@example.com --template welcome --var firstName=Ana"]});var JWe=xp.command("list").description("List transactional templates").option("--search <text>","Search name, slug, or email subject/title").option("--status <status>","Filter by all, active, or disabled","all").option("--sort <field>","Sort by date, sends, opens, open-rate, clicks, or ctr","date").option("--order <order>","Sort order: asc or desc","desc").option("--include-bots","Include machine opens and clicks").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>Rf("list",e));k(JWe,{examples:['sequenzy transactional list --search "password reset" --status active',"sequenzy transactional list --sort open-rate --order desc","sequenzy transactional list --company comp_123 --json"]});var YWe=xp.command("get <slug>").description("Get transactional template details by slug").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Rf("get",{slug:e,...t}));k(YWe,{examples:["sequenzy transactional get welcome"]});var ZWe=xp.command("create <name>").description("Create a transactional template").option("--slug <slug>","API slug").option("-s, --subject <subject>","Subject (optional with --prompt)").option("--preview-text <text>","Preview text override").option("--prompt <prompt>","Generate branded transactional blocks").option("--style <style>","Prompt generation style. Pass designed or plain to force the designed or plain-text email style; other values are freeform guidance (defaults to the company's email style preference)").option("--tone <tone>","Prompt generation tone").option("--html <html>","Preserved HTML content").option("--html-file <file>","Read preserved HTML from file").option("--blocks-json <json>","Finished Sequenzy blocks JSON").option("--blocks-file <file>","Read finished Sequenzy blocks from file").option("--enabled","Enable immediately (prompt creates default disabled)").option("--no-enabled","Create the transactional template disabled").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Rf("create",{name:e,...t}));k(ZWe,{notes:["Provide exactly one of prompt, HTML, or blocks.",lA],examples:['sequenzy transactional create password-reset --prompt "Write a password reset email"']});var XWe=xp.command("update <slug>").description("Update a transactional template by ID or slug").option("--name <name>","Transactional template name").option("-s, --subject <subject>","Subject line").option("--preview-text <text>","Preview text").option("--clear-preview-text","Remove the preview text").option("--html <html>","Replace the body with preserved HTML").option("--html-file <file>","Replace the body with HTML read from file").option("--blocks-json <json>","Replace the body with Sequenzy blocks JSON").option("--blocks-file <file>","Replace the body with blocks read from file").option("--enabled","Allow this template to be sent").option("--no-enabled","Stop this template from being sent").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Rf("update",{slug:e,...t}));k(XWe,{notes:["Partial update: only the fields you pass change.","Replacing the body takes HTML or blocks, not both.","Use --no-enabled to stop sends while keeping the template and its stats.",lA],examples:["sequenzy transactional update password-reset --no-enabled",'sequenzy transactional update password-reset --subject "Reset your password"',"sequenzy transactional update password-reset --blocks-file ./reset.json"]});var eKe=xp.command("delete <slug>").description("Delete a transactional template by ID or slug").option("-y, --yes","Skip the confirmation prompt").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Rf("delete",{slug:e,...t}));k(eKe,{notes:["Deleting frees the slug for reuse and stops any further sends through it.","Past deliveries and their stats are kept; only the saved template is removed.","Requires an API key with the transactional:delete scope."],examples:["sequenzy transactional delete password-reset --yes"]});var Z5=Tt.command("widgets").description("Widget helper commands").action(()=>Z5.help());k(Z5,{examples:["sequenzy widgets preferences-token user@example.com"]});var tKe=Z5.command("preferences-token <email>").description("Generate a subscription preferences iframe token").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Nle("preferences-token",{email:e,...t}));k(tKe,{examples:["sequenzy widgets preferences-token user@example.com"]});var oS=Tt.command("email-sends").alias("emailsends").description("Inspect sent email snapshots and delivery events").action(()=>oS.help());k(oS,{notes:["Email send rows are short-lived; if the row was cleaned up, this falls back to retained ClickHouse events.","The list command matches the dashboard's 14-day delivery history and supports subject, recipient, status, type, and source filters.","Use --html to print the stored HTML body when it is still available."],examples:['sequenzy email-sends list --search "Welcome" --status opened',"sequenzy email-sends get send_123","sequenzy email-sends get send_123 --html","sequenzy email-sends get send_123 --json"]});var nKe=oS.command("list").description("List and filter recent sent email deliveries").option("--search <text>","Search subject or recipient email").option("--subject <text>","Filter by subject/title").option("--recipient <text>","Filter by recipient email").option("--status <status>","Filter by delivery status").option("--email-type <type>","Filter by campaign, transactional, or sequence").option("--bounce-type <type>","Filter bounced sends by Permanent or Transient").option("--campaign <id>","Filter by campaign ID").option("--transactional <id>","Filter by saved transactional email ID").option("--sequence <id>","Filter by sequence ID").option("--automation-node-id <id>","Filter by one email step of a sequence").option("--days <days>","History window in days (maximum 14)","14").option("--page <page>","Page number").option("--limit <limit>","Results per page (maximum 100)").option("--all","Fetch every result page").option("--csv [path]","Export CSV to stdout, or write it to an optional file path").option("--sort <field>","Sort by recipientEmail, subject, status, eventAt, sentAt, or createdAt","createdAt").option("--order <order>","Sort order: asc or desc","desc").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>E6("list",e));k(nKe,{notes:["The opened status includes clicked deliveries, matching the dashboard.","Use a returned ID with `sequenzy email-sends get <id>` for timestamps and the complete event timeline.","Use --all --csv email-sends.csv to export every matching delivery.","--automation-node-id lists the recipients of one sequence step; the node ID comes from `stats --sequence <id>`.","This history only reaches back 14 days. For per-step send totals over the full retained window use `stats --sequence <id>` or `stats --emails`."],examples:['sequenzy email-sends list --search "Welcome" --status opened',"sequenzy email-sends list --email-type transactional --days 7","sequenzy email-sends list --sequence seq_123 --automation-node-id node_email_4","sequenzy email-sends list --transactional txn_123 --all --csv email-sends.csv","sequenzy email-sends list --subject receipt --recipient example.com --json"]});var rKe=oS.command("get <emailSendId>").description("Get an email send by ID").option("-c, --company <id>","Company ID override for personal API keys").option("--html","Print the full stored HTML body in text output").option("--html-only","Print only the stored HTML body").option("--json","Print raw JSON").action((e,t)=>E6("get",{id:e,...t}));k(rKe,{examples:["sequenzy email-sends get send_123","sequenzy email-sends get send_123 --html","sequenzy email-sends get send_123 --company comp_123 --json"]});var uA=Tt.command("suppressions").description("Inspect recipient suppression and clear workspace escalations").action(()=>uA.help());k(uA,{notes:["Suppression lookup is exact-address only because the SES account-level list is shared across companies.","Removal clears workspace soft-bounce escalations only; global invalid-recipient, workspace hard-bounce, SES, complaint, and unsubscribe protections are preserved."],examples:["sequenzy suppressions list","sequenzy suppressions get me@example.com","sequenzy suppressions remove me@example.com --yes"]});var iKe=uA.command("list").description("List recipients this workspace cannot reach").option("--search <query>","Filter by email substring").option("--page <page>","Page number (default 1)").option("--limit <limit>","Entries per page (max 100)").option("--sort <field>","Order by suppressedAt, email, or status").option("--order <direction>","asc or desc").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>XB("list",e));k(iKe,{notes:["Shows protected global invalid-recipient suppressions for associated addresses, protected workspace hard bounces without conclusive invalid-inbox evidence, workspace soft-bounce escalations, and recipients who reported an email as spam.","Only workspace soft-bounce escalations can be removed.","--sort status lists removable escalations before protected suppressions. An unrecognized --sort falls back to newest first, and the applied order is printed with the results."],examples:["sequenzy suppressions list","sequenzy suppressions list --search example.com --json","sequenzy suppressions list --sort status --order desc"]});var oKe=uA.command("get <email>").description("Check local and Amazon SES suppression for one recipient").option("--region <region>","Check one AWS SES region").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>XB("get",{email:e,...t}));k(oKe,{examples:["sequenzy suppressions get me@example.com","sequenzy suppressions get me@example.com --region us-east-1 --json"]});var aKe=uA.command("remove <email>").description("Remove a workspace soft-bounce escalation").option("--region <region>","Inspect one AWS SES region after removal").option("-c, --company <id>","Company ID override for personal API keys").option("-y, --yes","Skip confirmation").option("--json","Print raw JSON").action((e,t)=>XB("remove",{email:e,...t}));k(aKe,{examples:["sequenzy suppressions remove me@example.com","sequenzy suppressions remove me@example.com --region us-east-1 --yes"]});var sKe=hse(Tt.command("send <email...>").description("Send through the transactional email API")).option("-t, --template <slug>","Transactional template slug to use").option("-s, --subject <subject>","Email subject").option("--html <html>","Email HTML content").option("--html-file <file>","Read HTML from file").option("--email-type <type>","Delivery policy: transactional (default) or marketing").option("--from-email <email>","Send from this verified sender address instead of the company default").option("--from-name <name>","Existing sender display name on --from-email when the address has several identities").option("--sender-profile-id <id>","Existing sender profile ID; omit --from-email. See sequenzy sender-profiles list").option("--reply-to <address>","Reply-To address or Name <email> value").option("--reply-to-name <name>","Display name for a bare --reply-to address").option("--reply-profile <id>","Existing reply profile ID; omit --reply-to. See sequenzy sender-profiles list").option("--attachments-json <json>","Attachments as JSON objects with filename and content or path").option("--no-track-clicks","Disable click tracking for this send to keep iOS/Android universal links working").option("--no-track-opens","Disable the open-tracking pixel for this send").option("--idempotency-key <key>","Retry key that prevents duplicate sends for 14 days").option("--vars-json <json>","Variables as a JSON object, including nested arrays for repeat blocks").option("-v, --var <vars...>","Variables (key=value)").action(Cse);k(sKe,{notes:["Use either --template or --html/--html-file.","--template takes a transactional API slug and cannot be combined with --subject.","--subject is required when sending raw HTML.","Pass several recipients, --cc, or --bcc to send one email with a shared recipient list instead of one email per address. Each list accepts up to 50 addresses; repeat --cc/--bcc or use comma-separated values for several copy recipients.","Addresses repeated across the lists are dropped from the lower-priority one: to beats cc beats bcc.","--email-type marketing adds the standard unsubscribe footer and RFC 8058 one-click-unsubscribe headers; it supports one recipient only and rejects --cc and --bcc.","When --from-email and --sender-profile-id are omitted, a template send keeps its saved From identity and a direct send uses the company default. Pass --from-email (and --from-name if that address has several identities) to send as a non-default verified brand without looking up IDs.","Use either --from-email or --sender-profile-id, not both. --from-name requires --from-email. --sender-profile-id already carries the display name.","When --reply-to and --reply-profile are omitted, the saved template or company Reply-To default is used. Use either --reply-to or --reply-profile, not both. --reply-to-name requires a bare --reply-to address.","--attachments-json accepts up to 10 objects with filename plus Base64 content or a public path; contentId embeds a CID image and contentType overrides MIME detection.","--no-track-clicks and --no-track-opens are opt-out only for this send; they cannot enable tracking the account has disabled.","--vars-json accepts nested objects and arrays; --var overrides individual scalar keys.","If the recipient matches a subscriber, saved first and last names fill omitted name variables; --var values override them.","For retryable automation, generate one --idempotency-key per logical email and reuse that same key on every retry. Reusing it with different content is rejected."],examples:["sequenzy send user@example.com --template welcome --var firstName=Ana","sequenzy send buyer@example.com ops@example.com --cc billing@example.com --bcc archive@example.com --template order-confirmation",`sequenzy send user@example.com --template welcome --vars-json '{"event":{"items":[{"title":"Plan","description":"Pro"}]}}'`,'sequenzy send user@example.com --subject "Welcome" --html-file ./welcome.html',`sequenzy send user@example.com --subject "Ticket" --html '<img src="cid:ticket-qr">' --attachments-json '[{"filename":"ticket.png","path":"https://example.com/ticket.png","contentId":"ticket-qr","contentType":"image/png"}]'`,"sequenzy send user@example.com --template trial-reminder --email-type marketing --var firstName=Ana",'sequenzy send user@example.com --subject "StudyBoost test" --html "<p>Hi</p>" --from-email hello@studyboost.com --from-name StudyBoost --reply-to support@studyboost.com --reply-to-name "StudyBoost Support"',"sequenzy send user@example.com --template receipt --idempotency-key order-123-receipt"]});var si=Tt.command("campaigns").description("Manage campaigns").action(()=>si.help());k(si,{notes:["Campaign creation supports HTML, Sequenzy blocks, or prompt-generated content.","Campaign updates support HTML, Sequenzy blocks, subject, name, labels, and reply-to changes.","Campaign scheduling requires a future ISO timestamp and a verified sending domain.","Use unschedule to return a scheduled campaign to draft, cancel to stop one permanently, and pause/resume to control an active send.",lA],examples:["sequenzy campaigns list --status draft --company comp_123",'sequenzy campaigns create "April Launch" --subject "We shipped" --html-file ./campaign.html','sequenzy campaigns create "API Launch" --subject "We shipped" --label edm api --html-file ./campaign.html','sequenzy campaigns schedule camp_123 --at "2026-06-01T14:00:00Z"',"sequenzy campaigns test camp_123 --to you@example.com","sequenzy campaigns unschedule camp_123","sequenzy campaigns cancel camp_123","sequenzy campaigns duplicate camp_123 --mode ab_test"]});var lKe=si.command("list").description("List campaigns").option("-s, --status <status>","Filter by status").option("--label <labels...>","Filter by label name").option("--limit <count>","Page size from 1 to 100 (defaults to 50)").option("--offset <count>","Zero-based result offset").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>Xr("list",e));k(lKe,{notes:["Results are paginated: the default page size is 50 and --limit is capped at 100.","Read the pagination object (--json) or the trailing hint to page through every campaign with --offset."],examples:["sequenzy campaigns list","sequenzy campaigns list --status draft --company comp_123","sequenzy campaigns list --label edm","sequenzy campaigns list --limit 100 --offset 100"]});var cKe=si.command("get <id>").description("Get campaign details").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Xr("get",{id:e,...t}));k(cKe,{examples:["sequenzy campaigns get camp_123 --company comp_123"]});var uKe=si.command("audience <id>").description("Show who a campaign will reach, with a live recipient count").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Xr("audience",{id:e,...t}));k(uKe,{notes:["Resolves list and segment names and recomputes the recipient count at read time.","Warns when targeting is unset, because scheduling then sends to every active subscriber."],examples:["sequenzy campaigns audience camp_123 --company comp_123"]});function X5(e){return e.option("--subscriber <id>","Personalize as a stored subscriber").option("--email <email>","Personalize as an ad-hoc contact").option("--first-name <name>","First name for --email").option("--last-name <name>","Last name for --email").option("--attr <key=value...>","Custom attribute for the --email contact (repeatable)").option("--attrs-json <json>","Custom attributes for the --email contact as a JSON object").option("--tag <tags...>","Tag the --email contact carries, for previewing tag conditions (repeatable)").option("--empty-tags","State that the --email contact carries no tags, for previewing empty-tag conditions").option("--var <key=value...>","Extra merge variable (repeatable)").option("--vars-json <json>","Extra merge variables as a JSON object").option("--locale <locale>","Force a localization locale").option("--tracking","Apply the company's auto-UTM link decoration").option("--out <file>","Write the HTML to a file, or - for stdout").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON")}var e3=["Renders the email exactly as it would be sent, so an external builder or dashboard can show a true preview.","Without --subscriber or --email the email renders for a sample contact and contact-specific merge tags resolve to empty values.","Unresolved merge tags are listed in the summary and under unresolvedMergeTags with --json. Nothing is called unrecognized unless the render knows the contact's attributes, since a bare {{plan}} reads the same attributes as {{subscriber.plan}}, so pass --subscriber, or --email with --attr/--attrs-json, to catch typos. Rendering a transactional email also needs --var/--vars-json, since its tags come from the variables of each send call.",'Conditional blocks that read stored subscriber state (tag, segment, list, status, event, purchases, engagement) can only be evaluated for --subscriber, or for a tag condition with --email plus --tag/--empty-tags. Anything the render cannot evaluate is rendered as false and listed under "Conditions not evaluated", because an else branch in the HTML looks the same either way.',"Links are clean by default. Pass --tracking to apply the company's auto-UTM decoration.","Per-send click redirects and the open pixel are added at send time against a real email send record, so they never appear in a render."],dKe=X5(si.command("render <id>").description("Render a campaign to email-ready HTML").option("--variant <id>","Render a specific A/B test variant")).action((e,t)=>eB({type:"campaign",id:e},t));k(dKe,{notes:e3,examples:["sequenzy campaigns render camp_123 --out preview.html","sequenzy campaigns render camp_123 --subscriber sub_123 --out -","sequenzy campaigns render camp_123 --email you@example.com --first-name Ada --var plan=Pro","sequenzy campaigns render camp_123 --email you@example.com --tag extended","sequenzy campaigns render camp_123 --email you@example.com --empty-tags","sequenzy campaigns render camp_123 --email you@example.com --attr plan=pro --attr mrr=99 --json","sequenzy campaigns render camp_123 --variant var_123 --tracking --json"]});var pKe=si.command("create <name>").description("Create a campaign").option("-s, --subject <subject>","Email subject").option("--preview-text <text>","Inbox preview text").option("--preheader-text <text>","Alias for --preview-text").option("--tracking-code <code>","Optional campaign tracking code").option("--status <status>","Initial status: draft or sent").option("--sent-at <iso-date>","Sent timestamp when creating with --status sent").option("--html <html>","Email HTML content").option("--html-file <file>","Read HTML from file").option("--blocks-json <json>","Inline JSON array of Sequenzy email blocks").option("--blocks-file <file>","Path to a JSON file with Sequenzy email blocks").option("--prompt <prompt>","Generate campaign blocks from a prompt").option("--style <style>","Prompt generation style. Pass designed or plain to force the designed or plain-text email style; other values are freeform guidance (defaults to the company's email style preference)").option("--tone <tone>","Prompt generation tone: professional, casual, friendly").option("--email-preset <preset>","Style > Format for native blocks: branded or minimal").option("--from-email <email>","Campaign From address").option("--from-name <name>","Display name for --from-email; picks or creates the identity of that name on the address").option("--sender-profile-id <id>","Existing sender profile ID; carries its own name, so omit --from-email and --from-name").option("--reply-to <email>","Campaign Reply-To address").option("--reply-to-name <name>","Display name for --reply-to; a saved profile keeps its own name and the response warns").option("--reply-profile <id>","Existing Reply-To profile ID").option("--label <labels...>","Label names to assign").option("--segment <id>","Target a saved segment").option("--lists <ids...>","Target one or more lists by ID (shorthand for targetLists type 'lists')").option("--target-lists-json <json>","Inline campaign targetLists JSON object").option("--target-lists-file <file>","Path to a JSON file with campaign targetLists").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Xr("create",{name:e,...t}));k(pKe,{notes:["--subject is required unless --prompt is provided. With --prompt, the generated subject is used unless --subject is also provided.","Use --preview-text or --preheader-text to set the inbox preview text. With --prompt, the generated preview is used unless one of these flags is provided.","Use --blocks-json or --blocks-file when you need editor-compatible blocks, including conditional content and per-block styles.","Use --email-preset branded or minimal to set Style > Format on native blocks. This is not --style, which is a prompt-generation hint.","Use --status sent only to archive an already-sent campaign; it does not send email or create per-recipient delivery history.","Do not combine prompt, HTML flags, and blocks flags in the same request.","Use --segment, --lists, or --target-lists-json to save the audience on the draft. Omit them to set targeting later with campaigns update or campaigns schedule. These audience flags are mutually exclusive.",'Target list examples include {"type":"all"}, {"type":"lists","listIds":["list_123"]}, and {"type":"segment","segmentId":"seg_123"}.'],examples:['sequenzy campaigns create "April Launch" --prompt "Announce our new analytics dashboard"','sequenzy campaigns create "April Launch" --subject "We shipped" --preheader-text "Your quick product update" --html-file ./campaign.html','sequenzy campaigns create "Imported launch" --subject "We shipped" --status sent --sent-at "2026-05-01T14:00:00Z" --html-file ./campaign.html','sequenzy campaigns create "API Launch" --subject "We shipped" --label edm api --html-file ./campaign.html','sequenzy campaigns create "Segmented Launch" --subject "We shipped" --blocks-file ./campaign-blocks.json','sequenzy campaigns create "Research note" --subject "Quick question" --blocks-file ./note.json --email-preset minimal',`sequenzy campaigns create "Partner Update" --subject "This month at HolaRuta" --target-lists-json '{"type":"lists","listIds":["list_123"]}'`]});var mKe=si.command("update <id>").description("Update a draft campaign").option("-n, --name <name>","Campaign name").option("-s, --subject <subject>","Email subject").option("--preview-text <text>","Inbox preview text").option("--preheader-text <text>","Alias for --preview-text").option("--tracking-code <code>","Optional campaign tracking code").option("--html <html>","Email HTML content").option("--html-file <file>","Read HTML from file").option("--blocks-json <json>","Inline JSON array of Sequenzy email blocks").option("--blocks-file <file>","Path to a JSON file with Sequenzy email blocks").option("--email-preset <preset>","Style > Format for native blocks: branded or minimal").option("--campaign-data-json <json>","Inline campaignData JSON object").option("--campaign-data-file <file>","Path to a JSON file with campaignData").option("--computed-lists-json <json>","Inline computedLists JSON array").option("--computed-lists-file <file>","Path to a JSON file with computedLists").option("--from-email <email>","Campaign From address").option("--from-name <name>","Display name for --from-email; picks or creates the identity of that name on the address").option("--sender-profile-id <id>","Existing sender profile ID; carries its own name, so omit --from-email and --from-name").option("--reply-to <email>","Set reply-to using an existing reply profile email").option("--reply-to-name <name>","Display name for --reply-to; a saved profile keeps its own name and the response warns").option("--reply-profile <id>","Set reply-to using a reply profile ID").option("--label <labels...>","Replace label names").option("--segment <id>","Retarget the draft at a saved segment").option("--lists <ids...>","Retarget the draft at one or more lists by ID (shorthand for targetLists type 'lists')").option("--target-lists-json <json>","Inline campaign targetLists JSON object").option("--target-lists-file <file>","Path to a JSON file with campaign targetLists").option("--clear-target-lists","Clear saved targeting so the audience is chosen when scheduling").option("--send-time-optimization","Enable per-recipient send-time optimization and clear other saved pacing modes").option("--disable-send-time-optimization","Disable send-time optimization on the draft").option("--send-time-window-hours <hours>","Set the send-time optimization window from 1-24 hours").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Xr("update",{id:e,...t}));k(mKe,{notes:["Provide at least one update flag, including subject, preview text, content, email preset, labels, reply-to, campaign data, computed lists, audience, or STO pacing.","Use --blocks-json or --blocks-file when you need editor-compatible blocks, including conditional content and per-block styles.","Use --email-preset branded or minimal to change Style > Format on native blocks without rewriting copy.","Use --campaign-data-file and --computed-lists-file to upload personalization data for repeat blocks.","Do not combine HTML flags with blocks flags in the same request.","Use either --reply-to or --reply-profile, not both.","Use --segment, --lists, or --target-lists-json to replace the saved audience, or --clear-target-lists to choose it later at schedule time. These audience flags are mutually exclusive.","Use --send-time-optimization with optional --send-time-window-hours (1-24, default 12), or --disable-send-time-optimization to turn STO off. Enabling STO clears a saved spread or recipient-timezone mode."],examples:['sequenzy campaigns update camp_123 --subject "Updated subject"','sequenzy campaigns update camp_123 --preheader-text "Updated preview"',"sequenzy campaigns update camp_123 --html-file ./campaign-v2.html","sequenzy campaigns update camp_123 --blocks-file ./campaign-v2-blocks.json","sequenzy campaigns update camp_123 --email-preset minimal","sequenzy campaigns update camp_123 --campaign-data-file ./campaign-data.json --computed-lists-file ./computed-lists.json","sequenzy campaigns update camp_123 --reply-to support@example.com","sequenzy campaigns update camp_123 --label edm api","sequenzy campaigns update camp_123 --segment seg_123","sequenzy campaigns update camp_123 --clear-target-lists","sequenzy campaigns update camp_123 --send-time-optimization --send-time-window-hours 8"]});var fKe=si.command("schedule <id>").description("Schedule a draft or scheduled campaign").requiredOption("--at <datetime>","Future ISO date/time to send, for example 2026-06-01T14:00:00Z").option("--segment <id>","Target a saved segment").option("--lists <ids...>","Target one or more lists by ID (shorthand for targetLists type 'lists')").option("--target-lists-json <json>","Inline campaign targetLists JSON object").option("--target-lists-file <file>","Path to a JSON file with campaign targetLists").option("--send-time-optimization","Enable send-time optimization for the scheduled send").option("--disable-send-time-optimization","Disable send-time optimization for the scheduled send").option("--send-time-window-hours <hours>","Set the send-time optimization window from 1-24 hours").option("--spread-over-hours <hours>","Spread delivery over 1-72 hours. Disables send-time optimization when set.").option("--repeat <interval>","Repeat the campaign weekly or monthly starting at --at. Audience membership is re-evaluated at every run.").option("--in-recipient-timezone","Deliver at --at's wall-clock time in each recipient's own timezone. Requires --scheduled-timezone.").option("--no-in-recipient-timezone","Disable recipient-timezone delivery and use the selected fixed-time pacing strategy.").option("--scheduled-timezone <zone>","IANA zone the --at wall-clock time refers to, for example America/New_York").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Xr("schedule",{id:e,...t}));k(fKe,{notes:["The campaign must be draft or already scheduled.","Omit --segment, --lists, and target lists to reuse saved campaign targeting, or default to all active subscribers.","--segment, --lists, and the target list flags are mutually exclusive.",'Target list examples include {"type":"all"}, {"type":"lists","listIds":["list_123"]}, and {"type":"segment","segmentId":"seg_123"}.',"With --repeat, the campaign becomes a recurring template: each run is duplicated and sent automatically. Use campaigns unschedule to stop the series and return it to draft, or re-schedule without --repeat to keep a one-shot send.","With --in-recipient-timezone, every contact receives the campaign at --at's wall-clock time in their own timezone; contacts without a stored timezone get it at --at in --scheduled-timezone. Not combinable with --repeat or --spread-over-hours.","Use --send-time-optimization with optional --send-time-window-hours (1-24, default 12), or --disable-send-time-optimization to turn STO off. A spread or recipient-timezone send disables STO."],examples:['sequenzy campaigns schedule camp_123 --at "2026-06-01T14:00:00Z"','sequenzy campaigns schedule camp_123 --at "2026-06-01T14:00:00Z" --segment seg_123','sequenzy campaigns schedule camp_123 --at "2026-06-01T14:00:00Z" --lists list_123',`sequenzy campaigns schedule camp_123 --at "2026-06-01T14:00:00Z" --target-lists-json '{"type":"all"}'`,'sequenzy campaigns schedule camp_123 --at "2026-06-01T14:00:00Z" --target-lists-file ./target-lists.json','sequenzy campaigns schedule camp_123 --at "2026-06-01T14:00:00Z" --spread-over-hours 6','sequenzy campaigns schedule camp_123 --at "2026-06-01T14:00:00Z" --send-time-optimization --send-time-window-hours 8','sequenzy campaigns schedule camp_123 --at "2026-06-01T14:00:00Z" --repeat monthly','sequenzy campaigns schedule camp_123 --at "2026-06-01T20:00:00-04:00" --in-recipient-timezone --scheduled-timezone America/New_York']});var gKe=si.command("test <id>").description("Send a test email for a campaign").requiredOption("--to <email>","Recipient email for the test").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Xr("test",{id:e,...t}));k(gKe,{examples:["sequenzy campaigns test camp_123 --to you@example.com"]});var xKe=si.command("cancel <id>").description("Cancel a scheduled, paused, or sending campaign").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Xr("cancel",{id:e,...t}));k(xKe,{notes:["Cancelling stops scheduled, paused, waiting-approval, and actively sending campaigns immediately.","No confirmation prompt is shown so a bad send can be stopped fast."],examples:["sequenzy campaigns cancel camp_123"]});var AKe=si.command("unschedule <id>").description("Return a scheduled campaign to draft").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Xr("unschedule",{id:e,...t}));k(AKe,{notes:["Only scheduled campaigns can be unscheduled.","Unscheduling removes the pending send and recurrence, then returns the campaign to an editable draft."],examples:["sequenzy campaigns unschedule camp_123"]});var EKe=si.command("pause <id>").description("Pause a campaign that is currently sending").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Xr("pause",{id:e,...t}));k(EKe,{notes:["Only campaigns in sending status can be paused."],examples:["sequenzy campaigns pause camp_123"]});var hKe=si.command("resume <id>").description("Resume a paused campaign").option("--spread-over-hours <hours>","Spread the remaining delivery over 1-72 hours").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Xr("resume",{id:e,...t}));k(hKe,{notes:["Only paused campaigns can be resumed."],examples:["sequenzy campaigns resume camp_123","sequenzy campaigns resume camp_123 --spread-over-hours 6"]});var yKe=si.command("delete <id>").description("Delete a campaign").option("-y, --yes","Skip the confirmation prompt").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Xr("delete",{id:e,...t}));k(yKe,{notes:["Sending, scheduled, and paused campaigns must be cancelled before they can be deleted."],examples:["sequenzy campaigns delete camp_123 --yes"]});var bKe=si.command("share <id>").description("Create or fetch the campaign's public view-in-browser link").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Xr("share",{id:e,...t}));k(bKe,{notes:["The hosted page is anonymized: sample contact, inert unsubscribe link, no open/click tracking.","Idempotent - rerunning returns the same URL until you run `campaigns unshare`."],examples:["sequenzy campaigns share camp_123"]});var CKe=si.command("unshare <id>").description("Revoke the campaign's public view-in-browser link").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Xr("unshare",{id:e,...t}));k(CKe,{notes:["The shared URL returns 404 immediately after revocation."],examples:["sequenzy campaigns unshare camp_123"]});var BKe=si.command("duplicate <id>").description("Duplicate a campaign as a new draft").option("--mode <mode>","Duplicate mode: campaign, ab_test, or variant","campaign").option("--variant-id <id>","A/B test variant to copy when --mode is variant").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Xr("duplicate",{id:e,...t}));k(BKe,{notes:["Mode campaign copies the campaign email, ab_test also copies the A/B test with all variants, and variant copies one variant's content as a plain campaign."],examples:["sequenzy campaigns duplicate camp_123","sequenzy campaigns duplicate camp_123 --mode ab_test","sequenzy campaigns duplicate camp_123 --mode variant --variant-id var_b"]});var SKe=si.command("resend-to-non-openers <id>").description("Create a draft resend to subscribers who didn't open a sent campaign").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Xr("resend-to-non-openers",{id:e,...t}));k(SKe,{notes:["Only available 6 hours after a sent campaign finishes sending.","Unavailable for imported already-sent campaigns because Sequenzy has no opens for a send it did not deliver.",`Creates a draft targeting the same audience plus a "didn't open this campaign" rule. Review the draft, then schedule or send it.`,"The response includes an estimate of how many subscribers haven't opened the original.","Every audience format keeps hard opener exclusions across manual additions and repeated resends. Live audience membership can include new subscribers.","Recreate older drafts missing excludedCampaignOpenerIds from the original campaign and review before scheduling."],examples:["sequenzy campaigns resend-to-non-openers camp_123"]});function Mle(e){return e.option("--description <text>","Goal description").option("--trigger-type <type>","Goal signal: event, attribute_change, or tag_added").option("--trigger-event-name <event>","Event goal signal name").option("--trigger-tag-name <tag>","Tag name for tag_added goals").option("--attribute-path <path>","Subscriber attribute goal path").option("--attribute-condition <condition>","changed, changed_to, or changed_from_to").option("--attribute-value <value>","Target subscriber attribute value").option("--attribute-previous-value <value>","Previous subscriber attribute value").option("--event-property-name <name>","Optional event property whose value is tracked").option("--event-property-label <label>","Display label for the tracked event property").option("--attribution-window-hours <hours>","Goal attribution window in hours")}var aS=si.command("goals").description("Manage persisted campaign conversion goals");aS.command("list <campaignId>").description("List campaign goals").option("-c, --company <id>","Company ID override").option("--json","Print raw JSON").action((e,t)=>Xr("goals",{id:e,...t}));Mle(aS.command("create <campaignId> <name>").description("Create a campaign conversion goal")).option("--active","Create the goal with conversion tracking on (default)").option("--inactive","Create the goal with conversion tracking off").option("-c, --company <id>","Company ID override").option("--json","Print raw JSON").action((e,t,n)=>Xr("goal-create",{id:e,name:t,isActive:n.active,notActive:n.inactive,...n}));Mle(aS.command("update <campaignId> <goalId>").description("Update a campaign conversion goal").option("--name <name>","Goal name")).option("--active","Enable the goal").option("--inactive","Disable the goal").option("-c, --company <id>","Company ID override").option("--json","Print raw JSON").action((e,t,n)=>Xr("goal-update",{id:e,goalId:t,isActive:n.active,notActive:n.inactive,...n}));aS.command("delete <campaignId> <goalId>").description("Delete a campaign conversion goal").option("-c, --company <id>","Company ID override").option("--json","Print raw JSON").action((e,t,n)=>Xr("goal-delete",{id:e,goalId:t,...n}));var sS=Tt.command("forms").description("Inspect and update saved signup forms").action(()=>sS.help());k(sS,{notes:["Run `forms list --json` before replacing blocks so you can preserve the complete current block array.","Saved-form updates are partial: only the options you pass change."],examples:["sequenzy forms list --json",'sequenzy forms update form_123 --button-text "Join now"',"sequenzy forms update form_123 --theme-file ./theme.json"]});var vKe=sS.command("list").description("List saved forms and their current content").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON, including content blocks").action((e)=>m9("list",e));k(vKe,{examples:["sequenzy forms list","sequenzy forms list --json"]});var _Ke=sS.command("update <id>").description("Update a saved form").option("-n, --name <name>","Saved form name").option("-l, --list <ids...>","Replacement list IDs").option("-t, --tag <ids...>","Replacement tag IDs").option("--clear-tags","Remove every saved form tag").option("--duplicate-strategy <strategy>","Existing subscriber handling: skip, merge, or overwrite").option("--headline <text>","First main-form heading text").option("--description <text>","First main-form paragraph text").option("--button-text <text>","Submit button label").option("--success-message <text>","Success screen message").option("--redirect-url <url>","HTTP/HTTPS success redirect; pass an empty string to clear").option("--theme-json <json>","Inline partial capture theme JSON").option("--theme-file <file>","Path to partial capture theme JSON").option("--blocks-json <json>","Inline complete content blocks JSON").option("--blocks-file <file>","Path to complete content blocks JSON").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>m9("update",{id:e,...t}));k(_Ke,{notes:["Use `forms list --json` and send the complete blocks array when replacing blocks.","The form must retain exactly one email field and one submit button.",'Group sibling blocks with { id, kind: "group", label, layout: "stack" | "row" | "grid" | "overlay", columns, gap, padding, overlayColor, overlayPosition, overlayShade, children }. In Overlay, gap spaces the foreground children while the direct image remains the background. Overlay needs exactly one direct image; nested images only enable their subgroup. Groups may nest three levels; IDs stay unique across the full tree.','Input blocks are { id, kind: "form-field", fieldType, name, label, required, mapsTo, options }. fieldType: text, email, phone, number, textarea, select, radio, checkbox, consent, hidden. mapsTo: email, firstName, lastName, phone, customAttribute (default; stores the answer under `name`). Choice fields need options: [{ value, label, id }] - label and id default to value.',"A hidden field with a defaultValue stores that server-owned value and ignores submitted values; a hidden field without one stores the value the page submits.",'Each block kind accepts only its own properties, and anything else is rejected by name: a custom-html block carries markup in "html" with a pixel "height", not "content".',"Use --clear-tags to replace the current tag targeting with an empty list."],examples:['sequenzy forms update form_123 --headline "Weekly planning" --button-text "Get the planner"',"sequenzy forms update form_123 --list list_123 list_456 --clear-tags","sequenzy forms update form_123 --theme-file ./form-theme.json --blocks-file ./form-blocks.json --json"]});var Cc=Tt.command("popups").description("Manage on-site signup popups").action(()=>Cc.help());k(Cc,{notes:["Popups are the on-site overlay capture surface; `forms` covers inline embedded forms.","A popup is deployed with one script tag - `popups embed <id>` prints it.","Popup updates are partial: only the options you pass change.","Trigger, targeting, schedule, frequency, and visual patches are merged key by key, so setting one key keeps the rest."],examples:["sequenzy popups list --json",'sequenzy popups create --name "Welcome offer" --template discount-offer --list list_123',"sequenzy popups update pop_123 --status draft","sequenzy popups duplicate pop_123","sequenzy popups embed pop_123"]});var IKe=Cc.command("list").description("List saved popups with their status and conversion stats").option("-c, --company <id>","Company ID override for personal API keys").option("--include-content","Include every popup's full content blocks (large)").option("--json","Print raw JSON").action((e)=>Du("list",e));k(IKe,{notes:["Content blocks are omitted by default because each popup adds roughly 1.8k characters. Use `popups get <id> --json` for one popup's full content."],examples:["sequenzy popups list","sequenzy popups list --json","sequenzy popups list --include-content --json"]});var DKe=Cc.command("get <id>").description("Show one popup with its complete content").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON, including content blocks").action((e,t)=>Du("get",{id:e,...t}));k(DKe,{notes:["Run this with --json before replacing blocks so you can preserve the complete current block array."],examples:["sequenzy popups get pop_123 --json"]});var wKe=Cc.command("create").description("Create a popup and print its embed script").requiredOption("-n, --name <name>","Internal popup name").option("--template <id>","Starting design: newsletter-modal, discount-offer, countdown-launch, minimal-slide-in, exit-lead-magnet, live-demo, launch-modal, paper-digest, stark-takeover, top-bar, announcement-bar, or fullscreen-welcome").option("--status <status>","draft or published (default: published)").option("-l, --list <ids...>","List IDs every signup is added to").option("--all-lists","Capture into every list (the default)").option("-t, --tag <ids...>","Tag IDs applied to every signup").option("--duplicate-strategy <strategy>","Existing subscriber handling: skip, merge, or overwrite").option("--headline <text>","First heading text").option("--description <text>","First paragraph text").option("--button-text <text>","Submit button label").option("--success-message <text>","Success screen message").option("--redirect-url <url>","HTTP/HTTPS success redirect").option("--presentation <mode>","modal, slide-in, floating-bar, or fullscreen").option("--placement <spot>","center, left, right, top, or bottom").option("--trigger-json <json>","Inline partial trigger JSON").option("--trigger-file <file>","Path to partial trigger JSON").option("--targeting-json <json>","Inline partial targeting JSON").option("--targeting-file <file>","Path to partial targeting JSON").option("--schedule-json <json>","Inline partial schedule JSON").option("--schedule-file <file>","Path to partial schedule JSON").option("--frequency-json <json>","Inline partial frequency JSON").option("--frequency-file <file>","Path to partial frequency JSON").option("--visual-json <json>","Inline partial visual JSON").option("--visual-file <file>","Path to partial visual JSON").option("--theme-json <json>","Inline partial capture theme JSON").option("--theme-file <file>","Path to partial capture theme JSON").option("--blocks-json <json>","Inline complete content blocks JSON").option("--blocks-file <file>","Path to complete content blocks JSON").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>Du("create",e));k(wKe,{notes:["Popups are published by default, so the embed script is live as soon as you paste it. Use --status draft to stage one.","Omit --list (or pass --all-lists) to capture into every list, matching the dashboard default.",`Trigger example: --trigger-json '{"type":"exit-intent"}' or '{"type":"delay","delaySeconds":10}'.`],examples:['sequenzy popups create --name "Welcome offer" --template discount-offer --list list_123',`sequenzy popups create --name "Exit capture" --trigger-json '{"type":"exit-intent"}' --status draft`]});var TKe=Cc.command("update <id>").description("Update a popup, including publishing and unpublishing it").option("-n, --name <name>","Internal popup name").option("--status <status>","draft or published").option("-l, --list <ids...>","Replacement list IDs").option("--all-lists","Capture into every list").option("-t, --tag <ids...>","Replacement tag IDs").option("--clear-tags","Remove every popup tag").option("--duplicate-strategy <strategy>","Existing subscriber handling: skip, merge, or overwrite").option("--headline <text>","First heading text").option("--description <text>","First paragraph text").option("--button-text <text>","Submit button label").option("--success-message <text>","Success screen message").option("--redirect-url <url>","HTTP/HTTPS success redirect; pass an empty string to clear").option("--presentation <mode>","modal, slide-in, floating-bar, or fullscreen").option("--placement <spot>","center, left, right, top, or bottom").option("--trigger-json <json>","Inline partial trigger JSON").option("--trigger-file <file>","Path to partial trigger JSON").option("--targeting-json <json>","Inline partial targeting JSON").option("--targeting-file <file>","Path to partial targeting JSON").option("--schedule-json <json>","Inline partial schedule JSON").option("--schedule-file <file>","Path to partial schedule JSON").option("--frequency-json <json>","Inline partial frequency JSON").option("--frequency-file <file>","Path to partial frequency JSON").option("--visual-json <json>","Inline partial visual JSON").option("--visual-file <file>","Path to partial visual JSON").option("--theme-json <json>","Inline partial capture theme JSON").option("--theme-file <file>","Path to partial capture theme JSON").option("--blocks-json <json>","Inline complete content blocks JSON").option("--blocks-file <file>","Path to complete content blocks JSON").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Du("update",{id:e,...t}));k(TKe,{notes:["Use `popups get <id> --json` and send the complete blocks array when replacing blocks.","The popup must retain exactly one email field and one submit button.",'Group sibling blocks with { id, kind: "group", label, layout: "stack" | "row" | "grid" | "overlay", columns, gap, padding, overlayColor, overlayPosition, overlayShade, children }. In Overlay, gap spaces the foreground children while the direct image remains the background. Overlay needs exactly one direct image; nested images only enable their subgroup. Groups may nest three levels; IDs stay unique across the full tree.','Each block kind accepts only its own properties, and anything else is rejected by name: a custom-html block carries markup in "html" with a pixel "height", not "content".',"`--status draft` stops a popup showing without deleting it or changing the embed script; `--status published` puts it back.","Use --clear-tags to replace the current tag targeting with an empty list, and --all-lists to capture into every list."],examples:['sequenzy popups update pop_123 --headline "Take 10% off" --button-text "Send my code"',"sequenzy popups update pop_123 --status draft",`sequenzy popups update pop_123 --targeting-json '{"paths":["/pricing"],"device":"desktop"}'`]});var kKe=Cc.command("duplicate <id>").description("Copy a popup into a new draft with its own stats").option("-n, --name <name>",'Name for the copy (default: "... (copy)")').option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Du("duplicate",{id:e,...t}));k(kKe,{notes:["The copy starts as a draft with its own view and conversion counts, so the original keeps showing and keeps its stats.","Publish the copy with `popups update <new-id> --status published`."],examples:["sequenzy popups duplicate pop_123",'sequenzy popups duplicate pop_123 --name "Welcome offer v2"']});var RKe=Cc.command("embed <id>").description("Print a published popup's embed snippets").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON, including React, WordPress, and Shopify").action((e,t)=>Du("embed",{id:e,...t}));k(RKe,{notes:["The popup must be published; publish it with `popups update <id> --status published`.","The snippet carries no API key - trigger, targeting, and audience rules stay server-side."],examples:["sequenzy popups embed pop_123","sequenzy popups embed pop_123 --json"]});var FKe=Cc.command("delete <id>").description("Permanently delete a popup and its stats").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Du("delete",{id:e,...t}));k(FKe,{notes:["This also deletes the popup's view and conversion counts. To stop it showing while keeping its stats, use `popups update <id> --status draft`.","Subscribers the popup already captured are not affected."],examples:["sequenzy popups delete pop_123"]});var Lo=Tt.command("landing-pages").description("Manage landing pages").action(()=>Lo.help());k(Lo,{notes:["Landing pages are created as drafts. Publish only after reviewing the page.","Use landing-pages render to open a signed, unlisted preview of a draft without publishing.","Use --content-json or --content-file for full editor-compatible landing page content.","Custom subdomains require a CNAME record pointing to pages.sequenzydns.com; root domains require an A record pointing to 76.76.21.21."],examples:["sequenzy landing-pages list --company comp_123",'sequenzy landing-pages create "Product Waitlist" --template waitlist',"sequenzy landing-pages render lp_123","sequenzy landing-pages stats lp_123 --period 30d","sequenzy landing-pages publish lp_123","sequenzy landing-pages connect-domain pages.example.com"]});var NKe=Lo.command("list").description("List landing pages").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>Xo("list",e));k(NKe,{examples:["sequenzy landing-pages list --company comp_123"]});var PKe=Lo.command("get <id>").description("Get landing page details").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Xo("get",{id:e,...t}));k(PKe,{examples:["sequenzy landing-pages get lp_123 --company comp_123"]});var OKe=Lo.command("stats <id>").description("Get landing page visit analytics").option("-c, --company <id>","Company ID override for personal API keys").option("--period <period>","Time window: 7d, 30d, 90d, or all").option("--start <timestamp>","Custom range start, ISO 8601").option("--end <timestamp>","Custom range end, ISO 8601").option("--include-bots","Include known crawlers in visit totals").option("--json","Print raw JSON").action((e,t)=>Xo("stats",{id:e,...t}));k(OKe,{notes:["Reports visits, unique visits, clicks, subscribes, conversion rate, referrers, and crawler hits. Preview URLs and the editor are never counted."],examples:["sequenzy landing-pages stats lp_123 --period 30d"]});var LKe=Lo.command("render <id>").description("Preview a landing page without publishing it").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Xo("render",{id:e,...t}));k(LKe,{notes:["Returns a signed, unlisted preview URL that works for drafts. Signup forms do not collect contacts until you publish."],examples:["sequenzy landing-pages render lp_123"]});var MKe=Lo.command("create [name]").description("Create a draft landing page").option("--slug <slug>","Landing page URL slug").option("--template <template>","Template key, e.g. waitlist").option("--content-json <json>","Inline landing page content JSON").option("--content-file <file>","Path to landing page content JSON").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Xo("create",{name:e,...t}));k(MKe,{notes:["When --content-json/--content-file is omitted, a valid default page is generated from --template."],examples:['sequenzy landing-pages create "Product Waitlist" --template waitlist','sequenzy landing-pages create "Launch Page" --slug launch --content-file ./landing-page.json']});var UKe=Lo.command("update <id>").description("Edit a landing page").option("-n, --name <name>","Landing page name").option("--slug <slug>","Landing page URL slug").option("--content-json <json>","Inline landing page content JSON").option("--content-file <file>","Path to landing page content JSON").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Xo("update",{id:e,...t}));k(UKe,{examples:['sequenzy landing-pages update lp_123 --name "Updated page"',"sequenzy landing-pages update lp_123 --content-file ./landing-page.json"]});var $Ke=Lo.command("publish <id>").description("Publish a landing page").option("-n, --name <name>","Landing page name").option("--slug <slug>","Landing page URL slug").option("--content-json <json>","Inline landing page content JSON").option("--content-file <file>","Path to landing page content JSON").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Xo("publish",{id:e,...t}));k($Ke,{examples:["sequenzy landing-pages publish lp_123"]});var qKe=Lo.command("unpublish <id>").description("Unpublish a landing page").option("-n, --name <name>","Landing page name").option("--slug <slug>","Landing page URL slug").option("--content-json <json>","Inline landing page content JSON").option("--content-file <file>","Path to landing page content JSON").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Xo("unpublish",{id:e,...t}));k(qKe,{examples:["sequenzy landing-pages unpublish lp_123"]});var QKe=Lo.command("duplicate <id>").description("Duplicate a landing page as a new draft").option("-n, --name <name>","Name for the copy").option("--slug <slug>","URL slug for the copy").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Xo("duplicate",{id:e,...t}));k(QKe,{notes:["The copy is always created as a draft with its own slug, views, and conversions.",'Without --name, the copy is named "<original name> (copy)".'],examples:["sequenzy landing-pages duplicate lp_123",'sequenzy landing-pages duplicate lp_123 --name "Spring Sale v2" --slug spring-sale-v2']});var zKe=Lo.command("delete <id>").description("Delete a landing page").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Xo("delete",{id:e,...t}));k(zKe,{examples:["sequenzy landing-pages delete lp_123"]});var HKe=Lo.command("connect-domain <domain>").description("Connect a workspace or dedicated landing page domain").option("--landing-page <id>","Connect the domain only to this landing page").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Xo("connect-domain",{domain:e,...t}));k(HKe,{examples:["sequenzy landing-pages connect-domain pages.example.com --company comp_123","sequenzy landing-pages connect-domain offer.example.com --landing-page lp_123","sequenzy landing-pages connect-domain example.com --landing-page lp_123"]});var jKe=Lo.command("update-domain-settings").description("Update or verify landing page domain settings").option("--domain <domain>","Replace the connected landing page domain").option("--verify","Refresh domain verification state").option("--landing-page <id>","Target a dedicated landing page domain").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>Xo("update-domain-settings",e));k(jKe,{examples:["sequenzy landing-pages update-domain-settings --domain pages.example.com","sequenzy landing-pages update-domain-settings --verify","sequenzy landing-pages update-domain-settings --landing-page lp_123 --verify"]});var GKe=Lo.command("remove-domain <landing-page-id>").description("Remove a dedicated domain from one landing page").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Xo("remove-domain",{landingPage:e,...t}));k(GKe,{examples:["sequenzy landing-pages remove-domain lp_123"]});var or=Tt.command("sequences").description("Manage email sequences").action(()=>or.help());k(or,{notes:["The CLI supports both AI goal-based sequence creation and explicit-step creation.","Trigger-specific options depend on --trigger. For example: contact_added needs --list-id (or --list-ids for several lists), tag_added needs --tag-name (or --tag-names), inactivity needs --event-name and --inactive-days.","Use --goal for AI generation, or --steps-file / --emails-file with JSON arrays that match the API step objects.","Use --enrollment-mode matching_field for product- or variant-specific event sequences.",'Explicit --steps-file input can include dynamic Stripe or Shopify discount actions with {"type":"create_discount","discount":{"provider":"stripe","discountType":"percent","percentOff":20,"duration":"once","appliesToAllPlans":true}}; the code is created when each subscriber reaches the step, and later emails can use {{discount.code}}.',"Discount action sequences require the selected provider integration, such as Stripe or Shopify, before enabling.",lA],examples:["sequenzy sequences list --company comp_123",'sequenzy sequences create onboarding --trigger event_received --event-name signup.completed --goal "Guide new users to activation"',"sequenzy sequences create onboarding --trigger contact_added --list-id list_123 --steps-file ./steps.json","sequenzy sequences update seq_123 --steps-file ./sequence-updates.json","sequenzy sequences enable seq_123","sequenzy sequences simulate seq_123","sequenzy sequences simulate seq_123 --email maya@example.com"]});var VKe=or.command("list").description("List sequences").option("--status <status>","Filter by draft, active, paused, or archived").option("--search <text>","Search sequence names and descriptions").option("--label <labels...>","Filter by dashboard label names").option("--limit <count>","Page size from 1 to 100").option("--offset <count>","Zero-based result offset").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>ir("list",e));k(VKe,{examples:["sequenzy sequences list --company comp_123"]});var WKe=or.command("get <id>").description("Get sequence details").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>ir("get",{id:e,...t}));k(WKe,{examples:["sequenzy sequences get seq_123 --company comp_123"]});var KKe=X5(or.command("render <id>").description("Render one sequence email step to email-ready HTML").requiredOption("--node <nodeId>","Email step node ID from sequences get").option("--variant <id>","Render a specific A/B test variant")).action((e,t)=>eB({type:"sequence-step",sequenceId:e,nodeId:t.node},t));k(KKe,{notes:e3,examples:["sequenzy sequences render seq_123 --node node_1 --out preview.html","sequenzy sequences render seq_123 --node node_1 --subscriber sub_123 --json","sequenzy sequences render seq_123 --node node_1 --email you@example.com --tag extended"]});var JKe=or.command("test <id>").description("Send a test email for one saved sequence step").requiredOption("--node <nodeId>","Email step node ID from sequences get").requiredOption("--to <emails...>","One or more reviewer email addresses (maximum 10)").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>ir("test",{id:e,...t,nodeId:t.node}));k(JKe,{notes:["This sends only the selected saved email step; it does not enable the sequence or enroll subscribers.","Use sequences get first to find the email step nodeId."],examples:["sequenzy sequences test seq_123 --node node_email_2 --to reviewer@example.com","sequenzy sequences test seq_123 --node node_email_2 --to reviewer-one@example.com reviewer-two@example.com"]});or.command("test-run <id>").description("Run real sequence actions for one subscriber with optional event properties").requiredOption("--subscriber <id>","Active subscriber ID").option("--event-properties <json>","Trigger event properties as a JSON object, including arrays and nested objects").option("--speed-multiplier <number>","Delay acceleration, 60 to 10000","120").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>ir("test-run",{id:e,...t}));or.command("test-run-get <id> <runId>").description("Inspect live sequence test status and step logs").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON including step logs").action((e,t,n)=>ir("test-run-get",{id:e,runId:t,...n}));var YKe=or.command("simulate <id>").description("Preview who a sequence would enroll and, optionally, one contact's path. Does not send mail or enroll anyone.").option("--subscriber <id>","Walk the graph for this stored subscriber").option("--email <address>","Walk the graph for this stored subscriber email").option("--limit <number>","Maximum current matches to sample (1-25)").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>ir("simulate",{id:e,...t,simulateEmail:typeof t.email==="string"?t.email:void 0}));k(YKe,{notes:["Without --subscriber/--email this reports who currently matches and whether the sequence is ready. Nobody is auto-enrolled when you activate; list, tag, and segment matches can still be enrolled by hand.","This does not send mail, mint discounts, or write tags. Use sequences test to send one saved email step to a reviewer.","Readiness errors are the same checks that should be fixed before sequences enable."],examples:["sequenzy sequences simulate seq_123","sequenzy sequences simulate seq_123 --email maya@example.com","sequenzy sequences simulate seq_123 --subscriber sub_123 --limit 25 --json"]});function Ule(e){return e.option("--description <text>","Goal description").option("--trigger-type <type>","Goal signal: event, attribute_change, or tag_added").option("--trigger-event-name <event>","Event goal signal name").option("--trigger-tag-name <tag>","Tag name for tag_added goals").option("--attribute-path <path>","Subscriber attribute goal path").option("--attribute-condition <condition>","changed, changed_to, or changed_from_to").option("--attribute-value <value>","Target subscriber attribute value").option("--attribute-previous-value <value>","Previous subscriber attribute value").option("--event-property-name <name>","Optional event property whose value is tracked").option("--event-property-label <label>","Display label for the tracked event property").option("--attribution-window-hours <hours>","Goal attribution window in hours")}var lS=or.command("goals").description("Manage persisted sequence conversion goals");lS.command("list <sequenceId>").description("List sequence goals").option("-c, --company <id>","Company ID override").option("--json","Print raw JSON").action((e,t)=>ir("goals",{id:e,...t}));Ule(lS.command("create <sequenceId> <name>").description("Create a sequence conversion goal")).option("--active","Create the goal with conversion tracking on (default)").option("--inactive","Create the goal with conversion tracking off").option("-c, --company <id>","Company ID override").option("--json","Print raw JSON").action((e,t,n)=>ir("goal-create",{id:e,name:t,isActive:n.active,notActive:n.inactive,...n}));Ule(lS.command("update <sequenceId> <goalId>").description("Update a sequence conversion goal").option("--name <name>","Goal name")).option("--active","Enable the goal").option("--inactive","Disable the goal").option("-c, --company <id>","Company ID override").option("--json","Print raw JSON").action((e,t,n)=>ir("goal-update",{id:e,goalId:t,isActive:n.active,notActive:n.inactive,...n}));lS.command("delete <sequenceId> <goalId>").description("Delete a sequence conversion goal").option("-c, --company <id>","Company ID override").option("--json","Print raw JSON").action((e,t,n)=>ir("goal-delete",{id:e,goalId:t,...n}));var t3=or.command("webhook").description("Manage a sequence inbound webhook endpoint");t3.command("get <sequenceId>").description("Read a sequence inbound webhook URL and setup status").option("-c, --company <id>","Company ID override").option("--json","Print raw JSON").action((e,t)=>ir("webhook-get",{id:e,...t}));t3.command("configure <sequenceId>").description("Create or update a sequence inbound webhook endpoint").option("--field-mapping-json <json>","Inline mapping with email, optional names, and property paths").option("--field-mapping-file <file>","JSON file containing the webhook field mapping").option("--sample-payload-json <json>","Inline representative webhook payload").option("--sample-payload-file <file>","JSON file containing a representative webhook payload").option("--clear-field-mapping","Clear the saved mapping and return the endpoint to pending setup").option("--clear-sample-payload","Clear the saved sample payload").option("-c, --company <id>","Company ID override").option("--json","Print raw JSON").action((e,t)=>ir("webhook-configure",{id:e,...t}));t3.command("rotate <sequenceId>").description("Rotate a sequence inbound webhook secret and URL").option("-c, --company <id>","Company ID override").option("--json","Print raw JSON").action((e,t)=>ir("webhook-rotate",{id:e,...t}));var ZKe=or.command("create <name>").description("Create a blank, AI-generated, or explicit-step sequence").option("-t, --trigger <trigger>","Sequence trigger type (defaults to contact_added)").option("--description <text>","Sequence description").option("--label <labels...>","Dashboard label names to assign").option("--user-cancellable","Allow subscribers to cancel enrollment").option("--not-user-cancellable","Prevent subscribers from cancelling enrollment").option("--from-email <email>","Sequence-level From address").option("--from-name <name>","Display name for --from-email; picks or creates the identity of that name on the address").option("--sender-profile-id <id>",Yse).option("--reply-to <email>","Sequence-level Reply-To address").option("--reply-to-name <name>","Display name for --reply-to; a saved profile keeps its own name and the response warns").option("--reply-profile-id <id>","Existing reply profile ID; carries its own name, so omit --reply-to and --reply-to-name").option("--bcc-emails <emails>","Comma-separated sequence-level BCC addresses (max 10)").option("-g, --goal <goal>","AI generation goal for the sequence").option("--email-count <count>","Number of AI-generated emails when using --goal (1-10)").option("--duration-days <days>","Total duration in days for AI-generated sequence delays when using --goal").option("--email-style <style>","Style for AI-generated emails when using --goal: visual (designed) or plain (text-first)").option("--enrollment-mode <mode>","Enrollment mode: unlimited, one_time, or matching_field").option("--enrollment-field-path <path>","Event property dot path used by matching_field enrollment").option("--sending-window-start <time>","Earliest local send time for sequence emails (HH:mm, e.g. 08:00)").option("--sending-window-end <time>","Latest local send cutoff for sequence emails (HH:mm, e.g. 20:00)").option("--sending-window-timezone <timezone>","IANA timezone for the sequence sending window, e.g. Europe/Kiev").option("--sending-window-days <days>","Comma-separated days for sequence sends, e.g. weekdays or mon,tue,wed,thu,fri").option("--list-id <id>","List ID for contact_added triggers").option("--list-ids <ids...>","Several list IDs for contact_added; joining any one of them enrols the contact").option("--list-scope <scope>","contact_added with no list: any_contact (default, includes contacts in no list) or any_list").option("--tag-name <name>","Tag name for tag_added triggers").option("--tag-names <names...>","Several tag names for tag_added; receiving any one of them enrols the contact").option("--segment-id <id>","Segment ID for segment_entered triggers").option("--stop-on-segment-exit","Cancel active enrollments when a contact leaves the trigger segment").option("--event-name <name>","Event name for event_received, inbound_webhook, inactivity, and frequency triggers").option("--integration-slug <slug>","Inbound webhook integration slug").option("--integration-event-key <key>","Inbound webhook integration event key").option("--custom-integration-json <json>","Inline custom inbound webhook integration descriptor").option("--custom-integration-file <file>","JSON file with a custom inbound webhook integration descriptor").option("--property-filters-json <json>","Inline JSON array of event property filters for event_received triggers").option("--property-filters-file <file>","Path to a JSON file with event property filters").option("--inactive-days <days>","Days of inactivity for inactivity triggers").option("--inactivity-baseline <baseline>","Inactivity baseline: sequence_created_at or subscriber_created_at").option("--min-count <count>","Minimum event count for frequency triggers").option("--time-window-days <days>","Time window for frequency triggers").option("--steps-json <json>","Inline JSON array of sequence steps").option("--steps-file <file>","Path to a JSON file with sequence steps").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>ir("create",{name:e,...t}));k(ZKe,{notes:["Provide --goal for AI generation, --steps-json/--steps-file for explicit content, or omit both for a blank dashboard-compatible draft.","Each explicit email step needs subject plus either html or blocks. Discount action steps use type=create_discount to dynamically create a code before an email that references {{discount.code}}.",'SMS steps use type="sms" with a plain-text "text" field (optional label, ineligibleAction skip|exit, imageUrls). Generate copy with `sequenzy generate sms` and check `sequenzy sms settings` first.','Update Subscriber steps use type="update_subscriber", nodeType="action_update_attributes", and config values such as {{event.plan}}, {{event.amount}}, or {{event.active}}.',"For migrated provider flows, put the exact provider HTML in each step's html field; Sequenzy stores it as raw HTML. Use delay or delayMs for waits.",'A step may use waitUntilWeekday to hold until the next weekday window, e.g. {"waitUntilWeekday":{"day":"sunday","startTime":"09:00","endTime":"12:00","timezone":"America/Los_Angeles"},"subject":"Weekly digest","html":"..."}. Contacts already inside the window continue immediately; put it before the first email to guarantee the send day at the graph level.',"Prefer --steps-file for anything non-trivial. The CLI passes the JSON through to the API.","Shopify replenishment and back-in-stock event sequences default to matching_field.","Use --enrollment-field-path for custom event keys such as order.id or product.providerVariantId.","Use --property-filters-json/--property-filters-file with event_received triggers to only start the sequence when the event properties match, e.g. scope a purchase sequence to one product.","Use --sending-window-start/--sending-window-end/--sending-window-timezone to hold every email step until the allowed local send window. Add --sending-window-days weekdays for working days only.","Discount action sequences require the selected provider integration, such as Stripe or Shopify, before enabling."],examples:['sequenzy sequences create onboarding --trigger event_received --event-name signup.completed --goal "Guide new users to activation" --email-count 4 --duration-days 10','sequenzy sequences create trial --trigger tag_added --tag-name trial --goal "Convert trial users" --sending-window-start 08:00 --sending-window-end 20:00 --sending-window-timezone Europe/Kiev --sending-window-days weekdays',"sequenzy sequences create restock --trigger event_received --event-name ecommerce.back_in_stock --enrollment-mode matching_field --steps-file ./steps.json",`sequenzy sequences create deliver-ebook --trigger event_received --event-name ecommerce.order_placed --property-filters-json '[{"path":"lineItems[].providerProductId","operator":"equals","value":"prod_123"}]' --steps-file ./steps.json`,"sequenzy sequences create post-purchase --trigger event_received --event-name ecommerce.order_placed --enrollment-mode matching_field --enrollment-field-path order.id --steps-file ./steps.json","sequenzy sequences create onboarding --trigger contact_added --list-id list_123 --steps-file ./steps.json",`sequenzy sequences create purchase-profile --trigger event_received --event-name saas.purchase --steps-json '[{"type":"update_subscriber","nodeType":"action_update_attributes","config":{"customAttributeUpdates":[{"name":"plan","value":"{{event.plan}}","valueType":"text"}]}},{"subject":"Thanks","html":"<p>Purchase received.</p>"}]'`,"sequenzy sequences create rescue --trigger inactivity --event-name login --inactive-days 14 --steps-file ./steps.json"]});var XKe=or.command("update <id>").description("Update sequence metadata, email step content, stop conditions, or paths").option("-n, --name <name>","Sequence name").option("--description <text>","Sequence description").option("--label <labels...>","Replace dashboard label names").option("--clear-labels","Remove all dashboard labels from the sequence").option("--user-cancellable","Allow subscribers to cancel enrollment").option("--not-user-cancellable","Prevent subscribers from cancelling enrollment").option("--trigger <trigger>","Replace the sequence trigger type").option("--list-id <id>","List ID for contact_added").option("--list-ids <ids...>","Several list IDs for contact_added; joining any one of them enrols the contact").option("--list-scope <scope>","contact_added with no list: any_contact (default, includes contacts in no list) or any_list").option("--tag-name <name>","Tag name for tag_added").option("--tag-names <names...>","Several tag names for tag_added; receiving any one of them enrols the contact").option("--segment-id <id>","Segment ID for segment_entered").option("--stop-on-segment-exit","Stop active enrollments when a contact leaves the trigger segment").option("--no-stop-on-segment-exit","Keep active enrollments running when a contact leaves the trigger segment").option("--event-name <event>","Event name for event, webhook, inactivity, or frequency triggers").option("--integration-slug <slug>","Catalog integration slug for inbound_webhook").option("--integration-event-key <key>","Catalog event key for inbound_webhook").option("--custom-integration-json <json>","Inline custom inbound webhook integration descriptor").option("--custom-integration-file <file>","JSON file containing a custom inbound webhook integration descriptor").option("--property-filters-json <json>","Inline event trigger property filters").option("--property-filters-file <file>","JSON file containing event trigger property filters").option("--inactive-days <days>","Days required for inactivity").option("--inactivity-baseline <baseline>","Inactivity baseline: sequence_created_at or subscriber_created_at").option("--min-count <count>","Minimum frequency event count").option("--time-window-days <days>","Frequency lookback window").option("--from-email <email>","Sequence-level From address").option("--from-name <name>","Display name for --from-email; picks or creates the identity of that name on the address").option("--sender-profile-id <id>",Zse).option("--reply-to <email>","Sequence-level Reply-To address").option("--reply-to-name <name>","Display name for --reply-to; a saved profile keeps its own name and the response warns").option("--reply-profile-id <id>","Existing reply profile ID; carries its own name, so omit --reply-to and --reply-to-name").option("--enrollment-mode <mode>","Enrollment mode: unlimited, one_time, or matching_field").option("--enrollment-field-path <path>","Event property dot path used by matching_field enrollment").option("--pause-new-enrollments","Stop new sequence enrollments while current recipients continue").option("--resume-new-enrollments","Resume new sequence enrollments while current recipients continue").option("--sending-window-start <time>","Earliest local send time for sequence emails (HH:mm, e.g. 08:00)").option("--sending-window-end <time>","Latest local send cutoff for sequence emails (HH:mm, e.g. 20:00)").option("--sending-window-timezone <timezone>","IANA timezone for the sequence sending window, e.g. Europe/Kiev").option("--sending-window-days <days>","Comma-separated days for sequence sends, e.g. weekdays or mon,tue,wed,thu,fri").option("--clear-sending-window","Disable the sequence sending window").option("--bcc-emails <emails>","Comma-separated BCC addresses copied on every email this sequence sends, e.g. a support inbox (max 10)").option("--clear-bcc-emails","Remove the sequence BCC addresses").option("--confirm-structural-change","Confirm an insertSteps or branch structural edit to an active sequence").option("--confirm-live-change","Confirm node config edits to an active sequence").option("--steps-json <json>","Inline JSON array of step updates").option("--steps-file <file>","Path to a JSON file with step updates").option("--emails-json <json>","Inline JSON array of email updates; native-block emails, including supported custom HTML blocks, may set emailPreset to branded or minimal, and emailTheme patches that one step's theme (null clears the override)").option("--emails-file <file>","Path to a JSON file with email updates; native-block emails, including supported custom HTML blocks, may set emailPreset to branded or minimal, and emailTheme patches that one step's theme (null clears the override)").option("--sms-steps-json <json>","Inline JSON array of SMS step content updates (targeted by nodeId)").option("--sms-steps-file <file>","Path to a JSON file with SMS step content updates").option("--subscriber-update-steps-json <json>","Inline JSON array of Update Subscriber configs targeted by nodeId").option("--subscriber-update-steps-file <file>","Path to a JSON file with Update Subscriber configs targeted by nodeId").option("--branch-json <json>","Inline JSON object for inserting an if/else branch, or a random A/B split, with path steps and/or existing target node IDs").option("--branch-file <file>","Path to a JSON file for inserting an if/else branch with path steps and/or existing target node IDs").option("--insert-steps-json <json>","Inline JSON object for inserting new linear steps").option("--insert-steps-file <file>","Path to a JSON file for inserting new linear steps").option("--node-updates-json <json>","Inline typed nodeUpdates array from sequences get; action_email changes accept emailTheme to restyle one step without touching the company theme").option("--node-updates-file <file>","JSON file containing typed nodeUpdates").option("--graph-edit-json <json>","Inline graphEdit object using the current graphRevision").option("--graph-edit-file <file>","JSON file containing a graphEdit operation").option("--stop-condition-json <json>","Inline JSON object for updating the sequence stop condition").option("--stop-condition-file <file>","Path to a JSON file for updating the sequence stop condition").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>ir("update",{id:e,...t}));k(XKe,{notes:["Use either the steps form or the emails form, not both.","Each update entry can target a step by nodeId, emailId, or by array order.","Use --insert-steps-json/--insert-steps-file to add new linear steps, including outbound webhooks and AI steps; use --steps-* or --emails-* to edit existing email steps.",'AI steps generate a short per-contact fragment at send time (a sentence or two that a later email inserts, not a whole email): {"nodeType":"action_ai","config":{"prompt":"Write a winback subject for {{first_name}}","resultKey":"winback","outputFields":[{"key":"subject_line","fallback":"We miss you"}]}}. Later steps use {{ai.winback.subject_line}}. Opt into context with includeTags, includeEventProperties, includeRecentEvents (plus recentEventLimit, 1-50), and includeAttributes.','Inserted steps can be SMS steps: {"type":"sms","text":"...","delay":{"days":1}}. Generate copy with `sequenzy generate sms`.','Edit existing SMS steps with --sms-steps-json/--sms-steps-file: [{"nodeId":"node_sms","text":"New message"}]. Entries may also update label and ineligibleAction.','Edit existing Update Subscriber steps with --subscriber-update-steps-json/--subscriber-update-steps-file: [{"nodeId":"node_update","config":{"customAttributeUpdates":[{"name":"plan","value":"{{event.plan}}","valueType":"text"}]}}].',"For migrated provider flow steps, use html/htmlContent to preserve exact HTML as raw HTML and use delay or delayMs for waits.",'A step may use waitUntilWeekday to hold until the next weekday window, e.g. {"type":"delay","waitUntilWeekday":{"day":"sunday","startTime":"09:00","endTime":"12:00","timezone":"America/Los_Angeles"}}. Contacts already inside the window continue immediately. Place it before the first email to guarantee the send day at the graph level (a sequence sendingWindow only shifts send times).',"When inserting steps or branches into an active sequence, pass --confirm-structural-change after confirming the live-flow impact.",'Use --stop-condition-json/--stop-condition-file with values like {"type":"has_tag","value":"customer"}; use {"type":"none","value":null} to clear it.','event_received stop conditions only match events received after enrollment. Add matchConfig to narrow them: {"type":"event_received","value":"product.quota_used","matchConfig":{"mode":"event_property_filter","propertyFilters":[{"path":"quota_used","operator":"greater_than","value":1}]}} stops only when a later event matches every filter (operators: exists, not_exists, equals, not_equals, one_of, contains, greater_than, less_than). {"mode":"event_property","rules":[{"entryFieldPath":"orderId","eventFieldPath":"orderId"}]} stops only when the stop event matches the enrolling event on that field. For field_changed, {"mode":"field_value","operator":"equals","value":"pro"} stops only when the field changes to a matching value.','Stop conditions are re-evaluated before every step, including the first, so {"type":"does_not_have_tag","value":"allowlist"} and {"type":"removed_from_list","value":"list_123"} act as an allowlist: contacts without that tag or list are cancelled before any step sends. Use this to point a live trigger at a chosen set of contacts without editing the graph. Guarded-out contacts still enroll and are then cancelled at the trigger node, so they appear as cancellations there rather than in the active or waiting enrollment counts.',"Clearing the guard does not retry the contacts it already cancelled: nothing re-enrolls them, so they only receive the sequence if the trigger fires for them again, which one-shot triggers never do. On the one_time enrollment mode a repeated trigger is ignored too, because enrollment is blocked by the existence of any earlier run rather than by its outcome. Guard a duplicate sequence and leave the real one ungated, or enroll the missed contacts afterwards with `sequenzy sequences enroll`, which skips the one_time check.","Branch condition types include has_tag, does_not_have_tag, in_list, in_segment, event_received, link_clicked, and field_* comparisons. Use activityScope (this_sequence, previous_email, ever) for event and click checks.","Branch paths may set targetNodeId and elseTargetNodeId to wire directly to existing nodes from sequences get, including the completion node. If path steps are also provided, they run before that target.",'Set "splitMode":"random" with "randomPercentages" to route by percentage instead of by condition, which runs a concurrent A/B test inside the flow (for example two abandoned-cart offers at once instead of one after the other). Each branch then omits conditionType and condition-specific fields, the percentages must sum to 100, and no else path is allowed. To A/B test the content of a single existing email step and have a winner picked automatically, use `sequenzy ab-tests create --automation-node-id` instead.',"Use --clear-sending-window to remove a configured send window.","Use --bcc-emails with a comma-separated list to blind-copy team inboxes on every sequence email; use --clear-bcc-emails to remove them."],examples:['sequenzy sequences update seq_123 --name "User Onboarding"',"sequenzy sequences update seq_123 --pause-new-enrollments","sequenzy sequences update seq_123 --resume-new-enrollments","sequenzy sequences update seq_123 --enrollment-mode matching_field","sequenzy sequences update seq_123 --enrollment-field-path order.id","sequenzy sequences update seq_123 --sending-window-start 08:00 --sending-window-end 20:00 --sending-window-timezone Europe/Kiev --sending-window-days weekdays","sequenzy sequences update seq_123 --clear-sending-window",'sequenzy sequences update seq_123 --bcc-emails "cs-team@yourcompany.com, founder@yourcompany.com"',"sequenzy sequences update seq_123 --clear-bcc-emails","sequenzy sequences update seq_123 --steps-file ./sequence-updates.json",`sequenzy sequences update seq_123 --stop-condition-json '{"type":"has_tag","value":"customer"}'`,`sequenzy sequences update seq_123 --stop-condition-json '{"type":"does_not_have_tag","value":"allowlist"}'`,`sequenzy sequences update seq_123 --stop-condition-json '{"type":"event_received","value":"product.quota_used","matchConfig":{"mode":"event_property_filter","propertyFilters":[{"path":"quota_used","operator":"greater_than","value":1}]}}'`,`sequenzy sequences update seq_123 --insert-steps-json '{"afterNodeId":"node_email","steps":[{"delay":{"days":1},"subject":"Migration check-in","html":"<p>Need help migrating?</p>"}]}' --confirm-structural-change`,`sequenzy sequences update seq_123 --insert-steps-json '{"afterNodeId":"node_email","steps":[{"nodeType":"logic_wait_for_event","config":{"label":"Wait for reply","eventName":"email.replied","timeoutDays":5,"timeoutAction":"continue"}}]}'`,`sequenzy sequences update seq_123 --insert-steps-json '{"afterNodeId":"node_trigger","steps":[{"nodeType":"action_ai","config":{"prompt":"Write a short winback subject line for {{first_name}} who cancelled because {{event.reason}}.","resultKey":"winback","outputFields":[{"key":"subject_line","maxLength":60,"fallback":"We miss you"}],"includeEventProperties":true}}]}' --confirm-structural-change`,`sequenzy sequences update seq_123 --branch-json '{"afterNodeId":"node_email","branches":[{"conditionType":"link_clicked","linkUrl":"project-invites","activityScope":"previous_email","steps":[{"subject":"Invite accepted","html":"<p>Thanks for accepting.</p>"}]}],"elseSteps":[{"subject":"Reminder","html":"<p>Please accept your invite.</p>"}]}'`,`sequenzy sequences update seq_123 --branch-json '{"afterNodeId":"node_email_1","branches":[{"id":"replied","conditionType":"event_received","eventName":"email.replied","activityScope":"this_sequence","targetNodeId":"node_complete"}],"elseTargetNodeId":"node_email_2"}'`,`sequenzy sequences update seq_123 --branch-json '{"afterNodeId":"node_cart_wait","splitMode":"random","randomPercentages":[50,50],"branches":[{"id":"discount","label":"10% off","steps":[{"subject":"Here is 10% off","html":"<p>Complete your order.</p>"}]},{"id":"bonus","label":"Free shipping + gift","steps":[{"subject":"Free shipping on us","html":"<p>Complete your order.</p>"}]}]}' --confirm-structural-change`,"sequenzy sequences update seq_123 --branch-file ./branch.json",`sequenzy sequences update seq_123 --sms-steps-json '[{"nodeId":"node_sms","text":"Hey {{FIRST_NAME}}, your order shipped!"}]'`,`sequenzy sequences update seq_123 --subscriber-update-steps-json '[{"nodeId":"node_update","config":{"customAttributeUpdates":[{"name":"mrr","value":"{{event.amount}}","valueType":"number"}]}}]'`]});var eJe=or.command("enable <id>").description("Enable a sequence").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>ir("enable",{id:e,...t}));k(eJe,{examples:["sequenzy sequences enable seq_123"]});var tJe=or.command("disable <id>").description("Disable a sequence").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>ir("disable",{id:e,...t}));k(tJe,{examples:["sequenzy sequences disable seq_123"]});var nJe=or.command("duplicate <id>").description("Create an independent draft copy of a sequence").option("-n, --name <name>","Name for the copied sequence").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>ir("duplicate",{id:e,...t}));k(nJe,{notes:["Email templates, graph topology, and sequence A/B tests are copied independently."],examples:["sequenzy sequences duplicate seq_123",'sequenzy sequences duplicate seq_123 --name "Welcome Series v2"']});var rJe=or.command("archive <id>").description("Archive a sequence").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>ir("archive",{id:e,...t}));k(rJe,{examples:["sequenzy sequences archive seq_123"]});var iJe=or.command("unarchive <id>").description("Restore an archived sequence as a draft").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>ir("unarchive",{id:e,...t}));k(iJe,{examples:["sequenzy sequences unarchive seq_123"]});var oJe=or.command("enrollments <id>").description("List the contacts currently enrolled in a sequence").option("--status <statuses...>","Enrollment statuses to include (active, waiting, completed, failed, cancelled); defaults to active and waiting").option("--node-id <nodeIds...>","Only show enrollments sitting on these sequence node IDs").option("--subscriber-id <ids...>","Only show enrollments for these subscriber IDs").option("--email <email>","Only show enrollments for this email address").option("--sort <sort>","enrolled_at_desc (default), enrolled_at_asc, wait_until_asc, or wait_until_desc").option("--stop-condition-match","Also report whether each in-flight enrollment's stop condition already matches (caps the page at 100)").option("--limit <n>","Enrollments per page, 1-500 (default 50)").option("--offset <n>","Number of enrollments to skip").option("--all","Fetch every page").option("--csv [file]","Print CSV, or write it to a file").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Lse(e,t));k(oJe,{notes:["Defaults to active and waiting enrollments, which is every contact still moving through the sequence.","Get node IDs from sequenzy sequences get <id>, or from enrollmentCounts.byCurrentNode in sequenzy stats --sequence <id>.","waitUntil is when a waiting enrollment resumes; it is empty for enrollments that are not scheduled.","A stop condition does not cancel a waiting enrollment when its event arrives. It is re-checked when the enrollment next runs a step, so a matching contact keeps reporting waiting until its delay expires. Use --stop-condition-match to inspect the current match. The result is a non-atomic snapshot; a step already past its stop check may still finish."],examples:["sequenzy sequences enrollments seq_123","sequenzy sequences enrollments seq_123 --node-id node_wave_1","sequenzy sequences enrollments seq_123 --status waiting --sort wait_until_asc","sequenzy sequences enrollments seq_123 --subscriber-id sub_123 --stop-condition-match","sequenzy sequences enrollments seq_123 --all --csv enrollments.csv"]});var aJe=or.command("enrollment <sequenceId> <enrollmentId>").description("Show how one enrollment entered and which branches it already took").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t,n)=>Mse(e,t,n));k(aJe,{notes:["Use list_sequence_enrollments / sequenzy sequences enrollments to get enrollmentId.","nodeHistory is the recorded graph walk. Compared field values are redacted summaries, never the raw recipient value."],examples:["sequenzy sequences enrollment seq_123 tok_abc","sequenzy sequences enrollment seq_123 tok_abc --json"]});var sJe=or.command("move-enrollments <id>").description("Release a bounded batch of enrolled contacts from one sequence step onto another").requiredOption("--from-node <nodeId>","Node ID the contacts are currently waiting on").option("--to-node <nodeId>","Node ID to move them onto; defaults to the source step's only next step").option("--limit <n>","Maximum enrollments to move, 1-500 (default 100)").option("--sort <sort>","wait_until_asc (default), wait_until_desc, enrolled_at_asc, or enrolled_at_desc").option("--subscriber-ids <ids...>","Only move these subscriber IDs, up to 500").option("--daily-limit <n>","Refuse to move more than this many onto the target step in a rolling 24 hours").option("--tag <tags...>","Existing tag names to apply to the moved contacts").option("--reason <reason>","Note stored on every moved enrollment").option("--apply","Actually move the batch; otherwise only dry-run").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Qse(e,t));k(sJe,{notes:["Use this instead of cancelling and re-enrolling: the enrollment keeps its entry event properties, stop-condition snapshots, and start date.","Moved contacts become active on the target step immediately, so the sequence emails them as soon as the worker picks them up.","Without --apply, this command only reports which enrollments would move.","The batch is deliberately not auto-drained: re-run the command to release the next batch while remainingCount is above zero.","This works even while the sequence has new enrollment paused, because the contacts are already enrolled.","Get node IDs from sequenzy sequences enrollments <id> (currentNodeId) or sequenzy sequences get <id>."],examples:["sequenzy sequences move-enrollments seq_123 --from-node node_delay_2","sequenzy sequences move-enrollments seq_123 --from-node node_delay_2 --limit 180 --apply","sequenzy sequences move-enrollments seq_123 --from-node node_delay_2 --to-node node_email_3 --limit 180 --daily-limit 500 --tag wave-3-released --reason 'Wave 3' --apply"]});var lJe=or.command("pause-enrollments <id>").description("Stop new enrollments while current sequence recipients continue").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>ir("pause-enrollments",{id:e,...t}));k(lJe,{notes:["The sequence must already be active. Existing active and waiting recipients keep moving through the sequence.","Use sequences disable when you want to freeze current recipients too."],examples:["sequenzy sequences pause-enrollments seq_123"]});var cJe=or.command("resume-enrollments <id>").description("Resume new enrollments for an active sequence without changing current recipients").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>ir("resume-enrollments",{id:e,...t}));k(cJe,{notes:["The sequence must already be active. Use sequences enable to resume a fully disabled sequence."],examples:["sequenzy sequences resume-enrollments seq_123"]});var uJe=or.command("enroll <id>").description("Manually enroll subscribers in a sequence").option("-e, --email <emails...>","Email addresses to enroll").option("--subscriber-ids <ids...>","Subscriber IDs to enroll").option("--emails-json <json>","JSON array of emails, or an object with emails/subscribers").option("--emails-file <file>","JSON, CSV, or newline-separated file with subscriber emails").option("--target-node-id <nodeId>","Sequence node to enroll at; defaults to the first step after the trigger").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>ir("enroll",{id:e,...t}));k(uJe,{notes:["Provide at least one target using --subscriber-ids or exactly one email source: --email, --emails-json, or --emails-file.","Subscribers must be active; unknown emails are reported as not found and inactive, unavailable, or already enrolled subscribers are skipped.","Enrollment requires the sequence to be accepting entrants (enabled and not paused for enrollment)."],examples:["sequenzy sequences enroll seq_123 --email one@example.com two@example.com","sequenzy sequences enroll seq_123 --subscriber-ids sub_123 sub_456 --target-node-id node_email_2","sequenzy sequences enroll seq_123 --emails-file ./vips.csv","sequenzy sequences enroll seq_123 --email one@example.com --target-node-id node_email_2"]});var dJe=or.command("cancel-enrollments <id>").description("Cancel active or waiting subscriber enrollments in a sequence").option("--all","Cancel every active or waiting enrollment in the sequence").option("--subscriber-id <id>","Cancel enrollments for one subscriber ID").option("--subscriber-ids <ids...>","Cancel enrollments for up to 500 subscriber IDs").option("--field-path <path>","Entry event property dot path to match, such as order.id").option("--field-values <values>","Comma-separated entry field values to match").option("--reason <reason>","Reason stored on cancelled enrollments").option("--apply","Actually cancel matches; otherwise only dry-run").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>ir("cancel-enrollments",{id:e,...t}));k(dJe,{notes:["sequenceId is always required. Provide exactly one target: --all, --subscriber-id, --subscriber-ids, or --field-values.","Use --all to fully stop a live sequence when enrollments came from a segment and share no entry field value.","Without --apply, this command only reports matching enrollments.","With --apply, the command keeps calling the API until every match is drained and prints running progress.","When --field-path is omitted, the API uses the sequence enrollmentFieldPath if configured."],examples:["sequenzy sequences cancel-enrollments seq_123 --all","sequenzy sequences cancel-enrollments seq_123 --all --apply --reason 'Lifecycle cutover'","sequenzy sequences cancel-enrollments seq_123 --subscriber-id sub_123 --apply","sequenzy sequences cancel-enrollments seq_123 --subscriber-ids sub_1 sub_2 --apply","sequenzy sequences cancel-enrollments seq_123 --field-path order.id --field-values ord_123,ord_456"]});var pJe=or.command("realign-enrollments <id>").description("Move waiting enrollments to the start of the sequence sending window on the day they are already scheduled for").option("--node-ids <ids...>","Only realign enrollments sitting on these step IDs").option("--subscriber-ids <ids...>","Only realign enrollments for up to 500 subscriber IDs").option("--cursor <cursor>","Continue a capped scan from the cursor returned by the previous run").option("--job-id <job-id>","Check a previously queued realignment job instead of starting one").option("--apply","Actually move the wait times; otherwise only dry-run").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>ir("realign-enrollments",{id:e,...t}));k(pJe,{notes:["Run this after changing a live sequence's sending window: existing waits keep their original time, so a widened window never reaches them and a narrowed one defers them to the next allowed day.","A wait only ever moves earlier, never onto a different local day, and never before now. Nobody is cancelled or re-enrolled.","Without --apply, this command only reports the new wait times.","When more enrollments remain, run the complete continuation command printed in the result; applied runs retain --apply and any targeting filters.","Applied realignments run in the background. Use the printed --job-id command to read the result.","Use `sequenzy sequences enrollments <id> --status waiting --sort wait_until_asc` first to see who is affected."],examples:["sequenzy sequences realign-enrollments seq_123","sequenzy sequences realign-enrollments seq_123 --apply","sequenzy sequences realign-enrollments seq_123 --node-ids node_week_2 --apply","sequenzy sequences realign-enrollments seq_123 --subscriber-ids sub_1 sub_2 --apply","sequenzy sequences realign-enrollments seq_123 --job-id realign-sequence-enrollments-seq_123-..."]});var mJe=or.command("delete <id>").description("Delete a sequence").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>ir("delete",{id:e,...t}));k(mJe,{examples:["sequenzy sequences delete seq_123"]});var ba=Tt.command("ab-tests").description("Inspect and edit A/B test variants").action(()=>ba.help());k(ba,{notes:["Use get to discover variant IDs, then update-variant to edit a specific A/B variant.","Only draft A/B tests can be edited.","create, add-variant, and delete-variant work on campaign and sequence A/B tests; delete works on campaign A/B tests only."],examples:["sequenzy ab-tests list --sequence seq_123","sequenzy ab-tests get ab_123","sequenzy ab-tests update ab_123 --winner-criteria open_rate","sequenzy ab-tests stats ab_123 --period 7d","sequenzy ab-tests create camp_123 --test-percentage 20 --winner-criteria open_rate",'sequenzy ab-tests add-variant ab_123 --subject "Alternative subject"',"sequenzy ab-tests restart ab_123 --source-variant var_b","sequenzy ab-tests select-winner ab_123 var_b",'sequenzy ab-tests update-variant ab_123 var_b --subject "New subject"',"sequenzy ab-tests update-variant ab_123 var_b --blocks-file ./variant-b.json"]});var fJe=ba.command("list").description("List A/B tests").option("--sequence <id>","Filter by sequence ID").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>Pa("list",e));k(fJe,{examples:["sequenzy ab-tests list --sequence seq_123"]});var gJe=ba.command("get <id>").description("Get A/B test details and variants").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Pa("get",{id:e,...t}));k(gJe,{examples:["sequenzy ab-tests get ab_123"]});var xJe=ba.command("update <id>").description("Update campaign or sequence A/B test settings").option("-n, --name <name>","A/B test name").option("--test-percentage <percent>","Campaign test audience share (5-50)").option("--duration-minutes <minutes>","Campaign test duration before winner selection (15-1440)").option("--winner-criteria <criteria>","Winner criteria: open_rate or click_rate").option("--test-type <type>","Sequence variant strategy: subject or content").option("--winner-threshold <count>","Sequence recipients before winner selection (10-1000)").option("--confirm-live-change","Confirm a settings change to an active or already-used sequence test").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Pa("update",{id:e,...t}));k(xJe,{notes:["Campaign tests use --test-percentage, --duration-minutes, and --winner-criteria.","Sequence tests use --test-type, --winner-threshold, and --winner-criteria.","Use --confirm-live-change when sequence settings affect an active test or a test with recorded activity."],examples:["sequenzy ab-tests update ab_123 --test-percentage 30 --duration-minutes 120 --winner-criteria open_rate","sequenzy ab-tests update ab_123 --test-type content --winner-criteria open_rate --winner-threshold 150 --confirm-live-change"]});var AJe=ba.command("stats <id>").description("Get A/B test variant stats").option("-p, --period <period>","Time period (1h, 24h, 7d, 30d, 90d)").option("--start <iso>","Custom range start as ISO 8601").option("--end <iso>","Custom range end as ISO 8601").option("--include-bots","Include machine-classified bot/scanner opens and clicks").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Pa("stats",{id:e,...t}));k(AJe,{notes:["Use --period or both --start and --end. Custom ranges max at 90 days.","Bot/scanner opens and clicks are excluded by default; pass --include-bots to inspect raw engagement."],examples:["sequenzy ab-tests stats ab_123","sequenzy ab-tests stats ab_123 --period 30d","sequenzy ab-tests stats ab_123 --include-bots"]});var EJe=ba.command("select-winner <id> <variantId>").description("Select a campaign A/B winner and deliver it to the remainder").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t,n)=>Pa("select-winner",{id:e,variantId:t,...n}));k(EJe,{notes:["Only campaign A/B tests currently in the testing phase can select a winner.","Selection immediately queues winner delivery for the remaining audience."],examples:["sequenzy ab-tests select-winner ab_123 var_b"]});var hJe=ba.command("restart <id>").description("Run another sequence A/B test from an existing variant").option("--source-variant <id>","Variant to use as the new control. Defaults to the selected winner.").option("--test-type <type>","Test type for generated variants: subject or content").option("--winner-threshold <count>","Subscribers before selecting a winner (10-1000)").option("--variant-count <count>","Total variants including control (2-4)").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Pa("restart",{id:e,...t}));k(hJe,{notes:["Only sequence A/B tests with a selected winner can be restarted.","Run `sequenzy ab-tests get <id>` first to find variant IDs."],examples:["sequenzy ab-tests restart ab_123","sequenzy ab-tests restart ab_123 --source-variant var_b --test-type content --variant-count 3"]});var yJe=ba.command("update-variant <id> <variantId>").description("Update an A/B test variant").option("-s, --subject <subject>","Variant subject").option("--preview-text <text>","Variant preview text").option("--html <html>","Replacement HTML body").option("--html-file <file>","Read replacement HTML from file").option("--blocks-json <json>","Inline JSON array of Sequenzy email blocks").option("--blocks-file <file>","Path to a JSON file with Sequenzy email blocks").option("--confirm-live-change","Confirm a sequence variant edit that may affect A/B test accuracy").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t,n)=>Pa("update-variant",{id:e,variantId:t,...n}));k(yJe,{notes:["Provide either HTML or blocks, not both.","Campaign variants remain editable only in draft.","Use --confirm-live-change when a sequence is active or its test already has activity; earlier sends stay unchanged and combined results may be inaccurate.","Run `sequenzy ab-tests get <id>` first to find variant IDs."],examples:['sequenzy ab-tests update-variant ab_123 var_b --subject "New subject"',"sequenzy ab-tests update-variant ab_123 var_b --html-file ./variant-b.html",'sequenzy ab-tests update-variant ab_123 var_b --subject "Revised future send" --confirm-live-change']});var bJe=ba.command("create [campaignId]").description("Create a campaign or sequence-node A/B test").option("--automation-node <nodeId>","Convert this sequence email node into an A/B test node").option("--confirm-live-change","Confirm conversion of an email node in an active sequence").option("-n, --name <name>","A/B test name").option("--test-percentage <percent>","Campaign test audience share (5-50, default 20)").option("--duration-minutes <minutes>","Campaign test duration before winner selection (15-1440, default 240)").option("--winner-criteria <criteria>","Winner criteria: open_rate or click_rate (campaign default open_rate; overrides sequence test-type default)").option("--test-type <type>","Sequence variant strategy: subject or content (default content)").option("--winner-threshold <count>","Sequence test sample size (10-1000, default 100)").option("--variants-json <json>","Inline JSON array of extra variants ({subject, previewText?, blocks?})").option("--variants-file <file>","Path to a JSON file with extra variants ({subject, previewText?, blocks?})").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Pa("create",{campaignId:e,automationNodeId:t.automationNode,...t}));k(bJe,{notes:["Provide either a campaign ID or --automation-node, but not both.","Campaigns must be in draft or rejected status. Sequence node IDs must reference an email node.","Campaigns use --test-percentage and --duration-minutes; sequences use --winner-threshold.","Variant A is created automatically from the campaign email; provided variants are added after it."],examples:["sequenzy ab-tests create camp_123",`sequenzy ab-tests create --automation-node node_123 --test-type content --winner-threshold 100 --variants-json '[{"subject":"Variant B"}]'`,"sequenzy ab-tests create camp_123 --test-percentage 30 --duration-minutes 120 --winner-criteria click_rate",`sequenzy ab-tests create camp_123 --variants-json '[{"subject":"Alternative subject"}]'`]});var CJe=ba.command("add-variant <id>").description("Add a variant to a draft campaign or sequence A/B test").requiredOption("-s, --subject <subject>","Variant subject").option("--preview-text <text>","Variant preview text").option("--blocks-json <json>","Inline JSON array of Sequenzy email blocks").option("--blocks-file <file>","Path to a JSON file with Sequenzy email blocks").option("--confirm-live-change","Confirm adding a variant to an A/B test in an active sequence").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Pa("add-variant",{id:e,...t}));k(CJe,{notes:["Variants can only be added while the A/B test is in draft status.","A/B tests in an active sequence require --confirm-live-change."],examples:['sequenzy ab-tests add-variant ab_123 --subject "Alternative subject"','sequenzy ab-tests add-variant ab_123 --subject "Alternative subject" --blocks-file ./variant.json']});var BJe=ba.command("delete-variant <id> <variantId>").description("Remove a variant from a draft campaign or sequence A/B test").option("-y, --yes","Skip the confirmation prompt").option("--confirm-live-change","Confirm deleting a variant from an A/B test in an active sequence").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t,n)=>Pa("delete-variant",{id:e,variantId:t,...n}));k(BJe,{notes:["Variant A is the control variant and cannot be deleted.","Variants can only be removed while the A/B test is in draft status.","A/B tests in an active sequence require --confirm-live-change."],examples:["sequenzy ab-tests delete-variant ab_123 var_b --yes"]});var SJe=ba.command("delete <id>").description("Delete a campaign A/B test").option("-y, --yes","Skip the confirmation prompt").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Pa("delete",{id:e,...t}));k(SJe,{notes:["Running A/B tests cannot be deleted; the linked campaign must be draft or rejected."],examples:["sequenzy ab-tests delete ab_123 --yes"]});var Lu=Tt.command("components").description("Manage reusable email components and the default email footer").action(()=>Lu.help());k(Lu,{notes:["Components are saved block groups you can reuse across emails.","The component pinned to the footer slot is the footer every new sequence, campaign, and AI-generated email gets. Edit it here to change the footer everywhere at once - editing one email's blocks only changes that email.","A default footer always keeps its unsubscribe link enabled. Transactional sends hide it at render time.","Existing emails change only with explicit --apply-to scopes and a reviewed --preview-token. Use footer preview first; --output-dir exports before/after HTML for visual inspection."],examples:["sequenzy components footer get --json > footer.json","sequenzy components footer set --blocks-file ./footer.json --yes","sequenzy components list --company comp_123","sequenzy components create 'Promo banner' --blocks-file ./banner.json"]});var cS=Lu.command("footer").description("Read or replace the company's default email footer").action(()=>cS.help()),vJe=cS.command("get").description("Print the current default email footer").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>gc("footer-get",void 0,e));k(vJe,{notes:["Exits with a not-found error when no default footer is set, which means emails fall back to the footer generated from the company profile.","Pipe --json to a file, edit the blocks, then write it back with `components footer set`."],examples:["sequenzy components footer get","sequenzy components footer get --json > footer.json"]});var _Je=cS.command("preview").description("Preview a footer change and optionally export before/after HTML without saving").option("--blocks-json <json>","Proposed footer blocks as inline JSON").option("--blocks-file <path>","Proposed footer blocks as a JSON file").option("--name <name>","Proposed component name").option("--description <text>","Proposed component description").option("--apply-to <scopes>","Comma-separated sequences,campaigns,transactional,templates; omit for future emails only").option("--include-customized","Also replace customized footers").option("--render-preview","Include footer and before/after HTML in JSON output").option("--output-dir <path>","Write visual HTML previews to this directory").option("--sample-id <id>","Render a specific affected item instead of category samples").option("--sample-kind <kind>","Sample kind: email, ab_variant, localization").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON, including the preview token").action((e)=>gc("footer-preview",void 0,e));k(_Je,{notes:["The preview does not save or send. Dynamic content is not personalized. Open exported HTML in a browser to inspect it visually.","Use the same blocks, metadata and scope options when applying the returned token. Stale previews return a conflict; review a fresh preview before retrying."],examples:["sequenzy components footer preview --blocks-file footer.json --apply-to sequences,campaigns,transactional,templates --output-dir ./footer-preview --json"]});var IJe=cS.command("set").description("Create or replace the company's default email footer").option("--blocks-json <json>","Footer blocks as inline JSON").option("--blocks-file <path>","Footer blocks as a JSON file").option("--apply-to <scopes>","Comma-separated sequences,campaigns,transactional,templates").option("--include-customized","Also replace customized footers, matching the preview").option("--preview-token <token>","Reviewed footer preview token; required with --apply-to").option("--name <name>","Component name (default: Default Footer)").option("--description <text>","Component description").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").option("-y, --yes","Skip the confirmation prompt").action((e)=>gc("footer-set",void 0,e));k(IJe,{notes:["Replaces the whole footer. Read the current one with `components footer get --json` first if you only mean to change part of it.","The unsubscribe link is always re-enabled on save."],examples:["sequenzy components footer set --blocks-file ./footer.json --yes",'sequenzy components footer set --blocks-file ./footer.json --name "2026 Footer"']});var DJe=Lu.command("list").description("List email components, newest first").option("--type <type>","Filter by component type (section, footer)").option("--defaults-only","Only components pinned as a company default").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>gc("list",void 0,e));k(DJe,{examples:["sequenzy components list","sequenzy components list --defaults-only --json"]});var wJe=Lu.command("get <componentId>").description("Show one email component").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>gc("get",e,t));k(wJe,{examples:["sequenzy components get cmp_123 --json"]});var TJe=Lu.command("create <name>").description("Create a reusable email component").option("--blocks-json <json>","Component blocks as inline JSON").option("--blocks-file <path>","Component blocks as a JSON file").option("--description <text>","Component description").option("--type <type>","Component type (section, footer). Default: section").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>gc("create",e,t));k(TJe,{notes:["Component names are unique per company.","Creating one with --type footer does not pin it as the default footer. Use `components footer set` for that."],examples:["sequenzy components create 'Promo banner' --blocks-file ./banner.json"]});var kJe=Lu.command("update <componentId>").description("Update an email component's metadata or blocks").option("--name <name>","New component name").option("--description <text>","New description").option("--type <type>","New component type (section, footer)").option("--blocks-json <json>","Replacement blocks as inline JSON").option("--blocks-file <path>","Replacement blocks as a JSON file").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>gc("update",e,t));k(kJe,{notes:["Replacing blocks bumps the component version. Emails built earlier keep the copy they were created with."],examples:["sequenzy components update cmp_123 --name 'Promo banner v2'","sequenzy components update cmp_123 --blocks-file ./banner-v2.json"]});var RJe=Lu.command("delete <componentId>").description("Delete an email component").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").option("-y, --yes","Skip the confirmation prompt").action((e,t)=>gc("delete",e,t));k(RJe,{notes:["Emails that already rendered the component keep their copied blocks.","Deleting the pinned default footer makes new emails fall back to the generated footer."],examples:["sequenzy components delete cmp_123 --yes"]});var Ts=Tt.command("templates").description("Manage email templates").action(()=>Ts.help());k(Ts,{notes:["Template content can be provided as raw HTML or as Sequenzy blocks JSON.","Templates can be assigned labels and listed by label for integration dashboards.","Use blocks when you need conditional content, per-block styles, or an exact editor-compatible structure.",lA],examples:["sequenzy templates list --company comp_123","sequenzy templates list --label edm --company comp_123",'sequenzy templates create welcome --subject "Welcome" --html-file ./welcome.html','sequenzy templates create welcome --subject "Welcome" --label edm template --html-file ./welcome.html','sequenzy templates create welcome --subject "Welcome" --blocks-file ./welcome-blocks.json','sequenzy templates update tmpl_123 --subject "Updated" --html-file ./welcome-v2.html','sequenzy templates localizations set tmpl_123 es --subject "Hola" --html-file ./welcome-es.html',"sequenzy templates localizations sync tmpl_123 --locale es fr"]});var FJe=Ts.command("list").description("List templates, newest first").option("--label <labels...>","Filter by label name").option("--templates-only","Only reusable master designs (emails marked as templates)").option("-l, --limit <number>","Templates per page, 1-100 (default: 50)").option("--offset <number>","Templates to skip before returning results").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>wl("list",e));k(FJe,{notes:["Returns 50 templates per call by default. When pagination.hasMore is true, re-run with --offset advanced by pagination.count to read the rest.","Templates are every saved email body - standalone templates plus the bodies behind campaigns and transactional emails - so the count grows with your campaign history."],examples:["sequenzy templates list --company comp_123","sequenzy templates list --label edm --company comp_123","sequenzy templates list --templates-only --json","sequenzy templates list --limit 100 --json","sequenzy templates list --limit 100 --offset 100 --json"]});var NJe=Ts.command("get <id>").description("Get template details").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>wl("get",{id:e,...t}));k(NJe,{examples:["sequenzy templates get tmpl_123 --company comp_123"]});var PJe=X5(Ts.command("render <id>").description("Render a template to email-ready HTML")).action((e,t)=>eB({type:"template",id:e},t));k(PJe,{notes:e3,examples:["sequenzy templates render tmpl_123 --out preview.html","sequenzy templates render tmpl_123 --email you@example.com --var plan=Pro --json"]});var OJe=Ts.command("create <name>").description("Create a template").option("-s, --subject <subject>","Email subject (optional with --prompt)").option("--preview-text <text>","Email preview text override").option("--prompt <prompt>","Generate branded native blocks from a prompt").option("--style <style>","Prompt generation style. Pass designed or plain to force the designed or plain-text email style; other values are freeform guidance (defaults to the company's email style preference)").option("--tone <tone>","Prompt generation tone").option("--html <html>","Email HTML content").option("--html-file <file>","Read HTML from file").option("--blocks-json <json>","Inline JSON array of Sequenzy email blocks").option("--blocks-file <file>","Path to a JSON file with Sequenzy email blocks").option("--label <labels...>","Label names to assign").option("--template","Save as a reusable master design that sequence steps and campaigns can start from").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>wl("create",{name:e,...t}));k(OJe,{notes:["Provide exactly one of prompt, HTML, or blocks JSON content.","Use blocks when you need conditional content, per-block styles, or exact editor parity."],examples:['sequenzy templates create welcome --prompt "Welcome new customers"','sequenzy templates create welcome --subject "Welcome" --html-file ./welcome.html','sequenzy templates create welcome --subject "Welcome" --label edm template --html-file ./welcome.html','sequenzy templates create welcome --subject "Welcome" --blocks-file ./welcome-blocks.json']});var LJe=Ts.command("update <id>").description("Update a template").option("-n, --name <name>","Template name").option("-s, --subject <subject>","Email subject").option("--preview-text <text>","Inbox preview text").option("--html <html>","Email HTML content").option("--html-file <file>","Read HTML from file").option("--blocks-json <json>","Inline JSON array of Sequenzy email blocks").option("--blocks-file <file>","Path to a JSON file with Sequenzy email blocks").option("--label <labels...>","Replace label names").option("--template","Mark as a reusable master design").option("--no-template","Remove the reusable master design mark").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>wl("update",{id:e,...t}));k(LJe,{notes:["Provide at least one of --name, --subject, --preview-text, --label, --template/--no-template, --html, --html-file, --blocks-json, or --blocks-file.","Do not combine HTML flags with blocks flags in the same request."],examples:['sequenzy templates update tmpl_123 --subject "Updated"','sequenzy templates update tmpl_123 --preview-text "A warmer inbox preview"',"sequenzy templates update tmpl_123 --label edm template","sequenzy templates update tmpl_123 --html-file ./welcome-v2.html","sequenzy templates update tmpl_123 --blocks-file ./welcome-v2-blocks.json"]});var uS=Ts.command("localizations").description("Manage localized template variants").action(()=>uS.help());k(uS,{notes:["Set stores caller-supplied localized content immediately.","Sync queues AI translation for selected locales, or every enabled non-primary locale when --locale is omitted."],examples:['sequenzy templates localizations set tmpl_123 es --subject "Hola" --html-file ./welcome-es.html',"sequenzy templates localizations sync tmpl_123 --locale es fr","sequenzy templates localizations sync tmpl_123"]});var MJe=uS.command("set <id> <locale>").description("Create or replace a localized template variant").requiredOption("-s, --subject <subject>","Localized email subject").option("--preview-text <text>","Localized email preview text").option("--html <html>","Localized email HTML content").option("--html-file <file>","Read localized HTML from file").option("--blocks-json <json>","Inline JSON array of localized Sequenzy email blocks").option("--blocks-file <file>","Path to a JSON file with localized Sequenzy email blocks").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t,n)=>wl("set-localization",{id:e,locale:t,...n}));k(MJe,{notes:["The locale must be enabled in the company's localization settings and cannot be the primary locale.","Provide exactly one HTML or blocks content source."],examples:['sequenzy templates localizations set tmpl_123 es --subject "Hola" --html-file ./welcome-es.html','sequenzy templates localizations set tmpl_123 fr-CA --subject "Bienvenue" --blocks-file ./welcome-fr-ca.json']});var UJe=uS.command("sync <id>").description("Queue AI translation for template locales").option("--locale <locales...>","Enabled locales to sync; omit to sync every non-primary locale").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>wl("sync-localizations",{id:e,locales:t.locale,company:t.company,json:t.json}));k(UJe,{examples:["sequenzy templates localizations sync tmpl_123 --locale es fr","sequenzy templates localizations sync tmpl_123"]});var $Je=Ts.command("delete <id>").description("Delete a template").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>wl("delete",{id:e,...t}));k($Je,{notes:["Deletion fails when the template is still referenced by a campaign or sequence."],examples:["sequenzy templates delete tmpl_123"]});var qJe=Ts.command("share <id>").description("Create or fetch the email's public view-in-browser link").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>wl("share",{id:e,...t}));k(qJe,{notes:["Accepts an email ID or a transactional email's ID or slug, so transactional and sequence emails can be shared with the ID you already hold.","The hosted page is anonymized: sample contact, inert unsubscribe link, no open/click tracking.","Idempotent - rerunning returns the same URL until you run `templates unshare`.","Campaigns have their own link that follows the A/B winner - use `campaigns share`."],examples:["sequenzy templates share tmpl_123","sequenzy templates share order-confirmation"]});var QJe=Ts.command("unshare <id>").description("Revoke the email's public view-in-browser link").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>wl("unshare",{id:e,...t}));k(QJe,{notes:["The shared URL returns 404 immediately after revocation."],examples:["sequenzy templates unshare tmpl_123"]});var Nf=Tt.command("companies").description("Inspect or create companies").action(()=>Nf.help());k(Nf,{notes:["Company creation starts background website processing automatically."],examples:["sequenzy companies list","sequenzy companies get comp_123","sequenzy companies update comp_123 --primary-color '#0ea5e9'","sequenzy companies create example.com --name Example"]});var zJe=Nf.command("list").description("List accessible companies").option("--json","Print raw JSON").action((e)=>_x("list",e));k(zJe,{examples:["sequenzy companies list"]});var HJe=Nf.command("get <id>").description("Get company details").option("--json","Print raw JSON").action((e,t)=>_x("get",{id:e,...t}));k(HJe,{examples:["sequenzy companies get comp_123"]});var jJe=Nf.command("update <id>").description("Update company info, brand context, and reply tracking").option("-n, --name <name>","Company display name").option("--description <text>","Short product or company summary").option("--description-file <path>","Read description from a file").option("--logo-url <url>","Public logo URL").option("--founder-name <name>","Founder or sender name").option("--primary-color <hex>","Primary brand color, e.g. #f97316").option("--brand-colors-json <json>","Brand colors object as JSON").option("--brand-colors-file <path>","Read brand colors JSON from a file").option("--value-props-json <json>","Value propositions array as JSON").option("--value-props-file <path>","Read value propositions JSON from a file").option("--testimonials-json <json>","Testimonials array as JSON").option("--testimonials-file <path>","Read testimonials JSON from a file").option("--tone-voice <text>","Tone of voice guidance").option("--company-context <text>","Product knowledge for AI writing").option("--company-context-file <path>","Read product knowledge from a file").option("--email-design-prompt <text>","Art direction for AI-designed emails (layout, density, imagery)").option("--email-design-prompt-file <path>","Read the design prompt from a file").option("--email-length-preference <value>","Email length: concise, balanced, or detailed (new workspaces default to concise)").option("--social-links-json <json>","Social links object as JSON").option("--social-links-file <path>","Read social links JSON from a file").option("--privacy-policy-url <url>","Privacy policy URL").option("--terms-url <url>","Terms of service URL").option("--address <address>","Physical mailing address").option("--language <code>","Primary language code").option("--pricing-json <json>","Pricing object as JSON").option("--pricing-file <path>","Read pricing JSON from a file").option("--font-family <family>","Default email font family").option("--email-theme-json <json>","Default email theme as JSON (partial: presetId, colors, typography, layout; pass null to reset)").option("--email-theme-file <path>","Read the default email theme JSON from a file").option("--email-direction <direction>","Default email direction: ltr or rtl").option("--sender-profile-id <id>","Existing sender profile to make the default (see `sequenzy sender-profiles list`)").option("--from-email <email>","Account-wide default From address (domain must be verified)").option("--from-name <name>","Display name of the default From profile (alone, it renames the current one)").option("--reply-profile-id <id>","Existing reply profile to make the default (see `sequenzy sender-profiles list`)").option("--reply-to <email>","Account-wide default Reply-To address").option("--reply-to-name <name>","Display name of the default Reply-To profile (alone, it renames the current one)").option("--enable-reply-tracking","Enable inbound reply tracking").option("--disable-reply-tracking","Disable inbound reply tracking").option("--reply-tracking-domain-mode <mode>","Reply domain mode: sequenzy or custom").option("--enable-reply-forwarding","Enable captured reply forwarding").option("--disable-reply-forwarding","Disable captured reply forwarding").option("--default-list <id>","List new contacts join by default when nothing targets them (repeatable)",(e,t=[])=>[...t,e]).option("--default-lists-none","New contacts join no list unless something targets them").option("--default-lists-all","New contacts join every current and future list").option("--json","Print raw JSON").action((e,t)=>_x("update",{id:e,...t}));k(jJe,{notes:["The default-list flags set which lists a new contact joins when nothing targets it explicitly - forms, API writes, events, imports, and live ingestion from integrations without their own list targeting (Dodo Payments, PostHog, WooCommerce). Payment-provider backfills follow this setting; PostHog history imports instead create contacts without list memberships. `companies get <id>` reports the current value.","`--default-lists-all`, `--default-lists-none`, and `--default-list` are three different things: all lists, no list at all, and exactly the listed ones. They are mutually exclusive.","Changing this only affects later writes. Nobody is moved or removed from a list retroactively, so a list already polluted by a backfill still needs `sequenzy lists remove-subscribers`.","The default-list flags need an API key with the companies:manage scope. In the dashboard the same setting lives under Contacts -> Lists -> Default Lists."],examples:["sequenzy companies update comp_123 --primary-color '#0ea5e9'","sequenzy companies update comp_123 --default-list list_abc --default-list list_def","sequenzy companies update comp_123 --default-lists-none",`sequenzy companies update comp_123 --email-theme-json '{"colors":{"mutedText":"#4b5563"},"typography":{"baseFontSize":16}}'`,"sequenzy companies update comp_123 --company-context-file ./product.md --tone-voice 'clear, direct, warm'","sequenzy companies update comp_123 --from-name 'Example'","sequenzy companies update comp_123 --sender-profile-id sender_abc123 --from-name 'Example News'","sequenzy companies update comp_123 --enable-reply-tracking --reply-tracking-domain-mode sequenzy",`sequenzy companies update comp_123 --value-props-json '[{"title":"Fast setup","description":"Launch lifecycle emails in minutes."}]'`]});var GJe=Nf.command("create <domain>").description("Create a company and queue website processing").option("-n, --name <name>","Company name").option("--json","Print raw JSON").action((e,t)=>_x("create",{domain:e,...t}));k(GJe,{examples:["sequenzy companies create example.com","sequenzy companies create https://example.com --name Example"]});var dA=Tt.command("tags").description("Manage tag definitions").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>kf("list",e));k(dA,{notes:["Running `sequenzy tags` without a subcommand lists tag definitions.","Tag names are normalized to lowercase with dashes; system tags cannot be changed or deleted."],examples:["sequenzy tags --company comp_123","sequenzy tags list","sequenzy tags create vip --color purple","sequenzy tags update tag_123 --color red","sequenzy tags delete tag_123 --yes"]});var VJe=dA.command("list").description("List tag definitions").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>kf("list",e));k(VJe,{examples:["sequenzy tags list --company comp_123"]});var WJe=dA.command("create <name>").description("Create a tag definition").option("--color <color>","Tag color, e.g. gray, red, green, blue, purple").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>kf("create",{name:e,...t}));k(WJe,{notes:["Names are normalized to lowercase with dashes, so `VIP Customer` becomes `vip-customer`."],examples:["sequenzy tags create vip","sequenzy tags create vip --color purple"]});var KJe=dA.command("update <tagId>").description("Update a tag definition color").requiredOption("--color <color>","New tag color").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>kf("update",{tagId:e,...t}));k(KJe,{notes:["System tags cannot be updated."],examples:["sequenzy tags update tag_123 --color red"]});var JJe=dA.command("delete <tagId>").description("Delete a tag definition").option("-y, --yes","Skip the confirmation prompt").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>kf("delete",{tagId:e,...t}));k(JJe,{notes:["Deleting a tag removes it from every subscriber.","Tags used by sequences cannot be deleted until those sequences stop referencing them."],examples:["sequenzy tags delete tag_123 --yes"]});var Bc=Tt.command("lists").description("Manage subscriber lists").action(()=>Bc.help());k(Bc,{examples:["sequenzy lists list --company comp_123",'sequenzy lists create Newsletter --description "Public newsletter list"','sequenzy lists update list_123 --name "Weekly Newsletter" --private',"sequenzy lists add-subscribers list_123 --emails-file ./batch-001.csv","sequenzy lists remove-subscribers list_123 --email one@example.com","sequenzy lists import list_123 --emails-file ./batch-001.csv","sequenzy lists delete list_123 --yes"]});var YJe=Bc.command("list").description("List subscriber lists").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>Iu("list",e));k(YJe,{examples:["sequenzy lists list --company comp_123"]});var ZJe=Bc.command("create <name>").description("Create a subscriber list").option("-d, --description <text>","List description").option("--private","Mark the list as private").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Iu("create",{name:e,...t}));k(ZJe,{examples:['sequenzy lists create Newsletter --description "Public newsletter list"',"sequenzy lists create VIP --private --company comp_123"]});var XJe=Bc.command("add-subscribers <listId>").description("Add subscribers to a list from emails, JSON, or a file").option("-e, --email <emails...>","Email addresses to add").option("--emails-json <json>","JSON array of emails, or an object with emails/subscribers").option("--emails-file <file>","JSON, CSV, or newline-separated file with subscriber emails").option("--duplicate-strategy <strategy>","Duplicate strategy: skip, merge, or overwrite","skip").option("--enroll-sequences","Enroll newly created subscribers in matching sequences").option("--opt-in-mode <mode>","Consent mode: default, confirmed, or double_opt_in","default").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Iu("add-subscribers",{listId:e,...t}));k(XJe,{notes:["Provide exactly one source: --email, --emails-json, or --emails-file.","Files may be newline-separated, CSV with an email column, a JSON email array, or a JSON object with emails/subscribers.","CSV headers named email, e-mail, email address, or mail are detected; otherwise the first column is used.","New subscribers are not enrolled in matching sequences unless --enroll-sequences is set."],examples:["sequenzy lists add-subscribers list_123 --email one@example.com two@example.com",`sequenzy lists add-subscribers list_123 --emails-json '["one@example.com","two@example.com"]'`,"sequenzy lists add-subscribers list_123 --emails-file ./batch-001.csv"]});var eYe=Bc.command("import <listId>").description("Alias for add-subscribers; import subscribers into a list").option("-e, --email <emails...>","Email addresses to add").option("--emails-json <json>","JSON array of emails, or an object with emails/subscribers").option("--emails-file <file>","JSON, CSV, or newline-separated file with subscriber emails").option("--duplicate-strategy <strategy>","Duplicate strategy: skip, merge, or overwrite","skip").option("--enroll-sequences","Enroll newly created subscribers in matching sequences").option("--opt-in-mode <mode>","Consent mode: default, confirmed, or double_opt_in","default").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Iu("add-subscribers",{listId:e,...t}));k(eYe,{notes:["`lists import` is an alias for `lists add-subscribers`.","Provide exactly one source: --email, --emails-json, or --emails-file.","Files may be newline-separated, CSV with an email column, a JSON email array, or a JSON object with emails/subscribers.","CSV headers named email, e-mail, email address, or mail are detected; otherwise the first column is used."],examples:["sequenzy lists import list_123 --emails-file ./batch-001.csv",`sequenzy lists import list_123 --emails-json '["one@example.com","two@example.com"]'`]});var tYe=Bc.command("update <listId>").description("Update a subscriber list").option("-n, --name <name>","List name").option("-d, --description <text>","List description").option("--private","Mark the list as private").option("--no-private","Mark the list as public").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Iu("update",{listId:e,...t}));k(tYe,{notes:["Provide at least one of --name, --description, --private, or --no-private."],examples:['sequenzy lists update list_123 --name "Weekly Newsletter"',"sequenzy lists update list_123 --private","sequenzy lists update list_123 --no-private"]});var nYe=Bc.command("remove-subscribers <listId>").description("Remove subscribers from a list by email").option("-e, --email <emails...>","Email addresses to remove").option("--emails-json <json>","JSON array of emails, or an object with emails/subscribers").option("--emails-file <file>","JSON, CSV, or newline-separated file with subscriber emails").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Iu("remove-subscribers",{listId:e,...t}));k(nYe,{notes:["Provide exactly one source: --email, --emails-json, or --emails-file.","Subscribers are only removed from the list; they stay in your audience.","Emails that do not match a subscriber are reported as not found."],examples:["sequenzy lists remove-subscribers list_123 --email one@example.com two@example.com","sequenzy lists remove-subscribers list_123 --emails-file ./churned.csv"]});var rYe=Bc.command("delete <listId>").description("Delete a subscriber list").option("-y, --yes","Skip the confirmation prompt").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Iu("delete",{listId:e,...t}));k(rYe,{notes:["Deleting a list removes all of its memberships; subscribers themselves are kept."],examples:["sequenzy lists delete list_123 --yes"]});var Ap=Tt.command("segments").description("Manage segments").action(()=>Ap.help());k(Ap,{notes:["Use --filter-json for arbitrary segment filters. The CLI will fill in missing filter IDs.","Use --match any to create a segment that matches any filter instead of all filters.",'Engagement filters (emailSent, emailDelivered, emailOpened, emailClicked, emailBounced, emailComplained) accept a time range as the value ("7d", "30d", "90d", "180d", "all"), a specific campaign ("campaign:<campaign_id>"), or an email-type scope ("marketing:<timeRange>" for marketing-policy campaign, automation, and Send API traffic; "transactional:<timeRange>" for transactional-policy sends). Policy scopes use send-time policy snapshots; ambiguous older automation and Send API events without a snapshot are not assigned to either scope. Combine multiple engagement filters with --match all to build things like "bounced campaign A but not campaign B".'],examples:["sequenzy segments list --company comp_123",'sequenzy segments create --name "Bought Pro" --stripe-product prod_pro',`sequenzy segments create --name "VIP or Churn Risk" --match any --filter-json '[{"field":"tag","operator":"contains","value":"vip"},{"field":"emailOpened","operator":"is_not","value":"30d"}]'`,`sequenzy segments create --name "Bounced A not B" --filter-json '[{"field":"emailBounced","operator":"is","value":"campaign:cmp_abc"},{"field":"emailBounced","operator":"is_not","value":"campaign:cmp_xyz"}]'`,`sequenzy segments create --name "No marketing email this week" --filter-json '[{"field":"emailSent","operator":"is_not","value":"marketing:7d"}]'`]});var iYe=Ap.command("list").description("List all segments").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>sf("list",e));k(iYe,{examples:["sequenzy segments list --company comp_123"]});var oYe=Ap.command("create").description("Create a segment").requiredOption("-n, --name <name>","Segment name").option("-c, --company <id>","Company ID override for personal API keys").option("--match <mode>","How filters combine: all or any","all").option("--stripe-product <id>","Stripe product ID to segment on").option("--commerce-product <id>","Commerce product to segment on, as provider:productId (e.g. shopify:42); a bare ID matches any provider").option("--commerce-collection <key>","Commerce collection to segment on, as a collection ID or handle (e.g. skincare); optionally prefixed with a provider").option("--purchase-operator <operator>","Purchase operator (bought, didnt-buy, at-least, less-than)","bought").option("--payments <number>","Payment threshold for at-least/less-than").option("--orders <number>","Order threshold for at-least/less-than with --commerce-product or --commerce-collection").option("--engagement <field>","Email engagement field: emailSent, emailDelivered, emailOpened, emailClicked, emailBounced, or emailComplained").option("--engagement-operator <operator>","Engagement operator: is, is_not, is_temporary_bounce, is_permanent_bounce, at_least, or less_than_count","is").option("--engagement-scope <scope>","Engagement scope: any, marketing, transactional, or campaign","any").option("--engagement-range <range>","Engagement time range: 3d, 7d, 30d, 90d, 180d, or all","all").option("--engagement-campaign <id>","Campaign ID when --engagement-scope is campaign").option("--engagement-count <number>","Event count for at_least/less_than_count engagement operators").option("--filter-json <json>","Raw JSON array of segment filters (IDs are optional)").option("--json","Print raw JSON").action((e)=>sf("create",e));k(oYe,{notes:["For array-of-object attributes, positive filters sharing a wildcard array prefix (such as history_events[].venue and history_events[].date) and connected only by AND must match one shared array element. Negative is_not, not_contains, and is_empty filters remain independent."],examples:['sequenzy segments create --name "Bought Pro" --stripe-product prod_pro','sequenzy segments create --name "3+ Pro Payments" --stripe-product prod_pro --purchase-operator at-least --payments 3','sequenzy segments create --name "Starter Kit Buyers" --commerce-product api:prod-starter-kit','sequenzy segments create --name "Repeat Kit Buyers" --commerce-product api:prod-starter-kit --purchase-operator at-least --orders 2','sequenzy segments create --name "Skincare Buyers" --commerce-collection skincare','sequenzy segments create --name "Repeat Skincare Buyers" --commerce-collection skincare --purchase-operator at-least --orders 2','sequenzy segments create --name "Marketing openers" --engagement emailOpened --engagement-scope marketing --engagement-range all','sequenzy segments create --name "Did not open campaign" --engagement emailOpened --engagement-operator is_not --engagement-scope campaign --engagement-campaign cmp_abc',`sequenzy segments create --name "VIP or Churn Risk" --match any --filter-json '[{"field":"tag","operator":"contains","value":"vip"},{"field":"emailOpened","operator":"is_not","value":"30d"}]'`,`sequenzy segments create --name "Bounced A not B" --filter-json '[{"field":"emailBounced","operator":"is","value":"campaign:cmp_abc"},{"field":"emailBounced","operator":"is_not","value":"campaign:cmp_xyz"}]'`]});var aYe=Ap.command("count <id>").description("Get subscriber count for a segment").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>sf("count",{id:e,...t}));k(aYe,{examples:["sequenzy segments count seg_123 --company comp_123"]});var sYe=Ap.command("update <id>").description("Update a segment name, filters, or join operator").option("-n, --name <name>","Segment name").option("--filters-json <json>","Raw JSON array of segment filters, or an object with a root group").option("--filters-file <file>","Path to a JSON file with segment filters or a root group").option("--join-operator <operator>","How filters combine: and or or").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>sf("update",{id:e,...t}));k(sYe,{notes:["Provide at least one of --name, --filters-json, --filters-file, or --join-operator.","Filters replace the existing filter set; missing filter IDs are filled in by the CLI.","For array-of-object attributes, positive filters sharing a wildcard array prefix (such as history_events[].venue and history_events[].date) and connected only by AND must match one shared array element. Negative is_not, not_contains, and is_empty filters remain independent."],examples:['sequenzy segments update seg_123 --name "Churn Risk"',`sequenzy segments update seg_123 --filters-json '[{"field":"tag","operator":"contains","value":"vip"}]'`,"sequenzy segments update seg_123 --join-operator or"]});var lYe=Ap.command("delete <id>").description("Delete a segment").option("-y, --yes","Skip the confirmation prompt").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>sf("delete",{id:e,...t}));k(lYe,{examples:["sequenzy segments delete seg_123 --yes"]});var Mu=Tt.command("audience-syncs").description("Sync segments to Meta custom audiences").action(()=>Mu.help());k(Mu,{notes:["Requires the Meta Ads integration to be connected in the dashboard (Settings -> Integrations).",'Use --template to start from a ready-made segment ("zero-ltv", "no-purchase-1y", "recent-buyers", "high-spenders-ecom", "non-buyers", "engaged"); the segment is created automatically on first use.',"Audiences are add-only: subscribers who leave the segment stay in the Meta audience."],examples:["sequenzy audience-syncs list",'sequenzy audience-syncs create --template recent-buyers --ad-account act_123 --name "Sequenzy - Recent buyers"']});var cYe=Mu.command("list").description("List audience syncs with schedule and status").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>Wd("list",e));k(cYe,{examples:["sequenzy audience-syncs list --company comp_123"]});var uYe=Mu.command("ad-accounts").description("List the connected Meta ad accounts").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>Wd("ad-accounts",e));k(uYe,{examples:["sequenzy audience-syncs ad-accounts"]});var dYe=Mu.command("create").description("Create an audience sync (segment -> Meta custom audience)").option("--segment <id>","Existing segment ID to sync").option("--template <id>",'Predefined segment template (for example "recent-buyers", "zero-ltv", "no-purchase-1y")').requiredOption("--ad-account <id>","Meta ad account ID (see `sequenzy audience-syncs ad-accounts`)").requiredOption("-n, --name <name>","Audience name in Meta Ads Manager").option("--frequency <frequency>","Sync frequency: hourly, daily, or weekly","daily").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>Wd("create",e));k(dYe,{examples:['sequenzy audience-syncs create --template recent-buyers --ad-account act_123 --name "Sequenzy - Recent buyers"','sequenzy audience-syncs create --segment seg_123 --ad-account act_123 --name "Sequenzy - VIPs" --frequency hourly']});var pYe=Mu.command("update <id>").description("Change an audience sync's frequency or pause/resume it").option("--frequency <frequency>","Sync frequency: hourly, daily, or weekly").option("--active <bool>","true to resume, false to pause").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Wd("update",{id:e,...t}));k(pYe,{examples:["sequenzy audience-syncs update sync_123 --frequency weekly","sequenzy audience-syncs update sync_123 --active false"]});var mYe=Mu.command("delete <id>").description("Remove an audience sync (the Meta audience itself is kept)").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Wd("delete",{id:e,...t}));k(mYe,{examples:["sequenzy audience-syncs delete sync_123"]});var fYe=Mu.command("sync <id>").description("Trigger an immediate sync run").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Wd("sync",{id:e,...t}));k(fYe,{examples:["sequenzy audience-syncs sync sync_123"]});var Uu=Tt.command("products").description("Manage products and digital delivery files").action(()=>Uu.help());k(Uu,{notes:["Products sync from Stripe, Shopify, and WooCommerce integrations.","Attach a deliverable file to a Stripe product, then reference it in purchase sequence emails with {{event.download.url}} and {{event.download.name}}."],examples:["sequenzy products list --provider stripe","sequenzy products sync",'sequenzy products upsert my-ebook --title "The Ebook" --price-cents 1900 --file ./ebook.pdf',"sequenzy products attach-file prod_abc --file ./guide.pdf","sequenzy products attach-file prod_abc --url https://example.com/guide.pdf --name guide.pdf","sequenzy products detach-file prod_abc","sequenzy products delete my-ebook"]});var gYe=Uu.command("list").description("List synced products including attached delivery files").option("-c, --company <id>","Company ID override for personal API keys").option("--provider <provider>","Filter by provider (stripe, shopify, woocommerce, manual)").option("--search <query>","Filter products by title").option("--limit <number>","Products per page (1-100, default 50)").option("--offset <number>","Number of products to skip").option("--all","Fetch every page instead of just the first").option("--json","Print raw JSON").action((e)=>ep("list",e));k(gYe,{notes:["Returns one page by default. The header shows 'N of TOTAL' when the catalog is larger than the page.","Use --all to page through catalogs larger than the 100-per-request cap."],examples:["sequenzy products list --provider stripe","sequenzy products list --all","sequenzy products list --limit 100 --offset 100"]});var xYe=Uu.command("sync").description("Queue a Stripe product catalog sync").option("-c, --company <id>","Company ID override for personal API keys").option("--integration <id>","Stripe integration ID to sync").option("--json","Print raw JSON").action((e)=>ep("sync",e));k(xYe,{examples:["sequenzy products sync --company comp_123","sequenzy products sync --integration int_123"]});var AYe=Uu.command("upsert [productId]").description("Create or update products in the catalog (Commerce API, keyed by your productId)").option("--title <title>","Product title (required for single upserts)").option("--description <text>","Product description").option("--price-cents <cents>","Price in the smallest currency unit").option("--currency <code>","ISO currency code, e.g. USD").option("--image-url <url>","Product image URL").option("--product-url <url>","Product page URL").option("--provider-created-at <iso>","Product creation time from the source catalog (ISO 8601)").option("--clear-provider-created-at","Clear the stored source-catalog creation time").option("--in-stock","Mark the product as in stock").option("--out-of-stock","Mark the product as out of stock").option("--file <path>","Deliverable file to upload and attach in one step").option("--url <link>","External deliverable http(s) link to attach in one step").option("--name <fileName>","Display name for the attached deliverable").option("--products-json <json>","Inline JSON array of products to upsert").option("--products-file <file>","Path to a JSON file with products to upsert").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>ep("upsert",t,e));k(AYe,{notes:["Products are keyed by your own productId and stored under the api provider.","Combine --file or --url with a single-product upsert to attach the deliverable file in the same command.","Use --products-json/--products-file for bulk upserts of up to 100 products."],examples:['sequenzy products upsert my-ebook --title "The Ebook" --price-cents 1900 --currency USD --file ./ebook.pdf','sequenzy products upsert my-course --title "The Course" --url https://files.example.com/course.zip',"sequenzy products upsert --products-file ./products.json"]});var EYe=Uu.command("delete <productId>").description("Delete a product previously pushed via the Commerce API").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>ep("delete",t,e));k(EYe,{examples:["sequenzy products delete my-ebook"]});var hYe=Uu.command("attach-file <id>").description("Attach the deliverable file buyers receive after purchase").option("--file <path>","Local file to upload (PDF, ePub, ZIP, media)").option("--url <link>","External http(s) link instead of an upload").option("--name <fileName>","Display name for the file (e.g. guide.pdf)").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>ep("attach-file",t,e));k(hYe,{examples:["sequenzy products attach-file prod_abc --file ./guide.pdf","sequenzy products attach-file prod_abc --url https://example.com/template.zip --name template.zip"]});var yYe=Uu.command("detach-file <id>").description("Remove the attached delivery file from a product").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>ep("detach-file",t,e));k(yYe,{examples:["sequenzy products detach-file prod_abc"]});var pA=Tt.command("team").description("Manage team members and invitations").action(()=>pA.help());k(pA,{notes:["Inviting and cancelling invitations requires owner or admin access.","Billing access can only be granted by the company owner."],examples:["sequenzy team list","sequenzy team invite teammate@example.com --role admin","sequenzy team cancel-invitation inv_123"]});var bYe=pA.command("list").description("List team members and pending invitations").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>eS("list",e));k(bYe,{examples:["sequenzy team list --company comp_123"]});var CYe=pA.command("invite <email>").description("Invite a team member or add an existing user").requiredOption("--role <role>","Member role: admin, viewer, or restricted").option("--billing-access","Allow the member to manage billing (owner only)").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>eS("invite",{email:e,...t}));k(CYe,{notes:["Existing Sequenzy users are added to the team immediately; everyone else receives an email invitation.","Invitations expire automatically and can be re-sent by inviting the same email again after cancelling."],examples:["sequenzy team invite teammate@example.com --role admin","sequenzy team invite editor@example.com --role restricted","sequenzy team invite finance@example.com --role viewer --billing-access"]});var BYe=pA.command("cancel-invitation <invitationId>").description("Cancel a pending team invitation").option("-y, --yes","Skip the confirmation prompt").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>eS("cancel-invitation",{invitationId:e,...t}));k(BYe,{notes:["Run `sequenzy team list` first to find invitation IDs."],examples:["sequenzy team cancel-invitation inv_123 --yes"]});var $u=Tt.command("inbox").description("Manage subscriber reply conversations").action(()=>$u.help());k($u,{notes:["The inbox collects subscriber replies to campaigns, sequences, and transactional email.","Use --note on replies to add an internal note instead of emailing the subscriber."],examples:["sequenzy inbox list --status open --unread","sequenzy inbox get conv_123","sequenzy inbox reply conv_123 --text 'Thanks for reaching out!'","sequenzy inbox close conv_123"]});var SYe=$u.command("list").description("List conversations").option("-s, --status <status>","Filter by status: open, closed, or all").option("--search <query>","Search by subscriber email, name, or subject").option("--unread","Only conversations with unread messages").option("-p, --page <number>","Page number (default 1)").option("-l, --limit <number>","Results per page (1-100, default 20)").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>Xd("list",e));k(SYe,{examples:["sequenzy inbox list","sequenzy inbox list --status open --unread",'sequenzy inbox list --search "refund" --limit 50']});var vYe=$u.command("get <conversationId>").description("Get a conversation with its full message history").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Xd("get",{conversationId:e,...t}));k(vYe,{examples:["sequenzy inbox get conv_123","sequenzy inbox get conv_123 --json"]});var _Ye=$u.command("reply <conversationId>").description("Reply to a conversation or add an internal note").option("-t, --text <text>","Plain text message body").option("--html-file <file>","Read an HTML message body from file").option("-s, --subject <subject>","Override the reply subject").option("--note","Add an internal note instead of emailing the subscriber").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Xd("reply",{conversationId:e,...t}));k(_Ye,{notes:["Provide a body with --text and/or --html-file.","Outbound replies are emailed to the subscriber and reopen closed conversations; notes are internal only."],examples:["sequenzy inbox reply conv_123 --text 'Thanks for reaching out!'","sequenzy inbox reply conv_123 --html-file ./reply.html","sequenzy inbox reply conv_123 --text 'Customer asked for a refund' --note"]});var IYe=$u.command("close <conversationId>").description("Close a conversation").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Xd("close",{conversationId:e,...t}));k(IYe,{examples:["sequenzy inbox close conv_123"]});var DYe=$u.command("reopen <conversationId>").description("Reopen a closed conversation").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Xd("reopen",{conversationId:e,...t}));k(DYe,{examples:["sequenzy inbox reopen conv_123"]});var wYe=$u.command("mark-read <conversationId>").description("Mark all messages in a conversation as read").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Xd("mark-read",{conversationId:e,...t}));k(wYe,{examples:["sequenzy inbox mark-read conv_123"]});var Sc=Tt.command("webhooks").description("Manage outbound webhook endpoints").action(()=>Sc.help());k(Sc,{notes:["Webhook payloads are signed; the signing secret is only shown once at creation time.","Valid events cover email.*, sms.*, campaign.*, subscriber.*, and sequence.* types; omit --event to use the default set. campaign.sent is explicit-only."],examples:["sequenzy webhooks list","sequenzy webhooks create --name CI --url https://example.com/hook --event email.bounced","sequenzy webhooks deliveries wh_123 --limit 50","sequenzy webhooks replay wh_123 del_456"]});var TYe=Sc.command("list").description("List outbound webhook endpoints").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>Ou("list",e));k(TYe,{examples:["sequenzy webhooks list --company comp_123"]});var kYe=Sc.command("create").description("Create an outbound webhook endpoint").requiredOption("-n, --name <name>","Webhook name").requiredOption("-u, --url <url>","HTTPS endpoint URL").option("-e, --event <events...>","Event types to deliver, e.g. email.bounced campaign.sent subscriber.list_subscribed subscriber.list_unsubscribed").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>Ou("create",e));k(kYe,{notes:["The signing secret is printed once on creation and cannot be retrieved later - store it immediately.","Omit --event to subscribe to the default event set."],examples:["sequenzy webhooks create --name CI --url https://example.com/hook --event email.bounced","sequenzy webhooks create --name 'All events' --url https://example.com/hook"]});var RYe=Sc.command("update <id>").description("Update an outbound webhook endpoint").option("-n, --name <name>","Webhook name").option("-u, --url <url>","HTTPS endpoint URL").option("-e, --event <events...>","Replacement event types").option("--enable","Enable the webhook").option("--disable","Disable the webhook").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Ou("update",{id:e,...t}));k(RYe,{notes:["Provide at least one of --name, --url, --event, --enable, or --disable.","Changing the URL or re-enabling resets the failure circuit breaker."],examples:["sequenzy webhooks update wh_123 --url https://example.com/new-hook","sequenzy webhooks update wh_123 --event email.bounced email.complained","sequenzy webhooks update wh_123 --disable"]});var FYe=Sc.command("delete <id>").description("Delete an outbound webhook endpoint").option("-y, --yes","Skip the confirmation prompt").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Ou("delete",{id:e,...t}));k(FYe,{examples:["sequenzy webhooks delete wh_123 --yes"]});var NYe=Sc.command("test <id>").description("Send a test event to a webhook endpoint").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Ou("test",{id:e,...t}));k(NYe,{notes:["The webhook must be enabled to receive a test event."],examples:["sequenzy webhooks test wh_123"]});var PYe=Sc.command("deliveries <id>").description("List recent deliveries for a webhook endpoint").option("-l, --limit <number>","Maximum deliveries to return (1-100)").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Ou("deliveries",{id:e,...t}));k(PYe,{examples:["sequenzy webhooks deliveries wh_123","sequenzy webhooks deliveries wh_123 --limit 50"]});var OYe=Sc.command("replay <id> <deliveryId>").description("Replay a webhook delivery").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t,n)=>Ou("replay",{id:e,deliveryId:t,...n}));k(OYe,{notes:["Run `sequenzy webhooks deliveries <id>` first to find delivery IDs."],examples:["sequenzy webhooks replay wh_123 del_456"]});var LYe=Tt.command("account").description("Verify the active API key, permissions, and account context").option("--json","Print JSON").action(OX);k(LYe,{notes:["Makes a live API request with the active credential. Compare its key name and prefix with Settings after replacing a key."],examples:["sequenzy account","sequenzy account --json"]});var n3=Tt.command("notifications").description("Manage which account notifications Sequenzy emails you");n3.command("get").description("Show your notification settings for the current company").option("--json","Print JSON").action(Qre);n3.command("set").description("Change your notification settings for the current company").option("--new-subscriber <mode>","Notify when a contact joins: off, instant, or daily").option("--form-submitted <mode>","Notify on form, popup, or landing-page submissions: off or instant (50/day cap)").option("--campaign-completed <mode>","Notify when a campaign finishes sending: off or instant").option("--weekly-report <mode>","Monday one-screen summary of last week's sends, engagement, revenue, and slipping sequences: off or weekly").option("--json","Print JSON").action(zre);k(n3,{notes:["These are your own settings, not the workspace's. Teammates choose their own and this never changes theirs.","New-subscriber notifications fall back to a daily summary automatically once a day passes the instant cap, and imports never trigger them.","'daily' is not valid for --form-submitted or --campaign-completed: each submission and each campaign finish is its own event.","The weekly report is on by default and only goes out for weeks in which the workspace sent more than 10 emails; 'weekly' is its only delivery mode."],examples:["sequenzy notifications get","sequenzy notifications set --new-subscriber daily","sequenzy notifications set --form-submitted instant","sequenzy notifications set --weekly-report off","sequenzy notifications set --new-subscriber off --form-submitted off --campaign-completed off --weekly-report off"]});var Ole=(e,t=[])=>[...t,e],MYe=Tt.command("feedback <message>").description("Send product feedback about Sequenzy to the Sequenzy team").option("--category <category>","Category: missing_capability, bug, docs, ux, praise, other (default: other)").option("--context <context>","What you were trying to accomplish when you hit the gap").option("--intent <text>","Bug reports: the user's request, verbatim or closely paraphrased").option("--expected <text>","Bug reports: what you expected to happen").option("--actual <text>","Bug reports: what actually happened instead").option("--tool-call <call>",'Bug reports: a command/tool call that led to the problem, as "<tool> | <args summary> | <error>" (args and error optional). Repeatable, in order.',Ole).option("--resource-id <id>","Bug reports: ID of an affected resource (campaign, sequence, subscriber, ...). Repeatable.",Ole).option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>ure(e,t));k(MYe,{notes:["Agents: send feedback whenever the user wanted something the CLI, API, or MCP tools do not support. The Sequenzy team reads every submission.","When a command misbehaved or produced a wrong result, include --intent, --expected, --actual, --tool-call, and --resource-id so the team can reproduce it. Summarize arguments - do not paste raw subscriber data or secrets."],examples:['sequenzy feedback "No command to bulk-delete campaigns by label" --category missing_capability','sequenzy feedback "Segment count and list output disagree for seg_123" --category bug --context "Auditing a re-engagement segment"','sequenzy feedback "Campaign update dropped the scheduled time" --category bug --intent "Move the promo send to 9am Tuesday" --tool-call "campaigns update | --schedule 2026-08-11T09:00" --expected "Campaign rescheduled" --actual "Campaign reverted to draft" --resource-id cmp_123']});var qu=Tt.command("api-keys").description("Manage company API keys").action(()=>qu.help());k(qu,{notes:["The plain API key is only returned on creation. Save it immediately.","Listing and revocation return metadata only; secrets and stored hashes are never returned.","Every subcommand except 'handoff' needs the api_keys:manage scope. Use 'handoff' when the active key does not have it."],examples:["sequenzy api-keys list --company comp_123","sequenzy api-keys create",'sequenzy api-keys create --name "CI deploy key" --company comp_123',"sequenzy api-keys update key_123 --preset agent_safe","sequenzy api-keys revoke key_123 --company comp_123 --yes","sequenzy api-keys handoff --preset agent_safe --replaces current"]});var UYe=qu.command("create").description("Create a company API key").option("-n, --name <name>","Human-readable API key name").option("-c, --company <id>","Company ID override for personal API keys").option("--preset <preset>","Permission preset: full_access, read_only, agent_safe, ai_drafting, data_ingest_safe, data_ingest_automations, transactional_sender, marketing_sender (default: full_access)").option("--scopes <scopes>","Comma-separated explicit permission scopes (overrides --preset)").option("--json","Print raw JSON").action((e)=>Vd("create",e));k(UYe,{notes:["Keys default to full access. Pass --preset or --scopes to restrict what the key can do."],examples:["sequenzy api-keys create",'sequenzy api-keys create --name "CI deploy key" --company comp_123','sequenzy api-keys create --preset transactional_sender --name "Order emails"','sequenzy api-keys create --scopes "subscribers:read,subscribers:write,events:write"']});var $Ye=qu.command("handoff").description("Get an owner-confirmed dashboard link for creating or rotating a key").option("-n, --name <name>","Suggested name for the new API key").option("-c, --company <id>","Company ID override for personal API keys").option("--preset <preset>","Suggested permission preset: full_access, read_only, agent_safe, ai_drafting, data_ingest_safe, data_ingest_automations, transactional_sender, marketing_sender").option("--scopes <scopes>","Comma-separated explicit permission scopes (overrides --preset)").option("--replaces <api-key-id>","Key the new one replaces. Pass 'current' for the key you are authenticated with").option("--json","Print raw JSON").action((e)=>Vd("handoff",e));k($Ye,{notes:["Use this when key management fails because the active key lacks api_keys:manage. That scope fails closed on purpose and cannot be granted through the API by the key missing it.","This creates nothing and never prints a key. The link opens the dashboard create-key form prefilled; the owner reviews it, clicks Create, and copies the key from the browser.","With --replaces, the dashboard offers to revoke the predecessor once the replacement exists, which finishes a rotation in one visit."],examples:['sequenzy api-keys handoff --name "Production sync (rotated)" --preset agent_safe --replaces current','sequenzy api-keys handoff --scopes "subscribers:read,events:write" --company comp_123']});var qYe=qu.command("list").description("List company API keys without secret values").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>Vd("list",e));k(qYe,{notes:["Use the returned ID, name, prefix, and current-key marker to identify a key before revoking it."],examples:["sequenzy api-keys list","sequenzy api-keys list --company comp_123 --json"]});var QYe=qu.command("update").description("Rename a company API key or change its permissions in place").argument("<api-key-id>","Exact API key ID returned by api-keys list").option("-n, --name <name>","New human-readable API key name").option("-c, --company <id>","Company ID override for personal API keys").option("--preset <preset>","Replacement permission preset: full_access, read_only, agent_safe, ai_drafting, data_ingest_safe, data_ingest_automations, transactional_sender, marketing_sender").option("--scopes <scopes>","Comma-separated replacement permission scopes (overrides --preset)").option("--json","Print raw JSON").action((e,t)=>Vd("update",{apiKeyId:e,...t}));k(QYe,{notes:["The key value does not change, so clients holding it keep working with the new permissions.","--preset and --scopes replace the whole selection rather than merging into it. Run 'sequenzy api-keys list --json' first to see the current scopes."],examples:["sequenzy api-keys update key_123 --preset agent_safe",'sequenzy api-keys update key_123 --scopes "subscribers:read,subscribers:tag,tags:read"','sequenzy api-keys update key_123 --name "Agent key"']});var zYe=qu.command("revoke").description("Permanently revoke a company API key").argument("<api-key-id>","Exact API key ID returned by api-keys list").option("-y, --yes","Skip the confirmation prompt").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Vd("revoke",{apiKeyId:e,...t}));k(zYe,{notes:["Revocation cannot be undone. Run 'sequenzy api-keys list' first and verify the exact ID and prefix."],examples:["sequenzy api-keys revoke key_123 --company comp_123 --yes"]});var HYe=qu.command("delete").description("Alias for api-keys revoke").argument("<api-key-id>","Exact API key ID returned by api-keys list").option("-y, --yes","Skip the confirmation prompt").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Vd("delete",{apiKeyId:e,...t}));k(HYe,{notes:["This is a compatibility alias for 'sequenzy api-keys revoke'."],examples:["sequenzy api-keys delete key_123 --company comp_123 --yes"]});var Ep=Tt.command("websites").description("Manage sending domains and integration guides").action(()=>Ep.help());k(Ep,{notes:["Use 'guide' for code examples, 'check' to inspect current DNS verification details, and 'verify' to run a fresh check."],examples:["sequenzy websites list --company comp_123","sequenzy websites add example.com --company comp_123","sequenzy websites guide --framework nextjs --use-case transactional"]});var jYe=Ep.command("list").description("List sending domains for a company").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>Ff("list",e));k(jYe,{examples:["sequenzy websites list --company comp_123"]});var GYe=Ep.command("add <domain>").description("Add a sending domain").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Ff("add",{domain:e,...t}));k(GYe,{notes:["Publish every DNS record returned by the command, including DMARC when present; record shapes vary between unified and legacy domains."],examples:["sequenzy websites add example.com --company comp_123"]});var VYe=Ep.command("check <domain>").description("Inspect sending domain verification details").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Ff("check",{domain:e,...t}));k(VYe,{examples:["sequenzy websites check example.com --company comp_123"]});var WYe=Ep.command("verify <domain>").description("Run a fresh DNS check for a sending domain").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Ff("verify",{domain:e,...t}));k(WYe,{notes:["'verified' is the DNS verdict only. Sending is reported separately as 'Sending' - a domain with correct DNS can still be activating."],examples:["sequenzy websites verify example.com --company comp_123"]});var KYe=Ep.command("guide").description("Print framework-specific integration code").option("--framework <name>","Framework name, e.g. nextjs, express, python").option("--use-case <name>","Use case, e.g. transactional, subscribe_form, event_tracking").option("--json","Print raw JSON").action((e)=>Ff("guide",e));k(KYe,{examples:["sequenzy websites guide","sequenzy websites guide --framework nextjs --use-case transactional","sequenzy websites guide --framework python --use-case event_tracking"]});var fo=Tt.command("integrations").description("Inspect and manage connected integrations").action(()=>fo.help());k(fo,{notes:["Credentials, access tokens, and webhook secrets are never returned.","`connect` covers API-key / webhook-secret providers (Polar, Paddle, Dodo, Whop, Creem, Chargebee, Clerk, PostHog, Segment, Affonso, Attio). OAuth and app-install providers (Stripe, Shopify, Supabase, GitHub, WooCommerce) connect in the dashboard, as does disconnecting - both handle provider-specific cleanup.","Use `catalog` to see what a provider does before connecting it, and `get` to see what a connected one is doing now."],examples:["sequenzy integrations list","sequenzy integrations catalog --provider stripe","sequenzy integrations connect clerk --webhook-secret whsec_...","sequenzy integrations get int_123","sequenzy integrations activity --status failed"]});var JYe=fo.command("connect <provider>").description("Connect an API-key / webhook-secret integration").option("-c, --company <id>","Company ID override for personal API keys").option("--api-key <key>","Provider API key (or set SEQUENZY_INTEGRATION_API_KEY)").option("--webhook-secret <secret>","Webhook signing secret (or set SEQUENZY_INTEGRATION_WEBHOOK_SECRET)").option("--account-id <id>","Provider account id: Paddle seller ID, Dodo business ID, Whop company ID, Creem store ID, or Chargebee site name").option("--attio-list <mapping...>","Attio only: map SEQUENZY_LIST_ID=ATTIO_LIST_ID_OR_SLUG (one or more)").option("--attio-clear-lists","Attio only: remove every saved Sequenzy-to-Attio list mapping").option("--attio-enable-company-domain","Attio only: create or match companies from work email domains").option("--attio-disable-company-domain","Attio only: do not create or match companies from work email domains").option("--event-allowlist <events...>","PostHog and Segment only: sync only these event names instead of everything").option("--history-region <region>","PostHog and Segment history import region: us or eu").option("--history-project-id <id>","PostHog history import project ID").option("--history-space-id <id>","Segment history import Unify space ID (spa_...)").option("--history-api-key <key>","History import credential: the PostHog personal API key (or SEQUENZY_POSTHOG_PERSONAL_API_KEY) or the Segment Profile API token (or SEQUENZY_SEGMENT_PROFILE_API_TOKEN)").option("--json","Print raw JSON").action((e,t)=>Ire(e,t));k(JYe,{notes:["Run `sequenzy integrations catalog --provider <provider>` first: its connectFields list what this provider needs.","Pass secrets via the environment variables instead of flags to keep them out of shell history.","The response includes the webhook URL to configure at the provider with the same secret, except Attio which is outbound-only.","Reconnecting an already-connected provider replaces its stored credentials.","OAuth and app-install providers (Stripe, Shopify, Supabase, GitHub, WooCommerce) cannot be connected here - use the dashboard."],examples:["sequenzy integrations connect clerk --webhook-secret whsec_...","sequenzy integrations connect paddle --api-key pdl_... --webhook-secret pdl_ntf_... --account-id 12345","sequenzy integrations connect polar --api-key polar_oat_... --webhook-secret whsec_...","sequenzy integrations connect posthog --webhook-secret phc_shared_secret --history-region us --history-project-id 12345 --history-api-key phx_...","sequenzy integrations connect segment --webhook-secret my_shared_secret","sequenzy integrations connect segment --webhook-secret my_shared_secret --history-region us --history-space-id spa_abc123 --history-api-key profile_token","sequenzy integrations connect affonso --api-key aff_... --webhook-secret whsec_...","sequenzy integrations connect attio --api-key attio_... --attio-list list_123=field-guide"]});var YYe=fo.command("list").description("List connected integrations and their sync health").option("-c, --company <id>","Company ID override for personal API keys").option("--all","Include disconnected/inactive integrations").option("--json","Print raw JSON").action((e)=>kre(e));k(YYe,{examples:["sequenzy integrations list --company comp_123","sequenzy integrations list --all"]});var ZYe=fo.command("catalog").description("Show what each integration provider syncs, emits, and supports").option("-c, --company <id>","Company ID override for personal API keys").option("--provider <provider>","Only show one provider, e.g. stripe").option("--category <category>","Filter by category: payments, ecommerce, auth, analytics, ads, affiliate, cms, crm, developer").option("--json","Print raw JSON").action((e)=>Dre(e));k(ZYe,{notes:["Works whether or not the provider is connected, so you can compare providers before picking one.","Events listed here are the ones a sequence can trigger on. A provider that emits nothing cannot drive automations."],examples:["sequenzy integrations catalog","sequenzy integrations catalog --provider stripe","sequenzy integrations catalog --category ecommerce --json"]});var XYe=fo.command("get <id>").description("Show one integration: what it does, its events, and its wiring").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>wre(e,t));k(XYe,{notes:["Lists every event the provider emits, the tags each one applies through your sync rules, and which sequences trigger on it.","Events with no sequence are reported so you can see what the integration is feeding you that nothing acts on.","Get the id from `sequenzy integrations list`."],examples:["sequenzy integrations get int_123","sequenzy integrations get int_123 --json"]});var eZe=fo.command("activity").description("Show recent integration webhook and sync activity").option("-c, --company <id>","Company ID override for personal API keys").option("--integration <id>","Only show one integration's activity").option("--provider <provider>","Only show one provider's activity").option("--status <status>","Filter by status: received, queued, processed, skipped, failed").option("--limit <n>","Rows to return (1-100, default 25)").option("--json","Print raw JSON").action((e)=>vre(e));k(eZe,{notes:["Activity is retained for 24 hours.","Use `--status failed` when an integration reports connected but contacts are not appearing."],examples:["sequenzy integrations activity","sequenzy integrations activity --status failed --limit 50","sequenzy integrations activity --integration int_123"]});var tZe=fo.command("sync <id>").description("Queue a manual re-sync for a connected integration").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>xre(e,t));k(tZe,{notes:["Supported for Stripe, Polar, Paddle, Dodo, Creem, Chargebee, Whop, Supabase, PostHog, and Segment. Other providers re-sync from the dashboard.","For Supabase this backfills users from the table already configured for the integration; it cannot target a different table. Run it once after connecting, because the database trigger only sends rows that change after it is installed.","For PostHog and Segment this re-runs the event-history import with the stored credentials and is the supported retry for one that failed. It restarts from the beginning; already-imported events dedupe.","Returns immediately; poll `sequenzy integrations get <id>` to watch syncStatus and lastSyncAt.","Fails with a conflict if a sync is already running."],examples:["sequenzy integrations sync int_123"]});var nZe=fo.command("enable-sync <id>").description("Turn sync back on for an integration").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>f9(e,!0,t));k(nZe,{examples:["sequenzy integrations enable-sync int_123"]});var rZe=fo.command("disable-sync <id>").description("Pause bulk imports without disconnecting the integration").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>f9(e,!1,t));k(rZe,{notes:["Stops bulk imports and backfills but keeps the connection, credentials, and live webhook delivery active.","This does NOT stop the integration creating contacts. The provider's live webhook keeps writing every new signup or customer. Use `set-lists` to control where they land, or disconnect the integration from the dashboard to stop it entirely."],examples:["sequenzy integrations disable-sync int_123"]});var iZe=fo.command("set-lists <id>").description("Choose which lists this integration's new contacts join").option("-c, --company <id>","Company ID override for personal API keys").option("--list <id>","Target this list (repeatable)",(e,t=[])=>[...t,e]).option("--none","Target no list at all").option("--default","Fall back to the workspace default lists").option("--json","Print raw JSON").action((e,t)=>Ere(e,t));k(iZe,{notes:["Takes effect on future provider writes. Nothing is applied retroactively and nobody is ever removed from a list. Wix/Webflow submissions, Shopify customer updates, and Supabase resubscriptions can add existing contacts to the new targets; Stripe applies targeting only when its webhook creates a subscriber.","This changes list membership only. Contacts are still created, their attributes still sync, sync-rule tags still apply, and sequences triggered by contact_added on any list still enroll them - pair it with `sequences pause-enrollments` if you need those stopped too.","`--none` and `--default` are different: --none means new contacts join no list, --default means they follow the workspace default lists setting.","Supported for Supabase, Stripe, Shopify, Wix, and Webflow. `integrations get <id>` reports the current targeting under `ingestion`, with list names."],examples:["sequenzy integrations set-lists int_123 --list list_abc --list list_def","sequenzy integrations set-lists int_123 --none","sequenzy integrations set-lists int_123 --default"]});var oZe=fo.command("pixel <id>").description("Show the Shopify storefront tracking pixel state").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>yre(e,t));k(oZe,{notes:["Shopify only. Read live from the store, because a merchant can remove the pixel without notifying Sequenzy.","Check this before trusting product views, cart activity, or browse abandonment: without the pixel those events never arrive and any sequence triggered by them silently never fires."],examples:["sequenzy integrations pixel int_123"]});var aZe=fo.command("enable-pixel <id>").description("Install or repoint the Shopify storefront tracking pixel").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>bre(e,t));k(aZe,{notes:["Idempotent: an already-live pixel is reported with `changed: false`.","Events start arriving on the next storefront visit; nothing is backfilled for the period the pixel was off.","Fails with guidance if the store granted an older permission set - reconnect Shopify from the dashboard, then retry."],examples:["sequenzy integrations enable-pixel int_123"]});var sZe=fo.command("attio <id>").description("Show Attio list mappings and available people-lists").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Bre(e,t));k(sZe,{notes:["Attio only. Reads live people-lists from Attio using the stored access token — you do not need the secret again.","mappedListCount 0 means list joins are not synced. Map them with `set-attio-lists` rather than reconnecting."],examples:["sequenzy integrations attio int_123"]});var lZe=fo.command("set-attio-lists <id>").description("Map Sequenzy lists to Attio lists without reconnecting").option("-c, --company <id>","Company ID override for personal API keys").option("--map <mapping...>","Complete SEQUENZY_LIST_ID=ATTIO_LIST_ID_OR_SLUG map (one or more)").option("--clear-maps","Remove every saved Sequenzy-to-Attio list mapping").option("--enable-company-domain","Create or match companies from work email domains").option("--disable-company-domain","Do not create or match companies from work email domains").option("--json","Print raw JSON").action((e,t)=>Sre(e,t));k(lZe,{notes:["Uses the stored Attio access token. Do not reconnect just to change mappings.","--map replaces the saved map entirely. Run `sequenzy integrations attio <id>` first to see Sequenzy list ids and live Attio list ids/slugs.","Unmapped lists are not synced. Unmapping does not remove anyone from Attio (add-only)."],examples:["sequenzy integrations set-attio-lists int_123 --map list_abc=field-guide list_def=benchmark","sequenzy integrations set-attio-lists int_123 --clear-maps","sequenzy integrations set-attio-lists int_123 --disable-company-domain"]});var cZe=fo.command("guide").description("Print integration code examples for your stack").option("-c, --company <id>","Company ID override for personal API keys").option("--framework <framework>","Framework or language, e.g. nextjs").option("--use-case <use-case>","transactional, subscribe_form, event_tracking, or ecommerce").option("--json","Print raw JSON").action((e)=>gre(e));k(cZe,{notes:["Same examples the MCP `get_integration_guide` tool returns.","For Stripe, Polar, Paddle, Dodo, Creem, Shopify, or WooCommerce, connect the native integration instead of writing tracking code by hand."],examples:["sequenzy integrations guide --use-case transactional --framework nextjs","sequenzy integrations guide --use-case ecommerce"]});var mA=Tt.command("sender-profiles").description("Inspect, rename, and delete sending identity profiles").action(()=>mA.help());k(mA,{notes:["Shows which profiles are account defaults and whether each sender address sits on a verified sending domain.","`update` renames one profile in place and never changes the account defaults. To change which profile is the default, use `sequenzy companies update <id> --sender-profile-id <id>`."],examples:["sequenzy sender-profiles list","sequenzy sender-profiles update sender_abc123 --name 'SnapCount'","sequenzy sender-profiles delete sender_abc123 --yes"]});var uZe=mA.command("list").description("List sender and reply-to profiles").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>Bse(e));k(uZe,{examples:["sequenzy sender-profiles list --company comp_123"]});var dZe=mA.command("update <id>").description("Rename a sender or reply-to profile without changing defaults").requiredOption("--name <name>","New display name for the profile").option("--reply","Treat <id> as a reply-to profile instead of a sender").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Sse(e,t));k(dZe,{notes:["Renames the profile only. The account default From/Reply-To selection is left exactly as it was.","Get profile IDs from `sequenzy sender-profiles list`.","A company cannot have two sender identities with the same name on one address, so a colliding rename is rejected with the ID of the profile already using that name.","Requires the companies:manage scope."],examples:["sequenzy sender-profiles update sender_abc123 --name 'SnapCount'","sequenzy sender-profiles update reply_abc123 --name 'SnapCount' --reply","sequenzy sender-profiles update sender_abc123 --name 'SnapCount' --company comp_123 --json"]});var pZe=mA.command("delete <id>").description("Permanently delete a sender (From) profile").option("--yes","Skip the confirmation prompt").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>vse(e,t));k(pZe,{notes:["This cannot be undone. Reply-to profiles are not supported by this command.","Deletion is blocked for the last sender and for profiles used by live campaigns, active sequences, or transactional emails.","Eligible draft campaigns and the account default move to the best remaining sender when needed; the result reports that fallback profile ID.","Requires the companies:manage scope."],examples:["sequenzy sender-profiles delete sender_abc123","sequenzy sender-profiles delete sender_abc123 --yes --json"]});var dS=Tt.command("sending").description("Check company-level sending status and restore paused sending").action(()=>dS.help());k(dS,{notes:["Company-level sending can be paused automatically when the permanent-bounce, temporary-bounce, or complaint rate crosses its threshold. While paused, every send is blocked - campaigns, sequence steps, transactional email, and test sends.","Sender-health enforcement uses all-time totals counted from a reset watermark, NOT a rolling window. A paused rate does not expire on its own, so waiting does not restore sending.","`status` needs account:read. `resume` needs companies:manage plus owner or admin access."],examples:["sequenzy sending status","sequenzy sending resume --confirm-list-sanitized"]});var mZe=dS.command("status").description("Show sending status, sender-health rates, and how to restore sending").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>Tse(e));k(mZe,{notes:["Run this first whenever a send or test send fails for a reason that is not a validation error.","Shows the exact pause reason, the measured rates against the thresholds that apply at your volume, the automated sender-health review state, whether one-click resume is available, and ordered remediation steps.","`metricsWindow` reports the enforcement watermarks. `expiresAt` is always null because there is no rolling window to wait out."],examples:["sequenzy sending status","sequenzy sending status --json","sequenzy sending status --company comp_123"]});var fZe=dS.command("resume").description("Restore paused sending after fixing the cause of the bounces").option("--confirm-list-sanitized","Required. Confirms you fixed the source of the invalid addresses and left every permanent bounce suppressed").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>kse(e));k(fZe,{notes:["This is the supported remediation path, not a bypass. It never removes suppressions.","Only a permanent-bounce pause can be cleared this way, and only after the automated sender-health review has cleared it. Any other state needs a support review, and the error names which gate stopped you.","Check `selfResume.canSelfResume` with `sequenzy sending status` before calling this.","On success the bounce watermark resets, so the paused rate is recalculated from sends made after the resume, and the service attempts to requeue paused campaigns plus due sequence steps. If that handoff is only partial, the success message gives recovery guidance.","The confirmation is recorded on the account audit trail, so only pass --confirm-list-sanitized once the fix is actually shipped."],examples:["sequenzy sending resume --confirm-list-sanitized","sequenzy sending resume --confirm-list-sanitized --json"]});var pS=Tt.command("tracking").description("Inspect and update email tracking configuration").action(()=>pS.help());k(pS,{notes:["Covers open/click/unsubscribe tracking, attribution window, double opt-in for new contacts, auto UTM, the dedicated click-tracking domain, and reply tracking."],examples:["sequenzy tracking settings","sequenzy tracking update --opens off --clicks off"]});var gZe=pS.command("settings").description("Show the company's tracking configuration").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>_se(e));k(gZe,{examples:["sequenzy tracking settings --company comp_123"]});var xZe=pS.command("update").description("Update account-wide tracking defaults").option("--opens <on|off>","Enable or disable open tracking").option("--clicks <on|off>","Enable or disable click tracking").option("--transactional-opens <on|off>","Enable or disable open tracking by default for Transactional API sends").option("--transactional-clicks <on|off>","Enable or disable click tracking by default for Transactional API sends").option("--strict-bot-filtering <on|off>","Enable or disable aggressive bot filtering (can lower reported open/click rates)").option("--unsubscribes <on|off>","Track unsubscribe link clicks; off uses direct sequenzy.com links even with a custom domain").option("--attribution-window-hours <hours>","Default revenue attribution window in hours (1-720)").option("--double-opt-in <on|off>","Require email confirmation before new contacts become subscribed").option("--double-opt-in-redirect-url <url>","Where the confirmation page sends subscribers after they confirm; pass an empty string to clear it").option("--auto-utm <on|off>","Enable or disable automatic UTM tagging").option("--utm-source <template>","utm_source template").option("--utm-medium <template>","utm_medium template").option("--utm-campaign <template>","utm_campaign template").option("--utm-content <template>","utm_content template").option("--utm-term <template>","utm_term template").option("--reset-utm","Reset every UTM parameter to the platform defaults").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>Ise(e));k(xZe,{notes:["Partial update: omitted flags keep their current values.","--unsubscribes off routes unsubscribe links directly to sequenzy.com, even with a custom tracking domain. Actual unsubscribes and their email attribution are still recorded.","Transactional API defaults can only narrow the account-wide open and click settings; per-send trackingSettings can opt out again.","Applies to emails sent afterwards; already-sent emails keep the links they were rendered with.","UTM templates support placeholders such as {{email.subject}} and {{link.text}}.","--double-opt-in on makes new contacts start pending until they confirm; it needs a sender profile and provisions the confirmation email automatically. Existing active contacts are unaffected.","--double-opt-in-redirect-url sends subscribers to your own page after they confirm; without it they stay on the branded confirmation page.","Reply tracking is set with `sequenzy companies update`; the dedicated tracking domain is configured in the dashboard."],examples:["sequenzy tracking update --opens off --clicks off","sequenzy tracking update --transactional-opens off --transactional-clicks off","sequenzy tracking update --attribution-window-hours 168","sequenzy tracking update --double-opt-in on","sequenzy tracking update --double-opt-in-redirect-url https://example.com/welcome",'sequenzy tracking update --auto-utm on --utm-source newsletter --utm-campaign "{{email.subject}}"',"sequenzy tracking update --reset-utm"]});var r3=Tt.command("shopify").description("Manage the connected Shopify store's automation settings").action(()=>r3.help());k(r3,{notes:["Requires a connected Shopify integration on the company.","Browse abandonment emails shoppers who viewed a product but didn't buy; cart abandonment fires ecommerce.cart_abandoned with the full cart after the cart sits inactive; price drop alerts email recent viewers when a product's price falls."],examples:["sequenzy shopify settings get","sequenzy shopify settings update --price-drop off","sequenzy shopify settings update --browse-delay-hours 4 --browse-cooldown-hours 48"]});var i3=r3.command("settings").description("Browse-abandonment, cart-abandonment, and price-drop automation settings").action(()=>i3.help()),AZe=i3.command("get").description("Show the effective automation settings").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>O5("get",e));k(AZe,{notes:["Shows the effective values - platform defaults apply until the store overrides them."],examples:["sequenzy shopify settings get --json"]});var EZe=i3.command("update").description("Update browse-abandonment, cart-abandonment, and/or price-drop settings").option("--browse-abandonment <on|off>","Enable or disable browse abandonment").option("--browse-delay-hours <hours>","Hours to wait after a product view before the abandonment check (default 2)").option("--browse-cooldown-hours <hours>","Minimum hours between browse-abandoned events per subscriber (default 24)").option("--reset-browse-abandonment","Reset browse abandonment to the platform defaults").option("--cart-abandonment <on|off>","Enable or disable cart abandonment (ecommerce.cart_abandoned)").option("--cart-delay-hours <hours>","Hours of cart inactivity before abandonment (positive, max 168; default 1)").option("--cart-cooldown-hours <hours>","Minimum hours between cart-abandoned events (positive, max 720; default 24)").option("--cart-expire-after-hours <hours>","Drop a cart untouched this long instead of emailing about it (positive, max 720; default 72)").option("--reset-cart-abandonment","Reset cart abandonment to the platform defaults").option("--price-drop <on|off>","Enable or disable price drop alerts").option("--price-drop-min-percent <percent>","Minimum price decrease percent to alert on (default 5)").option("--price-drop-lookback-days <days>","How many days back viewers qualify as the audience (default 30)").option("--price-drop-cooldown-days <days>","Minimum days between price-drop events per subscriber and product (default 7)").option("--reset-price-drop","Reset price drop alerts to the platform defaults").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>O5("update",e));k(EZe,{notes:["Partial update: omitted flags keep their current values.","If no sequence handles ecommerce.price_drop, Sequenzy sends a default price-drop email to active subscribers."],examples:["sequenzy shopify settings update --browse-abandonment off","sequenzy shopify settings update --cart-delay-hours 2","sequenzy shopify settings update --price-drop-min-percent 10 --price-drop-lookback-days 14","sequenzy shopify settings update --reset-price-drop"]});var Qu=Tt.command("sms").description("Inspect the SMS add-on status for a company").action(()=>Qu.help());k(Qu,{notes:["SMS sequence steps only send when the add-on is enabled, the plan is eligible, and an active number exists.",'Add SMS steps to sequences with type: "sms" in sequences create --steps-* or update --insert-steps-*.','Generate SMS copy with `sequenzy generate sms "<prompt>"`.'],examples:["sequenzy sms settings","sequenzy sms settings --json"]});var hZe=Qu.command("settings").description("Show SMS add-on status, credits, and phone numbers").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>mp("settings",e));k(hZe,{notes:["readyToSend in the JSON output tells you whether SMS sequence steps will actually send."],examples:["sequenzy sms settings --json"]});var yZe=Qu.command("label <number-id> [label]").description("Set or clear the label shown for an SMS number").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t,n)=>mp("label",{numberId:e,label:t,...n}));k(yZe,{notes:["Run without a label to clear the current label.","Use `sequenzy sms settings` to find each number ID."],examples:['sequenzy sms label num_abc123 "Marketing"',"sequenzy sms label num_abc123"]});var bZe=Qu.command("update <number-id>").description("Update an SMS number's label and/or brand prefix override").option("--label <label>","Label tag; pass an empty string to clear").option("--brand-prefix <prefix>","Per-number brand prefix override; empty string clears back to the account-wide prefix").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>mp("update",{numberId:e,...t}));k(bZe,{notes:["Only the flags you pass are changed; omitted fields keep their value.",'Messages go out as "{prefix}: your message" - the number override wins over the account-wide prefix set in Settings > SMS.',"Use `sequenzy sms settings` to find each number ID."],examples:['sequenzy sms update num_abc123 --label "Support" --brand-prefix "Acme Support"','sequenzy sms update num_abc123 --brand-prefix ""']});var CZe=Qu.command("send-test <phone>").description("Send a test SMS to a phone number").option("-t, --text <text>","Plain-text message body").option("--image-url <url...>","Publicly reachable MMS image URL (repeat for up to 2)").option("--from-number <number-id>","Active SMS number ID to send from (defaults to the oldest active number)").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>mp("send-test",{phone:e,...t}));k(CZe,{notes:["Sends a real text and charges credits. Limited to 100 test sends per company per rolling 24 hours; bypasses quiet hours; excluded from step stats.","Requires the SMS add-on with a verified number - check `sequenzy sms settings` first.","Use --from-number with an active number ID from `sequenzy sms settings` to test a specific number."],examples:['sequenzy sms send-test +15550100123 --text "Test from Sequenzy"','sequenzy sms send-test +15550100123 --text "Test" --from-number num_abc123']});var BZe=Qu.command("usage").description("Show per-number SMS usage (sends, credits, last sent)").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>mp("usage",e));k(BZe,{notes:["Totals exclude test sends; test sends are counted separately per number."],examples:["sequenzy sms usage","sequenzy sms usage --json"]});var SZe=Qu.command("release <number-id>").description("Release an SMS number back to the carrier (irreversible)").option("-y, --yes","Skip the confirmation prompt").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>mp("release",{numberId:e,...t}));k(SZe,{notes:["Releasing is irreversible: the number is handed back to the carrier and cannot be recovered.","Released numbers stop counting toward the workspace number limit, freeing a slot for a new purchase.","Use `sequenzy sms settings` to find each number ID."],examples:["sequenzy sms release num_abc123 --yes"]});ree(Tt);var mS=Tt.command("email-design-system").description("Manage the visual identity every AI-generated email renders inside").action(()=>mS.help());k(mS,{notes:["The design system fixes the company's visual grammar (kickers, alignment, buttons, dividers, density, openers) and the composition spine that anchors email structure.","It is stored as the company's design direction text (emailDesignPrompt): adjustments rewrite that text, and free prose in it is preserved. Tokens the text does not state derive from brand context."],examples:["sequenzy email-design-system get","sequenzy email-design-system update --button-shape pill --spine editorial","sequenzy email-design-system update --reset"]});var vZe=mS.command("get").description("Show the effective email design system").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>A6("get",e));k(vZe,{notes:["The JSON output includes isDefault: true while the identity is still derived from brand context."],examples:["sequenzy email-design-system get --json"]});var _Ze=mS.command("update").description("Adjust the email design system (partial update) or reset it").option("--kicker-style <style>","chip | letterspaced | none").option("--title-alignment <alignment>","left | center").option("--button-shape <shape>","rounded | pill").option("--divider-style <style>","line | space").option("--density <density>","airy | compact").option("--opener-treatments <treatments>","Comma-separated: hero-image,hero-color,header-hero,editorial-masthead,title-led").option("--spine <spine>","hero-led | editorial | product-spec").option("--reset","Clear the design direction text; return to derived defaults").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>A6("update",e));k(_Ze,{notes:["Only the passed flags change; everything else keeps its current value.","Adjustments apply to every future AI email generation and sequence enrichment.","The change is written into the design direction text; custom prose in that text is preserved below the new identity. For free-prose edits use 'companies update --email-design-prompt'."],examples:["sequenzy email-design-system update --spine editorial --kicker-style letterspaced","sequenzy email-design-system update --opener-treatments editorial-masthead,title-led","sequenzy email-design-system update --reset"]});var fS=Tt.command("sync-rules").description("Manage automatic tag changes applied when events fire").action(()=>fS.help());k(fS,{notes:["Sync rules map events to tag changes, e.g. an order-placed event adding a customer tag.","Rules can carry conditions: required/excluded subscriber tags, and a product match for commerce events (tag buyers by product tag, collection, type, or vendor)."],examples:["sequenzy sync-rules get","sequenzy sync-rules update --rules-file ./sync-rules.json","sequenzy sync-rules update --reset"]});var IZe=fS.command("get").description("Show the effective sync rules").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>V5("get",e));k(IZe,{notes:["Shows the platform defaults until the company saves custom rules; the JSON output includes isDefault."],examples:["sequenzy sync-rules get --json"]});var DZe=fS.command("update").description("Replace the sync rules or reset them to the defaults").option("--rules-json <json>","Inline JSON array with the full rule set").option("--rules-file <file>","Path to a JSON file with the full rule set").option("--reset","Reset the company to the platform default rules").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>V5("update",e));k(DZe,{notes:["This replaces the FULL rule set - fetch with 'sync-rules get --json', edit, then update.",'Each rule: {"triggerEvent":"...","actions":{"addTags":[...],"removeTags":[...]},"conditions":{...}}.'],examples:["sequenzy sync-rules update --rules-file ./sync-rules.json",`sequenzy sync-rules update --rules-json '[{"triggerEvent":"ecommerce.order_placed","actions":{"addTags":["vinyl-collector"],"removeTags":[]},"conditions":{"purchasedProduct":{"tags":["Vinyl"]}}}]'`,"sequenzy sync-rules update --reset"]});var Pf=Tt.command("generate").description("Generate email and SMS content with AI").action(()=>Pf.help());k(Pf,{notes:["Generated email and SMS content is returned as draft content. Review it before sending.","`generate sequence` is deprecated and persists a disabled draft. Use `sequences create <name> --trigger <trigger> --goal <goal>` instead.","Use --json when another tool or agent should parse the generated output."],examples:['sequenzy generate email "Welcome a new user to our analytics product"','sequenzy generate subjects "April product launch" --count 8','sequenzy generate sms "Cart reminder with a free-shipping hook" --count 3']});Pf.command("email <prompt>").description("Generate email blocks from a prompt").option("-s, --style <style>","Prompt generation style. Pass designed or plain to force the designed or plain-text email style; other values are freeform guidance (defaults to the company's email style preference)").option("-t, --tone <tone>","Tone: professional, casual, friendly").option("--company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>kx("email",{prompt:e,...t}));Pf.command("sequence <goal>").description("[DEPRECATED] Persist a disabled AI sequence draft; use `sequences create`").option("--name <name>","Optional sequence name; defaults to the goal").option("--list-id <id>","Optional list ID for the contact_added trigger").option("-c, --count <number>","Number of emails (1-10)","5").option("-d, --days <number>","Duration in days","14").option("--company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>kx("sequence",{goal:e,...t}));Pf.command("subjects <topic>").description("Generate A/B subject line variants").option("-c, --count <number>","Number of variants","5").option("--company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>kx("subjects",{topic:e,...t}));var wZe=Pf.command("sms <prompt>").description("Generate SMS message variants from a prompt").option("-c, --count <number>","Number of variants (1-10)","3").option("--company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>kx("sms",{prompt:e,...t}));k(wZe,{notes:["Messages are plain text with encoding and segment counts; use them as the text of an SMS sequence step.","Opt-out footers and the brand prefix are added automatically at send time - never include them in the message.","Check `sequenzy sms settings` to confirm the SMS add-on is ready before enabling SMS sequences."],examples:['sequenzy generate sms "Flash sale ends tonight" --count 5 --json']});var hp=Tt.command("web-tracking").description("Manage publishable keys for the browser tracking SDK").action(()=>hp.help());k(hp,{notes:["These keys are publishable: they ship in your site's page source, so they are readable by anyone. They authorize storefront events only, never the rest of the API.","Restrict every key with --origins. An empty allowlist lets any site send events with the key.","Shopify stores do not need a key - connect the integration and enable the pixel instead (`sequenzy integrations enable-pixel`).","Anonymous visits are buffered and replayed after `sequenzy.identify(email, identityToken)`. Mint the short-lived token from your authenticated backend; never expose a secret API key in browser code."],examples:['sequenzy web-tracking create --name "Storefront" --origins https://example.com,https://*.example.com',"sequenzy web-tracking list","sequenzy web-tracking update wtk_123 --origins https://example.com","sequenzy web-tracking update wtk_123 --deactivate"]});var TZe=hp.command("list").description("List web tracking keys and where each one is allowed to run").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>vle(e));k(TZe,{examples:["sequenzy web-tracking list","sequenzy web-tracking list --json"]});var kZe=hp.command("get <id>").description("Show one key with its install snippet").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>_le(e,t));k(kZe,{examples:["sequenzy web-tracking get wtk_123"]});var RZe=hp.command("create").description("Create a publishable key and print the install snippet").requiredOption("--name <name>","Human-readable label, e.g. 'Storefront'").option("--origins <origins>","Comma-separated allowed origins, e.g. https://example.com,https://*.example.com").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>Ile(e));k(RZe,{notes:["A bare domain is read as https. Use https://*.example.com to cover subdomains; it does not match the apex, so list that separately if you need it.","Include your local development origin (e.g. http://localhost:3000) while you are wiring the SDK up.","The snippet embeds both the key and the workspace id, so paste it as printed."],examples:['sequenzy web-tracking create --name "Storefront" --origins https://example.com','sequenzy web-tracking create --name "Dev" --origins http://localhost:3000']});var FZe=hp.command("update <id>").description("Rename a key, change its origins, or revoke it").option("--name <name>","New label").option("--origins <origins>","Replace the allowed origins (pass an empty string to clear them)").option("--activate","Re-enable a revoked key").option("--deactivate","Revoke the key without deleting it").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Dle(e,t));k(FZe,{notes:["--origins replaces the whole list rather than appending to it.","Revoking keeps the key value, so you can still find the snippet to remove from your site. Events stop within a minute."],examples:["sequenzy web-tracking update wtk_123 --origins https://example.com,https://shop.example.com","sequenzy web-tracking update wtk_123 --deactivate"]});var NZe=hp.command("delete <id>").description("Permanently delete a web tracking key").option("-y, --yes","Skip the confirmation prompt").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>wle(e,t));k(NZe,{notes:["Remove the snippet from your site too, otherwise it keeps posting events that are rejected.","Prefer `update --deactivate` if you may want the key back."],examples:["sequenzy web-tracking delete wtk_123 --yes"]});await Tt.parseAsync();process.exit(process.exitCode??0);
504
+ ${Tl}Use 'sequenzy --help' and '<command> --help' for detailed examples and caveats.${mo}`;console.log(n),console.log(r),console.log(),console.log(i),console.log(o),console.log(a),console.log()}var Tt=new mF;Tt.name("sequenzy").description("Sequenzy CLI - Email marketing from the terminal").version(Lle).showHelpAfterError().showSuggestionAfterError().action(IWe);k(Tt,{notes:["Use --json on data commands when another tool or agent should parse structured output.","Dashboard-aware JSON responses include appUrls when a company ID can be resolved.","Company-scoped commands accept --company for personal API keys that can access multiple companies.","Content commands prefer file flags such as --html-file, --blocks-file, --steps-file, and --emails-file to avoid shell escaping issues.","Sequence creation supports --goal for AI generation or explicit step JSON."],examples:['sequenzy templates create welcome --subject "Welcome" --html-file ./welcome.html','sequenzy campaigns update camp_123 --subject "Updated subject" --html-file ./campaign.html',"sequenzy sequences create onboarding --trigger contact_added --list-id list_123 --steps-file ./steps.json","sequenzy urls --company comp_123 --sequence seq_123 --settings-tab integrations","sequenzy websites guide --framework nextjs --use-case transactional",'sequenzy api-keys create --name "CI deploy key" --company comp_123']});var DWe=Tt.command("login").description("Log in to your Sequenzy account").action(Mre);k(DWe,{notes:["Starts device authentication and prints a verification URL plus approval code."],examples:["sequenzy login"]});var wWe=Tt.command("logout").description("Log out of your Sequenzy account").action(Ure);k(wWe,{examples:["sequenzy logout"]});var TWe=Tt.command("whoami").description("Show the locally stored Sequenzy identity").action(Fle);k(TWe,{notes:["This checks local CLI credential state only. Use 'sequenzy account' to make a live request and verify the active key, permissions, and company access."],examples:["sequenzy whoami"]});var kWe=Tt.command("stats").description("Show account, campaign, sequence, or transactional email metrics").option("-p, --period <period>","Time period (7d, 30d, 90d)").option("--start <iso>","Start of custom time range (ISO 8601)").option("--end <iso>","End of custom time range (ISO 8601)").option("--campaign <id>","Get stats for a specific campaign").option("--sequence <id>","Get stats for a specific sequence").option("--transactional <id-or-slug>","Get stats for a saved transactional email").option("--email-type <type>","Filter account stats by campaign, transactional, or sequence").option("--emails","List per-email metrics: one row per campaign and per sequence email step").option("--step <number>","With --emails, keep only this 1-based sequence email step").option("--sort <field>","With --emails, sort by sent, delivered, opened, clicked, openRate, clickRate, unsubscribed, conversions, revenue, step, or name").option("--order <order>","With --emails, sort order: asc or desc").option("--page <number>","With --emails, page number").option("--limit <number>","With --emails, emails per page (maximum 500)").option("--mailbox-provider <provider>","Filter by recipient mailbox provider (gmail, microsoft, yahoo, ...)").option("--include-bots","Include machine-classified bot/scanner opens and clicks").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON, including poll and NPS results").action(ile);k(kWe,{notes:["Use exactly one of account-level stats, --campaign, --sequence, or --transactional. --email-type applies only to account-level stats.","--mailbox-provider scopes account or campaign engagement metrics to one recipient mailbox provider (e.g. gmail, microsoft, yahoo); replies, conversions, and revenue cannot be segmented per provider and report 0 under this filter.","Saved transactional email stats are all-time by default; pass --period for a window.","Use --email-type transactional for Send API open and click rates; use 'email-sends get <id>' for one delivery.","Bot/scanner opens and clicks are excluded by default; pass --include-bots to inspect raw engagement.","Sequence stats include per-step sent/delivered/opened/clicked counts, a live active/waiting enrollment breakdown by current node, and per-step failures.","--emails lists one row per campaign and per sequence email step, with totals across every matching email. Combine with --sequence (comma-separated) and --step to answer questions like 'how many step-4 emails went out across these sequences'.","--emails counts come from the retained event stream, so they are not limited to the 14-day `email-sends list` history. Omit --period for all-time totals.","Campaign stats include a Poll & NPS Results section when the email collected answers; use --json for the full polls array."],examples:["sequenzy stats","sequenzy stats --period 30d","sequenzy stats --emails --step 4","sequenzy stats --emails --sequence seq_1,seq_2 --step 4 --json","sequenzy stats --emails --email-type sequence --sort openRate --limit 20","sequenzy stats --campaign camp_123","sequenzy stats --campaign camp_123 --json","sequenzy stats --campaign camp_123 --include-bots","sequenzy stats --sequence seq_123","sequenzy stats --transactional password-reset","sequenzy stats --transactional password-reset --period 30d","sequenzy stats --email-type transactional --period 30d","sequenzy stats --mailbox-provider gmail --period 30d","sequenzy stats --campaign camp_123 --mailbox-provider yahoo"]});var J5=Tt.command("events").description("List raw campaign or sequence email events, or read event payload schemas").option("--campaign <id>","List events for a campaign").option("--sequence <id>","List events for a sequence").option("--automation-node-id <id>","Scope a --sequence stream to one email step").option("--type <type>","Single event type to include, such as delivery, open, or click").option("--event-types <types>","Comma-separated event types to include (default: delivery)").option("-p, --period <period>","Time period (1h, 24h, 7d, 30d, 90d)").option("--start <iso>","Start of custom time range (ISO 8601)").option("--end <iso>","End of custom time range (ISO 8601)").option("--page <number>","Page number").option("--limit <number>","Events per page, capped by the API").option("--include-bots","Include machine-classified bot/scanner opens and clicks").option("-c, --company <id>","Company ID").option("--json","Print JSON").action(lre);k(J5,{notes:["Use exactly one of --campaign or --sequence.","Defaults to delivery events. Use --event-types delivery,open,click when you need engagement events too.","--automation-node-id narrows a sequence stream to one email step; take the node ID from `stats --sequence <id>`.","This is the per-recipient stream. For per-step send totals use `stats --sequence <id>` or `stats --emails`, not a count of these pages.","Bot/scanner opens and clicks are excluded by default; pass --include-bots to inspect raw engagement."],examples:["sequenzy events --campaign camp_123","sequenzy events --sequence seq_123 --limit 100 --json","sequenzy events --sequence seq_123 --automation-node-id node_email_4","sequenzy events --campaign camp_123 --event-types delivery,click --period 30d","sequenzy events schema ecommerce.order_placed"]});J5.command("sample <event>").description("Read the latest received event payload in this workspace").option("-c, --company <id>","Company ID").option("--json","Print JSON").action((e,t)=>pee(e,t));var RWe=J5.command("schema [event]").description("Show the published payload of a built-in event, or list documented events").option("--provider <provider>",rre).option("--example","Print the full sample payload as JSON").option("-c, --company <id>","Company ID").option("--json","Print JSON").action((e,t)=>ore(e,t));k(RWe,{notes:["Read this before writing {{event.*}} merge tags or event property filters: an unrecognized merge tag renders as an empty string rather than an error.","Fields ending in Cents are minor units (8850 = $88.50); price is a preformatted display string, and predictedLtv is whole currency units.","Custom event names are supported everywhere even though they have no published payload here - `documented: false` never means the name is invalid.","This is static reference data. Use `sequenzy events sample <event>` to read the latest actual received payload."],examples:["sequenzy events schema","sequenzy events schema ecommerce.order_placed --provider shopify","sequenzy events schema ecommerce.browse_abandoned --example","sequenzy events schema ecommerce.cart_abandoned --json"]});var FWe=Tt.command("blocks [type]").description("Show the fields each email block type accepts, or list every block type").option("--creatable-only","Hide structural block types the editor manages for you").option("--example","Print the example block as formatted JSON").option("--conditions","Also print the condition field, operator, and value table for this block type").option("-c, --company <id>","Company ID").option("--json","Print JSON").action((e,t)=>oee(e,t));k(FWe,{notes:["Read this before hand-authoring a blocks array: the blocks parameter accepts a 37-type union, so field names are not guessable from the endpoint schema alone.",'Lists are their own block type, not a text variant. A numbered list is {"type":"list","variant":"numbered","items":[{"content":"First"}]}; a visual numbered walkthrough is {"type":"steps","variant":"numbered","items":[{"title":"Step one"},{"title":"Step two"}]}.',"`list` items carry `content`; `steps` items carry `title` and an optional `description`. The two are not interchangeable.","Every block also takes a `conditions` array, and each condition field accepts only its own operators. `blocks conditional-group` prints that table unprompted; any other type takes --conditions, since it is longer than the block reference itself.","This is static reference data derived from the same schemas that validate a write, so it cannot drift from what the API accepts."],examples:["sequenzy blocks","sequenzy blocks --creatable-only","sequenzy blocks list","sequenzy blocks steps --example","sequenzy blocks hero --json","sequenzy blocks conditional-group","sequenzy blocks text --conditions"]});var NWe=Tt.command("poll-responses").description("List individual Poll and NPS responses for a campaign").option("--campaign <id>","Campaign ID (required)").option("--block-id <id>","Scope to one poll block").option("--page <number>","Page number").option("--limit <number>","Responses per page (maximum 500)").option("-c, --company <id>","Company ID").option("--json","Print JSON").action(jre);k(NWe,{notes:["Returns each respondent's latest answer per poll block with the response time, so counts match `stats --campaign <id>`.","Block IDs come from the polls array of `stats --campaign <id> --json`.","For a sequence email step, pass the step's automation node ID as --campaign.","Do not scan subscribers for the poll attribute instead: the attribute carries no response time and reflects the latest answer to any email."],examples:["sequenzy poll-responses --campaign camp_123","sequenzy poll-responses --campaign camp_123 --block-id poll_1 --json","sequenzy poll-responses --campaign camp_123 --limit 500 --page 2"]});var PWe=Tt.command("urls").description("Generate Sequenzy dashboard URLs for known resource IDs").option("-c, --company <id>","Company ID").option("--campaign <id>","Campaign ID for campaign editor URL").option("--landing-page <id>","Landing page ID for landing page editor URL").option("--sequence <id>","Sequence ID for sequence editor URL").option("--template <id>","Template/email ID for email editor URL").option("--email <id>","Email ID for email editor URL").option("--transactional <id>","Transactional email ID").option("--email-send <id>","Email send ID").option("--domain <id>","Sending domain ID").option("--status <status>","Status for campaign/sequence list URLs").option("--settings-tab <tab>","Settings tab slug; billing/subscription opens Account -> Subscription").option("--json","Print JSON").action(PX);k(PWe,{notes:["Uses SEQUENZY_APP_URL when set, otherwise https://sequenzy.com.","If --company is omitted, the CLI tries the current company from `sequenzy account`.","Useful after creating a campaign or sequence when the user wants a review/edit link."],examples:["sequenzy urls --company comp_123","sequenzy urls --company comp_123 --sequence seq_123","sequenzy urls --company comp_123 --campaign camp_123","sequenzy urls --company comp_123 --landing-page lp_123","sequenzy urls --company comp_123 --email-send send_123","sequenzy urls --company comp_123 --settings-tab integrations","sequenzy urls --company comp_123 --settings-tab billing","sequenzy urls --company comp_123 --json"]});var ea=Tt.command("subscribers").description("Manage subscribers").action(()=>ea.help());k(ea,{notes:["Subscriber list fetches every page by default so agents do not silently miss later results.","`subscribers get` includes tags, list memberships, sequence enrollments, email stats, and recent activity.","--attr expects repeated key=value pairs. Example: --attr firstName=Ana --attr plan=pro"],examples:["sequenzy subscribers list --tag vip",'sequenzy subscribers list --list "Master List" --json',"sequenzy subscribers list --tag vip --limit 25 --json","sequenzy subscribers add user@example.com --tag trial --attr firstName=Ana","sequenzy subscribers import copper-contacts.csv --list list_123 --opt-in-mode confirmed","sequenzy subscribers import-status import_123 --json","sequenzy subscribers get user@example.com --json",'sequenzy subscribers notes add user@example.com --body "Customer prefers quarterly reports"',"sequenzy subscribers remove user@example.com --hard"]});var Y5=ea.command("operations").description("Run and monitor background audience tagging");Y5.command("start").requiredOption("--kind <kind>","add_tags").option("--audience-json <json>","Audience filters or subscriberIds as JSON (supports @file)").option("--tag <tags...>","Tags to add").option("--trigger-automations","Trigger tag automations (requires automations:trigger)").option("--request-key <key>","Idempotency key; reuse after an uncertain start response").option("-c, --company <id>","Company ID").option("--json","Print JSON").action((e)=>JB("start",e));Y5.command("list").option("-c, --company <id>").option("--json").action((e)=>JB("list",e));for(let e of["get","cancel"])Y5.command(`${e} <id>`).option("-c, --company <id>").option("--json").action((t,n)=>JB(e,{...n,id:t}));var OWe=ea.command("list").description("List subscribers").option("-s, --segment <id>","Filter by segment").option("-t, --tag <tag>","Filter by tag").option("--list <id-or-name>","Filter by subscriber list ID or exact name").option("--status <status>","active, unsubscribed, bounced, or all").option("--unsubscribed-after <date>","Only contacts whose opt-out is on or after this ISO 8601 date or zoned datetime").option("--unsubscribed-before <date>","Only contacts whose opt-out is on or before this ISO 8601 date or zoned datetime").option("--attribute <name>",'Filter by custom attribute name, e.g. "plan". The "name:value" form also works').option("--attribute-value <value>","Value the custom attribute must match").option("--attribute-operator <operator>","is, contains, gt, gte, lt, lte, or is_not_empty (default: is)").option("-l, --limit <number>","Maximum results to return").option("--offset <number>","Matches to skip (maximum 999999; use --cursor for deeper pagination)").option("--page <number>","1-based page number; requires --limit").option("--cursor <token>","pagination.nextCursor from the previous response; cheaper than --offset").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>ya("list",e));k(OWe,{notes:["Without --limit the command walks every page and returns all matches in one call.","With --limit, page through the audience by re-running with --cursor set to the previous response's pagination.nextCursor. Fall back to --offset (or --page) when nextCursor is null.","--attribute filters on ClickHouse-backed custom attributes and cannot be combined with --segment. Use a saved segment for compound or is_not/is_empty attribute filters.","--unsubscribed-after/--unsubscribed-before match the opt-out date and exclude contacts that have none: active contacts, and contacts imported as already unsubscribed. Bare dates use UTC midnight; datetimes must include Z or an explicit offset."],examples:["sequenzy subscribers list",'sequenzy subscribers list --list "Master List"',"sequenzy subscribers list --segment seg_123","sequenzy subscribers list --tag onboarding --limit 100","sequenzy subscribers list --status unsubscribed --unsubscribed-after 2026-07-01 --json","sequenzy subscribers list --limit 50 --json","sequenzy subscribers list --limit 50 --cursor NEXT_CURSOR --json","sequenzy subscribers list --limit 50 --offset 50 --json","sequenzy subscribers list --attribute plan --attribute-value pro","sequenzy subscribers list --attribute mrr --attribute-value 50 --attribute-operator gte","sequenzy subscribers list --attribute prem_rouge_sample_received --attribute-operator is_not_empty --json"]});var LWe=ea.command("add [email]").description("Add or upsert a subscriber").option("--external-id <id>","Customer-owned subscriber ID").option("--phone <phone>","Phone number (E.164 or national). With no email, creates a phone-only SMS contact").option("--phone-country <country>","Two-letter country used to read a national-format --phone (default US)").option("--sms-consent","Record express written SMS marketing consent for the phone number").option("--first-name <name>","Subscriber first name").option("--last-name <name>","Subscriber last name").option("--timezone <zone>","IANA timezone (e.g. America/New_York) used for recipient-local campaign delivery").option("-t, --tag <tags...>","Tags to apply").option("-l, --list <ids...>","List IDs to add the subscriber to").option("--no-lists","Add the subscriber to no lists").option("--skip-sequences","Do not enroll the subscriber in matching sequences").option("--enroll-sequences","Enroll matching sequences, including when --created-at is supplied (requires automations:trigger)").option("-a, --attr <attrs...>","Attributes (key=value)").option("--created-at <iso-date>","Original signup date when importing history from another platform (only ever moves an existing contact's date earlier; skips sequences unless --enroll-sequences is passed)").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>ya("add",{email:e,...t,noLists:t.lists===!1}));k(LWe,{examples:["sequenzy subscribers add user@example.com","sequenzy subscribers add user@example.com --first-name Ana --tag trial --attr plan=pro","sequenzy subscribers add user@example.com --list list_123","sequenzy subscribers add user@example.com --skip-sequences","sequenzy subscribers add user@example.com --created-at 2019-03-14T09:30:00Z","sequenzy subscribers add user@example.com --created-at 2019-03-14T09:30:00Z --enroll-sequences","sequenzy subscribers add --phone '+14155550123' --sms-consent"],notes:["--created-at preserves a contact's real signup date so date-relative segments are correct right after a migration. It never moves an existing contact's date later, and it suppresses sequence enrollment by default because it describes the past, not a signup happening now. Pass --enroll-sequences to opt in explicitly. New-subscriber account notifications remain eligible when the signup date is at most one hour old; older dates do not notify on creation. Double opt-in confirmation can notify even for imported contacts. Your notification preferences, double opt-in and the daily cap still apply."]});var MWe=ea.command("import [file]").description("Queue a full-record subscriber import from CSV or JSON").option("--records-json <json>","Inline JSON array (alternative to a CSV/JSON file)").option("--duplicate-strategy <strategy>","Existing contact behavior: skip, merge, or overwrite","skip").option("--file-name <name>","Source label shown in import history").option("-l, --list <ids...>","List IDs for every imported subscriber (requires lists:write)").option("--enroll-sequences","Enroll matching subscribers (requires automations:trigger)").option("--default-phone-country <country>","Two-letter country for national phone numbers").option("--sms-consent","Assert express written SMS consent for every imported phone").option("--opt-in-mode <mode>","Email consent mode: default, confirmed, or double_opt_in (default may require automations:trigger; double_opt_in always does)","default").option("--idempotency-key <key>","Caller-owned key (1-255 chars) that makes retrying this request safe: resending the same content returns the already-queued import, while changed content under the same key queues a new import").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>ya("import",{file:e,...t}));k(MWe,{notes:["CSV columns for email, names, external ID, phone, status, and tags are detected automatically; other columns become custom attributes.","Use --opt-in-mode confirmed only when these contacts already gave verified email consent.","Imports run asynchronously. Poll the returned ID with subscribers import-status.","Pass --idempotency-key from pipelines and retry loops so a timed-out request can be resent without double-queueing the batch.","If two identical keyed requests overlap, one may receive a retryable 503; honor Retry-After and resend the same request."],examples:["sequenzy subscribers import copper-contacts.csv --list list_123 --opt-in-mode confirmed",`sequenzy subscribers import --records-json '[{"email":"one@example.com","firstName":"Ana"}]' --opt-in-mode confirmed`,"sequenzy subscribers import contacts.csv --duplicate-strategy merge --idempotency-key nightly-sync-2026-08-25"]});var UWe=ea.command("import-status <importId>").description("Get subscriber import progress and result counts").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>ya("import:get",{importId:e,...t}));k(UWe,{notes:["A completed import can still contain failed rows; inspect failed counts and --json reason maps."],examples:["sequenzy subscribers import-status import_123","sequenzy subscribers import-status import_123 --json"]});var $We=ea.command("events-import [file]").description("Record events for many subscribers from a JSON file").option("--events-json <json>","Inline JSON array (alternative to a JSON file)").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>ya("events:import",{file:e,...t}));k($We,{notes:["Each event needs a name, an eventId, and an email or externalId; externalId-only rows must identify an existing contact because email is required for creation. At most 25 events per request.","History is classified per contact: only contacts whose events are all more than an hour old use the silent historical path. If any event for a contact is recent, every event for that contact uses the live path and can run sequences or webhooks.","Derive each required eventId from your source data so re-running the same file records nothing twice."],examples:["sequenzy subscribers events-import purchases.json",`sequenzy subscribers events-import --events-json '[{"email":"one@example.com","name":"purchase_completed","eventId":"order_1","occurredAt":"2026-08-01T12:00:00Z"}]'`]});var qWe=ea.command("get [email]").description("Get subscriber details").option("--external-id <id>","Customer-owned subscriber ID").option("--include-bots","Include machine-classified bot/scanner opens and clicks in stats/activity").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>ya("get",{email:e,...t}));k(qWe,{notes:["Bot/scanner opens and clicks are excluded by default; pass --include-bots to inspect raw engagement."],examples:["sequenzy subscribers get user@example.com","sequenzy subscribers get user@example.com --include-bots"]});var cA=ea.command("notes").description("Manage subscriber notes").action(()=>cA.help());k(cA,{examples:["sequenzy subscribers notes list user@example.com",'sequenzy subscribers notes add user@example.com --body "Prefers monthly digest"',"sequenzy subscribers notes delete note_123"]});var QWe=cA.command("list [email]").description("List subscriber notes").option("--external-id <id>","Customer-owned subscriber ID").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>ya("notes:list",{email:e,...t}));k(QWe,{examples:["sequenzy subscribers notes list user@example.com","sequenzy subscribers notes list --external-id user_123 --json"]});var zWe=cA.command("add [email]").description("Add a subscriber note").option("--external-id <id>","Customer-owned subscriber ID").requiredOption("-b, --body <body>","Note body").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>ya("notes:add",{email:e,...t}));k(zWe,{examples:['sequenzy subscribers notes add user@example.com --body "Asked about enterprise plan"','sequenzy subscribers notes add --external-id user_123 --body "Imported from sales call"']});var HWe=cA.command("delete <noteId>").description("Delete a subscriber note").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>ya("notes:delete",{noteId:e,...t}));k(HWe,{examples:["sequenzy subscribers notes delete note_123"]});var jWe=ea.command("update [email]").description("Update subscriber status, name, phone, tags, or custom attributes").option("--external-id <id>","Customer-owned subscriber ID").option("--status <status>","Subscriber status").option("--first-name <name>","Subscriber first name").option("--last-name <name>","Subscriber last name").option("--timezone <zone>","IANA timezone (e.g. America/New_York). Pass an empty string to clear it").option("--phone <phone>","Phone number (E.164 or national). Pass an empty string to clear it").option("--phone-country <country>","Two-letter country used to read a national-format --phone (default US)").option("--sms-consent","Record express written SMS marketing consent for the phone number").option("--no-sms-consent","Unsubscribe the contact from SMS").option("-t, --tag <tags...>","Replacement tags").option("-a, --attr <attrs...>","Attributes (key=value)").option("--merge","Merge custom attributes instead of replacing them").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>ya("update",{email:e,...t}));k(jWe,{notes:["--phone writes the native phone field shown on the contact, not a custom attribute.","Changing --phone resets SMS consent unless --sms-consent is passed in the same command."],examples:["sequenzy subscribers update user@example.com --status unsubscribed","sequenzy subscribers update user@example.com --first-name Ana --last-name Silva","sequenzy subscribers update user@example.com --phone '+390512345678'","sequenzy subscribers update user@example.com --phone '051 234 5678' --phone-country IT --sms-consent","sequenzy subscribers update user@example.com --tag churned --attr cancelReason=too_expensive","sequenzy subscribers update user@example.com --attr plan=pro --merge"]});var GWe=ea.command("event [email]").description("Trigger an event for a subscriber").option("--external-id <id>","Customer-owned subscriber ID").requiredOption("-n, --name <event>","Event name").option("-p, --property <properties...>","Event properties (key=value)").option("-a, --attr <attrs...>","Subscriber attributes (key=value)").option("--occurred-at <iso-date>","When the event actually happened; more than an hour ago records it as history without running sequences").option("--event-id <id>","Your own event ID, so re-sending the same event writes nothing new").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>ya("event",{email:e,...t}));k(GWe,{examples:["sequenzy subscribers event user@example.com --name saas.purchase","sequenzy subscribers event user@example.com --name saas.purchase --property plan=pro --property amount=99","sequenzy subscribers event user@example.com --name saas.purchase --occurred-at 2024-11-02T10:00:00Z --event-id inv_9182"],notes:["Without --occurred-at the event is live and runs the full chain: sync rules, sequence enrollment, waiting steps, goal conversions.","--event-id is an idempotency key on both paths: re-sending an ID this contact already has for this event name records nothing and runs no side effects. It is best-effort for live events sent within a second of each other, so a producer that needs a strict guarantee should keep its own ledger.","With an --occurred-at more than an hour in the past the event is recorded as history: stored with its real timestamp and counted by segments, but no sequences enroll and no webhooks fire. The contact's signup date also moves back to when the event occurred (never later). Use it for backfills, never to fake a live event."]});var iS=ea.command("tags").description("Bulk add or remove tags across many existing subscribers").action(()=>iS.help());k(iS,{notes:["These commands only touch contacts that already exist. Unknown identifiers are reported, never created.","Use `subscribers add` or `subscribers update` for single-contact tag changes."],examples:["sequenzy subscribers tags add --tag legacy-plan --emails-file ./backlog.csv","sequenzy subscribers tags remove --tag legacy-plan --emails-file ./backlog.csv"]});var VWe=iS.command("add").description("Add tags to many existing subscribers").requiredOption("-t, --tag <tags...>","Tags to add").option("-e, --email <emails...>","Subscriber emails to tag").option("--emails-json <json>","JSON array of subscriber emails").option("--emails-file <file>","CSV or newline-separated file of emails").option("--external-id <ids...>","Customer-owned subscriber IDs to tag").option("--subscriber-id <ids...>","Sequenzy subscriber IDs to tag").option("--trigger-automations","Allow tag_added sequences to enroll these contacts (requires automations:trigger)").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>M5("add",e));k(VWe,{notes:["Tag automations are skipped by default, which is what historical backfills want.","Requests are chunked at 500 targets each; totals in the output are combined across chunks."],examples:["sequenzy subscribers tags add --tag vip --email a@example.com --email b@example.com","sequenzy subscribers tags add --tag derived-churn --emails-file ./backlog.csv --json","sequenzy subscribers tags add --tag welcome --emails-file ./new.csv --trigger-automations"]});var WWe=iS.command("remove").description("Remove tags from many existing subscribers").requiredOption("-t, --tag <tags...>","Tags to remove").option("-e, --email <emails...>","Subscriber emails to untag").option("--emails-json <json>","JSON array of subscriber emails").option("--emails-file <file>","CSV or newline-separated file of emails").option("--external-id <ids...>","Customer-owned subscriber IDs to untag").option("--subscriber-id <ids...>","Sequenzy subscriber IDs to untag").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>M5("remove",e));k(WWe,{examples:["sequenzy subscribers tags remove --tag legacy-plan --emails-file ./backlog.csv","sequenzy subscribers tags remove --tag vip --subscriber-id sub_1 sub_2"]});var KWe=ea.command("remove [email]").description("Unsubscribe or permanently delete a subscriber").option("--external-id <id>","Customer-owned subscriber ID").option("--hard","Permanently delete (not just unsubscribe)").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>ya("remove",{email:e,...t}));k(KWe,{examples:["sequenzy subscribers remove user@example.com","sequenzy subscribers remove user@example.com --hard"]});var xp=Tt.command("transactional").description("Manage transactional email templates").action(()=>xp.help());k(xp,{notes:["Use the top-level `sequenzy send` command to send email."],examples:["sequenzy transactional list","sequenzy transactional get welcome","sequenzy transactional update welcome --no-enabled","sequenzy transactional delete welcome --yes","sequenzy send user@example.com --template welcome --var firstName=Ana"]});var JWe=xp.command("list").description("List transactional templates").option("--search <text>","Search name, slug, or email subject/title").option("--status <status>","Filter by all, active, or disabled","all").option("--sort <field>","Sort by date, sends, opens, open-rate, clicks, or ctr","date").option("--order <order>","Sort order: asc or desc","desc").option("--include-bots","Include machine opens and clicks").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>Rf("list",e));k(JWe,{examples:['sequenzy transactional list --search "password reset" --status active',"sequenzy transactional list --sort open-rate --order desc","sequenzy transactional list --company comp_123 --json"]});var YWe=xp.command("get <slug>").description("Get transactional template details by slug").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Rf("get",{slug:e,...t}));k(YWe,{examples:["sequenzy transactional get welcome"]});var ZWe=xp.command("create <name>").description("Create a transactional template").option("--slug <slug>","API slug").option("-s, --subject <subject>","Subject (optional with --prompt)").option("--preview-text <text>","Preview text override").option("--prompt <prompt>","Generate branded transactional blocks").option("--style <style>","Prompt generation style. Pass designed or plain to force the designed or plain-text email style; other values are freeform guidance (defaults to the company's email style preference)").option("--tone <tone>","Prompt generation tone").option("--html <html>","Preserved HTML content").option("--html-file <file>","Read preserved HTML from file").option("--blocks-json <json>","Finished Sequenzy blocks JSON").option("--blocks-file <file>","Read finished Sequenzy blocks from file").option("--enabled","Enable immediately (prompt creates default disabled)").option("--no-enabled","Create the transactional template disabled").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Rf("create",{name:e,...t}));k(ZWe,{notes:["Provide exactly one of prompt, HTML, or blocks.",lA],examples:['sequenzy transactional create password-reset --prompt "Write a password reset email"']});var XWe=xp.command("update <slug>").description("Update a transactional template by ID or slug").option("--name <name>","Transactional template name").option("-s, --subject <subject>","Subject line").option("--preview-text <text>","Preview text").option("--clear-preview-text","Remove the preview text").option("--html <html>","Replace the body with preserved HTML").option("--html-file <file>","Replace the body with HTML read from file").option("--blocks-json <json>","Replace the body with Sequenzy blocks JSON").option("--blocks-file <file>","Replace the body with blocks read from file").option("--enabled","Allow this template to be sent").option("--no-enabled","Stop this template from being sent").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Rf("update",{slug:e,...t}));k(XWe,{notes:["Partial update: only the fields you pass change.","Replacing the body takes HTML or blocks, not both.","Use --no-enabled to stop sends while keeping the template and its stats.",lA],examples:["sequenzy transactional update password-reset --no-enabled",'sequenzy transactional update password-reset --subject "Reset your password"',"sequenzy transactional update password-reset --blocks-file ./reset.json"]});var eKe=xp.command("delete <slug>").description("Delete a transactional template by ID or slug").option("-y, --yes","Skip the confirmation prompt").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Rf("delete",{slug:e,...t}));k(eKe,{notes:["Deleting frees the slug for reuse and stops any further sends through it.","Past deliveries and their stats are kept; only the saved template is removed.","Requires an API key with the transactional:delete scope."],examples:["sequenzy transactional delete password-reset --yes"]});var Z5=Tt.command("widgets").description("Widget helper commands").action(()=>Z5.help());k(Z5,{examples:["sequenzy widgets preferences-token user@example.com"]});var tKe=Z5.command("preferences-token <email>").description("Generate a subscription preferences iframe token").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Nle("preferences-token",{email:e,...t}));k(tKe,{examples:["sequenzy widgets preferences-token user@example.com"]});var oS=Tt.command("email-sends").alias("emailsends").description("Inspect sent email snapshots and delivery events").action(()=>oS.help());k(oS,{notes:["Email send rows are short-lived; if the row was cleaned up, this falls back to retained ClickHouse events.","The list command matches the dashboard's 14-day delivery history and supports subject, recipient, status, type, and source filters.","Use --html to print the stored HTML body when it is still available."],examples:['sequenzy email-sends list --search "Welcome" --status opened',"sequenzy email-sends get send_123","sequenzy email-sends get send_123 --html","sequenzy email-sends get send_123 --json"]});var nKe=oS.command("list").description("List and filter recent sent email deliveries").option("--search <text>","Search subject or recipient email").option("--subject <text>","Filter by subject/title").option("--recipient <text>","Filter by recipient email").option("--status <status>","Filter by delivery status").option("--email-type <type>","Filter by campaign, transactional, or sequence").option("--bounce-type <type>","Filter bounced sends by Permanent or Transient").option("--campaign <id>","Filter by campaign ID").option("--transactional <id>","Filter by saved transactional email ID").option("--sequence <id>","Filter by sequence ID").option("--automation-node-id <id>","Filter by one email step of a sequence").option("--days <days>","History window in days (maximum 14)","14").option("--page <page>","Page number").option("--limit <limit>","Results per page (maximum 100)").option("--all","Fetch every result page").option("--csv [path]","Export CSV to stdout, or write it to an optional file path").option("--sort <field>","Sort by recipientEmail, subject, status, eventAt, sentAt, or createdAt","createdAt").option("--order <order>","Sort order: asc or desc","desc").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>E6("list",e));k(nKe,{notes:["The opened status includes clicked deliveries, matching the dashboard.","Use a returned ID with `sequenzy email-sends get <id>` for timestamps and the complete event timeline.","Use --all --csv email-sends.csv to export every matching delivery.","--automation-node-id lists the recipients of one sequence step; the node ID comes from `stats --sequence <id>`.","This history only reaches back 14 days. For per-step send totals over the full retained window use `stats --sequence <id>` or `stats --emails`."],examples:['sequenzy email-sends list --search "Welcome" --status opened',"sequenzy email-sends list --email-type transactional --days 7","sequenzy email-sends list --sequence seq_123 --automation-node-id node_email_4","sequenzy email-sends list --transactional txn_123 --all --csv email-sends.csv","sequenzy email-sends list --subject receipt --recipient example.com --json"]});var rKe=oS.command("get <emailSendId>").description("Get an email send by ID").option("-c, --company <id>","Company ID override for personal API keys").option("--html","Print the full stored HTML body in text output").option("--html-only","Print only the stored HTML body").option("--json","Print raw JSON").action((e,t)=>E6("get",{id:e,...t}));k(rKe,{examples:["sequenzy email-sends get send_123","sequenzy email-sends get send_123 --html","sequenzy email-sends get send_123 --company comp_123 --json"]});var uA=Tt.command("suppressions").description("Inspect recipient suppression and clear workspace escalations").action(()=>uA.help());k(uA,{notes:["Suppression lookup is exact-address only because the SES account-level list is shared across companies.","Removal clears workspace soft-bounce escalations only; global invalid-recipient, workspace hard-bounce, SES, complaint, and unsubscribe protections are preserved."],examples:["sequenzy suppressions list","sequenzy suppressions get me@example.com","sequenzy suppressions remove me@example.com --yes"]});var iKe=uA.command("list").description("List recipients this workspace cannot reach").option("--search <query>","Filter by email substring").option("--page <page>","Page number (default 1)").option("--limit <limit>","Entries per page (max 100)").option("--sort <field>","Order by suppressedAt, email, or status").option("--order <direction>","asc or desc").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>XB("list",e));k(iKe,{notes:["Shows protected global invalid-recipient suppressions for associated addresses, protected workspace hard bounces without conclusive invalid-inbox evidence, workspace soft-bounce escalations, and recipients who reported an email as spam.","Only workspace soft-bounce escalations can be removed.","--sort status lists removable escalations before protected suppressions. An unrecognized --sort falls back to newest first, and the applied order is printed with the results."],examples:["sequenzy suppressions list","sequenzy suppressions list --search example.com --json","sequenzy suppressions list --sort status --order desc"]});var oKe=uA.command("get <email>").description("Check local and Amazon SES suppression for one recipient").option("--region <region>","Check one AWS SES region").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>XB("get",{email:e,...t}));k(oKe,{examples:["sequenzy suppressions get me@example.com","sequenzy suppressions get me@example.com --region us-east-1 --json"]});var aKe=uA.command("remove <email>").description("Remove a workspace soft-bounce escalation").option("--region <region>","Inspect one AWS SES region after removal").option("-c, --company <id>","Company ID override for personal API keys").option("-y, --yes","Skip confirmation").option("--json","Print raw JSON").action((e,t)=>XB("remove",{email:e,...t}));k(aKe,{examples:["sequenzy suppressions remove me@example.com","sequenzy suppressions remove me@example.com --region us-east-1 --yes"]});var sKe=hse(Tt.command("send <email...>").description("Send through the transactional email API")).option("-t, --template <slug>","Transactional template slug to use").option("-s, --subject <subject>","Email subject").option("--html <html>","Email HTML content").option("--html-file <file>","Read HTML from file").option("--email-type <type>","Delivery policy: transactional (default) or marketing").option("--from-email <email>","Send from this verified sender address instead of the company default").option("--from-name <name>","Existing sender display name on --from-email when the address has several identities").option("--sender-profile-id <id>","Existing sender profile ID; omit --from-email. See sequenzy sender-profiles list").option("--reply-to <address>","Reply-To address or Name <email> value").option("--reply-to-name <name>","Display name for a bare --reply-to address").option("--reply-profile <id>","Existing reply profile ID; omit --reply-to. See sequenzy sender-profiles list").option("--attachments-json <json>","Attachments as JSON objects with filename and content or path").option("--no-track-clicks","Disable click tracking for this send to keep iOS/Android universal links working").option("--no-track-opens","Disable the open-tracking pixel for this send").option("--idempotency-key <key>","Retry key that prevents duplicate sends for 14 days").option("--vars-json <json>","Variables as a JSON object, including nested arrays for repeat blocks").option("-v, --var <vars...>","Variables (key=value)").action(Cse);k(sKe,{notes:["Use either --template or --html/--html-file.","--template takes a transactional API slug and cannot be combined with --subject.","--subject is required when sending raw HTML.","Pass several recipients, --cc, or --bcc to send one email with a shared recipient list instead of one email per address. Each list accepts up to 50 addresses; repeat --cc/--bcc or use comma-separated values for several copy recipients.","Addresses repeated across the lists are dropped from the lower-priority one: to beats cc beats bcc.","--email-type marketing adds the standard unsubscribe footer and RFC 8058 one-click-unsubscribe headers; it supports one recipient only and rejects --cc and --bcc.","When --from-email and --sender-profile-id are omitted, a template send keeps its saved From identity and a direct send uses the company default. Pass --from-email (and --from-name if that address has several identities) to send as a non-default verified brand without looking up IDs.","Use either --from-email or --sender-profile-id, not both. --from-name requires --from-email. --sender-profile-id already carries the display name.","When --reply-to and --reply-profile are omitted, the saved template or company Reply-To default is used. Use either --reply-to or --reply-profile, not both. --reply-to-name requires a bare --reply-to address.","--attachments-json accepts up to 10 objects with filename plus Base64 content or a public path; contentId embeds a CID image and contentType overrides MIME detection.","--no-track-clicks and --no-track-opens are opt-out only for this send; they cannot enable tracking the account has disabled.","--vars-json accepts nested objects and arrays; --var overrides individual scalar keys.","If the recipient matches a subscriber, saved first and last names fill omitted name variables; --var values override them.","For retryable automation, generate one --idempotency-key per logical email and reuse that same key on every retry. Reusing it with different content is rejected."],examples:["sequenzy send user@example.com --template welcome --var firstName=Ana","sequenzy send buyer@example.com ops@example.com --cc billing@example.com --bcc archive@example.com --template order-confirmation",`sequenzy send user@example.com --template welcome --vars-json '{"event":{"items":[{"title":"Plan","description":"Pro"}]}}'`,'sequenzy send user@example.com --subject "Welcome" --html-file ./welcome.html',`sequenzy send user@example.com --subject "Ticket" --html '<img src="cid:ticket-qr">' --attachments-json '[{"filename":"ticket.png","path":"https://example.com/ticket.png","contentId":"ticket-qr","contentType":"image/png"}]'`,"sequenzy send user@example.com --template trial-reminder --email-type marketing --var firstName=Ana",'sequenzy send user@example.com --subject "StudyBoost test" --html "<p>Hi</p>" --from-email hello@studyboost.com --from-name StudyBoost --reply-to support@studyboost.com --reply-to-name "StudyBoost Support"',"sequenzy send user@example.com --template receipt --idempotency-key order-123-receipt"]});var si=Tt.command("campaigns").description("Manage campaigns").action(()=>si.help());k(si,{notes:["Campaign creation supports HTML, Sequenzy blocks, or prompt-generated content.","Campaign updates support HTML, Sequenzy blocks, subject, name, labels, and reply-to changes.","Campaign scheduling requires a future ISO timestamp and a verified sending domain.","Use unschedule to return a scheduled campaign to draft, cancel to stop one permanently, and pause/resume to control an active send.",lA],examples:["sequenzy campaigns list --status draft --company comp_123",'sequenzy campaigns create "April Launch" --subject "We shipped" --html-file ./campaign.html','sequenzy campaigns create "API Launch" --subject "We shipped" --label edm api --html-file ./campaign.html','sequenzy campaigns schedule camp_123 --at "2026-06-01T14:00:00Z"',"sequenzy campaigns test camp_123 --to you@example.com","sequenzy campaigns unschedule camp_123","sequenzy campaigns cancel camp_123","sequenzy campaigns duplicate camp_123 --mode ab_test"]});var lKe=si.command("list").description("List campaigns").option("-s, --status <status>","Filter by status").option("--label <labels...>","Filter by label name").option("--limit <count>","Page size from 1 to 100 (defaults to 50)").option("--offset <count>","Zero-based result offset").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>Xr("list",e));k(lKe,{notes:["Results are paginated: the default page size is 50 and --limit is capped at 100.","Read the pagination object (--json) or the trailing hint to page through every campaign with --offset."],examples:["sequenzy campaigns list","sequenzy campaigns list --status draft --company comp_123","sequenzy campaigns list --label edm","sequenzy campaigns list --limit 100 --offset 100"]});var cKe=si.command("get <id>").description("Get campaign details").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Xr("get",{id:e,...t}));k(cKe,{examples:["sequenzy campaigns get camp_123 --company comp_123"]});var uKe=si.command("audience <id>").description("Show who a campaign will reach, with a live recipient count").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Xr("audience",{id:e,...t}));k(uKe,{notes:["Resolves list and segment names and recomputes the recipient count at read time.","Warns when targeting is unset, because scheduling then sends to every active subscriber."],examples:["sequenzy campaigns audience camp_123 --company comp_123"]});function X5(e){return e.option("--subscriber <id>","Personalize as a stored subscriber").option("--email <email>","Personalize as an ad-hoc contact").option("--first-name <name>","First name for --email").option("--last-name <name>","Last name for --email").option("--attr <key=value...>","Custom attribute for the --email contact (repeatable)").option("--attrs-json <json>","Custom attributes for the --email contact as a JSON object").option("--tag <tags...>","Tag the --email contact carries, for previewing tag conditions (repeatable)").option("--empty-tags","State that the --email contact carries no tags, for previewing empty-tag conditions").option("--var <key=value...>","Extra merge variable (repeatable)").option("--vars-json <json>","Extra merge variables as a JSON object").option("--locale <locale>","Force a localization locale").option("--tracking","Apply the company's auto-UTM link decoration").option("--out <file>","Write the HTML to a file, or - for stdout").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON")}var e3=["Renders the email exactly as it would be sent, so an external builder or dashboard can show a true preview.","Without --subscriber or --email the email renders for a sample contact and contact-specific merge tags resolve to empty values.","Unresolved merge tags are listed in the summary and under unresolvedMergeTags with --json. Nothing is called unrecognized unless the render knows the contact's attributes, since a bare {{plan}} reads the same attributes as {{subscriber.plan}}, so pass --subscriber, or --email with --attr/--attrs-json, to catch typos. Rendering a transactional email also needs --var/--vars-json, since its tags come from the variables of each send call.",'Conditional blocks that read stored subscriber state (tag, segment, list, status, event, purchases, engagement) can only be evaluated for --subscriber, or for a tag condition with --email plus --tag/--empty-tags. Anything the render cannot evaluate is rendered as false and listed under "Conditions not evaluated", because an else branch in the HTML looks the same either way.',"Links are clean by default. Pass --tracking to apply the company's auto-UTM decoration.","Per-send click redirects and the open pixel are added at send time against a real email send record, so they never appear in a render."],dKe=X5(si.command("render <id>").description("Render a campaign to email-ready HTML").option("--variant <id>","Render a specific A/B test variant")).action((e,t)=>eB({type:"campaign",id:e},t));k(dKe,{notes:e3,examples:["sequenzy campaigns render camp_123 --out preview.html","sequenzy campaigns render camp_123 --subscriber sub_123 --out -","sequenzy campaigns render camp_123 --email you@example.com --first-name Ada --var plan=Pro","sequenzy campaigns render camp_123 --email you@example.com --tag extended","sequenzy campaigns render camp_123 --email you@example.com --empty-tags","sequenzy campaigns render camp_123 --email you@example.com --attr plan=pro --attr mrr=99 --json","sequenzy campaigns render camp_123 --variant var_123 --tracking --json"]});var pKe=si.command("create <name>").description("Create a campaign").option("-s, --subject <subject>","Email subject").option("--preview-text <text>","Inbox preview text").option("--preheader-text <text>","Alias for --preview-text").option("--tracking-code <code>","Optional campaign tracking code").option("--status <status>","Initial status: draft or sent").option("--sent-at <iso-date>","Sent timestamp when creating with --status sent").option("--html <html>","Email HTML content").option("--html-file <file>","Read HTML from file").option("--blocks-json <json>","Inline JSON array of Sequenzy email blocks").option("--blocks-file <file>","Path to a JSON file with Sequenzy email blocks").option("--prompt <prompt>","Generate campaign blocks from a prompt").option("--style <style>","Prompt generation style. Pass designed or plain to force the designed or plain-text email style; other values are freeform guidance (defaults to the company's email style preference)").option("--tone <tone>","Prompt generation tone: professional, casual, friendly").option("--email-preset <preset>","Style > Format for native blocks: branded or minimal").option("--from-email <email>","Campaign From address").option("--from-name <name>","Display name for --from-email; picks or creates the identity of that name on the address").option("--sender-profile-id <id>","Existing sender profile ID; carries its own name, so omit --from-email and --from-name").option("--reply-to <email>","Campaign Reply-To address").option("--reply-to-name <name>","Display name for --reply-to; a saved profile keeps its own name and the response warns").option("--reply-profile <id>","Existing Reply-To profile ID").option("--label <labels...>","Label names to assign").option("--segment <id>","Target a saved segment").option("--lists <ids...>","Target one or more lists by ID (shorthand for targetLists type 'lists')").option("--target-lists-json <json>","Inline campaign targetLists JSON object").option("--target-lists-file <file>","Path to a JSON file with campaign targetLists").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Xr("create",{name:e,...t}));k(pKe,{notes:["--subject is required unless --prompt is provided. With --prompt, the generated subject is used unless --subject is also provided.","Use --preview-text or --preheader-text to set the inbox preview text. With --prompt, the generated preview is used unless one of these flags is provided.","Use --blocks-json or --blocks-file when you need editor-compatible blocks, including conditional content and per-block styles.","Use --email-preset branded or minimal to set Style > Format on native blocks. This is not --style, which is a prompt-generation hint.","Use --status sent only to archive an already-sent campaign; it does not send email or create per-recipient delivery history.","Do not combine prompt, HTML flags, and blocks flags in the same request.","Use --segment, --lists, or --target-lists-json to save the audience on the draft. Omit them to set targeting later with campaigns update or campaigns schedule. These audience flags are mutually exclusive.",'Target list examples include {"type":"all"}, {"type":"lists","listIds":["list_123"]}, and {"type":"segment","segmentId":"seg_123"}.'],examples:['sequenzy campaigns create "April Launch" --prompt "Announce our new analytics dashboard"','sequenzy campaigns create "April Launch" --subject "We shipped" --preheader-text "Your quick product update" --html-file ./campaign.html','sequenzy campaigns create "Imported launch" --subject "We shipped" --status sent --sent-at "2026-05-01T14:00:00Z" --html-file ./campaign.html','sequenzy campaigns create "API Launch" --subject "We shipped" --label edm api --html-file ./campaign.html','sequenzy campaigns create "Segmented Launch" --subject "We shipped" --blocks-file ./campaign-blocks.json','sequenzy campaigns create "Research note" --subject "Quick question" --blocks-file ./note.json --email-preset minimal',`sequenzy campaigns create "Partner Update" --subject "This month at HolaRuta" --target-lists-json '{"type":"lists","listIds":["list_123"]}'`]});var mKe=si.command("update <id>").description("Update a draft campaign").option("-n, --name <name>","Campaign name").option("-s, --subject <subject>","Email subject").option("--preview-text <text>","Inbox preview text").option("--preheader-text <text>","Alias for --preview-text").option("--tracking-code <code>","Optional campaign tracking code").option("--html <html>","Email HTML content").option("--html-file <file>","Read HTML from file").option("--blocks-json <json>","Inline JSON array of Sequenzy email blocks").option("--blocks-file <file>","Path to a JSON file with Sequenzy email blocks").option("--email-preset <preset>","Style > Format for native blocks: branded or minimal").option("--campaign-data-json <json>","Inline campaignData JSON object").option("--campaign-data-file <file>","Path to a JSON file with campaignData").option("--computed-lists-json <json>","Inline computedLists JSON array").option("--computed-lists-file <file>","Path to a JSON file with computedLists").option("--from-email <email>","Campaign From address").option("--from-name <name>","Display name for --from-email; picks or creates the identity of that name on the address").option("--sender-profile-id <id>","Existing sender profile ID; carries its own name, so omit --from-email and --from-name").option("--reply-to <email>","Set reply-to using an existing reply profile email").option("--reply-to-name <name>","Display name for --reply-to; a saved profile keeps its own name and the response warns").option("--reply-profile <id>","Set reply-to using a reply profile ID").option("--label <labels...>","Replace label names").option("--segment <id>","Retarget the draft at a saved segment").option("--lists <ids...>","Retarget the draft at one or more lists by ID (shorthand for targetLists type 'lists')").option("--target-lists-json <json>","Inline campaign targetLists JSON object").option("--target-lists-file <file>","Path to a JSON file with campaign targetLists").option("--clear-target-lists","Clear saved targeting so the audience is chosen when scheduling").option("--send-time-optimization","Enable per-recipient send-time optimization and clear other saved pacing modes").option("--disable-send-time-optimization","Disable send-time optimization on the draft").option("--send-time-window-hours <hours>","Set the send-time optimization window from 1-24 hours").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Xr("update",{id:e,...t}));k(mKe,{notes:["Provide at least one update flag, including subject, preview text, content, email preset, labels, reply-to, campaign data, computed lists, audience, or STO pacing.","Use --blocks-json or --blocks-file when you need editor-compatible blocks, including conditional content and per-block styles.","Use --email-preset branded or minimal to change Style > Format on native blocks without rewriting copy.","Use --campaign-data-file and --computed-lists-file to upload personalization data for repeat blocks.","Do not combine HTML flags with blocks flags in the same request.","Use either --reply-to or --reply-profile, not both.","Use --segment, --lists, or --target-lists-json to replace the saved audience, or --clear-target-lists to choose it later at schedule time. These audience flags are mutually exclusive.","Use --send-time-optimization with optional --send-time-window-hours (1-24, default 12), or --disable-send-time-optimization to turn STO off. Enabling STO clears a saved spread or recipient-timezone mode."],examples:['sequenzy campaigns update camp_123 --subject "Updated subject"','sequenzy campaigns update camp_123 --preheader-text "Updated preview"',"sequenzy campaigns update camp_123 --html-file ./campaign-v2.html","sequenzy campaigns update camp_123 --blocks-file ./campaign-v2-blocks.json","sequenzy campaigns update camp_123 --email-preset minimal","sequenzy campaigns update camp_123 --campaign-data-file ./campaign-data.json --computed-lists-file ./computed-lists.json","sequenzy campaigns update camp_123 --reply-to support@example.com","sequenzy campaigns update camp_123 --label edm api","sequenzy campaigns update camp_123 --segment seg_123","sequenzy campaigns update camp_123 --clear-target-lists","sequenzy campaigns update camp_123 --send-time-optimization --send-time-window-hours 8"]});var fKe=si.command("schedule <id>").description("Schedule a draft or scheduled campaign").requiredOption("--at <datetime>","Future ISO date/time to send, for example 2026-06-01T14:00:00Z").option("--segment <id>","Target a saved segment").option("--lists <ids...>","Target one or more lists by ID (shorthand for targetLists type 'lists')").option("--target-lists-json <json>","Inline campaign targetLists JSON object").option("--target-lists-file <file>","Path to a JSON file with campaign targetLists").option("--send-time-optimization","Enable send-time optimization for the scheduled send").option("--disable-send-time-optimization","Disable send-time optimization for the scheduled send").option("--send-time-window-hours <hours>","Set the send-time optimization window from 1-24 hours").option("--spread-over-hours <hours>","Spread delivery over 1-72 hours. Disables send-time optimization when set.").option("--repeat <interval>","Repeat the campaign weekly or monthly starting at --at. Audience membership is re-evaluated at every run.").option("--in-recipient-timezone","Deliver at --at's wall-clock time in each recipient's own timezone. Requires --scheduled-timezone.").option("--no-in-recipient-timezone","Disable recipient-timezone delivery and use the selected fixed-time pacing strategy.").option("--scheduled-timezone <zone>","IANA zone the --at wall-clock time refers to, for example America/New_York").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Xr("schedule",{id:e,...t}));k(fKe,{notes:["The campaign must be draft or already scheduled.","Omit --segment, --lists, and target lists to reuse saved campaign targeting, or default to all active subscribers.","--segment, --lists, and the target list flags are mutually exclusive.",'Target list examples include {"type":"all"}, {"type":"lists","listIds":["list_123"]}, and {"type":"segment","segmentId":"seg_123"}.',"With --repeat, the campaign becomes a recurring template: each run is duplicated and sent automatically. Use campaigns unschedule to stop the series and return it to draft, or re-schedule without --repeat to keep a one-shot send.","With --in-recipient-timezone, every contact receives the campaign at --at's wall-clock time in their own timezone; contacts without a stored timezone get it at --at in --scheduled-timezone. Not combinable with --repeat or --spread-over-hours.","Use --send-time-optimization with optional --send-time-window-hours (1-24, default 12), or --disable-send-time-optimization to turn STO off. A spread or recipient-timezone send disables STO."],examples:['sequenzy campaigns schedule camp_123 --at "2026-06-01T14:00:00Z"','sequenzy campaigns schedule camp_123 --at "2026-06-01T14:00:00Z" --segment seg_123','sequenzy campaigns schedule camp_123 --at "2026-06-01T14:00:00Z" --lists list_123',`sequenzy campaigns schedule camp_123 --at "2026-06-01T14:00:00Z" --target-lists-json '{"type":"all"}'`,'sequenzy campaigns schedule camp_123 --at "2026-06-01T14:00:00Z" --target-lists-file ./target-lists.json','sequenzy campaigns schedule camp_123 --at "2026-06-01T14:00:00Z" --spread-over-hours 6','sequenzy campaigns schedule camp_123 --at "2026-06-01T14:00:00Z" --send-time-optimization --send-time-window-hours 8','sequenzy campaigns schedule camp_123 --at "2026-06-01T14:00:00Z" --repeat monthly','sequenzy campaigns schedule camp_123 --at "2026-06-01T20:00:00-04:00" --in-recipient-timezone --scheduled-timezone America/New_York']});var gKe=si.command("test <id>").description("Send a test email for a campaign").requiredOption("--to <email>","Recipient email for the test").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Xr("test",{id:e,...t}));k(gKe,{examples:["sequenzy campaigns test camp_123 --to you@example.com"]});var xKe=si.command("cancel <id>").description("Cancel a scheduled, paused, or sending campaign").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Xr("cancel",{id:e,...t}));k(xKe,{notes:["Cancelling stops scheduled, paused, waiting-approval, and actively sending campaigns immediately.","No confirmation prompt is shown so a bad send can be stopped fast."],examples:["sequenzy campaigns cancel camp_123"]});var AKe=si.command("unschedule <id>").description("Return a scheduled campaign to draft").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Xr("unschedule",{id:e,...t}));k(AKe,{notes:["Only scheduled campaigns can be unscheduled.","Unscheduling removes the pending send and recurrence, then returns the campaign to an editable draft."],examples:["sequenzy campaigns unschedule camp_123"]});var EKe=si.command("pause <id>").description("Pause a campaign that is currently sending").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Xr("pause",{id:e,...t}));k(EKe,{notes:["Only campaigns in sending status can be paused."],examples:["sequenzy campaigns pause camp_123"]});var hKe=si.command("resume <id>").description("Resume a paused campaign").option("--spread-over-hours <hours>","Spread the remaining delivery over 1-72 hours").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Xr("resume",{id:e,...t}));k(hKe,{notes:["Only paused campaigns can be resumed."],examples:["sequenzy campaigns resume camp_123","sequenzy campaigns resume camp_123 --spread-over-hours 6"]});var yKe=si.command("delete <id>").description("Delete a campaign").option("-y, --yes","Skip the confirmation prompt").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Xr("delete",{id:e,...t}));k(yKe,{notes:["Sending, scheduled, and paused campaigns must be cancelled before they can be deleted."],examples:["sequenzy campaigns delete camp_123 --yes"]});var bKe=si.command("share <id>").description("Create or fetch the campaign's public view-in-browser link").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Xr("share",{id:e,...t}));k(bKe,{notes:["The hosted page is anonymized: sample contact, inert unsubscribe link, no open/click tracking.","Idempotent - rerunning returns the same URL until you run `campaigns unshare`."],examples:["sequenzy campaigns share camp_123"]});var CKe=si.command("unshare <id>").description("Revoke the campaign's public view-in-browser link").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Xr("unshare",{id:e,...t}));k(CKe,{notes:["The shared URL returns 404 immediately after revocation."],examples:["sequenzy campaigns unshare camp_123"]});var BKe=si.command("duplicate <id>").description("Duplicate a campaign as a new draft").option("--mode <mode>","Duplicate mode: campaign, ab_test, or variant","campaign").option("--variant-id <id>","A/B test variant to copy when --mode is variant").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Xr("duplicate",{id:e,...t}));k(BKe,{notes:["Mode campaign copies the campaign email, ab_test also copies the A/B test with all variants, and variant copies one variant's content as a plain campaign."],examples:["sequenzy campaigns duplicate camp_123","sequenzy campaigns duplicate camp_123 --mode ab_test","sequenzy campaigns duplicate camp_123 --mode variant --variant-id var_b"]});var SKe=si.command("resend-to-non-openers <id>").description("Create a draft resend to subscribers who didn't open a sent campaign").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Xr("resend-to-non-openers",{id:e,...t}));k(SKe,{notes:["Only available 6 hours after a sent campaign finishes sending.","Unavailable for imported already-sent campaigns because Sequenzy has no opens for a send it did not deliver.",`Creates a draft targeting the same audience plus a "didn't open this campaign" rule. Review the draft, then schedule or send it.`,"The response includes an estimate of how many subscribers haven't opened the original.","Every audience format keeps hard opener exclusions across manual additions and repeated resends. Live audience membership can include new subscribers.","Recreate older drafts missing excludedCampaignOpenerIds from the original campaign and review before scheduling."],examples:["sequenzy campaigns resend-to-non-openers camp_123"]});function Mle(e){return e.option("--description <text>","Goal description").option("--trigger-type <type>","Goal signal: event, attribute_change, or tag_added").option("--trigger-event-name <event>","Event goal signal name").option("--trigger-tag-name <tag>","Tag name for tag_added goals").option("--attribute-path <path>","Subscriber attribute goal path").option("--attribute-condition <condition>","changed, changed_to, or changed_from_to").option("--attribute-value <value>","Target subscriber attribute value").option("--attribute-previous-value <value>","Previous subscriber attribute value").option("--event-property-name <name>","Optional event property whose value is tracked").option("--event-property-label <label>","Display label for the tracked event property").option("--attribution-window-hours <hours>","Goal attribution window in hours")}var aS=si.command("goals").description("Manage persisted campaign conversion goals");aS.command("list <campaignId>").description("List campaign goals").option("-c, --company <id>","Company ID override").option("--json","Print raw JSON").action((e,t)=>Xr("goals",{id:e,...t}));Mle(aS.command("create <campaignId> <name>").description("Create a campaign conversion goal")).option("--active","Create the goal with conversion tracking on (default)").option("--inactive","Create the goal with conversion tracking off").option("-c, --company <id>","Company ID override").option("--json","Print raw JSON").action((e,t,n)=>Xr("goal-create",{id:e,name:t,isActive:n.active,notActive:n.inactive,...n}));Mle(aS.command("update <campaignId> <goalId>").description("Update a campaign conversion goal").option("--name <name>","Goal name")).option("--active","Enable the goal").option("--inactive","Disable the goal").option("-c, --company <id>","Company ID override").option("--json","Print raw JSON").action((e,t,n)=>Xr("goal-update",{id:e,goalId:t,isActive:n.active,notActive:n.inactive,...n}));aS.command("delete <campaignId> <goalId>").description("Delete a campaign conversion goal").option("-c, --company <id>","Company ID override").option("--json","Print raw JSON").action((e,t,n)=>Xr("goal-delete",{id:e,goalId:t,...n}));var sS=Tt.command("forms").description("Inspect and update saved signup forms").action(()=>sS.help());k(sS,{notes:["Run `forms list --json` before replacing blocks so you can preserve the complete current block array.","Saved-form updates are partial: only the options you pass change."],examples:["sequenzy forms list --json",'sequenzy forms update form_123 --button-text "Join now"',"sequenzy forms update form_123 --theme-file ./theme.json"]});var vKe=sS.command("list").description("List saved forms and their current content").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON, including content blocks").action((e)=>m9("list",e));k(vKe,{examples:["sequenzy forms list","sequenzy forms list --json"]});var _Ke=sS.command("update <id>").description("Update a saved form").option("-n, --name <name>","Saved form name").option("-l, --list <ids...>","Replacement list IDs").option("-t, --tag <ids...>","Replacement tag IDs").option("--clear-tags","Remove every saved form tag").option("--duplicate-strategy <strategy>","Existing subscriber handling: skip, merge, or overwrite").option("--headline <text>","First main-form heading text").option("--description <text>","First main-form paragraph text").option("--button-text <text>","Submit button label").option("--success-message <text>","Success screen message").option("--redirect-url <url>","HTTP/HTTPS success redirect; pass an empty string to clear").option("--theme-json <json>","Inline partial capture theme JSON").option("--theme-file <file>","Path to partial capture theme JSON").option("--blocks-json <json>","Inline complete content blocks JSON").option("--blocks-file <file>","Path to complete content blocks JSON").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>m9("update",{id:e,...t}));k(_Ke,{notes:["Use `forms list --json` and send the complete blocks array when replacing blocks.","The form must retain exactly one email field and one submit button.",'Group sibling blocks with { id, kind: "group", label, layout: "stack" | "row" | "grid" | "overlay", columns, gap, padding, overlayColor, overlayPosition, overlayShade, children }. In Overlay, gap spaces the foreground children while the direct image remains the background. Overlay needs exactly one direct image; nested images only enable their subgroup. Groups may nest three levels; IDs stay unique across the full tree.','Input blocks are { id, kind: "form-field", fieldType, name, label, required, mapsTo, options }. fieldType: text, email, phone, number, textarea, select, radio, checkbox, consent, hidden. mapsTo: email, firstName, lastName, phone, customAttribute (default; stores the answer under `name`). Choice fields need options: [{ value, label, id }] - label and id default to value.',"A hidden field with a defaultValue stores that server-owned value and ignores submitted values; a hidden field without one stores the value the page submits.",'Each block kind accepts only its own properties, and anything else is rejected by name: a custom-html block carries markup in "html" with a pixel "height", not "content".',"Use --clear-tags to replace the current tag targeting with an empty list."],examples:['sequenzy forms update form_123 --headline "Weekly planning" --button-text "Get the planner"',"sequenzy forms update form_123 --list list_123 list_456 --clear-tags","sequenzy forms update form_123 --theme-file ./form-theme.json --blocks-file ./form-blocks.json --json"]});var Cc=Tt.command("popups").description("Manage on-site signup popups").action(()=>Cc.help());k(Cc,{notes:["Popups are the on-site overlay capture surface; `forms` covers inline embedded forms.","A popup is deployed with one script tag - `popups embed <id>` prints it.","Popup updates are partial: only the options you pass change.","Trigger, targeting, schedule, frequency, and visual patches are merged key by key, so setting one key keeps the rest."],examples:["sequenzy popups list --json",'sequenzy popups create --name "Welcome offer" --template discount-offer --list list_123',"sequenzy popups update pop_123 --status draft","sequenzy popups duplicate pop_123","sequenzy popups embed pop_123"]});var IKe=Cc.command("list").description("List saved popups with their status and conversion stats").option("-c, --company <id>","Company ID override for personal API keys").option("--include-content","Include every popup's full content blocks (large)").option("--json","Print raw JSON").action((e)=>Du("list",e));k(IKe,{notes:["Content blocks are omitted by default because each popup adds roughly 1.8k characters. Use `popups get <id> --json` for one popup's full content."],examples:["sequenzy popups list","sequenzy popups list --json","sequenzy popups list --include-content --json"]});var DKe=Cc.command("get <id>").description("Show one popup with its complete content").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON, including content blocks").action((e,t)=>Du("get",{id:e,...t}));k(DKe,{notes:["Run this with --json before replacing blocks so you can preserve the complete current block array."],examples:["sequenzy popups get pop_123 --json"]});var wKe=Cc.command("create").description("Create a popup and print its embed script").requiredOption("-n, --name <name>","Internal popup name").option("--template <id>","Starting design: newsletter-modal, discount-offer, countdown-launch, minimal-slide-in, exit-lead-magnet, live-demo, launch-modal, paper-digest, stark-takeover, top-bar, announcement-bar, or fullscreen-welcome").option("--status <status>","draft or published (default: published)").option("-l, --list <ids...>","List IDs every signup is added to").option("--all-lists","Capture into every list (the default)").option("-t, --tag <ids...>","Tag IDs applied to every signup").option("--duplicate-strategy <strategy>","Existing subscriber handling: skip, merge, or overwrite").option("--headline <text>","First heading text").option("--description <text>","First paragraph text").option("--button-text <text>","Submit button label").option("--success-message <text>","Success screen message").option("--redirect-url <url>","HTTP/HTTPS success redirect").option("--presentation <mode>","modal, slide-in, floating-bar, or fullscreen").option("--placement <spot>","center, left, right, top, or bottom").option("--trigger-json <json>","Inline partial trigger JSON").option("--trigger-file <file>","Path to partial trigger JSON").option("--targeting-json <json>","Inline partial targeting JSON").option("--targeting-file <file>","Path to partial targeting JSON").option("--schedule-json <json>","Inline partial schedule JSON").option("--schedule-file <file>","Path to partial schedule JSON").option("--frequency-json <json>","Inline partial frequency JSON").option("--frequency-file <file>","Path to partial frequency JSON").option("--visual-json <json>","Inline partial visual JSON").option("--visual-file <file>","Path to partial visual JSON").option("--theme-json <json>","Inline partial capture theme JSON").option("--theme-file <file>","Path to partial capture theme JSON").option("--blocks-json <json>","Inline complete content blocks JSON").option("--blocks-file <file>","Path to complete content blocks JSON").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>Du("create",e));k(wKe,{notes:["Popups are published by default, so the embed script is live as soon as you paste it. Use --status draft to stage one.","Omit --list (or pass --all-lists) to capture into every list, matching the dashboard default.",`Trigger example: --trigger-json '{"type":"exit-intent"}' or '{"type":"delay","delaySeconds":10}'.`],examples:['sequenzy popups create --name "Welcome offer" --template discount-offer --list list_123',`sequenzy popups create --name "Exit capture" --trigger-json '{"type":"exit-intent"}' --status draft`]});var TKe=Cc.command("update <id>").description("Update a popup, including publishing and unpublishing it").option("-n, --name <name>","Internal popup name").option("--status <status>","draft or published").option("-l, --list <ids...>","Replacement list IDs").option("--all-lists","Capture into every list").option("-t, --tag <ids...>","Replacement tag IDs").option("--clear-tags","Remove every popup tag").option("--duplicate-strategy <strategy>","Existing subscriber handling: skip, merge, or overwrite").option("--headline <text>","First heading text").option("--description <text>","First paragraph text").option("--button-text <text>","Submit button label").option("--success-message <text>","Success screen message").option("--redirect-url <url>","HTTP/HTTPS success redirect; pass an empty string to clear").option("--presentation <mode>","modal, slide-in, floating-bar, or fullscreen").option("--placement <spot>","center, left, right, top, or bottom").option("--trigger-json <json>","Inline partial trigger JSON").option("--trigger-file <file>","Path to partial trigger JSON").option("--targeting-json <json>","Inline partial targeting JSON").option("--targeting-file <file>","Path to partial targeting JSON").option("--schedule-json <json>","Inline partial schedule JSON").option("--schedule-file <file>","Path to partial schedule JSON").option("--frequency-json <json>","Inline partial frequency JSON").option("--frequency-file <file>","Path to partial frequency JSON").option("--visual-json <json>","Inline partial visual JSON").option("--visual-file <file>","Path to partial visual JSON").option("--theme-json <json>","Inline partial capture theme JSON").option("--theme-file <file>","Path to partial capture theme JSON").option("--blocks-json <json>","Inline complete content blocks JSON").option("--blocks-file <file>","Path to complete content blocks JSON").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Du("update",{id:e,...t}));k(TKe,{notes:["Use `popups get <id> --json` and send the complete blocks array when replacing blocks.","The popup must retain exactly one email field and one submit button.",'Group sibling blocks with { id, kind: "group", label, layout: "stack" | "row" | "grid" | "overlay", columns, gap, padding, overlayColor, overlayPosition, overlayShade, children }. In Overlay, gap spaces the foreground children while the direct image remains the background. Overlay needs exactly one direct image; nested images only enable their subgroup. Groups may nest three levels; IDs stay unique across the full tree.','Each block kind accepts only its own properties, and anything else is rejected by name: a custom-html block carries markup in "html" with a pixel "height", not "content".',"`--status draft` stops a popup showing without deleting it or changing the embed script; `--status published` puts it back.","Use --clear-tags to replace the current tag targeting with an empty list, and --all-lists to capture into every list."],examples:['sequenzy popups update pop_123 --headline "Take 10% off" --button-text "Send my code"',"sequenzy popups update pop_123 --status draft",`sequenzy popups update pop_123 --targeting-json '{"paths":["/pricing"],"device":"desktop"}'`]});var kKe=Cc.command("duplicate <id>").description("Copy a popup into a new draft with its own stats").option("-n, --name <name>",'Name for the copy (default: "... (copy)")').option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Du("duplicate",{id:e,...t}));k(kKe,{notes:["The copy starts as a draft with its own view and conversion counts, so the original keeps showing and keeps its stats.","Publish the copy with `popups update <new-id> --status published`."],examples:["sequenzy popups duplicate pop_123",'sequenzy popups duplicate pop_123 --name "Welcome offer v2"']});var RKe=Cc.command("embed <id>").description("Print a published popup's embed snippets").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON, including React, WordPress, and Shopify").action((e,t)=>Du("embed",{id:e,...t}));k(RKe,{notes:["The popup must be published; publish it with `popups update <id> --status published`.","The snippet carries no API key - trigger, targeting, and audience rules stay server-side."],examples:["sequenzy popups embed pop_123","sequenzy popups embed pop_123 --json"]});var FKe=Cc.command("delete <id>").description("Permanently delete a popup and its stats").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Du("delete",{id:e,...t}));k(FKe,{notes:["This also deletes the popup's view and conversion counts. To stop it showing while keeping its stats, use `popups update <id> --status draft`.","Subscribers the popup already captured are not affected."],examples:["sequenzy popups delete pop_123"]});var Lo=Tt.command("landing-pages").description("Manage landing pages").action(()=>Lo.help());k(Lo,{notes:["Landing pages are created as drafts. Publish only after reviewing the page.","Use landing-pages render to open a signed, unlisted preview of a draft without publishing.","Use --content-json or --content-file for full editor-compatible landing page content.","Custom subdomains require a CNAME record pointing to pages.sequenzydns.com; root domains require an A record pointing to 76.76.21.21."],examples:["sequenzy landing-pages list --company comp_123",'sequenzy landing-pages create "Product Waitlist" --template waitlist',"sequenzy landing-pages render lp_123","sequenzy landing-pages stats lp_123 --period 30d","sequenzy landing-pages publish lp_123","sequenzy landing-pages connect-domain pages.example.com"]});var NKe=Lo.command("list").description("List landing pages").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>Xo("list",e));k(NKe,{examples:["sequenzy landing-pages list --company comp_123"]});var PKe=Lo.command("get <id>").description("Get landing page details").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Xo("get",{id:e,...t}));k(PKe,{examples:["sequenzy landing-pages get lp_123 --company comp_123"]});var OKe=Lo.command("stats <id>").description("Get landing page visit analytics").option("-c, --company <id>","Company ID override for personal API keys").option("--period <period>","Time window: 7d, 30d, 90d, or all").option("--start <timestamp>","Custom range start, ISO 8601").option("--end <timestamp>","Custom range end, ISO 8601").option("--include-bots","Include known crawlers in visit totals").option("--json","Print raw JSON").action((e,t)=>Xo("stats",{id:e,...t}));k(OKe,{notes:["Reports visits, unique visits, clicks, subscribes, conversion rate, referrers, and crawler hits. Preview URLs and the editor are never counted."],examples:["sequenzy landing-pages stats lp_123 --period 30d"]});var LKe=Lo.command("render <id>").description("Preview a landing page without publishing it").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Xo("render",{id:e,...t}));k(LKe,{notes:["Returns a signed, unlisted preview URL that works for drafts. Signup forms do not collect contacts until you publish."],examples:["sequenzy landing-pages render lp_123"]});var MKe=Lo.command("create [name]").description("Create a draft landing page").option("--slug <slug>","Landing page URL slug").option("--template <template>","Template key, e.g. waitlist").option("--content-json <json>","Inline landing page content JSON").option("--content-file <file>","Path to landing page content JSON").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Xo("create",{name:e,...t}));k(MKe,{notes:["When --content-json/--content-file is omitted, a valid default page is generated from --template."],examples:['sequenzy landing-pages create "Product Waitlist" --template waitlist','sequenzy landing-pages create "Launch Page" --slug launch --content-file ./landing-page.json']});var UKe=Lo.command("update <id>").description("Edit a landing page").option("-n, --name <name>","Landing page name").option("--slug <slug>","Landing page URL slug").option("--content-json <json>","Inline landing page content JSON").option("--content-file <file>","Path to landing page content JSON").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Xo("update",{id:e,...t}));k(UKe,{examples:['sequenzy landing-pages update lp_123 --name "Updated page"',"sequenzy landing-pages update lp_123 --content-file ./landing-page.json"]});var $Ke=Lo.command("publish <id>").description("Publish a landing page").option("-n, --name <name>","Landing page name").option("--slug <slug>","Landing page URL slug").option("--content-json <json>","Inline landing page content JSON").option("--content-file <file>","Path to landing page content JSON").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Xo("publish",{id:e,...t}));k($Ke,{examples:["sequenzy landing-pages publish lp_123"]});var qKe=Lo.command("unpublish <id>").description("Unpublish a landing page").option("-n, --name <name>","Landing page name").option("--slug <slug>","Landing page URL slug").option("--content-json <json>","Inline landing page content JSON").option("--content-file <file>","Path to landing page content JSON").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Xo("unpublish",{id:e,...t}));k(qKe,{examples:["sequenzy landing-pages unpublish lp_123"]});var QKe=Lo.command("duplicate <id>").description("Duplicate a landing page as a new draft").option("-n, --name <name>","Name for the copy").option("--slug <slug>","URL slug for the copy").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Xo("duplicate",{id:e,...t}));k(QKe,{notes:["The copy is always created as a draft with its own slug, views, and conversions.",'Without --name, the copy is named "<original name> (copy)".'],examples:["sequenzy landing-pages duplicate lp_123",'sequenzy landing-pages duplicate lp_123 --name "Spring Sale v2" --slug spring-sale-v2']});var zKe=Lo.command("delete <id>").description("Delete a landing page").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Xo("delete",{id:e,...t}));k(zKe,{examples:["sequenzy landing-pages delete lp_123"]});var HKe=Lo.command("connect-domain <domain>").description("Connect a workspace or dedicated landing page domain").option("--landing-page <id>","Connect the domain only to this landing page").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Xo("connect-domain",{domain:e,...t}));k(HKe,{examples:["sequenzy landing-pages connect-domain pages.example.com --company comp_123","sequenzy landing-pages connect-domain offer.example.com --landing-page lp_123","sequenzy landing-pages connect-domain example.com --landing-page lp_123"]});var jKe=Lo.command("update-domain-settings").description("Update or verify landing page domain settings").option("--domain <domain>","Replace the connected landing page domain").option("--verify","Refresh domain verification state").option("--landing-page <id>","Target a dedicated landing page domain").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>Xo("update-domain-settings",e));k(jKe,{examples:["sequenzy landing-pages update-domain-settings --domain pages.example.com","sequenzy landing-pages update-domain-settings --verify","sequenzy landing-pages update-domain-settings --landing-page lp_123 --verify"]});var GKe=Lo.command("remove-domain <landing-page-id>").description("Remove a dedicated domain from one landing page").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Xo("remove-domain",{landingPage:e,...t}));k(GKe,{examples:["sequenzy landing-pages remove-domain lp_123"]});var or=Tt.command("sequences").description("Manage email sequences").action(()=>or.help());k(or,{notes:["The CLI supports both AI goal-based sequence creation and explicit-step creation.","Trigger-specific options depend on --trigger. For example: contact_added needs --list-id (or --list-ids for several lists), tag_added needs --tag-name (or --tag-names), inactivity needs --event-name and --inactive-days.","Use --goal for AI generation, or --steps-file / --emails-file with JSON arrays that match the API step objects.","Use --enrollment-mode matching_field for product- or variant-specific event sequences.",'Explicit --steps-file input can include dynamic Stripe or Shopify discount actions with {"type":"create_discount","discount":{"provider":"stripe","discountType":"percent","percentOff":20,"duration":"once","appliesToAllPlans":true}}; the code is created when each subscriber reaches the step, and later emails can use {{discount.code}}.',"Discount action sequences require the selected provider integration, such as Stripe or Shopify, before enabling.",lA],examples:["sequenzy sequences list --company comp_123",'sequenzy sequences create onboarding --trigger event_received --event-name signup.completed --goal "Guide new users to activation"',"sequenzy sequences create onboarding --trigger contact_added --list-id list_123 --steps-file ./steps.json","sequenzy sequences update seq_123 --steps-file ./sequence-updates.json","sequenzy sequences enable seq_123","sequenzy sequences simulate seq_123","sequenzy sequences simulate seq_123 --email maya@example.com"]});var VKe=or.command("list").description("List sequences").option("--status <status>","Filter by draft, active, paused, or archived").option("--search <text>","Search sequence names and descriptions").option("--label <labels...>","Filter by dashboard label names").option("--limit <count>","Page size from 1 to 100").option("--offset <count>","Zero-based result offset").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>ir("list",e));k(VKe,{examples:["sequenzy sequences list --company comp_123"]});var WKe=or.command("get <id>").description("Get sequence details").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>ir("get",{id:e,...t}));k(WKe,{examples:["sequenzy sequences get seq_123 --company comp_123"]});var KKe=X5(or.command("render <id>").description("Render one sequence email step to email-ready HTML").requiredOption("--node <nodeId>","Email step node ID from sequences get").option("--variant <id>","Render a specific A/B test variant")).action((e,t)=>eB({type:"sequence-step",sequenceId:e,nodeId:t.node},t));k(KKe,{notes:e3,examples:["sequenzy sequences render seq_123 --node node_1 --out preview.html","sequenzy sequences render seq_123 --node node_1 --subscriber sub_123 --json","sequenzy sequences render seq_123 --node node_1 --email you@example.com --tag extended"]});var JKe=or.command("test <id>").description("Send a test email for one saved sequence step").requiredOption("--node <nodeId>","Email step node ID from sequences get").requiredOption("--to <emails...>","One or more reviewer email addresses (maximum 10)").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>ir("test",{id:e,...t,nodeId:t.node}));k(JKe,{notes:["This sends only the selected saved email step; it does not enable the sequence or enroll subscribers.","Use sequences get first to find the email step nodeId."],examples:["sequenzy sequences test seq_123 --node node_email_2 --to reviewer@example.com","sequenzy sequences test seq_123 --node node_email_2 --to reviewer-one@example.com reviewer-two@example.com"]});or.command("test-run <id>").description("Run real sequence actions for one subscriber with optional event properties").requiredOption("--subscriber <id>","Active subscriber ID").option("--event-properties <json>","Trigger event properties as a JSON object, including arrays and nested objects").option("--speed-multiplier <number>","Delay acceleration, 60 to 10000","120").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>ir("test-run",{id:e,...t}));or.command("test-run-get <id> <runId>").description("Inspect live sequence test status and step logs").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON including step logs").action((e,t,n)=>ir("test-run-get",{id:e,runId:t,...n}));var YKe=or.command("simulate <id>").description("Preview who a sequence would enroll and, optionally, one contact's path. Does not send mail or enroll anyone.").option("--subscriber <id>","Walk the graph for this stored subscriber").option("--email <address>","Walk the graph for this stored subscriber email").option("--limit <number>","Maximum current matches to sample (1-25)").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>ir("simulate",{id:e,...t,simulateEmail:typeof t.email==="string"?t.email:void 0}));k(YKe,{notes:["Without --subscriber/--email this reports who currently matches and whether the sequence is ready. Nobody is auto-enrolled when you activate; list, tag, and segment matches can still be enrolled by hand.","This does not send mail, mint discounts, or write tags. Use sequences test to send one saved email step to a reviewer.","Readiness errors are the same checks that should be fixed before sequences enable."],examples:["sequenzy sequences simulate seq_123","sequenzy sequences simulate seq_123 --email maya@example.com","sequenzy sequences simulate seq_123 --subscriber sub_123 --limit 25 --json"]});function Ule(e){return e.option("--description <text>","Goal description").option("--trigger-type <type>","Goal signal: event, attribute_change, or tag_added").option("--trigger-event-name <event>","Event goal signal name").option("--trigger-tag-name <tag>","Tag name for tag_added goals").option("--attribute-path <path>","Subscriber attribute goal path").option("--attribute-condition <condition>","changed, changed_to, or changed_from_to").option("--attribute-value <value>","Target subscriber attribute value").option("--attribute-previous-value <value>","Previous subscriber attribute value").option("--event-property-name <name>","Optional event property whose value is tracked").option("--event-property-label <label>","Display label for the tracked event property").option("--attribution-window-hours <hours>","Goal attribution window in hours")}var lS=or.command("goals").description("Manage persisted sequence conversion goals");lS.command("list <sequenceId>").description("List sequence goals").option("-c, --company <id>","Company ID override").option("--json","Print raw JSON").action((e,t)=>ir("goals",{id:e,...t}));Ule(lS.command("create <sequenceId> <name>").description("Create a sequence conversion goal")).option("--active","Create the goal with conversion tracking on (default)").option("--inactive","Create the goal with conversion tracking off").option("-c, --company <id>","Company ID override").option("--json","Print raw JSON").action((e,t,n)=>ir("goal-create",{id:e,name:t,isActive:n.active,notActive:n.inactive,...n}));Ule(lS.command("update <sequenceId> <goalId>").description("Update a sequence conversion goal").option("--name <name>","Goal name")).option("--active","Enable the goal").option("--inactive","Disable the goal").option("-c, --company <id>","Company ID override").option("--json","Print raw JSON").action((e,t,n)=>ir("goal-update",{id:e,goalId:t,isActive:n.active,notActive:n.inactive,...n}));lS.command("delete <sequenceId> <goalId>").description("Delete a sequence conversion goal").option("-c, --company <id>","Company ID override").option("--json","Print raw JSON").action((e,t,n)=>ir("goal-delete",{id:e,goalId:t,...n}));var t3=or.command("webhook").description("Manage a sequence inbound webhook endpoint");t3.command("get <sequenceId>").description("Read a sequence inbound webhook URL and setup status").option("-c, --company <id>","Company ID override").option("--json","Print raw JSON").action((e,t)=>ir("webhook-get",{id:e,...t}));t3.command("configure <sequenceId>").description("Create or update a sequence inbound webhook endpoint").option("--field-mapping-json <json>","Inline mapping with email, optional names, and property paths").option("--field-mapping-file <file>","JSON file containing the webhook field mapping").option("--sample-payload-json <json>","Inline representative webhook payload").option("--sample-payload-file <file>","JSON file containing a representative webhook payload").option("--clear-field-mapping","Clear the saved mapping and return the endpoint to pending setup").option("--clear-sample-payload","Clear the saved sample payload").option("-c, --company <id>","Company ID override").option("--json","Print raw JSON").action((e,t)=>ir("webhook-configure",{id:e,...t}));t3.command("rotate <sequenceId>").description("Rotate a sequence inbound webhook secret and URL").option("-c, --company <id>","Company ID override").option("--json","Print raw JSON").action((e,t)=>ir("webhook-rotate",{id:e,...t}));var ZKe=or.command("create <name>").description("Create a blank, AI-generated, or explicit-step sequence").option("-t, --trigger <trigger>","Sequence trigger type (defaults to contact_added)").option("--description <text>","Sequence description").option("--label <labels...>","Dashboard label names to assign").option("--user-cancellable","Allow subscribers to cancel enrollment").option("--not-user-cancellable","Prevent subscribers from cancelling enrollment").option("--from-email <email>","Sequence-level From address").option("--from-name <name>","Display name for --from-email; picks or creates the identity of that name on the address").option("--sender-profile-id <id>",Yse).option("--reply-to <email>","Sequence-level Reply-To address").option("--reply-to-name <name>","Display name for --reply-to; a saved profile keeps its own name and the response warns").option("--reply-profile-id <id>","Existing reply profile ID; carries its own name, so omit --reply-to and --reply-to-name").option("--bcc-emails <emails>","Comma-separated sequence-level BCC addresses (max 10)").option("-g, --goal <goal>","AI generation goal for the sequence").option("--email-count <count>","Number of AI-generated emails when using --goal (1-10)").option("--duration-days <days>","Total duration in days for AI-generated sequence delays when using --goal").option("--email-style <style>","Style for AI-generated emails when using --goal: visual (designed) or plain (text-first)").option("--enrollment-mode <mode>","Enrollment mode: unlimited, one_time, or matching_field").option("--enrollment-field-path <path>","Event property dot path used by matching_field enrollment").option("--sending-window-start <time>","Earliest local send time for sequence emails (HH:mm, e.g. 08:00)").option("--sending-window-end <time>","Latest local send cutoff for sequence emails (HH:mm, e.g. 20:00)").option("--sending-window-timezone <timezone>","IANA timezone for the sequence sending window, e.g. Europe/Kiev").option("--sending-window-days <days>","Comma-separated days for sequence sends, e.g. weekdays or mon,tue,wed,thu,fri").option("--list-id <id>","List ID for contact_added triggers").option("--list-ids <ids...>","Several list IDs for contact_added; joining any one of them enrols the contact").option("--list-scope <scope>","contact_added with no list: any_contact (default, includes contacts in no list) or any_list").option("--tag-name <name>","Tag name for tag_added triggers").option("--tag-names <names...>","Several tag names for tag_added; receiving any one of them enrols the contact").option("--segment-id <id>","Segment ID for segment_entered triggers").option("--stop-on-segment-exit","Cancel active enrollments when a contact leaves the trigger segment").option("--event-name <name>","Event name for event_received, inbound_webhook, inactivity, and frequency triggers").option("--integration-slug <slug>","Inbound webhook integration slug").option("--integration-event-key <key>","Inbound webhook integration event key").option("--custom-integration-json <json>","Inline custom inbound webhook integration descriptor").option("--custom-integration-file <file>","JSON file with a custom inbound webhook integration descriptor").option("--property-filters-json <json>","Inline JSON array of event property filters for event_received triggers").option("--property-filters-file <file>","Path to a JSON file with event property filters").option("--inactive-days <days>","Days of inactivity for inactivity triggers").option("--inactivity-baseline <baseline>","Inactivity baseline: sequence_created_at or subscriber_created_at").option("--min-count <count>","Minimum event count for frequency triggers").option("--time-window-days <days>","Time window for frequency triggers").option("--steps-json <json>","Inline JSON array of sequence steps").option("--steps-file <file>","Path to a JSON file with sequence steps").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>ir("create",{name:e,...t}));k(ZKe,{notes:["Provide --goal for AI generation, --steps-json/--steps-file for explicit content, or omit both for a blank dashboard-compatible draft.","Each explicit email step needs subject plus either html or blocks. Discount action steps use type=create_discount to dynamically create a code before an email that references {{discount.code}}.",'SMS steps use type="sms" with a plain-text "text" field (optional label, ineligibleAction skip|exit, imageUrls). Generate copy with `sequenzy generate sms` and check `sequenzy sms settings` first.','Update Subscriber steps use type="update_subscriber", nodeType="action_update_attributes", and config values such as {{event.plan}}, {{event.amount}}, or {{event.active}}.',"For migrated provider flows, put the exact provider HTML in each step's html field; Sequenzy stores it as raw HTML. Use delay or delayMs for waits.",'A step may use waitUntilWeekday to hold until the next weekday window, e.g. {"waitUntilWeekday":{"day":"sunday","startTime":"09:00","endTime":"12:00","timezone":"America/Los_Angeles"},"subject":"Weekly digest","html":"..."}. Contacts already inside the window continue immediately; put it before the first email to guarantee the send day at the graph level.',"Prefer --steps-file for anything non-trivial. The CLI passes the JSON through to the API.","Shopify replenishment and back-in-stock event sequences default to matching_field.","Use --enrollment-field-path for custom event keys such as order.id or product.providerVariantId.","Use --property-filters-json/--property-filters-file with event_received triggers to only start the sequence when the event properties match, e.g. scope a purchase sequence to one product.","Use --sending-window-start/--sending-window-end/--sending-window-timezone to hold every email step until the allowed local send window. Add --sending-window-days weekdays for working days only.","Discount action sequences require the selected provider integration, such as Stripe or Shopify, before enabling."],examples:['sequenzy sequences create onboarding --trigger event_received --event-name signup.completed --goal "Guide new users to activation" --email-count 4 --duration-days 10','sequenzy sequences create trial --trigger tag_added --tag-name trial --goal "Convert trial users" --sending-window-start 08:00 --sending-window-end 20:00 --sending-window-timezone Europe/Kiev --sending-window-days weekdays',"sequenzy sequences create restock --trigger event_received --event-name ecommerce.back_in_stock --enrollment-mode matching_field --steps-file ./steps.json",`sequenzy sequences create deliver-ebook --trigger event_received --event-name ecommerce.order_placed --property-filters-json '[{"path":"lineItems[].providerProductId","operator":"equals","value":"prod_123"}]' --steps-file ./steps.json`,"sequenzy sequences create post-purchase --trigger event_received --event-name ecommerce.order_placed --enrollment-mode matching_field --enrollment-field-path order.id --steps-file ./steps.json","sequenzy sequences create onboarding --trigger contact_added --list-id list_123 --steps-file ./steps.json",`sequenzy sequences create purchase-profile --trigger event_received --event-name saas.purchase --steps-json '[{"type":"update_subscriber","nodeType":"action_update_attributes","config":{"customAttributeUpdates":[{"name":"plan","value":"{{event.plan}}","valueType":"text"}]}},{"subject":"Thanks","html":"<p>Purchase received.</p>"}]'`,"sequenzy sequences create rescue --trigger inactivity --event-name login --inactive-days 14 --steps-file ./steps.json"]});var XKe=or.command("update <id>").description("Update sequence metadata, email step content, stop conditions, or paths").option("-n, --name <name>","Sequence name").option("--description <text>","Sequence description").option("--label <labels...>","Replace dashboard label names").option("--clear-labels","Remove all dashboard labels from the sequence").option("--user-cancellable","Allow subscribers to cancel enrollment").option("--not-user-cancellable","Prevent subscribers from cancelling enrollment").option("--trigger <trigger>","Replace the sequence trigger type").option("--list-id <id>","List ID for contact_added").option("--list-ids <ids...>","Several list IDs for contact_added; joining any one of them enrols the contact").option("--list-scope <scope>","contact_added with no list: any_contact (default, includes contacts in no list) or any_list").option("--tag-name <name>","Tag name for tag_added").option("--tag-names <names...>","Several tag names for tag_added; receiving any one of them enrols the contact").option("--segment-id <id>","Segment ID for segment_entered").option("--stop-on-segment-exit","Stop active enrollments when a contact leaves the trigger segment").option("--no-stop-on-segment-exit","Keep active enrollments running when a contact leaves the trigger segment").option("--event-name <event>","Event name for event, webhook, inactivity, or frequency triggers").option("--integration-slug <slug>","Catalog integration slug for inbound_webhook").option("--integration-event-key <key>","Catalog event key for inbound_webhook").option("--custom-integration-json <json>","Inline custom inbound webhook integration descriptor").option("--custom-integration-file <file>","JSON file containing a custom inbound webhook integration descriptor").option("--property-filters-json <json>","Inline event trigger property filters").option("--property-filters-file <file>","JSON file containing event trigger property filters").option("--inactive-days <days>","Days required for inactivity").option("--inactivity-baseline <baseline>","Inactivity baseline: sequence_created_at or subscriber_created_at").option("--min-count <count>","Minimum frequency event count").option("--time-window-days <days>","Frequency lookback window").option("--from-email <email>","Sequence-level From address").option("--from-name <name>","Display name for --from-email; picks or creates the identity of that name on the address").option("--sender-profile-id <id>",Zse).option("--reply-to <email>","Sequence-level Reply-To address").option("--reply-to-name <name>","Display name for --reply-to; a saved profile keeps its own name and the response warns").option("--reply-profile-id <id>","Existing reply profile ID; carries its own name, so omit --reply-to and --reply-to-name").option("--enrollment-mode <mode>","Enrollment mode: unlimited, one_time, or matching_field").option("--enrollment-field-path <path>","Event property dot path used by matching_field enrollment").option("--pause-new-enrollments","Stop new sequence enrollments while current recipients continue").option("--resume-new-enrollments","Resume new sequence enrollments while current recipients continue").option("--sending-window-start <time>","Earliest local send time for sequence emails (HH:mm, e.g. 08:00)").option("--sending-window-end <time>","Latest local send cutoff for sequence emails (HH:mm, e.g. 20:00)").option("--sending-window-timezone <timezone>","IANA timezone for the sequence sending window, e.g. Europe/Kiev").option("--sending-window-days <days>","Comma-separated days for sequence sends, e.g. weekdays or mon,tue,wed,thu,fri").option("--clear-sending-window","Disable the sequence sending window").option("--bcc-emails <emails>","Comma-separated BCC addresses copied on every email this sequence sends, e.g. a support inbox (max 10)").option("--clear-bcc-emails","Remove the sequence BCC addresses").option("--confirm-structural-change","Confirm an insertSteps or branch structural edit to an active sequence").option("--confirm-live-change","Confirm node config edits to an active sequence").option("--steps-json <json>","Inline JSON array of step updates").option("--steps-file <file>","Path to a JSON file with step updates").option("--emails-json <json>","Inline JSON array of email updates; native-block emails, including supported custom HTML blocks, may set emailPreset to branded or minimal, and emailTheme patches that one step's theme (null clears the override)").option("--emails-file <file>","Path to a JSON file with email updates; native-block emails, including supported custom HTML blocks, may set emailPreset to branded or minimal, and emailTheme patches that one step's theme (null clears the override)").option("--sms-steps-json <json>","Inline JSON array of SMS step content updates (targeted by nodeId)").option("--sms-steps-file <file>","Path to a JSON file with SMS step content updates").option("--subscriber-update-steps-json <json>","Inline JSON array of Update Subscriber configs targeted by nodeId").option("--subscriber-update-steps-file <file>","Path to a JSON file with Update Subscriber configs targeted by nodeId").option("--branch-json <json>","Inline JSON object for inserting an if/else branch, or a random A/B split, with path steps and/or existing target node IDs").option("--branch-file <file>","Path to a JSON file for inserting an if/else branch with path steps and/or existing target node IDs").option("--insert-steps-json <json>","Inline JSON object for inserting new linear steps").option("--insert-steps-file <file>","Path to a JSON file for inserting new linear steps").option("--node-updates-json <json>","Inline typed nodeUpdates array from sequences get; action_email changes accept emailTheme to restyle one step without touching the company theme").option("--node-updates-file <file>","JSON file containing typed nodeUpdates").option("--graph-edit-json <json>","Inline graphEdit object using the current graphRevision").option("--graph-edit-file <file>","JSON file containing a graphEdit operation").option("--stop-condition-json <json>","Inline JSON object for updating the sequence stop condition").option("--stop-condition-file <file>","Path to a JSON file for updating the sequence stop condition").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>ir("update",{id:e,...t}));k(XKe,{notes:["Use either the steps form or the emails form, not both.","Each update entry can target a step by nodeId, emailId, or by array order.","Use --insert-steps-json/--insert-steps-file to add new linear steps, including outbound webhooks and AI steps; use --steps-* or --emails-* to edit existing email steps.",'AI steps generate a short per-contact fragment at send time (a sentence or two that a later email inserts, not a whole email): {"nodeType":"action_ai","config":{"prompt":"Write a winback subject for {{first_name}}","resultKey":"winback","outputFields":[{"key":"subject_line","fallback":"We miss you"}]}}. Later steps use {{ai.winback.subject_line}}. Opt into context with includeTags, includeEventProperties, includeRecentEvents (plus recentEventLimit, 1-50), and includeAttributes.','Inserted steps can be SMS steps: {"type":"sms","text":"...","delay":{"days":1}}. Generate copy with `sequenzy generate sms`.','Edit existing SMS steps with --sms-steps-json/--sms-steps-file: [{"nodeId":"node_sms","text":"New message"}]. Entries may also update label and ineligibleAction.','Edit existing Update Subscriber steps with --subscriber-update-steps-json/--subscriber-update-steps-file: [{"nodeId":"node_update","config":{"customAttributeUpdates":[{"name":"plan","value":"{{event.plan}}","valueType":"text"}]}}].',"For migrated provider flow steps, use html/htmlContent to preserve exact HTML as raw HTML and use delay or delayMs for waits.",'A step may use waitUntilWeekday to hold until the next weekday window, e.g. {"type":"delay","waitUntilWeekday":{"day":"sunday","startTime":"09:00","endTime":"12:00","timezone":"America/Los_Angeles"}}. Contacts already inside the window continue immediately. Place it before the first email to guarantee the send day at the graph level (a sequence sendingWindow only shifts send times).',"When inserting steps or branches into an active sequence, pass --confirm-structural-change after confirming the live-flow impact.",'Use --stop-condition-json/--stop-condition-file with values like {"type":"has_tag","value":"customer"}; use {"type":"none","value":null} to clear it.','event_received stop conditions only match events received after enrollment. Add matchConfig to narrow them: {"type":"event_received","value":"product.quota_used","matchConfig":{"mode":"event_property_filter","propertyFilters":[{"path":"quota_used","operator":"greater_than","value":1}]}} stops only when a later event matches every filter (operators: exists, not_exists, equals, not_equals, one_of, contains, greater_than, less_than). {"mode":"event_property","rules":[{"entryFieldPath":"orderId","eventFieldPath":"orderId"}]} stops only when the stop event matches the enrolling event on that field. For field_changed, {"mode":"field_value","operator":"equals","value":"pro"} stops only when the field changes to a matching value.','Stop conditions are re-evaluated before every step, including the first, so {"type":"does_not_have_tag","value":"allowlist"} and {"type":"removed_from_list","value":"list_123"} act as an allowlist: contacts without that tag or list are cancelled before any step sends. Use this to point a live trigger at a chosen set of contacts without editing the graph. Guarded-out contacts still enroll and are then cancelled at the trigger node, so they appear as cancellations there rather than in the active or waiting enrollment counts.',"Clearing the guard does not retry the contacts it already cancelled: nothing re-enrolls them, so they only receive the sequence if the trigger fires for them again, which one-shot triggers never do. On the one_time enrollment mode a repeated trigger is ignored too, because enrollment is blocked by the existence of any earlier run rather than by its outcome. Guard a duplicate sequence and leave the real one ungated, or enroll the missed contacts afterwards with `sequenzy sequences enroll`, which skips the one_time check.","Branch condition types include has_tag, does_not_have_tag, in_list, in_segment, event_received, link_clicked, and field_* comparisons. Use activityScope (this_sequence, previous_email, ever) for event and click checks.","Branch paths may set targetNodeId and elseTargetNodeId to wire directly to existing nodes from sequences get, including the completion node. If path steps are also provided, they run before that target.",'Set "splitMode":"random" with "randomPercentages" to route by percentage instead of by condition, which runs a concurrent A/B test inside the flow (for example two abandoned-cart offers at once instead of one after the other). Each branch then omits conditionType and condition-specific fields, the percentages must sum to 100, and no else path is allowed. To A/B test the content of a single existing email step and have a winner picked automatically, use `sequenzy ab-tests create --automation-node-id` instead.',"Use --clear-sending-window to remove a configured send window.","Use --bcc-emails with a comma-separated list to blind-copy team inboxes on every sequence email; use --clear-bcc-emails to remove them."],examples:['sequenzy sequences update seq_123 --name "User Onboarding"',"sequenzy sequences update seq_123 --pause-new-enrollments","sequenzy sequences update seq_123 --resume-new-enrollments","sequenzy sequences update seq_123 --enrollment-mode matching_field","sequenzy sequences update seq_123 --enrollment-field-path order.id","sequenzy sequences update seq_123 --sending-window-start 08:00 --sending-window-end 20:00 --sending-window-timezone Europe/Kiev --sending-window-days weekdays","sequenzy sequences update seq_123 --clear-sending-window",'sequenzy sequences update seq_123 --bcc-emails "cs-team@yourcompany.com, founder@yourcompany.com"',"sequenzy sequences update seq_123 --clear-bcc-emails","sequenzy sequences update seq_123 --steps-file ./sequence-updates.json",`sequenzy sequences update seq_123 --stop-condition-json '{"type":"has_tag","value":"customer"}'`,`sequenzy sequences update seq_123 --stop-condition-json '{"type":"does_not_have_tag","value":"allowlist"}'`,`sequenzy sequences update seq_123 --stop-condition-json '{"type":"event_received","value":"product.quota_used","matchConfig":{"mode":"event_property_filter","propertyFilters":[{"path":"quota_used","operator":"greater_than","value":1}]}}'`,`sequenzy sequences update seq_123 --insert-steps-json '{"afterNodeId":"node_email","steps":[{"delay":{"days":1},"subject":"Migration check-in","html":"<p>Need help migrating?</p>"}]}' --confirm-structural-change`,`sequenzy sequences update seq_123 --insert-steps-json '{"afterNodeId":"node_email","steps":[{"nodeType":"logic_wait_for_event","config":{"label":"Wait for reply","eventName":"email.replied","timeoutDays":5,"timeoutAction":"continue"}}]}'`,`sequenzy sequences update seq_123 --insert-steps-json '{"afterNodeId":"node_trigger","steps":[{"nodeType":"action_ai","config":{"prompt":"Write a short winback subject line for {{first_name}} who cancelled because {{event.reason}}.","resultKey":"winback","outputFields":[{"key":"subject_line","maxLength":60,"fallback":"We miss you"}],"includeEventProperties":true}}]}' --confirm-structural-change`,`sequenzy sequences update seq_123 --branch-json '{"afterNodeId":"node_email","branches":[{"conditionType":"link_clicked","linkUrl":"project-invites","activityScope":"previous_email","steps":[{"subject":"Invite accepted","html":"<p>Thanks for accepting.</p>"}]}],"elseSteps":[{"subject":"Reminder","html":"<p>Please accept your invite.</p>"}]}'`,`sequenzy sequences update seq_123 --branch-json '{"afterNodeId":"node_email_1","branches":[{"id":"replied","conditionType":"event_received","eventName":"email.replied","activityScope":"this_sequence","targetNodeId":"node_complete"}],"elseTargetNodeId":"node_email_2"}'`,`sequenzy sequences update seq_123 --branch-json '{"afterNodeId":"node_cart_wait","splitMode":"random","randomPercentages":[50,50],"branches":[{"id":"discount","label":"10% off","steps":[{"subject":"Here is 10% off","html":"<p>Complete your order.</p>"}]},{"id":"bonus","label":"Free shipping + gift","steps":[{"subject":"Free shipping on us","html":"<p>Complete your order.</p>"}]}]}' --confirm-structural-change`,"sequenzy sequences update seq_123 --branch-file ./branch.json",`sequenzy sequences update seq_123 --sms-steps-json '[{"nodeId":"node_sms","text":"Hey {{FIRST_NAME}}, your order shipped!"}]'`,`sequenzy sequences update seq_123 --subscriber-update-steps-json '[{"nodeId":"node_update","config":{"customAttributeUpdates":[{"name":"mrr","value":"{{event.amount}}","valueType":"number"}]}}]'`]});var eJe=or.command("enable <id>").description("Enable a sequence").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>ir("enable",{id:e,...t}));k(eJe,{examples:["sequenzy sequences enable seq_123"]});var tJe=or.command("disable <id>").description("Disable a sequence").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>ir("disable",{id:e,...t}));k(tJe,{examples:["sequenzy sequences disable seq_123"]});var nJe=or.command("duplicate <id>").description("Create an independent draft copy of a sequence").option("-n, --name <name>","Name for the copied sequence").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>ir("duplicate",{id:e,...t}));k(nJe,{notes:["Email templates, graph topology, and sequence A/B tests are copied independently."],examples:["sequenzy sequences duplicate seq_123",'sequenzy sequences duplicate seq_123 --name "Welcome Series v2"']});var rJe=or.command("archive <id>").description("Archive a sequence").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>ir("archive",{id:e,...t}));k(rJe,{examples:["sequenzy sequences archive seq_123"]});var iJe=or.command("unarchive <id>").description("Restore an archived sequence as a draft").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>ir("unarchive",{id:e,...t}));k(iJe,{examples:["sequenzy sequences unarchive seq_123"]});var oJe=or.command("enrollments <id>").description("List the contacts currently enrolled in a sequence").option("--status <statuses...>","Enrollment statuses to include (active, waiting, completed, failed, cancelled); defaults to active and waiting").option("--node-id <nodeIds...>","Only show enrollments sitting on these sequence node IDs").option("--subscriber-id <ids...>","Only show enrollments for these subscriber IDs").option("--email <email>","Only show enrollments for this email address").option("--sort <sort>","enrolled_at_desc (default), enrolled_at_asc, wait_until_asc, or wait_until_desc").option("--stop-condition-match","Also report whether each in-flight enrollment's stop condition already matches (caps the page at 100)").option("--limit <n>","Enrollments per page, 1-500 (default 50)").option("--offset <n>","Number of enrollments to skip").option("--all","Fetch every page").option("--csv [file]","Print CSV, or write it to a file").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Lse(e,t));k(oJe,{notes:["Defaults to active and waiting enrollments, which is every contact still moving through the sequence.","Get node IDs from sequenzy sequences get <id>, or from enrollmentCounts.byCurrentNode in sequenzy stats --sequence <id>.","waitUntil is when a waiting enrollment resumes; it is empty for enrollments that are not scheduled.","A stop condition does not cancel a waiting enrollment when its event arrives. It is re-checked when the enrollment next runs a step, so a matching contact keeps reporting waiting until its delay expires. Use --stop-condition-match to inspect the current match. The result is a non-atomic snapshot; a step already past its stop check may still finish."],examples:["sequenzy sequences enrollments seq_123","sequenzy sequences enrollments seq_123 --node-id node_wave_1","sequenzy sequences enrollments seq_123 --status waiting --sort wait_until_asc","sequenzy sequences enrollments seq_123 --subscriber-id sub_123 --stop-condition-match","sequenzy sequences enrollments seq_123 --all --csv enrollments.csv"]});var aJe=or.command("enrollment <sequenceId> <enrollmentId>").description("Show how one enrollment entered and which branches it already took").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t,n)=>Mse(e,t,n));k(aJe,{notes:["Use list_sequence_enrollments / sequenzy sequences enrollments to get enrollmentId.","nodeHistory is the recorded graph walk. Compared field values are redacted summaries, never the raw recipient value."],examples:["sequenzy sequences enrollment seq_123 tok_abc","sequenzy sequences enrollment seq_123 tok_abc --json"]});var sJe=or.command("move-enrollments <id>").description("Release a bounded batch of enrolled contacts from one sequence step onto another").requiredOption("--from-node <nodeId>","Node ID the contacts are currently waiting on").option("--to-node <nodeId>","Node ID to move them onto; defaults to the source step's only next step").option("--limit <n>","Maximum enrollments to move, 1-500 (default 100)").option("--sort <sort>","wait_until_asc (default), wait_until_desc, enrolled_at_asc, or enrolled_at_desc").option("--subscriber-ids <ids...>","Only move these subscriber IDs, up to 500").option("--daily-limit <n>","Refuse to move more than this many onto the target step in a rolling 24 hours").option("--tag <tags...>","Existing tag names to apply to the moved contacts").option("--reason <reason>","Note stored on every moved enrollment").option("--apply","Actually move the batch; otherwise only dry-run").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Qse(e,t));k(sJe,{notes:["Use this instead of cancelling and re-enrolling: the enrollment keeps its entry event properties, stop-condition snapshots, and start date.","Moved contacts become active on the target step immediately, so the sequence emails them as soon as the worker picks them up.","Without --apply, this command only reports which enrollments would move.","The batch is deliberately not auto-drained: re-run the command to release the next batch while remainingCount is above zero.","This works even while the sequence has new enrollment paused, because the contacts are already enrolled.","Get node IDs from sequenzy sequences enrollments <id> (currentNodeId) or sequenzy sequences get <id>."],examples:["sequenzy sequences move-enrollments seq_123 --from-node node_delay_2","sequenzy sequences move-enrollments seq_123 --from-node node_delay_2 --limit 180 --apply","sequenzy sequences move-enrollments seq_123 --from-node node_delay_2 --to-node node_email_3 --limit 180 --daily-limit 500 --tag wave-3-released --reason 'Wave 3' --apply"]});var lJe=or.command("pause-enrollments <id>").description("Stop new enrollments while current sequence recipients continue").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>ir("pause-enrollments",{id:e,...t}));k(lJe,{notes:["The sequence must already be active. Existing active and waiting recipients keep moving through the sequence.","Use sequences disable when you want to freeze current recipients too."],examples:["sequenzy sequences pause-enrollments seq_123"]});var cJe=or.command("resume-enrollments <id>").description("Resume new enrollments for an active sequence without changing current recipients").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>ir("resume-enrollments",{id:e,...t}));k(cJe,{notes:["The sequence must already be active. Use sequences enable to resume a fully disabled sequence."],examples:["sequenzy sequences resume-enrollments seq_123"]});var uJe=or.command("enroll <id>").description("Manually enroll subscribers in a sequence").option("-e, --email <emails...>","Email addresses to enroll").option("--subscriber-ids <ids...>","Subscriber IDs to enroll").option("--emails-json <json>","JSON array of emails, or an object with emails/subscribers").option("--emails-file <file>","JSON, CSV, or newline-separated file with subscriber emails").option("--target-node-id <nodeId>","Sequence node to enroll at; defaults to the first step after the trigger").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>ir("enroll",{id:e,...t}));k(uJe,{notes:["Provide at least one target using --subscriber-ids or exactly one email source: --email, --emails-json, or --emails-file.","Subscribers must be active; unknown emails are reported as not found and inactive, unavailable, or already enrolled subscribers are skipped.","Enrollment requires the sequence to be accepting entrants (enabled and not paused for enrollment)."],examples:["sequenzy sequences enroll seq_123 --email one@example.com two@example.com","sequenzy sequences enroll seq_123 --subscriber-ids sub_123 sub_456 --target-node-id node_email_2","sequenzy sequences enroll seq_123 --emails-file ./vips.csv","sequenzy sequences enroll seq_123 --email one@example.com --target-node-id node_email_2"]});var dJe=or.command("cancel-enrollments <id>").description("Cancel active or waiting subscriber enrollments in a sequence").option("--all","Cancel every active or waiting enrollment in the sequence").option("--subscriber-id <id>","Cancel enrollments for one subscriber ID").option("--subscriber-ids <ids...>","Cancel enrollments for up to 500 subscriber IDs").option("--field-path <path>","Entry event property dot path to match, such as order.id").option("--field-values <values>","Comma-separated entry field values to match").option("--reason <reason>","Reason stored on cancelled enrollments").option("--apply","Actually cancel matches; otherwise only dry-run").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>ir("cancel-enrollments",{id:e,...t}));k(dJe,{notes:["sequenceId is always required. Provide exactly one target: --all, --subscriber-id, --subscriber-ids, or --field-values.","Use --all to fully stop a live sequence when enrollments came from a segment and share no entry field value.","Without --apply, this command only reports matching enrollments.","With --apply, the command keeps calling the API until every match is drained and prints running progress.","When --field-path is omitted, the API uses the sequence enrollmentFieldPath if configured."],examples:["sequenzy sequences cancel-enrollments seq_123 --all","sequenzy sequences cancel-enrollments seq_123 --all --apply --reason 'Lifecycle cutover'","sequenzy sequences cancel-enrollments seq_123 --subscriber-id sub_123 --apply","sequenzy sequences cancel-enrollments seq_123 --subscriber-ids sub_1 sub_2 --apply","sequenzy sequences cancel-enrollments seq_123 --field-path order.id --field-values ord_123,ord_456"]});var pJe=or.command("realign-enrollments <id>").description("Move waiting enrollments to the start of the sequence sending window on the day they are already scheduled for").option("--node-ids <ids...>","Only realign enrollments sitting on these step IDs").option("--subscriber-ids <ids...>","Only realign enrollments for up to 500 subscriber IDs").option("--cursor <cursor>","Continue a capped scan from the cursor returned by the previous run").option("--job-id <job-id>","Check a previously queued realignment job instead of starting one").option("--apply","Actually move the wait times; otherwise only dry-run").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>ir("realign-enrollments",{id:e,...t}));k(pJe,{notes:["Run this after changing a live sequence's sending window: existing waits keep their original time, so a widened window never reaches them and a narrowed one defers them to the next allowed day.","A wait only ever moves earlier, never onto a different local day, and never before now. Nobody is cancelled or re-enrolled.","Without --apply, this command only reports the new wait times.","When more enrollments remain, run the complete continuation command printed in the result; applied runs retain --apply and any targeting filters.","Applied realignments run in the background. Use the printed --job-id command to read the result.","Use `sequenzy sequences enrollments <id> --status waiting --sort wait_until_asc` first to see who is affected."],examples:["sequenzy sequences realign-enrollments seq_123","sequenzy sequences realign-enrollments seq_123 --apply","sequenzy sequences realign-enrollments seq_123 --node-ids node_week_2 --apply","sequenzy sequences realign-enrollments seq_123 --subscriber-ids sub_1 sub_2 --apply","sequenzy sequences realign-enrollments seq_123 --job-id realign-sequence-enrollments-seq_123-..."]});var mJe=or.command("delete <id>").description("Delete a sequence").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>ir("delete",{id:e,...t}));k(mJe,{examples:["sequenzy sequences delete seq_123"]});var ba=Tt.command("ab-tests").description("Inspect and edit A/B test variants").action(()=>ba.help());k(ba,{notes:["Use get to discover variant IDs, then update-variant to edit a specific A/B variant.","Only draft A/B tests can be edited.","create, add-variant, and delete-variant work on campaign and sequence A/B tests; delete works on campaign A/B tests only."],examples:["sequenzy ab-tests list --sequence seq_123","sequenzy ab-tests get ab_123","sequenzy ab-tests update ab_123 --winner-criteria open_rate","sequenzy ab-tests stats ab_123 --period 7d","sequenzy ab-tests create camp_123 --test-percentage 20 --winner-criteria open_rate",'sequenzy ab-tests add-variant ab_123 --subject "Alternative subject"',"sequenzy ab-tests restart ab_123 --source-variant var_b","sequenzy ab-tests select-winner ab_123 var_b",'sequenzy ab-tests update-variant ab_123 var_b --subject "New subject"',"sequenzy ab-tests update-variant ab_123 var_b --blocks-file ./variant-b.json"]});var fJe=ba.command("list").description("List A/B tests").option("--sequence <id>","Filter by sequence ID").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>Pa("list",e));k(fJe,{examples:["sequenzy ab-tests list --sequence seq_123"]});var gJe=ba.command("get <id>").description("Get A/B test details and variants").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Pa("get",{id:e,...t}));k(gJe,{examples:["sequenzy ab-tests get ab_123"]});var xJe=ba.command("update <id>").description("Update campaign or sequence A/B test settings").option("-n, --name <name>","A/B test name").option("--test-percentage <percent>","Campaign test audience share (5-50)").option("--duration-minutes <minutes>","Campaign test duration before winner selection (15-1440)").option("--winner-criteria <criteria>","Winner criteria: open_rate or click_rate").option("--test-type <type>","Sequence variant strategy: subject or content").option("--winner-threshold <count>","Sequence recipients before winner selection (10-1000)").option("--confirm-live-change","Confirm a settings change to an active or already-used sequence test").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Pa("update",{id:e,...t}));k(xJe,{notes:["Campaign tests use --test-percentage, --duration-minutes, and --winner-criteria.","Sequence tests use --test-type, --winner-threshold, and --winner-criteria.","Use --confirm-live-change when sequence settings affect an active test or a test with recorded activity."],examples:["sequenzy ab-tests update ab_123 --test-percentage 30 --duration-minutes 120 --winner-criteria open_rate","sequenzy ab-tests update ab_123 --test-type content --winner-criteria open_rate --winner-threshold 150 --confirm-live-change"]});var AJe=ba.command("stats <id>").description("Get A/B test variant stats").option("-p, --period <period>","Time period (1h, 24h, 7d, 30d, 90d)").option("--start <iso>","Custom range start as ISO 8601").option("--end <iso>","Custom range end as ISO 8601").option("--include-bots","Include machine-classified bot/scanner opens and clicks").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Pa("stats",{id:e,...t}));k(AJe,{notes:["Use --period or both --start and --end. Custom ranges max at 90 days.","Bot/scanner opens and clicks are excluded by default; pass --include-bots to inspect raw engagement."],examples:["sequenzy ab-tests stats ab_123","sequenzy ab-tests stats ab_123 --period 30d","sequenzy ab-tests stats ab_123 --include-bots"]});var EJe=ba.command("select-winner <id> <variantId>").description("Select a campaign A/B winner and deliver it to the remainder").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t,n)=>Pa("select-winner",{id:e,variantId:t,...n}));k(EJe,{notes:["Only campaign A/B tests currently in the testing phase can select a winner.","Selection immediately queues winner delivery for the remaining audience."],examples:["sequenzy ab-tests select-winner ab_123 var_b"]});var hJe=ba.command("restart <id>").description("Run another sequence A/B test from an existing variant").option("--source-variant <id>","Variant to use as the new control. Defaults to the selected winner.").option("--test-type <type>","Test type for generated variants: subject or content").option("--winner-threshold <count>","Subscribers before selecting a winner (10-1000)").option("--variant-count <count>","Total variants including control (2-4)").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Pa("restart",{id:e,...t}));k(hJe,{notes:["Only sequence A/B tests with a selected winner can be restarted.","Run `sequenzy ab-tests get <id>` first to find variant IDs."],examples:["sequenzy ab-tests restart ab_123","sequenzy ab-tests restart ab_123 --source-variant var_b --test-type content --variant-count 3"]});var yJe=ba.command("update-variant <id> <variantId>").description("Update an A/B test variant").option("-s, --subject <subject>","Variant subject").option("--preview-text <text>","Variant preview text").option("--html <html>","Replacement HTML body").option("--html-file <file>","Read replacement HTML from file").option("--blocks-json <json>","Inline JSON array of Sequenzy email blocks").option("--blocks-file <file>","Path to a JSON file with Sequenzy email blocks").option("--confirm-live-change","Confirm a sequence variant edit that may affect A/B test accuracy").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t,n)=>Pa("update-variant",{id:e,variantId:t,...n}));k(yJe,{notes:["Provide either HTML or blocks, not both.","Campaign variants remain editable only in draft.","Use --confirm-live-change when a sequence is active or its test already has activity; earlier sends stay unchanged and combined results may be inaccurate.","Run `sequenzy ab-tests get <id>` first to find variant IDs."],examples:['sequenzy ab-tests update-variant ab_123 var_b --subject "New subject"',"sequenzy ab-tests update-variant ab_123 var_b --html-file ./variant-b.html",'sequenzy ab-tests update-variant ab_123 var_b --subject "Revised future send" --confirm-live-change']});var bJe=ba.command("create [campaignId]").description("Create a campaign or sequence-node A/B test").option("--automation-node <nodeId>","Convert this sequence email node into an A/B test node").option("--confirm-live-change","Confirm conversion of an email node in an active sequence").option("-n, --name <name>","A/B test name").option("--test-percentage <percent>","Campaign test audience share (5-50, default 20)").option("--duration-minutes <minutes>","Campaign test duration before winner selection (15-1440, default 240)").option("--winner-criteria <criteria>","Winner criteria: open_rate or click_rate (campaign default open_rate; overrides sequence test-type default)").option("--test-type <type>","Sequence variant strategy: subject or content (default content)").option("--winner-threshold <count>","Sequence test sample size (10-1000, default 100)").option("--variants-json <json>","Inline JSON array of extra variants ({subject, previewText?, blocks?})").option("--variants-file <file>","Path to a JSON file with extra variants ({subject, previewText?, blocks?})").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Pa("create",{campaignId:e,automationNodeId:t.automationNode,...t}));k(bJe,{notes:["Provide either a campaign ID or --automation-node, but not both.","Campaigns must be in draft or rejected status. Sequence node IDs must reference an email node.","Campaigns use --test-percentage and --duration-minutes; sequences use --winner-threshold.","Variant A is created automatically from the campaign email; provided variants are added after it."],examples:["sequenzy ab-tests create camp_123",`sequenzy ab-tests create --automation-node node_123 --test-type content --winner-threshold 100 --variants-json '[{"subject":"Variant B"}]'`,"sequenzy ab-tests create camp_123 --test-percentage 30 --duration-minutes 120 --winner-criteria click_rate",`sequenzy ab-tests create camp_123 --variants-json '[{"subject":"Alternative subject"}]'`]});var CJe=ba.command("add-variant <id>").description("Add a variant to a draft campaign or sequence A/B test").requiredOption("-s, --subject <subject>","Variant subject").option("--preview-text <text>","Variant preview text").option("--blocks-json <json>","Inline JSON array of Sequenzy email blocks").option("--blocks-file <file>","Path to a JSON file with Sequenzy email blocks").option("--confirm-live-change","Confirm adding a variant to an A/B test in an active sequence").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Pa("add-variant",{id:e,...t}));k(CJe,{notes:["Variants can only be added while the A/B test is in draft status.","A/B tests in an active sequence require --confirm-live-change."],examples:['sequenzy ab-tests add-variant ab_123 --subject "Alternative subject"','sequenzy ab-tests add-variant ab_123 --subject "Alternative subject" --blocks-file ./variant.json']});var BJe=ba.command("delete-variant <id> <variantId>").description("Remove a variant from a draft campaign or sequence A/B test").option("-y, --yes","Skip the confirmation prompt").option("--confirm-live-change","Confirm deleting a variant from an A/B test in an active sequence").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t,n)=>Pa("delete-variant",{id:e,variantId:t,...n}));k(BJe,{notes:["Variant A is the control variant and cannot be deleted.","Variants can only be removed while the A/B test is in draft status.","A/B tests in an active sequence require --confirm-live-change."],examples:["sequenzy ab-tests delete-variant ab_123 var_b --yes"]});var SJe=ba.command("delete <id>").description("Delete a campaign A/B test").option("-y, --yes","Skip the confirmation prompt").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Pa("delete",{id:e,...t}));k(SJe,{notes:["Running A/B tests cannot be deleted; the linked campaign must be draft or rejected."],examples:["sequenzy ab-tests delete ab_123 --yes"]});var Lu=Tt.command("components").description("Manage reusable email components and the default email footer").action(()=>Lu.help());k(Lu,{notes:["Components are saved block groups you can reuse across emails.","The component pinned to the footer slot is the footer every new sequence, campaign, and AI-generated email gets. Edit it here to change the footer everywhere at once - editing one email's blocks only changes that email.","A default footer always keeps its unsubscribe link enabled. Transactional sends hide it at render time.","Existing emails change only with explicit --apply-to scopes and a reviewed --preview-token. Use footer preview first; --output-dir exports before/after HTML for visual inspection."],examples:["sequenzy components footer get --json > footer.json","sequenzy components footer set --blocks-file ./footer.json --yes","sequenzy components list --company comp_123","sequenzy components create 'Promo banner' --blocks-file ./banner.json"]});var cS=Lu.command("footer").description("Read or replace the company's default email footer").action(()=>cS.help()),vJe=cS.command("get").description("Print the current default email footer").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>gc("footer-get",void 0,e));k(vJe,{notes:["Exits with a not-found error when no default footer is set, which means emails fall back to the footer generated from the company profile.","Pipe --json to a file, edit the blocks, then write it back with `components footer set`."],examples:["sequenzy components footer get","sequenzy components footer get --json > footer.json"]});var _Je=cS.command("preview").description("Preview a footer change and optionally export before/after HTML without saving").option("--blocks-json <json>","Proposed footer blocks as inline JSON").option("--blocks-file <path>","Proposed footer blocks as a JSON file").option("--name <name>","Proposed component name").option("--description <text>","Proposed component description").option("--apply-to <scopes>","Comma-separated sequences,campaigns,transactional,templates; omit for future emails only").option("--include-customized","Also replace customized footers").option("--render-preview","Include footer and before/after HTML in JSON output").option("--output-dir <path>","Write visual HTML previews to this directory").option("--sample-id <id>","Render a specific affected item instead of category samples").option("--sample-kind <kind>","Sample kind: email, ab_variant, localization").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON, including the preview token").action((e)=>gc("footer-preview",void 0,e));k(_Je,{notes:["The preview does not save or send. Dynamic content is not personalized. Open exported HTML in a browser to inspect it visually.","Use the same blocks, metadata and scope options when applying the returned token. Stale previews return a conflict; review a fresh preview before retrying."],examples:["sequenzy components footer preview --blocks-file footer.json --apply-to sequences,campaigns,transactional,templates --output-dir ./footer-preview --json"]});var IJe=cS.command("set").description("Create or replace the company's default email footer").option("--blocks-json <json>","Footer blocks as inline JSON").option("--blocks-file <path>","Footer blocks as a JSON file").option("--apply-to <scopes>","Comma-separated sequences,campaigns,transactional,templates").option("--include-customized","Also replace customized footers, matching the preview").option("--preview-token <token>","Reviewed footer preview token; required with --apply-to").option("--name <name>","Component name (default: Default Footer)").option("--description <text>","Component description").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").option("-y, --yes","Skip the confirmation prompt").action((e)=>gc("footer-set",void 0,e));k(IJe,{notes:["Replaces the whole footer. Read the current one with `components footer get --json` first if you only mean to change part of it.","The unsubscribe link is always re-enabled on save."],examples:["sequenzy components footer set --blocks-file ./footer.json --yes",'sequenzy components footer set --blocks-file ./footer.json --name "2026 Footer"']});var DJe=Lu.command("list").description("List email components, newest first").option("--type <type>","Filter by component type (section, footer)").option("--defaults-only","Only components pinned as a company default").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>gc("list",void 0,e));k(DJe,{examples:["sequenzy components list","sequenzy components list --defaults-only --json"]});var wJe=Lu.command("get <componentId>").description("Show one email component").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>gc("get",e,t));k(wJe,{examples:["sequenzy components get cmp_123 --json"]});var TJe=Lu.command("create <name>").description("Create a reusable email component").option("--blocks-json <json>","Component blocks as inline JSON").option("--blocks-file <path>","Component blocks as a JSON file").option("--description <text>","Component description").option("--type <type>","Component type (section, footer). Default: section").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>gc("create",e,t));k(TJe,{notes:["Component names are unique per company.","Creating one with --type footer does not pin it as the default footer. Use `components footer set` for that."],examples:["sequenzy components create 'Promo banner' --blocks-file ./banner.json"]});var kJe=Lu.command("update <componentId>").description("Update an email component's metadata or blocks").option("--name <name>","New component name").option("--description <text>","New description").option("--type <type>","New component type (section, footer)").option("--blocks-json <json>","Replacement blocks as inline JSON").option("--blocks-file <path>","Replacement blocks as a JSON file").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>gc("update",e,t));k(kJe,{notes:["Replacing blocks bumps the component version. Emails built earlier keep the copy they were created with."],examples:["sequenzy components update cmp_123 --name 'Promo banner v2'","sequenzy components update cmp_123 --blocks-file ./banner-v2.json"]});var RJe=Lu.command("delete <componentId>").description("Delete an email component").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").option("-y, --yes","Skip the confirmation prompt").action((e,t)=>gc("delete",e,t));k(RJe,{notes:["Emails that already rendered the component keep their copied blocks.","Deleting the pinned default footer makes new emails fall back to the generated footer."],examples:["sequenzy components delete cmp_123 --yes"]});var Ts=Tt.command("templates").description("Manage email templates").action(()=>Ts.help());k(Ts,{notes:["Template content can be provided as raw HTML or as Sequenzy blocks JSON.","Templates can be assigned labels and listed by label for integration dashboards.","Use blocks when you need conditional content, per-block styles, or an exact editor-compatible structure.",lA],examples:["sequenzy templates list --company comp_123","sequenzy templates list --label edm --company comp_123",'sequenzy templates create welcome --subject "Welcome" --html-file ./welcome.html','sequenzy templates create welcome --subject "Welcome" --label edm template --html-file ./welcome.html','sequenzy templates create welcome --subject "Welcome" --blocks-file ./welcome-blocks.json','sequenzy templates update tmpl_123 --subject "Updated" --html-file ./welcome-v2.html','sequenzy templates localizations set tmpl_123 es --subject "Hola" --html-file ./welcome-es.html',"sequenzy templates localizations sync tmpl_123 --locale es fr"]});var FJe=Ts.command("list").description("List templates, newest first").option("--label <labels...>","Filter by label name").option("--templates-only","Only reusable master designs (emails marked as templates)").option("-l, --limit <number>","Templates per page, 1-100 (default: 50)").option("--offset <number>","Templates to skip before returning results").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>wl("list",e));k(FJe,{notes:["Returns 50 templates per call by default. When pagination.hasMore is true, re-run with --offset advanced by pagination.count to read the rest.","Templates are every saved email body - standalone templates plus the bodies behind campaigns and transactional emails - so the count grows with your campaign history."],examples:["sequenzy templates list --company comp_123","sequenzy templates list --label edm --company comp_123","sequenzy templates list --templates-only --json","sequenzy templates list --limit 100 --json","sequenzy templates list --limit 100 --offset 100 --json"]});var NJe=Ts.command("get <id>").description("Get template details").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>wl("get",{id:e,...t}));k(NJe,{examples:["sequenzy templates get tmpl_123 --company comp_123"]});var PJe=X5(Ts.command("render <id>").description("Render a template to email-ready HTML")).action((e,t)=>eB({type:"template",id:e},t));k(PJe,{notes:e3,examples:["sequenzy templates render tmpl_123 --out preview.html","sequenzy templates render tmpl_123 --email you@example.com --var plan=Pro --json"]});var OJe=Ts.command("create <name>").description("Create a template").option("-s, --subject <subject>","Email subject (optional with --prompt)").option("--preview-text <text>","Email preview text override").option("--prompt <prompt>","Generate branded native blocks from a prompt").option("--style <style>","Prompt generation style. Pass designed or plain to force the designed or plain-text email style; other values are freeform guidance (defaults to the company's email style preference)").option("--tone <tone>","Prompt generation tone").option("--html <html>","Email HTML content").option("--html-file <file>","Read HTML from file").option("--blocks-json <json>","Inline JSON array of Sequenzy email blocks").option("--blocks-file <file>","Path to a JSON file with Sequenzy email blocks").option("--label <labels...>","Label names to assign").option("--template","Save as a reusable master design that sequence steps and campaigns can start from").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>wl("create",{name:e,...t}));k(OJe,{notes:["Provide exactly one of prompt, HTML, or blocks JSON content.","Use blocks when you need conditional content, per-block styles, or exact editor parity."],examples:['sequenzy templates create welcome --prompt "Welcome new customers"','sequenzy templates create welcome --subject "Welcome" --html-file ./welcome.html','sequenzy templates create welcome --subject "Welcome" --label edm template --html-file ./welcome.html','sequenzy templates create welcome --subject "Welcome" --blocks-file ./welcome-blocks.json']});var LJe=Ts.command("update <id>").description("Update a template").option("-n, --name <name>","Template name").option("-s, --subject <subject>","Email subject").option("--preview-text <text>","Inbox preview text").option("--html <html>","Email HTML content").option("--html-file <file>","Read HTML from file").option("--blocks-json <json>","Inline JSON array of Sequenzy email blocks").option("--blocks-file <file>","Path to a JSON file with Sequenzy email blocks").option("--label <labels...>","Replace label names").option("--template","Mark as a reusable master design").option("--no-template","Remove the reusable master design mark").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>wl("update",{id:e,...t}));k(LJe,{notes:["Provide at least one of --name, --subject, --preview-text, --label, --template/--no-template, --html, --html-file, --blocks-json, or --blocks-file.","Do not combine HTML flags with blocks flags in the same request."],examples:['sequenzy templates update tmpl_123 --subject "Updated"','sequenzy templates update tmpl_123 --preview-text "A warmer inbox preview"',"sequenzy templates update tmpl_123 --label edm template","sequenzy templates update tmpl_123 --html-file ./welcome-v2.html","sequenzy templates update tmpl_123 --blocks-file ./welcome-v2-blocks.json"]});var uS=Ts.command("localizations").description("Manage localized template variants").action(()=>uS.help());k(uS,{notes:["Set stores caller-supplied localized content immediately.","Sync queues AI translation for selected locales, or every enabled non-primary locale when --locale is omitted."],examples:['sequenzy templates localizations set tmpl_123 es --subject "Hola" --html-file ./welcome-es.html',"sequenzy templates localizations sync tmpl_123 --locale es fr","sequenzy templates localizations sync tmpl_123"]});var MJe=uS.command("set <id> <locale>").description("Create or replace a localized template variant").requiredOption("-s, --subject <subject>","Localized email subject").option("--preview-text <text>","Localized email preview text").option("--html <html>","Localized email HTML content").option("--html-file <file>","Read localized HTML from file").option("--blocks-json <json>","Inline JSON array of localized Sequenzy email blocks").option("--blocks-file <file>","Path to a JSON file with localized Sequenzy email blocks").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t,n)=>wl("set-localization",{id:e,locale:t,...n}));k(MJe,{notes:["The locale must be enabled in the company's localization settings and cannot be the primary locale.","Provide exactly one HTML or blocks content source."],examples:['sequenzy templates localizations set tmpl_123 es --subject "Hola" --html-file ./welcome-es.html','sequenzy templates localizations set tmpl_123 fr-CA --subject "Bienvenue" --blocks-file ./welcome-fr-ca.json']});var UJe=uS.command("sync <id>").description("Queue AI translation for template locales").option("--locale <locales...>","Enabled locales to sync; omit to sync every non-primary locale").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>wl("sync-localizations",{id:e,locales:t.locale,company:t.company,json:t.json}));k(UJe,{examples:["sequenzy templates localizations sync tmpl_123 --locale es fr","sequenzy templates localizations sync tmpl_123"]});var $Je=Ts.command("delete <id>").description("Delete a template").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>wl("delete",{id:e,...t}));k($Je,{notes:["Deletion fails when the template is still referenced by a campaign or sequence."],examples:["sequenzy templates delete tmpl_123"]});var qJe=Ts.command("share <id>").description("Create or fetch the email's public view-in-browser link").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>wl("share",{id:e,...t}));k(qJe,{notes:["Accepts an email ID or a transactional email's ID or slug, so transactional and sequence emails can be shared with the ID you already hold.","The hosted page is anonymized: sample contact, inert unsubscribe link, no open/click tracking.","Idempotent - rerunning returns the same URL until you run `templates unshare`.","Campaigns have their own link that follows the A/B winner - use `campaigns share`."],examples:["sequenzy templates share tmpl_123","sequenzy templates share order-confirmation"]});var QJe=Ts.command("unshare <id>").description("Revoke the email's public view-in-browser link").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>wl("unshare",{id:e,...t}));k(QJe,{notes:["The shared URL returns 404 immediately after revocation."],examples:["sequenzy templates unshare tmpl_123"]});var Nf=Tt.command("companies").description("Inspect or create companies").action(()=>Nf.help());k(Nf,{notes:["Company creation starts background website processing automatically."],examples:["sequenzy companies list","sequenzy companies get comp_123","sequenzy companies update comp_123 --primary-color '#0ea5e9'","sequenzy companies create example.com --name Example"]});var zJe=Nf.command("list").description("List accessible companies").option("--json","Print raw JSON").action((e)=>_x("list",e));k(zJe,{examples:["sequenzy companies list"]});var HJe=Nf.command("get <id>").description("Get company details").option("--json","Print raw JSON").action((e,t)=>_x("get",{id:e,...t}));k(HJe,{examples:["sequenzy companies get comp_123"]});var jJe=Nf.command("update <id>").description("Update company info, brand context, and reply tracking").option("-n, --name <name>","Company display name").option("--description <text>","Short product or company summary").option("--description-file <path>","Read description from a file").option("--logo-url <url>","Public logo URL").option("--founder-name <name>","Founder or sender name").option("--primary-color <hex>","Primary brand color, e.g. #f97316").option("--brand-colors-json <json>","Brand colors object as JSON").option("--brand-colors-file <path>","Read brand colors JSON from a file").option("--value-props-json <json>","Value propositions array as JSON").option("--value-props-file <path>","Read value propositions JSON from a file").option("--testimonials-json <json>","Testimonials array as JSON").option("--testimonials-file <path>","Read testimonials JSON from a file").option("--tone-voice <text>","Tone of voice guidance").option("--company-context <text>","Product knowledge for AI writing").option("--company-context-file <path>","Read product knowledge from a file").option("--email-design-prompt <text>","Art direction for AI-designed emails (layout, density, imagery)").option("--email-design-prompt-file <path>","Read the design prompt from a file").option("--email-length-preference <value>","Email length: concise, balanced, or detailed (new workspaces default to concise)").option("--social-links-json <json>","Social links object as JSON").option("--social-links-file <path>","Read social links JSON from a file").option("--privacy-policy-url <url>","Privacy policy URL").option("--terms-url <url>","Terms of service URL").option("--address <address>","Physical mailing address").option("--language <code>","Primary language code").option("--pricing-json <json>","Pricing object as JSON").option("--pricing-file <path>","Read pricing JSON from a file").option("--font-family <family>","Default email font family").option("--email-theme-json <json>","Default email theme as JSON (partial: presetId, colors, typography, layout; pass null to reset)").option("--email-theme-file <path>","Read the default email theme JSON from a file").option("--email-direction <direction>","Default email direction: ltr or rtl").option("--sender-profile-id <id>","Existing sender profile to make the default (see `sequenzy sender-profiles list`)").option("--from-email <email>","Account-wide default From address (domain must be verified)").option("--from-name <name>","Display name of the default From profile (alone, it renames the current one)").option("--reply-profile-id <id>","Existing reply profile to make the default (see `sequenzy sender-profiles list`)").option("--reply-to <email>","Account-wide default Reply-To address").option("--reply-to-name <name>","Display name of the default Reply-To profile (alone, it renames the current one)").option("--enable-reply-tracking","Enable inbound reply tracking").option("--disable-reply-tracking","Disable inbound reply tracking").option("--reply-tracking-domain-mode <mode>","Reply domain mode: sequenzy or custom").option("--enable-reply-forwarding","Enable captured reply forwarding").option("--disable-reply-forwarding","Disable captured reply forwarding").option("--default-list <id>","List new contacts join by default when nothing targets them (repeatable)",(e,t=[])=>[...t,e]).option("--default-lists-none","New contacts join no list unless something targets them").option("--rename-matching-footers","Rename exact matching footer names in editable emails and saved components; requires --name and --previous-company-name").option("--previous-company-name <name>","Current company name to match when renaming footers").option("--default-lists-all","New contacts join every current and future list").option("--json","Print raw JSON").action((e,t)=>_x("update",{id:e,...t}));k(jJe,{notes:["The default-list flags set which lists a new contact joins when nothing targets it explicitly - forms, API writes, events, imports, and live ingestion from integrations without their own list targeting (Dodo Payments, PostHog, WooCommerce). Payment-provider backfills follow this setting; PostHog history imports instead create contacts without list memberships. `companies get <id>` reports the current value.","`--default-lists-all`, `--default-lists-none`, and `--default-list` are three different things: all lists, no list at all, and exactly the listed ones. They are mutually exclusive.","Changing this only affects later writes. Nobody is moved or removed from a list retroactively, so a list already polluted by a backfill still needs `sequenzy lists remove-subscribers`.","The default-list flags need an API key with the companies:manage scope. In the dashboard the same setting lives under Contacts -> Lists -> Default Lists."],examples:["sequenzy companies update comp_123 --primary-color '#0ea5e9'","sequenzy companies update comp_123 --default-list list_abc --default-list list_def","sequenzy companies update comp_123 --default-lists-none",`sequenzy companies update comp_123 --email-theme-json '{"colors":{"mutedText":"#4b5563"},"typography":{"baseFontSize":16}}'`,"sequenzy companies update comp_123 --company-context-file ./product.md --tone-voice 'clear, direct, warm'","sequenzy companies update comp_123 --from-name 'Example'","sequenzy companies update comp_123 --sender-profile-id sender_abc123 --from-name 'Example News'","sequenzy companies update comp_123 --enable-reply-tracking --reply-tracking-domain-mode sequenzy",`sequenzy companies update comp_123 --value-props-json '[{"title":"Fast setup","description":"Launch lifecycle emails in minutes."}]'`]});var GJe=Nf.command("create <domain>").description("Create a company and queue website processing").option("-n, --name <name>","Company name").option("--json","Print raw JSON").action((e,t)=>_x("create",{domain:e,...t}));k(GJe,{examples:["sequenzy companies create example.com","sequenzy companies create https://example.com --name Example"]});var dA=Tt.command("tags").description("Manage tag definitions").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>kf("list",e));k(dA,{notes:["Running `sequenzy tags` without a subcommand lists tag definitions.","Tag names are normalized to lowercase with dashes; system tags cannot be changed or deleted."],examples:["sequenzy tags --company comp_123","sequenzy tags list","sequenzy tags create vip --color purple","sequenzy tags update tag_123 --color red","sequenzy tags delete tag_123 --yes"]});var VJe=dA.command("list").description("List tag definitions").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>kf("list",e));k(VJe,{examples:["sequenzy tags list --company comp_123"]});var WJe=dA.command("create <name>").description("Create a tag definition").option("--color <color>","Tag color, e.g. gray, red, green, blue, purple").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>kf("create",{name:e,...t}));k(WJe,{notes:["Names are normalized to lowercase with dashes, so `VIP Customer` becomes `vip-customer`."],examples:["sequenzy tags create vip","sequenzy tags create vip --color purple"]});var KJe=dA.command("update <tagId>").description("Update a tag definition color").requiredOption("--color <color>","New tag color").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>kf("update",{tagId:e,...t}));k(KJe,{notes:["System tags cannot be updated."],examples:["sequenzy tags update tag_123 --color red"]});var JJe=dA.command("delete <tagId>").description("Delete a tag definition").option("-y, --yes","Skip the confirmation prompt").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>kf("delete",{tagId:e,...t}));k(JJe,{notes:["Deleting a tag removes it from every subscriber.","Tags used by sequences cannot be deleted until those sequences stop referencing them."],examples:["sequenzy tags delete tag_123 --yes"]});var Bc=Tt.command("lists").description("Manage subscriber lists").action(()=>Bc.help());k(Bc,{examples:["sequenzy lists list --company comp_123",'sequenzy lists create Newsletter --description "Public newsletter list"','sequenzy lists update list_123 --name "Weekly Newsletter" --private',"sequenzy lists add-subscribers list_123 --emails-file ./batch-001.csv","sequenzy lists remove-subscribers list_123 --email one@example.com","sequenzy lists import list_123 --emails-file ./batch-001.csv","sequenzy lists delete list_123 --yes"]});var YJe=Bc.command("list").description("List subscriber lists").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>Iu("list",e));k(YJe,{examples:["sequenzy lists list --company comp_123"]});var ZJe=Bc.command("create <name>").description("Create a subscriber list").option("-d, --description <text>","List description").option("--private","Mark the list as private").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Iu("create",{name:e,...t}));k(ZJe,{examples:['sequenzy lists create Newsletter --description "Public newsletter list"',"sequenzy lists create VIP --private --company comp_123"]});var XJe=Bc.command("add-subscribers <listId>").description("Add subscribers to a list from emails, JSON, or a file").option("-e, --email <emails...>","Email addresses to add").option("--emails-json <json>","JSON array of emails, or an object with emails/subscribers").option("--emails-file <file>","JSON, CSV, or newline-separated file with subscriber emails").option("--duplicate-strategy <strategy>","Duplicate strategy: skip, merge, or overwrite","skip").option("--enroll-sequences","Enroll newly created subscribers in matching sequences").option("--opt-in-mode <mode>","Consent mode: default, confirmed, or double_opt_in","default").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Iu("add-subscribers",{listId:e,...t}));k(XJe,{notes:["Provide exactly one source: --email, --emails-json, or --emails-file.","Files may be newline-separated, CSV with an email column, a JSON email array, or a JSON object with emails/subscribers.","CSV headers named email, e-mail, email address, or mail are detected; otherwise the first column is used.","New subscribers are not enrolled in matching sequences unless --enroll-sequences is set."],examples:["sequenzy lists add-subscribers list_123 --email one@example.com two@example.com",`sequenzy lists add-subscribers list_123 --emails-json '["one@example.com","two@example.com"]'`,"sequenzy lists add-subscribers list_123 --emails-file ./batch-001.csv"]});var eYe=Bc.command("import <listId>").description("Alias for add-subscribers; import subscribers into a list").option("-e, --email <emails...>","Email addresses to add").option("--emails-json <json>","JSON array of emails, or an object with emails/subscribers").option("--emails-file <file>","JSON, CSV, or newline-separated file with subscriber emails").option("--duplicate-strategy <strategy>","Duplicate strategy: skip, merge, or overwrite","skip").option("--enroll-sequences","Enroll newly created subscribers in matching sequences").option("--opt-in-mode <mode>","Consent mode: default, confirmed, or double_opt_in","default").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Iu("add-subscribers",{listId:e,...t}));k(eYe,{notes:["`lists import` is an alias for `lists add-subscribers`.","Provide exactly one source: --email, --emails-json, or --emails-file.","Files may be newline-separated, CSV with an email column, a JSON email array, or a JSON object with emails/subscribers.","CSV headers named email, e-mail, email address, or mail are detected; otherwise the first column is used."],examples:["sequenzy lists import list_123 --emails-file ./batch-001.csv",`sequenzy lists import list_123 --emails-json '["one@example.com","two@example.com"]'`]});var tYe=Bc.command("update <listId>").description("Update a subscriber list").option("-n, --name <name>","List name").option("-d, --description <text>","List description").option("--private","Mark the list as private").option("--no-private","Mark the list as public").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Iu("update",{listId:e,...t}));k(tYe,{notes:["Provide at least one of --name, --description, --private, or --no-private."],examples:['sequenzy lists update list_123 --name "Weekly Newsletter"',"sequenzy lists update list_123 --private","sequenzy lists update list_123 --no-private"]});var nYe=Bc.command("remove-subscribers <listId>").description("Remove subscribers from a list by email").option("-e, --email <emails...>","Email addresses to remove").option("--emails-json <json>","JSON array of emails, or an object with emails/subscribers").option("--emails-file <file>","JSON, CSV, or newline-separated file with subscriber emails").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Iu("remove-subscribers",{listId:e,...t}));k(nYe,{notes:["Provide exactly one source: --email, --emails-json, or --emails-file.","Subscribers are only removed from the list; they stay in your audience.","Emails that do not match a subscriber are reported as not found."],examples:["sequenzy lists remove-subscribers list_123 --email one@example.com two@example.com","sequenzy lists remove-subscribers list_123 --emails-file ./churned.csv"]});var rYe=Bc.command("delete <listId>").description("Delete a subscriber list").option("-y, --yes","Skip the confirmation prompt").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Iu("delete",{listId:e,...t}));k(rYe,{notes:["Deleting a list removes all of its memberships; subscribers themselves are kept."],examples:["sequenzy lists delete list_123 --yes"]});var Ap=Tt.command("segments").description("Manage segments").action(()=>Ap.help());k(Ap,{notes:["Use --filter-json for arbitrary segment filters. The CLI will fill in missing filter IDs.","Use --match any to create a segment that matches any filter instead of all filters.",'Engagement filters (emailSent, emailDelivered, emailOpened, emailClicked, emailBounced, emailComplained) accept a time range as the value ("7d", "30d", "90d", "180d", "all"), a specific campaign ("campaign:<campaign_id>"), or an email-type scope ("marketing:<timeRange>" for marketing-policy campaign, automation, and Send API traffic; "transactional:<timeRange>" for transactional-policy sends). Policy scopes use send-time policy snapshots; ambiguous older automation and Send API events without a snapshot are not assigned to either scope. Combine multiple engagement filters with --match all to build things like "bounced campaign A but not campaign B".'],examples:["sequenzy segments list --company comp_123",'sequenzy segments create --name "Bought Pro" --stripe-product prod_pro',`sequenzy segments create --name "VIP or Churn Risk" --match any --filter-json '[{"field":"tag","operator":"contains","value":"vip"},{"field":"emailOpened","operator":"is_not","value":"30d"}]'`,`sequenzy segments create --name "Bounced A not B" --filter-json '[{"field":"emailBounced","operator":"is","value":"campaign:cmp_abc"},{"field":"emailBounced","operator":"is_not","value":"campaign:cmp_xyz"}]'`,`sequenzy segments create --name "No marketing email this week" --filter-json '[{"field":"emailSent","operator":"is_not","value":"marketing:7d"}]'`]});var iYe=Ap.command("list").description("List all segments").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>sf("list",e));k(iYe,{examples:["sequenzy segments list --company comp_123"]});var oYe=Ap.command("create").description("Create a segment").requiredOption("-n, --name <name>","Segment name").option("-c, --company <id>","Company ID override for personal API keys").option("--match <mode>","How filters combine: all or any","all").option("--stripe-product <id>","Stripe product ID to segment on").option("--commerce-product <id>","Commerce product to segment on, as provider:productId (e.g. shopify:42); a bare ID matches any provider").option("--commerce-collection <key>","Commerce collection to segment on, as a collection ID or handle (e.g. skincare); optionally prefixed with a provider").option("--purchase-operator <operator>","Purchase operator (bought, didnt-buy, at-least, less-than)","bought").option("--payments <number>","Payment threshold for at-least/less-than").option("--orders <number>","Order threshold for at-least/less-than with --commerce-product or --commerce-collection").option("--engagement <field>","Email engagement field: emailSent, emailDelivered, emailOpened, emailClicked, emailBounced, or emailComplained").option("--engagement-operator <operator>","Engagement operator: is, is_not, is_temporary_bounce, is_permanent_bounce, at_least, or less_than_count","is").option("--engagement-scope <scope>","Engagement scope: any, marketing, transactional, or campaign","any").option("--engagement-range <range>","Engagement time range: 3d, 7d, 30d, 90d, 180d, or all","all").option("--engagement-campaign <id>","Campaign ID when --engagement-scope is campaign").option("--engagement-count <number>","Event count for at_least/less_than_count engagement operators").option("--filter-json <json>","Raw JSON array of segment filters (IDs are optional)").option("--json","Print raw JSON").action((e)=>sf("create",e));k(oYe,{notes:["For array-of-object attributes, positive filters sharing a wildcard array prefix (such as history_events[].venue and history_events[].date) and connected only by AND must match one shared array element. Negative is_not, not_contains, and is_empty filters remain independent."],examples:['sequenzy segments create --name "Bought Pro" --stripe-product prod_pro','sequenzy segments create --name "3+ Pro Payments" --stripe-product prod_pro --purchase-operator at-least --payments 3','sequenzy segments create --name "Starter Kit Buyers" --commerce-product api:prod-starter-kit','sequenzy segments create --name "Repeat Kit Buyers" --commerce-product api:prod-starter-kit --purchase-operator at-least --orders 2','sequenzy segments create --name "Skincare Buyers" --commerce-collection skincare','sequenzy segments create --name "Repeat Skincare Buyers" --commerce-collection skincare --purchase-operator at-least --orders 2','sequenzy segments create --name "Marketing openers" --engagement emailOpened --engagement-scope marketing --engagement-range all','sequenzy segments create --name "Did not open campaign" --engagement emailOpened --engagement-operator is_not --engagement-scope campaign --engagement-campaign cmp_abc',`sequenzy segments create --name "VIP or Churn Risk" --match any --filter-json '[{"field":"tag","operator":"contains","value":"vip"},{"field":"emailOpened","operator":"is_not","value":"30d"}]'`,`sequenzy segments create --name "Bounced A not B" --filter-json '[{"field":"emailBounced","operator":"is","value":"campaign:cmp_abc"},{"field":"emailBounced","operator":"is_not","value":"campaign:cmp_xyz"}]'`]});var aYe=Ap.command("count <id>").description("Get subscriber count for a segment").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>sf("count",{id:e,...t}));k(aYe,{examples:["sequenzy segments count seg_123 --company comp_123"]});var sYe=Ap.command("update <id>").description("Update a segment name, filters, or join operator").option("-n, --name <name>","Segment name").option("--filters-json <json>","Raw JSON array of segment filters, or an object with a root group").option("--filters-file <file>","Path to a JSON file with segment filters or a root group").option("--join-operator <operator>","How filters combine: and or or").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>sf("update",{id:e,...t}));k(sYe,{notes:["Provide at least one of --name, --filters-json, --filters-file, or --join-operator.","Filters replace the existing filter set; missing filter IDs are filled in by the CLI.","For array-of-object attributes, positive filters sharing a wildcard array prefix (such as history_events[].venue and history_events[].date) and connected only by AND must match one shared array element. Negative is_not, not_contains, and is_empty filters remain independent."],examples:['sequenzy segments update seg_123 --name "Churn Risk"',`sequenzy segments update seg_123 --filters-json '[{"field":"tag","operator":"contains","value":"vip"}]'`,"sequenzy segments update seg_123 --join-operator or"]});var lYe=Ap.command("delete <id>").description("Delete a segment").option("-y, --yes","Skip the confirmation prompt").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>sf("delete",{id:e,...t}));k(lYe,{examples:["sequenzy segments delete seg_123 --yes"]});var Mu=Tt.command("audience-syncs").description("Sync segments to Meta custom audiences").action(()=>Mu.help());k(Mu,{notes:["Requires the Meta Ads integration to be connected in the dashboard (Settings -> Integrations).",'Use --template to start from a ready-made segment ("zero-ltv", "no-purchase-1y", "recent-buyers", "high-spenders-ecom", "non-buyers", "engaged"); the segment is created automatically on first use.',"Audiences are add-only: subscribers who leave the segment stay in the Meta audience."],examples:["sequenzy audience-syncs list",'sequenzy audience-syncs create --template recent-buyers --ad-account act_123 --name "Sequenzy - Recent buyers"']});var cYe=Mu.command("list").description("List audience syncs with schedule and status").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>Wd("list",e));k(cYe,{examples:["sequenzy audience-syncs list --company comp_123"]});var uYe=Mu.command("ad-accounts").description("List the connected Meta ad accounts").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>Wd("ad-accounts",e));k(uYe,{examples:["sequenzy audience-syncs ad-accounts"]});var dYe=Mu.command("create").description("Create an audience sync (segment -> Meta custom audience)").option("--segment <id>","Existing segment ID to sync").option("--template <id>",'Predefined segment template (for example "recent-buyers", "zero-ltv", "no-purchase-1y")').requiredOption("--ad-account <id>","Meta ad account ID (see `sequenzy audience-syncs ad-accounts`)").requiredOption("-n, --name <name>","Audience name in Meta Ads Manager").option("--frequency <frequency>","Sync frequency: hourly, daily, or weekly","daily").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>Wd("create",e));k(dYe,{examples:['sequenzy audience-syncs create --template recent-buyers --ad-account act_123 --name "Sequenzy - Recent buyers"','sequenzy audience-syncs create --segment seg_123 --ad-account act_123 --name "Sequenzy - VIPs" --frequency hourly']});var pYe=Mu.command("update <id>").description("Change an audience sync's frequency or pause/resume it").option("--frequency <frequency>","Sync frequency: hourly, daily, or weekly").option("--active <bool>","true to resume, false to pause").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Wd("update",{id:e,...t}));k(pYe,{examples:["sequenzy audience-syncs update sync_123 --frequency weekly","sequenzy audience-syncs update sync_123 --active false"]});var mYe=Mu.command("delete <id>").description("Remove an audience sync (the Meta audience itself is kept)").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Wd("delete",{id:e,...t}));k(mYe,{examples:["sequenzy audience-syncs delete sync_123"]});var fYe=Mu.command("sync <id>").description("Trigger an immediate sync run").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Wd("sync",{id:e,...t}));k(fYe,{examples:["sequenzy audience-syncs sync sync_123"]});var Uu=Tt.command("products").description("Manage products and digital delivery files").action(()=>Uu.help());k(Uu,{notes:["Products sync from Stripe, Shopify, and WooCommerce integrations.","Attach a deliverable file to a Stripe product, then reference it in purchase sequence emails with {{event.download.url}} and {{event.download.name}}."],examples:["sequenzy products list --provider stripe","sequenzy products sync",'sequenzy products upsert my-ebook --title "The Ebook" --price-cents 1900 --file ./ebook.pdf',"sequenzy products attach-file prod_abc --file ./guide.pdf","sequenzy products attach-file prod_abc --url https://example.com/guide.pdf --name guide.pdf","sequenzy products detach-file prod_abc","sequenzy products delete my-ebook"]});var gYe=Uu.command("list").description("List synced products including attached delivery files").option("-c, --company <id>","Company ID override for personal API keys").option("--provider <provider>","Filter by provider (stripe, shopify, woocommerce, manual)").option("--search <query>","Filter products by title").option("--limit <number>","Products per page (1-100, default 50)").option("--offset <number>","Number of products to skip").option("--all","Fetch every page instead of just the first").option("--json","Print raw JSON").action((e)=>ep("list",e));k(gYe,{notes:["Returns one page by default. The header shows 'N of TOTAL' when the catalog is larger than the page.","Use --all to page through catalogs larger than the 100-per-request cap."],examples:["sequenzy products list --provider stripe","sequenzy products list --all","sequenzy products list --limit 100 --offset 100"]});var xYe=Uu.command("sync").description("Queue a Stripe product catalog sync").option("-c, --company <id>","Company ID override for personal API keys").option("--integration <id>","Stripe integration ID to sync").option("--json","Print raw JSON").action((e)=>ep("sync",e));k(xYe,{examples:["sequenzy products sync --company comp_123","sequenzy products sync --integration int_123"]});var AYe=Uu.command("upsert [productId]").description("Create or update products in the catalog (Commerce API, keyed by your productId)").option("--title <title>","Product title (required for single upserts)").option("--description <text>","Product description").option("--price-cents <cents>","Price in the smallest currency unit").option("--currency <code>","ISO currency code, e.g. USD").option("--image-url <url>","Product image URL").option("--product-url <url>","Product page URL").option("--provider-created-at <iso>","Product creation time from the source catalog (ISO 8601)").option("--clear-provider-created-at","Clear the stored source-catalog creation time").option("--in-stock","Mark the product as in stock").option("--out-of-stock","Mark the product as out of stock").option("--file <path>","Deliverable file to upload and attach in one step").option("--url <link>","External deliverable http(s) link to attach in one step").option("--name <fileName>","Display name for the attached deliverable").option("--products-json <json>","Inline JSON array of products to upsert").option("--products-file <file>","Path to a JSON file with products to upsert").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>ep("upsert",t,e));k(AYe,{notes:["Products are keyed by your own productId and stored under the api provider.","Combine --file or --url with a single-product upsert to attach the deliverable file in the same command.","Use --products-json/--products-file for bulk upserts of up to 100 products."],examples:['sequenzy products upsert my-ebook --title "The Ebook" --price-cents 1900 --currency USD --file ./ebook.pdf','sequenzy products upsert my-course --title "The Course" --url https://files.example.com/course.zip',"sequenzy products upsert --products-file ./products.json"]});var EYe=Uu.command("delete <productId>").description("Delete a product previously pushed via the Commerce API").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>ep("delete",t,e));k(EYe,{examples:["sequenzy products delete my-ebook"]});var hYe=Uu.command("attach-file <id>").description("Attach the deliverable file buyers receive after purchase").option("--file <path>","Local file to upload (PDF, ePub, ZIP, media)").option("--url <link>","External http(s) link instead of an upload").option("--name <fileName>","Display name for the file (e.g. guide.pdf)").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>ep("attach-file",t,e));k(hYe,{examples:["sequenzy products attach-file prod_abc --file ./guide.pdf","sequenzy products attach-file prod_abc --url https://example.com/template.zip --name template.zip"]});var yYe=Uu.command("detach-file <id>").description("Remove the attached delivery file from a product").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>ep("detach-file",t,e));k(yYe,{examples:["sequenzy products detach-file prod_abc"]});var pA=Tt.command("team").description("Manage team members and invitations").action(()=>pA.help());k(pA,{notes:["Inviting and cancelling invitations requires owner or admin access.","Billing access can only be granted by the company owner."],examples:["sequenzy team list","sequenzy team invite teammate@example.com --role admin","sequenzy team cancel-invitation inv_123"]});var bYe=pA.command("list").description("List team members and pending invitations").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>eS("list",e));k(bYe,{examples:["sequenzy team list --company comp_123"]});var CYe=pA.command("invite <email>").description("Invite a team member or add an existing user").requiredOption("--role <role>","Member role: admin, viewer, or restricted").option("--billing-access","Allow the member to manage billing (owner only)").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>eS("invite",{email:e,...t}));k(CYe,{notes:["Existing Sequenzy users are added to the team immediately; everyone else receives an email invitation.","Invitations expire automatically and can be re-sent by inviting the same email again after cancelling."],examples:["sequenzy team invite teammate@example.com --role admin","sequenzy team invite editor@example.com --role restricted","sequenzy team invite finance@example.com --role viewer --billing-access"]});var BYe=pA.command("cancel-invitation <invitationId>").description("Cancel a pending team invitation").option("-y, --yes","Skip the confirmation prompt").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>eS("cancel-invitation",{invitationId:e,...t}));k(BYe,{notes:["Run `sequenzy team list` first to find invitation IDs."],examples:["sequenzy team cancel-invitation inv_123 --yes"]});var $u=Tt.command("inbox").description("Manage subscriber reply conversations").action(()=>$u.help());k($u,{notes:["The inbox collects subscriber replies to campaigns, sequences, and transactional email.","Use --note on replies to add an internal note instead of emailing the subscriber."],examples:["sequenzy inbox list --status open --unread","sequenzy inbox get conv_123","sequenzy inbox reply conv_123 --text 'Thanks for reaching out!'","sequenzy inbox close conv_123"]});var SYe=$u.command("list").description("List conversations").option("-s, --status <status>","Filter by status: open, closed, or all").option("--search <query>","Search by subscriber email, name, or subject").option("--unread","Only conversations with unread messages").option("-p, --page <number>","Page number (default 1)").option("-l, --limit <number>","Results per page (1-100, default 20)").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>Xd("list",e));k(SYe,{examples:["sequenzy inbox list","sequenzy inbox list --status open --unread",'sequenzy inbox list --search "refund" --limit 50']});var vYe=$u.command("get <conversationId>").description("Get a conversation with its full message history").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Xd("get",{conversationId:e,...t}));k(vYe,{examples:["sequenzy inbox get conv_123","sequenzy inbox get conv_123 --json"]});var _Ye=$u.command("reply <conversationId>").description("Reply to a conversation or add an internal note").option("-t, --text <text>","Plain text message body").option("--html-file <file>","Read an HTML message body from file").option("-s, --subject <subject>","Override the reply subject").option("--note","Add an internal note instead of emailing the subscriber").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Xd("reply",{conversationId:e,...t}));k(_Ye,{notes:["Provide a body with --text and/or --html-file.","Outbound replies are emailed to the subscriber and reopen closed conversations; notes are internal only."],examples:["sequenzy inbox reply conv_123 --text 'Thanks for reaching out!'","sequenzy inbox reply conv_123 --html-file ./reply.html","sequenzy inbox reply conv_123 --text 'Customer asked for a refund' --note"]});var IYe=$u.command("close <conversationId>").description("Close a conversation").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Xd("close",{conversationId:e,...t}));k(IYe,{examples:["sequenzy inbox close conv_123"]});var DYe=$u.command("reopen <conversationId>").description("Reopen a closed conversation").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Xd("reopen",{conversationId:e,...t}));k(DYe,{examples:["sequenzy inbox reopen conv_123"]});var wYe=$u.command("mark-read <conversationId>").description("Mark all messages in a conversation as read").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Xd("mark-read",{conversationId:e,...t}));k(wYe,{examples:["sequenzy inbox mark-read conv_123"]});var Sc=Tt.command("webhooks").description("Manage outbound webhook endpoints").action(()=>Sc.help());k(Sc,{notes:["Webhook payloads are signed; the signing secret is only shown once at creation time.","Valid events cover email.*, sms.*, campaign.*, subscriber.*, and sequence.* types; omit --event to use the default set. campaign.sent is explicit-only."],examples:["sequenzy webhooks list","sequenzy webhooks create --name CI --url https://example.com/hook --event email.bounced","sequenzy webhooks deliveries wh_123 --limit 50","sequenzy webhooks replay wh_123 del_456"]});var TYe=Sc.command("list").description("List outbound webhook endpoints").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>Ou("list",e));k(TYe,{examples:["sequenzy webhooks list --company comp_123"]});var kYe=Sc.command("create").description("Create an outbound webhook endpoint").requiredOption("-n, --name <name>","Webhook name").requiredOption("-u, --url <url>","HTTPS endpoint URL").option("-e, --event <events...>","Event types to deliver, e.g. email.bounced campaign.sent subscriber.list_subscribed subscriber.list_unsubscribed").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>Ou("create",e));k(kYe,{notes:["The signing secret is printed once on creation and cannot be retrieved later - store it immediately.","Omit --event to subscribe to the default event set."],examples:["sequenzy webhooks create --name CI --url https://example.com/hook --event email.bounced","sequenzy webhooks create --name 'All events' --url https://example.com/hook"]});var RYe=Sc.command("update <id>").description("Update an outbound webhook endpoint").option("-n, --name <name>","Webhook name").option("-u, --url <url>","HTTPS endpoint URL").option("-e, --event <events...>","Replacement event types").option("--enable","Enable the webhook").option("--disable","Disable the webhook").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Ou("update",{id:e,...t}));k(RYe,{notes:["Provide at least one of --name, --url, --event, --enable, or --disable.","Changing the URL or re-enabling resets the failure circuit breaker."],examples:["sequenzy webhooks update wh_123 --url https://example.com/new-hook","sequenzy webhooks update wh_123 --event email.bounced email.complained","sequenzy webhooks update wh_123 --disable"]});var FYe=Sc.command("delete <id>").description("Delete an outbound webhook endpoint").option("-y, --yes","Skip the confirmation prompt").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Ou("delete",{id:e,...t}));k(FYe,{examples:["sequenzy webhooks delete wh_123 --yes"]});var NYe=Sc.command("test <id>").description("Send a test event to a webhook endpoint").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Ou("test",{id:e,...t}));k(NYe,{notes:["The webhook must be enabled to receive a test event."],examples:["sequenzy webhooks test wh_123"]});var PYe=Sc.command("deliveries <id>").description("List recent deliveries for a webhook endpoint").option("-l, --limit <number>","Maximum deliveries to return (1-100)").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Ou("deliveries",{id:e,...t}));k(PYe,{examples:["sequenzy webhooks deliveries wh_123","sequenzy webhooks deliveries wh_123 --limit 50"]});var OYe=Sc.command("replay <id> <deliveryId>").description("Replay a webhook delivery").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t,n)=>Ou("replay",{id:e,deliveryId:t,...n}));k(OYe,{notes:["Run `sequenzy webhooks deliveries <id>` first to find delivery IDs."],examples:["sequenzy webhooks replay wh_123 del_456"]});var LYe=Tt.command("account").description("Verify the active API key, permissions, and account context").option("--json","Print JSON").action(OX);k(LYe,{notes:["Makes a live API request with the active credential. Compare its key name and prefix with Settings after replacing a key."],examples:["sequenzy account","sequenzy account --json"]});var n3=Tt.command("notifications").description("Manage which account notifications Sequenzy emails you");n3.command("get").description("Show your notification settings for the current company").option("--json","Print JSON").action(Qre);n3.command("set").description("Change your notification settings for the current company").option("--new-subscriber <mode>","Notify when a contact joins: off, instant, or daily").option("--form-submitted <mode>","Notify on form, popup, or landing-page submissions: off or instant (50/day cap)").option("--campaign-completed <mode>","Notify when a campaign finishes sending: off or instant").option("--weekly-report <mode>","Monday one-screen summary of last week's sends, engagement, revenue, and slipping sequences: off or weekly").option("--json","Print JSON").action(zre);k(n3,{notes:["These are your own settings, not the workspace's. Teammates choose their own and this never changes theirs.","New-subscriber notifications fall back to a daily summary automatically once a day passes the instant cap, and imports never trigger them.","'daily' is not valid for --form-submitted or --campaign-completed: each submission and each campaign finish is its own event.","The weekly report is on by default and only goes out for weeks in which the workspace sent more than 10 emails; 'weekly' is its only delivery mode."],examples:["sequenzy notifications get","sequenzy notifications set --new-subscriber daily","sequenzy notifications set --form-submitted instant","sequenzy notifications set --weekly-report off","sequenzy notifications set --new-subscriber off --form-submitted off --campaign-completed off --weekly-report off"]});var Ole=(e,t=[])=>[...t,e],MYe=Tt.command("feedback <message>").description("Send product feedback about Sequenzy to the Sequenzy team").option("--category <category>","Category: missing_capability, bug, docs, ux, praise, other (default: other)").option("--context <context>","What you were trying to accomplish when you hit the gap").option("--intent <text>","Bug reports: the user's request, verbatim or closely paraphrased").option("--expected <text>","Bug reports: what you expected to happen").option("--actual <text>","Bug reports: what actually happened instead").option("--tool-call <call>",'Bug reports: a command/tool call that led to the problem, as "<tool> | <args summary> | <error>" (args and error optional). Repeatable, in order.',Ole).option("--resource-id <id>","Bug reports: ID of an affected resource (campaign, sequence, subscriber, ...). Repeatable.",Ole).option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>ure(e,t));k(MYe,{notes:["Agents: send feedback whenever the user wanted something the CLI, API, or MCP tools do not support. The Sequenzy team reads every submission.","When a command misbehaved or produced a wrong result, include --intent, --expected, --actual, --tool-call, and --resource-id so the team can reproduce it. Summarize arguments - do not paste raw subscriber data or secrets."],examples:['sequenzy feedback "No command to bulk-delete campaigns by label" --category missing_capability','sequenzy feedback "Segment count and list output disagree for seg_123" --category bug --context "Auditing a re-engagement segment"','sequenzy feedback "Campaign update dropped the scheduled time" --category bug --intent "Move the promo send to 9am Tuesday" --tool-call "campaigns update | --schedule 2026-08-11T09:00" --expected "Campaign rescheduled" --actual "Campaign reverted to draft" --resource-id cmp_123']});var qu=Tt.command("api-keys").description("Manage company API keys").action(()=>qu.help());k(qu,{notes:["The plain API key is only returned on creation. Save it immediately.","Listing and revocation return metadata only; secrets and stored hashes are never returned.","Every subcommand except 'handoff' needs the api_keys:manage scope. Use 'handoff' when the active key does not have it."],examples:["sequenzy api-keys list --company comp_123","sequenzy api-keys create",'sequenzy api-keys create --name "CI deploy key" --company comp_123',"sequenzy api-keys update key_123 --preset agent_safe","sequenzy api-keys revoke key_123 --company comp_123 --yes","sequenzy api-keys handoff --preset agent_safe --replaces current"]});var UYe=qu.command("create").description("Create a company API key").option("-n, --name <name>","Human-readable API key name").option("-c, --company <id>","Company ID override for personal API keys").option("--preset <preset>","Permission preset: full_access, read_only, agent_safe, ai_drafting, data_ingest_safe, data_ingest_automations, transactional_sender, marketing_sender (default: full_access)").option("--scopes <scopes>","Comma-separated explicit permission scopes (overrides --preset)").option("--json","Print raw JSON").action((e)=>Vd("create",e));k(UYe,{notes:["Keys default to full access. Pass --preset or --scopes to restrict what the key can do."],examples:["sequenzy api-keys create",'sequenzy api-keys create --name "CI deploy key" --company comp_123','sequenzy api-keys create --preset transactional_sender --name "Order emails"','sequenzy api-keys create --scopes "subscribers:read,subscribers:write,events:write"']});var $Ye=qu.command("handoff").description("Get an owner-confirmed dashboard link for creating or rotating a key").option("-n, --name <name>","Suggested name for the new API key").option("-c, --company <id>","Company ID override for personal API keys").option("--preset <preset>","Suggested permission preset: full_access, read_only, agent_safe, ai_drafting, data_ingest_safe, data_ingest_automations, transactional_sender, marketing_sender").option("--scopes <scopes>","Comma-separated explicit permission scopes (overrides --preset)").option("--replaces <api-key-id>","Key the new one replaces. Pass 'current' for the key you are authenticated with").option("--json","Print raw JSON").action((e)=>Vd("handoff",e));k($Ye,{notes:["Use this when key management fails because the active key lacks api_keys:manage. That scope fails closed on purpose and cannot be granted through the API by the key missing it.","This creates nothing and never prints a key. The link opens the dashboard create-key form prefilled; the owner reviews it, clicks Create, and copies the key from the browser.","With --replaces, the dashboard offers to revoke the predecessor once the replacement exists, which finishes a rotation in one visit."],examples:['sequenzy api-keys handoff --name "Production sync (rotated)" --preset agent_safe --replaces current','sequenzy api-keys handoff --scopes "subscribers:read,events:write" --company comp_123']});var qYe=qu.command("list").description("List company API keys without secret values").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>Vd("list",e));k(qYe,{notes:["Use the returned ID, name, prefix, and current-key marker to identify a key before revoking it."],examples:["sequenzy api-keys list","sequenzy api-keys list --company comp_123 --json"]});var QYe=qu.command("update").description("Rename a company API key or change its permissions in place").argument("<api-key-id>","Exact API key ID returned by api-keys list").option("-n, --name <name>","New human-readable API key name").option("-c, --company <id>","Company ID override for personal API keys").option("--preset <preset>","Replacement permission preset: full_access, read_only, agent_safe, ai_drafting, data_ingest_safe, data_ingest_automations, transactional_sender, marketing_sender").option("--scopes <scopes>","Comma-separated replacement permission scopes (overrides --preset)").option("--json","Print raw JSON").action((e,t)=>Vd("update",{apiKeyId:e,...t}));k(QYe,{notes:["The key value does not change, so clients holding it keep working with the new permissions.","--preset and --scopes replace the whole selection rather than merging into it. Run 'sequenzy api-keys list --json' first to see the current scopes."],examples:["sequenzy api-keys update key_123 --preset agent_safe",'sequenzy api-keys update key_123 --scopes "subscribers:read,subscribers:tag,tags:read"','sequenzy api-keys update key_123 --name "Agent key"']});var zYe=qu.command("revoke").description("Permanently revoke a company API key").argument("<api-key-id>","Exact API key ID returned by api-keys list").option("-y, --yes","Skip the confirmation prompt").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Vd("revoke",{apiKeyId:e,...t}));k(zYe,{notes:["Revocation cannot be undone. Run 'sequenzy api-keys list' first and verify the exact ID and prefix."],examples:["sequenzy api-keys revoke key_123 --company comp_123 --yes"]});var HYe=qu.command("delete").description("Alias for api-keys revoke").argument("<api-key-id>","Exact API key ID returned by api-keys list").option("-y, --yes","Skip the confirmation prompt").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Vd("delete",{apiKeyId:e,...t}));k(HYe,{notes:["This is a compatibility alias for 'sequenzy api-keys revoke'."],examples:["sequenzy api-keys delete key_123 --company comp_123 --yes"]});var Ep=Tt.command("websites").description("Manage sending domains and integration guides").action(()=>Ep.help());k(Ep,{notes:["Use 'guide' for code examples, 'check' to inspect current DNS verification details, and 'verify' to run a fresh check."],examples:["sequenzy websites list --company comp_123","sequenzy websites add example.com --company comp_123","sequenzy websites guide --framework nextjs --use-case transactional"]});var jYe=Ep.command("list").description("List sending domains for a company").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>Ff("list",e));k(jYe,{examples:["sequenzy websites list --company comp_123"]});var GYe=Ep.command("add <domain>").description("Add a sending domain").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Ff("add",{domain:e,...t}));k(GYe,{notes:["Publish every DNS record returned by the command, including DMARC when present; record shapes vary between unified and legacy domains."],examples:["sequenzy websites add example.com --company comp_123"]});var VYe=Ep.command("check <domain>").description("Inspect sending domain verification details").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Ff("check",{domain:e,...t}));k(VYe,{examples:["sequenzy websites check example.com --company comp_123"]});var WYe=Ep.command("verify <domain>").description("Run a fresh DNS check for a sending domain").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Ff("verify",{domain:e,...t}));k(WYe,{notes:["'verified' is the DNS verdict only. Sending is reported separately as 'Sending' - a domain with correct DNS can still be activating."],examples:["sequenzy websites verify example.com --company comp_123"]});var KYe=Ep.command("guide").description("Print framework-specific integration code").option("--framework <name>","Framework name, e.g. nextjs, express, python").option("--use-case <name>","Use case, e.g. transactional, subscribe_form, event_tracking").option("--json","Print raw JSON").action((e)=>Ff("guide",e));k(KYe,{examples:["sequenzy websites guide","sequenzy websites guide --framework nextjs --use-case transactional","sequenzy websites guide --framework python --use-case event_tracking"]});var fo=Tt.command("integrations").description("Inspect and manage connected integrations").action(()=>fo.help());k(fo,{notes:["Credentials, access tokens, and webhook secrets are never returned.","`connect` covers API-key / webhook-secret providers (Polar, Paddle, Dodo, Whop, Creem, Chargebee, Clerk, PostHog, Segment, Affonso, Attio). OAuth and app-install providers (Stripe, Shopify, Supabase, GitHub, WooCommerce) connect in the dashboard, as does disconnecting - both handle provider-specific cleanup.","Use `catalog` to see what a provider does before connecting it, and `get` to see what a connected one is doing now."],examples:["sequenzy integrations list","sequenzy integrations catalog --provider stripe","sequenzy integrations connect clerk --webhook-secret whsec_...","sequenzy integrations get int_123","sequenzy integrations activity --status failed"]});var JYe=fo.command("connect <provider>").description("Connect an API-key / webhook-secret integration").option("-c, --company <id>","Company ID override for personal API keys").option("--api-key <key>","Provider API key (or set SEQUENZY_INTEGRATION_API_KEY)").option("--webhook-secret <secret>","Webhook signing secret (or set SEQUENZY_INTEGRATION_WEBHOOK_SECRET)").option("--account-id <id>","Provider account id: Paddle seller ID, Dodo business ID, Whop company ID, Creem store ID, or Chargebee site name").option("--attio-list <mapping...>","Attio only: map SEQUENZY_LIST_ID=ATTIO_LIST_ID_OR_SLUG (one or more)").option("--attio-clear-lists","Attio only: remove every saved Sequenzy-to-Attio list mapping").option("--attio-enable-company-domain","Attio only: create or match companies from work email domains").option("--attio-disable-company-domain","Attio only: do not create or match companies from work email domains").option("--event-allowlist <events...>","PostHog and Segment only: sync only these event names instead of everything").option("--history-region <region>","PostHog and Segment history import region: us or eu").option("--history-project-id <id>","PostHog history import project ID").option("--history-space-id <id>","Segment history import Unify space ID (spa_...)").option("--history-api-key <key>","History import credential: the PostHog personal API key (or SEQUENZY_POSTHOG_PERSONAL_API_KEY) or the Segment Profile API token (or SEQUENZY_SEGMENT_PROFILE_API_TOKEN)").option("--json","Print raw JSON").action((e,t)=>Ire(e,t));k(JYe,{notes:["Run `sequenzy integrations catalog --provider <provider>` first: its connectFields list what this provider needs.","Pass secrets via the environment variables instead of flags to keep them out of shell history.","The response includes the webhook URL to configure at the provider with the same secret, except Attio which is outbound-only.","Reconnecting an already-connected provider replaces its stored credentials.","OAuth and app-install providers (Stripe, Shopify, Supabase, GitHub, WooCommerce) cannot be connected here - use the dashboard."],examples:["sequenzy integrations connect clerk --webhook-secret whsec_...","sequenzy integrations connect paddle --api-key pdl_... --webhook-secret pdl_ntf_... --account-id 12345","sequenzy integrations connect polar --api-key polar_oat_... --webhook-secret whsec_...","sequenzy integrations connect posthog --webhook-secret phc_shared_secret --history-region us --history-project-id 12345 --history-api-key phx_...","sequenzy integrations connect segment --webhook-secret my_shared_secret","sequenzy integrations connect segment --webhook-secret my_shared_secret --history-region us --history-space-id spa_abc123 --history-api-key profile_token","sequenzy integrations connect affonso --api-key aff_... --webhook-secret whsec_...","sequenzy integrations connect attio --api-key attio_... --attio-list list_123=field-guide"]});var YYe=fo.command("list").description("List connected integrations and their sync health").option("-c, --company <id>","Company ID override for personal API keys").option("--all","Include disconnected/inactive integrations").option("--json","Print raw JSON").action((e)=>kre(e));k(YYe,{examples:["sequenzy integrations list --company comp_123","sequenzy integrations list --all"]});var ZYe=fo.command("catalog").description("Show what each integration provider syncs, emits, and supports").option("-c, --company <id>","Company ID override for personal API keys").option("--provider <provider>","Only show one provider, e.g. stripe").option("--category <category>","Filter by category: payments, ecommerce, auth, analytics, ads, affiliate, cms, crm, developer").option("--json","Print raw JSON").action((e)=>Dre(e));k(ZYe,{notes:["Works whether or not the provider is connected, so you can compare providers before picking one.","Events listed here are the ones a sequence can trigger on. A provider that emits nothing cannot drive automations."],examples:["sequenzy integrations catalog","sequenzy integrations catalog --provider stripe","sequenzy integrations catalog --category ecommerce --json"]});var XYe=fo.command("get <id>").description("Show one integration: what it does, its events, and its wiring").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>wre(e,t));k(XYe,{notes:["Lists every event the provider emits, the tags each one applies through your sync rules, and which sequences trigger on it.","Events with no sequence are reported so you can see what the integration is feeding you that nothing acts on.","Get the id from `sequenzy integrations list`."],examples:["sequenzy integrations get int_123","sequenzy integrations get int_123 --json"]});var eZe=fo.command("activity").description("Show recent integration webhook and sync activity").option("-c, --company <id>","Company ID override for personal API keys").option("--integration <id>","Only show one integration's activity").option("--provider <provider>","Only show one provider's activity").option("--status <status>","Filter by status: received, queued, processed, skipped, failed").option("--limit <n>","Rows to return (1-100, default 25)").option("--json","Print raw JSON").action((e)=>vre(e));k(eZe,{notes:["Activity is retained for 24 hours.","Use `--status failed` when an integration reports connected but contacts are not appearing."],examples:["sequenzy integrations activity","sequenzy integrations activity --status failed --limit 50","sequenzy integrations activity --integration int_123"]});var tZe=fo.command("sync <id>").description("Queue a manual re-sync for a connected integration").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>xre(e,t));k(tZe,{notes:["Supported for Stripe, Polar, Paddle, Dodo, Creem, Chargebee, Whop, Supabase, PostHog, and Segment. Other providers re-sync from the dashboard.","For Supabase this backfills users from the table already configured for the integration; it cannot target a different table. Run it once after connecting, because the database trigger only sends rows that change after it is installed.","For PostHog and Segment this re-runs the event-history import with the stored credentials and is the supported retry for one that failed. It restarts from the beginning; already-imported events dedupe.","Returns immediately; poll `sequenzy integrations get <id>` to watch syncStatus and lastSyncAt.","Fails with a conflict if a sync is already running."],examples:["sequenzy integrations sync int_123"]});var nZe=fo.command("enable-sync <id>").description("Turn sync back on for an integration").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>f9(e,!0,t));k(nZe,{examples:["sequenzy integrations enable-sync int_123"]});var rZe=fo.command("disable-sync <id>").description("Pause bulk imports without disconnecting the integration").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>f9(e,!1,t));k(rZe,{notes:["Stops bulk imports and backfills but keeps the connection, credentials, and live webhook delivery active.","This does NOT stop the integration creating contacts. The provider's live webhook keeps writing every new signup or customer. Use `set-lists` to control where they land, or disconnect the integration from the dashboard to stop it entirely."],examples:["sequenzy integrations disable-sync int_123"]});var iZe=fo.command("set-lists <id>").description("Choose which lists this integration's new contacts join").option("-c, --company <id>","Company ID override for personal API keys").option("--list <id>","Target this list (repeatable)",(e,t=[])=>[...t,e]).option("--none","Target no list at all").option("--default","Fall back to the workspace default lists").option("--json","Print raw JSON").action((e,t)=>Ere(e,t));k(iZe,{notes:["Takes effect on future provider writes. Nothing is applied retroactively and nobody is ever removed from a list. Wix/Webflow submissions, Shopify customer updates, and Supabase resubscriptions can add existing contacts to the new targets; Stripe applies targeting only when its webhook creates a subscriber.","This changes list membership only. Contacts are still created, their attributes still sync, sync-rule tags still apply, and sequences triggered by contact_added on any list still enroll them - pair it with `sequences pause-enrollments` if you need those stopped too.","`--none` and `--default` are different: --none means new contacts join no list, --default means they follow the workspace default lists setting.","Supported for Supabase, Stripe, Shopify, Wix, and Webflow. `integrations get <id>` reports the current targeting under `ingestion`, with list names."],examples:["sequenzy integrations set-lists int_123 --list list_abc --list list_def","sequenzy integrations set-lists int_123 --none","sequenzy integrations set-lists int_123 --default"]});var oZe=fo.command("pixel <id>").description("Show the Shopify storefront tracking pixel state").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>yre(e,t));k(oZe,{notes:["Shopify only. Read live from the store, because a merchant can remove the pixel without notifying Sequenzy.","Check this before trusting product views, cart activity, or browse abandonment: without the pixel those events never arrive and any sequence triggered by them silently never fires."],examples:["sequenzy integrations pixel int_123"]});var aZe=fo.command("enable-pixel <id>").description("Install or repoint the Shopify storefront tracking pixel").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>bre(e,t));k(aZe,{notes:["Idempotent: an already-live pixel is reported with `changed: false`.","Events start arriving on the next storefront visit; nothing is backfilled for the period the pixel was off.","Fails with guidance if the store granted an older permission set - reconnect Shopify from the dashboard, then retry."],examples:["sequenzy integrations enable-pixel int_123"]});var sZe=fo.command("attio <id>").description("Show Attio list mappings and available people-lists").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Bre(e,t));k(sZe,{notes:["Attio only. Reads live people-lists from Attio using the stored access token — you do not need the secret again.","mappedListCount 0 means list joins are not synced. Map them with `set-attio-lists` rather than reconnecting."],examples:["sequenzy integrations attio int_123"]});var lZe=fo.command("set-attio-lists <id>").description("Map Sequenzy lists to Attio lists without reconnecting").option("-c, --company <id>","Company ID override for personal API keys").option("--map <mapping...>","Complete SEQUENZY_LIST_ID=ATTIO_LIST_ID_OR_SLUG map (one or more)").option("--clear-maps","Remove every saved Sequenzy-to-Attio list mapping").option("--enable-company-domain","Create or match companies from work email domains").option("--disable-company-domain","Do not create or match companies from work email domains").option("--json","Print raw JSON").action((e,t)=>Sre(e,t));k(lZe,{notes:["Uses the stored Attio access token. Do not reconnect just to change mappings.","--map replaces the saved map entirely. Run `sequenzy integrations attio <id>` first to see Sequenzy list ids and live Attio list ids/slugs.","Unmapped lists are not synced. Unmapping does not remove anyone from Attio (add-only)."],examples:["sequenzy integrations set-attio-lists int_123 --map list_abc=field-guide list_def=benchmark","sequenzy integrations set-attio-lists int_123 --clear-maps","sequenzy integrations set-attio-lists int_123 --disable-company-domain"]});var cZe=fo.command("guide").description("Print integration code examples for your stack").option("-c, --company <id>","Company ID override for personal API keys").option("--framework <framework>","Framework or language, e.g. nextjs").option("--use-case <use-case>","transactional, subscribe_form, event_tracking, or ecommerce").option("--json","Print raw JSON").action((e)=>gre(e));k(cZe,{notes:["Same examples the MCP `get_integration_guide` tool returns.","For Stripe, Polar, Paddle, Dodo, Creem, Shopify, or WooCommerce, connect the native integration instead of writing tracking code by hand."],examples:["sequenzy integrations guide --use-case transactional --framework nextjs","sequenzy integrations guide --use-case ecommerce"]});var mA=Tt.command("sender-profiles").description("Inspect, rename, and delete sending identity profiles").action(()=>mA.help());k(mA,{notes:["Shows which profiles are account defaults and whether each sender address sits on a verified sending domain.","`update` renames one profile in place and never changes the account defaults. To change which profile is the default, use `sequenzy companies update <id> --sender-profile-id <id>`."],examples:["sequenzy sender-profiles list","sequenzy sender-profiles update sender_abc123 --name 'SnapCount'","sequenzy sender-profiles delete sender_abc123 --yes"]});var uZe=mA.command("list").description("List sender and reply-to profiles").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>Bse(e));k(uZe,{examples:["sequenzy sender-profiles list --company comp_123"]});var dZe=mA.command("update <id>").description("Rename a sender or reply-to profile without changing defaults").requiredOption("--name <name>","New display name for the profile").option("--reply","Treat <id> as a reply-to profile instead of a sender").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Sse(e,t));k(dZe,{notes:["Renames the profile only. The account default From/Reply-To selection is left exactly as it was.","Get profile IDs from `sequenzy sender-profiles list`.","A company cannot have two sender identities with the same name on one address, so a colliding rename is rejected with the ID of the profile already using that name.","Requires the companies:manage scope."],examples:["sequenzy sender-profiles update sender_abc123 --name 'SnapCount'","sequenzy sender-profiles update reply_abc123 --name 'SnapCount' --reply","sequenzy sender-profiles update sender_abc123 --name 'SnapCount' --company comp_123 --json"]});var pZe=mA.command("delete <id>").description("Permanently delete a sender (From) profile").option("--yes","Skip the confirmation prompt").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>vse(e,t));k(pZe,{notes:["This cannot be undone. Reply-to profiles are not supported by this command.","Deletion is blocked for the last sender and for profiles used by live campaigns, active sequences, or transactional emails.","Eligible draft campaigns and the account default move to the best remaining sender when needed; the result reports that fallback profile ID.","Requires the companies:manage scope."],examples:["sequenzy sender-profiles delete sender_abc123","sequenzy sender-profiles delete sender_abc123 --yes --json"]});var dS=Tt.command("sending").description("Check company-level sending status and restore paused sending").action(()=>dS.help());k(dS,{notes:["Company-level sending can be paused automatically when the permanent-bounce, temporary-bounce, or complaint rate crosses its threshold. While paused, every send is blocked - campaigns, sequence steps, transactional email, and test sends.","Sender-health enforcement uses all-time totals counted from a reset watermark, NOT a rolling window. A paused rate does not expire on its own, so waiting does not restore sending.","`status` needs account:read. `resume` needs companies:manage plus owner or admin access."],examples:["sequenzy sending status","sequenzy sending resume --confirm-list-sanitized"]});var mZe=dS.command("status").description("Show sending status, sender-health rates, and how to restore sending").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>Tse(e));k(mZe,{notes:["Run this first whenever a send or test send fails for a reason that is not a validation error.","Shows the exact pause reason, the measured rates against the thresholds that apply at your volume, the automated sender-health review state, whether one-click resume is available, and ordered remediation steps.","`metricsWindow` reports the enforcement watermarks. `expiresAt` is always null because there is no rolling window to wait out."],examples:["sequenzy sending status","sequenzy sending status --json","sequenzy sending status --company comp_123"]});var fZe=dS.command("resume").description("Restore paused sending after fixing the cause of the bounces").option("--confirm-list-sanitized","Required. Confirms you fixed the source of the invalid addresses and left every permanent bounce suppressed").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>kse(e));k(fZe,{notes:["This is the supported remediation path, not a bypass. It never removes suppressions.","Only a permanent-bounce pause can be cleared this way, and only after the automated sender-health review has cleared it. Any other state needs a support review, and the error names which gate stopped you.","Check `selfResume.canSelfResume` with `sequenzy sending status` before calling this.","On success the bounce watermark resets, so the paused rate is recalculated from sends made after the resume, and the service attempts to requeue paused campaigns plus due sequence steps. If that handoff is only partial, the success message gives recovery guidance.","The confirmation is recorded on the account audit trail, so only pass --confirm-list-sanitized once the fix is actually shipped."],examples:["sequenzy sending resume --confirm-list-sanitized","sequenzy sending resume --confirm-list-sanitized --json"]});var pS=Tt.command("tracking").description("Inspect and update email tracking configuration").action(()=>pS.help());k(pS,{notes:["Covers open/click/unsubscribe tracking, attribution window, double opt-in for new contacts, auto UTM, the dedicated click-tracking domain, and reply tracking."],examples:["sequenzy tracking settings","sequenzy tracking update --opens off --clicks off"]});var gZe=pS.command("settings").description("Show the company's tracking configuration").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>_se(e));k(gZe,{examples:["sequenzy tracking settings --company comp_123"]});var xZe=pS.command("update").description("Update account-wide tracking defaults").option("--opens <on|off>","Enable or disable open tracking").option("--clicks <on|off>","Enable or disable click tracking").option("--transactional-opens <on|off>","Enable or disable open tracking by default for Transactional API sends").option("--transactional-clicks <on|off>","Enable or disable click tracking by default for Transactional API sends").option("--strict-bot-filtering <on|off>","Enable or disable aggressive bot filtering (can lower reported open/click rates)").option("--unsubscribes <on|off>","Track unsubscribe link clicks; off uses direct sequenzy.com links even with a custom domain").option("--attribution-window-hours <hours>","Default revenue attribution window in hours (1-720)").option("--double-opt-in <on|off>","Require email confirmation before new contacts become subscribed").option("--double-opt-in-redirect-url <url>","Where the confirmation page sends subscribers after they confirm; pass an empty string to clear it").option("--auto-utm <on|off>","Enable or disable automatic UTM tagging").option("--utm-source <template>","utm_source template").option("--utm-medium <template>","utm_medium template").option("--utm-campaign <template>","utm_campaign template").option("--utm-content <template>","utm_content template").option("--utm-term <template>","utm_term template").option("--reset-utm","Reset every UTM parameter to the platform defaults").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>Ise(e));k(xZe,{notes:["Partial update: omitted flags keep their current values.","--unsubscribes off routes unsubscribe links directly to sequenzy.com, even with a custom tracking domain. Actual unsubscribes and their email attribution are still recorded.","Transactional API defaults can only narrow the account-wide open and click settings; per-send trackingSettings can opt out again.","Applies to emails sent afterwards; already-sent emails keep the links they were rendered with.","UTM templates support placeholders such as {{email.subject}} and {{link.text}}.","--double-opt-in on makes new contacts start pending until they confirm; it needs a sender profile and provisions the confirmation email automatically. Existing active contacts are unaffected.","--double-opt-in-redirect-url sends subscribers to your own page after they confirm; without it they stay on the branded confirmation page.","Reply tracking is set with `sequenzy companies update`; the dedicated tracking domain is configured in the dashboard."],examples:["sequenzy tracking update --opens off --clicks off","sequenzy tracking update --transactional-opens off --transactional-clicks off","sequenzy tracking update --attribution-window-hours 168","sequenzy tracking update --double-opt-in on","sequenzy tracking update --double-opt-in-redirect-url https://example.com/welcome",'sequenzy tracking update --auto-utm on --utm-source newsletter --utm-campaign "{{email.subject}}"',"sequenzy tracking update --reset-utm"]});var r3=Tt.command("shopify").description("Manage the connected Shopify store's automation settings").action(()=>r3.help());k(r3,{notes:["Requires a connected Shopify integration on the company.","Browse abandonment emails shoppers who viewed a product but didn't buy; cart abandonment fires ecommerce.cart_abandoned with the full cart after the cart sits inactive; price drop alerts email recent viewers when a product's price falls."],examples:["sequenzy shopify settings get","sequenzy shopify settings update --price-drop off","sequenzy shopify settings update --browse-delay-hours 4 --browse-cooldown-hours 48"]});var i3=r3.command("settings").description("Browse-abandonment, cart-abandonment, and price-drop automation settings").action(()=>i3.help()),AZe=i3.command("get").description("Show the effective automation settings").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>O5("get",e));k(AZe,{notes:["Shows the effective values - platform defaults apply until the store overrides them."],examples:["sequenzy shopify settings get --json"]});var EZe=i3.command("update").description("Update browse-abandonment, cart-abandonment, and/or price-drop settings").option("--browse-abandonment <on|off>","Enable or disable browse abandonment").option("--browse-delay-hours <hours>","Hours to wait after a product view before the abandonment check (default 2)").option("--browse-cooldown-hours <hours>","Minimum hours between browse-abandoned events per subscriber (default 24)").option("--reset-browse-abandonment","Reset browse abandonment to the platform defaults").option("--cart-abandonment <on|off>","Enable or disable cart abandonment (ecommerce.cart_abandoned)").option("--cart-delay-hours <hours>","Hours of cart inactivity before abandonment (positive, max 168; default 1)").option("--cart-cooldown-hours <hours>","Minimum hours between cart-abandoned events (positive, max 720; default 24)").option("--cart-expire-after-hours <hours>","Drop a cart untouched this long instead of emailing about it (positive, max 720; default 72)").option("--reset-cart-abandonment","Reset cart abandonment to the platform defaults").option("--price-drop <on|off>","Enable or disable price drop alerts").option("--price-drop-min-percent <percent>","Minimum price decrease percent to alert on (default 5)").option("--price-drop-lookback-days <days>","How many days back viewers qualify as the audience (default 30)").option("--price-drop-cooldown-days <days>","Minimum days between price-drop events per subscriber and product (default 7)").option("--reset-price-drop","Reset price drop alerts to the platform defaults").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>O5("update",e));k(EZe,{notes:["Partial update: omitted flags keep their current values.","If no sequence handles ecommerce.price_drop, Sequenzy sends a default price-drop email to active subscribers."],examples:["sequenzy shopify settings update --browse-abandonment off","sequenzy shopify settings update --cart-delay-hours 2","sequenzy shopify settings update --price-drop-min-percent 10 --price-drop-lookback-days 14","sequenzy shopify settings update --reset-price-drop"]});var Qu=Tt.command("sms").description("Inspect the SMS add-on status for a company").action(()=>Qu.help());k(Qu,{notes:["SMS sequence steps only send when the add-on is enabled, the plan is eligible, and an active number exists.",'Add SMS steps to sequences with type: "sms" in sequences create --steps-* or update --insert-steps-*.','Generate SMS copy with `sequenzy generate sms "<prompt>"`.'],examples:["sequenzy sms settings","sequenzy sms settings --json"]});var hZe=Qu.command("settings").description("Show SMS add-on status, credits, and phone numbers").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>mp("settings",e));k(hZe,{notes:["readyToSend in the JSON output tells you whether SMS sequence steps will actually send."],examples:["sequenzy sms settings --json"]});var yZe=Qu.command("label <number-id> [label]").description("Set or clear the label shown for an SMS number").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t,n)=>mp("label",{numberId:e,label:t,...n}));k(yZe,{notes:["Run without a label to clear the current label.","Use `sequenzy sms settings` to find each number ID."],examples:['sequenzy sms label num_abc123 "Marketing"',"sequenzy sms label num_abc123"]});var bZe=Qu.command("update <number-id>").description("Update an SMS number's label and/or brand prefix override").option("--label <label>","Label tag; pass an empty string to clear").option("--brand-prefix <prefix>","Per-number brand prefix override; empty string clears back to the account-wide prefix").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>mp("update",{numberId:e,...t}));k(bZe,{notes:["Only the flags you pass are changed; omitted fields keep their value.",'Messages go out as "{prefix}: your message" - the number override wins over the account-wide prefix set in Settings > SMS.',"Use `sequenzy sms settings` to find each number ID."],examples:['sequenzy sms update num_abc123 --label "Support" --brand-prefix "Acme Support"','sequenzy sms update num_abc123 --brand-prefix ""']});var CZe=Qu.command("send-test <phone>").description("Send a test SMS to a phone number").option("-t, --text <text>","Plain-text message body").option("--image-url <url...>","Publicly reachable MMS image URL (repeat for up to 2)").option("--from-number <number-id>","Active SMS number ID to send from (defaults to the oldest active number)").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>mp("send-test",{phone:e,...t}));k(CZe,{notes:["Sends a real text and charges credits. Limited to 100 test sends per company per rolling 24 hours; bypasses quiet hours; excluded from step stats.","Requires the SMS add-on with a verified number - check `sequenzy sms settings` first.","Use --from-number with an active number ID from `sequenzy sms settings` to test a specific number."],examples:['sequenzy sms send-test +15550100123 --text "Test from Sequenzy"','sequenzy sms send-test +15550100123 --text "Test" --from-number num_abc123']});var BZe=Qu.command("usage").description("Show per-number SMS usage (sends, credits, last sent)").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>mp("usage",e));k(BZe,{notes:["Totals exclude test sends; test sends are counted separately per number."],examples:["sequenzy sms usage","sequenzy sms usage --json"]});var SZe=Qu.command("release <number-id>").description("Release an SMS number back to the carrier (irreversible)").option("-y, --yes","Skip the confirmation prompt").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>mp("release",{numberId:e,...t}));k(SZe,{notes:["Releasing is irreversible: the number is handed back to the carrier and cannot be recovered.","Released numbers stop counting toward the workspace number limit, freeing a slot for a new purchase.","Use `sequenzy sms settings` to find each number ID."],examples:["sequenzy sms release num_abc123 --yes"]});ree(Tt);var mS=Tt.command("email-design-system").description("Manage the visual identity every AI-generated email renders inside").action(()=>mS.help());k(mS,{notes:["The design system fixes the company's visual grammar (kickers, alignment, buttons, dividers, density, openers) and the composition spine that anchors email structure.","It is stored as the company's design direction text (emailDesignPrompt): adjustments rewrite that text, and free prose in it is preserved. Tokens the text does not state derive from brand context."],examples:["sequenzy email-design-system get","sequenzy email-design-system update --button-shape pill --spine editorial","sequenzy email-design-system update --reset"]});var vZe=mS.command("get").description("Show the effective email design system").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>A6("get",e));k(vZe,{notes:["The JSON output includes isDefault: true while the identity is still derived from brand context."],examples:["sequenzy email-design-system get --json"]});var _Ze=mS.command("update").description("Adjust the email design system (partial update) or reset it").option("--kicker-style <style>","chip | letterspaced | none").option("--title-alignment <alignment>","left | center").option("--button-shape <shape>","rounded | pill").option("--divider-style <style>","line | space").option("--density <density>","airy | compact").option("--opener-treatments <treatments>","Comma-separated: hero-image,hero-color,header-hero,editorial-masthead,title-led").option("--spine <spine>","hero-led | editorial | product-spec").option("--reset","Clear the design direction text; return to derived defaults").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>A6("update",e));k(_Ze,{notes:["Only the passed flags change; everything else keeps its current value.","Adjustments apply to every future AI email generation and sequence enrichment.","The change is written into the design direction text; custom prose in that text is preserved below the new identity. For free-prose edits use 'companies update --email-design-prompt'."],examples:["sequenzy email-design-system update --spine editorial --kicker-style letterspaced","sequenzy email-design-system update --opener-treatments editorial-masthead,title-led","sequenzy email-design-system update --reset"]});var fS=Tt.command("sync-rules").description("Manage automatic tag changes applied when events fire").action(()=>fS.help());k(fS,{notes:["Sync rules map events to tag changes, e.g. an order-placed event adding a customer tag.","Rules can carry conditions: required/excluded subscriber tags, and a product match for commerce events (tag buyers by product tag, collection, type, or vendor)."],examples:["sequenzy sync-rules get","sequenzy sync-rules update --rules-file ./sync-rules.json","sequenzy sync-rules update --reset"]});var IZe=fS.command("get").description("Show the effective sync rules").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>V5("get",e));k(IZe,{notes:["Shows the platform defaults until the company saves custom rules; the JSON output includes isDefault."],examples:["sequenzy sync-rules get --json"]});var DZe=fS.command("update").description("Replace the sync rules or reset them to the defaults").option("--rules-json <json>","Inline JSON array with the full rule set").option("--rules-file <file>","Path to a JSON file with the full rule set").option("--reset","Reset the company to the platform default rules").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>V5("update",e));k(DZe,{notes:["This replaces the FULL rule set - fetch with 'sync-rules get --json', edit, then update.",'Each rule: {"triggerEvent":"...","actions":{"addTags":[...],"removeTags":[...]},"conditions":{...}}.'],examples:["sequenzy sync-rules update --rules-file ./sync-rules.json",`sequenzy sync-rules update --rules-json '[{"triggerEvent":"ecommerce.order_placed","actions":{"addTags":["vinyl-collector"],"removeTags":[]},"conditions":{"purchasedProduct":{"tags":["Vinyl"]}}}]'`,"sequenzy sync-rules update --reset"]});var Pf=Tt.command("generate").description("Generate email and SMS content with AI").action(()=>Pf.help());k(Pf,{notes:["Generated email and SMS content is returned as draft content. Review it before sending.","`generate sequence` is deprecated and persists a disabled draft. Use `sequences create <name> --trigger <trigger> --goal <goal>` instead.","Use --json when another tool or agent should parse the generated output."],examples:['sequenzy generate email "Welcome a new user to our analytics product"','sequenzy generate subjects "April product launch" --count 8','sequenzy generate sms "Cart reminder with a free-shipping hook" --count 3']});Pf.command("email <prompt>").description("Generate email blocks from a prompt").option("-s, --style <style>","Prompt generation style. Pass designed or plain to force the designed or plain-text email style; other values are freeform guidance (defaults to the company's email style preference)").option("-t, --tone <tone>","Tone: professional, casual, friendly").option("--company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>kx("email",{prompt:e,...t}));Pf.command("sequence <goal>").description("[DEPRECATED] Persist a disabled AI sequence draft; use `sequences create`").option("--name <name>","Optional sequence name; defaults to the goal").option("--list-id <id>","Optional list ID for the contact_added trigger").option("-c, --count <number>","Number of emails (1-10)","5").option("-d, --days <number>","Duration in days","14").option("--company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>kx("sequence",{goal:e,...t}));Pf.command("subjects <topic>").description("Generate A/B subject line variants").option("-c, --count <number>","Number of variants","5").option("--company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>kx("subjects",{topic:e,...t}));var wZe=Pf.command("sms <prompt>").description("Generate SMS message variants from a prompt").option("-c, --count <number>","Number of variants (1-10)","3").option("--company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>kx("sms",{prompt:e,...t}));k(wZe,{notes:["Messages are plain text with encoding and segment counts; use them as the text of an SMS sequence step.","Opt-out footers and the brand prefix are added automatically at send time - never include them in the message.","Check `sequenzy sms settings` to confirm the SMS add-on is ready before enabling SMS sequences."],examples:['sequenzy generate sms "Flash sale ends tonight" --count 5 --json']});var hp=Tt.command("web-tracking").description("Manage publishable keys for the browser tracking SDK").action(()=>hp.help());k(hp,{notes:["These keys are publishable: they ship in your site's page source, so they are readable by anyone. They authorize storefront events only, never the rest of the API.","Restrict every key with --origins. An empty allowlist lets any site send events with the key.","Shopify stores do not need a key - connect the integration and enable the pixel instead (`sequenzy integrations enable-pixel`).","Anonymous visits are buffered and replayed after `sequenzy.identify(email, identityToken)`. Mint the short-lived token from your authenticated backend; never expose a secret API key in browser code."],examples:['sequenzy web-tracking create --name "Storefront" --origins https://example.com,https://*.example.com',"sequenzy web-tracking list","sequenzy web-tracking update wtk_123 --origins https://example.com","sequenzy web-tracking update wtk_123 --deactivate"]});var TZe=hp.command("list").description("List web tracking keys and where each one is allowed to run").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>vle(e));k(TZe,{examples:["sequenzy web-tracking list","sequenzy web-tracking list --json"]});var kZe=hp.command("get <id>").description("Show one key with its install snippet").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>_le(e,t));k(kZe,{examples:["sequenzy web-tracking get wtk_123"]});var RZe=hp.command("create").description("Create a publishable key and print the install snippet").requiredOption("--name <name>","Human-readable label, e.g. 'Storefront'").option("--origins <origins>","Comma-separated allowed origins, e.g. https://example.com,https://*.example.com").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e)=>Ile(e));k(RZe,{notes:["A bare domain is read as https. Use https://*.example.com to cover subdomains; it does not match the apex, so list that separately if you need it.","Include your local development origin (e.g. http://localhost:3000) while you are wiring the SDK up.","The snippet embeds both the key and the workspace id, so paste it as printed."],examples:['sequenzy web-tracking create --name "Storefront" --origins https://example.com','sequenzy web-tracking create --name "Dev" --origins http://localhost:3000']});var FZe=hp.command("update <id>").description("Rename a key, change its origins, or revoke it").option("--name <name>","New label").option("--origins <origins>","Replace the allowed origins (pass an empty string to clear them)").option("--activate","Re-enable a revoked key").option("--deactivate","Revoke the key without deleting it").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>Dle(e,t));k(FZe,{notes:["--origins replaces the whole list rather than appending to it.","Revoking keeps the key value, so you can still find the snippet to remove from your site. Events stop within a minute."],examples:["sequenzy web-tracking update wtk_123 --origins https://example.com,https://shop.example.com","sequenzy web-tracking update wtk_123 --deactivate"]});var NZe=hp.command("delete <id>").description("Permanently delete a web tracking key").option("-y, --yes","Skip the confirmation prompt").option("-c, --company <id>","Company ID override for personal API keys").option("--json","Print raw JSON").action((e,t)=>wle(e,t));k(NZe,{notes:["Remove the snippet from your site too, otherwise it keeps posting events that are rejected.","Prefer `update --deactivate` if you may want the key back."],examples:["sequenzy web-tracking delete wtk_123 --yes"]});await Tt.parseAsync();process.exit(process.exitCode??0);