@albertomarturelo/sii-core 0.10.0 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +77 -0
- package/dist/adapters/fake/index.d.ts +17 -3
- package/dist/adapters/fake/index.d.ts.map +1 -1
- package/dist/adapters/fake/index.js +36 -3
- package/dist/adapters/fake/index.js.map +1 -1
- package/dist/adapters/node/cookie-jar.d.ts +35 -0
- package/dist/adapters/node/cookie-jar.d.ts.map +1 -0
- package/dist/adapters/node/cookie-jar.js +211 -0
- package/dist/adapters/node/cookie-jar.js.map +1 -0
- package/dist/adapters/node/http.d.ts +12 -0
- package/dist/adapters/node/http.d.ts.map +1 -0
- package/dist/adapters/node/http.js +278 -0
- package/dist/adapters/node/http.js.map +1 -0
- package/dist/adapters/node/portal.d.ts.map +1 -1
- package/dist/adapters/node/portal.js +7 -4
- package/dist/adapters/node/portal.js.map +1 -1
- package/dist/adapters/node/response.d.ts +14 -0
- package/dist/adapters/node/response.d.ts.map +1 -1
- package/dist/adapters/node/response.js +34 -1
- package/dist/adapters/node/response.js.map +1 -1
- package/dist/auth/auth.d.ts +27 -1
- package/dist/auth/auth.d.ts.map +1 -1
- package/dist/auth/auth.js +145 -41
- package/dist/auth/auth.js.map +1 -1
- package/dist/auth/datos-cntr.d.ts +23 -0
- package/dist/auth/datos-cntr.d.ts.map +1 -0
- package/dist/auth/datos-cntr.js +81 -0
- package/dist/auth/datos-cntr.js.map +1 -0
- package/dist/auth/index.d.ts +1 -0
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/login-block.d.ts +23 -0
- package/dist/auth/login-block.d.ts.map +1 -0
- package/dist/auth/login-block.js +53 -0
- package/dist/auth/login-block.js.map +1 -0
- package/dist/auth/login-error.d.ts +20 -3
- package/dist/auth/login-error.d.ts.map +1 -1
- package/dist/auth/login-error.js +20 -5
- package/dist/auth/login-error.js.map +1 -1
- package/dist/auth/session.d.ts +13 -1
- package/dist/auth/session.d.ts.map +1 -1
- package/dist/auth/session.js +23 -2
- package/dist/auth/session.js.map +1 -1
- package/dist/cli.d.ts +2 -2
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +4 -1
- package/dist/cli.js.map +1 -1
- package/dist/config/config.d.ts +8 -0
- package/dist/config/config.d.ts.map +1 -1
- package/dist/config/config.js +8 -0
- package/dist/config/config.js.map +1 -1
- package/dist/errors/errors.d.ts +34 -2
- package/dist/errors/errors.d.ts.map +1 -1
- package/dist/errors/errors.js +30 -2
- package/dist/errors/errors.js.map +1 -1
- package/dist/errors/index.d.ts +1 -0
- package/dist/errors/index.d.ts.map +1 -1
- package/dist/errors/index.js +1 -0
- package/dist/errors/index.js.map +1 -1
- package/dist/errors/kind.d.ts +12 -0
- package/dist/errors/kind.d.ts.map +1 -0
- package/dist/errors/kind.js +40 -0
- package/dist/errors/kind.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/node.d.ts +7 -3
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +10 -4
- package/dist/node.js.map +1 -1
- package/dist/seams/index.d.ts +7 -0
- package/dist/seams/index.d.ts.map +1 -1
- package/dist/tasks/auth.d.ts +16 -2
- package/dist/tasks/auth.d.ts.map +1 -1
- package/dist/tasks/auth.js +12 -0
- package/dist/tasks/auth.js.map +1 -1
- package/dist/tasks/bte.d.ts.map +1 -1
- package/dist/tasks/bte.js +4 -2
- package/dist/tasks/bte.js.map +1 -1
- package/dist/tasks/dte.js +8 -8
- package/dist/tasks/dte.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
// The DEFAULT PortalDriver since ADR-027: a browser-free adapter over Node `fetch` plus
|
|
2
|
+
// the in-house CookieJar. A live spike (2026-10-17, one attempt, no browser) confirmed the
|
|
3
|
+
// classic SII login works as a plain POST and the resulting jar reaches Mi SII and the www4
|
|
4
|
+
// SDI facades — so every surface that does NOT run SII's own page JS needs no Chromium.
|
|
5
|
+
//
|
|
6
|
+
// What it CANNOT do: `evaluate` (run page JS) and `interactiveLogin` (a human at SII's page).
|
|
7
|
+
// Both throw BrowserRequiredError; a surface that needs them asks withSession for the
|
|
8
|
+
// `browser` engine (the lazy Playwright driver), which is the only thing that still needs
|
|
9
|
+
// Chromium (BTE inline maps, MIPYME `validaFacEx`). ADR-027.
|
|
10
|
+
//
|
|
11
|
+
// Auth detection stays URL-based (sii-py ADR-009) with ONE documented exception: the login
|
|
12
|
+
// POST itself answers 200 on `zeusr` for BOTH success and failure (observed 2026-10-17), so
|
|
13
|
+
// credentialLogin decides from the body (SII's error código) + the session cookie, not the host.
|
|
14
|
+
// And where SII bounces a dead jar to the login with JS instead of an HTTP redirect (Mi SII,
|
|
15
|
+
// GH-139), the driver reports the login URL as the landing, as a browser would.
|
|
16
|
+
import { LOGIN_HOST, LOGIN_POST_URL, QUEUE_IT_HOST, loginUrl } from '../../config/index.js';
|
|
17
|
+
import { LoginFailedError, LoginQueuedError, BrowserRequiredError } from '../../errors/index.js';
|
|
18
|
+
import { parseSiiLoginErrorDetail } from '../../auth/login-error.js';
|
|
19
|
+
import { Rut } from '../../rut/index.js';
|
|
20
|
+
import { LOGIN_STUB_MAX_BYTES, charsetOf, formLoginWallError, loginStubTarget, nonJsonResponseError, } from './response.js';
|
|
21
|
+
import { CookieJar } from './cookie-jar.js';
|
|
22
|
+
const REQUEST_TIMEOUT_MS = 30_000;
|
|
23
|
+
const MAX_REDIRECTS = 10;
|
|
24
|
+
// A browser-like User-Agent is REQUIRED on the authenticated requests: Playwright's
|
|
25
|
+
// APIRequestContext sent the Chromium UA automatically, and SII's www4 WAF bounces a UA-less
|
|
26
|
+
// client to the login wall even with a valid session cookie — misiir is laxer, which masked it
|
|
27
|
+
// (observed 2026-10-18, GH live validation of ADR-027; the 2026-10-17 spike worked only because
|
|
28
|
+
// it set a Chrome UA). A caller's explicit `User-Agent` still wins.
|
|
29
|
+
const BROWSER_HEADERS = {
|
|
30
|
+
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 ' +
|
|
31
|
+
'(KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36',
|
|
32
|
+
'accept-language': 'es-CL,es;q=0.9',
|
|
33
|
+
};
|
|
34
|
+
const BROWSER_ONLY = 'Esta operación necesita el motor de navegador (JS de la página de SII). El PortalDriver ' +
|
|
35
|
+
'HTTP no puede ejecutarlo (ADR-027). Instala y usa el motor Playwright: `npm i playwright` + ' +
|
|
36
|
+
'`npx playwright install chromium`.';
|
|
37
|
+
/** A fetch that carries a CookieJar across MANUAL redirects: Node `fetch` would neither apply
|
|
38
|
+
* `Set-Cookie` per hop nor re-attach our jar, and SII sets the session cookies mid-redirect
|
|
39
|
+
* (login) and detects a dead jar by bouncing to `LOGIN_HOST`. Each hop applies Set-Cookie into
|
|
40
|
+
* the jar and re-sends the jar's Cookie header; the landed URL is what the caller checks. */
|
|
41
|
+
async function fetchWithJar(fetchImpl, jar, startUrl, init) {
|
|
42
|
+
let url = startUrl;
|
|
43
|
+
let method = init.method;
|
|
44
|
+
let body = init.body;
|
|
45
|
+
let headers = { ...init.headers };
|
|
46
|
+
for (let hop = 0; hop <= MAX_REDIRECTS; hop++) {
|
|
47
|
+
const cookie = jar.header(url);
|
|
48
|
+
// Build the headers CASE-INSENSITIVELY via Headers.set: a facade passes `Content-Type`
|
|
49
|
+
// while BROWSER_HEADERS/`jsonHeaders` use `content-type`, and a plain object would keep
|
|
50
|
+
// BOTH keys — undici then appends them into `application/json, application/json`, which
|
|
51
|
+
// www4 answers with HTTP 500. `set` lowercases and overwrites, so each header is sent once.
|
|
52
|
+
// Browser headers first so a caller's explicit value wins. (ADR-027, GH live validation.)
|
|
53
|
+
const sent = new Headers();
|
|
54
|
+
for (const [k, v] of Object.entries({ ...BROWSER_HEADERS, ...headers }))
|
|
55
|
+
sent.set(k, v);
|
|
56
|
+
if (cookie)
|
|
57
|
+
sent.set('cookie', cookie);
|
|
58
|
+
const res = await fetchImpl(url, {
|
|
59
|
+
method,
|
|
60
|
+
redirect: 'manual',
|
|
61
|
+
signal: AbortSignal.timeout(REQUEST_TIMEOUT_MS),
|
|
62
|
+
...(body !== undefined ? { body } : {}),
|
|
63
|
+
headers: sent,
|
|
64
|
+
});
|
|
65
|
+
jar.applySetCookies(url, res.headers.getSetCookie?.() ?? []);
|
|
66
|
+
const location = res.headers.get('location');
|
|
67
|
+
if (res.status >= 300 && res.status < 400 && location) {
|
|
68
|
+
url = new URL(location, url).href;
|
|
69
|
+
// A 303, or a 301/302 after a POST, continues as GET without the body (fetch semantics).
|
|
70
|
+
if (res.status !== 307 && res.status !== 308) {
|
|
71
|
+
method = 'GET';
|
|
72
|
+
body = undefined;
|
|
73
|
+
headers = stripBodyHeaders(headers);
|
|
74
|
+
}
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
const bytes = new Uint8Array(await res.arrayBuffer());
|
|
78
|
+
const contentType = res.headers.get('content-type');
|
|
79
|
+
return {
|
|
80
|
+
finalUrl: jsLoginWallUrl(res.status, contentType, bytes) ?? (res.url || url),
|
|
81
|
+
status: res.status,
|
|
82
|
+
contentType,
|
|
83
|
+
bytes,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
throw new Error(`Demasiadas redirecciones (> ${MAX_REDIRECTS}) desde ${startUrl}`);
|
|
87
|
+
}
|
|
88
|
+
/** Where a browser would land when SII bounces a dead jar to the login with JS instead of an
|
|
89
|
+
* HTTP redirect (Mi SII, GH-139). Reporting THAT as the landed URL keeps auth detection
|
|
90
|
+
* URL-based for every primitive (goto, requestText/Form/Binary, requestJson) without each one
|
|
91
|
+
* parsing bodies. Only a small 2xx HTML page is scanned (`loginStubTarget` is the narrow test). */
|
|
92
|
+
function jsLoginWallUrl(status, contentType, bytes) {
|
|
93
|
+
if (status < 200 || status >= 300)
|
|
94
|
+
return null;
|
|
95
|
+
if (!(contentType ?? '').toLowerCase().includes('text/html'))
|
|
96
|
+
return null;
|
|
97
|
+
if (bytes.length > LOGIN_STUB_MAX_BYTES)
|
|
98
|
+
return null;
|
|
99
|
+
return loginStubTarget(new TextDecoder(charsetOf(contentType)).decode(bytes));
|
|
100
|
+
}
|
|
101
|
+
function stripBodyHeaders(headers) {
|
|
102
|
+
const out = {};
|
|
103
|
+
for (const [k, v] of Object.entries(headers)) {
|
|
104
|
+
if (k.toLowerCase() === 'content-type')
|
|
105
|
+
continue;
|
|
106
|
+
out[k] = v;
|
|
107
|
+
}
|
|
108
|
+
return out;
|
|
109
|
+
}
|
|
110
|
+
const decode = (r) => new TextDecoder(charsetOf(r.contentType)).decode(r.bytes);
|
|
111
|
+
const landedOn = (url, host) => new URL(url).hostname === host;
|
|
112
|
+
class HttpPortalSession {
|
|
113
|
+
fetchImpl;
|
|
114
|
+
jar;
|
|
115
|
+
constructor(fetchImpl, jar) {
|
|
116
|
+
this.fetchImpl = fetchImpl;
|
|
117
|
+
this.jar = jar;
|
|
118
|
+
}
|
|
119
|
+
async goto(url) {
|
|
120
|
+
const r = await fetchWithJar(this.fetchImpl, this.jar, url, { method: 'GET' });
|
|
121
|
+
return r.finalUrl;
|
|
122
|
+
}
|
|
123
|
+
evaluate(_expression) {
|
|
124
|
+
// The HTTP driver cannot run page JS (ADR-027). A surface that needs it (BTE inline maps,
|
|
125
|
+
// MIPYME validaFacEx) must acquire the browser engine via withSession.
|
|
126
|
+
return Promise.reject(new BrowserRequiredError(BROWSER_ONLY));
|
|
127
|
+
}
|
|
128
|
+
async requestJson(url, options = {}) {
|
|
129
|
+
const headers = options.body !== undefined ? jsonHeaders(options.headers) : options.headers;
|
|
130
|
+
const r = await fetchWithJar(this.fetchImpl, this.jar, url, {
|
|
131
|
+
method: options.method ?? 'POST',
|
|
132
|
+
...(headers ? { headers } : {}),
|
|
133
|
+
...(options.body !== undefined ? { body: JSON.stringify(options.body) } : {}),
|
|
134
|
+
});
|
|
135
|
+
const text = decode(r);
|
|
136
|
+
try {
|
|
137
|
+
return JSON.parse(text);
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
// Same classification as the Playwright adapter: a login-wall bounce / HTML body ⇒
|
|
141
|
+
// SessionExpiredError; anything else ⇒ UnexpectedResponseError naming endpoint + body.
|
|
142
|
+
throw nonJsonResponseError(r.finalUrl, r.contentType ?? '', r.status, text);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
async requestForm(url, options = {}) {
|
|
146
|
+
const headers = { ...options.headers };
|
|
147
|
+
let body;
|
|
148
|
+
if (options.form) {
|
|
149
|
+
body = new URLSearchParams(options.form).toString();
|
|
150
|
+
headers['content-type'] ??= 'application/x-www-form-urlencoded';
|
|
151
|
+
}
|
|
152
|
+
const r = await fetchWithJar(this.fetchImpl, this.jar, url, {
|
|
153
|
+
method: options.method ?? 'POST',
|
|
154
|
+
headers,
|
|
155
|
+
...(body !== undefined ? { body } : {}),
|
|
156
|
+
});
|
|
157
|
+
const wall = formLoginWallError(r.finalUrl);
|
|
158
|
+
if (wall)
|
|
159
|
+
throw wall;
|
|
160
|
+
return { status: r.status, body: decode(r) };
|
|
161
|
+
}
|
|
162
|
+
async requestText(url, options = {}) {
|
|
163
|
+
const r = await fetchWithJar(this.fetchImpl, this.jar, url, {
|
|
164
|
+
method: options.method ?? 'POST',
|
|
165
|
+
...(options.headers ? { headers: options.headers } : {}),
|
|
166
|
+
...(options.body !== undefined ? { body: options.body } : {}),
|
|
167
|
+
});
|
|
168
|
+
const wall = formLoginWallError(r.finalUrl);
|
|
169
|
+
if (wall)
|
|
170
|
+
throw wall;
|
|
171
|
+
return { status: r.status, body: decode(r) };
|
|
172
|
+
}
|
|
173
|
+
async requestBinary(url, options = {}) {
|
|
174
|
+
const r = await fetchWithJar(this.fetchImpl, this.jar, url, {
|
|
175
|
+
method: options.method ?? 'GET',
|
|
176
|
+
...(options.headers ? { headers: options.headers } : {}),
|
|
177
|
+
...(options.body !== undefined ? { body: options.body } : {}),
|
|
178
|
+
});
|
|
179
|
+
const wall = formLoginWallError(r.finalUrl);
|
|
180
|
+
if (wall)
|
|
181
|
+
throw wall;
|
|
182
|
+
return { status: r.status, contentType: r.contentType, bytes: r.bytes };
|
|
183
|
+
}
|
|
184
|
+
cookie(url, name) {
|
|
185
|
+
return Promise.resolve(this.jar.value(url, name));
|
|
186
|
+
}
|
|
187
|
+
storageState() {
|
|
188
|
+
return Promise.resolve(this.jar.toStorageState());
|
|
189
|
+
}
|
|
190
|
+
close() {
|
|
191
|
+
return Promise.resolve(); // no browser to tear down
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
function jsonHeaders(headers) {
|
|
195
|
+
const h = { ...headers };
|
|
196
|
+
h['content-type'] ??= 'application/json';
|
|
197
|
+
return h;
|
|
198
|
+
}
|
|
199
|
+
export class HttpPortalDriver {
|
|
200
|
+
fetchImpl;
|
|
201
|
+
constructor(fetchImpl = globalThis.fetch) {
|
|
202
|
+
this.fetchImpl = fetchImpl;
|
|
203
|
+
}
|
|
204
|
+
interactiveLogin(_options) {
|
|
205
|
+
// A headed browser login is the MCP's job (ADR-027); the HTTP CLI uses credentialLogin.
|
|
206
|
+
return Promise.reject(new BrowserRequiredError(BROWSER_ONLY));
|
|
207
|
+
}
|
|
208
|
+
async credentialLogin(options) {
|
|
209
|
+
const jar = new CookieJar();
|
|
210
|
+
// 1. Warm-up GET of the login page — collects the F5 WAF's `TS*` cookies BEFORE the POST
|
|
211
|
+
// (observed 2026-10-17: the GET sets them and the POST is accepted with them present).
|
|
212
|
+
await fetchWithJar(this.fetchImpl, jar, loginUrl(options.destination), { method: 'GET' });
|
|
213
|
+
// 2. The exact five form fields the page JS computes (auth-login.md, re-confirmed
|
|
214
|
+
// 2026-10-17): the RUT split into body (leading zeros dropped) + DV, the dotted RUT in
|
|
215
|
+
// `rutcntr`, the destination in `referencia`, `411` empty, and the Clave.
|
|
216
|
+
const rut = Rut.parse(options.rut);
|
|
217
|
+
const form = new URLSearchParams({
|
|
218
|
+
rut: String(rut.body),
|
|
219
|
+
dv: rut.dv,
|
|
220
|
+
referencia: options.destination,
|
|
221
|
+
'411': '',
|
|
222
|
+
rutcntr: rut.formatted,
|
|
223
|
+
clave: options.clave,
|
|
224
|
+
});
|
|
225
|
+
const r = await fetchWithJar(this.fetchImpl, jar, LOGIN_POST_URL, {
|
|
226
|
+
method: 'POST',
|
|
227
|
+
headers: {
|
|
228
|
+
'content-type': 'application/x-www-form-urlencoded',
|
|
229
|
+
origin: `https://${LOGIN_HOST}`,
|
|
230
|
+
referer: loginUrl(options.destination),
|
|
231
|
+
},
|
|
232
|
+
body: form.toString(),
|
|
233
|
+
});
|
|
234
|
+
// 3. Queue-it waiting room ⇒ stop (an HTTP client cannot pass it).
|
|
235
|
+
if (landedOn(r.finalUrl, QUEUE_IT_HOST)) {
|
|
236
|
+
throw new LoginQueuedError('El SII está derivando el ingreso a su sala de espera (salaespera.sii.cl). ' +
|
|
237
|
+
'Intenta más tarde; no se reintenta automáticamente.');
|
|
238
|
+
}
|
|
239
|
+
// 4. Success vs rejection. SII answers 200 on `zeusr` either way (observed 2026-10-17), so
|
|
240
|
+
// the body is the signal: a rejected Clave renders the error código page. Parse it and
|
|
241
|
+
// surface SII's verbatim message + the typed reason/código (#124). ONE attempt, never
|
|
242
|
+
// retried (ADR-004). A changed shape with no session cookie falls through to the generic
|
|
243
|
+
// "not completed" below — the caller's Mi SII identity read is the final proof.
|
|
244
|
+
const detail = parseSiiLoginErrorDetail(decode(r));
|
|
245
|
+
if (detail.message !== null) {
|
|
246
|
+
throw new LoginFailedError(detail.message, { reason: detail.reason, codigo: detail.codigo });
|
|
247
|
+
}
|
|
248
|
+
return new HttpPortalSession(this.fetchImpl, jar);
|
|
249
|
+
}
|
|
250
|
+
restore(storageState) {
|
|
251
|
+
return Promise.resolve(new HttpPortalSession(this.fetchImpl, CookieJar.fromStorageState(storageState)));
|
|
252
|
+
}
|
|
253
|
+
async requestPublic(url, options = {}) {
|
|
254
|
+
// UNAUTHENTICATED public consulta (ADR-014): a cold request, no jar, no session. Headers are
|
|
255
|
+
// built through `Headers` (case-insensitive) so a caller-supplied `content-type` can't collide
|
|
256
|
+
// with the default and get appended into a duplicate — the class of bug that 500'd www4 on the
|
|
257
|
+
// authenticated path (GH live validation 2026-10-18); `Headers.has` is case-insensitive.
|
|
258
|
+
const headers = new Headers();
|
|
259
|
+
for (const [k, v] of Object.entries(options.headers ?? {}))
|
|
260
|
+
headers.set(k, v);
|
|
261
|
+
let body;
|
|
262
|
+
if (options.form) {
|
|
263
|
+
body = new URLSearchParams(options.form).toString();
|
|
264
|
+
if (!headers.has('content-type'))
|
|
265
|
+
headers.set('content-type', 'application/x-www-form-urlencoded');
|
|
266
|
+
}
|
|
267
|
+
const response = await this.fetchImpl(url, {
|
|
268
|
+
method: options.method ?? 'POST',
|
|
269
|
+
headers,
|
|
270
|
+
signal: AbortSignal.timeout(REQUEST_TIMEOUT_MS),
|
|
271
|
+
...(body !== undefined ? { body } : {}),
|
|
272
|
+
});
|
|
273
|
+
const buffer = await response.arrayBuffer();
|
|
274
|
+
const text = new TextDecoder(charsetOf(response.headers.get('content-type'))).decode(buffer);
|
|
275
|
+
return { status: response.status, body: text };
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
//# sourceMappingURL=http.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../../src/adapters/node/http.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"portal.d.ts","sourceRoot":"","sources":["../../../src/adapters/node/portal.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"portal.d.ts","sourceRoot":"","sources":["../../../src/adapters/node/portal.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAGV,sBAAsB,EAEtB,uBAAuB,EAEvB,YAAY,EACZ,aAAa,EACb,aAAa,EACb,cAAc,EAEf,MAAM,sBAAsB,CAAC;AAqL9B,qBAAa,sBAAuB,YAAW,YAAY;IACnD,gBAAgB,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,aAAa,CAAC;IAuB1E,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,aAAa,CAAC;IAwCxE,OAAO,CAAC,YAAY,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC;IAkBtD,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,cAAc,CAAC;CA0BvF"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { LOGIN_HOST, loginUrl } from '../../config/index.js';
|
|
2
2
|
import { LoginFailedError } from '../../errors/index.js';
|
|
3
|
-
import {
|
|
3
|
+
import { parseSiiLoginErrorDetail } from '../../auth/login-error.js';
|
|
4
4
|
import { charsetOf, formLoginWallError, nonJsonResponseError } from './response.js';
|
|
5
5
|
/** Lazy-load playwright — an OPTIONAL peer since ADR-016. Only the launch paths of
|
|
6
6
|
* this default driver need it, so a consumer that injects its own PortalDriver (or
|
|
@@ -36,10 +36,12 @@ async function readLoginError(page) {
|
|
|
36
36
|
// Pull the rendered body text and parse in Node (testable; keeps the DOM out
|
|
37
37
|
// of core). The string expr returns a string, so the boundary cast is safe.
|
|
38
38
|
const body = (await page.evaluate('(document.body && document.body.innerText) || ""'));
|
|
39
|
-
|
|
39
|
+
const d = parseSiiLoginErrorDetail(body);
|
|
40
|
+
// A changed shape (message null) ⇒ fallback text, reason 'unknown', no código.
|
|
41
|
+
return { message: d.message ?? fallback, reason: d.reason, codigo: d.codigo };
|
|
40
42
|
}
|
|
41
43
|
catch {
|
|
42
|
-
return fallback;
|
|
44
|
+
return { message: fallback, reason: 'unknown', codigo: null };
|
|
43
45
|
}
|
|
44
46
|
}
|
|
45
47
|
/** A session owns its browser; close() tears the whole instance down. */
|
|
@@ -212,7 +214,8 @@ export class PlaywrightPortalDriver {
|
|
|
212
214
|
]);
|
|
213
215
|
if (new URL(page.url()).hostname === LOGIN_HOST) {
|
|
214
216
|
// Rejected — surface SII's verbatim message (CONVENTIONS); do NOT retry.
|
|
215
|
-
|
|
217
|
+
const e = await readLoginError(page);
|
|
218
|
+
throw new LoginFailedError(e.message, { reason: e.reason, codigo: e.codigo });
|
|
216
219
|
}
|
|
217
220
|
return new PlaywrightPortalSession(browser, context, page);
|
|
218
221
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"portal.js","sourceRoot":"","sources":["../../../src/adapters/node/portal.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"portal.js","sourceRoot":"","sources":["../../../src/adapters/node/portal.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,6 +20,20 @@ export declare function nonJsonResponseError(finalUrl: string, contentType: stri
|
|
|
20
20
|
* `LOGIN_HOST` (URL-based, ADR-009). Returns an actionable `SessionExpiredError`, else
|
|
21
21
|
* null. Pure → unit-tested without a browser. */
|
|
22
22
|
export declare function formLoginWallError(finalUrl: string): Error | null;
|
|
23
|
+
/** Larger than the observed stub (344 bytes) with room for a longer origin URL; a real portal
|
|
24
|
+
* page is tens of KB, so a size bound keeps the body scan off every normal response. */
|
|
25
|
+
export declare const LOGIN_STUB_MAX_BYTES = 2048;
|
|
26
|
+
/** Recognise SII's JS-only login-wall page and return where it sends the browser, else null.
|
|
27
|
+
* Mi SII answers a DEAD jar with HTTP 200 and a page whose only content is
|
|
28
|
+
* `location.replace('https://zeusr.sii.cl//AUT2000/InicioAutenticacion/IngresoRutClave.html?<origin>')`
|
|
29
|
+
* — no HTTP redirect, so a client that does not run JS stays on `misiir.sii.cl` and would read
|
|
30
|
+
* the session as alive. Observed at https://misiir.sii.cl/cgi_misii/siihome.cgi on 2026-10-18
|
|
31
|
+
* (GH-139); loa, www1, www3 and www4 bounced the same dead jar with a real HTTP redirect.
|
|
32
|
+
* Deliberately narrow: once the markup is stripped, the page must hold NOTHING but one
|
|
33
|
+
* navigation, and its target must be on `LOGIN_HOST`. A live page that merely links to zeusr
|
|
34
|
+
* (the "cerrar sesión" handler) never matches, because it has content besides that statement.
|
|
35
|
+
* Pure → unit-tested without fetch. */
|
|
36
|
+
export declare function loginStubTarget(html: string): string | null;
|
|
23
37
|
/** Extract the charset label from a `Content-Type` header for decoding a public
|
|
24
38
|
* (unauthenticated) response body (ADR-014). SII's palena reports declare
|
|
25
39
|
* `text/html; charset=ISO-8859-1`, so a UTF-8 decode would mangle accents (ó, é,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../../src/adapters/node/response.ts"],"names":[],"mappings":"AASA;;;;;;;;;;;;;;gDAcgD;AAChD,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,IAAI,SAAK,GACR,KAAK,
|
|
1
|
+
{"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../../src/adapters/node/response.ts"],"names":[],"mappings":"AASA;;;;;;;;;;;;;;gDAcgD;AAChD,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,IAAI,SAAK,GACR,KAAK,CAmBP;AAQD;;;;kDAIkD;AAClD,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI,CAIjE;AAED;yFACyF;AACzF,eAAO,MAAM,oBAAoB,OAAO,CAAC;AAEzC;;;;;;;;;wCASwC;AACxC,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAiB3D;AAED;;;;qFAIqF;AACrF,wBAAgB,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAYxE"}
|
|
@@ -24,7 +24,10 @@ export function nonJsonResponseError(finalUrl, contentType, status, body = '') {
|
|
|
24
24
|
const ct = contentType.toLowerCase();
|
|
25
25
|
const url = new URL(finalUrl);
|
|
26
26
|
const bouncedToLogin = url.hostname === LOGIN_HOST;
|
|
27
|
-
|
|
27
|
+
// A real login wall is a 2xx/3xx HTML page (a same-host bounce). A 5xx HTML body is a SERVER
|
|
28
|
+
// error, not an expired session — don't mislabel it "sesión expiró" (observed 2026-10-18: www4
|
|
29
|
+
// answered HTTP 500 text/html to a malformed request; ADR-027 GH live validation).
|
|
30
|
+
if (bouncedToLogin || (ct.includes('text/html') && status < 500)) {
|
|
28
31
|
return new SessionExpiredError('La sesión expiró. Ejecuta `sii auth login`.');
|
|
29
32
|
}
|
|
30
33
|
const snippet = bodySnippet(body);
|
|
@@ -50,6 +53,36 @@ export function formLoginWallError(finalUrl) {
|
|
|
50
53
|
? new SessionExpiredError('La sesión expiró. Ejecuta `sii auth login`.')
|
|
51
54
|
: null;
|
|
52
55
|
}
|
|
56
|
+
/** Larger than the observed stub (344 bytes) with room for a longer origin URL; a real portal
|
|
57
|
+
* page is tens of KB, so a size bound keeps the body scan off every normal response. */
|
|
58
|
+
export const LOGIN_STUB_MAX_BYTES = 2048;
|
|
59
|
+
/** Recognise SII's JS-only login-wall page and return where it sends the browser, else null.
|
|
60
|
+
* Mi SII answers a DEAD jar with HTTP 200 and a page whose only content is
|
|
61
|
+
* `location.replace('https://zeusr.sii.cl//AUT2000/InicioAutenticacion/IngresoRutClave.html?<origin>')`
|
|
62
|
+
* — no HTTP redirect, so a client that does not run JS stays on `misiir.sii.cl` and would read
|
|
63
|
+
* the session as alive. Observed at https://misiir.sii.cl/cgi_misii/siihome.cgi on 2026-10-18
|
|
64
|
+
* (GH-139); loa, www1, www3 and www4 bounced the same dead jar with a real HTTP redirect.
|
|
65
|
+
* Deliberately narrow: once the markup is stripped, the page must hold NOTHING but one
|
|
66
|
+
* navigation, and its target must be on `LOGIN_HOST`. A live page that merely links to zeusr
|
|
67
|
+
* (the "cerrar sesión" handler) never matches, because it has content besides that statement.
|
|
68
|
+
* Pure → unit-tested without fetch. */
|
|
69
|
+
export function loginStubTarget(html) {
|
|
70
|
+
const script = html
|
|
71
|
+
.replace(/<!DOCTYPE[^>]*>/gi, '')
|
|
72
|
+
.replace(/<\/?(?:html|head|body)\b[^>]*>/gi, '')
|
|
73
|
+
.replace(/<script\b[^>]*>|<\/script>/gi, '')
|
|
74
|
+
.trim();
|
|
75
|
+
const m = /^(?:window\.)?location(?:\.replace\(|\.assign\(|\.href\s*=\s*|\s*=\s*)\s*(['"])([^'"]+)\1\s*\)?\s*;?$/.exec(script);
|
|
76
|
+
if (!m?.[2])
|
|
77
|
+
return null;
|
|
78
|
+
try {
|
|
79
|
+
const target = new URL(m[2]);
|
|
80
|
+
return target.hostname === LOGIN_HOST ? target.href : null;
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
53
86
|
/** Extract the charset label from a `Content-Type` header for decoding a public
|
|
54
87
|
* (unauthenticated) response body (ADR-014). SII's palena reports declare
|
|
55
88
|
* `text/html; charset=ISO-8859-1`, so a UTF-8 decode would mangle accents (ó, é,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"response.js","sourceRoot":"","sources":["../../../src/adapters/node/response.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAErF;;;8CAG8C;AAC9C,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAE9B;;;;;;;;;;;;;;gDAcgD;AAChD,MAAM,UAAU,oBAAoB,CAClC,QAAgB,EAChB,WAAmB,EACnB,MAAc,EACd,IAAI,GAAG,EAAE;IAET,MAAM,EAAE,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC9B,MAAM,cAAc,GAAG,GAAG,CAAC,QAAQ,KAAK,UAAU,CAAC;IACnD,IAAI,cAAc,IAAI,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"response.js","sourceRoot":"","sources":["../../../src/adapters/node/response.ts"],"names":[],"mappings":"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"}
|
package/dist/auth/auth.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Rut } from '../rut/index.js';
|
|
2
2
|
import type { AccountType } from '../identity/index.js';
|
|
3
3
|
import type { Runtime } from '../seams/index.js';
|
|
4
|
+
import type { LoginBlockEntry } from './login-block.js';
|
|
4
5
|
export interface AuthIdentity {
|
|
5
6
|
readonly rut: string;
|
|
6
7
|
readonly nombre: string | null;
|
|
@@ -32,11 +33,20 @@ export interface AuthStatusLocal {
|
|
|
32
33
|
readonly rut: string | null;
|
|
33
34
|
readonly sessionSource: 'cached' | 'none';
|
|
34
35
|
readonly www2: AuthWww2Status;
|
|
36
|
+
/** The rejection latch (ADR-028): RUTs whose last unattended login the SII rejected, with
|
|
37
|
+
* when and SII's código. Non-empty ⇒ env/stdin/keyring logins for those RUTs refuse without
|
|
38
|
+
* contacting SII until a person lifts it. Reported here so a caller checks it before it
|
|
39
|
+
* tries. Independent of the session: a live session keeps working while latched. */
|
|
40
|
+
readonly loginBlocked: readonly LoginBlockEntry[];
|
|
35
41
|
}
|
|
42
|
+
/** Where the Clave came from. Audited on every login (never the value — ADR-028); `browser` is
|
|
43
|
+
* the user typing at SII's own page (the MCP's `auth_login`). */
|
|
44
|
+
export type LoginSource = 'browser' | 'console' | 'keyring' | 'env' | 'stdin';
|
|
45
|
+
type FreshLoginReason = `${LoginSource}_login`;
|
|
36
46
|
export interface AuthLoginResult {
|
|
37
47
|
readonly authenticated: true;
|
|
38
48
|
readonly rut: string;
|
|
39
|
-
readonly reason:
|
|
49
|
+
readonly reason: FreshLoginReason | 'already_authenticated';
|
|
40
50
|
/** Set when `--www2` was requested: the www2 layer's state after this call (ADR-026). */
|
|
41
51
|
readonly www2?: AuthWww2Status;
|
|
42
52
|
}
|
|
@@ -68,6 +78,16 @@ export declare function consoleLogin(runtime: Runtime, credentials: {
|
|
|
68
78
|
rut: string;
|
|
69
79
|
clave: string;
|
|
70
80
|
}): Promise<AuthLoginResult>;
|
|
81
|
+
/** CLI-only non-interactive login (ADR-028): the SURFACE read the Clave from an environment
|
|
82
|
+
* variable it was told to read (`--clave-env <VAR>`) or from piped stdin (`--clave-stdin`),
|
|
83
|
+
* and `source` records which. Everything else matches `consoleLogin`, plus the rejection
|
|
84
|
+
* latch: no one is at the keyboard to notice a stale Clave, so a latched RUT is refused
|
|
85
|
+
* without contacting SII. */
|
|
86
|
+
export declare function suppliedClaveLogin(runtime: Runtime, args: {
|
|
87
|
+
rut: string;
|
|
88
|
+
clave: string;
|
|
89
|
+
source: 'env' | 'stdin';
|
|
90
|
+
}): Promise<AuthLoginResult>;
|
|
71
91
|
/** The RUT renderings a human plausibly stored the entry under, in lookup order. The
|
|
72
92
|
* keyring is populated BY HAND (`secret-tool`, Seahorse, Keychain Access), so the code
|
|
73
93
|
* adapts to the human rather than the reverse (ADR-025). `Rut.parse` already upper-cases
|
|
@@ -80,6 +100,11 @@ export declare function keyringAccounts(rut: Rut): string[];
|
|
|
80
100
|
export declare function keyringLogin(runtime: Runtime, args: {
|
|
81
101
|
rut: string;
|
|
82
102
|
}): Promise<AuthLoginResult>;
|
|
103
|
+
/** Lift the rejection latch (ADR-028) for one RUT, or for all when none is given. A local
|
|
104
|
+
* wipe: nothing is sent to SII. Returns the RUTs that were latched. */
|
|
105
|
+
export declare function unblockLogin(runtime: Runtime, args?: {
|
|
106
|
+
rut?: string;
|
|
107
|
+
}): Promise<string[]>;
|
|
83
108
|
/** Server-side close (best-effort) + wipe local session + operate context. */
|
|
84
109
|
export declare function logout(runtime: Runtime): Promise<AuthLogoutResult>;
|
|
85
110
|
/** Curated identity readback from the portal. Requires a live session (no implicit
|
|
@@ -92,4 +117,5 @@ export declare function statusRefresh(runtime: Runtime): Promise<AuthIdentityRef
|
|
|
92
117
|
* (keyed by rut) — never the razón social / email VALUES: that PII stays off the
|
|
93
118
|
* receipt, the LLM-facing MCP description declares the exposure instead (ADR-006). */
|
|
94
119
|
export declare function whoami(runtime: Runtime): Promise<AuthWhoami>;
|
|
120
|
+
export {};
|
|
95
121
|
//# sourceMappingURL=auth.d.ts.map
|
package/dist/auth/auth.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/auth/auth.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/auth/auth.ts"],"names":[],"mappings":"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"}
|