@albertomarturelo/sii-core 0.9.0 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/CHANGELOG.md +101 -0
  2. package/dist/adapters/fake/index.d.ts +20 -4
  3. package/dist/adapters/fake/index.d.ts.map +1 -1
  4. package/dist/adapters/fake/index.js +38 -4
  5. package/dist/adapters/fake/index.js.map +1 -1
  6. package/dist/adapters/node/cookie-jar.d.ts +35 -0
  7. package/dist/adapters/node/cookie-jar.d.ts.map +1 -0
  8. package/dist/adapters/node/cookie-jar.js +211 -0
  9. package/dist/adapters/node/cookie-jar.js.map +1 -0
  10. package/dist/adapters/node/http.d.ts +12 -0
  11. package/dist/adapters/node/http.d.ts.map +1 -0
  12. package/dist/adapters/node/http.js +262 -0
  13. package/dist/adapters/node/http.js.map +1 -0
  14. package/dist/adapters/node/portal.d.ts.map +1 -1
  15. package/dist/adapters/node/portal.js +18 -8
  16. package/dist/adapters/node/portal.js.map +1 -1
  17. package/dist/adapters/node/response.d.ts +12 -4
  18. package/dist/adapters/node/response.d.ts.map +1 -1
  19. package/dist/adapters/node/response.js +36 -8
  20. package/dist/adapters/node/response.js.map +1 -1
  21. package/dist/auth/auth.d.ts +55 -6
  22. package/dist/auth/auth.d.ts.map +1 -1
  23. package/dist/auth/auth.js +238 -56
  24. package/dist/auth/auth.js.map +1 -1
  25. package/dist/auth/datos-cntr.d.ts +23 -0
  26. package/dist/auth/datos-cntr.d.ts.map +1 -0
  27. package/dist/auth/datos-cntr.js +81 -0
  28. package/dist/auth/datos-cntr.js.map +1 -0
  29. package/dist/auth/index.d.ts +1 -0
  30. package/dist/auth/index.d.ts.map +1 -1
  31. package/dist/auth/login-block.d.ts +23 -0
  32. package/dist/auth/login-block.d.ts.map +1 -0
  33. package/dist/auth/login-block.js +53 -0
  34. package/dist/auth/login-block.js.map +1 -0
  35. package/dist/auth/login-error.d.ts +20 -3
  36. package/dist/auth/login-error.d.ts.map +1 -1
  37. package/dist/auth/login-error.js +20 -5
  38. package/dist/auth/login-error.js.map +1 -1
  39. package/dist/auth/session.d.ts +29 -2
  40. package/dist/auth/session.d.ts.map +1 -1
  41. package/dist/auth/session.js +35 -2
  42. package/dist/auth/session.js.map +1 -1
  43. package/dist/auth/www2-login.d.ts +28 -0
  44. package/dist/auth/www2-login.d.ts.map +1 -0
  45. package/dist/auth/www2-login.js +101 -0
  46. package/dist/auth/www2-login.js.map +1 -0
  47. package/dist/cli.d.ts +2 -2
  48. package/dist/cli.d.ts.map +1 -1
  49. package/dist/cli.js +4 -1
  50. package/dist/cli.js.map +1 -1
  51. package/dist/config/config.d.ts +21 -0
  52. package/dist/config/config.d.ts.map +1 -1
  53. package/dist/config/config.js +21 -0
  54. package/dist/config/config.js.map +1 -1
  55. package/dist/errors/errors.d.ts +59 -2
  56. package/dist/errors/errors.d.ts.map +1 -1
  57. package/dist/errors/errors.js +55 -2
  58. package/dist/errors/errors.js.map +1 -1
  59. package/dist/index.d.ts +3 -1
  60. package/dist/index.d.ts.map +1 -1
  61. package/dist/index.js +1 -0
  62. package/dist/index.js.map +1 -1
  63. package/dist/node.d.ts +7 -3
  64. package/dist/node.d.ts.map +1 -1
  65. package/dist/node.js +10 -4
  66. package/dist/node.js.map +1 -1
  67. package/dist/portal/carpeta-tributaria-regular.d.ts +30 -0
  68. package/dist/portal/carpeta-tributaria-regular.d.ts.map +1 -0
  69. package/dist/portal/carpeta-tributaria-regular.js +142 -0
  70. package/dist/portal/carpeta-tributaria-regular.js.map +1 -0
  71. package/dist/portal/www2-session.d.ts +13 -0
  72. package/dist/portal/www2-session.d.ts.map +1 -0
  73. package/dist/portal/www2-session.js +61 -0
  74. package/dist/portal/www2-session.js.map +1 -0
  75. package/dist/seams/index.d.ts +7 -0
  76. package/dist/seams/index.d.ts.map +1 -1
  77. package/dist/tasks/auth.d.ts +23 -6
  78. package/dist/tasks/auth.d.ts.map +1 -1
  79. package/dist/tasks/auth.js +20 -5
  80. package/dist/tasks/auth.js.map +1 -1
  81. package/dist/tasks/bte.d.ts.map +1 -1
  82. package/dist/tasks/bte.js +4 -2
  83. package/dist/tasks/bte.js.map +1 -1
  84. package/dist/tasks/carpeta.d.ts +9 -0
  85. package/dist/tasks/carpeta.d.ts.map +1 -0
  86. package/dist/tasks/carpeta.js +49 -0
  87. package/dist/tasks/carpeta.js.map +1 -0
  88. package/dist/tasks/dte.js +8 -8
  89. package/dist/tasks/dte.js.map +1 -1
  90. package/package.json +1 -1
