@controldealquiler/sdk 1.2.0 → 1.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -148,7 +148,7 @@ try {
148
148
 
149
149
  Crear clientes exige que tu API key tenga una clave de integración, y en el SDK también la necesitan la pasada de entrega (`mantenimiento.ejecutar`) y editar el nombre o la dirección. Se fija para cada key (cada key nueva necesita la suya), pero lo que abre es de toda tu agencia: quien tenga la clave privada de integración y el sobre puede abrir todo lo que controldealquiler.com entrega sellado a tu agencia, como dicen las [Condiciones de la API](https://controldealquiler.com/condiciones-api) (punto 8).
150
150
 
151
- 1. Genera el par con `npx controldealquiler clave-integracion`. La privada queda en `clave-integracion.pem` (modo 0600, sin cifrar) y la pública sale por pantalla. Guárdala en un gestor de secretos, en una variable de entorno de la infraestructura en que se ejecuta tu integración o en un fichero en un servidor bajo tu control, con el acceso limitado a quien la necesita, como piden las Condiciones de la API (punto 8). Si la pasas a un gestor de secretos o a una variable de entorno, borra el fichero cuando compruebes que funciona.
151
+ 1. Genera el par con `npx -p @controldealquiler/sdk controldealquiler clave-integracion`. La privada queda en `clave-integracion.pem` (modo 0600, sin cifrar) y la pública sale por pantalla. Guárdala en un gestor de secretos, en una variable de entorno de la infraestructura en que se ejecuta tu integración o en un fichero en un servidor bajo tu control, con el acceso limitado a quien la necesita, como piden las Condiciones de la API (punto 8). Si la pasas a un gestor de secretos o a una variable de entorno, borra el fichero cuando compruebes que funciona.
152
152
  2. Pega la pública así: en el panel de tu agencia, pulsa «Remitentes autorizados» y, en el diálogo, ve al apartado «Clave de integración»: elige la API key, pega la clave pública y pulsa «Fijar la clave», con la caja fuerte desbloqueada. Tu navegador sella la clave privada de tu agencia para esa clave pública; a nuestro servidor llegan la pública y el sobre cerrado. Se fija una sola vez por API key; para cambiarla, crea otra key y, cuando funcione, revoca la anterior, que mientras siga activa puede bajar su sobre. Si crees que la privada se ha expuesto, revoca la key enseguida (condiciones de la API, punto 8).
153
153
  3. Baja el sobre con `GET /v1/integracion` y guarda el campo `sobre` de la respuesta como un fichero JSON.
154
154
  4. Configura `CDA_CLAVE_INTEGRACION` (ruta a la privada) o, si la guardas en un gestor de secretos o en una variable de entorno, `CDA_CLAVE_INTEGRACION_PEM` (el contenido del PEM; si están las dos, gana esta), y `CDA_SOBRE_INTEGRACION` (ruta al JSON del sobre), como en la tabla de abajo. En código, `descifradorDeClave({ pem, ruta })` lee la privada de la opción `pem`, de `CDA_CLAVE_INTEGRACION_PEM` o del fichero, por ese orden.
@@ -158,10 +158,10 @@ Sin ella, abrir un alta (`POST /v1/borradores`) y bajar el sobre (`GET /v1/integ
158
158
  ## Línea de comandos
159
159
 
160
160
  ```sh
161
- npx controldealquiler clave-integracion # genera el par de claves de la integración
162
- npx controldealquiler alta manifiesto.json # da de alta uno o varios clientes (un objeto o un array)
163
- npx controldealquiler mantenimiento # una pasada de entrega
164
- npx controldealquiler lector fichero.pdf # lee un fichero en local y escribe el resultado estructurado
161
+ npx -p @controldealquiler/sdk controldealquiler clave-integracion # genera el par de claves de la integración
162
+ npx -p @controldealquiler/sdk controldealquiler alta manifiesto.json # da de alta uno o varios clientes (un objeto o un array)
163
+ npx -p @controldealquiler/sdk controldealquiler mantenimiento # una pasada de entrega
164
+ npx -p @controldealquiler/sdk controldealquiler lector fichero.pdf # lee un fichero en local y escribe el resultado estructurado
165
165
  ```
166
166
 
167
167
  `alta` acepta un manifiesto que sea un objeto (un cliente) o un array (varios). Cada cliente lee sus ficheros justo antes de su alta;
@@ -187,6 +187,10 @@ Se configura por entorno:
187
187
 
188
188
  `controldealquiler` sin argumentos muestra la ayuda de cada comando.
189
189
 
190
+ ## Cambios en 1.2.1
191
+
192
+ - Incluye los tipos de TypeScript (`dist/index.d.ts`) y los metadatos del paquete.
193
+
190
194
  ## Cambios en 1.2.0
191
195
 
192
196
  - `clientes.crear` lanza `ErrorAlta` (sigue siendo un `ErrorApiSdk`, así que `instanceof ErrorApiSdk`, `status` y `code` funcionan como antes) con el paso, la vivienda, el fichero y si se creó algo.
package/dist/cli.js CHANGED
@@ -184,7 +184,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
184
184
  `),n=t.map(hW),i=n.reduce((l,c)=>l+c,0),r=Math.min(5,t.length),a=n.slice(0,r).reduce((l,c)=>l+c,0),s=t.length>0&&i/t.length>=XO&&a/r>=XO,o=s?n.flatMap((l,c)=>l<cW?[c+1]:[]):[];return{text:e,usable:s,emptyPages:o}}var JO="Europe/Madrid",pW=new Intl.DateTimeFormat("en-US",{timeZone:JO,year:"numeric",month:"2-digit",day:"2-digit"}),zte=new Intl.DateTimeFormat("en-US",{timeZone:JO,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",hourCycle:"h23"});function mW(t,e){let n={};for(let i of t.formatToParts(e))i.type!=="literal"&&(n[i.type]=Number(i.value));return n}function yS(t=new Date){let{year:e,month:n,day:i}=mW(pW,t);return`${e}-${String(n).padStart(2,"0")}-${String(i).padStart(2,"0")}`}function U1(t,e){let n=Number(e.slice(0,4));return t.anios.includes(n)?e.slice(0,4)===t.hastaMes.slice(0,4)?e.slice(0,7)<=t.hastaMes:!0:!1}function eP(t,e,n){if(!t||n==null||n.trim()==="")return!1;let i=Object.prototype.hasOwnProperty.call(e,t.parser)?e[t.parser]:void 0;if(!i)return!1;try{let r=i.leer(n);return r.ok&&r.tipo==="resumen"}catch{return!1}}var xW=[{code:"EUR",label:"Euro",symbol:"\u20AC",decimal:","},{code:"USD",label:"D\xF3lar estadounidense",symbol:"$",decimal:"."},{code:"JPY",label:"Yen japon\xE9s",symbol:"\xA5",decimal:"."},{code:"BGN",label:"Lev b\xFAlgaro",symbol:"\u043B\u0432",decimal:","},{code:"CZK",label:"Corona checa",symbol:"K\u010D",decimal:","},{code:"DKK",label:"Corona danesa",symbol:"kr",decimal:","},{code:"GBP",label:"Libra esterlina",symbol:"\xA3",decimal:"."},{code:"HUF",label:"Forinto h\xFAngaro",symbol:"Ft",decimal:","},{code:"PLN",label:"Esloti polaco",symbol:"z\u0142",decimal:","},{code:"RON",label:"Leu rumano",symbol:"lei",decimal:","},{code:"SEK",label:"Corona sueca",symbol:"kr",decimal:","},{code:"CHF",label:"Franco suizo",symbol:"CHF",decimal:"."},{code:"ISK",label:"Corona islandesa",symbol:"kr",decimal:","},{code:"NOK",label:"Corona noruega",symbol:"kr",decimal:","},{code:"TRY",label:"Lira turca",symbol:"\u20BA",decimal:","},{code:"AUD",label:"D\xF3lar australiano",symbol:"A$",decimal:"."},{code:"BRL",label:"Real brasile\xF1o",symbol:"R$",decimal:","},{code:"CAD",label:"D\xF3lar canadiense",symbol:"C$",decimal:"."},{code:"CNY",label:"Yuan chino",symbol:"\xA5",decimal:"."},{code:"HKD",label:"D\xF3lar de Hong Kong",symbol:"HK$",decimal:"."},{code:"IDR",label:"Rupia indonesia",symbol:"Rp",decimal:","},{code:"ILS",label:"S\xE9quel israel\xED",symbol:"\u20AA",decimal:"."},{code:"INR",label:"Rupia india",symbol:"\u20B9",decimal:"."},{code:"KRW",label:"Won surcoreano",symbol:"\u20A9",decimal:"."},{code:"MXN",label:"Peso mexicano",symbol:"MX$",decimal:"."},{code:"MYR",label:"Ringgit malasio",symbol:"RM",decimal:"."},{code:"NZD",label:"D\xF3lar neozeland\xE9s",symbol:"NZ$",decimal:"."},{code:"PHP",label:"Peso filipino",symbol:"\u20B1",decimal:"."},{code:"SGD",label:"D\xF3lar de Singapur",symbol:"S$",decimal:"."},{code:"THB",label:"Bat tailand\xE9s",symbol:"\u0E3F",decimal:"."},{code:"ZAR",label:"Rand sudafricano",symbol:"R",decimal:","}],hne=new Map(xW.map(t=>[t.code,t]));var Dne=512*1024;async function tP(t){let n=(await WO()).getDocument({data:new Uint8Array(t),verbosity:0});try{let i=await n.promise,r=[];for(let o=1;o<=i.numPages;o++){let l=await(await i.getPage(o)).getTextContent();r.push(YO(l.items))}let{text:a,usable:s}=ZO(r);return s?a:null}finally{n.destroy().catch(()=>{})}}var vW=1e4;async function H1(t,e,n={}){if(e!=="application/pdf")return null;let i=n.extraer??tP,r;try{return await Promise.race([i(t).catch(()=>null),new Promise(a=>{r=setTimeout(()=>a(null),n.timeoutMs??vW)})])}finally{r&&clearTimeout(r)}}var V1={ok:!1,motivo:"acta_ilegible"};function kS(t){return t.toUpperCase().replace(/[\s\-.]/g,"")}function yW(t){let e=/^(\d{2})\/(\d{2})\/(\d{4})$/.exec(t);if(!e)return null;let n=Number(e[1]),i=Number(e[2]),r=Number(e[3]),a=new Date(Date.UTC(r,i-1,n));return a.getUTCFullYear()!==r||a.getUTCMonth()!==i-1||a.getUTCDate()!==n?null:`${e[3]}-${e[2]}-${e[1]}`}var G1=String.raw`(\d{2}\/\d{2}\/\d{4})`,kW=new RegExp(String.raw`Que,\s*en fecha\s+${G1}`),jW=new RegExp(String.raw`con una fecha de inicio en\s+${G1}`),AW=new RegExp(String.raw`Que en el d[ií]a\s+${G1}\s+el inquilino hace entrega de las llaves`),SW=new RegExp(String.raw`fecha de salida del inquilino\s*\(\s*${G1}\s*\)`),IW=/de la vivienda\s+(?:\S+\s+){1,3}?en\s+(.+?)\s*\.\s+\d+\.\s*Que en el d[ií]a/,Wc=t=>t.replace(/\s+/g," ").trim(),nP=t=>Wc(t).normalize("NFD").replace(/[̀-ͯ]/g,"").toLowerCase();function rP(t){return t.split(`
185
185
  `).map(e=>e.replace(/\s+/g," ").trim())}function CW(t){let e=t.findIndex(r=>/^De otra,/.test(r));if(e===-1)return[];let n=t.findIndex((r,a)=>a>e&&/^INTERVIENEN\b/.test(r));n===-1&&(n=t.length);let i=[];for(let r=e+1;r<n;r++){let a=/Nombre\s*:\s*(.*)$/.exec(t[r]);if(!a||Wc(a[1])==="")continue;let s=/DNI\s*:\s*(.*)$/.exec(t[r+1]??""),o=s&&s[1].trim()!==""?kS(s[1]):null;i.push({nombre:Wc(a[1]),dni:o})}return i}function EW(t){let e=t.findIndex(i=>/^Firmas\b/.test(i));if(e===-1)return[];let n=[];for(let i=e+1;i<t.length;i++){if(!/^Inquilino\s*\d*\s*:?$/.test(t[i]))continue;let r=/^Nombre\s*:\s*(.*)$/.exec(t[i+1]??"");r&&Wc(r[1])!==""&&n.push(Wc(r[1]))}return n}var TW={prefiltro(t){let e=uo(t),n=`${e.creator??""} ${e.producer??""}`;return/wkhtmltopdf|ilovepdf|\bQt\b/i.test(n)?!1:e.titleCoincide(/^acta_entrega/i)?!0:/tecalis/i.test(e.creator??"")&&/google docs renderer/i.test(e.producer??"")},reconoce(t){let e=rP(t);return e.some(n=>/^ACTA DE ENTREGA VIVIENDA$/.test(n))&&e.some(n=>/^REUNIDOS$/.test(n))},leer(t){let e=t.replace(/\s+/g," "),n=h=>{let p=h.exec(e);return p?yW(p[1]):null},i=n(kW),r=n(jW),a=n(AW),s=n(SW);if(!i||!r||!a||!s||a!==s)return V1;let o=IW.exec(e),l=o?Wc(o[1]):"";if(l==="")return V1;let c=rP(t),f=CW(c),u=EW(c),d;if(u.length>0){let h=new Map(f.map(p=>[nP(p.nombre),p.dni]));d=u.map(p=>({nombre:p,dni:h.get(nP(p))??null}))}else d=f;return d.length===0?V1:{ok:!0,acta:{fechaFirma:i,fechaInicio:r,fechaLlaves:a,fechaSalida:s,inquilinos:d,direccion:l}}}},jS=Object.freeze({wolo:TW});function _W(t,e){if(e==null||e.trim()==="")return null;for(let n of Object.keys(t)){if(!Object.prototype.hasOwnProperty.call(t,n))continue;let i=t[n];try{if(i.reconoce(e))return{parser:n,lector:i}}catch{}}return null}var iP=t=>_W(jS,t);var X1=t=>t.normalize("NFD").replace(/[̀-ͯ]/g,""),cP=/^(los inquilinos|el inquilino),?$/i,fP=/^(los avalistas|el avalista),?$/i,qW=/^(los inquilinos|el inquilino|inquilinos|inquilino),?$/i,RW=/^(el|la|los|las) (propietari[oa]s?|arrendador(?:es|a)?|arrendadoras|fiador(?:es|a)?|fiadoras|avalistas?)\b/i,uP=t=>RW.test(X1(t)),OW=/^(los avalistas|el avalista|avalistas|avalista),?$/i;function dP(t){return t.split(`
186
186
  `).map(e=>e.replace(/\s+/g," ").trim())}var AS={prefiltro(t){let e=uo(t),n=`${e.creator??""} ${e.producer??""}`;return/tecalis|cairo/i.test(n)},reconoce(t){return!/WOLO REALTECH/.test(t)||!/contrato\s+de\s+arrendamiento/i.test(t)||!dP(t).some(e=>cP.test(e))?!1:!Object.values(jS).some(e=>e.reconoce(t))}},PW=Object.freeze({wolo:AS,guay:_p});function DW(t,e){if(e==null||e.trim()==="")return null;for(let n of Object.keys(t))if(Object.prototype.hasOwnProperty.call(t,n))try{if(t[n].reconoce(e))return n}catch{}return null}var hP=t=>DW(PW,t);var $n=t=>({ok:!1,motivo:t}),pP={enero:1,febrero:2,marzo:3,abril:4,mayo:5,junio:6,julio:7,agosto:8,septiembre:9,octubre:10,noviembre:11,diciembre:12},NW=Object.keys(pP).join("|"),mP=String.raw`(\d{1,2})\s+de\s+(${NW})\s+de\s+(\d{4})`;function gP(t,e,n){let i=new Date(Date.UTC(n,e-1,t));return i.getUTCFullYear()!==n||i.getUTCMonth()!==e-1||i.getUTCDate()!==t?null:`${String(n).padStart(4,"0")}-${String(e).padStart(2,"0")}-${String(t).padStart(2,"0")}`}function aP(t){let e=pP[X1(t[2].toLowerCase())];return e===void 0?null:gP(Number(t[1]),e,Number(t[3]))}var MW=new RegExp(String.raw`^En\s+[^,]+,\s*a\s+${mP}\.?$`,"i"),FW=/^Tecalis\b.*\b(?:Fecha|Date):\s*(\d{4})\//i,$W=/^---\s*p[aá]gina\s+\d+\s*---$/i,K1=/^-\s*\|\s*(.*)$/,cd=/^\d+\s*[aª]\.\s/i,Y1=t=>t.replace(/\s+/g," ").trim(),sP=t=>X1(Y1(t)).toLowerCase();function ia(t,e){let n=K1.exec(t);if(!n)return null;let i=new RegExp(String.raw`^${e}\s*:\s*(.*)$`,"i").exec(n[1]);return i?i[1].trim():null}var LW={un:1,una:1,uno:1,dos:2,tres:3,cuatro:4,cinco:5,seis:6,siete:7,ocho:8,nueve:9,diez:10,once:11,doce:12},W1=t=>!K1.test(t)&&/de la vivienda$/i.test(t);function BW(t,e){let n=t.length;for(let r=e+1;r<t.length;r++){let a=t[r];if(fP.test(a)||uP(a)||W1(a)||/^1\.\s*INTERVIENEN\b/i.test(a)){n=r;break}}let i=[];for(let r=e+1;r<n;r++){let a=ia(t[r],"Nombre");if(a===null){let s=ia(t[r],"DNI"),o=i[i.length-1];s!==null&&o&&o.nif===null&&s!==""&&(o.nif=s);continue}i.push({name:Y1(a),nif:null,phone:null,email:null})}return i.filter(r=>r.name!=="")}function zW(t,e){let n=[];for(let i=e+1;i<t.length;i++){let r=t[i];if(OW.test(r)||/^(el |los )?propietarios?,?$/i.test(r)||uP(r)||cd.test(r))break;let a=ia(r,"Nombre");if(a!==null){n.push({name:Y1(a),phone:null,email:null});continue}let s=n[n.length-1];if(!s)continue;let o=ia(r,"Tel[e\xE9]fono");o!==null&&o!==""&&(s.phone=o);let l=ia(r,"E-?mail");l!==null&&l!==""&&(s.email=l)}return n}function oP(t,e){let n=t.findIndex(r=>cd.test(r)&&e.test(r));if(n===-1)return null;let i=t.length;for(let r=n+1;r<t.length;r++)if(cd.test(t[r])){i=r;break}return t.slice(n,i).join(" ")}function UW(t){let e=t.findIndex(i=>/^(\d+\.\s*)?ESTIPULACIONES\b/i.test(i));if(e===-1)return null;let n=t.length;for(let i=e+1;i<t.length;i++)if(cd.test(t[i])){n=i;break}return t.slice(e+1,n).join(" ")}function HW(t){let e=new Map;for(let n of t.matchAll(/duraci[oó]n\s+de\s+(\d+|[a-zñ]+)\s+(a[nñ]os?|mes(?:es)?)\b/gi)){let i=X1(n[1].toLowerCase()),r=/^\d+$/.test(i)?Number(i):LW[i];if(r===void 0||r<1)return null;let a=/^a/i.test(n[2])?"anios":"meses";e.set(`${r}-${a}`,{n:r,unidad:a})}return e.size!==1?null:[...e.values()][0]}function VW(t,e){let[n,i,r]=t.split("-").map(Number),a=i-1+(e.unidad==="anios"?e.n*12:e.n),s=n+Math.floor(a/12),o=a%12+1;return gP(r,o,s)}function GW(t){let e=[];for(let n of t.matchAll(/(?<![\d.,])(?<!\d\s)(\d{1,3}(?:\.\d{3})+|\d+)(?:,(\d{1,2}))?(?!\d)\s*(?:€|euros?\b)/gi)){let i=+`${n[1].replace(/\./g,"")}.${n[2]??"0"}`,r=t.slice(0,n.index),a=r.lastIndexOf(". "),s=r.slice(a===-1?0:a+2).slice(-40),o=t.slice((n.index??0)+n[0].length),l=o.search(/\.\s|\.$/),c=(l===-1?o:o.slice(0,l)).slice(0,40);e.push({valor:i,contexto:`${s} ${c}`})}return e}function WW(t){let e=dP(t),n=new Set,i=[],r=[];for(let P of e){if(P==="")continue;let F=MW.exec(P);if(F){let se=aP(F);if(se===null)return $n("fecha_inexistente");n.add(se);continue}if(/^Tecalis\b/i.test(P)){let se=FW.exec(P);if(!se)return $n("sello_otro_anio");i.push(Number(se[1]));continue}$W.test(P)||r.push(P)}if(n.size===0)return $n("firma_no_consta");if(n.size>1)return $n("firma_incoherente");let a=[...n][0];if(i.some(P=>P!==Number(a.slice(0,4))))return $n("sello_otro_anio");let s=[];r.forEach((P,F)=>{cP.test(P)&&s.push(F)});let o=s[0];if(o===void 0)return $n("sin_inquilinos");let l=BW(r,o);if(l.length===0)return $n("sin_inquilinos");let c=[];r.some(P=>fP.test(P))&&c.push("avalistas_excluidos"),l.length>4&&c.push("mas_de_4_inquilinos");let f=r.findIndex((P,F)=>F>o&&qW.test(P)),u=f===-1?[]:zW(r,f),d=new Set;for(let P of l){let F=u.findIndex((se,Z)=>!d.has(Z)&&sP(se.name)===sP(P.name));F!==-1&&(d.add(F),P.phone=u[F].phone,P.email=u[F].email)}let h=u.filter((P,F)=>!d.has(F)&&(P.phone!==null||P.email!==null));if(h.length>0){let P=l.length===1?l[0]:null;if(P)for(let F of h)P.phone===null&&(P.phone=F.phone),P.email===null&&(P.email=F.email);else c.push("telefono_sin_atribuir")}let p=oP(r,/Duraci[oó]n del contrato/i)??UW(r);if(p===null)return $n("sin_duracion");let m=new Set;for(let P of p.matchAll(new RegExp(String.raw`fecha de inicio[^.]{0,80}?\bel\s+${mP}`,"gi")))m.add(aP(P));if(m.size===0||m.size>1)return $n("sin_inicio");let g=[...m][0]??null;if(g===null)return $n("fecha_inexistente");let b=HW(p);if(b===null)return $n("sin_duracion");let x=VW(g,b);if(x===null)return $n("fin_no_calculable");c.push("fin_calculado_por_duracion");let w=oP(r,/\bRenta\b/i);if(w===null)return $n("sin_renta");let k=GW(w);if(k.length===0)return $n("sin_renta");if(new Set(k.map(P=>P.valor)).size>1)return $n("renta_ambigua");let v=k.map(P=>P.contexto).join(" ");if(/anual|al a[nñ]o|por a[nñ]o|\/\s*a[nñ]o/i.test(v))return $n("renta_no_mensual");let y=P=>{let F=[ia(r[P],"Direcci[o\xF3]n")];for(let se=P+1;se<r.length&&F.length<3;se++){let Z=r[se];if(K1.test(Z)||cd.test(Z)||/^1\.\s/.test(Z))break;F.push(Z)}return Y1(F.join(" "))},A=P=>P>0&&W1(r[P-1])?y(P):null,I=null,S=r.findIndex(P=>ia(P,"Referencia Catastral")!==null);if(S!==-1)for(let P=S-1;P>=0;P--){let F=r[P];if(W1(F))break;if(K1.test(F)){ia(F,"Direcci[o\xF3]n")!==null&&(I=A(P));break}}else{let P=r.findIndex(F=>W1(F));P!==-1&&ia(r[P+1]??"","Direcci[o\xF3]n")!==null&&(I=y(P+1))}let C=[];for(let P of r){let F=ia(P,"Referencia Catastral");F!==null&&F!==""&&C.push(F)}let E=P=>P.replace(/[\s-]/g,"").toUpperCase(),_=[...new Set(C.map(E))],T=S!==-1?ia(r[S],"Referencia Catastral"):null,O=null;T!==null&&T!==""&&(_.length===1||_.length>1&&I!==null)&&(O=T);let L={tenants:l.map(P=>({name:P.name,nif:P.nif,phone:P.phone,email:P.email})),contract_date:a,start_date:g,end_date:x,monthly_rent:k[0].valor,confidence:null,warning_codes:c,cadastral_refs:C,property_address:I},G={...Cp(JSON.stringify(L)),cadastral_ref_vivienda:ou([O])[0]??null};return G.tenants.length===0?$n("sin_inquilinos"):{ok:!0,contrato:G}}var KW={prefiltro:t=>AS.prefiltro(t),reconoce:t=>AS.reconoce(t),leer:WW},lP=Object.freeze({wolo:KW,guay:d_});function bP(t){try{if(t==null||t.trim()==="")return $n("contrato_no_reconocido");for(let e of Object.keys(lP)){let n=lP[e];if(n.reconoce(t))return n.leer(t)}return $n("contrato_no_reconocido")}catch{return $n("error_interno")}}var XW="wolo-contrato@1";var ji=(t,e=!1)=>({ok:!1,motivo:t,transitorio:e}),YW=t=>[t.tipo,t.categoria,Math.round(t.importe*100),t.fecha,t.devengo].join("|");async function SS(t){try{let e=await t.texto(t.buf,t.mime);return e==null||e.trim()===""?ji("sin_texto",!0):t.caja==="contract"?ZW(e):JW(t,e)}catch{return ji(t.caja==="contract"?"error_interno":"lector_fallo")}}function ZW(t){let e=bP(t);if(!e.ok)return ji(e.motivo);let n=e.contrato;return{ok:!0,tipo:"contrato",contrato:n,huella:{inicio:n.start_date,fin:n.end_date,firma:n.contract_date,renta:n.monthly_rent,nInquilinos:n.tenants.length,parser:hP(t)??"wolo",version:XW},direccion:n.property_address}}function JW(t,e){if(!t.lector)return ji("lector_fallo");let n=t.lector.parser,i=Object.prototype.hasOwnProperty.call(t.lectores,n)?t.lectores[n]:void 0;if(!i||i.reconoce(e)===null)return ji("lector_fallo");if(eP(t.lector,t.lectores,e))return ji("resumen_anual");let r=i.leer(e);if(!r.ok)return ji("lector_fallo");if(r.tipo==="resumen")return ji("resumen_anual");if(r.filas.length===0)return ji("lector_fallo");let a=new Set(t.lector.conceptos);if(r.conceptos.some(d=>!a.has(d)))return ji("concepto_no_certificado");let s=X2(r,null);if(s.length!==r.filas.length)return ji("lector_fallo");let o=r.filas.map((d,h)=>({tipo:d.tipo,categoria:d.category_code,importe:d.importe,fecha:d.fecha,devengo:s[h].date,periodo_desde:d.periodo_desde,periodo_hasta:d.periodo_hasta,pagina:r.detalle[h]?.pagina??null})),l=r.detalle.map(d=>typeof d?.rotulo=="string"?d.rotulo.slice(0,200):""),c=o.filter(d=>U1(t.ventana,d.devengo)),f=o.flatMap((d,h)=>U1(t.ventana,d.devengo)?[l[h]??""]:[]);if(c.length===0)return ji("fuera_de_ventana");let u=null;try{u=i.direccion(e)}catch{u=null}return{ok:!0,tipo:"movimiento",filas:c,huella:c.map(YW).sort(),parser:n,version:t.versiones[n]??n,direccion:u,conceptos:[...r.conceptos],aRevision:r.aRevision,emision:r.emision??null,filasFuera:o.length-c.length,rotulos:f}}var xP=["alias","address_street","address_postal","cadastral_ref"],wP=["full_name","nif","contact_phone"];var IS=2,CS=1,Kc=40,aa={contract:5,tenant_id:8,other:20,acta:1,movimientos:Kc},J1=5,Q1=10,vP=["contract","tenant_id","other","movimientos"],Z1={nombre:200,nif:20,telefono:30,email:254},yP=t=>Math.abs(Math.round(t*100)-t*100)<1e-6;function eK(t){let[e,n,i]=t.split("-").map(Number),r=new Date(Date.UTC(e,n-1,i));return r.getUTCFullYear()===e&&r.getUTCMonth()===n-1&&r.getUTCDate()===i}var nl=me.string().regex(/^\d{4}-\d{2}-\d{2}$/).refine(eK,"fecha imposible"),kP=me.object({nombre:me.string().trim().min(1).max(Z1.nombre),nif:me.string().trim().min(1).max(Z1.nif).optional(),email:me.string().trim().email().max(Z1.email).optional(),telefono:me.string().trim().min(1).max(Z1.telefono).optional()}).strict(),jP=me.number().positive().max(1e5).refine(yP,"como mucho 2 decimales"),ns=me.string().uuid(),AP=me.number().gt(0).max(100).refine(yP,"como mucho 2 decimales").optional(),tK=me.object({inicio:nl,fin:nl,fecha_firma:nl.optional(),renta_mensual:jP,inquilinos:me.array(kP).min(1).max(4)}).strict(),nK=me.object({v:me.literal(CS),contrato:tK.optional(),porcentaje_titularidad:AP,ficheros:me.object({contract:me.array(ns).max(aa.contract),tenant_id:me.array(ns).max(aa.tenant_id),other:me.array(ns).max(aa.other),movimientos:me.array(ns).max(aa.movimientos)}).strict()}).strict(),rK=me.object({inicio:nl,fin_pactado:nl,fin_real:nl.optional(),fecha_firma:nl.optional(),renta_mensual:jP,inquilinos:me.array(kP).min(1).max(4),ficheros:me.object({contract:me.array(ns).max(aa.contract),tenant_id:me.array(ns).max(aa.tenant_id),other:me.array(ns).max(aa.other),acta:me.array(ns).max(J1)}).strict()}).strict(),iK=me.object({v:me.literal(IS),porcentaje_titularidad:AP,contratos:me.array(rK).min(1),ficheros:me.object({movimientos:me.array(ns).max(aa.movimientos)}).strict()}).strict(),Xc=me.union([nK,iK]);function fd(t){if(t.v===2)return{v:2,porcentaje:t.porcentaje_titularidad??null,movimientos:[...t.ficheros.movimientos],contratos:t.contratos.map(n=>({inicio:n.inicio,finPactado:n.fin_pactado,finReal:n.fin_real??null,fechaFirma:n.fecha_firma??null,rentaMensual:n.renta_mensual,inquilinos:n.inquilinos,ficheros:{contract:[...n.ficheros.contract],tenant_id:[...n.ficheros.tenant_id],other:[...n.ficheros.other],acta:[...n.ficheros.acta]}}))};let e=t.contrato;return{v:1,porcentaje:t.porcentaje_titularidad??null,movimientos:[...t.ficheros.movimientos],contratos:e?[{inicio:e.inicio,finPactado:e.fin,finReal:null,fechaFirma:e.fecha_firma??null,rentaMensual:e.renta_mensual,inquilinos:e.inquilinos,ficheros:{contract:[...t.ficheros.contract],tenant_id:[...t.ficheros.tenant_id],other:[...t.ficheros.other],acta:[]}}]:[]}}function aK(t){return t.v!==1||t.contrato?{contract:[],tenant_id:[],other:[]}:{contract:[...t.ficheros.contract],tenant_id:[...t.ficheros.tenant_id],other:[...t.ficheros.other]}}function sK(t){let e=aK(t);return[...e.contract,...e.tenant_id,...e.other]}function ud(t){let e=fd(t);return[...e.contratos.flatMap(n=>[...n.ficheros.contract,...n.ficheros.tenant_id,...n.ficheros.other,...n.ficheros.acta]),...sK(t),...e.movimientos]}var rl=me.string().regex(/^\d{4}-\d{2}-\d{2}$/),oK=me.object({tipo:me.enum(["income","expense"]),categoria:me.string().min(1).max(40),importe:me.number(),fecha:rl,devengo:rl,periodo_desde:rl.nullable().optional(),periodo_hasta:rl.nullable().optional(),pagina:me.number().int().min(1).nullable().optional(),rotulo:me.string().max(200).optional()}).strict(),lK=me.discriminatedUnion("tipo",[me.object({tipo:me.literal("contrato"),huella:me.object({inicio:rl.nullable(),fin:rl.nullable(),firma:rl.nullable(),renta:me.number().nullable(),nInquilinos:me.number().int().min(0),parser:me.string().max(40),version:me.string().max(40)}).strict().nullable()}).strict(),me.object({tipo:me.literal("movimiento"),filas:me.array(oK).max(2e3),origen:me.literal("ia").optional()}).strict()]),cK=me.object({documentos:me.record(me.string().uuid(),lK),perdidos:me.array(me.string().uuid()).max(100).optional()}).strict(),dd=me.object({v:me.literal(1),paquete:Xc,alta:cK}).strict();function hd(t){let e=dd.safeParse(t);if(e.success){let o=hd(e.data.paquete);return o.ok?{ok:!0,paquete:o.paquete,alta:e.data.alta}:o}let n=Xc.safeParse(t);if(!n.success)return{ok:!1,error:"esquema",detalle:n.error.issues[0]?.path.join(".")};let i=n.data,r=fd(i);for(let o of r.contratos){if(o.finPactado<=o.inicio)return{ok:!1,error:"fin_antes_de_inicio"};if(o.finReal!==null&&o.finReal<o.inicio)return{ok:!1,error:"fin_antes_de_inicio"};if(o.fechaFirma&&o.fechaFirma>o.finPactado)return{ok:!1,error:"firma_despues_de_fin"}}let a=new Set,s=ud(i);for(let o of s){if(a.has(o))return{ok:!1,error:"fichero_repetido",detalle:o};a.add(o)}return{ok:!0,paquete:i}}var fK=Q1;var uK=me.string().email();function ES(t){let e=t.replace(/[\s€]/g,"");if(!e)return null;let n;if(e.includes(",")){if(!/^\d{1,3}(\.\d{3})*,\d+$|^\d+,\d+$/.test(e))return null;n=e.replace(/\./g,"").replace(",",".")}else if(/^\d{1,3}(\.\d{3})+$/.test(e))n=e.replace(/\./g,"");else if(/^\d+(\.\d+)?$/.test(e))n=e;else return null;let i=n.split(".")[1];if(i&&i.length>2)return null;let r=Number(n);return Number.isFinite(r)?r:null}function IP(t,e){return t.contrato!==null||e>0?!0:t.porcentaje===null?!1:ES(t.porcentaje)!==100}function dK(t){if(!t.inicio||!t.fin)return{ok:!1,error:{codigo:"fechas_obligatorias"}};let e=ES(t.renta);if(e===null||e<=0)return{ok:!1,error:{codigo:"renta"}};let n=[];for(let r=0;r<t.inquilinos.length;r++){let a=t.inquilinos[r],s=a.nombre.trim(),o=a.nif.trim(),l=a.email.trim(),c=a.telefono.trim();if(!(!s&&!o&&!l&&!c)){if(!s)return{ok:!1,error:{codigo:"inquilino_nombre",n:r+1}};if(l&&!uK.safeParse(l).success)return{ok:!1,error:{codigo:"inquilino_email",n:r+1}};n.push({nombre:s,...o&&{nif:o},...l&&{email:l},...c&&{telefono:c}})}}if(n.length===0)return{ok:!1,error:{codigo:"inquilino_nombre",n:1}};let i=t.firma.trim();return{ok:!0,contrato:{inicio:t.inicio,fin_pactado:t.fin,...i&&{fecha_firma:i},renta_mensual:e,inquilinos:n}}}function SP(t){if(t===null)return{ok:!0,valor:void 0};let e=ES(t);return e===null||e<=0||e>100?{ok:!1,error:{codigo:"porcentaje"}}:{ok:!0,valor:e!==100?e:void 0}}var hK=()=>({contract:[],tenant_id:[],other:[],acta:[]});function pK(t){for(let e of["contract","tenant_id","other"]){let n=aa[e];if(t[e].length>n)return{codigo:"caja_llena",caja:e,max:n}}return t.acta.length>J1?{codigo:"caja_llena",caja:"acta",max:J1}:null}function eb(t,e){for(let a of vP){let s=aa[a];if(e[a].length>s)return{ok:!1,error:{codigo:"caja_llena",caja:a,max:s}}}let n=[{contract:e.contract,tenant_id:e.tenant_id,other:e.other,acta:e.acta??[]},...e.masContratos??[]];for(let a of n){let s=pK(a);if(s)return{ok:!1,error:s}}let i={};if(t.contrato){let a=[t.contrato,...t.masContratos??[]];if(a.length>fK)return{ok:!1,error:{codigo:"datos"}};let s=[];for(let l=0;l<a.length;l++){let c=dK(a[l]);if(!c.ok)return c;let f=n[l]??hK();s.push({...c.contrato,ficheros:{contract:f.contract,tenant_id:f.tenant_id,other:f.other,acta:f.acta}})}let o=SP(t.porcentaje);if(!o.ok)return o;Object.assign(i,{v:IS,...o.valor!==void 0&&{porcentaje_titularidad:o.valor},contratos:s,ficheros:{movimientos:e.movimientos}})}else{let a=SP(t.porcentaje);if(!a.ok)return a;Object.assign(i,{v:CS,...a.valor!==void 0&&{porcentaje_titularidad:a.valor},ficheros:{contract:e.contract,tenant_id:e.tenant_id,other:e.other,movimientos:e.movimientos}})}let r=hd(i);return r.ok?{ok:!0,paquete:r.paquete}:r.error==="fin_antes_de_inicio"?{ok:!1,error:{codigo:"fin_antes_de_inicio"}}:r.error==="firma_despues_de_fin"?{ok:!1,error:{codigo:"firma_despues_de_fin"}}:{ok:!1,error:{codigo:"datos"}}}function tb(t){return t.normalize("NFD").replace(/[̀-ͯ]/g,"").toUpperCase().replace(/[^A-Z0-9\s]/g," ").split(/\s+/).filter(e=>e.length>0)}function TS(t,e){let n=new Set(tb(t)),i=new Set(tb(e));if(n.size===0||i.size===0)return!1;let[r,a]=n.size<=i.size?[n,i]:[i,n],s=0;for(let o of Array.from(r))a.has(o)&&s++;return s===r.size&&s>=2}var mK="2023-05-26";function _S(t){return t<mK}function qS(t,e,n,i){let r=new Date(`${t}T00:00:00Z`).getTime(),a=e?new Date(`${e}T00:00:00Z`).getTime():Number.POSITIVE_INFINITY,s=new Date(`${n}T00:00:00Z`).getTime(),o=i?new Date(`${i}T00:00:00Z`).getTime():Number.POSITIVE_INFINITY;return r<=o&&s<=a}var CP="TRWAGMYFPDXBNJZSQVHLCKE";function RS(t){return t.trim().toUpperCase().replace(/[\s\-]/g,"")}function EP(t){let e=RS(t);if(!e)return!1;if(/^\d{8}[A-Z]$/.test(e)){let n=parseInt(e.slice(0,8),10);return e[8]===CP[n%23]}if(/^[XYZ]\d{7}[A-Z]$/.test(e)){let n=e[0],i={X:"0",Y:"1",Z:"2"}[n],r=parseInt(i+e.slice(1,8),10);return e[8]===CP[r%23]}if(/^[ABCDEFGHJKLMNPQRSUVW]\d{7}[A-Z0-9]$/.test(e)){let n=e.slice(1,8),i=0,r=0;for(let u=0;u<7;u++){let d=parseInt(n[u],10);if((u+1)%2===0)r+=d;else{let h=d*2;i+=Math.floor(h/10)+h%10}}let s=(10-(i+r)%10)%10,o="JABCDEFGHI"[s],l=e[8],c="NPQRSW",f="ABEH";return c.includes(e[0])?l===o:f.includes(e[0])?l===String(s):l===o||l===String(s)}return!1}var TP=me.union([me.string(),me.null(),me.undefined()]).optional().transform(t=>{if(t==null)return;let e=t.trim();return e===""?void 0:e});function _P(t){let e=new Date(t);return Number.isNaN(e.getTime())?!1:!/^\d{4}-\d{2}-\d{2}$/.test(t)||e.toISOString().slice(0,10)===t}var qre=me.union([me.string(),me.null(),me.undefined()]).optional().transform(t=>{if(!(t===void 0||t===""||t===null))return _P(t)?t:void 0}),Rre=me.union([me.string(),me.null()]).optional().transform(t=>{if(t!==void 0)return t===null||t===""?null:t}).refine(t=>t==null||_P(t),{message:"Fecha no v\xE1lida"}),Ore=me.union([me.string(),me.null()]).optional().transform(t=>{if(t===void 0)return;let e=(t??"").trim();return e===""?null:e}),Pre=me.union([me.boolean(),me.literal(""),me.null()]).optional().transform(t=>{if(t!==void 0)return t===""||t===null?null:t}),Dre=me.union([me.string(),me.null()]).optional().transform(t=>t===""||t===void 0||t===null?null:t).refine(t=>t===null||/^[0-9a-f-]{36}$/i.test(t),{message:"UUID inv\xE1lido"}),Nre=me.union([me.string(),me.null()]).optional().transform(t=>t===void 0?void 0:t===""||t===null?null:t).refine(t=>t==null||/^[0-9a-f-]{36}$/i.test(t),{message:"UUID inv\xE1lido"});var Mre=me.union([me.string(),me.null(),me.undefined()]).optional().transform(t=>t===void 0?void 0:t===null||t===""?null:t),gK=TP.refine(t=>t===void 0||/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(t),{message:"Email no v\xE1lido"}),bK=TP.refine(t=>t===void 0||/^[0-9+\s().\-]+$/.test(t)&&(t.match(/\d/g)??[]).length>=6,{message:"Tel\xE9fono no v\xE1lido"});function xK(t){if(!t)return null;let e=RS(t).replace(/\./g,"");if(!e)return null;let n=/^(\d{1,7})([A-Z])$/.exec(e);n&&(e=n[1].padStart(8,"0")+n[2]);let i=/^([XYZ])(\d{1,6})([A-Z])$/.exec(e);return i&&(e=i[1]+i[2].padStart(7,"0")+i[3]),EP(e)?e:null}function qP(t){let e=new Set;for(let n of t){let i=xK(n);i&&e.add(i)}return e}function wK(t,e){if(t.size!==e.size)return!1;for(let n of t)if(!e.has(n))return!1;return!0}function RP(t,e){let n=qP(e.nifs),i=null;for(let r of t){if(r.deleted_at||(r.unit_id??null)!==(e.unit_id??null)||r.start_date!==e.start_date)continue;let a=qP(r.nifs);if(a.size>0&&n.size>0){if(wK(a,n))return{contrato:r,grado:"igual"};continue}i||(i=r)}return i?{contrato:i,grado:"probable"}:null}function vK(t,e){return _S(t)!==_S(e)||t.slice(0,4)!==e.slice(0,4)}var OP=t=>{let e=t?kS(t):"";return e===""?null:e};function nb(t,e){if(t.fechaInicio!==e.inicio)return"no";let n=e.inquilinos.map(s=>OP(s.nif)),i=n.length>0&&n.every(s=>s!==null),r=new Set(n.filter(s=>s!==null)),a=!1;for(let s of t.inquilinos){let o=OP(s.dni),l=tb(s.nombre).length,c=o!==null&&r.has(o),f=l>=2&&e.inquilinos.some((u,d)=>n[d]===null&&TS(s.nombre,u.nombre));if(c||f){a=!0;continue}if(o!==null&&i||l>=2&&!e.inquilinos.some(u=>TS(s.nombre,u.nombre)))return"no"}return a?"casa":"no"}var yK=t=>({inicio:t.inicio,inquilinos:t.inquilinos.map(e=>({nombre:e.nombre,nif:e.nif??null}))});function PP(t,e,n,i){let r=[],a=(p,m)=>r.push({motivo:p,contrato:m}),s=[];t.forEach((p,m)=>{let g=e.get(m)??[];g.length>1&&a("acta_de_mas",m),g.some(b=>!b.ok)&&a("acta_ilegible",m),g.length===1&&g[0].ok&&s.push({caja:m,acta:g[0].acta})});let o=new Map,l=new Map;for(let{caja:p,acta:m}of s){let g=t.flatMap((x,w)=>nb(m,yK(x))==="casa"?[w]:[]);if(g.length!==1){a("acta_sin_contrato",p);continue}let b=g[0];if(l.set(b,(l.get(b)??0)+1),b!==p){a("acta_sin_contrato",p);continue}o.set(b,m)}for(let[p,m]of l)m>1&&a("acta_repetida",p);t.forEach((p,m)=>{let g=o.get(m);g&&(p.finReal!==null&&p.finReal!==g.fechaLlaves&&a("acta_fin_distinto",m),p.fechaFirma!==null&&vK(p.fechaFirma,g.fechaFirma)&&a("firma_distinta",m))});let c=t.map((p,m)=>{let g=o.get(m);return g?{fin:g.fechaLlaves,porActa:!0}:{fin:p.finReal,porActa:!1}}),f=t.map((p,m)=>m).sort((p,m)=>t[p].inicio.localeCompare(t[m].inicio)||p-m);f.slice(0,-1).forEach(p=>{o.has(p)||a("falta_acta",p)});let u=n.map(p=>({id:p.id,unit_id:null,start_date:p.start_date,end_date:p.end_date,agreed_end_date:null,contract_date:null,monthly_rent:null,nifs:[...p.nifs],nombres:[],telefonos:[],emails:[]})),d=t.map(p=>{let m={unit_id:null,start_date:p.inicio,nifs:p.inquilinos.map(g=>g.nif??""),nombres:[],telefonos:[],emails:[]};return RP(u,m)?.contrato??null});for(let p=0;p<f.length;p++)for(let m=p+1;m<f.length;m++){let g=f[p],b=f[m];!o.has(g)&&c[g].fin===null&&g!==f[f.length-1]||qS(t[g].inicio,c[g].fin,t[b].inicio,c[b].fin)&&a("solape",b)}let h=new Set(d.flatMap(p=>p?[p.id]:[]));return t.forEach((p,m)=>{n.some(x=>!h.has(x.id)&&qS(p.inicio,c[m].fin,x.start_date,x.end_date))&&a("solape",m);let b=d[m];b&&c[m].porActa&&b.end_date!==null&&b.end_date!==c[m].fin&&a("fin_existente_distinto",m)}),r.length>0?{ok:!1,motivos:r}:{ok:!0,contratos:f.map(p=>({...t[p],finEfectivo:c[p].fin,finPorActa:c[p].porActa,existenteId:d[p]?.id??null}))}}function DP(t,e,n){let i=fd(t).contratos;return{validacion:PP(i,e,[],n),inicios:i.map(r=>r.inicio)}}var iie=[...xP,...wP];var yie=5*6e4,kie={anios:Array.from({length:101},(t,e)=>2e3+e),hastaMes:"9999-12",caducaAntesDe:null};function NP(t){return t.ok?t.tipo==="contrato"?{ok:!0,tipo:"contrato",huella:t.huella}:{ok:!0,tipo:"movimiento",filas:t.filas,parser:t.parser,version:t.version,conceptos:t.conceptos,aRevision:t.aRevision,emision:t.emision}:{ok:!1,motivo:t.motivo==="tope"?"lector_fallo":t.motivo,transitorio:t.transitorio}}var MP=4e6,jK={anios:Array.from({length:101},(t,e)=>2e3+e),hastaMes:"9999-12",caducaAntesDe:null},FP=t=>kK("sha256").update(t).digest("hex");async function $P(t,e){if(t.byteLength>MP)return{demasiadoGrande:!0};let n=null,i=await SS({buf:t,mime:e.mime??"application/pdf",caja:e.caja,ventana:e.ventana??jK,lector:e.lector,lectores:Op,texto:async(s,o)=>{let l=await H1(s,o,e.extraer?{extraer:e.extraer}:{});return n=l,l},versiones:K2}),r=n,a=r!==null&&r.trim()!==""?FP(r):void 0;return{local:i,resultado:NP(i),textoSha256:a}}async function OS(t,e){let n=await $P(t,e);return"demasiadoGrande"in n?n:{resultado:n.resultado,textoSha256:n.textoSha256}}function PS(t){async function e(n,i,r,a){let s=`/v1/borradores/${encodeURIComponent(n)}/ficheros/${encodeURIComponent(i)}/leer`,o=FP(r),l=await $P(r,a),c="demasiadoGrande"in l?{sha256:o,resultado:{ok:!1,motivo:"demasiado_grande",transitorio:!1}}:{sha256:o,...l.textoSha256?{textoSha256:l.textoSha256}:{},resultado:l.resultado};try{return{respuesta:await t.peticion({metodo:"POST",ruta:s,cuerpo:c}),local:"demasiadoGrande"in l?null:l.local}}catch(d){if(!(d instanceof tn)||d.code!=="AGENCIA_MODO_SERVIDOR")throw d}let f=new FormData;return f.append("file",new Blob([r],{type:a.mime??"application/pdf"}),"fichero.pdf"),{respuesta:await t.peticion({metodo:"POST",ruta:s,cuerpoCrudo:f}),local:null}}return{leerDetalle:e,async leer(n,i,r,a){return(await e(n,i,r,a)).respuesta}}}var AK=[{code:"01",name:"\xC1lava"},{code:"02",name:"Albacete"},{code:"03",name:"Alicante"},{code:"04",name:"Almer\xEDa"},{code:"33",name:"Asturias"},{code:"05",name:"\xC1vila"},{code:"06",name:"Badajoz"},{code:"07",name:"Islas Baleares"},{code:"08",name:"Barcelona"},{code:"48",name:"Vizcaya"},{code:"09",name:"Burgos"},{code:"10",name:"C\xE1ceres"},{code:"11",name:"C\xE1diz"},{code:"39",name:"Cantabria"},{code:"12",name:"Castell\xF3n"},{code:"13",name:"Ciudad Real"},{code:"14",name:"C\xF3rdoba"},{code:"15",name:"A Coru\xF1a"},{code:"16",name:"Cuenca"},{code:"20",name:"Guip\xFAzcoa"},{code:"17",name:"Girona"},{code:"18",name:"Granada"},{code:"19",name:"Guadalajara"},{code:"21",name:"Huelva"},{code:"22",name:"Huesca"},{code:"23",name:"Ja\xE9n"},{code:"24",name:"Le\xF3n"},{code:"25",name:"Lleida"},{code:"27",name:"Lugo"},{code:"28",name:"Madrid"},{code:"29",name:"M\xE1laga"},{code:"30",name:"Murcia"},{code:"31",name:"Navarra"},{code:"32",name:"Ourense"},{code:"34",name:"Palencia"},{code:"35",name:"Las Palmas"},{code:"36",name:"Pontevedra"},{code:"26",name:"La Rioja"},{code:"37",name:"Salamanca"},{code:"38",name:"Santa Cruz de Tenerife"},{code:"40",name:"Segovia"},{code:"41",name:"Sevilla"},{code:"42",name:"Soria"},{code:"43",name:"Tarragona"},{code:"44",name:"Teruel"},{code:"45",name:"Toledo"},{code:"46",name:"Valencia"},{code:"47",name:"Valladolid"},{code:"49",name:"Zamora"},{code:"50",name:"Zaragoza"},{code:"51",name:"Ceuta"},{code:"52",name:"Melilla"}],SK=new Map(AK.map(t=>[t.code,t]));function pd(t){return SK.get(t)}function LP(t){if(/^\d{5}$/.test(t))return pd(t.slice(0,2))}var IK=/^[A-Za-z0-9._-]{1,40}$/;function rs(t){return IK.test(t)}var Yc=me.string().regex(/^[A-Za-z0-9+/]+={0,2}$/).max(2e4),BP=me.string().refine(rs),CK=me.string().regex(/^\d{2}$/).refine(t=>pd(t)!==void 0),rb=me.object({wrapped_key_b64:Yc,cipher_b64:Yc,iv_b64:Yc}).strict(),EK=["contract","tenant_id","other"],DS=[...EK,"acta","movimientos","foto"],NS=2*1024*1024,TK=(t,e,n)=>t==="foto"&&(e!=="image/jpeg"||n>NS),_K=me.object({caja:me.enum(DS),storage_path:me.string().min(1).max(300),wrapped_file_key:Yc,nombre_cipher:Yc,nombre_iv:Yc,mime:me.string().min(1).max(100),size_bytes:me.number().int().positive(),idem_key:me.string().uuid()}).strict().refine(t=>!TK(t.caja,t.mime,t.size_bytes),{message:"TOPE_CAJA",path:["caja"]}),qK=me.object({email:me.string().trim().email().max(254),ref:BP.optional(),copiaNombre:rb.optional()}).strict(),RK=me.object({ref:BP.optional(),provincia:CK,municipio:me.string().regex(/^\d{5}$/).nullish(),sobre:rb,ficheros:me.array(_K).max(25+Kc).default([]),paquete:rb.optional(),paqueteConContrato:me.boolean().optional(),paqueteContratos:me.number().int().min(1).max(Q1).optional()}).strict().refine(t=>!t.ficheros.some(e=>e.caja==="movimientos")||t.paquete!==void 0,{message:"movimientos sin paquete",path:["ficheros"]}).refine(t=>t.paqueteContratos===void 0||t.paquete!==void 0,{message:"contratos sin paquete",path:["paqueteContratos"]}).refine(t=>!t.ficheros.some(e=>e.caja==="acta")||t.paquete!==void 0,{message:"acta sin paquete",path:["ficheros"]}).refine(t=>!t.paqueteConContrato||t.paquete!==void 0,{message:"contrato sin paquete",path:["paqueteConContrato"]}).refine(t=>t.municipio==null||t.municipio.startsWith(t.provincia),{message:"INE de otra provincia",path:["municipio"]}),Nie=me.object({cliente:qK,sobreCliente:rb,viviendas:me.array(RK).max(50)}).strict().refine(t=>{let e=t.viviendas.map(n=>n.ref).filter(n=>n!==void 0);return new Set(e).size===e.length},{message:"ref de vivienda repetida",path:["viviendas"]}).refine(t=>{let e=t.viviendas.flatMap(n=>n.ficheros.map(i=>i.idem_key));return new Set(e).size===e.length},{message:"idem_key repetida",path:["viviendas"]});function OK(t){return t.toFixed(2).replace(".",",")}function zP(t){if(!t.ok)return{ok:!1,motivo:"contrato_ilegible"};let e=t.contrato,n=[];e.start_date===null&&n.push("inicio"),e.end_date===null&&n.push("fin"),e.monthly_rent===null&&n.push("renta"),e.tenants.length===0&&n.push("inquilinos");let i=e.warning_codes.includes("mas_de_4_inquilinos");return n.length>0||i?{ok:!1,motivo:"contrato_incompleto",faltan:n,excedeInquilinos:i}:{ok:!0,finCalculado:e.warning_codes.includes("fin_calculado_por_duracion"),form:{inicio:e.start_date,fin:e.end_date,firma:e.contract_date??"",renta:OK(e.monthly_rent),inquilinos:e.tenants.map(r=>({nombre:r.name,nif:r.nif??"",email:r.email??"",telefono:r.phone??""}))}}}var zs=()=>globalThis.crypto.subtle,is=t=>t;async function FS(t){return zs().importKey("spki",is(t),{name:"RSA-OAEP",hash:"SHA-256"},!1,["encrypt"])}async function UP(){let t=globalThis.crypto.getRandomValues(new Uint8Array(32));return{key:await zs().importKey("raw",is(t),"AES-GCM",!1,["encrypt"]),raw:t}}async function $S(t,e){return new Uint8Array(await zs().encrypt({name:"RSA-OAEP"},e,is(t)))}async function MS(t,e){let n=globalThis.crypto.getRandomValues(new Uint8Array(12));return{cipher:new Uint8Array(await zs().encrypt({name:"AES-GCM",iv:is(n)},e,is(t))),iv:n}}async function xr(t,e){let n=await FS(e),{key:i,raw:r}=await UP(),{cipher:a,iv:s}=await MS(new TextEncoder().encode(JSON.stringify(t)),i);return{wrapped_key:await $S(r,n),cipher:a,iv:s}}async function PK(t,e){let n=await zs().decrypt({name:"RSA-OAEP"},e,is(t));return zs().importKey("raw",n,"AES-GCM",!1,["decrypt"])}async function Zc(t,e){let n=await PK(t.wrapped_key,e),i=await zs().decrypt({name:"AES-GCM",iv:is(t.iv)},n,is(t.cipher));return JSON.parse(new TextDecoder().decode(i))}async function LS(t,e,n){let i=await FS(n),{key:r,raw:a}=await UP(),s=await MS(t,r),o=await MS(new TextEncoder().encode(e),r),l=new Uint8Array(12+s.cipher.length);return l.set(s.iv,0),l.set(s.cipher,12),{blob:l,wrapped_file_key:await $S(a,i),nombre_cipher:o.cipher,nombre_iv:o.iv}}async function md(t,e,n){let i=new Uint8Array(await zs().decrypt({name:"RSA-OAEP"},e,is(t)));return $S(i,await FS(n))}function un(t){let e="";for(let n=0;n<t.length;n++)e+=String.fromCharCode(t[n]);return btoa(e)}function zr(t){let e=atob(t),n=new Uint8Array(e.length);for(let i=0;i<e.length;i++)n[i]=e.charCodeAt(i);return n}function HP(t){let e="";for(let n=0;n<t.length;n++)e+=t[n].toString(16).padStart(2,"0");return e}async function VP(){let t=await crypto.subtle.generateKey({name:"RSA-OAEP",modulusLength:3072,publicExponent:new Uint8Array([1,0,1]),hash:"SHA-256"},!0,["encrypt","decrypt"]);return{publicKeySpki:new Uint8Array(await crypto.subtle.exportKey("spki",t.publicKey)),privateKeyPkcs8:new Uint8Array(await crypto.subtle.exportKey("pkcs8",t.privateKey))}}async function GP(t,e){let n=await crypto.subtle.decrypt({name:"RSA-OAEP"},e,t);return crypto.subtle.importKey("raw",n,"AES-GCM",!1,["decrypt"])}var ab=()=>globalThis.crypto.subtle,Jc=t=>t,DK="agencia-paquete-v1",ib=32,NK=12,MK={name:"RSA-OAEP",hash:"SHA-256"};function FK(t){return ab().importKey("pkcs8",Jc(t),MK,!1,["decrypt"])}async function WP(){let{publicKeySpki:t,privateKeyPkcs8:e}=await VP();return{publicaSpki:t,privada:await FK(e),privadaPkcs8:e}}function KP(){return globalThis.crypto.getRandomValues(new Uint8Array(ib))}function gd(t){let e="";for(let n of t)e+=String.fromCharCode(n);return btoa(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function XP(t){if(!/^[A-Za-z0-9_-]+$/.test(t))return null;try{let e=t.replace(/-/g,"+").replace(/_/g,"/"),n=atob(e+"=".repeat((4-e.length%4)%4));if(n.length!==ib)return null;let i=new Uint8Array(ib);for(let r=0;r<ib;r++)i[r]=n.charCodeAt(r);return gd(i)===t?i:null}catch{return null}}async function $K(t,e,n){let i=new TextEncoder,r=await ab().importKey("raw",Jc(t),"HKDF",!1,["deriveKey"]);return ab().deriveKey({name:"HKDF",hash:"SHA-256",salt:Jc(i.encode(e)),info:Jc(i.encode(DK))},r,{name:"AES-GCM",length:256},!1,[n])}async function YP(t,e,n){let i=await $K(e,n,"encrypt"),r=globalThis.crypto.getRandomValues(new Uint8Array(NK));return{cipher:new Uint8Array(await ab().encrypt({name:"AES-GCM",iv:Jc(r)},i,Jc(t))),iv:r}}var LK="/onboarding/agencia/entrar";function ZP(t){return`${t.origin.replace(/\/+$/,"")}${LK}?c=${encodeURIComponent(t.clientId)}#t=${t.token}&k=${gd(t.secreto)}`}var Qc=t=>({wrapped_key_b64:un(t.wrapped_key),cipher_b64:un(t.cipher),iv_b64:un(t.iv)});async function BK(t){let{vivienda:e,privadaAgencia:n,publicaAgencia:i,publicaEfimera:r}=t,a={v:1,...e.datos},s={},o=[];for(let c of e.ficheros){let f=await md(c.wrappedFileKey,n,r);o.push({ficheroId:c.ficheroId,idemKey:c.idemKey,wrappedFileKeyB64:un(f)}),c.lectura&&(s[c.idemKey]=c.lectura)}let l=e.paquete?{v:1,paquete:e.paquete,alta:{documentos:s}}:null;return{viviendaBorradorId:e.viviendaBorradorId,...e.ref?{ref:e.ref}:{},provincia:e.provincia,...e.municipio?{municipio:e.municipio}:{},sobreAgencia:Qc(await xr(a,i)),sobreEfimera:Qc(await xr(a,r)),paqueteEfimera:l?Qc(await xr(l,r)):null,...e.porcentajeDeclarado!=null?{porcentajeDeclarado:e.porcentajeDeclarado}:{},ficheros:o}}var zK={sellarViviendaParaEfimera:BK};async function JP(t){let{borrador:e,privadaAgencia:n,publicaAgencia:i,publicaEfimera:r}=t,a={v:1,...e.cliente.datos},s=e.cliente.datos.nombre,o=typeof s=="string"&&s.trim()!==""?s.trim():null,l={email:e.cliente.email,...e.cliente.ref?{ref:e.cliente.ref}:{},sobreAgencia:Qc(await xr(a,i)),sobreEfimera:Qc(await xr(a,r)),...o?{copiaNombre:Qc(await xr({v:1,nombre:o},i))}:{}},c=[];for(let f of e.viviendas)c.push(await zK.sellarViviendaParaEfimera({vivienda:f,privadaAgencia:n,publicaAgencia:i,publicaEfimera:r}));return{cliente:l,viviendas:c}}var QP=1,BS=me.object({v:me.literal(QP),nombre:me.string().trim().min(1).max(200).optional(),nif:me.string().trim().min(1).max(20).optional(),telefono:me.string().trim().min(1).max(30).optional()}).strict(),iae=BS.extend({nombre:me.string().trim().min(1).max(200)}),zS=/^[0-9A-ZÑ]{20}$/,eD=me.object({v:me.literal(QP),direccion:me.string().trim().min(1).max(300),cp:me.string().regex(/^\d{5}$/),etiqueta:me.string().trim().min(1).max(200),cadastral_ref:me.string().regex(zS).optional().catch(void 0)}).strict();var bd=t=>({contrato:t.contrato,porcentaje:null,masContratos:t.masContratos.map(e=>e.datos)});var UK={CL:"calle",PS:"paseo",AV:"avenida",PZ:"plaza",CR:"carretera",RD:"ronda",TR:"traves\xEDa",GL:"glorieta",CM:"camino",AC:"acera",CJ:"callej\xF3n",UR:"urbanizaci\xF3n",PQ:"parque",BO:"barrio",LG:"lugar",PJ:"pasaje",CS:"costanilla",RM:"ramal",SD:"sendero",ES:"escalinata",TO:"torrente",VI:"v\xEDa",RU:"r\xFAa",RB:"rambla"},HK={CL:["calle","c","cl"],PS:["paseo","po","ps"],AV:["avenida","avda","av","avd"],PZ:["plaza","pza","pl","plza"],CR:["carretera","ctra","cr"],TR:["travesia","trav","tr"],RD:["ronda","rda"],GL:["glorieta","gta","gl"],CM:["camino","cmno","cm"]},VK={CL:["carrer"],PS:["passeig"],AV:["avinguda","avgda"],PZ:["placa","pla\xE7a","praza"],CR:["estrada"],TR:["travessia","travessera"],CM:["cami","cami\xF1o"],RU:["rua"],PJ:["passatge"]},GK=new Set(["RU","RB"]);function tD(t){let e={};for(let[n,i]of Object.entries(UK))!t&&GK.has(n)||(e[n.toLowerCase()]=n,e[i.normalize("NFD").replace(/[\u0300-\u036f]/g,"")]=n);for(let[n,i]of Object.entries(HK))for(let r of i)e[r]=n;if(t)for(let[n,i]of Object.entries(VK))for(let r of i)e[r]=n;return e}var nD=tD(!1),oae=tD(!0);var WK=new Set(["de","del","la","las","los","el"]),iD=new Set(["n","no","num","numero"]);function aD(t){return t.toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g,"").replace(/[\u00ba\u00aa\u00b0]/g,"o").replace(/\./g,"").replace(/[^a-z0-9ñ]+/g," ").trim().split(" ").filter(Boolean)}function sD(t){let e=aD(t);for(;e.length>1&&iD.has(e[0]??"");)e.shift();return e[0]&&(e[0]=e[0].replace(/^(n|no|num|numero)(?=\d)/,"")),e.join("").replace(/^0+(?=\d)/,"")}function KK(t){return t.calle.trim()===""&&t.numero.trim()===""}function rD(t){let e=aD(t);e=e.filter((a,s)=>!(iD.has(a)&&/^\d/.test(e[s+1]??"")));let n=nD[e[0]??""]??null;n&&(e=e.slice(1));let i=e.findIndex(a=>/^\d/.test(a)),r=(i===-1?e:e.slice(0,i)).filter(a=>!WK.has(a)).join(" ");return{sigla:n,nombre:r,numero:i===-1?"":sD(e[i])}}function oD(t,e){if(KK(t))return!1;let n=rD(t.calle),i=t.numero.trim()!==""?sD(t.numero):n.numero,r=rD(e);return n.nombre===""||i===""||r.numero===""||n.sigla!==null&&r.sigla!==null&&n.sigla!==r.sigla?!1:n.nombre===r.nombre&&i===r.numero}var lD=t=>{let e={direccion:t.property_address,todas:[...t.cadastral_refs],vivienda:t.cadastral_ref_vivienda??null};return e.direccion===null&&e.todas.length===0?null:e};function cD(t){let e=new Set;for(let n of t)n.caja==="contract"&&n.estado==="leido"&&n.rc?.vivienda&&e.add(n.rc.vivienda);return e.size===1?[...e][0]:null}var fD=(t,e,n)=>({id:t,file:e,caja:n,ficheroId:null,estado:"subiendo",motivo:null,rentas:0,gastos:0,filasFuera:0,rc:null});function uD(t){let e=[];for(let n of["contract","tenant_id","other"])for(let i of t.ficheros[n])e.push({file:i,caja:n,destino:0});for(let n of t.bloques.actaPrimero)e.push({file:n,caja:"acta",destino:0});t.bloques.masContratos.forEach((n,i)=>{for(let r of["contract","tenant_id","other","acta"])for(let a of n.ficheros[r])e.push({file:a,caja:r,destino:i+1})});for(let n of t.bloques.movimientos??[])e.push({file:n,caja:"movimientos",destino:0});return e}var dD=(t,e)=>e===null?"ilegible":oD({calle:t.trim(),numero:""},e)?"casa":"distinta";function hD(t){return t.ok?t.tipo==="contrato"?{tipo:"contrato",huella:t.huella??null}:t.origen==="ia"?{tipo:"movimiento",filas:t.filas,origen:"ia"}:{tipo:"movimiento",filas:t.filas}:null}function pD(t,e){let n=t.bloques.movimientos??[];if(!IP(bd(t.bloques),n.length))return{ok:!0,paquete:null};let i=new Map(t.pre.map(f=>[f.file,f])),r=()=>({contract:[],tenant_id:[],other:[],acta:[]}),a=[r(),...t.bloques.masContratos.map(r)],s=[];for(let{file:f,caja:u,destino:d}of uD(t)){if(u==="foto")continue;let h=i.get(f),p=h?.ficheroId?e(h.ficheroId):void 0;if(!p)return{ok:!1,error:{codigo:"fichero_subiendo"}};u==="movimientos"?s.push(p):a[d]?.[u].push(p)}let[o,...l]=a,c=eb(bd(t.bloques),{...o,movimientos:s,masContratos:l});return c.ok?{ok:!0,paquete:c.paquete}:c}var XK=t=>t.trim()===""?null:t;function mD(t){let e=[],n=!1,i=new Set,r=[];for(let g of t.contratos){if(g.sha256!==null){if(i.has(g.sha256)){e.push({codigo:"pdf_repetido",ficheroId:g.ficheroId});continue}i.add(g.sha256)}g.lectura.ok?r.push({c:g,form:g.lectura}):g.lectura.motivo==="contrato_ilegible"?(n=!0,e.push({codigo:"contrato_ilegible",ficheroId:g.ficheroId})):(n=!0,e.push({codigo:"contrato_incompleto",ficheroId:g.ficheroId,faltan:g.lectura.faltan,excedeInquilinos:g.lectura.excedeInquilinos}))}let a=r.map((g,b)=>({...g,i:b})).sort((g,b)=>g.form.form.inicio.localeCompare(b.form.form.inicio)||g.i-b.i),s=new Set;for(let g=1;g<a.length;g++){let b=a[g].form.form.inicio;b===a[g-1].form.form.inicio&&!s.has(b)&&(s.add(b),e.push({codigo:"inicio_repetido",inicio:b}))}let o=a.length,l=a.map(g=>({inicio:g.form.form.inicio,inquilinos:g.form.form.inquilinos.map(b=>({nombre:b.nombre,nif:XK(b.nif)}))})),c=a.map(()=>[]),f=[];for(let g of t.actas){if(!g.resultado.ok){e.push({codigo:"acta_ilegible",ficheroId:g.ficheroId});continue}let b=g.resultado.acta,x=l.flatMap((w,k)=>nb(b,w)==="casa"?[k]:[]);x.length>=1?c[x[0]].push(g):f.push({a:g,inicio:b.fechaInicio})}if(!n)for(let g of f){let b=l.some(x=>x.inicio===g.inicio);e.push({codigo:b?"acta_sin_contrato":"quita_su_acta",ficheroId:g.a.ficheroId,inicio:g.inicio})}let u=()=>({contract:[],tenant_id:[],other:[],acta:[]}),d=a.map((g,b)=>({...u(),contract:[g.c.file],acta:c[b].map(x=>x.file)})),h={contract:[],tenant_id:[],other:[]};if(o===0)h.tenant_id=[...t.tenantId],h.other=[...t.otros];else{let g=d[o-1];g.tenant_id=[...t.tenantId],g.other=[...t.otros],h.contract=d[0].contract,h.tenant_id=d[0].tenant_id,h.other=d[0].other}let p={contrato:o>0?a[0].form.form:null,movimientos:t.movimientos.length>0?[...t.movimientos]:null,actaPrimero:o>0?d[0].acta:[],masContratos:d.slice(1).map((g,b)=>({datos:a[b+1].form.form,ficheros:{contract:g.contract,tenant_id:g.tenant_id,other:g.other,acta:g.acta}}))};if(o>0&&!n&&s.size===0){let g=()=>globalThis.crypto.randomUUID(),b=v=>({contract:v.contract.map(g),tenant_id:v.tenant_id.map(g),other:v.other.map(g),acta:v.acta.map(g)}),[x,...w]=d.map(b),k=eb(bd(p),{...x,movimientos:t.movimientos.map(g),masContratos:w});if(!k.ok)e.push({codigo:"construir",construir:k.error.codigo});else if(k.paquete.v===2){let v=new Map;c.forEach((A,I)=>{A.length>0&&v.set(I,A.map(S=>S.resultado))});let y=DP(k.paquete,v,t.hoy);if(!y.validacion.ok)for(let A of y.validacion.motivos)e.push({codigo:A.motivo,inicio:A.contrato!==null?y.inicios[A.contrato]??null:null})}}let m=[];return c.forEach((g,b)=>{let x=g[0];g.length===1&&x&&x.resultado.ok&&nb(x.resultado.acta,l[b])==="casa"&&m.push({ficheroId:x.ficheroId,contratoFicheroId:a[b].c.ficheroId,fechaLlaves:x.resultado.acta.fechaLlaves})}),{bloques:p,ficheros:h,errores:e,contratosLeidos:o,actasCasadas:m,contratosOrdenados:a.map(g=>({ficheroId:g.c.ficheroId,inicio:g.form.form.inicio,finCalculado:g.form.finCalculado}))}}async function il(t,e){let n=await xr(t,zr(e));return{wrapped_key_b64:un(n.wrapped_key),cipher_b64:un(n.cipher),iv_b64:un(n.iv)}}var gD=(t,e)=>({v:1,direccion:t,cp:e,etiqueta:t.slice(0,200)});var sb=t=>t;async function US(t,e){let n=await GP(t.wrapped_key,e),i=await globalThis.crypto.subtle.decrypt({name:"AES-GCM",iv:sb(t.iv)},n,sb(t.cipher));return new Uint8Array(i)}function HS(t){return globalThis.crypto.subtle.importKey("pkcs8",sb(t),{name:"RSA-OAEP",hash:"SHA-256"},!1,["decrypt"])}async function bD(t){return HP(new Uint8Array(await globalThis.crypto.subtle.digest("SHA-256",sb(t))))}function ob(t){return{wrapped_key:zr(t.wrapped_key_b64),cipher:zr(t.cipher_b64),iv:zr(t.iv_b64)}}var lb=1600,xD=.82,wD=.7,VS=NS-1024;async function YK(){try{let e=await import("sharp");return typeof e.default=="function"?e.default:null}catch{return null}}var ef={ok:!1,error:"IMAGEN_NO_PROCESABLE"},ZK=t=>t.length>4&&t[0]===255&&t[1]===216&&t[2]===255;function JK(t){let e=2;for(;e+9<t.length;){if(t[e]!==255){e++;continue}let n=t[e+1];if(n===255){e++;continue}if(n===216||n===1||n>=208&&n<=215){e+=2;continue}if(n===218)return null;let i=t[e+2]<<8|t[e+3];if(n>=192&&n<=207&&n!==196&&n!==200&&n!==204){let r=t[e+5]<<8|t[e+6],a=t[e+7]<<8|t[e+8];return Math.max(r,a)}e+=2+i}return null}function QK(t){let e=[t.subarray(0,2)],n=2;for(;n+4<=t.length;){if(t[n]!==255)return null;let s=t[n+1];if(s===255){n++;continue}if(s===218){e.push(t.subarray(n)),n=t.length;break}if(s===1||s>=208&&s<=217){e.push(t.subarray(n,n+2)),n+=2;continue}let o=n+2+(t[n+2]<<8|t[n+3]);if(o>t.length)return null;s!==225&&s!==237&&s!==254&&e.push(t.subarray(n,o)),n=o}if(n<t.length)return null;let i=e.reduce((s,o)=>s+o.length,0),r=new Uint8Array(i),a=0;for(let s of e)r.set(s,a),a+=s.length;return r}async function GS(t,e,n={}){try{if(t.length===0)return ef;let i=await(n.cargarSharp??YK)();if(i){let s=i(t,{failOn:"error"}).rotate().resize({width:lb,height:lb,fit:"inside",withoutEnlargement:!0});for(let o of[xD,wD]){let l=await s.clone().jpeg({quality:Math.round(o*100)}).toBuffer();if(l.length>0&&l.length<=VS)return{ok:!0,bytes:new Uint8Array(l),mime:"image/jpeg"}}return ef}if(e!=="image/jpeg"||!ZK(t))return ef;let r=JK(t);if(r===null||r>lb)return ef;let a=QK(t);return!a||a.length>VS?ef:{ok:!0,bytes:a,mime:"image/jpeg"}}catch{return ef}}import{readFile as eX}from"node:fs/promises";import{createPrivateKey as yD,createPublicKey as tX}from"node:crypto";var tf="CDA_CLAVE_INTEGRACION_PEM",as=class extends Error{constructor(e){super(e),this.name="ErrorClaveIntegracion"}};function vD(t){return!/[\r\n]/.test(t)&&t.includes("\\n")?t.replace(/\\n/g,`
187
- `):t}async function nX(t){if(t.pem!==void 0&&t.pem.trim()!=="")return vD(t.pem);let e=(t.env??process.env)[tf];if(e!==void 0&&e.trim()!=="")return vD(e);if(t.ruta)return eX(t.ruta,"utf8");throw new as(`Falta la clave de integraci\xF3n: pasa el PEM, define ${tf} o indica la ruta del fichero`)}function rX(t){try{return yD(t)}catch{throw new as("La clave de integraci\xF3n no es un PEM PKCS#8 v\xE1lido (sin contrase\xF1a)")}}function WS(t,e){let n=null,i=()=>n??=(async()=>{let r=await nX(t),a=new Uint8Array(rX(r).export({type:"pkcs8",format:"der"})),s=await HS(a),o=await US(e,s),{pkcs8_b64:l}=JSON.parse(new TextDecoder().decode(o));if(typeof l!="string")throw new Error("sobre de integraci\xF3n con formato inesperado");let c=Buffer.from(l,"base64"),f=await HS(new Uint8Array(c)),u=new Uint8Array(tX(yD({key:c,format:"der",type:"pkcs8"})).export({type:"spki",format:"der"}));return{privada:f,spki:un(u)}})();return{async abrirSobre(r){return US(r,(await i()).privada)},async publicaAgenciaSpki(){return(await i()).spki},async clavePrivadaSobres(){return(await i()).privada}}}var al=class extends tn{ref;paso;vivienda;caja;fichero;loteId;indice;clientId;creado;reintentable;consejo;corta;constructor(e,n,i,r){super(n.status,n.code,n.problema,n.requestId),this.name="ErrorAlta",this.message=`${rs(e.ref)?e.ref:"-"}: ${e.paso} \u2192 ${n.status} ${n.code}`,r!==void 0&&(this.cause=r),this.ref=e.ref,this.paso=e.paso,this.vivienda=e.vivienda,this.caja=e.caja,this.fichero=e.fichero,this.loteId=e.loteId,this.indice=e.indice,this.clientId=e.clientId,this.creado=e.creado,this.reintentable=i.reintentable,this.consejo=i.consejo,this.corta=i.corta}},iX=/^(E[A-Z]+|UND_ERR_[A-Z_]+)$/;function kD(t){if(t instanceof tn)return{status:t.status,code:t.code,requestId:t.requestId};if(t instanceof Vs)return{status:0,code:t.code,requestId:null};if(t instanceof as)return{status:0,code:"CLAVE_INTEGRACION",requestId:null};if(t instanceof TypeError){let e=t.cause?.code;if(typeof e=="string"&&iX.test(e))return{status:0,code:"RED",requestId:null}}return{status:0,code:"LOCAL",requestId:null}}var aX=new Set(["KEY_DE_PRUEBAS","KEY_DE_PRODUCCION","API_DESACTIVADA","CUOTA_LECTURAS_AGOTADA","TOPE_BORRADORES","ENTORNO_MAL_CONFIGURADO","CLAVE_INTEGRACION"]),sX=new Set(["RED","TRANSITORIO","LEYENDO","LIMITE_SUPERADO","TIEMPO_AGOTADO","IDEMPOTENCIA_EN_CURSO","LECTOR_VIEJO","REF_OCUPADA"]);function cb(t,e,n){return e===401||e===403||aX.has(t)?{reintentable:!1,consejo:"cuenta",corta:!0}:n.creado==="desconocido"?{reintentable:!0,consejo:"repetir",corta:!1}:sX.has(t)||e>=500||(t==="BORRADOR_CERRADO"||t==="NO_ENCONTRADO")&&n.paso!=="abrir"?{reintentable:!0,consejo:"repetir",corta:!1}:n.paso==="validar"||n.paso==="foto"&&(t==="IMAGEN_NO_PROCESABLE"||t==="TOPE_CAJA")?{reintentable:!1,consejo:"manifiesto",corta:!1}:{reintentable:!1,consejo:"cuenta",corta:!1}}function nf(t,e){if(t instanceof al)return t;let{status:n,code:i,requestId:r}=kD(t),a=t instanceof tn?t.problema:{code:i};return new al({...e},{status:n,code:i,requestId:r,problema:a},cb(i,n,e),t)}var oX=2e3,lX=3e4,jD=3,AD=(t,e,n,i)=>typeof t=="number"&&Number.isFinite(t)?Math.min(n,Math.max(e,Math.trunc(t))):i;function cX(t,e){return{ref:t.ref,paso:t.paso,vivienda:t.vivienda,caja:t.caja,fichero:t.fichero,loteId:t.loteId,indice:t.indice,clientId:t.clientId,creado:t.creado,status:t.status,code:t.code,requestId:t.requestId,reintentable:t.reintentable,consejo:t.consejo,intentos:e}}async function xd(t,e,n={},i=r=>new Promise(a=>setTimeout(a,r))){let r=AD(n.aLaVez,1,2,1),a=AD(n.repetir,0,2,1),s={completados:[],fallidos:[],noIntentados:[],cortadoPor:null},o=new Set,l=[];for(let g of e){let b=typeof g?.ref!="string";b||o.has(g.ref)?s.fallidos.push({ref:b?"-":g.ref,paso:"validar",creado:!1,status:422,code:"ENTRADA_INVALIDA",requestId:null,reintentable:!1,consejo:"manifiesto",intentos:0}):(o.add(g.ref),l.push(g))}let c=0,f=0,u=0,d=new Set,h=g=>{f=g==="RED"?f+1:0,u=g==="TIEMPO_AGOTADO"?u+1:0};async function p(g){let b;for(let x=1;;x++)try{let w=await t(g,b);s.completados.push({...w,ref:g.ref,intentos:x}),h(null);return}catch(w){let k=nf(w,{ref:g.ref,paso:"validar",creado:b?.creado??!1});if(k.reintentable&&!k.corta&&x<=a&&!s.cortadoPor&&(b=k.creado==="desconocido"?{creado:"desconocido"}:void 0,await i(k.creado==="desconocido"?lX:oX),!s.cortadoPor))continue;s.fallidos.push(cX(k,x)),h(k.code),!s.cortadoPor&&(k.corta||f>=jD||u>=jD)&&(s.cortadoPor={status:k.status,code:k.code,requestId:k.requestId});return}}async function m(){for(;!s.cortadoPor&&c<l.length;){let g=l[c++];d.add(g.ref),await p(g)}}return await Promise.all(Array.from({length:r},()=>m())),s.noIntentados=l.filter(g=>!d.has(g.ref)).map(g=>g.ref),s}function ID(t){return typeof t=="number"&&Number.isFinite(t)?Math.min(8,Math.max(1,Math.trunc(t))):null}function fX(t){let e=null;return()=>(e??=t.peticion({metodo:"GET",ruta:"/v1/yo"}).then(n=>ID(n?.limites?.concurrencia_ficheros)??4,()=>4),e)}var Ln=(t,e={},n=422)=>new tn(n,t,{code:t,...e}),uX=new Set(["ENTRADA_INVALIDA","IMAGEN_NO_PROCESABLE","FICHERO_NO_LEIDO","DIRECCION_DISTINTA","VIVIENDA_INCOMPLETA","BORRADOR_NO_LISTO"]),dX=new Set(["TRANSITORIO","LEYENDO"]),hX=3,pX=2,mX=12e4,CD=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,gX=/^[^\s@]+@[^\s@]+\.[^\s@]+$/;function bX(t){let e=i=>Ln("ENTRADA_INVALIDA",{campo:i});if(typeof t.ref!="string"||!rs(t.ref))throw e("ref");if(typeof t.email!="string"||t.email.trim().length>254||!gX.test(t.email.trim()))throw e("email");if(t.nombre!==void 0&&(typeof t.nombre!="string"||t.nombre.trim().length>200))throw e("nombre");if(!Array.isArray(t.viviendas)||t.viviendas.length<1||t.viviendas.length>50)throw e("viviendas");let n=new Set;t.viviendas.forEach((i,r)=>{let a=l=>e(`viviendas[${r}].${l}`);if(typeof i.direccion!="string"||i.direccion.trim()===""||i.direccion.trim().length>300)throw a("direccion");if(typeof i.provincia!="string"||!/^\d{2}$/.test(i.provincia)||pd(i.provincia)===void 0)throw a("provincia");if(i.municipio!==void 0&&(!/^\d{5}$/.test(i.municipio)||!i.municipio.startsWith(i.provincia)))throw a("municipio");if(typeof i.cp!="string"||!/^\d{5}$/.test(i.cp))throw a("cp");if(i.ref!==void 0){if(!rs(i.ref)||n.has(i.ref))throw a("ref");n.add(i.ref)}if(!Array.isArray(i.ficheros)||i.ficheros.length>25+Kc)throw a("ficheros");let s=i.ficheros.filter(l=>l?.caja==="movimientos").length;if(i.ficheros.length-s>25||s>Kc)throw a("ficheros");let o=0;i.ficheros.forEach((l,c)=>{let f=u=>e(`viviendas[${r}].ficheros[${c}].${u}`);if(!DS.includes(l.caja))throw f("caja");if(typeof l.nombre!="string"||l.nombre.trim()==="")throw f("nombre");if(!(l.bytes instanceof Uint8Array)||l.bytes.byteLength===0)throw f("bytes");if(typeof l.mime!="string"||l.mime==="")throw f("mime");if(l.caja==="foto"&&++o>1)throw f("caja")})})}function xX(t,e){let n=t&&typeof t=="object"?t:{};if(n.ok!==!0)return{ok:!1,motivo:typeof n.motivo=="string"?n.motivo:"servidor",transitorio:n.transitorio===!0};let i={ok:!1,motivo:"servidor",transitorio:!1};if(e?.ok){if(n.tipo==="contrato"&&e.tipo==="contrato")return{ok:!0,tipo:"contrato",contrato:e.contrato,huella:n.huella,direccion:e.direccion};if(n.tipo==="movimiento"&&e.tipo==="movimiento"){let a=n.filas,s=n.indices;return!Array.isArray(a)||!Array.isArray(s)||s.length!==a.length||!s.every(l=>Number.isInteger(l)&&l>=0&&l<e.rotulos.length)?i:{ok:!0,tipo:"movimiento",filas:a.map((l,c)=>{let f=e.rotulos[s[c]];return f?{...l,rotulo:f}:l}),filasFuera:typeof n.filasFuera=="number"?n.filasFuera:0,direccion:e.direccion}}return i}let r=typeof n.direccion=="string"?n.direccion:null;return n.tipo==="contrato"&&n.contrato&&typeof n.contrato=="object"?{ok:!0,tipo:"contrato",contrato:n.contrato,huella:n.huella,direccion:r}:n.tipo==="movimiento"&&Array.isArray(n.filas)?{ok:!0,tipo:"movimiento",filas:n.filas,filasFuera:typeof n.filasFuera=="number"?n.filasFuera:0,direccion:r}:i}var wX=t=>({sobreWrappedKeyB64:un(t.wrapped_key),sobreCipherB64:un(t.cipher),sobreIvB64:un(t.iv)});async function SD(t,e,n){let i={ref:typeof e?.ref=="string"?e.ref:"",paso:"validar",creado:n?.creado==="desconocido"?"desconocido":!1};try{bX(e);let r=t.dormir??(u=>new Promise(d=>setTimeout(d,u))),a=t.fetch??globalThis.fetch,s=e.email.trim();i.paso="foto";let o=[];for(let[u,d]of e.viviendas.entries()){let h=[];for(let[p,m]of d.ficheros.entries()){if(m.caja!=="foto"){h.push(m);continue}Object.assign(i,{vivienda:d.ref??u,caja:"foto",fichero:p});let g=await GS(m.bytes,m.mime);if(!g.ok)throw Ln(g.error,{campo:"foto"});h.push({...m,bytes:g.bytes,mime:g.mime,nombre:m.nombre.replace(/\.[^.]+$/,"")+".jpg"})}o.push(h)}delete i.vivienda,delete i.caja,delete i.fichero;let l=await t.descifrador.publicaAgenciaSpki(),c=zr(l);i.paso="abrir";let f;try{f=await vX(t,e.ref,i)}catch(u){if(u instanceof tn&&u.code==="REF_YA_CREADA"){let d=u.problema?.client_id;if(i.creado=!0,typeof d!="string"||!CD.test(d))throw u;return Object.assign(i,{paso:"enlace",clientId:d}),await TD(t,d,null,null)}throw u}try{return await yX(t,e,s,o,f,c,l,r,a,i)}catch(u){throw u instanceof tn&&uX.has(u.code)&&await t.http.peticion({metodo:"DELETE",ruta:`/v1/borradores/${f}`,idempotencia:!1}).catch(()=>{}),u}}catch(r){throw nf(r,i)}}async function vX(t,e,n){let i=async()=>{let o=await t.http.peticion({metodo:"POST",ruta:"/v1/borradores",cuerpo:{tipo:"alta",ref:e}}),l=o?.borradorId;if(typeof o?.nuevo!="boolean"||typeof l!="string"||!CD.test(l))throw Ln("ERROR",{},502);return{id:l,nuevo:o.nuevo}},r=o=>(n.creado==="desconocido"&&(n.creado=!1),o),a=await i();if(a.nuevo)return r(a.id);try{await t.http.peticion({metodo:"DELETE",ruta:`/v1/borradores/${a.id}`,idempotencia:!1})}catch(o){if(!(o instanceof tn&&o.code==="NO_ENCONTRADO"))throw o instanceof tn&&o.code==="BORRADOR_CERRADO"&&(n.creado="desconocido"),o}let s=await i();if(!s.nuevo)throw Ln("REF_OCUPADA",{},409);return r(s.id)}async function yX(t,e,n,i,r,a,s,o,l,c){let f=t.http;c.paso="vivienda";let u=i.some(L=>L.some(D=>D.caja==="contract"||D.caja==="movimientos")),d=null;if(u){let L=await f.peticion({metodo:"GET",ruta:"/v1/lector"});L?.modo==="navegador"&&typeof L.parser=="string"&&Array.isArray(L.conceptos)&&(d={parser:L.parser,conceptos:L.conceptos})}let h=i.some(L=>L.length>0),p=ID(t.concurrenciaFicheros)??(h?await t.concurrenciaSugerida?.()??4:4),m=[];for(let L=0;L<e.viviendas.length;L++){let D=e.viviendas[L];c.paso="vivienda",c.vivienda=D.ref??L;let G=D.direccion.trim(),P=D.cp,F=await xr({v:1,direccion:G,cp:P,etiqueta:G.slice(0,200)},a),se=await f.peticion({metodo:"POST",ruta:`/v1/borradores/${r}/viviendas`,cuerpo:{...wX(F),orden:L}});if(typeof se?.viviendaId!="string")throw Ln("ERROR",{},502);let Z={entrada:D,viviendaId:se.viviendaId,subidos:[]};m.push(Z);let ge=i[L];Z.subidos=await kX(ge,p,async(he,xe)=>{let K={...c,paso:"fichero",caja:he.caja,fichero:xe};try{return await jX(t,l,o,r,L,Z,he,a,d,K)}catch(q){throw nf(q,K)}})}delete c.vivienda,c.paso="listo";let g=await f.peticion({metodo:"GET",ruta:`/v1/borradores/${r}`});if(g?.listo!==!0){let L=(g?.ficheros??[]).filter(D=>D.estado==="pendiente"||D.estado==="error");throw Ln("BORRADOR_NO_LISTO",{ficheros:L.map(D=>({estado:D.estado,motivo:D.motivo??null}))})}c.paso="paquete";let b=(t.hoy??yS)(),x=m.map((L,D)=>{let G=F=>L.subidos.filter(se=>se.caja===F),P=mD({contratos:G("contract").flatMap(F=>F.respuesta?.ok&&F.respuesta.tipo==="contrato"?[{ficheroId:F.ficheroId,file:F.file,sha256:F.sha,lectura:zP({ok:!0,contrato:F.respuesta.contrato})}]:[]),actas:G("acta").flatMap(F=>F.acta?[{ficheroId:F.ficheroId,file:F.file,resultado:F.acta}]:[]),tenantId:G("tenant_id").map(F=>F.file),otros:G("other").map(F=>F.file),movimientos:G("movimientos").map(F=>F.file),hoy:b});if(P.errores.length>0)throw Ln("VIVIENDA_INCOMPLETA",{vivienda:L.entrada.ref??D,motivos:P.errores.map(F=>({codigo:F.codigo,...F.ficheroId?{ficheroId:F.ficheroId}:{},...F.inicio?{inicio:F.inicio}:{},...F.faltan?{faltan:F.faltan}:{}}))});return P});for(let L of x)for(let D of L.actasCasadas)await f.peticion({metodo:"POST",ruta:`/v1/borradores/${r}/ficheros/${D.ficheroId}/acta`,cuerpo:{contratoFicheroId:D.contratoFicheroId,fechaLlaves:D.fechaLlaves}});let w=await WP(),k=KP(),v=await YP(w.privadaPkcs8,k,r),y=[];for(let L=0;L<m.length;L++){let D=m[L],G=x[L],P=D.subidos.map(xe=>({...fD(xe.ficheroId,xe.file,xe.caja),ficheroId:xe.ficheroId,estado:xe.respuesta?.ok?"leido":"no_aplica",rc:xe.respuesta?.ok&&xe.respuesta.tipo==="contrato"?lD(xe.respuesta.contrato):null})),F=new Map(D.subidos.map(xe=>[xe.ficheroId,xe.idemKey])),se=pD({ficheros:G.ficheros,bloques:G.bloques,pre:P},xe=>F.get(xe));if(!se.ok)throw Ln("VIVIENDA_INCOMPLETA",{vivienda:D.entrada.ref??L,motivos:[{codigo:se.error.codigo}]});let Z=D.entrada.direccion.trim(),ge=cD(P),he=ge&&zS.test(ge)?ge:null;y.push({viviendaBorradorId:D.viviendaId,ref:D.entrada.ref??null,provincia:D.entrada.provincia,municipio:D.entrada.municipio??null,datos:{direccion:Z,cp:D.entrada.cp,etiqueta:Z.slice(0,200),...he?{cadastral_ref:he}:{}},paquete:se.paquete,porcentajeDeclarado:se.paquete?.porcentaje_titularidad??null,ficheros:D.subidos.map(xe=>({ficheroId:xe.ficheroId,idemKey:xe.idemKey,wrappedFileKey:xe.wrapped,lectura:xe.respuesta?hD(xe.respuesta):null}))})}let A=e.nombre?.trim(),I=await JP({borrador:{cliente:{email:n,ref:e.ref,datos:A?{nombre:A}:{}},viviendas:y},privadaAgencia:await t.descifrador.clavePrivadaSobres(),publicaAgencia:a,publicaEfimera:w.publicaSpki}),S=await il({v:1,secretoEnlace:gd(k)},s);c.paso="lote";let E=(await f.peticion({metodo:"POST",ruta:"/v1/lotes",cuerpo:{operacion:"clientes.crear",modo:"ejecutar"}}))?.id;if(typeof E!="string")throw Ln("ERROR",{},502);c.loteId=E,c.indice=0;let _=await f.peticion({metodo:"POST",ruta:`/v1/lotes/${E}/elementos`,cuerpo:{elementos:[{datos:{ref:e.ref,borrador:r,lote:I,efimera:{cipherB64:un(v.cipher),ivB64:un(v.iv)},sobreEnlace:S}}]}});if(_?.aceptados!==1){let L=_?.rechazados?.[0];throw Ln(L?.code??"ENTRADA_INVALIDA",{errores:L?.errores??null})}c.creado="desconocido",await f.peticion({metodo:"POST",ruta:`/v1/lotes/${E}/cerrar`});let T=await EX(t,E,o);if(T.estado==="error"){let L=T.error?.code;throw c.creado=L==="EN_CURSO"||L==="ESTADO_CAMBIADO"?"desconocido":!1,Ln(T.error?.code??"ERROR",{...T.error?.campos?{campos:T.error.campos}:{}})}let O=T.id??(typeof T.datos?.client_id=="string"?T.datos.client_id:null);if(typeof O!="string")throw Ln("ERROR",{},502);if(c.clientId=O,T.estado==="creado"&&(c.creado=!0),c.paso="enlace",T.estado==="creado"){let L=T.datos?.correo==="enviado"?"enviado":"no_enviado",D=await ED(t,O,k,null);return{estado:"creado",clientId:O,enlace:D,correo:L,...T.datos?.motivo==="CUPO_DIARIO"||T.datos?.motivo==="ENTORNO_PRUEBAS"?{motivo:T.datos.motivo}:{}}}return c.creado=!0,TD(t,O,T.datos?.enlace==="activado",T.datos?.s_sellado??null)}async function kX(t,e,n){let i=new Array(t.length),r=new Map,a=0,s=async()=>{for(;r.size===0;){let o=a++;if(o>=t.length)return;try{i[o]=await n(t[o],o)}catch(l){r.set(o,l)}}};if(await Promise.all(Array.from({length:Math.min(e,t.length)},s)),r.size>0)throw r.get(Math.min(...r.keys()));return i}async function jX(t,e,n,i,r,a,s,o,l,c){let f=t.http,u=await bD(s.bytes),d=await LS(s.bytes,s.nombre,o),h=await f.peticion({metodo:"POST",ruta:`/v1/borradores/${i}/ficheros`,cuerpo:{viviendaId:a.viviendaId,caja:s.caja,sizeBytes:d.blob.length,mime:s.mime,nombreCipherB64:un(d.nombre_cipher),nombreIvB64:un(d.nombre_iv),wrappedFileKeyB64:un(d.wrapped_file_key),sha256:u}});if(typeof h?.ficheroId!="string"||typeof h.uploadUrl!="string")throw Ln("ERROR",{},502);let p=h.ficheroId;await AX(e,h.uploadUrl,d.blob,n);let m={ficheroId:p,idemKey:globalThis.crypto.randomUUID(),caja:s.caja,file:new File([],s.nombre,{type:s.mime}),wrapped:d.wrapped_file_key,sha:u,respuesta:null,acta:null};if(s.caja==="acta")m.acta=await SX(t,s);else if(s.caja==="contract"||s.caja==="movimientos"){c.paso="leer";let g=await IX(t,n,i,p,s,l);if(!g.ok)throw Ln("FICHERO_NO_LEIDO",{vivienda:a.entrada.ref??r,caja:s.caja,motivo:g.motivo});m.respuesta=g,c.paso="cotejar",await CX(t,i,p,a,r,g)}return m}async function AX(t,e,n,i){let r=0;for(let a=0;a<3;a++){a>0&&await i(500*2**a);try{let s=await t(e,{method:"PUT",headers:{"content-type":"application/octet-stream","cache-control":"max-age=3600","x-upsert":"false"},body:n});if(s.ok)return;if(r=s.status,s.status<500&&s.status!==429)break}catch{r=0}}throw Ln("SUBIDA_FALLIDA",{status:r},502)}async function SX(t,e){let n={ok:!1,motivo:"acta_ilegible"};try{let i=await H1(e.bytes,e.mime,t.extraer?{extraer:t.extraer}:{}),r=iP(i);return r?r.lector.leer(i):n}catch{return n}}async function IX(t,e,n,i,r,a){let s=0,o=0;for(;;){let l;try{let c=await t.borradores.leerDetalle(n,i,r.bytes,{caja:r.caja,lector:a,mime:r.mime,...t.extraer?{extraer:t.extraer}:{}});l=xX(c.respuesta,c.local)}catch(c){if(c instanceof tn&&dX.has(c.code)&&++s<hX){await e(t.intervaloMs??1e3);continue}throw c}if(!l.ok&&l.transitorio&&++o<=pX){await e(t.intervaloMs??1e3);continue}return l}}async function CX(t,e,n,i,r,a){let s=dD(i.entrada.direccion,a.direccion);if(a.tipo==="movimiento"){if(await t.http.peticion({metodo:"POST",ruta:`/v1/borradores/${e}/ficheros/${n}/direccion`,cuerpo:{ok:s==="casa"}}),s!=="casa")throw Ln("DIRECCION_DISTINTA",{vivienda:i.entrada.ref??r,caja:"movimientos",motivo:s});return}if(s==="distinta")throw Ln("DIRECCION_DISTINTA",{vivienda:i.entrada.ref??r,caja:"contract",motivo:s})}async function EX(t,e,n){let i=t.intervaloMs??1e3,r=t.maxEsperaMs??mX,a=0;for(;;){let o=(await t.http.peticion({metodo:"GET",ruta:`/v1/lotes/${e}/resultados`,query:{limite:1}}))?.resultados?.[0];if(o&&o.estado!=="pendiente")return o;if(a>=r)throw Ln("TIEMPO_AGOTADO",{loteId:e},504);await n(i),a+=Math.max(i,1)}}async function TX(t,e){let n=e;if(!n||typeof n.wrapped_key_b64!="string"||typeof n.cipher_b64!="string"||typeof n.iv_b64!="string")throw Ln("ERROR",{},502);let i=await t.descifrador.abrirSobre(ob(n)),r=JSON.parse(new TextDecoder().decode(i)),a=typeof r.secretoEnlace=="string"?XP(r.secretoEnlace):null;if(!a)throw Ln("ERROR",{},502);return a}async function ED(t,e,n,i){let r;try{r=await t.http.peticion({metodo:"POST",ruta:`/v1/clientes/${e}/enlace`,idempotencia:!1})}catch(s){if(s instanceof tn&&s.code==="ENLACE_NO_REENVIABLE")return"activado";throw s}if(typeof r?.token!="string"||r.token==="")throw Ln("ERROR",{},502);let a=n??await TX(t,i??r.sobre);return ZP({origin:t.origen,clientId:e,token:r.token,secreto:a})}async function TD(t,e,n,i){let r=n?"activado":await ED(t,e,null,i);return{estado:"ya_existia",clientId:e,enlace:r,correo:"no_enviado"}}function KS(t){let e={...t,concurrenciaSugerida:t.concurrenciaSugerida??fX(t.http)},n=e.dormir??(i=>new Promise(r=>setTimeout(r,i)));return{crear:(i,r)=>SD(e,i,r),crearVarios:(i,r)=>xd((a,s)=>SD(e,a,s),i,r,n)}}function _D(t){let e=dd.safeParse(t);return e.success?e.data.paquete:t}function qD(t,e){let n=dd.safeParse(t);if(!n.success)return e;let i=new Set(ud(e)),r=Xc.safeParse(n.data.paquete),a=r.success?ud(r.data):[],s=[...new Set([...n.data.alta.perdidos??[],...a.filter(l=>!i.has(l))])],o=Object.fromEntries(Object.entries(n.data.alta.documentos).filter(([l])=>i.has(l)));return{v:1,paquete:e,alta:{documentos:o,...s.length>0?{perdidos:s}:{}}}}var _X=t=>t,XS=t=>({wrapped_key:zr(t.wrapped_key_b64),cipher:zr(t.cipher_b64),iv:zr(t.iv_b64)}),YS=t=>({wrapped_key:un(t.wrapped_key),cipher:un(t.cipher),iv:un(t.iv)});async function qX(t){return new Uint8Array(await globalThis.crypto.subtle.digest("SHA-256",_X(t)))}async function RD(t){let{pendiente:e,privada:n}=t,i=zr(e.publicaClienteB64),r=0,a={sobres:[],ficherosAusentes:[],ficherosIlegibles:[]},s=null;if(e.sobreCliente){let d,h=!1;try{d=await Zc(XS(e.sobreCliente),n),h=!0}catch{a.sobres.push(e.sobreCliente.id),r++}if(h)try{let p=BS.parse(d);s=YS(await xr(p,i))}catch{r++}}let o=[];for(let d of e.sobreCliente?e.viviendas:[])try{let h=eD.parse(await Zc(XS(d.sobre),n));o.push({property_id:d.propertyId,...YS(await xr(h,i))})}catch{r++}let l=[],c=[],f=[...e.ficheros].sort((d,h)=>+(h.caja==="foto")-+(d.caja==="foto"));for(let d of f)try{let h=zr(d.wrappedFileKeyB64),p=await md(h,n,i);l.push({idem_key:d.idemKey,wrapped_file_key:un(p)})}catch{c.push(d.idemKey)}let u=[];for(let d of e.paquetes){let h;try{h=await Zc(XS(d.sobre),n)}catch{a.sobres.push(d.sobreId),r++;continue}try{let p=hd(t.desenvolverPaquete?t.desenvolverPaquete(h):h);if(!p.ok){r++;continue}let m=qD(h,p.paquete);u.push({property_id:d.propertyId,...YS(await xr(m,i))})}catch{r++}}return{lote:{huella_publica:un(await qX(i)),perfil:s,viviendas:o,paquetes:u,documentos:l},fallidos:c,sobresIlegibles:r,permanentes:a}}var RX=20;function OD(t,e=RX){if(t.documentos.length<=e)return[t];let n=[];for(let i=0;i<t.documentos.length;i+=e){let r=t.documentos.slice(i,i+e),s=i+e>=t.documentos.length?t.paquetes:[];n.push(i===0?{...t,paquetes:s,documentos:r}:{huella_publica:t.huella_publica,perfil:null,viviendas:[],paquetes:s,documentos:r})}return n}function PD(t,e=200){let n=[...t.sobres],i=[...t.ficherosAusentes],r=[...t.ficherosIlegibles],a=[];for(;n.length+i.length+r.length>0;){let s=n.splice(0,e),o=i.splice(0,e),l=r.splice(0,e-o.length);a.push({sobres:s,ficherosAusentes:o,ficherosIlegibles:l})}return a}function ZS(t,e,n,i){if(!(t instanceof Map))return[];let r=[];for(let a of e){let s=t.get(a);if(s===void 0)continue;let o=Date.parse(s);Number.isNaN(o)||n.getTime()-o>=i&&r.push(a)}return r}function DD(t,e){return t.documentos>0||(t.paquetes??0)>0||e?"progreso":"sin-progreso"}async function ND(t){let e=0,n=0;for(let i=0;i<50;i++){let r=await t.leerPendientes();if(!r)break;let a=r.filter(s=>(t.intentos.get(s.clienteId)??0)<t.maxIntentos);if(a.length===0)break;for(let s of a){t.intentos.set(s.clienteId,(t.intentos.get(s.clienteId)??0)+1),n++;let o="fallo";try{o=await t.entregar(s)}catch{o="fallo"}o==="progreso"&&(e++,t.intentos.delete(s.clienteId))}}return{progreso:e,intentados:n}}var fb=new Set([401,403]),OX=3,PX=new Set(["LOTE_ESTADO","NO_ENCONTRADO","PRECONDICION_FALLIDA"]),JS=t=>t instanceof tn&&PX.has(t.code),DX=t=>({clienteId:t.cliente_id,publicaClienteB64:t.publica_cliente_b64,sobreCliente:t.sobre_cliente,viviendas:t.viviendas.map(e=>({propertyId:e.property_id,sobre:e.sobre})),ficheros:t.ficheros.map(e=>({id:e.id,idemKey:e.idem_key,propertyId:e.property_id,wrappedFileKeyB64:e.wrapped_file_key_b64,...e.caja!==void 0?{caja:e.caja}:{}})),paquetes:t.paquetes.map(e=>({sobreId:e.sobre_id,propertyId:e.property_id,sobre:e.sobre}))});function QS(t){async function e(){let n=await t.descifrador.clavePrivadaSobres(),i=new Map,r=new Map,a=new Set,s=[],o=new Map,l=0,c=[],f={relojServidor:null,corte:null,faltoFecha:!1,alInicio:null},u=y=>{let A=Date.parse(y.get("date")??"");if(Number.isNaN(A)){f.faltoFecha=!0;return}(f.relojServidor===null||A>f.relojServidor)&&(f.relojServidor=A)},d=y=>{for(let[A,I]of Object.entries(y)){let S=i.get(A);(S===void 0||Date.parse(I)<Date.parse(S))&&i.set(A,I)}},h=y=>{let A=r.get(y);return A||r.set(y,A={ausentes:new Set,ilegibles:new Set}),A},p=y=>y instanceof tn?y.code:"ERROR";function m(y,A){if(A instanceof tn&&fb.has(A.status)){f.corte??=A;return}let I=p(A);s.some(S=>S.cliente_id===y&&S.code===I)||s.push({cliente_id:y,code:I})}async function g(y){if(f.corte)return"fallo";let A;try{A=await RD({pendiente:y,privada:n,desenvolverPaquete:_D})}catch(_){return m(y.clienteId,_),"fallo"}if(o.set(y.clienteId,Math.max(o.get(y.clienteId)??0,A.sobresIlegibles)),!(A.lote.perfil!==null||A.lote.viviendas.length>0||A.lote.paquetes.length>0||A.lote.documentos.length>0))return"sin-progreso";let S=0,C=0,E=!1;for(let[_,T]of OD(A.lote).entries()){let O;try{O=await t.http.peticion({metodo:"POST",ruta:"/v1/mantenimiento/entregas",cuerpo:{cliente_id:y.clienteId,lote:T},idempotencia:!0,alResponder:u})}catch(D){return JS(D)||m(y.clienteId,D),S>0||C>0||E?"progreso":"fallo"}d(O.observaciones??{});let L=h(y.clienteId);for(let D of O.permanentes?.ficheros_ausentes??[])L.ausentes.add(D);for(let D of O.permanentes?.ficheros_ilegibles??[])L.ilegibles.add(D);S+=O.documentos,C+=O.paquetes,_===0&&T.perfil!==null&&(E=!0)}return DD({documentos:S,viviendas:0,paquetes:C},E)}let{progreso:b}=await ND({leerPendientes:async()=>{if(f.corte)return null;let y;try{y=await t.http.peticion({metodo:"GET",ruta:"/v1/mantenimiento",alResponder:u})}catch(A){if(f.alInicio===null||A instanceof tn&&fb.has(A.status))throw A;return m("",A),null}return l=y.ventana_olvido_ms,d(y.observaciones??{}),f.alInicio===null&&(f.alInicio=new Set(Object.keys(y.observaciones??{})),c=y.idos_con_fallidos??[]),y.pendientes.map(DX)},entregar:g,intentos:new Map,maxIntentos:OX});if(f.corte)throw f.corte;let x=0,w=f.relojServidor===null||f.faltoFecha?null:new Date(f.relojServidor),k=y=>f.alInicio?.has(y)===!0&&!a.has(y);for(let[y,A]of w?r:[]){let I={sobres:[],ficherosAusentes:ZS(i,[...A.ausentes].filter(k),w,l),ficherosIlegibles:ZS(i,[...A.ilegibles].filter(k),w,l)};for(let S of PD(I))try{let C=await t.http.peticion({metodo:"POST",ruta:"/v1/mantenimiento/imposibles",idempotencia:!0,cuerpo:{cliente_id:y,sobres:S.sobres,ficheros_ausentes:S.ficherosAusentes,ficheros_ilegibles:S.ficherosIlegibles}});for(let E of[...S.sobres,...S.ficherosAusentes,...S.ficherosIlegibles])a.add(E);x+=C.marcados.sobres+C.marcados.ficheros}catch(C){if(C instanceof tn&&fb.has(C.status))throw C;JS(C)||m(y,C)}}for(let y of c)try{await t.http.peticion({metodo:"POST",ruta:"/v1/mantenimiento/imposibles",idempotencia:!0,cuerpo:{cliente_id:y,sobres:[],ficheros_ausentes:[],ficheros_ilegibles:[]}})}catch(A){if(A instanceof tn&&fb.has(A.status))throw A;JS(A)||m(y,A)}let v=[...o.values()].reduce((y,A)=>y+A,0);return{entregadas:b,imposibles:x,errores:s,sobresSinAbrir:v,relojServidor:f.relojServidor!==null&&!f.faltoFecha}}return{ejecutar:e}}var wd=t=>new tn(422,"ENTRADA_INVALIDA",{code:"ENTRADA_INVALIDA",campo:t}),NX=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,Li=(t,e)=>{if(typeof t!="string"||!NX.test(t))throw wd(e);return t};function MD(t){let e=String(t).trim();return e==="*"||e.startsWith('"')?e:`"v${e.replace(/^v/,"")}"`}function eI(t){let{http:e}=t,n=c=>({cursor:c.cursor,limite:c.limite,estado:c.estado,cambiado_desde:c.cambiado_desde,incluir:c.incluir});async function i(c={}){return e.peticion({metodo:"GET",ruta:"/v1/clientes",query:n(c)})}async function*r(c={}){let f;for(;;){let u=await i({...c,cursor:f});if(u.clientes.length===0||(yield*u.clientes,u.siguiente===null||u.siguiente===void 0))return;f=u.siguiente}}let a=async(c,f={})=>e.peticion({metodo:"GET",ruta:`/v1/clientes/${Li(c,"clienteId")}`,query:{incluir:f.incluir}});function s(c){let f=c?.ifMatch;if(typeof f!="string"&&typeof f!="number"||String(f).trim()==="")throw wd("ifMatch");return MD(f)}async function o(c,f,u){Li(c,"clienteId");let d=s(u),h=await a(c),p={};if(f.ref!==void 0){if(f.ref!==null&&!rs(f.ref))throw wd("ref");p.ref=f.ref}f.renovacion!==void 0&&(p.renovacion=f.renovacion);let m=h.estado==="invitado",g=[];for(let[x,w]of(f.viviendas??[]).entries()){let k=y=>wd(`viviendas[${x}].${y}`),v={propertyId:Li(w.vivienda,`viviendas[${x}].vivienda`)};if(w.ref!==void 0){if(w.ref!==null&&!rs(w.ref))throw k("ref");v.ref=w.ref}if(w.renovacion!==void 0&&(v.renovacion=w.renovacion),w.direccion!==void 0||w.cp!==void 0){let y=w.direccion?.trim()??"",A=w.cp?.trim()??"";if(!m||y===""||y.length>300)throw k("direccion");if(!/^\d{5}$/.test(A))throw k("cp");let I=LP(A);if(!I)throw new tn(422,"PROVINCIA_INVALIDA",{code:"PROVINCIA_INVALIDA",campo:`viviendas[${x}].cp`});if(v.provincia=I.code,w.municipio===void 0||w.municipio!==null&&(!/^\d{5}$/.test(w.municipio)||!w.municipio.startsWith(I.code)))throw k("municipio");v.municipio=w.municipio,v.sobre=await il(gD(y,A),await t.descifrador.publicaAgenciaSpki())}else w.municipio!==void 0&&(v.municipio=w.municipio);g.push(v)}if(f.nombre!==void 0){let x=(f.nombre??"").trim();if(x.length>200)throw wd("nombre");let w=await t.descifrador.publicaAgenciaSpki();m&&!h.desde_borrador&&(p.sobreCliente=await il(x?{v:1,nombre:x}:{v:1},w)),p.copiaNombre=x?await il({v:1,nombre:x},w):null}return g.length>0&&(p.viviendas=g),{ok:!0,version:(await e.peticion({metodo:"PATCH",ruta:`/v1/clientes/${c}`,cuerpo:p,cabeceras:{"if-match":d}}))?.version??null}}let l=c=>({ok:!0,version:c?.version??null});return{clientes:{listar:r,listarPagina:i,leer:a,editar:o,async desvincular(c,f){Li(c,"clienteId");let u=await e.peticion({metodo:"POST",ruta:`/v1/clientes/${c}/desvincular`,cuerpo:{},cabeceras:{"if-match":s(f)}});return l(u)},async correo(c,f){return Li(c,"clienteId"),l(await e.peticion({metodo:"PUT",ruta:`/v1/clientes/${c}/correo`,cuerpo:{correo:f}}))},async revocarEnlace(c){return Li(c,"clienteId"),l(await e.peticion({metodo:"DELETE",ruta:`/v1/clientes/${c}/enlace`}))}},viviendas:{async listar(c){return(await e.peticion({metodo:"GET",ruta:`/v1/clientes/${Li(c,"clienteId")}/viviendas`})).viviendas}},remitentes:{async listar(){return(await e.peticion({metodo:"GET",ruta:"/v1/remitentes"})).remitentes},anadir:c=>e.peticion({metodo:"POST",ruta:"/v1/remitentes",cuerpo:{correo:c}}),async quitar(c){return(await e.peticion({metodo:"POST",ruta:"/v1/remitentes/quitar",cuerpo:{correo:c}})).remitentes}},creditos:{leer:()=>e.peticion({metodo:"GET",ruta:"/v1/creditos"})},renovacion:{leer:()=>e.peticion({metodo:"GET",ruta:"/v1/renovacion"}),fijar:c=>e.peticion({metodo:"PUT",ruta:"/v1/renovacion",cuerpo:c})},webhooks:{async listar(){return(await e.peticion({metodo:"GET",ruta:"/v1/webhooks"})).webhooks},crear:c=>e.peticion({metodo:"POST",ruta:"/v1/webhooks",cuerpo:c}),borrar:async c=>e.peticion({metodo:"DELETE",ruta:`/v1/webhooks/${Li(c,"webhookId")}`}),rotarSecreto:async c=>e.peticion({metodo:"POST",ruta:`/v1/webhooks/${Li(c,"webhookId")}/secreto`,cuerpo:{}}),entregas:async(c,f={})=>e.peticion({metodo:"GET",ruta:`/v1/webhooks/${Li(c,"webhookId")}/entregas`,query:{estado:f.estado,cursor:f.cursor,limite:f.limite}}),reenviar:async(c,f)=>e.peticion({metodo:"POST",ruta:`/v1/webhooks/${Li(c,"webhookId")}/entregas/${Li(f,"entregaId")}/reenviar`,cuerpo:{}})}}}function FD(t){let e=sf({apiKey:t.apiKey,baseUrl:t.baseUrl,fetch:t.fetch}),n=PS(e),i=KS({http:e,borradores:n,descifrador:t.descifrador,fetch:t.fetch,origen:new URL(t.baseUrl??hb).origin,extraer:t.extraer,hoy:t.hoy,intervaloMs:t.intervaloMs,maxEsperaMs:t.maxEsperaMs,dormir:t.dormir,concurrenciaFicheros:t.concurrenciaFicheros}),r=QS({http:e,descifrador:t.descifrador}),a=eI({http:e,descifrador:t.descifrador});return{peticion:e.peticion,http:e,descifrador:t.descifrador,borradores:n,mantenimiento:r,clientes:{...i,...a.clientes},viviendas:a.viviendas,remitentes:a.remitentes,creditos:a.creditos,renovacion:a.renovacion,webhooks:a.webhooks}}var voe=["clave-integracion","alta","mantenimiento","lector"],BD=`controldealquiler <comando>
187
+ `):t}async function nX(t){if(t.pem!==void 0&&t.pem.trim()!=="")return vD(t.pem);let e=(t.env??process.env)[tf];if(e!==void 0&&e.trim()!=="")return vD(e);if(t.ruta)return eX(t.ruta,"utf8");throw new as(`Falta la clave de integraci\xF3n: pasa el PEM, define ${tf} o indica la ruta del fichero`)}function rX(t){try{return yD(t)}catch{throw new as("La clave de integraci\xF3n no es un PEM PKCS#8 v\xE1lido (sin contrase\xF1a)")}}function WS(t,e){let n=null,i=()=>n??=(async()=>{let r=await nX(t),a=new Uint8Array(rX(r).export({type:"pkcs8",format:"der"})),s=await HS(a),o=await US(e,s),{pkcs8_b64:l}=JSON.parse(new TextDecoder().decode(o));if(typeof l!="string")throw new Error("sobre de integraci\xF3n con formato inesperado");let c=Buffer.from(l,"base64"),f=await HS(new Uint8Array(c)),u=new Uint8Array(tX(yD({key:c,format:"der",type:"pkcs8"})).export({type:"spki",format:"der"}));return{privada:f,spki:un(u)}})();return{async abrirSobre(r){return US(r,(await i()).privada)},async publicaAgenciaSpki(){return(await i()).spki},async clavePrivadaSobres(){return(await i()).privada}}}var al=class extends tn{ref;paso;vivienda;caja;fichero;loteId;indice;clientId;creado;reintentable;consejo;corta;constructor(e,n,i,r){super(n.status,n.code,n.problema,n.requestId),this.name="ErrorAlta",this.message=`${rs(e.ref)?e.ref:"-"}: ${e.paso} \u2192 ${n.status} ${n.code}`,r!==void 0&&(this.cause=r),this.ref=e.ref,this.paso=e.paso,this.vivienda=e.vivienda,this.caja=e.caja,this.fichero=e.fichero,this.loteId=e.loteId,this.indice=e.indice,this.clientId=e.clientId,this.creado=e.creado,this.reintentable=i.reintentable,this.consejo=i.consejo,this.corta=i.corta}},iX=/^(E[A-Z]+|UND_ERR_[A-Z_]+)$/;function kD(t){if(t instanceof tn)return{status:t.status,code:t.code,requestId:t.requestId};if(t instanceof Vs)return{status:0,code:t.code,requestId:null};if(t instanceof as)return{status:0,code:"CLAVE_INTEGRACION",requestId:null};if(t instanceof TypeError){let e=t.cause?.code;if(typeof e=="string"&&iX.test(e))return{status:0,code:"RED",requestId:null}}return{status:0,code:"LOCAL",requestId:null}}var aX=new Set(["KEY_DE_PRUEBAS","KEY_DE_PRODUCCION","API_DESACTIVADA","CUOTA_LECTURAS_AGOTADA","TOPE_BORRADORES","ENTORNO_MAL_CONFIGURADO","CLAVE_INTEGRACION"]),sX=new Set(["RED","TRANSITORIO","LEYENDO","LIMITE_SUPERADO","TIEMPO_AGOTADO","IDEMPOTENCIA_EN_CURSO","LECTOR_VIEJO","REF_OCUPADA"]);function cb(t,e,n){return e===401||e===403||aX.has(t)?{reintentable:!1,consejo:"cuenta",corta:!0}:n.creado==="desconocido"?{reintentable:!0,consejo:"repetir",corta:!1}:sX.has(t)||e>=500||(t==="BORRADOR_CERRADO"||t==="NO_ENCONTRADO")&&n.paso!=="abrir"?{reintentable:!0,consejo:"repetir",corta:!1}:n.paso==="validar"||n.paso==="foto"&&(t==="IMAGEN_NO_PROCESABLE"||t==="TOPE_CAJA")?{reintentable:!1,consejo:"manifiesto",corta:!1}:{reintentable:!1,consejo:"cuenta",corta:!1}}function nf(t,e){if(t instanceof al)return t;let{status:n,code:i,requestId:r}=kD(t),a=t instanceof tn?t.problema:{code:i};return new al({...e},{status:n,code:i,requestId:r,problema:a},cb(i,n,e),t)}var oX=2e3,lX=3e4,jD=3,AD=(t,e,n,i)=>typeof t=="number"&&Number.isFinite(t)?Math.min(n,Math.max(e,Math.trunc(t))):i;function cX(t,e){return{ref:t.ref,paso:t.paso,vivienda:t.vivienda,caja:t.caja,fichero:t.fichero,loteId:t.loteId,indice:t.indice,clientId:t.clientId,creado:t.creado,status:t.status,code:t.code,requestId:t.requestId,reintentable:t.reintentable,consejo:t.consejo,intentos:e}}async function xd(t,e,n={},i=r=>new Promise(a=>setTimeout(a,r))){let r=AD(n.aLaVez,1,2,1),a=AD(n.repetir,0,2,1),s={completados:[],fallidos:[],noIntentados:[],cortadoPor:null},o=new Set,l=[];for(let g of e){let b=typeof g?.ref!="string";b||o.has(g.ref)?s.fallidos.push({ref:b?"-":g.ref,paso:"validar",creado:!1,status:422,code:"ENTRADA_INVALIDA",requestId:null,reintentable:!1,consejo:"manifiesto",intentos:0}):(o.add(g.ref),l.push(g))}let c=0,f=0,u=0,d=new Set,h=g=>{f=g==="RED"?f+1:0,u=g==="TIEMPO_AGOTADO"?u+1:0};async function p(g){let b;for(let x=1;;x++)try{let w=await t(g,b);s.completados.push({...w,ref:g.ref,intentos:x}),h(null);return}catch(w){let k=nf(w,{ref:g.ref,paso:"validar",creado:b?.creado??!1});if(k.reintentable&&!k.corta&&x<=a&&!s.cortadoPor&&(b=k.creado==="desconocido"?{creado:"desconocido"}:void 0,await i(k.creado==="desconocido"?lX:oX),!s.cortadoPor))continue;s.fallidos.push(cX(k,x)),h(k.code),!s.cortadoPor&&(k.corta||f>=jD||u>=jD)&&(s.cortadoPor={status:k.status,code:k.code,requestId:k.requestId});return}}async function m(){for(;!s.cortadoPor&&c<l.length;){let g=l[c++];d.add(g.ref),await p(g)}}return await Promise.all(Array.from({length:r},()=>m())),s.noIntentados=l.filter(g=>!d.has(g.ref)).map(g=>g.ref),s}function ID(t){return typeof t=="number"&&Number.isFinite(t)?Math.min(8,Math.max(1,Math.trunc(t))):null}function fX(t){let e=null;return()=>(e??=t.peticion({metodo:"GET",ruta:"/v1/yo"}).then(n=>ID(n?.limites?.concurrencia_ficheros)??4,()=>4),e)}var Ln=(t,e={},n=422)=>new tn(n,t,{code:t,...e}),uX=new Set(["ENTRADA_INVALIDA","IMAGEN_NO_PROCESABLE","FICHERO_NO_LEIDO","DIRECCION_DISTINTA","VIVIENDA_INCOMPLETA","BORRADOR_NO_LISTO"]),dX=new Set(["TRANSITORIO","LEYENDO"]),hX=3,pX=2,mX=12e4,CD=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,gX=/^[^\s@]+@[^\s@]+\.[^\s@]+$/;function bX(t){let e=i=>Ln("ENTRADA_INVALIDA",{campo:i});if(typeof t.ref!="string"||!rs(t.ref))throw e("ref");if(typeof t.email!="string"||t.email.trim().length>254||!gX.test(t.email.trim()))throw e("email");if(t.nombre!==void 0&&(typeof t.nombre!="string"||t.nombre.trim().length>200))throw e("nombre");if(!Array.isArray(t.viviendas)||t.viviendas.length<1||t.viviendas.length>50)throw e("viviendas");let n=new Set;t.viviendas.forEach((i,r)=>{let a=l=>e(`viviendas[${r}].${l}`);if(typeof i.direccion!="string"||i.direccion.trim()===""||i.direccion.trim().length>300)throw a("direccion");if(typeof i.provincia!="string"||!/^\d{2}$/.test(i.provincia)||pd(i.provincia)===void 0)throw a("provincia");if(i.municipio!==void 0&&(!/^\d{5}$/.test(i.municipio)||!i.municipio.startsWith(i.provincia)))throw a("municipio");if(typeof i.cp!="string"||!/^\d{5}$/.test(i.cp))throw a("cp");if(i.ref!==void 0){if(!rs(i.ref)||n.has(i.ref))throw a("ref");n.add(i.ref)}if(!Array.isArray(i.ficheros)||i.ficheros.length>25+Kc)throw a("ficheros");let s=i.ficheros.filter(l=>l?.caja==="movimientos").length;if(i.ficheros.length-s>25||s>Kc)throw a("ficheros");let o=0;i.ficheros.forEach((l,c)=>{let f=u=>e(`viviendas[${r}].ficheros[${c}].${u}`);if(!DS.includes(l.caja))throw f("caja");if(typeof l.nombre!="string"||l.nombre.trim()==="")throw f("nombre");if(!(l.bytes instanceof Uint8Array)||l.bytes.byteLength===0)throw f("bytes");if(typeof l.mime!="string"||l.mime==="")throw f("mime");if(l.caja==="foto"&&++o>1)throw f("caja")})})}function xX(t,e){let n=t&&typeof t=="object"?t:{};if(n.ok!==!0)return{ok:!1,motivo:typeof n.motivo=="string"?n.motivo:"servidor",transitorio:n.transitorio===!0};let i={ok:!1,motivo:"servidor",transitorio:!1};if(e?.ok){if(n.tipo==="contrato"&&e.tipo==="contrato")return{ok:!0,tipo:"contrato",contrato:e.contrato,huella:n.huella,direccion:e.direccion};if(n.tipo==="movimiento"&&e.tipo==="movimiento"){let a=n.filas,s=n.indices;return!Array.isArray(a)||!Array.isArray(s)||s.length!==a.length||!s.every(l=>Number.isInteger(l)&&l>=0&&l<e.rotulos.length)?i:{ok:!0,tipo:"movimiento",filas:a.map((l,c)=>{let f=e.rotulos[s[c]];return f?{...l,rotulo:f}:l}),filasFuera:typeof n.filasFuera=="number"?n.filasFuera:0,direccion:e.direccion}}return i}let r=typeof n.direccion=="string"?n.direccion:null;return n.tipo==="contrato"&&n.contrato&&typeof n.contrato=="object"?{ok:!0,tipo:"contrato",contrato:n.contrato,huella:n.huella,direccion:r}:n.tipo==="movimiento"&&Array.isArray(n.filas)?{ok:!0,tipo:"movimiento",filas:n.filas,filasFuera:typeof n.filasFuera=="number"?n.filasFuera:0,direccion:r}:i}var wX=t=>({sobreWrappedKeyB64:un(t.wrapped_key),sobreCipherB64:un(t.cipher),sobreIvB64:un(t.iv)});async function SD(t,e,n){let i={ref:typeof e?.ref=="string"?e.ref:"",paso:"validar",creado:n?.creado==="desconocido"?"desconocido":!1};try{bX(e);let r=t.dormir??(u=>new Promise(d=>setTimeout(d,u))),a=t.fetch??globalThis.fetch,s=e.email.trim();i.paso="foto";let o=[];for(let[u,d]of e.viviendas.entries()){let h=[];for(let[p,m]of d.ficheros.entries()){if(m.caja!=="foto"){h.push(m);continue}Object.assign(i,{vivienda:d.ref??u,caja:"foto",fichero:p});let g=await GS(m.bytes,m.mime);if(!g.ok)throw Ln(g.error,{campo:"foto"});h.push({...m,bytes:g.bytes,mime:g.mime,nombre:m.nombre.replace(/\.[^.]+$/,"")+".jpg"})}o.push(h)}delete i.vivienda,delete i.caja,delete i.fichero;let l=await t.descifrador.publicaAgenciaSpki(),c=zr(l);i.paso="abrir";let f;try{f=await vX(t,e.ref,i)}catch(u){if(u instanceof tn&&u.code==="REF_YA_CREADA"){let d=u.problema?.client_id;if(i.creado=!0,typeof d!="string"||!CD.test(d))throw u;return Object.assign(i,{paso:"enlace",clientId:d}),await TD(t,d,null,null)}throw u}try{return await yX(t,e,s,o,f,c,l,r,a,i)}catch(u){throw u instanceof tn&&uX.has(u.code)&&await t.http.peticion({metodo:"DELETE",ruta:`/v1/borradores/${f}`,idempotencia:!1}).catch(()=>{}),u}}catch(r){throw nf(r,i)}}async function vX(t,e,n){let i=async()=>{let o=await t.http.peticion({metodo:"POST",ruta:"/v1/borradores",cuerpo:{tipo:"alta",ref:e}}),l=o?.borradorId;if(typeof o?.nuevo!="boolean"||typeof l!="string"||!CD.test(l))throw Ln("ERROR",{},502);return{id:l,nuevo:o.nuevo}},r=o=>(n.creado==="desconocido"&&(n.creado=!1),o),a=await i();if(a.nuevo)return r(a.id);try{await t.http.peticion({metodo:"DELETE",ruta:`/v1/borradores/${a.id}`,idempotencia:!1})}catch(o){if(!(o instanceof tn&&o.code==="NO_ENCONTRADO"))throw o instanceof tn&&o.code==="BORRADOR_CERRADO"&&(n.creado="desconocido"),o}let s=await i();if(!s.nuevo)throw Ln("REF_OCUPADA",{},409);return r(s.id)}async function yX(t,e,n,i,r,a,s,o,l,c){let f=t.http;c.paso="vivienda";let u=i.some(L=>L.some(D=>D.caja==="contract"||D.caja==="movimientos")),d=null;if(u){let L=await f.peticion({metodo:"GET",ruta:"/v1/lector"});L?.modo==="navegador"&&typeof L.parser=="string"&&Array.isArray(L.conceptos)&&(d={parser:L.parser,conceptos:L.conceptos})}let h=i.some(L=>L.length>0),p=ID(t.concurrenciaFicheros)??(h?await t.concurrenciaSugerida?.()??4:4),m=[];for(let L=0;L<e.viviendas.length;L++){let D=e.viviendas[L];c.paso="vivienda",c.vivienda=D.ref??L;let G=D.direccion.trim(),P=D.cp,F=await xr({v:1,direccion:G,cp:P,etiqueta:G.slice(0,200)},a),se=await f.peticion({metodo:"POST",ruta:`/v1/borradores/${r}/viviendas`,cuerpo:{...wX(F),orden:L}});if(typeof se?.viviendaId!="string")throw Ln("ERROR",{},502);let Z={entrada:D,viviendaId:se.viviendaId,subidos:[]};m.push(Z);let ge=i[L];Z.subidos=await kX(ge,p,async(he,xe)=>{let K={...c,paso:"fichero",caja:he.caja,fichero:xe};try{return await jX(t,l,o,r,L,Z,he,a,d,K)}catch(q){throw nf(q,K)}})}delete c.vivienda,c.paso="listo";let g=await f.peticion({metodo:"GET",ruta:`/v1/borradores/${r}`});if(g?.listo!==!0){let L=(g?.ficheros??[]).filter(D=>D.estado==="pendiente"||D.estado==="error");throw Ln("BORRADOR_NO_LISTO",{ficheros:L.map(D=>({estado:D.estado,motivo:D.motivo??null}))})}c.paso="paquete";let b=(t.hoy??yS)(),x=m.map((L,D)=>{let G=F=>L.subidos.filter(se=>se.caja===F),P=mD({contratos:G("contract").flatMap(F=>F.respuesta?.ok&&F.respuesta.tipo==="contrato"?[{ficheroId:F.ficheroId,file:F.file,sha256:F.sha,lectura:zP({ok:!0,contrato:F.respuesta.contrato})}]:[]),actas:G("acta").flatMap(F=>F.acta?[{ficheroId:F.ficheroId,file:F.file,resultado:F.acta}]:[]),tenantId:G("tenant_id").map(F=>F.file),otros:G("other").map(F=>F.file),movimientos:G("movimientos").map(F=>F.file),hoy:b});if(P.errores.length>0)throw Ln("VIVIENDA_INCOMPLETA",{vivienda:L.entrada.ref??D,motivos:P.errores.map(F=>({codigo:F.codigo,...F.ficheroId?{ficheroId:F.ficheroId}:{},...F.inicio?{inicio:F.inicio}:{},...F.faltan?{faltan:F.faltan}:{}}))});return P});for(let L of x)for(let D of L.actasCasadas)await f.peticion({metodo:"POST",ruta:`/v1/borradores/${r}/ficheros/${D.ficheroId}/acta`,cuerpo:{contratoFicheroId:D.contratoFicheroId,fechaLlaves:D.fechaLlaves}});let w=await WP(),k=KP(),v=await YP(w.privadaPkcs8,k,r),y=[];for(let L=0;L<m.length;L++){let D=m[L],G=x[L],P=D.subidos.map(xe=>({...fD(xe.ficheroId,xe.file,xe.caja),ficheroId:xe.ficheroId,estado:xe.respuesta?.ok?"leido":"no_aplica",rc:xe.respuesta?.ok&&xe.respuesta.tipo==="contrato"?lD(xe.respuesta.contrato):null})),F=new Map(D.subidos.map(xe=>[xe.ficheroId,xe.idemKey])),se=pD({ficheros:G.ficheros,bloques:G.bloques,pre:P},xe=>F.get(xe));if(!se.ok)throw Ln("VIVIENDA_INCOMPLETA",{vivienda:D.entrada.ref??L,motivos:[{codigo:se.error.codigo}]});let Z=D.entrada.direccion.trim(),ge=cD(P),he=ge&&zS.test(ge)?ge:null;y.push({viviendaBorradorId:D.viviendaId,ref:D.entrada.ref??null,provincia:D.entrada.provincia,municipio:D.entrada.municipio??null,datos:{direccion:Z,cp:D.entrada.cp,etiqueta:Z.slice(0,200),...he?{cadastral_ref:he}:{}},paquete:se.paquete,porcentajeDeclarado:se.paquete?.porcentaje_titularidad??null,ficheros:D.subidos.map(xe=>({ficheroId:xe.ficheroId,idemKey:xe.idemKey,wrappedFileKey:xe.wrapped,lectura:xe.respuesta?hD(xe.respuesta):null}))})}let A=e.nombre?.trim(),I=await JP({borrador:{cliente:{email:n,ref:e.ref,datos:A?{nombre:A}:{}},viviendas:y},privadaAgencia:await t.descifrador.clavePrivadaSobres(),publicaAgencia:a,publicaEfimera:w.publicaSpki}),S=await il({v:1,secretoEnlace:gd(k)},s);c.paso="lote";let E=(await f.peticion({metodo:"POST",ruta:"/v1/lotes",cuerpo:{operacion:"clientes.crear",modo:"ejecutar"}}))?.id;if(typeof E!="string")throw Ln("ERROR",{},502);c.loteId=E,c.indice=0;let _=await f.peticion({metodo:"POST",ruta:`/v1/lotes/${E}/elementos`,cuerpo:{elementos:[{datos:{ref:e.ref,borrador:r,lote:I,efimera:{cipherB64:un(v.cipher),ivB64:un(v.iv)},sobreEnlace:S}}]}});if(_?.aceptados!==1){let L=_?.rechazados?.[0];throw Ln(L?.code??"ENTRADA_INVALIDA",{errores:L?.errores??null})}c.creado="desconocido",await f.peticion({metodo:"POST",ruta:`/v1/lotes/${E}/cerrar`});let T=await EX(t,E,o);if(T.estado==="error"){let L=T.error?.code;throw c.creado=L==="EN_CURSO"||L==="ESTADO_CAMBIADO"?"desconocido":!1,Ln(T.error?.code??"ERROR",{...T.error?.campos?{campos:T.error.campos}:{}})}let O=T.id??(typeof T.datos?.client_id=="string"?T.datos.client_id:null);if(typeof O!="string")throw Ln("ERROR",{},502);if(c.clientId=O,T.estado==="creado"&&(c.creado=!0),c.paso="enlace",T.estado==="creado"){let L=T.datos?.correo==="enviado"?"enviado":"no_enviado",D=await ED(t,O,k,null);return{estado:"creado",clientId:O,enlace:D,correo:L,...T.datos?.motivo==="CUPO_DIARIO"||T.datos?.motivo==="ENTORNO_PRUEBAS"?{motivo:T.datos.motivo}:{}}}return c.creado=!0,TD(t,O,T.datos?.enlace==="activado",T.datos?.s_sellado??null)}async function kX(t,e,n){let i=new Array(t.length),r=new Map,a=0,s=async()=>{for(;r.size===0;){let o=a++;if(o>=t.length)return;try{i[o]=await n(t[o],o)}catch(l){r.set(o,l)}}};if(await Promise.all(Array.from({length:Math.min(e,t.length)},s)),r.size>0)throw r.get(Math.min(...r.keys()));return i}async function jX(t,e,n,i,r,a,s,o,l,c){let f=t.http,u=await bD(s.bytes),d=await LS(s.bytes,s.nombre,o),h=await f.peticion({metodo:"POST",ruta:`/v1/borradores/${i}/ficheros`,cuerpo:{viviendaId:a.viviendaId,caja:s.caja,sizeBytes:d.blob.length,mime:s.mime,nombreCipherB64:un(d.nombre_cipher),nombreIvB64:un(d.nombre_iv),wrappedFileKeyB64:un(d.wrapped_file_key),sha256:u}});if(typeof h?.ficheroId!="string"||typeof h.uploadUrl!="string")throw Ln("ERROR",{},502);let p=h.ficheroId;await AX(e,h.uploadUrl,d.blob,n);let m={ficheroId:p,idemKey:globalThis.crypto.randomUUID(),caja:s.caja,file:new File([],s.nombre,{type:s.mime}),wrapped:d.wrapped_file_key,sha:u,respuesta:null,acta:null};if(s.caja==="acta")m.acta=await SX(t,s);else if(s.caja==="contract"||s.caja==="movimientos"){c.paso="leer";let g=await IX(t,n,i,p,s,l);if(!g.ok)throw Ln("FICHERO_NO_LEIDO",{vivienda:a.entrada.ref??r,caja:s.caja,motivo:g.motivo});m.respuesta=g,c.paso="cotejar",await CX(t,i,p,a,r,g)}return m}async function AX(t,e,n,i){let r=0;for(let a=0;a<3;a++){a>0&&await i(500*2**a);try{let s=await t(e,{method:"PUT",headers:{"content-type":"application/octet-stream","cache-control":"max-age=3600","x-upsert":"false"},body:n});if(s.ok)return;if(r=s.status,s.status<500&&s.status!==429)break}catch{r=0}}throw Ln("SUBIDA_FALLIDA",{status:r},502)}async function SX(t,e){let n={ok:!1,motivo:"acta_ilegible"};try{let i=await H1(e.bytes,e.mime,t.extraer?{extraer:t.extraer}:{}),r=iP(i);return r?r.lector.leer(i):n}catch{return n}}async function IX(t,e,n,i,r,a){let s=0,o=0;for(;;){let l;try{let c=await t.borradores.leerDetalle(n,i,r.bytes,{caja:r.caja,lector:a,mime:r.mime,...t.extraer?{extraer:t.extraer}:{}});l=xX(c.respuesta,c.local)}catch(c){if(c instanceof tn&&dX.has(c.code)&&++s<hX){await e(t.intervaloMs??1e3);continue}throw c}if(!l.ok&&l.transitorio&&++o<=pX){await e(t.intervaloMs??1e3);continue}return l}}async function CX(t,e,n,i,r,a){let s=dD(i.entrada.direccion,a.direccion);if(a.tipo==="movimiento"){if(await t.http.peticion({metodo:"POST",ruta:`/v1/borradores/${e}/ficheros/${n}/direccion`,cuerpo:{ok:s==="casa"}}),s!=="casa")throw Ln("DIRECCION_DISTINTA",{vivienda:i.entrada.ref??r,caja:"movimientos",motivo:s});return}if(s==="distinta")throw Ln("DIRECCION_DISTINTA",{vivienda:i.entrada.ref??r,caja:"contract",motivo:s})}async function EX(t,e,n){let i=t.intervaloMs??1e3,r=t.maxEsperaMs??mX,a=0;for(;;){let o=(await t.http.peticion({metodo:"GET",ruta:`/v1/lotes/${e}/resultados`,query:{limite:1}}))?.resultados?.[0];if(o&&o.estado!=="pendiente")return o;if(a>=r)throw Ln("TIEMPO_AGOTADO",{loteId:e},504);await n(i),a+=Math.max(i,1)}}async function TX(t,e){let n=e;if(!n||typeof n.wrapped_key_b64!="string"||typeof n.cipher_b64!="string"||typeof n.iv_b64!="string")throw Ln("ERROR",{},502);let i=await t.descifrador.abrirSobre(ob(n)),r=JSON.parse(new TextDecoder().decode(i)),a=typeof r.secretoEnlace=="string"?XP(r.secretoEnlace):null;if(!a)throw Ln("ERROR",{},502);return a}async function ED(t,e,n,i){let r;try{r=await t.http.peticion({metodo:"POST",ruta:`/v1/clientes/${e}/enlace`,idempotencia:!1})}catch(s){if(s instanceof tn&&s.code==="ENLACE_NO_REENVIABLE")return"activado";throw s}if(typeof r?.token!="string"||r.token==="")throw Ln("ERROR",{},502);let a=n??await TX(t,i??r.sobre);return ZP({origin:t.origen,clientId:e,token:r.token,secreto:a})}async function TD(t,e,n,i){let r=n?"activado":await ED(t,e,null,i);return{estado:"ya_existia",clientId:e,enlace:r,correo:"no_enviado"}}function KS(t){let e={...t,concurrenciaSugerida:t.concurrenciaSugerida??fX(t.http)},n=e.dormir??(i=>new Promise(r=>setTimeout(r,i)));return{crear:(i,r)=>SD(e,i,r),crearVarios:(i,r)=>xd((a,s)=>SD(e,a,s),i,r,n)}}function _D(t){let e=dd.safeParse(t);return e.success?e.data.paquete:t}function qD(t,e){let n=dd.safeParse(t);if(!n.success)return e;let i=new Set(ud(e)),r=Xc.safeParse(n.data.paquete),a=r.success?ud(r.data):[],s=[...new Set([...n.data.alta.perdidos??[],...a.filter(l=>!i.has(l))])],o=Object.fromEntries(Object.entries(n.data.alta.documentos).filter(([l])=>i.has(l)));return{v:1,paquete:e,alta:{documentos:o,...s.length>0?{perdidos:s}:{}}}}var _X=t=>t,XS=t=>({wrapped_key:zr(t.wrapped_key_b64),cipher:zr(t.cipher_b64),iv:zr(t.iv_b64)}),YS=t=>({wrapped_key:un(t.wrapped_key),cipher:un(t.cipher),iv:un(t.iv)});async function qX(t){return new Uint8Array(await globalThis.crypto.subtle.digest("SHA-256",_X(t)))}async function RD(t){let{pendiente:e,privada:n}=t,i=zr(e.publicaClienteB64),r=0,a={sobres:[],ficherosAusentes:[],ficherosIlegibles:[]},s=null;if(e.sobreCliente){let d,h=!1;try{d=await Zc(XS(e.sobreCliente),n),h=!0}catch{a.sobres.push(e.sobreCliente.id),r++}if(h)try{let p=BS.parse(d);s=YS(await xr(p,i))}catch{r++}}let o=[];for(let d of e.sobreCliente?e.viviendas:[])try{let h=eD.parse(await Zc(XS(d.sobre),n));o.push({property_id:d.propertyId,...YS(await xr(h,i))})}catch{r++}let l=[],c=[],f=[...e.ficheros].sort((d,h)=>+(h.caja==="foto")-+(d.caja==="foto"));for(let d of f)try{let h=zr(d.wrappedFileKeyB64),p=await md(h,n,i);l.push({idem_key:d.idemKey,wrapped_file_key:un(p)})}catch{c.push(d.idemKey)}let u=[];for(let d of e.paquetes){let h;try{h=await Zc(XS(d.sobre),n)}catch{a.sobres.push(d.sobreId),r++;continue}try{let p=hd(t.desenvolverPaquete?t.desenvolverPaquete(h):h);if(!p.ok){r++;continue}let m=qD(h,p.paquete);u.push({property_id:d.propertyId,...YS(await xr(m,i))})}catch{r++}}return{lote:{huella_publica:un(await qX(i)),perfil:s,viviendas:o,paquetes:u,documentos:l},fallidos:c,sobresIlegibles:r,permanentes:a}}var RX=20;function OD(t,e=RX){if(t.documentos.length<=e)return[t];let n=[];for(let i=0;i<t.documentos.length;i+=e){let r=t.documentos.slice(i,i+e),s=i+e>=t.documentos.length?t.paquetes:[];n.push(i===0?{...t,paquetes:s,documentos:r}:{huella_publica:t.huella_publica,perfil:null,viviendas:[],paquetes:s,documentos:r})}return n}function PD(t,e=200){let n=[...t.sobres],i=[...t.ficherosAusentes],r=[...t.ficherosIlegibles],a=[];for(;n.length+i.length+r.length>0;){let s=n.splice(0,e),o=i.splice(0,e),l=r.splice(0,e-o.length);a.push({sobres:s,ficherosAusentes:o,ficherosIlegibles:l})}return a}function ZS(t,e,n,i){if(!(t instanceof Map))return[];let r=[];for(let a of e){let s=t.get(a);if(s===void 0)continue;let o=Date.parse(s);Number.isNaN(o)||n.getTime()-o>=i&&r.push(a)}return r}function DD(t,e){return t.documentos>0||(t.paquetes??0)>0||e?"progreso":"sin-progreso"}async function ND(t){let e=0,n=0;for(let i=0;i<50;i++){let r=await t.leerPendientes();if(!r)break;let a=r.filter(s=>(t.intentos.get(s.clienteId)??0)<t.maxIntentos);if(a.length===0)break;for(let s of a){t.intentos.set(s.clienteId,(t.intentos.get(s.clienteId)??0)+1),n++;let o="fallo";try{o=await t.entregar(s)}catch{o="fallo"}o==="progreso"&&(e++,t.intentos.delete(s.clienteId))}}return{progreso:e,intentados:n}}var fb=new Set([401,403]),OX=3,PX=new Set(["LOTE_ESTADO","NO_ENCONTRADO","PRECONDICION_FALLIDA"]),JS=t=>t instanceof tn&&PX.has(t.code),DX=t=>({clienteId:t.cliente_id,publicaClienteB64:t.publica_cliente_b64,sobreCliente:t.sobre_cliente,viviendas:t.viviendas.map(e=>({propertyId:e.property_id,sobre:e.sobre})),ficheros:t.ficheros.map(e=>({id:e.id,idemKey:e.idem_key,propertyId:e.property_id,wrappedFileKeyB64:e.wrapped_file_key_b64,...e.caja!==void 0?{caja:e.caja}:{}})),paquetes:t.paquetes.map(e=>({sobreId:e.sobre_id,propertyId:e.property_id,sobre:e.sobre}))});function QS(t){async function e(){let n=await t.descifrador.clavePrivadaSobres(),i=new Map,r=new Map,a=new Set,s=[],o=new Map,l=0,c=[],f={relojServidor:null,corte:null,faltoFecha:!1,alInicio:null},u=y=>{let A=Date.parse(y.get("date")??"");if(Number.isNaN(A)){f.faltoFecha=!0;return}(f.relojServidor===null||A>f.relojServidor)&&(f.relojServidor=A)},d=y=>{for(let[A,I]of Object.entries(y)){let S=i.get(A);(S===void 0||Date.parse(I)<Date.parse(S))&&i.set(A,I)}},h=y=>{let A=r.get(y);return A||r.set(y,A={ausentes:new Set,ilegibles:new Set}),A},p=y=>y instanceof tn?y.code:"ERROR";function m(y,A){if(A instanceof tn&&fb.has(A.status)){f.corte??=A;return}let I=p(A);s.some(S=>S.cliente_id===y&&S.code===I)||s.push({cliente_id:y,code:I})}async function g(y){if(f.corte)return"fallo";let A;try{A=await RD({pendiente:y,privada:n,desenvolverPaquete:_D})}catch(_){return m(y.clienteId,_),"fallo"}if(o.set(y.clienteId,Math.max(o.get(y.clienteId)??0,A.sobresIlegibles)),!(A.lote.perfil!==null||A.lote.viviendas.length>0||A.lote.paquetes.length>0||A.lote.documentos.length>0))return"sin-progreso";let S=0,C=0,E=!1;for(let[_,T]of OD(A.lote).entries()){let O;try{O=await t.http.peticion({metodo:"POST",ruta:"/v1/mantenimiento/entregas",cuerpo:{cliente_id:y.clienteId,lote:T},idempotencia:!0,alResponder:u})}catch(D){return JS(D)||m(y.clienteId,D),S>0||C>0||E?"progreso":"fallo"}d(O.observaciones??{});let L=h(y.clienteId);for(let D of O.permanentes?.ficheros_ausentes??[])L.ausentes.add(D);for(let D of O.permanentes?.ficheros_ilegibles??[])L.ilegibles.add(D);S+=O.documentos,C+=O.paquetes,_===0&&T.perfil!==null&&(E=!0)}return DD({documentos:S,viviendas:0,paquetes:C},E)}let{progreso:b}=await ND({leerPendientes:async()=>{if(f.corte)return null;let y;try{y=await t.http.peticion({metodo:"GET",ruta:"/v1/mantenimiento",alResponder:u})}catch(A){if(f.alInicio===null||A instanceof tn&&fb.has(A.status))throw A;return m("",A),null}return l=y.ventana_olvido_ms,d(y.observaciones??{}),f.alInicio===null&&(f.alInicio=new Set(Object.keys(y.observaciones??{})),c=y.idos_con_fallidos??[]),y.pendientes.map(DX)},entregar:g,intentos:new Map,maxIntentos:OX});if(f.corte)throw f.corte;let x=0,w=f.relojServidor===null||f.faltoFecha?null:new Date(f.relojServidor),k=y=>f.alInicio?.has(y)===!0&&!a.has(y);for(let[y,A]of w?r:[]){let I={sobres:[],ficherosAusentes:ZS(i,[...A.ausentes].filter(k),w,l),ficherosIlegibles:ZS(i,[...A.ilegibles].filter(k),w,l)};for(let S of PD(I))try{let C=await t.http.peticion({metodo:"POST",ruta:"/v1/mantenimiento/imposibles",idempotencia:!0,cuerpo:{cliente_id:y,sobres:S.sobres,ficheros_ausentes:S.ficherosAusentes,ficheros_ilegibles:S.ficherosIlegibles}});for(let E of[...S.sobres,...S.ficherosAusentes,...S.ficherosIlegibles])a.add(E);x+=C.marcados.sobres+C.marcados.ficheros}catch(C){if(C instanceof tn&&fb.has(C.status))throw C;JS(C)||m(y,C)}}for(let y of c)try{await t.http.peticion({metodo:"POST",ruta:"/v1/mantenimiento/imposibles",idempotencia:!0,cuerpo:{cliente_id:y,sobres:[],ficheros_ausentes:[],ficheros_ilegibles:[]}})}catch(A){if(A instanceof tn&&fb.has(A.status))throw A;JS(A)||m(y,A)}let v=[...o.values()].reduce((y,A)=>y+A,0);return{entregadas:b,imposibles:x,errores:s,sobresSinAbrir:v,relojServidor:f.relojServidor!==null&&!f.faltoFecha}}return{ejecutar:e}}var wd=t=>new tn(422,"ENTRADA_INVALIDA",{code:"ENTRADA_INVALIDA",campo:t}),NX=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,Li=(t,e)=>{if(typeof t!="string"||!NX.test(t))throw wd(e);return t};function MD(t){let e=String(t).trim();return e==="*"||e.startsWith('"')?e:`"v${e.replace(/^v/,"")}"`}function eI(t){let{http:e}=t,n=c=>({cursor:c.cursor,limite:c.limite,estado:c.estado,cambiado_desde:c.cambiado_desde,incluir:c.incluir});async function i(c={}){return e.peticion({metodo:"GET",ruta:"/v1/clientes",query:n(c)})}async function*r(c={}){let f;for(;;){let u=await i({...c,cursor:f});if(u.clientes.length===0||(yield*u.clientes,u.siguiente===null||u.siguiente===void 0))return;f=u.siguiente}}let a=async(c,f={})=>e.peticion({metodo:"GET",ruta:`/v1/clientes/${Li(c,"clienteId")}`,query:{incluir:f.incluir}});function s(c){let f=c?.ifMatch;if(typeof f!="string"&&typeof f!="number"||String(f).trim()==="")throw wd("ifMatch");return MD(f)}async function o(c,f,u){Li(c,"clienteId");let d=s(u),h=await a(c),p={};if(f.ref!==void 0){if(f.ref!==null&&!rs(f.ref))throw wd("ref");p.ref=f.ref}f.renovacion!==void 0&&(p.renovacion=f.renovacion);let m=h.estado==="invitado",g=[];for(let[x,w]of(f.viviendas??[]).entries()){let k=y=>wd(`viviendas[${x}].${y}`),v={propertyId:Li(w.vivienda,`viviendas[${x}].vivienda`)};if(w.ref!==void 0){if(w.ref!==null&&!rs(w.ref))throw k("ref");v.ref=w.ref}if(w.renovacion!==void 0&&(v.renovacion=w.renovacion),w.direccion!==void 0||w.cp!==void 0){let y=w.direccion?.trim()??"",A=w.cp?.trim()??"";if(!m||y===""||y.length>300)throw k("direccion");if(!/^\d{5}$/.test(A))throw k("cp");let I=LP(A);if(!I)throw new tn(422,"PROVINCIA_INVALIDA",{code:"PROVINCIA_INVALIDA",campo:`viviendas[${x}].cp`});if(v.provincia=I.code,w.municipio===void 0||w.municipio!==null&&(!/^\d{5}$/.test(w.municipio)||!w.municipio.startsWith(I.code)))throw k("municipio");v.municipio=w.municipio,v.sobre=await il(gD(y,A),await t.descifrador.publicaAgenciaSpki())}else w.municipio!==void 0&&(v.municipio=w.municipio);g.push(v)}if(f.nombre!==void 0){let x=(f.nombre??"").trim();if(x.length>200)throw wd("nombre");let w=await t.descifrador.publicaAgenciaSpki();m&&!h.desde_borrador&&(p.sobreCliente=await il(x?{v:1,nombre:x}:{v:1},w)),p.copiaNombre=x?await il({v:1,nombre:x},w):null}return g.length>0&&(p.viviendas=g),{ok:!0,version:(await e.peticion({metodo:"PATCH",ruta:`/v1/clientes/${c}`,cuerpo:p,cabeceras:{"if-match":d}}))?.version??null}}let l=c=>({ok:!0,version:c?.version??null});return{clientes:{listar:r,listarPagina:i,leer:a,editar:o,async desvincular(c,f){Li(c,"clienteId");let u=await e.peticion({metodo:"POST",ruta:`/v1/clientes/${c}/desvincular`,cuerpo:{},cabeceras:{"if-match":s(f)}});return l(u)},async correo(c,f){return Li(c,"clienteId"),l(await e.peticion({metodo:"PUT",ruta:`/v1/clientes/${c}/correo`,cuerpo:{correo:f}}))},async revocarEnlace(c){return Li(c,"clienteId"),l(await e.peticion({metodo:"DELETE",ruta:`/v1/clientes/${c}/enlace`}))}},viviendas:{async listar(c){return(await e.peticion({metodo:"GET",ruta:`/v1/clientes/${Li(c,"clienteId")}/viviendas`})).viviendas}},remitentes:{async listar(){return(await e.peticion({metodo:"GET",ruta:"/v1/remitentes"})).remitentes},anadir:c=>e.peticion({metodo:"POST",ruta:"/v1/remitentes",cuerpo:{correo:c}}),async quitar(c){return(await e.peticion({metodo:"POST",ruta:"/v1/remitentes/quitar",cuerpo:{correo:c}})).remitentes}},creditos:{leer:()=>e.peticion({metodo:"GET",ruta:"/v1/creditos"})},renovacion:{leer:()=>e.peticion({metodo:"GET",ruta:"/v1/renovacion"}),fijar:c=>e.peticion({metodo:"PUT",ruta:"/v1/renovacion",cuerpo:c})},webhooks:{async listar(){return(await e.peticion({metodo:"GET",ruta:"/v1/webhooks"})).webhooks},crear:c=>e.peticion({metodo:"POST",ruta:"/v1/webhooks",cuerpo:c}),borrar:async c=>e.peticion({metodo:"DELETE",ruta:`/v1/webhooks/${Li(c,"webhookId")}`}),rotarSecreto:async c=>e.peticion({metodo:"POST",ruta:`/v1/webhooks/${Li(c,"webhookId")}/secreto`,cuerpo:{}}),entregas:async(c,f={})=>e.peticion({metodo:"GET",ruta:`/v1/webhooks/${Li(c,"webhookId")}/entregas`,query:{estado:f.estado,cursor:f.cursor,limite:f.limite}}),reenviar:async(c,f)=>e.peticion({metodo:"POST",ruta:`/v1/webhooks/${Li(c,"webhookId")}/entregas/${Li(f,"entregaId")}/reenviar`,cuerpo:{}})}}}function FD(t){let e=sf({apiKey:t.apiKey,baseUrl:t.baseUrl,fetch:t.fetch}),n=PS(e),i=KS({http:e,borradores:n,descifrador:t.descifrador,fetch:t.fetch,origen:new URL(t.baseUrl??hb).origin,extraer:t.extraer,hoy:t.hoy,intervaloMs:t.intervaloMs,maxEsperaMs:t.maxEsperaMs,dormir:t.dormir,concurrenciaFicheros:t.concurrenciaFicheros}),r=QS({http:e,descifrador:t.descifrador}),a=eI({http:e,descifrador:t.descifrador});return{peticion:e.peticion,http:e,descifrador:t.descifrador,borradores:n,mantenimiento:r,clientes:{...i,...a.clientes},viviendas:a.viviendas,remitentes:a.remitentes,creditos:a.creditos,renovacion:a.renovacion,webhooks:a.webhooks}}var koe=["clave-integracion","alta","mantenimiento","lector"],BD=`controldealquiler <comando>
188
188
 
189
189
  Comandos:
190
190
  clave-integracion [--privada <fichero>] [--publica <fichero>]
@@ -211,4 +211,4 @@ ${BD}`),2}}catch(r){if(r instanceof Ai||r instanceof as)return e.error(r.message
211
211
  `)?t:t+`
212
212
  `),error:t=>process.stderr.write(t.endsWith(`
213
213
  `)?t:t+`
214
- `)}).then(t=>{process.exitCode=t});export{BD as AYUDA,voe as COMANDOS,KX as ejecutarCli};
214
+ `)}).then(t=>{process.exitCode=t});export{BD as AYUDA,koe as COMANDOS,KX as ejecutarCli};