@dereekb/zoho 13.8.0 → 13.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/cli/LICENSE +21 -0
  2. package/cli/index.js +4 -0
  3. package/cli/package.json +20 -0
  4. package/index.cjs.js +2537 -228
  5. package/index.esm.js +2474 -229
  6. package/nestjs/index.cjs.js +852 -191
  7. package/nestjs/index.esm.js +849 -193
  8. package/nestjs/package.json +5 -5
  9. package/nestjs/src/lib/desk/desk.api.d.ts +213 -0
  10. package/nestjs/src/lib/desk/desk.config.d.ts +27 -0
  11. package/nestjs/src/lib/desk/desk.module.d.ts +62 -0
  12. package/nestjs/src/lib/desk/index.d.ts +3 -0
  13. package/nestjs/src/lib/index.d.ts +1 -0
  14. package/package.json +12 -5
  15. package/src/lib/desk/desk.agent.d.ts +45 -0
  16. package/src/lib/desk/desk.api.activities.d.ts +43 -0
  17. package/src/lib/desk/desk.api.agents.d.ts +91 -0
  18. package/src/lib/desk/desk.api.attachments.d.ts +47 -0
  19. package/src/lib/desk/desk.api.comments.d.ts +86 -0
  20. package/src/lib/desk/desk.api.contacts.d.ts +81 -0
  21. package/src/lib/desk/desk.api.departments.d.ts +47 -0
  22. package/src/lib/desk/desk.api.followers.d.ts +57 -0
  23. package/src/lib/desk/desk.api.page.d.ts +72 -0
  24. package/src/lib/desk/desk.api.tags.d.ts +102 -0
  25. package/src/lib/desk/desk.api.threads.d.ts +60 -0
  26. package/src/lib/desk/desk.api.tickets.d.ts +227 -0
  27. package/src/lib/desk/desk.api.time.d.ts +109 -0
  28. package/src/lib/desk/desk.config.d.ts +75 -0
  29. package/src/lib/desk/desk.contact.d.ts +50 -0
  30. package/src/lib/desk/desk.d.ts +44 -0
  31. package/src/lib/desk/desk.department.d.ts +27 -0
  32. package/src/lib/desk/desk.error.api.d.ts +33 -0
  33. package/src/lib/desk/desk.factory.d.ts +47 -0
  34. package/src/lib/desk/desk.limit.d.ts +39 -0
  35. package/src/lib/desk/desk.ticket.d.ts +308 -0
  36. package/src/lib/desk/index.d.ts +21 -0
  37. package/src/lib/index.d.ts +1 -0
  38. package/src/lib/zoho.limit.d.ts +66 -10