package/dist/auth/auth.js CHANGED
@@ -1,22 +1,50 @@
1
- import { HOSTS, KEYRING_SERVICE, LOGIN_HOST, LOGOUT_URL } from '../config/index.js';
2
- import { CredentialNotFoundError, LoginFailedError, NotAuthenticatedError, } from '../errors/index.js';
1
+ import { HOSTS, KEYRING_SERVICE, LOGIN_HOST, LOGOUT_URL, WWW2_APP_CARPETA, WWW2_SESSION_CLOSE_URL, } from '../config/index.js';
2
+ import { CredentialNotFoundError, LoginBlockedError, LoginFailedError, NotAuthenticatedError, ValidationError, } from '../errors/index.js';
3
3
  import { Rut } from '../rut/index.js';
4
4
  import { recordAudit } from '../audit/index.js';
5
5
  import { clearOperateState, initOperateState } from '../identity/index.js';
6
6
  import { fetchEmpresasAutorizadas } from '../portal/representacion.js';
7
- import { deleteSession, readSession, withSession, writeSession } from './session.js';
7
+ import { deleteSession, readSession, requireBrowser, withSession, writeSession, } from './session.js';
8
+ import { parseDatosCntrNow } from './datos-cntr.js';
9
+ import { clearLoginBlock, listLoginBlocks, readLoginBlock, reasonForCodigo, siiJudgedClave, tripLoginBlock, } from './login-block.js';
10
+ import { mergeStorageState, waitForWww2Session, www2ExpiresAt } from './www2-login.js';
11
+ import { readWww2Session } from '../portal/www2-session.js';
12
+ import { Www2SessionError } from '../errors/index.js';
8
13
  const DEFAULT_LOGIN_TIMEOUT_MS = 180_000;
9
14
  // Console login submits machine-fast (no human typing in the browser) and fails
10
15
  // fast on a rejected Clave, so it needs a far smaller budget than the headed flow.
11
16
  const CONSOLE_LOGIN_TIMEOUT_MS = 60_000;
12
- // The Mi-SII landing serves this inline JS object with the contribuyente snapshot.
13
- const DATOS_EXPR = "typeof DatosCntrNow !== 'undefined' ? DatosCntrNow : null";
14
- /** Pure local read — NO portal call (sii-py "local-only" labelling). */
15
- export async function localStatus(store) {
17
+ /** Read the Mi SII identity. The landing serves `DatosCntrNow` as an inline JS literal, so we
18
+ * fetch the HTML and parse it (ADR-027) — engine-agnostic (works over the HTTP driver and the
19
+ * browser one), replacing the old `session.evaluate`. `null` ⇒ not present (dead session). */
20
+ async function readDatos(session) {
21
+ const { body } = await session.requestText(HOSTS.miSii, { method: 'GET' });
22
+ return parseDatosCntrNow(body);
23
+ }
24
+ /** A human typed the Clave: a fresh login from one of these lifts the rejection latch. */
25
+ const INTERACTIVE_SOURCES = ['browser', 'console'];
26
+ const NO_WWW2 = { authenticated: false, expiresAt: null };
27
+ function www2StatusOf(session, now) {
28
+ const layer = session?.www2;
29
+ if (!layer)
30
+ return NO_WWW2;
31
+ const alive = layer.expiresAt === null || new Date(layer.expiresAt).getTime() > now.getTime();
32
+ return { authenticated: alive, expiresAt: layer.expiresAt };
33
+ }
34
+ /** Pure local read — NO portal call (sii-py "local-only" labelling). `now` decides whether the
35
+ * stored www2 layer is still within its cookie's own expiry. */
36
+ export async function localStatus(store, now) {
16
37
  const session = await readSession(store);
38
+ const loginBlocked = await listLoginBlocks(store);
17
39
  return session
18
- ? { authenticated: true, rut: session.rut, sessionSource: 'cached' }
19
- : { authenticated: false, rut: null, sessionSource: 'none' };
40
+ ? {
41
+ authenticated: true,
42
+ rut: session.rut,
43
+ sessionSource: 'cached',
44
+ www2: www2StatusOf(session, now),
45
+ loginBlocked,
46
+ }
47
+ : { authenticated: false, rut: null, sessionSource: 'none', www2: NO_WWW2, loginBlocked };
20
48
  }
21
49
  function identityFromDatos(datos) {
22
50
  const c = datos?.contribuyente;
@@ -43,20 +71,23 @@ async function liveSessionRut(runtime) {
43
71
  return null;
44
72
  }
45
73
  }
46
- /** If a cached session is still live, return `already_authenticated` (no mint).
47
- * Shared by both login paths so neither re-mints over a warm session. */
48
- async function reuseLiveSession(runtime) {
74
+ /** If a cached session is still live, the `already_authenticated` result (no mint) — WITHOUT
75
+ * auditing it. The receipt is written by the caller that actually RETURNS this outcome: a
76
+ * `--www2` login can find the classic session warm and still need the browser (for the www2
77
+ * layer), and the audit must record what happened, not what was probed (ADR-004). */
78
+ async function liveSessionResult(runtime) {
49
79
  const rut = await liveSessionRut(runtime);
50
- if (rut) {
51
- recordAudit(runtime, {
52
- action: 'auth_login',
53
- result: 'ok',
54
- rut,
55
- reason: 'already_authenticated',
56
- });
57
- return { authenticated: true, rut, reason: 'already_authenticated' };
58
- }
59
- return null;
80
+ return rut ? { authenticated: true, rut, reason: 'already_authenticated' } : null;
81
+ }
82
+ /** The receipt for a login that ENDED as "already authenticated". */
83
+ function auditAlreadyAuthenticated(runtime, warm, source) {
84
+ recordAudit(runtime, {
85
+ action: 'auth_login',
86
+ result: 'ok',
87
+ rut: warm.rut,
88
+ reason: warm.reason,
89
+ source,
90
+ });
60
91
  }
61
92
  /** Best-effort operable-set fetch on login (ADR-005). Persona accounts ask SII for
62
93
  * the empresas they can operate (getDcvEmpresasAutorizadas); empresa accounts have
@@ -98,12 +129,13 @@ async function resolveOperable(runtime, session, identity) {
98
129
  /** Turn a freshly-minted PortalSession into a persisted cookies-only session:
99
130
  * confirm we landed off the login host, read identity, persist cookies (NO
100
131
  * secret), default operate to self. Shared by the browser + console paths. */
101
- async function finalizeFreshSession(runtime, session, reason, start) {
132
+ async function finalizeFreshSession(runtime, session, source, start) {
133
+ const reason = `${source}_login`;
102
134
  const landed = await session.goto(HOSTS.miSii);
103
135
  if (landedOnLoginHost(landed)) {
104
136
  throw new LoginFailedError('Login no completado (seguimos en la página de autenticación).');
105
137
  }
106
- const datos = await session.evaluate(DATOS_EXPR);
138
+ const datos = await readDatos(session);
107
139
  const identity = identityFromDatos(datos);
108
140
  const cookies = await session.storageState();
109
141
  await writeSession(runtime.store, {
@@ -118,33 +150,98 @@ async function finalizeFreshSession(runtime, session, reason, start) {
118
150
  accountType: identity.accountType,
119
151
  operable,
120
152
  });
153
+ // A human just proved a working Clave, which is the reset ADR-028 names for the latch.
154
+ if (INTERACTIVE_SOURCES.includes(source))
155
+ await clearLoginBlock(runtime.store, identity.rut);
121
156
  recordAudit(runtime, {
122
157
  action: 'auth_login',
123
158
  result: 'ok',
124
159
  rut: identity.rut,
125
160
  reason,
161
+ source,
126
162
  durationMs: runtime.clock.now().getTime() - start,
127
163
  });
128
164
  return { authenticated: true, rut: identity.rut, reason };
129
165
  }
166
+ /** Is the stored www2 layer live on the server? One cheap read via a headless restore; never
167
+ * throws (the login path needs "is it warm?", not an error). */
168
+ async function liveWww2(runtime) {
169
+ try {
170
+ await withSession(runtime, async (s) => readWww2Session(s, WWW2_APP_CARPETA));
171
+ return true;
172
+ }
173
+ catch {
174
+ return false;
175
+ }
176
+ }
177
+ /** The www2 step (ADR-026), run on the still-open headed `session` AFTER the classic login has
178
+ * been persisted: snapshot the classic jar, let the user log in at SII's OAuth page, then store
179
+ * classic + www2 cookies together with the layer's own expiry. On timeout the classic session
180
+ * stays saved and `LoginFailedError` says so. */
181
+ async function mintWww2Layer(runtime, session) {
182
+ const stored = await readSession(runtime.store);
183
+ if (!stored)
184
+ throw new NotAuthenticatedError('No hay sesión. Ejecuta `sii auth login`.');
185
+ const start = runtime.clock.now().getTime();
186
+ try {
187
+ const classicJar = await session.storageState();
188
+ await waitForWww2Session(runtime, session);
189
+ const www2Jar = await session.storageState();
190
+ const expiresAt = www2ExpiresAt(www2Jar);
191
+ const savedAt = runtime.clock.now().toISOString();
192
+ await writeSession(runtime.store, {
193
+ ...stored,
194
+ cookies: mergeStorageState(classicJar, www2Jar),
195
+ www2: { savedAt, expiresAt },
196
+ });
197
+ recordAudit(runtime, {
198
+ action: 'auth_login_www2',
199
+ result: 'ok',
200
+ rut: stored.rut,
201
+ durationMs: runtime.clock.now().getTime() - start,
202
+ });
203
+ return { authenticated: true, expiresAt };
204
+ }
205
+ catch (err) {
206
+ recordAudit(runtime, { action: 'auth_login_www2', result: 'failed', rut: stored.rut });
207
+ throw err;
208
+ }
209
+ }
130
210
  /** Browser cookies-only login (ADR-006). Only this + `consoleLogin` mint a session
131
211
  * (ADR-019 lineage). Idempotent: a live cached session returns
132
- * `already_authenticated` without opening a window. */
133
- export async function login(runtime) {
212
+ * `already_authenticated` without opening a window. With `www2`, both layers must be live
213
+ * for that shortcut; otherwise the headed flow runs in full (classic login, then the www2
214
+ * step in the same browser — the classic page is what carries the user into SII). */
215
+ export async function login(runtime, options = {}) {
134
216
  const start = runtime.clock.now().getTime();
135
- const warm = await reuseLiveSession(runtime);
136
- if (warm)
137
- return warm;
217
+ const warm = await liveSessionResult(runtime);
218
+ if (warm && (!options.www2 || (await liveWww2(runtime)))) {
219
+ auditAlreadyAuthenticated(runtime, warm, 'browser');
220
+ if (!options.www2)
221
+ return warm;
222
+ const stored = await readSession(runtime.store);
223
+ return { ...warm, www2: www2StatusOf(stored, runtime.clock.now()) };
224
+ }
138
225
  let session = null;
139
226
  try {
140
- session = await runtime.portal.interactiveLogin({
227
+ // The headed login is the browser engine's job (ADR-027): the CLI's default is the HTTP
228
+ // console login, so only the MCP (which wires the browser) reaches this.
229
+ session = await requireBrowser(runtime).interactiveLogin({
141
230
  destination: HOSTS.miSii,
142
231
  timeoutMs: DEFAULT_LOGIN_TIMEOUT_MS,
143
232
  });
144
- return await finalizeFreshSession(runtime, session, 'browser_login', start);
233
+ const result = await finalizeFreshSession(runtime, session, 'browser', start);
234
+ if (!options.www2)
235
+ return result;
236
+ return { ...result, www2: await mintWww2Layer(runtime, session) };
145
237
  }
146
238
  catch (err) {
147
- recordAudit(runtime, { action: 'auth_login', result: 'failed', reason: 'browser_login' });
239
+ recordAudit(runtime, {
240
+ action: 'auth_login',
241
+ result: 'failed',
242
+ reason: 'browser_login',
243
+ source: 'browser',
244
+ });
148
245
  throw err;
149
246
  }
150
247
  finally {
@@ -156,32 +253,78 @@ export async function login(runtime) {
156
253
  * stored, exactly like the browser path. ONE attempt, never retried (ADR-004).
157
254
  * The Clave never reaches MCP (this task is CLI-only) nor the audit log. */
158
255
  export async function consoleLogin(runtime, credentials) {
159
- return credentialLoginFlow(runtime, () => Promise.resolve(credentials), 'console_login');
256
+ return credentialLoginFlow(runtime, Rut.parse(credentials.rut), () => Promise.resolve(credentials.clave), 'console');
257
+ }
258
+ /** CLI-only non-interactive login (ADR-028): the SURFACE read the Clave from an environment
259
+ * variable it was told to read (`--clave-env <VAR>`) or from piped stdin (`--clave-stdin`),
260
+ * and `source` records which. Everything else matches `consoleLogin`, plus the rejection
261
+ * latch: no one is at the keyboard to notice a stale Clave, so a latched RUT is refused
262
+ * without contacting SII. */
263
+ export async function suppliedClaveLogin(runtime, args) {
264
+ return credentialLoginFlow(runtime, Rut.parse(args.rut), () => Promise.resolve(args.clave), args.source);
265
+ }
266
+ /** The live session's principal if it is `rut`; `null` if there is no live session. A live
267
+ * session for ANOTHER RUT is an error: answering "already authenticated" would hand the
268
+ * caller the wrong account, and switching stays an explicit logout→login (ADR-005). */
269
+ async function liveSessionFor(runtime, rut) {
270
+ const warm = await liveSessionResult(runtime);
271
+ if (warm && Rut.parse(warm.rut).canonical !== rut.canonical) {
272
+ throw new ValidationError(`Hay una sesión activa como ${warm.rut}, no como ${rut.canonical}. Para cambiar de ` +
273
+ 'cuenta: `sii auth logout` y luego `sii auth login`.');
274
+ }
275
+ return warm;
160
276
  }
161
- /** The headless fill-and-submit shared by the console (ADR-010) and keyring (ADR-025)
162
- * paths — they differ ONLY in where the Clave came from, so the attempt policy lives
163
- * in one place: ONE attempt, never retried (ADR-004), Clave discarded with the frame.
164
- * The credentials arrive as a THUNK so the Clave is fetched only once the live-session
165
- * probe has missed: an already-authenticated user must not trigger a keyring-unlock
166
- * prompt for a value nobody will use (review of #101). */
167
- async function credentialLoginFlow(runtime, getCredentials, reason) {
277
+ /** The headless fill-and-submit shared by every Clave source (ADR-010 / ADR-025 / ADR-028) —
278
+ * they differ ONLY in where the Clave came from, so the attempt policy lives in one place:
279
+ * ONE attempt, never retried (ADR-004), Clave discarded with the frame.
280
+ * The Clave arrives as a THUNK so it is fetched only once the live-session probe has missed:
281
+ * an already-authenticated user must not trigger a keyring-unlock prompt for a value nobody
282
+ * will use (review of #101). The probe runs BEFORE the latch on purpose: a cron whose session
283
+ * is still alive keeps working while latched, since nothing is submitted. */
284
+ async function credentialLoginFlow(runtime, rut, getClave, source) {
168
285
  const start = runtime.clock.now().getTime();
169
- const warm = await reuseLiveSession(runtime);
170
- if (warm)
286
+ const warm = await liveSessionFor(runtime, rut);
287
+ if (warm) {
288
+ auditAlreadyAuthenticated(runtime, warm, source);
171
289
  return warm;
172
- const credentials = await getCredentials();
290
+ }
291
+ if (!INTERACTIVE_SOURCES.includes(source)) {
292
+ const block = await readLoginBlock(runtime.store, rut.canonical);
293
+ if (block) {
294
+ recordAudit(runtime, {
295
+ action: 'auth_login',
296
+ result: 'blocked',
297
+ rut: rut.canonical,
298
+ source,
299
+ });
300
+ throw new LoginBlockedError(`Login desatendido bloqueado para ${rut.canonical}: el SII rechazó la Clave el ` +
301
+ `${block.at}${block.codigo ? ` (código ${block.codigo})` : ''}. No se contactó al ` +
302
+ 'SII. Corrige la Clave y ejecuta `sii auth login --console` (o `sii auth unblock`).', { reason: reasonForCodigo(block.codigo), codigo: block.codigo });
303
+ }
304
+ }
305
+ const clave = await getClave();
173
306
  let session = null;
174
307
  try {
175
308
  session = await runtime.portal.credentialLogin({
176
- rut: credentials.rut,
177
- clave: credentials.clave,
309
+ rut: rut.canonical,
310
+ clave,
178
311
  destination: HOSTS.miSii,
179
312
  timeoutMs: CONSOLE_LOGIN_TIMEOUT_MS,
180
313
  });
181
- return await finalizeFreshSession(runtime, session, reason, start);
314
+ return await finalizeFreshSession(runtime, session, source, start);
182
315
  }
183
316
  catch (err) {
184
- recordAudit(runtime, { action: 'auth_login', result: 'failed', reason });
317
+ // SII's verbatim rejection is what the user must see (ADR-004), so a failing latch write
318
+ // must not replace it with a disk error.
319
+ if (siiJudgedClave(err)) {
320
+ await tripLoginBlock(runtime, rut.canonical, err.codigo).catch(() => undefined);
321
+ }
322
+ recordAudit(runtime, {
323
+ action: 'auth_login',
324
+ result: 'failed',
325
+ reason: `${source}_login`,
326
+ source,
327
+ });
185
328
  throw err;
186
329
  }
187
330
  finally {
@@ -207,30 +350,51 @@ export async function keyringLogin(runtime, args) {
207
350
  if (!secrets) {
208
351
  throw new CredentialNotFoundError('Este runtime no tiene acceso al llavero (SecretStore). Usa `sii auth login --console`.');
209
352
  }
210
- return credentialLoginFlow(runtime, async () => {
353
+ return credentialLoginFlow(runtime, rut, async () => {
211
354
  const accounts = keyringAccounts(rut);
212
355
  for (const account of accounts) {
213
356
  const clave = await secrets.get(account);
214
357
  if (clave)
215
- return { rut: rut.canonical, clave };
358
+ return clave;
216
359
  }
217
360
  throw new CredentialNotFoundError(`No hay Clave en el llavero para ${rut.canonical} (servicio "${KEYRING_SERVICE}"). ` +
218
361
  `Guárdala con:\n` +
219
362
  ` Linux: secret-tool store --label='SII' service ${KEYRING_SERVICE} username ${rut.canonical}\n` +
220
363
  ` macOS: security add-generic-password -s ${KEYRING_SERVICE} -a ${rut.canonical} -w`);
221
- }, 'keyring_login');
364
+ }, 'keyring');
365
+ }
366
+ /** Lift the rejection latch (ADR-028) for one RUT, or for all when none is given. A local
367
+ * wipe: nothing is sent to SII. Returns the RUTs that were latched. */
368
+ export async function unblockLogin(runtime, args = {}) {
369
+ const rut = args.rut === undefined ? undefined : Rut.parse(args.rut).canonical;
370
+ const lifted = await clearLoginBlock(runtime.store, rut);
371
+ recordAudit(runtime, { action: 'auth_unblock', result: 'ok', count: lifted.length });
372
+ return lifted;
222
373
  }
223
374
  /** Server-side close (best-effort) + wipe local session + operate context. */
224
375
  export async function logout(runtime) {
225
376
  const session = await readSession(runtime.store);
226
377
  if (!session) {
227
378
  recordAudit(runtime, { action: 'logout', result: 'ok', serverClosed: false });
228
- return { loggedOut: false, serverClosed: false };
379
+ return { loggedOut: false, serverClosed: false, www2Closed: false };
229
380
  }
230
381
  let serverClosed = false;
382
+ let www2Closed = false;
231
383
  let s = null;
232
384
  try {
233
385
  s = await runtime.portal.restore(session.cookies);
386
+ if (session.www2) {
387
+ // The www2 layer first (ADR-026): its close is the SPA's own `$logout` URL; "closed" =
388
+ // we came back off that path. Best-effort like the classic one.
389
+ try {
390
+ const url = `${WWW2_SESSION_CLOSE_URL}?originalUrl=${encodeURIComponent(WWW2_APP_CARPETA)}`;
391
+ const landed = await s.goto(url);
392
+ www2Closed = new URL(landed).pathname !== new URL(WWW2_SESSION_CLOSE_URL).pathname;
393
+ }
394
+ catch {
395
+ // best-effort
396
+ }
397
+ }
234
398
  const landed = await s.goto(LOGOUT_URL);
235
399
  serverClosed = new URL(landed).pathname !== new URL(LOGOUT_URL).pathname;
236
400
  }
@@ -242,8 +406,14 @@ export async function logout(runtime) {
242
406
  }
243
407
  await deleteSession(runtime.store);
244
408
  await clearOperateState(runtime.store);
245
- recordAudit(runtime, { action: 'logout', result: 'ok', rut: session.rut, serverClosed });
246
- return { loggedOut: true, serverClosed };
409
+ recordAudit(runtime, {
410
+ action: 'logout',
411
+ result: 'ok',
412
+ rut: session.rut,
413
+ serverClosed,
414
+ ...(session.www2 ? { www2Closed } : {}),
415
+ });
416
+ return { loggedOut: true, serverClosed, www2Closed };
247
417
  }
248
418
  /** Curated identity readback from the portal. Requires a live session (no implicit
249
419
  * login) — acquired via `withSession`; here an expired jar is an explicit
@@ -253,9 +423,21 @@ export async function statusRefresh(runtime) {
253
423
  if (landedOnLoginHost(await s.goto(HOSTS.miSii))) {
254
424
  throw new NotAuthenticatedError('La sesión expiró. Ejecuta `sii auth login`.');
255
425
  }
256
- const identity = identityFromDatos(await s.evaluate(DATOS_EXPR));
426
+ const identity = identityFromDatos(await readDatos(s));
427
+ // The www2 layer, read live: a missing one is a plain `false` here, not an error — the
428
+ // classic identity is the job; the layer is reported (ADR-026).
429
+ let www2 = NO_WWW2;
430
+ try {
431
+ await readWww2Session(s, WWW2_APP_CARPETA);
432
+ const stored = await readSession(runtime.store);
433
+ www2 = { authenticated: true, expiresAt: stored?.www2?.expiresAt ?? null };
434
+ }
435
+ catch (e) {
436
+ if (!(e instanceof Www2SessionError))
437
+ throw e;
438
+ }
257
439
  recordAudit(runtime, { action: 'auth_status_refresh', result: 'ok', rut: identity.rut });
258
- return identity;
440
+ return { ...identity, www2 };
259
441
  });
260
442
  }
261
443
  /** whoami — the session PRINCIPAL's own razón social/nombre + email, read live from
@@ -268,7 +450,7 @@ export async function whoami(runtime) {
268
450
  if (landedOnLoginHost(await s.goto(HOSTS.miSii))) {
269
451
  throw new NotAuthenticatedError('La sesión expiró. Ejecuta `sii auth login`.');
270
452
  }
271
- const datos = await s.evaluate(DATOS_EXPR);
453
+ const datos = await readDatos(s);
272
454
  const identity = identityFromDatos(datos);
273
455
  const email = (datos?.contribuyente?.eMail ?? '').trim() || null;
274
456
  recordAudit(runtime, { action: 'whoami', result: 'ok', rut: identity.rut });
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/auth/auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/auth/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { z } from 'zod';
2
+ /** The curated subset of `DatosCntrNow.contribuyente` the auth flows read (identity + email).
3
+ * Validated with zod at this boundary (ADR-011); unobserved fields pass through. */
4
+ declare const DatosCntr: z.ZodObject<{
5
+ contribuyente: z.ZodOptional<z.ZodObject<{
6
+ rut: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>>;
7
+ dv: z.ZodOptional<z.ZodString>;
8
+ razonSocial: z.ZodOptional<z.ZodNullable<z.ZodString>>;
9
+ nombres: z.ZodOptional<z.ZodNullable<z.ZodString>>;
10
+ apellidoPaterno: z.ZodOptional<z.ZodNullable<z.ZodString>>;
11
+ apellidoMaterno: z.ZodOptional<z.ZodNullable<z.ZodString>>;
12
+ eMail: z.ZodOptional<z.ZodNullable<z.ZodString>>;
13
+ }, z.core.$loose>>;
14
+ }, z.core.$loose>;
15
+ export type DatosCntr = z.infer<typeof DatosCntr>;
16
+ /** Extract, parse and validate the `DatosCntrNow` object from the Mi SII HTML, or `null` when
17
+ * it is absent / unparseable (a dead session bounced to the login page has no such object —
18
+ * the caller treats `null` as "not authenticated", mirroring the old `evaluate` returning
19
+ * null). The object is located by its name, then the first `{` after the `=` is matched to its
20
+ * balanced `}` (string-aware), so trailing page script never confuses the boundary. */
21
+ export declare function parseDatosCntrNow(html: string): DatosCntr | null;
22
+ export {};
23
+ //# sourceMappingURL=datos-cntr.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datos-cntr.d.ts","sourceRoot":"","sources":["../../src/auth/datos-cntr.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;qFACqF;AACrF,QAAA,MAAM,SAAS;;;;;;;;;;iBAeL,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAC;AAIlD;;;;wFAIwF;AACxF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAWhE"}
@@ -0,0 +1,81 @@
1
+ // Pure parser for the Mi SII landing's inline `DatosCntrNow` object (ADR-027). The HTTP
2
+ // PortalDriver cannot run page JS, so the identity read moves off `session.evaluate` to an
3
+ // extract-and-parse over the raw HTML — the object ships as an inline JS literal, which a
4
+ // plain `fetch` already receives (observed 2026-10-17; CONVENTIONS "prefer inline structured
5
+ // data over DOM scraping"). DOM-free so it is unit-testable in Node.
6
+ import { z } from 'zod';
7
+ /** The curated subset of `DatosCntrNow.contribuyente` the auth flows read (identity + email).
8
+ * Validated with zod at this boundary (ADR-011); unobserved fields pass through. */
9
+ const DatosCntr = z
10
+ .object({
11
+ contribuyente: z
12
+ .object({
13
+ rut: z.union([z.number(), z.string()]).optional(),
14
+ dv: z.string().optional(),
15
+ razonSocial: z.string().nullish(),
16
+ nombres: z.string().nullish(),
17
+ apellidoPaterno: z.string().nullish(),
18
+ apellidoMaterno: z.string().nullish(),
19
+ eMail: z.string().nullish(),
20
+ })
21
+ .loose()
22
+ .optional(),
23
+ })
24
+ .loose();
25
+ const MARKER = 'DatosCntrNow';
26
+ /** Extract, parse and validate the `DatosCntrNow` object from the Mi SII HTML, or `null` when
27
+ * it is absent / unparseable (a dead session bounced to the login page has no such object —
28
+ * the caller treats `null` as "not authenticated", mirroring the old `evaluate` returning
29
+ * null). The object is located by its name, then the first `{` after the `=` is matched to its
30
+ * balanced `}` (string-aware), so trailing page script never confuses the boundary. */
31
+ export function parseDatosCntrNow(html) {
32
+ const literal = extractObjectLiteral(html, MARKER);
33
+ if (literal === null)
34
+ return null;
35
+ let parsed;
36
+ try {
37
+ parsed = JSON.parse(literal);
38
+ }
39
+ catch {
40
+ return null;
41
+ }
42
+ const result = DatosCntr.safeParse(parsed);
43
+ return result.success ? result.data : null;
44
+ }
45
+ /** From the first occurrence of `<name>` followed by `=`, return the balanced `{…}` object
46
+ * literal that follows (string- and escape-aware), or null. Only `"`-delimited strings occur
47
+ * in SII's JSON-shaped literal; braces inside them are ignored. */
48
+ function extractObjectLiteral(source, name) {
49
+ const nameAt = source.indexOf(name);
50
+ if (nameAt < 0)
51
+ return null;
52
+ const eq = source.indexOf('=', nameAt + name.length);
53
+ if (eq < 0)
54
+ return null;
55
+ const open = source.indexOf('{', eq);
56
+ if (open < 0)
57
+ return null;
58
+ let depth = 0;
59
+ let inString = false;
60
+ for (let i = open; i < source.length; i++) {
61
+ const ch = source[i];
62
+ if (inString) {
63
+ if (ch === '\\')
64
+ i++; // skip the escaped char
65
+ else if (ch === '"')
66
+ inString = false;
67
+ continue;
68
+ }
69
+ if (ch === '"')
70
+ inString = true;
71
+ else if (ch === '{')
72
+ depth++;
73
+ else if (ch === '}') {
74
+ depth--;
75
+ if (depth === 0)
76
+ return source.slice(open, i + 1);
77
+ }
78
+ }
79
+ return null; // unbalanced — treat as absent
80
+ }
81
+ //# sourceMappingURL=datos-cntr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datos-cntr.js","sourceRoot":"","sources":["../../src/auth/datos-cntr.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
1
  export * from './auth.js';
2
2
  export * from './session.js';
3
+ export type { LoginBlockEntry } from './login-block.js';
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,YAAY,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { LoginFailedError } from '../errors/index.js';
2
+ import type { LoginFailureReason } from '../errors/index.js';
3
+ import type { KeyValueStore, Runtime } from '../seams/index.js';
4
+ export interface LoginBlockEntry {
5
+ readonly rut: string;
6
+ readonly at: string;
7
+ readonly codigo: string | null;
8
+ }
9
+ /** Every latched RUT — what `auth status` reports, so a caller sees the block BEFORE it
10
+ * decides to log in, instead of discovering it as a refusal. */
11
+ export declare function listLoginBlocks(store: KeyValueStore): Promise<readonly LoginBlockEntry[]>;
12
+ export declare function readLoginBlock(store: KeyValueStore, rut: string): Promise<LoginBlockEntry | null>;
13
+ /** Did SII actually judge the Clave? Only then may the latch trip. SII's error page is the
14
+ * one that prints a código (`parseSiiLoginErrorDetail`), so a código is the signal — not
15
+ * `reason === 'wrong-clave'` alone: the locked-account página has its own, still unobserved
16
+ * código (login-error.ts), and locking out a locked account is the safe direction. Queue-it,
17
+ * a WAF refusal, a timeout or a network error carry no código: SII never saw the Clave. */
18
+ export declare function siiJudgedClave(err: unknown): err is LoginFailedError;
19
+ export declare function tripLoginBlock(runtime: Runtime, rut: string, codigo: string | null): Promise<void>;
20
+ /** Lift the latch for one RUT, or for every RUT when none is given. Returns the RUTs lifted. */
21
+ export declare function clearLoginBlock(store: KeyValueStore, rut?: string): Promise<string[]>;
22
+ export declare function reasonForCodigo(codigo: string | null): LoginFailureReason;
23
+ //# sourceMappingURL=login-block.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login-block.d.ts","sourceRoot":"","sources":["../../src/auth/login-block.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,gBAAgB,EAAoB,MAAM,oBAAoB,CAAC;AACxE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAKhE,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAiBD;iEACiE;AACjE,wBAAsB,eAAe,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,SAAS,eAAe,EAAE,CAAC,CAE/F;AAED,wBAAsB,cAAc,CAClC,KAAK,EAAE,aAAa,EACpB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAEjC;AAED;;;;4FAI4F;AAC5F,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,gBAAgB,CAEpE;AAED,wBAAsB,cAAc,CAClC,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,GAAG,IAAI,GACpB,OAAO,CAAC,IAAI,CAAC,CAMf;AAED,gGAAgG;AAChG,wBAAsB,eAAe,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAU3F;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,kBAAkB,CAEzE"}