package/cli/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Hapier Creative LLC.
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/cli/index.js ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire as __createRequire } from 'node:module';
3
+ const require = __createRequire(import.meta.url);
4
+ var Qc=Object.defineProperty;var eu=Object.getOwnPropertyDescriptor;var S=(e,t,o,r)=>{for(var n=r>1?void 0:r?eu(t,o):t,a=e.length-1,i;a>=0;a--)(i=e[a])&&(n=(r?i(t,o,n):i(n))||n);return r&&n&&Qc(t,o,n),n},M=(e,t)=>(o,r)=>t(o,r,e);import Ly from"yargs";import{hideBin as vy}from"yargs/helpers";import{readFile as tu,writeFile as ou,rm as ru,mkdirSync as nu}from"node:fs";import{join as So}from"node:path";import{homedir as au}from"node:os";var Lt=["recruit","crm","desk"];function Co(){return So(au(),".zoho-cli")}function st(){return So(Co(),"config.json")}function ct(){return So(Co(),".tokens.json")}function Y(e,t){if(t){let o=process.env[`ZOHO_${t}_${e}`];if(o)return o}return process.env[`ZOHO_${e}`]}async function w(){let e=st(),t=await cu(e),o=Y("ACCOUNTS_CLIENT_ID"),r=Y("ACCOUNTS_CLIENT_SECRET"),n=Y("ACCOUNTS_REFRESH_TOKEN");if(!t&&!(o&&r&&n))return;let i={clientId:o??t?.shared?.clientId??"",clientSecret:r??t?.shared?.clientSecret??"",refreshToken:n??t?.shared?.refreshToken??"",region:Y("ACCOUNTS_URL")??t?.shared?.region,apiMode:Y("API_URL")??t?.shared?.apiMode};function s(p){let u=p.toUpperCase(),d=Y("ACCOUNTS_CLIENT_ID",u),f=Y("ACCOUNTS_CLIENT_SECRET",u),h=Y("ACCOUNTS_REFRESH_TOKEN",u),g=Y("API_URL",u),R=p==="desk"?Y("DESK_ORG_ID"):void 0,x=t?.[p],C=process.env[`ZOHO_${u}_ACCOUNTS_CLIENT_ID`],O=process.env[`ZOHO_${u}_ACCOUNTS_CLIENT_SECRET`],V=process.env[`ZOHO_${u}_ACCOUNTS_REFRESH_TOKEN`];if(!(!x&&!(C||O||V)&&!R))return{clientId:C??x?.clientId,clientSecret:O??x?.clientSecret,refreshToken:V??x?.refreshToken,apiUrl:g??x?.apiUrl,orgId:R??x?.orgId}}return{shared:i,recruit:s("recruit")??t?.recruit,crm:s("crm")??t?.crm,desk:s("desk")??t?.desk,output:t?.output}}function ut(e,t){let o=e[t],r=e.shared,n=o?.clientId??r.clientId,a=o?.clientSecret??r.clientSecret,i=o?.refreshToken??r.refreshToken;if(!(!n||!a||!i))return{clientId:n,clientSecret:a,refreshToken:i,region:r.region??"us",apiMode:o?.apiUrl??r.apiMode??"production",orgId:o?.orgId}}async function iu(e){let t=st();return nu(Co(),{recursive:!0}),new Promise((o,r)=>{ou(t,JSON.stringify(e,null,2),{},n=>{n?r(n):o()})})}async function U(e){let t=await w(),o={shared:{...t?.shared,...e.shared},recruit:e.recruit!==void 0?{...t?.recruit,...e.recruit}:t?.recruit,crm:e.crm!==void 0?{...t?.crm,...e.crm}:t?.crm,desk:e.desk!==void 0?{...t?.desk,...e.desk}:t?.desk,output:e.output!==void 0?su(t?.output,e.output):t?.output};return await iu(o),o}function su(e,t){return{dumpDir:"dumpDir"in t?t.dumpDir:e?.dumpDir,pick:"pick"in t?t.pick:e?.pick,commands:"commands"in t?t.commands?{...e?.commands,...t.commands}:void 0:e?.commands}}function en(e,t,o){let r=t.join("."),n=r?e?.commands?.[r]:void 0;return{dumpDir:o.dumpDir??n?.dumpDir??e?.dumpDir,pick:o.pick??n?.pick??e?.pick}}async function tn(){await U({output:{dumpDir:void 0,pick:void 0,commands:void 0}})}async function on(){let e=st(),t=ct();await Qr(e),await Qr(t)}function $(e){return Lt.filter(t=>{let o=ut(e,t);return!(!o||t==="desk"&&!o.orgId)})}function cu(e){return new Promise(t=>{tu(e,{encoding:"utf-8"},(o,r)=>{if(o){t(void 0);return}try{t(JSON.parse(r))}catch{t(void 0)}})})}function Qr(e){return new Promise(t=>{ru(e,()=>t())})}function ye(e){return e.length<=4?"***":e.substring(0,4)+"***"}function F(){}import{Inject as pc,Injectable as yl}from"@nestjs/common";function vt(e,t){let o;return t&&typeof e=="string"?o=[e]:ce(e)?o=[...e]:o=[e],o}function Io(e,t){return new Map(vt(e).map(o=>[t(o),o]))}function ce(e,t=!1){return typeof e=="string"?t:e!=null&&typeof e=="object"&&Symbol.iterator in e}function pt(e){for(let t of e)return!1;return!0}function he(e,t){for(let o of e)t(o)}function W(e,t,o=!1){e!=null&&(ce(e,o)?he(e,t):t(e))}function rn(e){if(!Array.isArray(e))throw new Error("Input is not an array/tuple...");let t;if(e.length>0){let o=e[0],r=!1;if(Array.isArray(o)){let n=o.length;r=e.findIndex(i=>Array.isArray(i)?i.length!==n:!0)!==-1}else r=!0;t=r?[e]:e}else t=e;return t}function uu(e){return e!=null?Mo(e):[]}var y=uu;function Mo(e){return Array.isArray(e)?e:[e]}function Oo(e){return nn([],...e)}function nn(e,...t){return e??=[],t.forEach(o=>{o!=null&&an(e,o)}),e}function an(e,t){return Array.prototype.push.apply(e,t),e}import{symmetricDifference as rh}from"extra-set";function pu(e,t){let o=new Set(e??void 0);return t(o),o}function sn(e,t){return pu(e,o=>dt(o,t))}function dt(e,t){W(t,o=>e.add(o))}function lt(e,t=!0){return t?((...o)=>!e.call(void 0,...o)):e}function cn(e){return Object.keys(e).length===0}function ue(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function un(e){let t={};return e.forEach((o,r)=>{t[r]=o}),t}function Po(e){return{...e}}function mt(e){return e!=null}function Me(e){return ce(e,!1)?!pt(e):pn(e)}function Eo(e){let t;return ce(e,!0)?t=!pt(e):pn(e)?t=typeof e=="object"?!cn(e):!0:t=!1,t}function pn(e){return e!=null&&e!==""}function dn(e){return(t=>{let o;return t!=null?o=t.filter(e):o=[],o})}var k=dn(mt),du=dn(Me);function _t({base:e,build:t}){let o=e??{};return t(o),o}function wt(e){return t=>t.map(e)}var Ne=(e=>e);function fe(){return Ne}function lu(e,t){return k(e!=null?Array.isArray(e)?e:mn(e,t):[])}function mn(e,t){let o=new Set(e.keys);return e.values&&dt(o,e.values.map(t)),Array.from(o)}function ko(e,t){let o=lu(t,e);function r(n){let a=n?Array.isArray(n)?n.map(e):mn(n,e):[];return a.length?Oo([k(a),o]):o}return(n,a)=>{let i=r(a),s=new Set(i);return n.filter(p=>{let u=e(p);return s.has(u)?!1:(s.add(u),!0)})}}var mu=e=>e.id;function Zo(e,t,o){let r=o(t);return Do(e,r,o)}function Do(e,t,o=mu){return e.filter(r=>o(r)!==t)}function Lo(e){return t=>{let o=e(t);if(o==="")throw new Error('Cannot use "empty" string for BooleanKey.');return o}}function hn(e){return!e||e.length<=0}function yu(e){return!hn(e)}function hu(e,t,o){return e?[...Zo(e,t,Lo(o)),t]:[t]}function fu(e,t,o){return e&&Zo(e,t,Lo(o))}function gu(e,t,o){return e&&Do(e,t,Lo(o))}function Tu(e){let t=s=>hn(s),o=s=>yu(s),r=(s,c,p=!0)=>p?n(s,c):a(s,c),n=(s,c)=>hu(s,c,e),a=(s,c)=>fu(s,c,e);return{isFalse:t,isTrue:o,set:r,insert:n,remove:a,removeByKey:(s,c)=>gu(s,c,e)}}var vh=Tu(e=>e||void 0);function ge(e,t){let o=xu(e,r=>t(r)?"in":"out");return{included:o.in??[],excluded:o.out??[]}}function xu(e,t){let o=fn(e,t);return un(o)}function fn(e,t){let o=new Map;return e?.forEach(r=>{let n=t(r),a=o.get(n);a!=null?a.push(r):o.set(n,[r])}),o}function gn(e,t,o){return y(t).forEach(r=>e.set(r,o)),e}function vo(e){return Array.from(e.entries())}function Tn(e){return Ru(vo(e))}function Ru(e){let t=[];return e.forEach(([o,r])=>{W(r,n=>{t.push([o,n])})}),t}function No(){let e=new Map,t=(n,a)=>{let i=e.get(n);i==null&&(i=[],e.set(n,i)),W(a,s=>i.push(s))},o=(n,a)=>t(n,rn(a));return{map:()=>e,entries:()=>vo(e),tuples:()=>Tn(e),delete:n=>e.delete(n),add:t,addTuples:o,addToKeys:(n,a)=>W(n,i=>t(i,a)),addTuplesToKeys:(n,a)=>W(n,i=>o(i,a)),has:n=>e.has(n),get:n=>e.get(n)??[]}}function xn(e){let{readKey:t,defaultIfKeyNull:o=!1}=e;return r=>{let n=new Set(r);return a=>{let i=t(a);return i!=null?n.has(i):o}}}var bu=32;function Fu(e){return t=>{let o=new Set;for(let r=0;r<e;r+=1)t&1<<r&&o.add(r);return o}}var Yh=Fu(bu);function Su(e){return typeof e=="function"?e.prototype?Object.getOwnPropertyDescriptor(e,"prototype")?.writable?"function":"class":e.constructor.name==="AsyncFunction"?"function":"arrow":null}function Rn(e){let t=Su(e);return t!=null&&t!=="class"}function pe(e){return Rn(e)?e:()=>e}function yt(e={}){let{startAt:t,increaseBy:o}=e,r=pe(o??1),n=t??0;return()=>{let a=n;return n+=r(),a}}function Cu(e){let{min:t,max:o}=e;return t<=o}function Iu(e){let{min:t,max:o}=e;if(!Cu(e))throw new Error("Invalid bounds. Min was greater than the max.");return r=>r>=t&&r<=o}function Vt(e){let{min:t,max:o,fencePosts:r=!1}=e,n=o-t,a=Iu(e),i=(s=>{let c;if(a(s))c=s;else{let p=r?s<t?1:-1:0;c=((s-t)%n+n)%n+t+p}return c});return i._wrap=e,i}function Kt(e){let{min:t,max:o,wrap:r}=e;return r?Vt(e):n=>Mu(n,t,o)}function Mu(e,t,o){return Math.max(Math.min(e,o),t)}function bn(e){let t;switch(typeof e){case"number":t=e;break;case"string":t=Number(e);break;default:t=0;break}return t}function Fn(e,t){return Math.log(t)/Math.log(e)}function _o(e){let t;switch(e){case"floor":t=Math.floor;break;case"ceil":t=Math.ceil;break;case"none":t=o=>o;break;default:t=Math.round;break}return t}var pf=ht(0);function ht(e,t="cut"){let o=Au(e,t),r=(n=>o(bn(n)));return r._precision=e,r}function Au(e,t="round"){let o;if(t==="cut")o=r=>Sn(r,e);else{let r=_o(t);o=n=>+(r(+(n+"e+"+e))+"e-"+e)}return o}function Sn(e,t){return+((e>0?Math.floor:Math.ceil)(+(e+"e+"+t))+"e-"+t)}function _e(e,t){let o=typeof e=="number"?{min:0,max:e}:e,{min:r,max:n,round:a}=o,i=t??a,s;if(r!=null){let c=n-r;s=()=>Math.random()*c+r}else s=()=>Math.random()*n;if(i&&i!=="none"){let c=typeof i=="function"?i:_o(i),p=s;s=()=>c(p())}return s}function Cn(e){return(t,o)=>{let r=e(t),n=e(o);return r-n}}var ff=Cn(e=>e);function Mn(e){return e.i}var Xf=ko(Mn);var Qf=xn({readKey:Mn});var On=",",Eu=" ";function ku(e,t=On,o=!1){if(e==null)return e;let r=y(e);return o&&(r=r.map(n=>n?.trim())),r.filter(Boolean).join(t)}function Bt(e,t,o){let r=e.split(t),n=[];if(r.length>1){let a=r.length>o,i=a?o-1:r.length;for(let s=0;s<i;s+=1)n.push(r[s]);a&&n.push(r.slice(i).join(t))}else n.push(r[0]);return n}function Zu(e){let{joiner:t,trimByDefault:o=!1}=e,r=function(n,a=o){return ku(n,t,a)};return r.joiner=t,r.trimByDefault=o,r}function An(e){let{joiner:t}=e,o=Zu(e),r=(n,a=i=>i)=>n.split(t).map(s=>a(s.trim()));return{joiner:t,trimByDefault:o.trimByDefault,joinStrings:o,splitStrings:r,splitStringsToSet(n){return new Set(n!=null?r(n):[])},splitJoinRemainder(n,a){return Bt(n,t,a)}}}var Vo=An({joiner:On}),Du=An({joiner:Eu,trimByDefault:!0});var A=Vo.joinStrings,Ng=Vo.splitStrings,_g=Vo.splitStringsToSet,Lu=Du.joinStrings;function Pn(e){return e.trim()}function En(e){return e.toUpperCase()}function kn(e){return e.toLowerCase()}var rT=wt(Pn),nT=wt(En),aT=wt(kn);import{BaseError as Nu}from"make-error";var _u="DBX_ASSERTION_ERROR",Ko=class extends Nu{code=_u;_target;_property;constructor(t,o){super(o),this.name="AssertionError",this._target=t.target,this._property=t.propertyKey}get target(){return this._target}get propertyKey(){return this._property}},Uo=class{handle(t){throw this.buildException(t)}buildException(t){let o=this.buildExceptionString(t);return new Ko(t,o)}buildExceptionString(t){let o;return t.options?.message?o=t.options.message:o="Assertion failed for property '"+t.propertyKey+'".',o}},wu=new Uo;var Zn=lt;function we(e,{forEach:t,filter:o}){Dn(e,o).forEach(t)}function Dn(e,t){return Go(t)(e)}function Go(e){let t;if(e!=null){let o=Ku(e);t=r=>Wo(r).filter(o)}else t=Wo;return t}function Wo(e){return Object.entries(e)}function jo(e){return typeof e=="object"?e:{valueFilter:e}}function Ku(e){let t=jo(e),{valueFilter:o=1,invertFilter:r=!1,keysFilter:n}=t,a;switch(o){case 1:a=([,i])=>i!==void 0;break;case 2:a=([,i])=>i!=null;break;case 3:a=([,i])=>!!i;break;case 4:a=([,i])=>Me(i);break;case 5:a=([,i])=>Eo(i);break;case 6:a=([,i])=>!!i&&Me(i);break;case 7:a=([,i])=>!!i&&Eo(i);break;default:a=()=>!0;break}if(n){let i=a,s=new Set(n.map(c=>c.toString()));a=(c,p)=>i(c,p)&&s.has(c[0])}return Zn(a,r)}function Ve(e){let t,o=n=>{t={value:e(n)}},r=(n=>(t||o(n),t.value));return r.set=n=>t={value:n},r.reset=()=>t=void 0,r.init=o,r.used=()=>!!t,r}function Uu({filter:e,copy:t,dynamic:o=!1}){let r=e!=null?Ke({filter:e,copy:!1}):Wu;return n=>{let a=()=>{let s={};return n.forEach(c=>{let p=r({...c});Object.assign(s,p)}),s},i=o?a:Ve(a);return s=>{let c=i();return t&&(s=Po(s)),Object.assign(s,c),s}}}function Wt(e,t){return Bu(t)(e)}function Bu(e){let t=Uu({filter:e,copy:!1,dynamic:!0});return o=>t(k(o))({})}var cx=Ke({copy:!0,filter:{valueFilter:1}}),ux=Ke({copy:!0,filter:{valueFilter:2}}),Ln=Ke({copy:!0,filter:{valueFilter:4}}),px=Ke({copy:!0,filter:{valueFilter:6}}),dx=qo({valueFilter:1}),lx=qo({valueFilter:6}),mx=qo({valueFilter:2});function qo(e){let t=$o({filter:e,forEach:([o],r,n,a)=>{a.keys.push(o)}});return o=>{let r={keys:[]};return t(o,r),r.keys}}function Ke({copy:e=!1,filter:t={valueFilter:1}}={}){let o=jo(t);o.invertFilter=!o.invertFilter;let r=$o({filter:o,forEach:([n],a,i)=>{delete i[n]}});return(n,a)=>((typeof a=="boolean"?a:e)&&(n={...n}),r(n),n)}var Wu=Ke({copy:!1});function $o({forEach:e,filter:t}){let o=Go(t);return((r,n)=>{o(r).forEach((i,s)=>e(i,s,r,n))})}function Gu(e){let{readKey:t,isModifiedFunction:o=()=>{}}=e;return(r,n)=>{let a=[],i=Io(r,t),s=Io(n,t),c=new Set(i.keys()),p=new Set(s.keys()),u=sn(c,p);return he(u,d=>{if(d==null)return;let f=c.has(d),h=p.has(d),g;h&&f?g=0:f?g=-1:g=1;let R=f?i.get(d):void 0,x=h?s.get(d):void 0,C=R&&x?o(R,x):void 0;a.push({key:d,pastValue:R,nextValue:x,change:g,isModified:C,value:x??R})}),a}}var Cx=Gu({readKey:e=>e});function gt(e,t,o){let[r,n]=Gt(e,t,!1);return r+o+n}function Gt(e,t,o=!1){let r=e.substring(0,t),n=e.substring(t+(o?0:1));return[r,n]}function Nn(e){let t={};for(let[o,r]of[...e].entries())t[r]=o;return t}var ju=["\\","^","$",".","|","?","*","+","(",")","[","]","{","}"],qu=new Set(ju);function Ho(e){let{escapeTargets:t,escapeCharacter:o}=e,r=t instanceof Set?t:new Set(t);return n=>{let a=jt(r,n),i;switch(a.length){case 0:i=n;break;case 1:{let s=n[a[0]];i=gt(n,a[0],o(s));break}default:{let s=[],c=a.length,p=0,u=0;for(let d=0;d<c;d+=1){u=a[d];let f=n[u],g=n.substring(p,u)+o(f);s.push(g),p=u+1}s.push(n.substring(p)),i=s.join("");break}}return i}}var _n=Ho({escapeTargets:qu,escapeCharacter(e){return`\\${e}`}});function $u(e){return(t,o)=>{let r=o??Number.MAX_SAFE_INTEGER,n=[];for(let[a,i]of[...t].entries())if(e.has(i)&&(n.push(a),n.length>=r))break;return n}}function jt(e,t,o){return $u(e)(t,o)}function Hu(e,t){return jt(e,t,1)[0]}function qt(e){return t=>{let r=Hu(typeof e=="string"?new Set([e]):e,t),n;return r!=null?n=Gt(t,r,!1):n=[t,void 0],n}}function wn(e,t){return qt(t)(e)}function Vn(e){let t=qt(e);return o=>t(o)[0]}var Qx=Vn("#"),eR=qt("#");var Ue="/",zu=".";function Ju(e){let t=e.split(zu,3).length-1,o;switch(t){case 0:e.length===0?o="invalid":e[e.length-1]===Ue?o="folder":o="file";break;case 1:o="typedfile";break;default:o="invalid";break}return o}function Kn(e){return Ju(e)!=="invalid"}var Yu=/^\/+/,Xu=/\/+$/;var Qu=/\/{2,}/g;function Un(e){return e.startsWith(Ue)?e.replace(Yu,Ue):`${Ue}${e}`}function Bn(e){return e.replace(Qu,Ue)}function Wn(e){return e.replace(Xu,"")}var ep=/(.+)\.(.+)/;function tp(e){return ep.test(e)}var Gn=/:(\d+)/;function op(e){return Gn.test(e)}function rp(e){let t=Gn.exec(e);return t?Number(t[1]):void 0}function np(e){let t=Hn(e),o=qn(t),{domain:r,path:n}=o,a=tp(r),i=op(e),s=i?rp(e)??void 0:void 0,[c,p]=wn(o.path,"?"),u=a&&(c===""||Kn(c+"/")),d=ip(e);return{input:e,isWebsiteUrl:u,hasWebsiteDomain:a,hasHttpPrefix:d,hasPortNumber:i,portNumber:s,splitPair:o,domain:r,websitePath:n,path:c,query:p}}function zo(e){let t=np(e);return t.hasHttpPrefix&&t.isWebsiteUrl}function jn(e,t=!1){let o=jt(new Set("?"),e),r,n=e;return t&&o.length?r=o:o.length>1&&(r=o.reverse(),r.pop()),r?.length&&r.forEach(a=>n=gt(n,a,"&")),n}function qn(e){let t=Hn(e);return ap(t)}function ap(e){let t=Bt(e,"/",2),o=t[0],r=t[1];return{domain:o,path:Un(r??"/")}}var $n=/^https:\/\/|http:\/\//;function Hn(e){return e.replace($n,"")}function ip(e){return $n.test(e)}var jR={prefixes:"email.",domains:"test.dereekb.com",numberFactory:yt()};var qR={internationalAreaCodes:[1210,1979,1512,1303],numberFactory:_e({min:2e6,max:1e7,round:"floor"})};import{BaseError as tb}from"make-error";var sp="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_",cp="!";function up(e){let{negativePrefix:t,digits:o}=e,r=t?"integer":"positive_integer",n=Math.min(6,Math.floor(Math.log2(o.length))),a=Math.pow(2,n),i=a-1,s=Nn(o);function c(u){let d="",f=u<0;f&&(u=-u);do{let h=u&i;d=o[h]+d,u>>>=n}while(u!==0);return f&&t&&(d=t+d),d}function p(u){let d=!1;u[0]===t&&(d=!0);let f=d?1:0,h=0;for(let g=f;g<u.length;g+=1)h=(h<<n)+s[u[g]];return d&&(h=-h),h}return{type:r,digits:o,bitDepth:a,negativePrefix:t,encodeNumber:c,decodeNumber:p}}var pp=up({negativePrefix:cp,digits:sp});var zn=-90,Jn=90,qb=Jn-zn,Yn=-180,Xn=180,dp=Xn-Yn;var $b=Kt({min:zn,max:Jn}),Hb=Vt({min:Yn,max:Xn});var mp=24,yp=60,Qn=1440,ea=60,uF=ea*yp,Z=1e3,de=Z*60,$t=de*60,ta=$t*mp,hp=7,fp=ta*hp;function Ht(e){return e.getTime()<Date.now()}var mF=ht(3);var yF=Qn-1;function oa(e){return!!e&&(typeof e=="object"||typeof e=="function")&&typeof e.then=="function"}async function xt(e,t){return new Promise(o=>setTimeout(()=>o(t),e))}function bp(e){let n=$t,a={startLimitAt:1,cooldownRate:1,exponentRate:2,maxWaitTime:n},i=0,s=Number.MAX_SAFE_INTEGER,c=new Date,p=!0;h(e??a);function u(){return{...a}}function d(){return p}function f(O){p=O}function h(O,V=!1){let se=Math.max(0,O.startLimitAt??1),I=O.cooldownRate??1,K=O.maxWaitTime??n,_=O.exponentRate??2;a={startLimitAt:se,cooldownRate:I,maxWaitTime:K,exponentRate:_},s=Fn(_,K/Z+1),V&&g()}function g(){i=0,c=new Date}function R(O){if(!p)return 0;let{cooldownRate:V}=a,I=(Date.now()-c.getTime())*V/Z,K=Math.max(i-I,0),_=Math.max(0,K-a.startLimitAt);return O&&(i=K+O,c=new Date),_>=s?a.maxWaitTime:(Math.pow(a.exponentRate,Math.max(_,0))-1)*Z}function x(O){return R(O??0)}function C(){let O=R(1);return xt(O)}return{waitForRateLimit:C,getNextWaitTime:x,getConfig:u,setConfig:h,getEnabled:d,setEnabled:f,reset:g}}function aa(e){let o=bp({exponentRate:1.5,maxWaitTime:Z*8,...e}),r=de,n=new Date,a=0,i=0,s=!0;C(e,!0);function c(){Ht(n)&&d()}function p(){return s}function u(I){s=I}function d(){i=a,n=new Date(Date.now()+r)}function f(){return n}function h(){return Math.max(0,n.getTime()-Date.now())}function g(I){n=I}function R(){return c(),i}function x(I){i=I}function C(I,K=!1){a=I.limit??a,r=I.resetPeriod??r;let _={cooldownRate:I.cooldownRate??Math.max(.1,r/Z),exponentRate:I.exponentRate??1.5,maxWaitTime:I.maxWaitTime??Z*8};o.setConfig(_,K),K&&d(),n=I.resetAt??n}function O(I){if(!s)return 0;function K(){return i-=I,o.getNextWaitTime(I)}let _=0;return i>0?_=K():(c(),i>0?_=K():_=h()),_}function V(I){return O(I??0)}function se(){let I=O(1);return xt(I)}return{getRemainingLimit:R,setRemainingLimit:x,getTimeUntilNextReset:h,getResetAt:f,setNextResetAt:g,setConfig:C,reset:d,getNextWaitTime:V,waitForRateLimit:se,getEnabled:p,setEnabled:u}}function ia(e){let{promiseFactories:t,successOnMaybe:o,throwErrors:r}=e;return async(n,a)=>{let{successOnMaybe:i,throwErrors:s}=a??{},c=i??o,p=s??r,u;for(let d of t)try{if(u=await d(n),u!=null||c)break}catch(f){if(p)throw f}return u}}import{BaseError as xC}from"make-error";function Fp(e){return t=>{let o={};return Object.entries(t).forEach(([r,n])=>{let a=e(r,n);o[a]=n}),o}}var zC=Fp(e=>{let t=e;return typeof e=="string"&&(t=e.toLowerCase()),t});function Sp(e){return t=>Cp(t).then(o=>o.toString(e))}var DI=Sp("base64");function Cp(e){let t=[];return new Promise((o,r)=>{e.on("data",n=>t.push(Buffer.from(n))),e.on("end",()=>o(Buffer.concat(t))),e.on("error",r)})}var Ip="__CATCH_ALL_HANDLE_RESULT_KEY__";function ca(e,t){let o=t?.defaultResult??!0,r=t?.negativeResult??!1;return()=>{let n,a=new Map,i=p=>{n=p},s=(p,u)=>{p===Ip?i(u):gn(a,p,u)},c=(p,u,d)=>{let f=d.bind(p);s(u,f)};return _t({base:(p=>{let u=e(p),d=(u!=null?a.get(u):void 0)??n,f;return d?f=Promise.resolve(d(p)).then(h=>h??o):f=Promise.resolve(r),f}),build:p=>{p.readKey=e,p.set=s,p.bindSet=c,p.setCatchAll=i}})}}function Mp(e,t){return{accessor:t,boundTo:e,set:(o,r)=>{t.bindSet(e,o,r)},setCatchAll:o=>{t.setCatchAll(o)}}}function Op(e,t){let o=r=>{e.set(t,r)};return o.key=t,o}function Ap(e,t,o){let r=Op(e,t);return n=>{r(function(a){let i=o(a);return n.call(this,i)})}}function ua(e,t){return o=>Ap(e,o,t)}function pa(e){return t=>(o,r)=>{let n=Mp(o,t),a=e.configurerForAccessor(n);r(a)}}import{BaseError as sM}from"make-error";var Jo=class{_length=0;_storage={};get length(){return this._length}key(t){return Object.keys(this._storage)[t]??null}hasKey(t){return ue(this._storage,t)}getItem(t){return this._storage[t]??null}setItem(t,o){o==null?this.removeItem(t):(this.hasKey(t)||(this._length=this._length+1),this._storage[t]=String(o))}removeItem(t){this.hasKey(t)&&(delete this._storage[t],this._length=this._length-1)}clear(){this._storage={},this._length=0}},pM=new Jo;function zt(e){let t={};return Object.entries(e).forEach(([o,r])=>{t[r]=o}),t}var da="image/jpeg",Pp="image/png",Ep="image/webp",kp="image/gif",Zp="image/heif",Dp="image/tiff",Lp="image/svg+xml",vp="image/raw",Np={jpeg:da,jpg:da,png:Pp,webp:Ep,gif:kp,svg:Lp,raw:vp,heif:Zp,tiff:Dp},MM=zt(Np);var _p="application/pdf",wp="application/vnd.openxmlformats-officedocument.wordprocessingml.document",Vp="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",Kp="text/plain",Up="text/csv",Bp="text/html",Wp="application/xml",Gp="application/json",jp="application/yaml",qp="text/markdown",$p={pdf:_p,docx:wp,xlsx:Vp,txt:Kp,csv:Up,html:Bp,xml:Wp,json:Gp,yaml:jp,md:qp},OM=zt($p);var Hp="application/zip",zp={zip:Hp},AM=zt(zp);function Jp(e){let{prefix:t,suffix:o,prefixEmptyString:r,suffixEmptyString:n}=e,a=t??"",i=o??"";function s(p){let u=p;if(a)for(;u.startsWith(a);)u=u.slice(a.length);if(i)for(;u.endsWith(i);)u=u.slice(0,u.length-i.length);return u}function c(p){let u=s(p),d;return u===""?(d="",r&&(d=`${a}${u}`),n&&(d=`${d}${i}`)):d=`${a}${u}${i}`,d}return{prefix:a,suffix:i,prefixEmptyString:r,suffixEmptyString:n,prefixSuffixString:c,cleanString:s}}var EM=Jp({prefix:"-"});function Yp(e){return(t,o)=>{let r=e(t),n=e(o);return r.localeCompare(n)}}var ZM=Yp(e=>e.label);var Rt={VISIT_ALL:0,VISIT_NODE_ONLY:1,VISIT_CHILDREN_ONLY:2,SKIP_ALL:3};var iO={ADD_ALL:Rt.VISIT_ALL,ADD_NODE_ONLY:Rt.VISIT_NODE_ONLY,ADD_CHILDREN_ONLY:Rt.VISIT_CHILDREN_ONLY,SKIP_ALL:Rt.SKIP_ALL};var Xp=-1,Yo=0;function Qp(e){return e?.page??Xp}function Xo(e){return Qp(e)+1}import{BaseError as la}from"make-error";var H=class extends la{constructor(o){super(`Fetch request failed to build due to an unexpected error: ${typeof o=="object"?o.message:o}`);this.error=o}};function ma(e){return(t,o)=>ed(e(t,o))}var Be=class extends la{constructor(o){super(`Fetch response was a non-ok status code (${o.status}): ${o.statusText}`);this.response=o}};function ed(e){return e.then(t=>{if(!t.ok)throw new Be(t);return t})}import{BaseError as CA}from"make-error";function ya(e){return(t,o)=>{let r,n=o?.timeout??t.timeout;if(!o?.signal&&n){let i=new AbortController;r=i,o={...o,signal:i.signal}}let a=e(t,o);if(n){let i=setTimeout(()=>{r?.abort()},n);a=a.finally(()=>{clearTimeout(i)})}return a}}function fa(e){let{makeFetch:t,makeRequest:o,baseRequest:r}=e;return{fetchRequestFactory:n=>ga({makeRequest:o,baseRequest:r,...n}),makeFetch:(n={})=>od({makeRequest:o,makeFetch:t,baseRequest:r,...n}),makeRequest:e.makeRequest}}var td=(e,t)=>t(e);function od(e){let{makeFetch:t=fetch,fetchHandler:o=td,useTimeout:r,requireOkResponse:n,mapResponse:a}=e,i=t;r&&(i=ya(i)),n&&(i=ma(i));let s=ga(e);return async(c,p)=>{let u=await s(c,p),d=o(u,i);return a&&(d=a(d)),d}}var rd=(e,t)=>new Request(e,t);function ga(e){let{makeRequest:t=rd,baseUrl:o,baseRequest:r,timeout:n,requestInitFactory:a,useBaseUrlForConfiguredFetchRequests:i=!1,forceBaseUrlForWebsiteUrlWithPrefix:s=i}=e,c=o?new URL(Wn(o)):void 0,p=c?h=>{let g,R=h.toString();if(!s&&zo(R))g=new URL(R);else{let x=c.origin+Bn("/"+c.pathname+"/"+h);g=new URL(x,c)}return g}:void 0;async function u(h){let g=oa(h)?await h:h;return ha(g)?g:t(g)}let d=p?async h=>{let g,R,x;if(typeof h=="string"?g=h:ha(h)?i?(g=h.url,R=h):x=h:x=await t(h),!x){let C=p(g);x=await t(C.href,R)}return x}:u,f;if(r!=null||n!=null){let h=pe(r);async function g(){let x=await h();return n?{...x,timeout:n}:x}async function R(x,C){let O=await g(),V=nd(O,await C),se=V.timeout===void 0?x.timeout:V.timeout;return{...V,timeout:se}}a?f=(x,C)=>a(x,R(x,C)):f=(x,C)=>R(x,C)}else a?f=a:f=(h,g)=>g;return async(h,g)=>{try{let R=await d(h);g=await f(R,g);let x=await t(R,g);return x.timeout=n,x}catch(R){throw R instanceof H?R:new H(R)}}}function nd(e,t){let o;if(t){let r=ad([e.headers,t.headers]);o={...e,...t,headers:r}}else o=e;return o}function ad(e){let t=No();return k(e).forEach(o=>{let r=id(o),n=new Set;r.forEach(([a,i])=>{n.has(a)||(t.delete(a),n.add(a)),i&&t.add(a,i)})}),t.tuples()}function id(e){let t=[];return Array.isArray(e)?t=e:typeof e.forEach=="function"?e.forEach((o,r)=>{t.push([r,o])}):typeof e=="object"&&(t=Object.entries(e)),t}function ha(e){return!!e.url}import{safeParse as sd}from"fast-content-type-parse";function Jt(e){let t=e.headers.get("content-type"),o=sd(t??""),r=o.type!==""?o:void 0;return{response:e,rawContentType:t,contentType:r,mimeType:r?.type}}function Ta(e){let{updateWithResponse:t,maxRetries:o}=e,r=o??1,n=e.rateLimiter,a=async(i,s)=>{async function c(p){await n.waitForRateLimit();let u,d;try{u=await s(i.clone())}catch(h){d=h,u=d.response}if(await t(u,d)&&p<r)u=await c(p+1);else if(d!=null)throw d;return u}return c(0)};return a._rateLimiter=n,a}var Qo=class extends H{constructor(o){super("There was no next page for this.");this.page=o}},er=class extends H{constructor(o,r){super(`The limit of ${r} for the number of pages to read was reached.`);this.page=o;this.limit=r}},cd=100;function We(e){let{fetch:t,readFetchPageResultInfo:o,buildInputForNextPage:r,defaultMaxPage:n,defaultMaxItemsPerPage:a}=e;return(i,s)=>{let{maxPage:c=n,maxItemsPerPage:p}=s??{},u=p??a,d=c===null?Number.MAX_SAFE_INTEGER:c??cd;function f(g,R=void 0){return async()=>{let x=await t(g),{cursor:C,nextPageCursor:O,hasNext:V}=await o(x),se=C??R?.cursor,I=V!==!1,K=R?R.page+1:Yo,_=K>=d,it={input:g,result:x,page:K,previous:R,hasNext:I,isAtMaxPage:_,cursor:se,nextPageCursor:O,fetchNext:Ve(async()=>{if(_)throw new er(it,d);let Xr=I?await r(it,g,{maxPage:d,maxItemsPerPage:u}):void 0;if(!Xr)throw new Qo(it);return f({...g,...Xr},it)()})};return it}}return{input:i,fetchNext:Ve(()=>f(i)())}}}function T(e,t){let{omitKeys:o,filterEmptyValues:r}=t??{},n=Array.isArray(e)?Wt(e):e,a=r??!0?Ln(n??{}):n,i=new URLSearchParams(a);return o!=null&&W(o,s=>i.delete(s),!1),i}function tr(e){let t;if(typeof e=="string")t=e;else if(ud(e))t=e.href;else{let o=tr(e.url);if(e.queryParams){let r=ld(e.queryParams);pt(r)?t=o:t=jn(o+`?${r.toString()}`)}else t=o}return t}function ud(e){return typeof e=="object"&&e instanceof URL}function pd(e){return typeof e=="object"&&e instanceof URLSearchParams}function dd(e){let t=[];return he(e,o=>{let[r,n]=o;if(r!=null&&n!=null){let a=String(r);W(n,i=>{i!=null&&t.push([a,String(i)])})}}),t}function ld(e){let t;return pd(e)?t=e:typeof e=="string"?t=new URLSearchParams(e):ce(e)?t=new URLSearchParams(dd(e)):t=md(e),t}function md(e){let t=[];return we(e,{forEach:o=>{let[r,n]=o,a=String(r);n!=null&&W(n,i=>{t.push([a,String(i)])})}}),new URLSearchParams(t)}var or=class extends Error{constructor(o){super("Failed to parse the JSON body.");this.response=o}};function yd(e){return e!=null?typeof e=="string"?e:JSON.stringify(e):void 0}var hd=e=>{throw new or(e)},X=e=>null;function Q(e,t){let o;typeof t=="function"?o={handleFetchJsonParseErrorFunction:t}:o=t??{},o={...o,handleFetchJsonParseErrorFunction:o.handleFetchJsonParseErrorFunction??hd};let{handleFetchJsonParseErrorFunction:r,interceptJsonResponse:n}=o,a=xa(o);return(i,s,c)=>{let p=tr(i),u=a(s,c),d=typeof s=="object"?s.interceptResponse:void 0;return e(p,u).then(h=>{let g=h.json().catch(r),R=n?g.then(x=>n(x,h)):g;return d?R.then(x=>d(x,h)):R})}}function xa(e={}){let{defaultMethod:t="GET",mapFetchJsonInput:o=fe()}=e;return(r=t,n)=>{let a;return typeof r=="string"?a={method:r,body:n}:a=r,a=o(a),{...a,method:a.method,body:yd(a.body)}}}var HA=xa();var ee=fa({makeFetch:fetch,makeRequest:(e,t)=>new Request(e,t)});function Ge(){return{data:[],info:{page:1,per_page:100,count:0,more_records:!1}}}function v(e,t){return We({...t,fetch:e,readFetchPageResultInfo:function(o){return{hasNext:o.info?.more_records??!1}},buildInputForNextPage:function(o,r,n){return{...r,page:Xo(o),per_page:n.maxItemsPerPage??r.per_page}}})}function Yt(e){switch(e){case"sandbox":return"https://recruitsandbox.zoho.com/recruit";case"production":return"https://recruit.zoho.com/recruit";default:return e}}var je="Candidates",Ra="Job_Openings",Xt="Notes",ba="Emails",bt="Attachments";function Qt(e){let t;if(e!=null)switch(typeof e){case"string":t=e;break;case"object":{let o;Array.isArray(e)?o={and:[e]}:o=e,t=eo(o);break}default:break}return t}function eo(e){function t(i){let s;return typeof i=="object"?Array.isArray(i)?s=i.map(rr):i&&(s=eo(i)):s=i,s}function o(i,s){return i.length>1?`(${i.join(s)})`:i[0]}function r(i,s){let c=k(i.map(t)).flatMap(y);return o(c,s)}let n=e.or?r(e.or,"or"):void 0,a=n;return e.and&&(a=r([r(e.and,"and"),n],"and")),a}var Fa=Ho({escapeTargets:["(",")",","],escapeCharacter:e=>`\\\\${e}`});function rr(e){let t=Fa(e.value);return`(${e.field}:${e.filter}:${t})`}var Sa=Qt;import{BaseError as Pd}from"make-error";import{BaseError as Td}from"make-error";var xd="__internal_data_array_blank_error";function Rd(e){return Array.isArray(e?.data)}var $e="success";function z(e){let t=typeof e,o;return t==="object"?o=e:o={code:e,message:""},o}var Te=class extends Td{constructor(o){super(o.message);this.error=o}get code(){return this.error.code}},B=class extends Te{constructor(o,r,n){super(o);this.data=o;this.errorResponseData=r;this.responseError=n}},qe=class extends B{constructor(t,o){super({code:xd,message:"Check data for individual errors."},t,o)}get errorDataArray(){return this.errorResponseData.data}};function te(e,t){let{logDataArrayErrors:o=!1}=t??{};return r=>{r instanceof qe&&!o||(r instanceof B?console.log(`${e}Error(${r.responseError.response.status}): `,{error:r,errorData:r.data}):r instanceof Te?console.log(`${e}Error(code:${r.code}): `,{error:r}):console.log(`${e}Error(name:${r.name}): `,{error:r}))}}function oe(e,t){return(o,r=t,n)=>async(a,i)=>{try{return await o(a,i)}catch(s){if(s instanceof Be){let c=await e(s);if(c)throw r(c),n?.(c),c}throw s}}}function re(e){return(t,o)=>{if(t?.error!=null){let n=new Be(o),a=e(t,n);if(a)throw a}return t}}var bd="INTERNAL_ERROR",Fd="INVALID_TOKEN",G=class extends B{},Ca="FAILURE",nr=class extends B{},Sd="4834",Ft=class extends B{},Cd="INVALID_QUERY",ar=class extends B{get details(){return this.error.details}},to="MANDATORY_NOT_FOUND",xe="DUPLICATE_DATA",oo="INVALID_DATA",Id="TOO_MANY_REQUESTS",Ia=429,Md="X-RATELIMIT-LIMIT",Od="X-RATELIMIT-REMAINING",Ad="X-RATELIMIT-RESET",Ma=100,Oa=de;function ir(e){let t=e.get(Md),o=e.get(Od),r=e.get(Ad),n=null;if(t!=null&&o!=null&&r!=null){let a=Number(t),i=Number(o),s=Number(r),c=new Date(s);n={limit:a,remaining:i,reset:s,resetAt:c}}return n}var St=class extends B{get headerDetails(){return ir(this.responseError.response.headers)}};function ne(e,t){let o;if(Rd(e))o=new qe(e,t);else{let r=le(e,t);if(r){let n=z(r);switch(n.code){case bd:o=new nr(n,e,t);break;case Fd:o=new G(n,e,t);break;case Sd:o=new Ft(n,e,t);break;case Cd:o=new ar(n,e,t);break;case Id:o=new St(n,e,t);break;default:o=new B(n,e,t);break}}}return o}function le(e,t){return e.error??e.data?.[0]??(t.response.ok?void 0:e)}var Aa="ALREADY_ASSOCIATED",sr=class extends Pd{constructor(o,r){super("There was no content or matching records for the content. It may not exist.");this.moduleName=o;this.recordId=r}},He=class extends Te{},cr=class extends He{},ur=class extends He{},ro=class extends He{get invalidFieldDetails(){return this.error.details}},pr=class extends ro{};function Pa(e){let t;switch(e.code){case oo:{let o=new ro(e);o.invalidFieldDetails.id?t=new pr(e):t=o;break}case to:t=new cr(e);break;case xe:t=new ur(e);break;default:t=new He(e);break}return t}function Ea(e,t){return o=>{if(o?.data?.length)return o;throw new sr(e,t)}}var Ed=te("ZohoRecruit");async function kd(e){let t=await e.response.json().catch(()=>{}),o;return t&&(o=ka(t,e)),o}function ka(e,t){let o,r=le(e,t);if(r)switch(z(r).code){default:o=ne(e,t);break}return o}var Za=re(ka),Da=oe(kd,Ed);import{BaseError as Zd}from"make-error";function lr(e,t,o){return(({data:r,module:n})=>e.fetchJson(`/v2/${n}${t}`,D(o,{data:y(r)})).then(a=>{let i=Array.isArray(r),s=ae(y(r),a.data),c;if(i)c=s;else{let{successItems:p,errorItems:u}=s;if(u[0]!=null)throw Pa(u[0].result);c=p[0].result.details}return c}))}function La(e){return lr(e,"","POST")}function va(e){return lr(e,"/upsert","POST")}function Na(e){return lr(e,"","PUT")}function _a(e){return({ids:t,module:o,wf_trigger:r})=>e.fetchJson(`/v2/${o}?${T({ids:t,wf_trigger:r})}`,D("DELETE")).then(Dd)}function wa(e){return t=>e.fetchJson(`/v2/${t.module}/${t.id}`,D("GET")).then(Ea(t.module)).then(o=>o.data[0])}function Va(e){return(t=>e.fetchJson(`/v2/${t.module}?${$a(t).toString()}`,D("GET")))}function mr(e){function t(o){let r={...o};if(delete r.criteria,o.criteria!=null){let n=Sa(o.criteria);r.criteria=n}if(!r.word&&!o.criteria&&!o.email&&!o.phone)throw new Error("At least one of word, criteria, email, or phone must be provided");return $a(r)}return(o=>e.fetchJson(`/v2/${o.module}/search?${t(o).toString()}`,D("GET")).then(r=>r??{data:[],info:{more_records:!1}}))}function Ka(e){return v(mr(e))}function ze(e){return t=>{let{targetModule:o,returnEmptyRecordsInsteadOfNull:r=!0}=t;return n=>e.fetchJson(`/v2/${n.module}/${n.id}/${o}?${fr(n,n.filter).toString()}`,D("GET")).then(a=>a??(r!==!1?Ge():a))}}function yr(e){return ze(e)({targetModule:ba})}function Ua(e){return v(yr(e))}function hr(e){return ze(e)({targetModule:bt})}function Ba(e){return v(hr(e))}var VP=20*1024*1024;function Wa(e){return t=>{let{attachmentCategoryId:o,attachmentCategoryName:r,file:n,attachmentUrl:a}=t,i={attachments_category_id:A(o),attachments_category:A(r)};if(!i.attachments_category_id?.length&&!i.attachments_category?.length)throw new Error("attachmentCategoryId or attachmentCategoryName must be provided and not empty.");let s=`/v2/${t.module}/${t.id}/${bt}?${T(i).toString()}`,c;if(n!=null){let p=new FormData;p.append("file",n),c=e.fetch(s,{method:"POST",headers:{"Content-Type":""},body:p})}else if(a){let p=`${s}&${T({attachment_url:a}).toString()}`;c=e.fetch(p,{method:"POST"})}else throw new Error("file or attachmentUrl must be provided.");return c}}function Ga(e){return t=>e.fetch(`/v2/${t.module}/${t.id}/${bt}/${t.attachment_id}`,{method:"GET"}).then(Jt)}function ja(e){return t=>e.fetch(`/v2/${t.module}/${t.id}/${bt}/${t.attachment_id}`,{method:"DELETE"})}var dr=class extends Zd{constructor(o){super(`An error occured during the execution of the function. Code: ${o.code}, Message: ${o.message}`);this.error=o}};function qa(e){return t=>{let r=T(t.params).toString(),n=!!t.apiKey,a=(n?`auth_type=apikey&zapikey=${t.apiKey}`:"auth_type=oauth")+(r?`&${r}`:""),i=`/v2/functions/${t.functionName}/actions/execute?${a}`,c=`${n&&t.apiUrl!=null?Yt(t.apiUrl):""}${i}`;return e.fetchJson(c,D("POST")).then(p=>{if(p.code!=="success")throw new dr(p);return p.details})}}function $a(...e){return T(e,{omitKeys:"module"})}function fr(...e){return T(e,{omitKeys:["id","module"]})}function D(e,t){return{method:e,body:t??void 0}}function Dd(e){let{data:t}=e,o=[],r=[];return t.forEach(a=>{a.status===$e?o.push(a):r.push(a)}),{...e,successItems:o,errorItems:r}}function ae(e,t){let o=[],r=[];return e.forEach((a,i)=>{let s=t[i];s.status===$e?o.push({input:a,result:s}):r.push({input:a,result:s})}),{successItems:o,errorItems:r}}function Ha(e){return t=>e.fetchJson(`/v2/${je}/actions/associate`,D("PUT",{data:y(t)})).then(o=>{let r=o.data.map(()=>t),n=ae(r,o.data),{included:a,excluded:i}=ge(n.errorItems,s=>s.result.code===Ca&&s.result.details.error[0].code===Aa);return{...n,errorItems:i,alreadyAssociatedErrorItems:a,allErrorItems:n.errorItems}})}function za(e){return t=>e.fetchJson(`/v2/${t.module}/${t.id}/associate?${fr(t).toString()}`,D("GET")).then(o=>o??Ge())}function gr(e){let t=za(e);return o=>t({...o,module:je})}function Ja(e){return v(gr(e))}function Tr(e,t=Ra){let o=za(e);return r=>o({...r,module:t})}function Ya(e){return v(Tr(e))}function xr(e){return t=>e.fetchJson(`/v2/${Xt}`,D("POST",{data:t.data})).then(o=>ae(y(t.data),o.data))}function Xa(e){return t=>e.fetchJson(`/v2/${Xt}?${T({ids:t.ids})}`,D("DELETE")).then(o=>ae(y(t.ids),o.data))}function Rr(e){return ze(e)({targetModule:Xt})}function Qa(e){return v(Rr(e))}function ei(e){let t=xr(e);return o=>{let{module:r,id:n,notes:a}=o,i={data:y(a).map(s=>({...s,se_module:r,Parent_Id:n}))};return t(i)}}function ri(e){return t=>e.fetchJson(`/v2/settings/tags?${T({module:t.module})}`,D("POST",{tags:y(t.tags)})).then(o=>{let r=ae(y(t.tags),o.tags),{included:n,excluded:a}=ge(r.errorItems,i=>i.result.code===xe);return{...r,errorItems:a,duplicateErrorItems:n,allErrorItems:r.errorItems}})}function ni(e){return t=>e.fetchJson(`/v2/settings/tags?${T({module:t.module,my_tags:t.my_tags})}`,D("GET")).then(o=>({...o,data:o.tags}))}var ti=100;function ai(e){return t=>{if(Array.isArray(t.ids)&&t.ids.length>ti)throw new Error(`Cannot add tags to more than ${ti} records at once.`);return e.fetchJson(`/v2/${je}/actions/add_tags?${T({tag_names:t.tag_names,ids:t.ids})}`,D("POST")).then(o=>{let r=o.data.map(()=>t);return ae(r,o.data)})}}var oi=100;function ii(e){return t=>{if(Array.isArray(t.ids)&&t.ids.length>oi)throw new Error(`Cannot remove tags from more than ${oi} records at once.`);return e.fetchJson(`/v2/${je}/actions/remove_tags?${T({tag_names:t.tag_names,ids:t.ids})}`,D("POST")).then(o=>{let r=o.data.map(()=>t);return ae(r,o.data)})}}var Ld="invalid_code",vd="invalid_client",br=class extends H{constructor(o){super(`ZohoAccountsAccessTokenError: ${o}`);this.errorCode=o}},Je=class extends H{constructor(o){super(`Failed to retrieve proper authentication for the API call. Reason: ${o}`);this.reason=o}},Nd=te("ZohoAccounts");async function _d(e){let t=await e.response.json().catch(()=>{}),o;return t&&(o=si(t,e)),o}function si(e,t){let o,r=e.error;if(r){let n=z(r);switch(n.code){case Ld:case vd:o=new br(n.code);break;default:o=ne(e,t);break}}return o}var ci=re(si),ui=oe(_d,Nd);function Re(e){return async()=>{let t=await e();if(!t.accessToken)throw new Je;return t.accessToken}}var wd=e=>{let t="limit"in e?e.limit:void 0,o="resetAt"in e?e.resetAt:void 0,r=t!=null?" The limit is "+String(t)+" requests per reset period.":"",n=o!=null?" Will be reset at "+String(o)+".":"";console.warn("zohoRateLimitedFetchHandler(): Too many requests made."+r+n)};function Fr(e){let{readRateLimitDetails:t}=e,o=e.onTooManyRequests!==!1?e.onTooManyRequests??wd:void 0,r=e.maxRateLimit??Ma,n=e.resetPeriod??Oa;function a(c,p){return{limit:c,startLimitAt:Math.ceil(c/10),cooldownRate:1.2*(c/(n/Z)),exponentRate:1.08,maxWaitTime:Z*10,resetPeriod:n,resetAt:p}}let i=a(r),s=aa(i);return Ta({rateLimiter:s,maxRetries:e.maxRetries,updateWithResponse:function(c,p){let u=t(c.headers),d=!1,f=!1;if(u){let{remaining:h,limit:g,resetAt:R}=u;if(g!=null&&g!==r){let x=a(g,R??void 0);s.setConfig(x,!1)}if(s.setRemainingLimit(h),R&&s.setNextResetAt(R),f=!0,c.status===Ia){d=!0;try{o?.(u,c,p)}catch{}}}return s.setEnabled(f),d}})}function be(e){return Fr({...e,readRateLimitDetails:Vd})}function Vd(e){let t=ir(e),o;return t&&(o={remaining:t.remaining,limit:t.limit,resetAt:t.resetAt}),o}function pi(e){let{accountsContext:t}=e,o=Re(t.loadAccessToken),r=be(e.rateLimiterConfig),{logZohoServerErrorFunction:n,fetchFactory:a=i=>ee.makeFetch({baseUrl:i.apiUrl,baseRequest:async()=>({headers:{"Content-Type":"application/json",Authorization:`Bearer ${await o()}`}}),fetchHandler:r,timeout:20*1e3,requireOkResponse:!0,useTimeout:!0})}=e;return i=>{if(!i.apiUrl)throw new Error("ZohoConfig missing api url.");let s=Yt(i.apiUrl),c=a({apiUrl:s}),p=Da(c,n,h=>{h instanceof G&&t.loadAccessToken.resetAccessToken()}),u=Q(p,{interceptJsonResponse:Za,handleFetchJsonParseErrorFunction:X});return{recruitContext:{fetch:p,fetchJson:u,accessTokenStringFactory:o,config:{...i,apiUrl:s},zohoRateLimiter:r._rateLimiter}}}}function no(e){switch(e){case"sandbox":return"https://crmsandbox.zoho.com/crm";case"production":return"https://www.zohoapis.com/crm";default:return e}}var ao="Notes",di="Emails",Ct="Attachments";var li=Qt;import{BaseError as Kd}from"make-error";var Sr=class extends Kd{constructor(o,r){super("There was no content or matching records for the content. It may not exist.");this.moduleName=o;this.recordId=r}},Ye=class extends Te{},Cr=class extends Ye{},Ir=class extends Ye{},io=class extends Ye{get invalidFieldDetails(){return this.error.details}},Mr=class extends io{};function mi(e){let t;switch(e.code){case oo:{let o=new io(e);o.invalidFieldDetails.api_name==="id"?t=new Mr(e):t=o;break}case to:t=new Cr(e);break;case xe:t=new Ir(e);break;default:t=new Ye(e);break}return t}function yi(e,t){return o=>{if(o?.data?.length)return o;throw new Sr(e,t)}}var Ud=te("ZohoCrm",{logDataArrayErrors:!1});async function Bd(e){let t=await e.response.json().catch(()=>{}),o;return t&&(o=hi(t,e)),o}function hi(e,t){let o,r=le(e,t);if(r)switch(z(r).code){default:o=ne(e,t);break}return o}var fi=re(hi),gi=oe(Bd,Ud);import{BaseError as Wd}from"make-error";function Ar(e,t,o){return(({data:r,module:n})=>e.fetchJson(`/v8/${n}${t}`,N(o,{data:y(r)})).catch(Zi).then(a=>{let i=Array.isArray(r),s=Fe(y(r),a.data),c;if(i)c=s;else{let{successItems:p,errorItems:u}=s;if(u[0]!=null)throw mi(u[0].result);c=p[0].result.details}return c}))}function Ti(e){return Ar(e,"","POST")}function xi(e){return Ar(e,"/upsert","POST")}function Ri(e){return Ar(e,"","PUT")}function bi(e){return({ids:t,module:o,wf_trigger:r})=>e.fetchJson(`/v8/${o}?${T({ids:t,wf_trigger:r})}`,N("DELETE")).catch(Zi).then(jd)}function Fi(e){return t=>e.fetchJson(`/v8/${t.module}/${t.id}`,N("GET")).then(yi(t.module)).then(o=>o.data[0])}function Si(e){return(t=>e.fetchJson(`/v8/${t.module}?${ki(t).toString()}`,N("GET")))}function Pr(e){function t(o){let r={...o};if(delete r.criteria,o.criteria!=null){let n=li(o.criteria);r.criteria=n}if(!r.word&&!o.cvid&&!o.criteria&&!o.email&&!o.phone)throw new Error("At least one of word, cvid, criteria, email, or phone must be provided");return ki(r)}return(o=>e.fetchJson(`/v8/${o.module}/search?${t(o).toString()}`,N("GET")).then(r=>r??{data:[],info:{more_records:!1}}))}function Ci(e){return v(Pr(e))}function Xe(e){return t=>{let{targetModule:o,returnEmptyRecordsInsteadOfNull:r=!0}=t;return n=>e.fetchJson(`/v8/${n.module}/${n.id}/${o}?${Gd(n,n.filter).toString()}`,N("GET")).then(a=>a??(r!==!1?Ge():a))}}function Er(e){let t=Xe(e)({targetModule:di});return o=>t(o).then(r=>{let n=r.data??r.Emails;return{...r,data:n}})}function Ii(e){return v(Er(e))}function kr(e){return Xe(e)({targetModule:Ct})}function Mi(e){return v(kr(e))}var QE=20*1024*1024;function Oi(e){return t=>{let{attachmentCategoryId:o,attachmentCategoryName:r,file:n}=t,a={attachments_category_id:A(o),attachments_category:A(r)};if(!a.attachments_category_id?.length&&!a.attachments_category?.length)throw new Error("attachmentCategoryId or attachmentCategoryName must be provided and not empty.");let i=`/v8/${t.module}/${t.id}/${Ct}?${T(a).toString()}`,s=new FormData;return s.append("file",n),e.fetch(i,{method:"POST",headers:{"Content-Type":""},body:s})}}function Ai(e){return t=>e.fetch(`/v8/${t.module}/${t.id}/${Ct}/${t.attachment_id}`,{method:"GET"}).then(Jt)}function Pi(e){return t=>e.fetch(`/v8/${t.module}/${t.id}/${Ct}/${t.attachment_id}`,{method:"DELETE"})}var Or=class extends Wd{constructor(o){super(`An error occured during the execution of the function. Code: ${o.code}, Message: ${o.message}`);this.error=o}};function Ei(e){return t=>{let r=T(t.params).toString(),n=!!t.apiKey,a=(n?`auth_type=apikey&zapikey=${t.apiKey}`:"auth_type=oauth")+(r?`&${r}`:""),i=`/v8/functions/${t.functionName}/actions/execute?${a}`,c=`${n&&t.apiUrl!=null?no(t.apiUrl):""}${i}`;return e.fetchJson(c,N("POST")).then(p=>{if(p.code!=="success")throw new Or(p);return p.details})}}function ki(...e){return T(e,{omitKeys:"module"})}function Gd(...e){return T(e,{omitKeys:["id","module"]})}function N(e,t){return{method:e,body:t??void 0}}function Zi(e){let t;if(e instanceof qe)t={data:e.errorDataArray};else throw e;return t}function jd(e){let{data:t}=e,o=[],r=[];return t.forEach(a=>{a.status===$e?o.push(a):r.push(a)}),{...e,successItems:o,errorItems:r}}function Fe(e,t){let o=[],r=[];return e.forEach((a,i)=>{let s=t[i];s.status===$e?o.push({input:a,result:s}):r.push({input:a,result:s})}),{successItems:o,errorItems:r}}function Zr(e){return t=>e.fetchJson(`/v2/${ao}`,N("POST",{data:t.data})).then(o=>Fe(y(t.data),o.data))}function Di(e){return t=>e.fetchJson(`/v2/${ao}?${T({ids:t.ids})}`,N("DELETE")).then(o=>Fe(y(t.ids),o.data))}function Dr(e){return Xe(e)({targetModule:ao})}function Li(e){return v(Dr(e))}function vi(e){let t=Zr(e);return o=>{let{module:r,id:n,notes:a}=o,i={data:y(a).map(s=>({...s,se_module:r,Parent_Id:n}))};return t(i)}}function _i(e){return t=>e.fetchJson(`/v8/settings/tags?${T({module:t.module})}`,N("POST",{tags:y(t.tags)})).catch(o=>{let r;if(o instanceof B){let n=o.data?.tags;Array.isArray(n)&&(r={tags:n})}if(!r)throw o;return r}).then(o=>{let r=Fe(y(t.tags),o.tags),{included:n,excluded:a}=ge(r.errorItems,i=>i.result.code===xe);return{...r,errorItems:a,duplicateErrorItems:n,allErrorItems:r.errorItems}})}function wi(e){return t=>e.fetchJson(`/v8/settings/tags/${t.id}`,N("DELETE")).then(o=>o.tags)}function Vi(e){return t=>e.fetchJson(`/v8/settings/tags?${T({module:t.module,my_tags:t.my_tags})}`,N("GET")).then(o=>({...o,data:o.tags}))}var Ni=100;function Ki(e){return t=>e.fetchJson(`/v8/${t.module}/actions/add_tags`,N("POST",Ui(t))).then(o=>{let r=o.data.map(()=>t);return Fe(r,o.data)})}function Ui(e){if(Array.isArray(e.ids)&&e.ids.length>Ni)throw new Error(`Cannot add/remove tags from more than ${Ni} records at once.`);let t=[...y(e.tags)],o=new Set(t.map(r=>r.name));return e.tag_names&&y(e.tag_names).forEach(r=>{o.has(r)||(t.push({name:r}),o.add(r))}),{tags:t,ids:y(e.ids)}}function Bi(e){return t=>e.fetchJson(`/v8/${t.module}/actions/remove_tags`,N("POST",Ui(t))).then(o=>{let r=o.data.map(()=>t);return Fe(r,o.data)})}function Wi(e){let{accountsContext:t}=e,o=Re(t.loadAccessToken),r=be(e.rateLimiterConfig),{logZohoServerErrorFunction:n,fetchFactory:a=i=>ee.makeFetch({baseUrl:i.apiUrl,baseRequest:async()=>({headers:{"Content-Type":"application/json",Authorization:`Bearer ${await o()}`}}),fetchHandler:r,timeout:20*1e3,requireOkResponse:!0,useTimeout:!0})}=e;return i=>{if(!i.apiUrl)throw new Error("ZohoConfig missing api url.");let s=no(i.apiUrl),c=a({apiUrl:s}),p=gi(c,n,h=>{h instanceof G&&t.loadAccessToken.resetAccessToken()}),u=Q(p,{interceptJsonResponse:fi,handleFetchJsonParseErrorFunction:X});return{crmContext:{fetch:p,fetchJson:u,accessTokenStringFactory:o,config:{...i,apiUrl:s},zohoRateLimiter:r._rateLimiter}}}}function Gi(e,t){return We({...t,fetch:e,readFetchPageResultInfo:function(o){return{hasNext:o.page_context?.has_more_rows??!1}},buildInputForNextPage:function(o,r,n){let i=o.result?.page_context,s=n.maxItemsPerPage??r.row_count??i?.row_count??20,c=(i?.start_index??r.start_index??1)+s;return{...r,start_index:c,row_count:s}}})}function Oe(e,t){return{method:e,body:t??void 0}}function ji(e){return({requestId:t})=>e.fetchJson(`/requests/${t}`,Oe("GET"))}function Lr(e){return t=>{let{search_columns:o,...r}=t,n={page_context:{...r,...o?{search_columns:o}:{}}};return e.fetchJson({url:"/requests",queryParams:{data:JSON.stringify(n)}},Oe("GET"))}}function qi(e){let t=Lr(e);return Gi(t)}function $i(e){return({requestId:t})=>e.fetchJson(`/requests/${t}/fielddata`,Oe("GET"))}function Hi(e){return()=>e.fetchJson("/fieldtypes",Oe("GET"))}function zi(e){return({requestId:t,...o})=>{let n=T(o).toString(),a=n?`?${n}`:"",i=`/requests/${t}/pdf${a}`;return e.fetch(i,{method:"GET"})}}function Ji(e){return({requestId:t})=>e.fetch(`/requests/${t}/completioncertificate`,{method:"GET"})}function Yi(e){return({requestData:t,file:o})=>{let r=new FormData;return r.append("data",JSON.stringify({requests:t})),r.append("file",o),e.fetch("/requests",{method:"POST",headers:{"Content-Type":""},body:r}).then(n=>n.json())}}function Xi(e){return({requestId:t,data:o})=>e.fetchJson(`/requests/${t}`,Oe("PUT",{requests:o}))}function Qi(e){return({requestId:t,data:o})=>{let r=o?{requests:o}:void 0;return e.fetchJson(`/requests/${t}/submit`,Oe("POST",r))}}function es(e){return({requestId:t,expire_by:o})=>e.fetchJson(`/requests/${t}/extend`,Oe("PUT",{expire_by:o}))}function ts(e){return({requestId:t,recall_inprogress:o,reason:r})=>{let n={};o!=null&&(n.recall_inprogress=String(o)),r!=null&&(n.reason=r);let a=T(n),i=a.toString().length>0;return e.fetchJson(`/requests/${t}/delete`,{method:"PUT",...i?{headers:{"Content-Type":"application/x-www-form-urlencoded"},body:a.toString()}:{}})}}function os(e){switch(e){case"sandbox":return"https://signsandbox.zoho.com/api/v1";case"production":return"https://sign.zoho.com/api/v1";default:return e}}var qd=te("ZohoSign",{logDataArrayErrors:!1});async function $d(e){let t=await e.response.json().catch(()=>{}),o;return t&&(o=rs(t,e)),o}function rs(e,t){let o,r=le(e,t);if(r)switch(z(r).code){default:o=ne(e,t);break}return o}var ns=re(rs),as=oe($d,qd);function is(e){let{accountsContext:t}=e,o=Re(t.loadAccessToken),r=be(e.rateLimiterConfig),{logZohoServerErrorFunction:n,fetchFactory:a=i=>ee.makeFetch({baseUrl:i.apiUrl,baseRequest:async()=>({headers:{"Content-Type":"application/json",Authorization:`Bearer ${await o()}`}}),fetchHandler:r,timeout:20*1e3,requireOkResponse:!0,useTimeout:!0})}=e;return i=>{if(!i.apiUrl)throw new Error("ZohoConfig missing api url.");let s=os(i.apiUrl),c=a({apiUrl:s}),p=as(c,n,h=>{h instanceof G&&t.loadAccessToken.resetAccessToken()}),u=Q(p,{interceptJsonResponse:ns,handleFetchJsonParseErrorFunction:X});return{signContext:{fetch:p,fetchJson:u,accessTokenStringFactory:o,config:{...i,apiUrl:s},zohoRateLimiter:r._rateLimiter}}}}function ss(e){let t;switch(e){case"sandbox":case"production":t="https://desk.zoho.com/api/v1";break;default:t=e;break}return t}var Hd=te("ZohoDesk",{logDataArrayErrors:!1});async function zd(e){let t=await e.response.json().catch(()=>{}),o;return t&&(o=cs(t,e)),o}function cs(e,t){let o,r=le(e,t);if(r)switch(z(r).code){default:o=ne(e,t);break}return o}var us=re(cs),ps=oe(zd,Hd);var Jd="X-Rate-Limit-Remaining-v3",Yd="Retry-After",Xd=200;function Qd(e){let t=e.get(Jd),o;if(t!=null){let r=Number(t),n,a=e.get(Yd);if(a!=null){let i=Number(a);isNaN(i)||(n=new Date(Date.now()+i*Z))}isNaN(r)||(o={remaining:r,resetAt:n})}return o}function ds(e){return Fr({maxRateLimit:Xd,...e,readRateLimitDetails:Qd})}function ls(e){let{accountsContext:t}=e,o=Re(t.loadAccessToken),r=ds(e.rateLimiterConfig),{logZohoServerErrorFunction:n,fetchFactory:a=i=>ee.makeFetch({baseUrl:i.apiUrl,baseRequest:async()=>({headers:{"Content-Type":"application/json",Authorization:`Bearer ${await o()}`,orgId:i.orgId}}),fetchHandler:r,timeout:20*1e3,requireOkResponse:!0,useTimeout:!0})}=e;return i=>{if(!i.apiUrl)throw new Error("ZohoDeskConfig missing api url.");if(!i.orgId)throw new Error("ZohoDeskConfig missing orgId.");let s=ss(i.apiUrl),c=a({apiUrl:s,orgId:i.orgId}),p=ps(c,n,h=>{h instanceof G&&t.loadAccessToken.resetAccessToken()}),u=Q(p,{interceptJsonResponse:us,handleFetchJsonParseErrorFunction:X});return{deskContext:{fetch:p,fetchJson:u,accessTokenStringFactory:o,config:{...i,apiUrl:s},zohoRateLimiter:r._rateLimiter}}}}var ms=25;function J(e,t){return We({...t,fetch:e,readFetchPageResultInfo:function(o){let r=o.data?.length??0;return{hasNext:r>0&&r>=ms}},buildInputForNextPage:function(o,r,n){let a=n.maxItemsPerPage??r.limit??ms,s=(r.from??1)+a;return{...r,from:s,limit:a}}})}function Ae(e,t){return{method:e,body:t??void 0}}function Qe(e,t){return T(e,{omitKeys:t})}function so(e){let t;return e&&(t=A(y(e))),t}function vr(e){return t=>{let{include:o,...r}=t,n=Qe([{...r,include:so(o)}]);return e.fetchJson(`/tickets?${n}`,Ae("GET")).then(a=>a??{data:[]})}}function ys(e){return t=>{let{ticketId:o,include:r}=t,a=Qe([{include:so(r)}]).toString();return e.fetchJson(`/tickets/${o}${a?`?${a}`:""}`,Ae("GET"))}}function Nr(e){return t=>{let o=Qe([t]);return e.fetchJson(`/tickets/search?${o}`,Ae("GET")).then(r=>r??{data:[]})}}function hs(e){return t=>{let{contactId:o,include:r,...n}=t,a=Qe([{...n,include:so(r)}]);return e.fetchJson(`/contacts/${o}/tickets?${a}`,Ae("GET")).then(i=>i??{data:[]})}}function fs(e){return t=>{let{productId:o,include:r,...n}=t,a=Qe([{...n,include:so(r)}]);return e.fetchJson(`/products/${o}/tickets?${a}`,Ae("GET")).then(i=>i??{data:[]})}}function gs(e){return t=>e.fetchJson(`/tickets/${t.ticketId}/metrics`,Ae("GET"))}function Ts(e){return t=>{let o=Qe([{agentIds:A(y(t.agentIds)),departmentId:t.departmentId}]);return e.fetchJson(`/agentsTicketsCount?${o}`,Ae("GET"))}}function xs(e){return J(vr(e))}function Rs(e){return J(Nr(e))}function bs(e){return{method:e}}function Fs(e){return t=>{let o=T([t]);return e.fetchJson(`/departments?${o}`,bs("GET")).then(r=>r??{data:[]})}}function Ss(e){return t=>e.fetchJson(`/departments/${t.departmentId}`,bs("GET"))}function _r(e){return{method:e}}function Cs(e){let t;return e&&(t=A(y(e))),t}function wr(e){return t=>{let{include:o,...r}=t,n=T([{...r,include:Cs(o)}]);return e.fetchJson(`/contacts?${n}`,_r("GET")).then(a=>a??{data:[]})}}function Is(e){return t=>{let{contactId:o,include:r}=t,a=T([{include:Cs(r)}]).toString();return e.fetchJson(`/contacts/${o}${a?`?${a}`:""}`,_r("GET"))}}function Ms(e){return t=>{let o=T([{contactIds:A(y(t.contactIds))}]);return e.fetchJson(`/contacts/contactsByIds?${o}`,_r("GET")).then(r=>r??[])}}function Os(e){return J(wr(e))}function It(e,t){return{method:e,body:t??void 0}}function As(e){return t=>e.fetchJson(`/tickets/${t.ticketId}/tags`,It("GET")).then(o=>o??[])}function Ps(e){return t=>{let o={tags:y(t.tags).map(r=>({name:r}))};return e.fetchJson(`/tickets/${t.ticketId}/tags`,It("POST",o)).then(r=>r??[])}}function Es(e){return t=>e.fetchJson(`/tickets/${t.ticketId}/tags/${t.tagId}`,It("DELETE"))}function ks(e){return t=>{let o=T([t]);return e.fetchJson(`/tags/search?${o}`,It("GET")).then(r=>r??{data:[]})}}function Zs(e){return t=>{let o=T([t]);return e.fetchJson(`/ticketTags?${o}`,It("GET")).then(r=>r??{data:[]})}}function Vr(e,t){return{method:e,body:t??void 0}}function Ds(e){return t=>e.fetchJson(`/tickets/${t.ticketId}/followers`,Vr("GET")).then(o=>o??[])}function Ls(e){return t=>{let o={ids:y(t.agentIds)};return e.fetchJson(`/tickets/${t.ticketId}/followers`,Vr("POST",o))}}function vs(e){return t=>{let o={ids:y(t.agentIds)};return e.fetchJson(`/tickets/${t.ticketId}/followers`,Vr("DELETE",o))}}function Ns(e,t){return{method:e,body:t??void 0}}function el(e){let t;return e&&(t=A(y(e))),t}function _s(e){return t=>{let{ticketId:o,include:r,...n}=t,a=T([{...n,include:el(r)}]);return e.fetchJson(`/tickets/${o}/attachments?${a}`,Ns("GET")).then(i=>i??{data:[]})}}function ws(e){return t=>e.fetchJson(`/tickets/${t.ticketId}/attachments/${t.attachmentId}`,Ns("DELETE"))}function co(e,t){return{method:e,body:t??void 0}}function Vs(e){let t;return e&&(t=A(y(e))),t}function Ks(e){return t=>{let{ticketId:o,include:r,...n}=t,a=T([{...n,include:Vs(r)}]);return e.fetchJson(`/tickets/${o}/comments?${a}`,co("GET")).then(i=>i??{data:[]})}}function Us(e){return t=>{let{ticketId:o,commentId:r,include:n}=t,i=T([{include:Vs(n)}]).toString();return e.fetchJson(`/tickets/${o}/comments/${r}${i?`?${i}`:""}`,co("GET"))}}function Bs(e){return t=>{let{ticketId:o,...r}=t;return e.fetchJson(`/tickets/${o}/comments`,co("POST",r))}}function Ws(e){return t=>e.fetchJson(`/tickets/${t.ticketId}/comments/${t.commentId}`,co("DELETE"))}function Mt(e,t){return{method:e,body:t??void 0}}function Gs(e){return t=>e.fetchJson(`/tickets/${t.ticketId}/timer`,Mt("GET"))}function js(e){return t=>{let{ticketId:o,...r}=t;return e.fetchJson(`/tickets/${o}/timer`,Mt("POST",r))}}function qs(e){return t=>{let{ticketId:o,...r}=t,n=T([r]);return e.fetchJson(`/tickets/${o}/timeEntries?${n}`,Mt("GET")).then(a=>a??{data:[]})}}function $s(e){return t=>e.fetchJson(`/tickets/${t.ticketId}/timeEntries/${t.timeEntryId}`,Mt("GET"))}function Hs(e){return t=>e.fetchJson(`/tickets/${t.ticketId}/timeEntries/summation`,Mt("GET"))}function zs(e){return{method:e}}function Js(e){let t;return e&&(t=A(y(e))),t}function Kr(e){return t=>{let{ticketId:o,include:r,...n}=t,a=T([{...n,include:Js(r)}]);return e.fetchJson(`/tickets/${o}/threads?${a}`,zs("GET")).then(i=>i??{data:[]})}}function Ys(e){return t=>{let{ticketId:o,threadId:r,include:n}=t,i=T([{include:Js(n)}]).toString();return e.fetchJson(`/tickets/${o}/threads/${r}${i?`?${i}`:""}`,zs("GET"))}}function Xs(e){return J(Kr(e))}function tl(e){return{method:e}}function ol(e){let t;return e&&(t=A(y(e))),t}function Ur(e){return t=>{let{ticketId:o,include:r,...n}=t,a=T([{...n,include:ol(r)}]);return e.fetchJson(`/tickets/${o}/activities?${a}`,tl("GET")).then(i=>i??{data:[]})}}function Qs(e){return J(Ur(e))}function uo(e){return{method:e}}function ec(e){let t;return e&&(t=A(y(e))),t}function Br(e){return t=>{let{include:o,...r}=t,n=T([{...r,include:ec(o)}]);return e.fetchJson(`/agents?${n}`,uo("GET")).then(a=>a??{data:[]})}}function tc(e){return t=>{let{agentId:o,include:r}=t,a=T([{include:ec(r)}]).toString();return e.fetchJson(`/agents/${o}${a?`?${a}`:""}`,uo("GET"))}}function oc(e){return t=>{let o=T([{agentIds:A(y(t.agentIds))}]);return e.fetchJson(`/agentsByIds?${o}`,uo("GET")).then(r=>r?.data??[])}}function rc(e){return()=>e.fetchJson("/myinfo",uo("GET"))}function nc(e){return J(Br(e))}function po(e){return t=>{let{clientId:o,clientSecret:r,refreshToken:n}=e.config,{client:a,refreshToken:i}=t??{},s=a?.clientId??o,c=a?.clientSecret??r,u=T({grant_type:"refresh_token",client_id:s,client_secret:c,refresh_token:i??n});return e.fetchJson(`/oauth/v2/token?${u}`,rl("POST"))}}function rl(e,t){return{method:e,body:t}}var nl="https://accounts.zoho.com";function ac(e){return e==="us"?nl:e}function ic(e){let t=be(),{logZohoServerErrorFunction:o,fetchFactory:r=n=>ee.makeFetch({baseUrl:n.apiUrl,baseRequest:{headers:{"Content-Type":"application/json"}},fetchHandler:t,timeout:20*1e3,requireOkResponse:!0,useTimeout:!0})}=e;return n=>{if(n.refreshToken)if(n.clientId){if(!n.clientSecret)throw new Error("ZohoAccountsConfig missing clientSecret.")}else throw new Error("ZohoAccountsConfig missing clientId.");else throw new Error("ZohoAccountsConfig missing refreshToken.");let a=ac(n.apiUrl??"us"),i=r({apiUrl:a}),s=ui(i,o),c=Q(s,{interceptJsonResponse:ci,handleFetchJsonParseErrorFunction:X}),p=async()=>{let h=new Date().getTime(),{access_token:g,api_domain:R,scope:x,expires_in:C}=await po(d)();return{accessToken:g,apiDomain:R,expiresIn:C,expiresAt:new Date(h+C*Z),scope:x}};p.resetAccessToken=async()=>n.accessTokenCache?.clearCachedToken();let u=al({tokenRefresher:p,accessTokenCache:n.accessTokenCache}),d={fetch:s,fetchJson:c,loadAccessToken:u,config:{...n,apiUrl:a}};return{accountsContext:d}}}function al(e){let{tokenRefresher:t,accessTokenCache:o,tokenExpirationBuffer:r}=e,n=r??de,a=null,i=async()=>{a=null},s=async()=>{if(!a){let c=await o?.loadCachedToken();c&&(a=c)}if(a!=null&&new Date().getTime()+n>=a.expiresAt.getTime()&&(a=null),!a){try{a=await t()}catch(c){throw console.error("zohoAccountsZohoAccessTokenFactory(): Failed retrieving new token from tokenRefresher: ",c),new Je("Token Refresh Failed")}try{await o?.updateCachedToken(a)}catch{}}return a};return s.resetAccessToken=i,s}function Se(e){if(!e.apiUrl)throw new Error("No Zoho API url or type specified.")}var Ce=class{zohoAccounts;factoryConfig;static assertValidConfig(t){let{zohoAccounts:o}=t;if(o)if(o.serviceAccessTokenKey)if(o.refreshToken)if(o.apiUrl){if(!o.clientId)throw new Error("ZohoAccountsServiceConfig.zohoAccounts.clientId is required")}else throw new Error("ZohoAccountsServiceConfig.zohoAccounts.apiUrl is required");else throw new Error("ZohoAccountsServiceConfig.zohoAccounts.refreshToken is required");else throw new Error("ZohoAccountsServiceConfig.zohoAccounts.serviceAccessTokenKey is required");else throw new Error("ZohoAccountsServiceConfig.zohoAccounts is required")}};import{Injectable as il}from"@nestjs/common";import{dirname as sl}from"node:path";import{readFile as cl,writeFile as ul,rm as pl,mkdirSync as dl}from"node:fs";var et=class{};et=S([il()],et);function ll(e){console.warn(`mergeZohoAccountsAccessTokenCacheServices(): failed updating ${e.length} caches.`),e.forEach(([t,o],r)=>{console.warn(`Cache update failure ${r+1}: - ${o}`)})}function sc(e,t){let o=[...e],r=typeof t=="function"?t:t!==!1?ll:void 0;if(o.length===0)throw new Error("mergeZohoAccountsAccessTokenCacheServices() input cannot be empty.");return{loadZohoAccessTokenCache:function(a){let i=o.map(p=>p.loadZohoAccessTokenCache(a)),s=ia({promiseFactories:i.map(p=>()=>p.loadCachedToken().catch(()=>null).then(u=>{let d;return u&&!Ht(u.expiresAt)&&(d=u),d})),successOnMaybe:!1,throwErrors:!1});return{loadCachedToken:function(){return s()},updateCachedToken:async function(p){return Promise.allSettled(i.map(u=>u.updateCachedToken(p).then(()=>null).catch(d=>[u,d]))).then(u=>{if(r!=null){let d=k(u.map(f=>f.value));d.length&&r(d)}})},clearCachedToken:async function(){await Promise.allSettled(i.map(p=>p.clearCachedToken()))}}}}}function cc(e,t){let o=e??{};function r(n){return{loadCachedToken:async function(){let i=o[n];return t&&console.log("retrieving access token from memory: ",{token:i,service:n}),i},updateCachedToken:async function(i){o[n]=i,t&&console.log("updating access token in memory: ",{accessToken:i,service:n})},clearCachedToken:async function(){delete o[n],t&&console.log("clearing access token in memory: ",{service:n})}}}return{loadZohoAccessTokenCache:r}}var ml=".tmp/zoho-access-tokens.json";function uc(e=ml,t=!0){let o=null;async function r(){return o||(await n()??{})}function n(){return new Promise(c=>{dl(sl(e),{recursive:!0}),cl(e,{},(p,u)=>{let d;if(!p)try{d=JSON.parse(u.toString()),we(d,{forEach:f=>{f[1]&&(f[1].expiresAt=new Date(f[1].expiresAt))}})}catch(f){console.error("Failed reading token file: ",f)}c(d)})}).then(c=>(t&&(o={...o,...c}),c))}async function a(c){return new Promise((p,u)=>{ul(e,JSON.stringify(c),{},d=>{d?u(d):p()})})}async function i(){return new Promise((c,p)=>{pl(e,u=>{u?p(u):c()})})}function s(c){return{loadCachedToken:async function(){return(await r())[c]},updateCachedToken:async function(u){let d=await r();d&&(d[c]=u);try{await a(d)}catch(f){console.error("Failed updating access token in file: ",f)}},clearCachedToken:async function(){try{await a({})}catch(u){console.error("Failed clearing access token in file: ",u)}}}}return{loadZohoAccessTokenCache:s,readTokenFile:n,writeTokenFile:a,deleteTokenFile:i}}var L=class{constructor(t,o){this.config=t;this.cacheService=o;let r=t.zohoAccounts.accessTokenCache??o.loadZohoAccessTokenCache(t.zohoAccounts.serviceAccessTokenKey);this.zohoAccounts=ic(t.factoryConfig??{})({accessTokenCache:r,...t.zohoAccounts})}zohoAccounts;get accountsContext(){return this.zohoAccounts.accountsContext}get accessToken(){return po(this.accountsContext)}};L=S([yl(),M(0,pc(Ce)),M(1,pc(et))],L);import{Inject as dc,Injectable as hl}from"@nestjs/common";var Ot=class{zohoCrm;factoryConfig;static assertValidConfig(t){Se(t.zohoCrm)}};var Pe=class{constructor(t,o){this.config=t;this.zohoAccountsApi=o;this.zohoCrm=Wi({...t.factoryConfig,accountsContext:o.accountsContext})(t.zohoCrm)}zohoCrm;get crmContext(){return this.zohoCrm.crmContext}get zohoRateLimiter(){return this.zohoCrm.crmContext.zohoRateLimiter}get insertRecord(){return Ti(this.crmContext)}get upsertRecord(){return xi(this.crmContext)}get updateRecord(){return Ri(this.crmContext)}get deleteRecord(){return bi(this.crmContext)}get getRecordById(){return Fi(this.crmContext)}get getRecords(){return Si(this.crmContext)}get searchRecords(){return Pr(this.crmContext)}get searchRecordsPageFactory(){return Ci(this.crmContext)}get getRelatedRecordsFunctionFactory(){return Xe(this.crmContext)}get getEmailsForRecord(){return Er(this.crmContext)}get getEmailsForRecordPageFactory(){return Ii(this.crmContext)}get getAttachmentsForRecord(){return kr(this.crmContext)}get getAttachmentsForRecordPageFactory(){return Mi(this.crmContext)}get uploadAttachmentForRecord(){return Oi(this.crmContext)}get downloadAttachmentForRecord(){return Ai(this.crmContext)}get deleteAttachmentFromRecord(){return Pi(this.crmContext)}get createNotes(){return Zr(this.crmContext)}get deleteNotes(){return Di(this.crmContext)}get createNotesForRecord(){return vi(this.crmContext)}get getNotesForRecord(){return Dr(this.crmContext)}get getNotesForRecordPageFactory(){return Li(this.crmContext)}get executeRestApiFunction(){return Ei(this.crmContext)}get createTagsForModule(){return _i(this.crmContext)}get deleteTag(){return wi(this.crmContext)}get getTagsForModule(){return Vi(this.crmContext)}get addTagsToRecords(){return Ki(this.crmContext)}get removeTagsFromRecords(){return Bi(this.crmContext)}};Pe=S([hl(),M(0,dc(Ot)),M(1,dc(L))],Pe);import{ConfigModule as SL,ConfigService as CL}from"@nestjs/config";import{Inject as lc,Injectable as fl}from"@nestjs/common";var At=class{zohoRecruit;factoryConfig;static assertValidConfig(t){Se(t.zohoRecruit)}};var Ee=class{constructor(t,o){this.config=t;this.zohoAccountsApi=o;this.zohoRecruit=pi({...t.factoryConfig,accountsContext:o.accountsContext})(t.zohoRecruit)}zohoRecruit;get recruitContext(){return this.zohoRecruit.recruitContext}get zohoRateLimiter(){return this.zohoRecruit.recruitContext.zohoRateLimiter}get insertRecord(){return La(this.recruitContext)}get upsertRecord(){return va(this.recruitContext)}get updateRecord(){return Na(this.recruitContext)}get deleteRecord(){return _a(this.recruitContext)}get getRecordById(){return wa(this.recruitContext)}get getRecords(){return Va(this.recruitContext)}get searchRecords(){return mr(this.recruitContext)}get searchRecordsPageFactory(){return Ka(this.recruitContext)}get getRelatedRecordsFunctionFactory(){return ze(this.recruitContext)}get getEmailsForRecord(){return yr(this.recruitContext)}get getEmailsForRecordPageFactory(){return Ua(this.recruitContext)}get getAttachmentsForRecord(){return hr(this.recruitContext)}get getAttachmentsForRecordPageFactory(){return Ba(this.recruitContext)}get uploadAttachmentForRecord(){return Wa(this.recruitContext)}get downloadAttachmentForRecord(){return Ga(this.recruitContext)}get deleteAttachmentFromRecord(){return ja(this.recruitContext)}get createNotes(){return xr(this.recruitContext)}get deleteNotes(){return Xa(this.recruitContext)}get createNotesForRecord(){return ei(this.recruitContext)}get getNotesForRecord(){return Rr(this.recruitContext)}get getNotesForRecordPageFactory(){return Qa(this.recruitContext)}get executeRestApiFunction(){return qa(this.recruitContext)}get associateCandidateRecordsWithJobOpenings(){return Ha(this.recruitContext)}get searchCandidateAssociatedJobOpeningRecords(){return gr(this.recruitContext)}get searchCandidateAssociatedJobOpeningRecordsPageFactory(){return Ja(this.recruitContext)}get searchJobOpeningAssociatedCandidateRecords(){return Tr(this.recruitContext)}get searchJobOpeningAssociatedCandidateRecordsPageFactory(){return Ya(this.recruitContext)}get createTagsForModule(){return ri(this.recruitContext)}get getTagsForModule(){return ni(this.recruitContext)}get addTagsToRecords(){return ai(this.recruitContext)}get removeTagsFromRecords(){return ii(this.recruitContext)}};Ee=S([fl(),M(0,lc(At)),M(1,lc(L))],Ee);import{ConfigModule as qL,ConfigService as $L}from"@nestjs/config";import{Inject as mc,Injectable as gl}from"@nestjs/common";var Pt=class{zohoSign;factoryConfig;static assertValidConfig(t){Se(t.zohoSign)}};var Et=class{constructor(t,o){this.config=t;this.zohoAccountsApi=o;this.zohoSign=is({...t.factoryConfig,accountsContext:o.accountsContext})(t.zohoSign)}zohoSign;get signContext(){return this.zohoSign.signContext}get zohoRateLimiter(){return this.zohoSign.signContext.zohoRateLimiter}get getDocument(){return ji(this.signContext)}get getDocuments(){return Lr(this.signContext)}get getDocumentsPageFactory(){return qi(this.signContext)}get getDocumentFormData(){return $i(this.signContext)}get retrieveFieldTypes(){return Hi(this.signContext)}get downloadPdf(){return zi(this.signContext)}get downloadCompletionCertificate(){return Ji(this.signContext)}get createDocument(){return Yi(this.signContext)}get updateDocument(){return Xi(this.signContext)}get sendDocumentForSignature(){return Qi(this.signContext)}get extendDocument(){return es(this.signContext)}get deleteDocument(){return ts(this.signContext)}};Et=S([gl(),M(0,mc(Pt)),M(1,mc(L))],Et);import{ConfigModule as hv,ConfigService as fv}from"@nestjs/config";function yc(e){return{...e,operationType:e.notifications.operation_type}}var hc=ca(e=>e.operationType),fc=pa({configurerForAccessor:e=>{let t=ua(e,r=>r);return{...e,handleRequestSubmitted:t("RequestSubmitted"),handleRequestViewed:t("RequestViewed"),handleRequestSigningSuccess:t("RequestSigningSuccess"),handleRequestCompleted:t("RequestCompleted"),handleRequestRejected:t("RequestRejected"),handleRequestRecalled:t("RequestRecalled"),handleRequestForwarded:t("RequestForwarded"),handleRequestExpired:t("RequestExpired")}}});var gc="ZOHO_SIGN_WEBHOOK_SECRET_TOKEN",ke=class{zohoSignWebhook;static assertValidConfig(t){if(!t.zohoSignWebhook.webhookSecret)throw new Error("No Zoho Sign webhook secret specified.")}};import{defer as kv,from as Zv}from"rxjs";import{combineLatest as eN,filter as tN,skipWhile as oN,startWith as rN,switchMap as nN,of as aN,map as iN,delay as sN,EMPTY as cN}from"rxjs";import{switchMap as Hv,of as zv,isObservable as Jv}from"rxjs";import{switchMap as IN,distinctUntilChanged as MN,shareReplay as ON,map as AN,BehaviorSubject as PN,of as EN,combineLatest as kN,EMPTY as ZN,skip as DN,defaultIfEmpty as LN}from"rxjs";import{distinctUntilChanged as hN,filter as fN,mergeMap as gN,isObservable as TN}from"rxjs";import{BehaviorSubject as GN,switchMap as jN,map as qN,distinctUntilChanged as $N,shareReplay as HN,first as zN,merge as JN,finalize as YN}from"rxjs";import{map as e_}from"rxjs";import{first as u_,shareReplay as p_,firstValueFrom as d_,switchMap as l_,of as m_}from"rxjs";import{startWith as EB,map as kB,shareReplay as ZB,skipWhile as DB,distinctUntilChanged as LB,filter as vB,first as NB,firstValueFrom as _B,switchMap as wB,from as VB}from"rxjs";import{exhaustMap as g_,map as T_,scan as x_,shareReplay as R_,startWith as b_,distinctUntilChanged as F_,switchMap as S_,combineLatest as C_,of as I_,first as M_}from"rxjs";import{identity as N_,map as __}from"rxjs";import{filter as E_,map as k_,scan as Z_}from"rxjs";import{combineLatest as W_,map as G_,of as j_,switchMap as q_,throttleTime as $_}from"rxjs";import{filter as X_,map as Q_,skipWhile as ew,switchMap as tw,takeWhile as ow}from"rxjs";import{of as aw,timeout as iw,tap as sw,throwError as cw,map as uw,startWith as pw}from"rxjs";import{takeWhile as hw,map as fw,timer as gw}from"rxjs";import{distinctUntilChanged as Sw}from"rxjs";import{finalize as Ow,of as Aw,scan as Pw,switchMap as Ew}from"rxjs";import{startWith as Dw,distinctUntilChanged as Lw,shareReplay as vw,map as Nw,first as _w}from"rxjs";import{tap as Uw,delayWhen as Bw,timer as Ww,asyncScheduler as Gw}from"rxjs";import{map as Xw,switchMap as Qw,shareReplay as eV,distinctUntilChanged as tV}from"rxjs";import{scan as cV}from"rxjs";import{combineLatest as lV,skipWhile as mV,startWith as yV,BehaviorSubject as hV,shareReplay as fV,map as gV,finalize as TV,of as xV,mergeMap as RV,from as bV}from"rxjs";import{map as IV}from"rxjs";import{throttleTime as EV,distinctUntilChanged as kV,BehaviorSubject as ZV}from"rxjs";import{map as VV,combineLatest as KV,of as UV}from"rxjs";import{map as HV,of as zV,switchMap as JV}from"rxjs";import{distinctUntilChanged as nK}from"rxjs";import{map as pK,switchMap as dK}from"rxjs";import{first as yK}from"rxjs";import{switchMap as BK,of as WK}from"rxjs";import{map as AU,switchMap as PU,shareReplay as EU,distinctUntilChanged as kU,BehaviorSubject as ZU,isObservable as DU,of as LU}from"rxjs";function xc(e){let t=!ho(e),o;return t?o="loading":ue(e,"value")?o="success":ue(e,"error")?o="error":o="idle",o}function ho(e){let t=!1;if(e){let o=e.loading;o===!0?t=!1:t=o===!1||!!(e.value??e.error)||e.value===null}return t}function fo(e){let t=e==="idle";return o=>o?xc(o)===e:t}var zK=fo("idle"),kt=fo("loading");var JK=fo("success"),YK=fo("error");import{startWith as sU,filter as cU,map as uU,tap as pU,catchError as dU,combineLatest as lU,distinctUntilChanged as mU,first as yU,of as hU,shareReplay as fU,switchMap as gU,firstValueFrom as TU,scan as xU}from"rxjs";import{distinctUntilChanged as XU,map as QU,shareReplay as eB,skipWhile as tB}from"rxjs";import{map as BU}from"rxjs";import{BehaviorSubject as cB}from"rxjs";import{combineLatest as HB,map as zB,shareReplay as JB,skipWhile as YB}from"rxjs";import{map as oW,shareReplay as rW}from"rxjs";import{distinctUntilChanged as fW,map as gW,scan as TW,startWith as xW,catchError as RW,skip as bW,mergeMap as FW,delay as SW,BehaviorSubject as CW,combineLatest as IW,exhaustMap as MW,filter as OW,first as AW,of as PW,shareReplay as EW,defaultIfEmpty as kW}from"rxjs";import{defaultIfEmpty as $W,delay as HW,filter as zW,first as JW,map as YW,shareReplay as XW,switchMap as QW,tap as eG,startWith as tG,timeout as oG,of as rG,BehaviorSubject as nG,Subject as aG}from"rxjs";import{isObservable as AG}from"rxjs";import{filter as lG,map as mG,BehaviorSubject as yG,of as hG,first as fG,shareReplay as gG,switchMap as TG,delay as xG,from as RG,tap as bG}from"rxjs";import{createParamDecorator as Il}from"@nestjs/common";var aj=Il((e,t)=>Ml(t));function Ml(e){let o=e.switchToHttp().getRequest().headers.origin??"";return o.startsWith("http://localhost")||o.startsWith("https://localhost")}import{createParamDecorator as $r,BadRequestException as Ol,InternalServerErrorException as Al,Logger as Pl}from"@nestjs/common";import El from"raw-body";import{parse as kl}from"querystring";var Fc=new Pl("RawBody"),pj=$r(async(e,t)=>{let o=t.switchToHttp().getRequest();if(!o.readable)throw Fc.error("RawBody request was not readable. This is generally due to bad configuration."),new Ol("Invalid body");return await El(o)}),Sc=$r(async(e,t)=>{let r=t.switchToHttp().getRequest().body;if(!Buffer.isBuffer(r))throw Fc.error("RawBody expected a buffer set to req.body."),new Al("failed parsing body");return r}),dj=$r(async(e,t)=>{let o=t.switchToHttp().getRequest();return o.body=Zl(o.body),o.body});function Zl(e){let t=Dl(e);return kl(t)}function Dl(e){return e.toString("utf8").trim()}import{Injectable as Ll}from"@nestjs/common";import vl from"body-parser";var ot=class{use(t,o,r){vl.json()(t,o,r)}};ot=S([Ll()],ot);import{Injectable as Nl}from"@nestjs/common";import _l from"body-parser";var rt=class{use(t,o,r){_l.raw({type:"*/*"})(t,o,r)}};rt=S([Nl()],rt);import{Logger as wl,Module as Vl,RequestMethod as Kl}from"@nestjs/common";var Ul="/webhook",Bl={path:`${Ul}/{*path}`,method:Kl.POST},Hr=class{configure(t){Wl(t)}},go=class extends Hr{logger=new wl("ConfigureWebhookMiddlewareModule");configure(t){super.configure(t),this.logger.debug("Configured webhook routes with proper middleware.")}};go=S([Vl({})],go);function Wl(e){e.apply(rt).forRoutes(Bl).apply(ot).forRoutes("{*path}")}var Cc="CLIENT_WEB_APP_URL";var Ze=class{client;static assertValidConfig(t){if(!t.client.clientWebAppUrl)throw new Error("No client app url specified.")}};import{Inject as Gl,Injectable as jl}from"@nestjs/common";var De=class{_config;constructor(t){this._config=t}get config(){return this._config}get webAppUrl(){return this.config.client.clientWebAppUrl}get webAppHost(){return this.webAppUrl.split("://",2)[1]}};De=S([jl(),M(0,Gl(Ze))],De);import{Module as ql}from"@nestjs/common";import{ConfigModule as $l,ConfigService as Hl}from"@nestjs/config";function zl(e){let t={client:{clientWebAppUrl:e.get(Cc)}};return Ze.assertValidConfig(t),t}var To=class{};To=S([ql({imports:[$l],providers:[{provide:Ze,inject:[Hl],useFactory:zl},De],exports:[De]})],To);var Ic="SERVER_ENV_TOKEN";import{Inject as Jl,Injectable as Yl}from"@nestjs/common";function Mc(){return process.env.NODE_ENV==="test"}var xo=class{constructor(t){this.env=t}get isTestingEnv(){return Mc()}get isProduction(){return this.env.production}get isStaging(){return!!this.env.staging}get developerToolsEnabled(){return!!(!this.isProduction&&this.env.developerToolsEnabled)}get appUrl(){return this.env.appUrl}get appApiUrl(){return this.env.appApiUrl}};xo=S([Yl(),M(0,Jl(Ic))],xo);import{Controller as nm,Inject as am,Post as im,Req as sm}from"@nestjs/common";import{Inject as tm,Injectable as om,Logger as rm}from"@nestjs/common";import{createHmac as Xl,timingSafeEqual as Ql}from"node:crypto";var em="x-zs-webhook-signature";function Oc(e){let{secret:t}=e;return async(o,r)=>{let n=o.headers[em];if(!n)return{valid:!1};let a=r.toString("utf-8"),i=Xl("sha256",t).update(a,"utf-8").digest("base64"),s=!1;try{let p=Buffer.from(n,"base64"),u=Buffer.from(i,"base64");p.length===u.length&&(s=Ql(p,u))}catch{s=!1}let c;if(s)try{let p=JSON.parse(a);c=yc(p)}catch{s=!1}return s&&c?{valid:!0,event:c}:{valid:!1}}}var me=class{logger=new rm("ZohoSignWebhookService");_verifier;handler=hc();configure=fc(this.handler);constructor(t){let{webhookSecret:o}=t.zohoSignWebhook;this._verifier=Oc({secret:o})}async updateForWebhook(t,o){let r=await this._verifier(t,o);r.valid?await this.updateForZohoSignEvent(r.event):this.logger.warn("Received invalid Zoho Sign webhook event.",t)}async updateForZohoSignEvent(t){await this.handler(t)||this.logger.warn("Received unexpected/unhandled Zoho Sign webhook event.",t)}};me=S([om(),M(0,tm(ke))],me);var Le=class{_zohoSignWebhookService;constructor(t){this._zohoSignWebhookService=t}async handleZohoSignWebhook(t,o){await this._zohoSignWebhookService.updateForWebhook(t,o)}};S([im(),M(0,sm()),M(1,Sc())],Le.prototype,"handleZohoSignWebhook",1),Le=S([nm("/webhook/zoho/sign"),M(0,am(me))],Le);import{Module as cm}from"@nestjs/common";import{ConfigModule as um,ConfigService as pm}from"@nestjs/config";function dm(e){let t={zohoSignWebhook:{webhookSecret:e.get(gc)}};return ke.assertValidConfig(t),t}var Ro=class{};Ro=S([cm({imports:[um],controllers:[Le],providers:[{provide:ke,inject:[pm],useFactory:dm},me],exports:[me]})],Ro);import{Inject as Ac,Injectable as lm}from"@nestjs/common";var Zt=class{zohoDesk;factoryConfig;static assertValidConfig(t){if(Se(t.zohoDesk),!t.zohoDesk.orgId)throw new Error("No Zoho Desk orgId specified.")}};var ve=class{constructor(t,o){this.config=t;this.zohoAccountsApi=o;this.zohoDesk=ls({...t.factoryConfig,accountsContext:o.accountsContext})(t.zohoDesk)}zohoDesk;get deskContext(){return this.zohoDesk.deskContext}get zohoRateLimiter(){return this.zohoDesk.deskContext.zohoRateLimiter}get getTickets(){return vr(this.deskContext)}get getTicketById(){return ys(this.deskContext)}get searchTickets(){return Nr(this.deskContext)}get getTicketsForContact(){return hs(this.deskContext)}get getTicketsForProduct(){return fs(this.deskContext)}get getTicketMetrics(){return gs(this.deskContext)}get getAgentsTicketsCount(){return Ts(this.deskContext)}get getTicketsPageFactory(){return xs(this.deskContext)}get searchTicketsPageFactory(){return Rs(this.deskContext)}get getDepartments(){return Fs(this.deskContext)}get getDepartmentById(){return Ss(this.deskContext)}get getContacts(){return wr(this.deskContext)}get getContactById(){return Is(this.deskContext)}get getContactsByIds(){return Ms(this.deskContext)}get getContactsPageFactory(){return Os(this.deskContext)}get getTicketTags(){return As(this.deskContext)}get associateTicketTags(){return Ps(this.deskContext)}get dissociateTicketTag(){return Es(this.deskContext)}get searchTags(){return ks(this.deskContext)}get getAllTags(){return Zs(this.deskContext)}get getTicketFollowers(){return Ds(this.deskContext)}get addTicketFollowers(){return Ls(this.deskContext)}get removeTicketFollowers(){return vs(this.deskContext)}get getTicketAttachments(){return _s(this.deskContext)}get deleteTicketAttachment(){return ws(this.deskContext)}get getTicketComments(){return Ks(this.deskContext)}get getTicketCommentById(){return Us(this.deskContext)}get createTicketComment(){return Bs(this.deskContext)}get deleteTicketComment(){return Ws(this.deskContext)}get getTicketTimer(){return Gs(this.deskContext)}get performTicketTimerAction(){return js(this.deskContext)}get getTicketTimeEntries(){return qs(this.deskContext)}get getTicketTimeEntryById(){return $s(this.deskContext)}get getTicketTimeEntrySummation(){return Hs(this.deskContext)}get getTicketThreads(){return Kr(this.deskContext)}get getTicketThreadById(){return Ys(this.deskContext)}get getTicketThreadsPageFactory(){return Xs(this.deskContext)}get getTicketActivities(){return Ur(this.deskContext)}get getTicketActivitiesPageFactory(){return Qs(this.deskContext)}get getAgents(){return Br(this.deskContext)}get getAgentById(){return tc(this.deskContext)}get getAgentsByIds(){return oc(this.deskContext)}get getMyInfo(){return rc(this.deskContext)}get getAgentsPageFactory(){return nc(this.deskContext)}};ve=S([lm(),M(0,Ac(Zt)),M(1,Ac(L))],ve);import{ConfigModule as R$,ConfigService as b$}from"@nestjs/config";function mm(e){return`${e.clientId}:${e.refreshToken}`}function nt(e){let t=sc([cc(),uc(ct())]),o=new Map;function r(u,d){let f=mm(u),h=o.get(f);if(h)return h;let g={zohoAccounts:{serviceAccessTokenKey:d,refreshToken:u.refreshToken,clientId:u.clientId,clientSecret:u.clientSecret,apiUrl:u.region??"us"}},R=new L(g,t);return o.set(f,R),R}let n,a=ut(e,"recruit");if(a){let u=r(a,"recruit"),d={zohoRecruit:{apiUrl:a.apiMode}};n=new Ee(d,u)}let i,s=ut(e,"crm");if(s){let u=r(s,"crm"),d={zohoCrm:{apiUrl:s.apiMode}};i=new Pe(d,u)}let c,p=ut(e,"desk");if(p?.orgId){let u=r(p,"desk"),d={zohoDesk:{apiUrl:p.apiMode,orgId:p.orgId}};c=new ve(d,u)}return{recruitApi:n,crmApi:i,deskApi:c}}import{existsSync as ym,mkdirSync as hm,writeFileSync as fm}from"node:fs";import{join as gm}from"node:path";var bo={};function Ec(e){bo=e}var Tm=[/Bearer\s+\S+/gi,/access_token[=:]\s*\S+/gi,/refresh_token[=:]\s*\S+/gi,/client_secret[=:]\s*\S+/gi,/1000\.\w{20,}/g];function at(e){let t=e;for(let o of Tm)t=t.replace(o,"[REDACTED]");return t}function xm(){return new Date().toISOString().replace(/[:.]/g,"-")}function Rm(e,t){let{dumpDir:o,commandPath:r}=bo;if(!o)return;ym(o)||hm(o,{recursive:!0});let a=`${r?.length?r.join("_"):"response"}_${xm()}.json`,i=gm(o,a),s={ok:!0,data:e,...t?{meta:t}:{}};fm(i,JSON.stringify(s,null,2))}function bm(e,t){let o=t.split(",").map(r=>r.trim());return Array.isArray(e)?e.map(r=>Pc(r,o)):e!=null&&typeof e=="object"?Pc(e,o):e}function Pc(e,t){if(e==null||typeof e!="object")return e;let o={};for(let r of t)r in e&&(o[r]=e[r]);return o}function l(e,t){Rm(e,t);let r={ok:!0,data:bo.pick?bm(e,bo.pick):e,...t?{meta:t}:{}};console.log(JSON.stringify(r))}function m(e){let t=Fm(e);console.log(JSON.stringify(t))}function Fm(e){return e instanceof G?{ok:!1,error:at(e.message),code:"TOKEN_EXPIRED",suggestion:"Run: zoho-cli auth check"}:e instanceof Ft?{ok:!1,error:at(e.message),code:"AUTH_ERROR",suggestion:"Check your client ID, secret, and refresh token."}:e instanceof St?{ok:!1,error:at(e.message),code:"RATE_LIMITED",suggestion:"Wait and retry. Zoho rate limit exceeded."}:e instanceof B?{ok:!1,error:at(e.message),code:"API_ERROR"}:e instanceof Error?{ok:!1,error:at(e.message),code:"ERROR"}:{ok:!1,error:at(String(e)),code:"UNKNOWN_ERROR"}}var kc={us:"https://accounts.zoho.com",eu:"https://accounts.zoho.eu",in:"https://accounts.zoho.in",au:"https://accounts.zoho.com.au",jp:"https://accounts.zoho.jp"},Zc={recruit:["ZohoRecruit.modules.ALL","ZohoRecruit.settings.all","ZohoRecruit.functions.execute.READ","ZohoRecruit.functions.execute.CREATE"],crm:["ZohoCRM.modules.ALL","ZohoCRM.settings.ALL","ZohoCRM.functions.execute.READ","ZohoCRM.functions.execute.CREATE"],desk:["Desk.tickets.ALL","Desk.tasks.ALL","Desk.contacts.ALL","Desk.settings.ALL","Desk.events.ALL","Desk.search.READ","Desk.articles.READ","Desk.basic.READ"],sign:["ZohoSign.documents.ALL","ZohoSign.templates.ALL"]};function Sm(e){if(e){if(e.startsWith("http://")||e.startsWith("https://"))try{let o=new URL(e).searchParams.get("code");if(!o)throw new Error('No "code" parameter found in the provided URL.');return o}catch(t){throw t instanceof TypeError?new Error(`Invalid URL provided for --code: ${e}`):t}return e}}var Cm={command:"setup",describe:"Generate OAuth authorization URL, exchange code, or set refresh token directly",builder:e=>e.option("client-id",{type:"string",describe:"OAuth client ID (from https://api-console.zoho.com/)"}).option("client-secret",{type:"string",describe:"OAuth client secret"}).option("redirect-uri",{type:"string",default:"http://localhost/oauth",describe:"Redirect URI (must match API console config)"}).option("region",{type:"string",default:"us",choices:["us","eu","in","au","jp"],describe:"Zoho region"}).option("scopes",{type:"string",default:"recruit,crm,desk",describe:"Comma-separated products for OAuth scopes (recruit,crm,desk,sign)"}).option("code",{type:"string",describe:"Authorization code or the full redirect URL (code is extracted automatically)"}).option("token",{type:"string",describe:"Set a refresh token directly (skips OAuth code exchange)"}).option("product",{type:"string",choices:[...Lt],describe:"Store credentials for a specific product instead of shared"}).option("org-id",{type:"string",describe:"Zoho Desk organization ID"}).option("api-mode",{type:"string",default:"production",choices:["production","sandbox"],describe:"API mode"}).example([["$0 auth setup --client-id 1000.ABC --client-secret xyz","Step 1: Get OAuth URL (saves shared credentials)"],["$0 auth setup --code 1000.AUTH.CODE","Step 2: Exchange code for refresh token"],['$0 auth setup --code "http://localhost/oauth?code=1000.AUTH.CODE&location=us"',"Step 2: Paste the full redirect URL"],["$0 auth setup --client-id 1000.ABC --client-secret xyz --token 1000.REFRESH.TOKEN","Set shared refresh token directly"],["$0 auth setup --product crm --client-id 1000.CRM --client-secret xyz --token 1000.CRM.TOKEN","Set CRM-specific credentials"]]),handler:async e=>{try{let t=await w(),o=e.product,r=e.clientId??t?.shared?.clientId,n=e.clientSecret??t?.shared?.clientSecret,a=e.redirectUri,i=e.region??t?.shared?.region??"us",s=e.scopes.split(",").map(d=>d.trim()),c=Sm(e.code),p=e.token,u=kc[i]??kc.us;if(!r||!n)throw new Error("--client-id and --client-secret are required. Get them from https://api-console.zoho.com/");if(p){let d={clientId:r,clientSecret:n,refreshToken:p};if(o){let f={...d,apiUrl:e.apiMode,orgId:o==="desk"?e.orgId:void 0},h=await U({shared:t?.shared??{clientId:"",clientSecret:"",refreshToken:""},[o]:f});l({success:!0,product:o,refreshToken:ye(p),configSaved:!0,configuredProducts:$(h)})}else{let f=await U({shared:{...d,region:i,apiMode:e.apiMode},desk:e.orgId?{orgId:e.orgId}:void 0});l({success:!0,refreshToken:ye(p),configSaved:!0,configuredProducts:$(f)})}}else if(c){let d=`${u}/oauth/v2/token`,f=new URLSearchParams({grant_type:"authorization_code",client_id:r,client_secret:n,redirect_uri:a,code:c}),g=await(await fetch(d,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:f.toString()})).json();if(g.error)throw new Error(`Token exchange failed: ${g.error}`);let R=g.refresh_token;if(!R)throw new Error("No refresh_token in response. The authorization code may have expired (valid for 2 minutes). Generate a new one.");let x={clientId:r,clientSecret:n,refreshToken:R},C;o?C=await U({shared:t?.shared??{clientId:"",clientSecret:"",refreshToken:""},[o]:{...x,apiUrl:e.apiMode,orgId:o==="desk"?e.orgId:void 0}}):C=await U({shared:{...x,region:i,apiMode:e.apiMode},desk:e.orgId?{orgId:e.orgId}:void 0}),l({step:2,success:!0,product:o??"shared",refreshToken:ye(R),accessToken:g.access_token?ye(g.access_token):null,scope:g.scope,configSaved:!0,configuredProducts:$(C)})}else{let d=s.flatMap(h=>Zc[h]??[]);if(d.length===0)throw new Error(`No valid products specified. Choose from: ${Object.keys(Zc).join(", ")}`);let f=`${u}/oauth/v2/auth?scope=${d.join(",")}&client_id=${encodeURIComponent(r)}&response_type=code&access_type=offline&redirect_uri=${encodeURIComponent(a)}`;await U({shared:{clientId:r,clientSecret:n,refreshToken:t?.shared?.refreshToken??"",region:i,apiMode:e.apiMode??t?.shared?.apiMode},desk:e.orgId?{orgId:e.orgId}:void 0}),l({step:1,instructions:'Open the authorization URL in a browser. Authorize the application. Copy the "code" parameter from the redirect URL.',authorizationUrl:f,redirectUri:a,scopes:d,credentialsSaved:!0,nextStep:'zoho-cli auth setup --code "PASTE_REDIRECT_URL_OR_AUTH_CODE"'})}}catch(t){m(t),process.exit(1)}}},Im={command:"set",describe:"Save Zoho API credentials directly",builder:e=>e.option("client-id",{type:"string",demandOption:!0,describe:"OAuth client ID"}).option("client-secret",{type:"string",demandOption:!0,describe:"OAuth client secret"}).option("refresh-token",{type:"string",demandOption:!0,describe:"OAuth refresh token"}).option("product",{type:"string",choices:[...Lt],describe:"Store for a specific product instead of shared"}).option("region",{type:"string",default:"us",describe:"Zoho region (us, eu, in, au, jp)"}).option("org-id",{type:"string",describe:"Zoho Desk organization ID"}).option("api-mode",{type:"string",default:"production",choices:["production","sandbox"],describe:"API mode"}).example([["$0 auth set --client-id abc --client-secret xyz --refresh-token 1000.abc.xyz","Set shared credentials"],["$0 auth set --product crm --client-id abc --client-secret xyz --refresh-token 1000.crm.xyz","Set CRM-specific credentials"]]),handler:async e=>{try{let t=e.product,o={clientId:e.clientId,clientSecret:e.clientSecret,refreshToken:e.refreshToken},r;t?r=await U({shared:(await w())?.shared??{clientId:"",clientSecret:"",refreshToken:""},[t]:{...o,apiUrl:e.apiMode,orgId:t==="desk"?e.orgId:void 0}}):r=await U({shared:{...o,region:e.region,apiMode:e.apiMode},desk:e.orgId?{orgId:e.orgId}:void 0}),l({saved:!0,product:t??"shared",configuredProducts:$(r)})}catch(t){m(t),process.exit(1)}}},Mm={command:"show",describe:"Show current configuration (secrets masked)",builder:e=>e,handler:async()=>{try{let o=function(r){if(r)return{clientId:r.clientId?ye(r.clientId):void 0,clientSecret:r.clientSecret?ye(r.clientSecret):void 0,refreshToken:r.refreshToken?ye(r.refreshToken):void 0}};var e=o;let t=await w();if(!t){l({configured:!1});return}l({configured:!0,shared:{...o(t.shared),region:t.shared?.region??"us",apiMode:t.shared?.apiMode??"production"},recruit:t.recruit?{...o(t.recruit),apiUrl:t.recruit.apiUrl}:null,crm:t.crm?{...o(t.crm),apiUrl:t.crm.apiUrl}:null,desk:t.desk?{...o(t.desk),apiUrl:t.desk.apiUrl,orgId:t.desk.orgId}:null,configuredProducts:$(t)})}catch(t){m(t),process.exit(1)}}},Om={command:"check",describe:"Verify credentials by exchanging tokens",builder:e=>e,handler:async()=>{try{let e=await w();if(!e){l({authenticated:!1,error:"No credentials configured. Run: zoho-cli auth setup"});return}let t=$(e);if(t.length===0){l({authenticated:!1,error:"No products have complete credentials. Run: zoho-cli auth setup"});return}let o=nt(e),r={};for(let n of t)try{let a=n==="recruit"?o.recruitApi:n==="crm"?o.crmApi:o.deskApi;if(!a){r[n]={authenticated:!1,error:"Not configured"};continue}let s=await a.zohoAccountsApi.accessToken();r[n]={authenticated:!0,scope:s.scope,expiresIn:s.expires_in}}catch(a){let i=a instanceof Error?a.message:String(a);r[n]={authenticated:!1,error:i}}l({products:r})}catch(e){m(e),process.exit(1)}}},Am={command:"clear",describe:"Remove stored credentials and token cache",builder:e=>e,handler:async()=>{try{await on(),l({cleared:!0})}catch(e){m(e),process.exit(1)}}},Dc={command:"auth",describe:"Manage Zoho API credentials",builder:e=>e.command(Cm).command(Im).command(Mm).command(Om).command(Am).demandCommand(1,"Please specify an auth subcommand."),handler:F};import{access as Pm,constants as Em}from"node:fs";import{dirname as km}from"node:path";var Lc={command:"doctor",describe:"Check CLI configuration and connectivity",builder:e=>e,handler:async()=>{let e=[],t=await w();t?e.push({name:"config",status:"pass",message:`Config loaded from ${st()}`}):e.push({name:"config",status:"fail",message:"No config found. Run: zoho-cli auth setup"}),t?.shared?.clientId&&t?.shared?.clientSecret&&t?.shared?.refreshToken?e.push({name:"shared-credentials",status:"pass",message:"Shared credentials present"}):t&&e.push({name:"shared-credentials",status:"warn",message:"Missing shared credentials. Per-product credentials may still work."});let o=km(ct());if(await Zm(o)?e.push({name:"token-cache",status:"pass",message:`Token cache directory writable: ${o}`}):e.push({name:"token-cache",status:"warn",message:`Token cache directory not writable: ${o}`}),t){let a=$(t);a.length>0?e.push({name:"products",status:"pass",message:`Configured products: ${a.join(", ")}`}):e.push({name:"products",status:"fail",message:"No products have complete credentials"});let i=nt(t);for(let s of a)try{let c=s==="recruit"?i.recruitApi:s==="crm"?i.crmApi:i.deskApi;if(c){let u=await c.zohoAccountsApi.accessToken();e.push({name:`${s}-token`,status:"pass",message:`${s}: Token exchange successful. Scope: ${u.scope}`})}}catch(c){let p=c instanceof Error?c.message:String(c);e.push({name:`${s}-token`,status:"fail",message:`${s}: Token exchange failed: ${p}`})}t.desk?.orgId?e.push({name:"desk-org-id",status:"pass",message:`Desk org ID configured: ${t.desk.orgId}`}):a.includes("desk")||e.push({name:"desk-org-id",status:"warn",message:"No Desk org ID. Desk commands unavailable."})}let n=e.every(a=>a.status==="pass");l({checks:e,healthy:n}),n||process.exit(e.some(a=>a.status==="fail")?1:0)}};function Zm(e){return new Promise(t=>{Pm(e,Em.W_OK,o=>{t(!o)})})}var zr;function vc(e){return async t=>{let o=t._?.[0];if(!(typeof o=="string"&&e.has(o)))try{let r=await w();r||(m(new Error("Not authenticated. Run: zoho-cli auth setup --client-id X --client-secret Y --token Z")),process.exit(4)),$(r).length===0&&(m(new Error("No products configured with complete credentials. Run: zoho-cli auth setup")),process.exit(4)),zr=nt(r)}catch(r){m(r),process.exit(4)}}}function Jr(e){if(!zr)throw new Error("CLI context not initialized. This is a bug.");return zr}function j(e){let{recruitApi:t}=Jr(e);if(!t)throw new Error("Recruit not configured. Run: zoho-cli auth setup --client-id X --client-secret Y --token Z");return t}function q(e){let{crmApi:t}=Jr(e);if(!t)throw new Error("CRM not configured. Run: zoho-cli auth setup --product crm --client-id X --client-secret Y --token Z");return t}function b(e){let{deskApi:t}=Jr(e);if(!t)throw new Error("Desk not configured. Run: zoho-cli auth setup --product desk --client-id X --client-secret Y --token Z --org-id YOUR_ORG_ID");return t}function ie(e){return e.option("page",{type:"number",default:1,describe:"Page number (1-based)"}).option("per-page",{type:"number",default:20,describe:"Records per page"})}function P(e){return e.option("from",{type:"number",default:1,describe:"Start index (1-based)"}).option("limit",{type:"number",default:25,describe:"Max records (max 50)"})}function E(e){return e.option("module",{alias:"m",type:"string",demandOption:!0,describe:"Zoho module name (e.g. Candidates, Contacts, Leads)"})}function Ie(e){return e.option("id",{type:"string",demandOption:!0,describe:"Record ID"})}function Dt(e,t=!1){return e.option("fields",{type:"string",demandOption:t,describe:"Comma-separated field names to return"})}function Fo(e){return e.option("sort-by",{type:"string",describe:"Field to sort by"}).option("sort-order",{type:"string",choices:["asc","desc"],describe:"Sort direction"})}var Dm={command:"list",describe:"List records from a module",builder:e=>Fo(Dt(ie(E(e)))),handler:async e=>{try{let o=await j(e).getRecords({module:e.module,page:e.page,per_page:e.perPage,fields:e.fields,sort_by:e.sortBy,sort_order:e.sortOrder});l(o.data,{page:o.info?.page,per_page:o.info?.per_page,more_records:o.info?.more_records})}catch(t){m(t),process.exit(1)}}},Lm={command:"get",describe:"Get a record by ID",builder:e=>Ie(E(e)),handler:async e=>{try{let o=await j(e).getRecordById({module:e.module,id:e.id});l(o)}catch(t){m(t),process.exit(1)}}},vm={command:"search",describe:"Search records in a module",builder:e=>ie(E(e)).option("criteria",{type:"string",describe:"Search criteria string, e.g. (First_Name:equals:John)"}).option("word",{type:"string",describe:"Keyword search"}).option("email",{type:"string",describe:"Search by email"}).option("phone",{type:"string",describe:"Search by phone"}),handler:async e=>{try{let o=await j(e).searchRecords({module:e.module,criteria:e.criteria,word:e.word,email:e.email,phone:e.phone,page:e.page,per_page:e.perPage});l(o.data,{page:o.info?.page,per_page:o.info?.per_page,more_records:o.info?.more_records})}catch(t){m(t),process.exit(1)}}},Nm={command:"insert",describe:"Insert a record into a module",builder:e=>E(e).option("data",{type:"string",demandOption:!0,describe:"JSON record data (object or array)"}),handler:async e=>{try{let t=j(e),o=JSON.parse(e.data),r=await t.insertRecord({module:e.module,data:o});l(r)}catch(t){m(t),process.exit(1)}}},_m={command:"upsert",describe:"Upsert a record in a module",builder:e=>E(e).option("data",{type:"string",demandOption:!0,describe:"JSON record data (object or array, include id for update)"}),handler:async e=>{try{let t=j(e),o=JSON.parse(e.data),r=await t.upsertRecord({module:e.module,data:o});l(r)}catch(t){m(t),process.exit(1)}}},wm={command:"update",describe:"Update a record in a module",builder:e=>E(e).option("data",{type:"string",demandOption:!0,describe:"JSON record data (object or array, must include id)"}),handler:async e=>{try{let t=j(e),o=JSON.parse(e.data),r=await t.updateRecord({module:e.module,data:o});l(r)}catch(t){m(t),process.exit(1)}}},Vm={command:"delete",describe:"Delete records from a module",builder:e=>E(e).option("ids",{type:"string",demandOption:!0,describe:"Comma-separated record IDs to delete"}),handler:async e=>{try{let t=j(e),o=e.ids.split(",").map(n=>n.trim()),r=await t.deleteRecord({module:e.module,ids:o});l(r)}catch(t){m(t),process.exit(1)}}},Km={command:"emails",describe:"Get emails for a record",builder:e=>ie(Ie(E(e))),handler:async e=>{try{let o=await j(e).getEmailsForRecord({module:e.module,id:e.id,page:e.page,per_page:e.perPage});l(o.data,{page:o.info?.page,per_page:o.info?.per_page,more_records:o.info?.more_records})}catch(t){m(t),process.exit(1)}}},Um={command:"attachments",describe:"Get attachments for a record",builder:e=>ie(Ie(E(e))),handler:async e=>{try{let o=await j(e).getAttachmentsForRecord({module:e.module,id:e.id,page:e.page,per_page:e.perPage});l(o.data,{page:o.info?.page,per_page:o.info?.per_page,more_records:o.info?.more_records})}catch(t){m(t),process.exit(1)}}},Nc={command:"recruit",describe:"Zoho Recruit operations",builder:e=>e.command(Dm).command(Lm).command(vm).command(Nm).command(_m).command(wm).command(Vm).command(Km).command(Um).demandCommand(1,"Please specify a recruit subcommand.").example([["$0 recruit list -m Candidates --per-page 10","List first 10 candidates"],["$0 recruit get -m Candidates --id 12345","Get a candidate by ID"],['$0 recruit search -m Candidates --word "John"',"Search candidates by keyword"],[`$0 recruit insert -m Candidates --data '{"First_Name":"John","Last_Name":"Doe"}'`,"Insert a candidate"]]),handler:F};var Bm={command:"list",describe:"List records from a module",builder:e=>Fo(Dt(ie(E(e)),!0)),handler:async e=>{try{let o=await q(e).getRecords({module:e.module,fields:e.fields,page:e.page,per_page:e.perPage,sort_by:e.sortBy,sort_order:e.sortOrder});l(o.data,{page:o.info?.page,per_page:o.info?.per_page,more_records:o.info?.more_records})}catch(t){m(t),process.exit(1)}}},Wm={command:"get",describe:"Get a record by ID",builder:e=>Ie(E(e)),handler:async e=>{try{let o=await q(e).getRecordById({module:e.module,id:e.id});l(o)}catch(t){m(t),process.exit(1)}}},Gm={command:"search",describe:"Search records in a module",builder:e=>ie(E(e)).option("criteria",{type:"string",describe:"Search criteria string, e.g. (First_Name:equals:John)"}).option("word",{type:"string",describe:"Keyword search"}).option("email",{type:"string",describe:"Search by email"}).option("phone",{type:"string",describe:"Search by phone"}),handler:async e=>{try{let o=await q(e).searchRecords({module:e.module,criteria:e.criteria,word:e.word,email:e.email,phone:e.phone,page:e.page,per_page:e.perPage});l(o.data,{page:o.info?.page,per_page:o.info?.per_page,more_records:o.info?.more_records})}catch(t){m(t),process.exit(1)}}},jm={command:"insert",describe:"Insert a record into a module",builder:e=>E(e).option("data",{type:"string",demandOption:!0,describe:"JSON record data (object or array)"}),handler:async e=>{try{let t=q(e),o=JSON.parse(e.data),r=await t.insertRecord({module:e.module,data:o});l(r)}catch(t){m(t),process.exit(1)}}},qm={command:"upsert",describe:"Upsert a record in a module",builder:e=>E(e).option("data",{type:"string",demandOption:!0,describe:"JSON record data (object or array, include id for update)"}),handler:async e=>{try{let t=q(e),o=JSON.parse(e.data),r=await t.upsertRecord({module:e.module,data:o});l(r)}catch(t){m(t),process.exit(1)}}},$m={command:"update",describe:"Update a record in a module",builder:e=>E(e).option("data",{type:"string",demandOption:!0,describe:"JSON record data (object or array, must include id)"}),handler:async e=>{try{let t=q(e),o=JSON.parse(e.data),r=await t.updateRecord({module:e.module,data:o});l(r)}catch(t){m(t),process.exit(1)}}},Hm={command:"delete",describe:"Delete records from a module",builder:e=>E(e).option("ids",{type:"string",demandOption:!0,describe:"Comma-separated record IDs to delete"}),handler:async e=>{try{let t=q(e),o=e.ids.split(",").map(n=>n.trim()),r=await t.deleteRecord({module:e.module,ids:o});l(r)}catch(t){m(t),process.exit(1)}}},zm={command:"emails",describe:"Get emails for a record",builder:e=>ie(Ie(E(e))),handler:async e=>{try{let o=await q(e).getEmailsForRecord({module:e.module,id:e.id,page:e.page,per_page:e.perPage});l(o.data,{page:o.info?.page,per_page:o.info?.per_page,more_records:o.info?.more_records})}catch(t){m(t),process.exit(1)}}},Jm={command:"attachments",describe:"Get attachments for a record",builder:e=>Dt(ie(Ie(E(e))),!0),handler:async e=>{try{let o=await q(e).getAttachmentsForRecord({module:e.module,id:e.id,fields:e.fields,page:e.page,per_page:e.perPage});l(o.data,{page:o.info?.page,per_page:o.info?.per_page,more_records:o.info?.more_records})}catch(t){m(t),process.exit(1)}}},_c={command:"crm",describe:"Zoho CRM operations",builder:e=>e.command(Bm).command(Wm).command(Gm).command(jm).command(qm).command($m).command(Hm).command(zm).command(Jm).demandCommand(1,"Please specify a CRM subcommand.").example([['$0 crm list -m Contacts --fields "First_Name,Last_Name,Email" --per-page 10',"List contacts"],["$0 crm get -m Contacts --id 12345","Get a contact by ID"],['$0 crm search -m Leads --word "Acme"',"Search leads by keyword"],[`$0 crm insert -m Contacts --data '{"First_Name":"Jane","Last_Name":"Doe"}'`,"Insert a contact"]]),handler:F};var Ym={command:"list",describe:"List tickets",builder:e=>P(e).option("department-id",{type:"string",describe:"Filter by department ID"}).option("status",{type:"string",describe:"Filter by status"}).option("sort-by",{type:"string",describe:"Field to sort by"}).option("include",{type:"string",describe:"Comma-separated includes (e.g. contacts,assignee,departments,team,isRead)"}),handler:async e=>{try{let o=await b(e).getTickets({from:e.from,limit:e.limit,departmentId:e.departmentId,status:e.status,sortBy:e.sortBy,include:e.include});l(o.data,{from:e.from,limit:e.limit,count:o.data?.length})}catch(t){m(t),process.exit(1)}}},Xm={command:"get <ticketId>",describe:"Get a ticket by ID",builder:e=>e.positional("ticketId",{type:"string",demandOption:!0,describe:"Ticket ID"}).option("include",{type:"string",describe:"Comma-separated includes (e.g. contacts,assignee,departments,team,isRead)"}),handler:async e=>{try{let o=await b(e).getTicketById({ticketId:e.ticketId,include:e.include});l(o)}catch(t){m(t),process.exit(1)}}},Qm={command:"search",describe:"Search tickets",builder:e=>P(e).option("subject",{type:"string",describe:"Search by subject"}).option("status",{type:"string",describe:"Filter by status"}).option("email",{type:"string",describe:"Filter by email"}).option("department-id",{type:"string",describe:"Filter by department ID"}).option("channel",{type:"string",describe:"Filter by channel"}).option("priority",{type:"string",describe:"Filter by priority"}),handler:async e=>{try{let o=await b(e).searchTickets({from:e.from,limit:e.limit,subject:e.subject,status:e.status,email:e.email,departmentId:e.departmentId,channel:e.channel,priority:e.priority});l(o.data,{from:e.from,limit:e.limit,count:o.data?.length})}catch(t){m(t),process.exit(1)}}},ey={command:"by-contact <contactId>",describe:"List tickets for a contact",builder:e=>P(e).positional("contactId",{type:"string",demandOption:!0,describe:"Contact ID"}),handler:async e=>{try{let o=await b(e).getTicketsForContact({contactId:e.contactId,from:e.from,limit:e.limit});l(o.data,{from:e.from,limit:e.limit,count:o.data?.length})}catch(t){m(t),process.exit(1)}}},ty={command:"metrics <ticketId>",describe:"Get ticket metrics",builder:e=>e.positional("ticketId",{type:"string",demandOption:!0,describe:"Ticket ID"}),handler:async e=>{try{let o=await b(e).getTicketMetrics({ticketId:e.ticketId});l(o)}catch(t){m(t),process.exit(1)}}},oy={command:"agent-counts",describe:"Get ticket counts per agent",builder:e=>e.option("agent-ids",{type:"string",demandOption:!0,describe:"Comma-separated agent IDs"}).option("department-id",{type:"string",describe:"Filter by department ID"}),handler:async e=>{try{let t=b(e),o=e.agentIds.split(",").map(n=>n.trim()),r=await t.getAgentsTicketsCount({agentIds:o,departmentId:e.departmentId});l(r)}catch(t){m(t),process.exit(1)}}},wc={command:"tickets",describe:"Desk ticket operations",builder:e=>e.command(Ym).command(Xm).command(Qm).command(ey).command(ty).command(oy).demandCommand(1),handler:F};var ry={command:"list",describe:"List departments",builder:e=>P(e).option("search",{type:"string",describe:"Search by name"}).option("is-enabled",{type:"boolean",describe:"Filter by enabled status"}),handler:async e=>{try{let o=await b(e).getDepartments({from:e.from,limit:e.limit,searchStr:e.search,isEnabled:e.isEnabled});l(o.data,{count:o.data?.length})}catch(t){m(t),process.exit(1)}}},ny={command:"get <departmentId>",describe:"Get a department by ID",builder:e=>e.positional("departmentId",{type:"string",demandOption:!0,describe:"Department ID"}),handler:async e=>{try{let o=await b(e).getDepartmentById({departmentId:e.departmentId});l(o)}catch(t){m(t),process.exit(1)}}},Vc={command:"departments",describe:"Desk department operations",builder:e=>e.command(ry).command(ny).demandCommand(1),handler:F};var ay={command:"list",describe:"List contacts",builder:e=>P(e).option("sort-by",{type:"string",describe:"Field to sort by"}).option("include",{type:"string",describe:"Comma-separated includes"}),handler:async e=>{try{let o=await b(e).getContacts({from:e.from,limit:e.limit,sortBy:e.sortBy,include:e.include});l(o.data,{from:e.from,limit:e.limit,count:o.data?.length})}catch(t){m(t),process.exit(1)}}},iy={command:"get <contactId>",describe:"Get a contact by ID",builder:e=>e.positional("contactId",{type:"string",demandOption:!0,describe:"Contact ID"}).option("include",{type:"string",describe:"Comma-separated includes"}),handler:async e=>{try{let o=await b(e).getContactById({contactId:e.contactId,include:e.include});l(o)}catch(t){m(t),process.exit(1)}}},Kc={command:"contacts",describe:"Desk contact operations",builder:e=>e.command(ay).command(iy).demandCommand(1),handler:F};var sy={command:"list",describe:"List agents",builder:e=>P(e).option("department-id",{type:"string",describe:"Filter by department ID"}).option("status",{type:"string",describe:"Filter by status (active, disabled)"}).option("include",{type:"string",describe:"Comma-separated includes (e.g. role,profile,departments)"}),handler:async e=>{try{let o=await b(e).getAgents({from:e.from,limit:e.limit,departmentId:e.departmentId,status:e.status,include:e.include});l(o.data,{from:e.from,limit:e.limit,count:o.data?.length})}catch(t){m(t),process.exit(1)}}},cy={command:"get <agentId>",describe:"Get an agent by ID",builder:e=>e.positional("agentId",{type:"string",demandOption:!0,describe:"Agent ID"}).option("include",{type:"string",describe:"Comma-separated includes"}),handler:async e=>{try{let o=await b(e).getAgentById({agentId:e.agentId,include:e.include});l(o)}catch(t){m(t),process.exit(1)}}},uy={command:"my-info",describe:"Get current authenticated agent info",builder:e=>e,handler:async e=>{try{let o=await b(e).getMyInfo();l(o)}catch(t){m(t),process.exit(1)}}},Uc={command:"agents",describe:"Desk agent operations",builder:e=>e.command(sy).command(cy).command(uy).demandCommand(1),handler:F};var py={command:"list",describe:"List all tags",builder:e=>P(e).option("department-id",{alias:"d",type:"string",demandOption:!0,describe:"Department ID"}),handler:async e=>{try{let o=await b(e).getAllTags({from:e.from,limit:e.limit,departmentId:e.departmentId});l(o.data,{count:o.data?.length})}catch(t){m(t),process.exit(1)}}},dy={command:"search",describe:"Search tags",builder:e=>P(e).option("department-id",{alias:"d",type:"string",describe:"Department ID"}).option("query",{alias:"q",type:"string",demandOption:!0,describe:"Search string"}),handler:async e=>{try{let o=await b(e).searchTags({from:e.from,limit:e.limit,departmentId:e.departmentId,searchVal:e.query});l(o.data,{count:o.data?.length})}catch(t){m(t),process.exit(1)}}},ly={command:"for-ticket <ticketId>",describe:"Get tags on a ticket",builder:e=>e.positional("ticketId",{type:"string",demandOption:!0,describe:"Ticket ID"}),handler:async e=>{try{let o=await b(e).getTicketTags({ticketId:e.ticketId});l(o)}catch(t){m(t),process.exit(1)}}},my={command:"associate <ticketId>",describe:"Add tags to a ticket",builder:e=>e.positional("ticketId",{type:"string",demandOption:!0,describe:"Ticket ID"}).option("tags",{type:"string",demandOption:!0,describe:"Comma-separated tag names"}),handler:async e=>{try{let t=b(e),o=e.tags.split(",").map(n=>n.trim()),r=await t.associateTicketTags({ticketId:e.ticketId,tags:o});l(r)}catch(t){m(t),process.exit(1)}}},yy={command:"dissociate <ticketId>",describe:"Remove a tag from a ticket",builder:e=>e.positional("ticketId",{type:"string",demandOption:!0,describe:"Ticket ID"}).option("tag-id",{type:"string",demandOption:!0,describe:"Tag ID to remove"}),handler:async e=>{try{await b(e).dissociateTicketTag({ticketId:e.ticketId,tagId:e.tagId}),l({removed:!0})}catch(t){m(t),process.exit(1)}}},Bc={command:"tags",describe:"Desk tag operations",builder:e=>e.command(py).command(dy).command(ly).command(my).command(yy).demandCommand(1),handler:F};var hy={command:"list <ticketId>",describe:"List comments on a ticket",builder:e=>P(e).positional("ticketId",{type:"string",demandOption:!0,describe:"Ticket ID"}).option("sort-by",{type:"string",describe:"Sort field"}),handler:async e=>{try{let o=await b(e).getTicketComments({ticketId:e.ticketId,from:e.from,limit:e.limit,sortBy:e.sortBy});l(o.data,{from:e.from,limit:e.limit,count:o.data?.length})}catch(t){m(t),process.exit(1)}}},fy={command:"get <ticketId> <commentId>",describe:"Get a comment by ID",builder:e=>e.positional("ticketId",{type:"string",demandOption:!0,describe:"Ticket ID"}).positional("commentId",{type:"string",demandOption:!0,describe:"Comment ID"}),handler:async e=>{try{let o=await b(e).getTicketCommentById({ticketId:e.ticketId,commentId:e.commentId});l(o)}catch(t){m(t),process.exit(1)}}},gy={command:"create <ticketId>",describe:"Create a comment on a ticket",builder:e=>e.positional("ticketId",{type:"string",demandOption:!0,describe:"Ticket ID"}).option("content",{type:"string",demandOption:!0,describe:"Comment content"}).option("public",{type:"boolean",default:!1,describe:"Make comment public"}).option("content-type",{type:"string",default:"plainText",choices:["plainText","html"],describe:"Content type"}),handler:async e=>{try{let o=await b(e).createTicketComment({ticketId:e.ticketId,content:e.content,isPublic:e.public,contentType:e.contentType});l(o)}catch(t){m(t),process.exit(1)}}},Ty={command:"delete <ticketId> <commentId>",describe:"Delete a comment",builder:e=>e.positional("ticketId",{type:"string",demandOption:!0,describe:"Ticket ID"}).positional("commentId",{type:"string",demandOption:!0,describe:"Comment ID"}),handler:async e=>{try{await b(e).deleteTicketComment({ticketId:e.ticketId,commentId:e.commentId}),l({deleted:!0})}catch(t){m(t),process.exit(1)}}},Wc={command:"comments",describe:"Desk comment operations",builder:e=>e.command(hy).command(fy).command(gy).command(Ty).demandCommand(1),handler:F};var xy={command:"list <ticketId>",describe:"List attachments on a ticket",builder:e=>P(e).positional("ticketId",{type:"string",demandOption:!0,describe:"Ticket ID"}),handler:async e=>{try{let o=await b(e).getTicketAttachments({ticketId:e.ticketId,from:e.from,limit:e.limit});l(o.data,{from:e.from,limit:e.limit,count:o.data?.length})}catch(t){m(t),process.exit(1)}}},Ry={command:"delete <ticketId> <attachmentId>",describe:"Delete an attachment",builder:e=>e.positional("ticketId",{type:"string",demandOption:!0,describe:"Ticket ID"}).positional("attachmentId",{type:"string",demandOption:!0,describe:"Attachment ID"}),handler:async e=>{try{await b(e).deleteTicketAttachment({ticketId:e.ticketId,attachmentId:e.attachmentId}),l({deleted:!0})}catch(t){m(t),process.exit(1)}}},Gc={command:"attachments",describe:"Desk attachment operations",builder:e=>e.command(xy).command(Ry).demandCommand(1),handler:F};var by={command:"list <ticketId>",describe:"List followers of a ticket",builder:e=>e.positional("ticketId",{type:"string",demandOption:!0,describe:"Ticket ID"}),handler:async e=>{try{let o=await b(e).getTicketFollowers({ticketId:e.ticketId});l(o)}catch(t){m(t),process.exit(1)}}},Fy={command:"add <ticketId>",describe:"Add followers to a ticket",builder:e=>e.positional("ticketId",{type:"string",demandOption:!0,describe:"Ticket ID"}).option("agent-ids",{type:"string",demandOption:!0,describe:"Comma-separated agent IDs"}),handler:async e=>{try{let t=b(e),o=e.agentIds.split(",").map(r=>r.trim());await t.addTicketFollowers({ticketId:e.ticketId,agentIds:o}),l({added:!0})}catch(t){m(t),process.exit(1)}}},Sy={command:"remove <ticketId>",describe:"Remove followers from a ticket",builder:e=>e.positional("ticketId",{type:"string",demandOption:!0,describe:"Ticket ID"}).option("agent-ids",{type:"string",demandOption:!0,describe:"Comma-separated agent IDs"}),handler:async e=>{try{let t=b(e),o=e.agentIds.split(",").map(r=>r.trim());await t.removeTicketFollowers({ticketId:e.ticketId,agentIds:o}),l({removed:!0})}catch(t){m(t),process.exit(1)}}},jc={command:"followers",describe:"Desk ticket follower operations",builder:e=>e.command(by).command(Fy).command(Sy).demandCommand(1),handler:F};var Cy={command:"timer <ticketId>",describe:"Get current timer state for a ticket",builder:e=>e.positional("ticketId",{type:"string",demandOption:!0,describe:"Ticket ID"}),handler:async e=>{try{let o=await b(e).getTicketTimer({ticketId:e.ticketId});l(o)}catch(t){m(t),process.exit(1)}}},Iy={command:"timer-action <ticketId>",describe:"Start, pause, resume, or stop a timer",builder:e=>e.positional("ticketId",{type:"string",demandOption:!0,describe:"Ticket ID"}).option("action",{type:"string",demandOption:!0,choices:["start","pause","resume","stop"],describe:"Timer action"}),handler:async e=>{try{let o=await b(e).performTicketTimerAction({ticketId:e.ticketId,timerAction:e.action});l(o)}catch(t){m(t),process.exit(1)}}},My={command:"entries <ticketId>",describe:"List time entries for a ticket",builder:e=>P(e).positional("ticketId",{type:"string",demandOption:!0,describe:"Ticket ID"}),handler:async e=>{try{let o=await b(e).getTicketTimeEntries({ticketId:e.ticketId,from:e.from,limit:e.limit});l(o.data,{from:e.from,limit:e.limit,count:o.data?.length})}catch(t){m(t),process.exit(1)}}},Oy={command:"summation <ticketId>",describe:"Get time entry summation for a ticket",builder:e=>e.positional("ticketId",{type:"string",demandOption:!0,describe:"Ticket ID"}),handler:async e=>{try{let o=await b(e).getTicketTimeEntrySummation({ticketId:e.ticketId});l(o)}catch(t){m(t),process.exit(1)}}},qc={command:"time",describe:"Desk time tracking operations",builder:e=>e.command(Cy).command(Iy).command(My).command(Oy).demandCommand(1),handler:F};var Ay={command:"list <ticketId>",describe:"List threads on a ticket",builder:e=>P(e).positional("ticketId",{type:"string",demandOption:!0,describe:"Ticket ID"}).option("include",{type:"string",describe:"Comma-separated includes"}),handler:async e=>{try{let o=await b(e).getTicketThreads({ticketId:e.ticketId,from:e.from,limit:e.limit,include:e.include});l(o.data,{from:e.from,limit:e.limit,count:o.data?.length})}catch(t){m(t),process.exit(1)}}},Py={command:"get <ticketId> <threadId>",describe:"Get a thread by ID",builder:e=>e.positional("ticketId",{type:"string",demandOption:!0,describe:"Ticket ID"}).positional("threadId",{type:"string",demandOption:!0,describe:"Thread ID"}).option("include",{type:"string",describe:"Comma-separated includes"}),handler:async e=>{try{let o=await b(e).getTicketThreadById({ticketId:e.ticketId,threadId:e.threadId,include:e.include});l(o)}catch(t){m(t),process.exit(1)}}},$c={command:"threads",describe:"Desk ticket thread operations",builder:e=>e.command(Ay).command(Py).demandCommand(1),handler:F};var Ey={command:"list <ticketId>",describe:"List activities on a ticket",builder:e=>P(e).positional("ticketId",{type:"string",demandOption:!0,describe:"Ticket ID"}),handler:async e=>{try{let o=await b(e).getTicketActivities({ticketId:e.ticketId,from:e.from,limit:e.limit});l(o.data,{from:e.from,limit:e.limit,count:o.data?.length})}catch(t){m(t),process.exit(1)}}},Hc={command:"activities",describe:"Desk ticket activity operations",builder:e=>e.command(Ey).demandCommand(1),handler:F};var zc={command:"desk",describe:"Zoho Desk operations",builder:e=>e.command(wc).command(Vc).command(Kc).command(Uc).command(Bc).command(Wc).command(Gc).command(jc).command(qc).command($c).command(Hc).demandCommand(1,"Please specify a desk subcommand.").example([["$0 desk tickets list --limit 10","List first 10 tickets"],["$0 desk tickets get 12345","Get a ticket by ID"],["$0 desk agents my-info","Get current agent info"],['$0 desk comments create 12345 --content "Looking into this"',"Add a comment"]]),handler:F};var Jc={command:"request <product> <method> <path>",describe:"Make a raw API request through the authenticated context",builder:e=>e.positional("product",{type:"string",demandOption:!0,choices:["recruit","crm","desk"],describe:"Zoho product"}).positional("method",{type:"string",demandOption:!0,choices:["GET","POST","PUT","PATCH","DELETE"],describe:"HTTP method"}).positional("path",{type:"string",demandOption:!0,describe:"API path (relative to product base URL)"}).option("body",{type:"string",describe:"JSON request body"}).option("query",{type:"string",describe:"JSON query parameters"}).example([["$0 request recruit GET /v2/Candidates","List candidates via raw API"],[`$0 request desk GET /tickets --query '{"limit":5}'`,"List 5 desk tickets via raw API"],[`$0 request crm POST /v8/Contacts --body '{"data":[{"Last_Name":"Test"}]}'`,"Create a CRM contact via raw API"]]),handler:async e=>{try{let t=e.product,o=e.method,r=e.path,n;switch(t){case"recruit":n=j(e).recruitContext;break;case"crm":n=q(e).crmContext;break;case"desk":n=b(e).deskContext;break;default:throw new Error(`Unknown product: ${t}`)}let a=r;if(e.query){let c=JSON.parse(e.query),p=new URLSearchParams(c),u=a.includes("?")?"&":"?";a=`${a}${u}${p.toString()}`}let i={method:o};e.body&&(i.body=e.body,i.headers={"Content-Type":"application/json"});let s=await n.fetchJson(a,i);l(s)}catch(t){m(t),process.exit(1)}}};var ky={command:"set",describe:"Configure output settings (global or per-command)",builder:e=>e.option("command",{alias:"c",type:"string",describe:"Command path to configure (e.g. desk.tickets.list)"}).check(t=>{if(!t.setDumpDir&&!t.setPick)throw new Error("At least one of --set-dump-dir or --set-pick is required");return!0}),handler:async e=>{try{let t=e.command,o=e.setDumpDir,r=e.setPick,n;if(t){let i={...o!==void 0?{dumpDir:o}:{},...r!==void 0?{pick:r}:{}};n={commands:{[t]:i}}}else n={...o!==void 0?{dumpDir:o}:{},...r!==void 0?{pick:r}:{}};let a=await U({output:n});l({saved:!0,output:a.output})}catch(t){m(t),process.exit(1)}}},Zy={command:"show",describe:"Show current output configuration",builder:e=>e,handler:async()=>{try{let e=await w();l({output:e?.output??{}})}catch(e){m(e),process.exit(1)}}},Dy={command:"clear",describe:"Clear output configuration (global or per-command)",builder:e=>e.option("command",{alias:"c",type:"string",describe:"Command path to clear (omit to clear all output config)"}),handler:async e=>{try{let t=e.command;if(t){let o=await w(),r={...o?.output?.commands};delete r[t];let n={...o?.output,commands:r};await U({output:n}),l({cleared:!0,command:t})}else await tn(),l({cleared:!0})}catch(t){m(t),process.exit(1)}}},Yc={command:"output",describe:"Configure output settings (dump, field filtering)",builder:e=>e.command(ky).command(Zy).command(Dy).demandCommand(1),handler:F};var Ny=[Nc,_c,zc,Jc],Xc=[Dc,Yc,Lc];function _y(e){return e.command.split(" ")[0]}var Yr=new Set(Xc.map(_y));function wy(){return async e=>{let t=e._?e._.map(String):[],o=t[0],r=e.setDumpDir,n=e.setPick;if((r!==void 0||n!==void 0)&&o&&!Yr.has(o)){let p=t.join("."),u={...r!==void 0?{dumpDir:r}:{},...n!==void 0?{pick:n}:{}};await U({output:{commands:{[p]:u}}})}let i=o&&!Yr.has(o),s=await w(),c=i?en(s?.output,t,{dumpDir:e.dumpDir??r,pick:e.pick??n}):{dumpDir:void 0,pick:void 0};Ec({dumpDir:c.dumpDir,pick:e.pickAll?void 0:c.pick,commandPath:t})}}async function Vy(){try{await Ly(vy(process.argv)).scriptName("zoho-cli").usage("$0 <command> [options]").option("verbose",{alias:"v",type:"boolean",default:!1,global:!0,describe:"Verbose output"}).option("dump-dir",{type:"string",global:!0,describe:"Directory to save full API responses as JSON files (overrides config)"}).option("pick",{type:"string",global:!0,describe:"Comma-separated top-level fields to include in output (overrides config)"}).option("set-dump-dir",{type:"string",global:!0,describe:"Save dump directory to config for this command and apply now"}).option("set-pick",{type:"string",global:!0,describe:"Save pick fields to config for this command and apply now"}).option("pick-all",{type:"boolean",global:!0,describe:"Ignore any configured pick filters and return full response data"}).middleware([vc(Yr),wy()],!0).command(Xc).command(Ny).demandCommand(1,"Please specify a command. Use --help for available commands.").strict().fail(!1).help().alias("help","h").version(!1).wrap(Math.min(120,process.stdout.columns||80)).parse()}catch(e){m(e),process.exit(1)}}Vy();
@@ -0,0 +1,20 @@
1
+ {
2
+ "name": "@dereekb/zoho/cli",
3
+ "version": "13.9.0",
4
+ "type": "module",
5
+ "bin": {
6
+ "zoho-cli": "./index.js"
7
+ },
8
+ "peerDependencies": {
9
+ "@dereekb/nestjs": "13.9.0",
10
+ "@dereekb/rxjs": "13.9.0",
11
+ "@dereekb/util": "13.9.0",
12
+ "@dereekb/zoho": "13.9.0",
13
+ "@dereekb/zoho/nestjs": "13.9.0",
14
+ "yargs": "^18.0.0"
15
+ },
16
+ "devDependencies": {
17
+ "@types/yargs": "^17.0.35",
18
+ "date-fns": "^4.0.0"
19
+ }
20
+ }