@albertomarturelo/sii-core 0.8.0 → 0.10.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 +116 -0
- package/dist/adapters/fake/index.d.ts +14 -2
- package/dist/adapters/fake/index.d.ts.map +1 -1
- package/dist/adapters/fake/index.js +21 -1
- package/dist/adapters/fake/index.js.map +1 -1
- package/dist/adapters/node/keyring.d.ts +12 -0
- package/dist/adapters/node/keyring.d.ts.map +1 -0
- package/dist/adapters/node/keyring.js +58 -0
- package/dist/adapters/node/keyring.js.map +1 -0
- package/dist/adapters/node/portal.d.ts.map +1 -1
- package/dist/adapters/node/portal.js +11 -4
- package/dist/adapters/node/portal.js.map +1 -1
- package/dist/adapters/node/response.d.ts +12 -4
- package/dist/adapters/node/response.d.ts.map +1 -1
- package/dist/adapters/node/response.js +32 -7
- package/dist/adapters/node/response.js.map +1 -1
- package/dist/auth/auth.d.ts +42 -6
- package/dist/auth/auth.d.ts.map +1 -1
- package/dist/auth/auth.js +181 -33
- package/dist/auth/auth.js.map +1 -1
- package/dist/auth/session.d.ts +16 -1
- package/dist/auth/session.d.ts.map +1 -1
- package/dist/auth/session.js +12 -0
- package/dist/auth/session.js.map +1 -1
- package/dist/auth/www2-login.d.ts +28 -0
- package/dist/auth/www2-login.d.ts.map +1 -0
- package/dist/auth/www2-login.js +101 -0
- package/dist/auth/www2-login.js.map +1 -0
- package/dist/cli.d.ts +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +3 -1
- package/dist/cli.js.map +1 -1
- package/dist/config/config.d.ts +18 -0
- package/dist/config/config.d.ts.map +1 -1
- package/dist/config/config.js +18 -0
- package/dist/config/config.js.map +1 -1
- package/dist/errors/errors.d.ts +25 -0
- package/dist/errors/errors.d.ts.map +1 -1
- package/dist/errors/errors.js +25 -0
- package/dist/errors/errors.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/node.d.ts +6 -1
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +6 -1
- package/dist/node.js.map +1 -1
- package/dist/portal/carpeta-tributaria-regular.d.ts +30 -0
- package/dist/portal/carpeta-tributaria-regular.d.ts.map +1 -0
- package/dist/portal/carpeta-tributaria-regular.js +142 -0
- package/dist/portal/carpeta-tributaria-regular.js.map +1 -0
- package/dist/portal/www2-session.d.ts +13 -0
- package/dist/portal/www2-session.d.ts.map +1 -0
- package/dist/portal/www2-session.js +61 -0
- package/dist/portal/www2-session.js.map +1 -0
- package/dist/seams/index.d.ts +8 -1
- package/dist/seams/index.d.ts.map +1 -1
- package/dist/tasks/auth.d.ts +14 -6
- package/dist/tasks/auth.d.ts.map +1 -1
- package/dist/tasks/auth.js +13 -5
- package/dist/tasks/auth.js.map +1 -1
- package/dist/tasks/carpeta.d.ts +9 -0
- package/dist/tasks/carpeta.d.ts.map +1 -0
- package/dist/tasks/carpeta.js +49 -0
- package/dist/tasks/carpeta.js.map +1 -0
- package/package.json +2 -1
package/dist/auth/auth.js
CHANGED
|
@@ -1,22 +1,39 @@
|
|
|
1
|
-
import { HOSTS, LOGIN_HOST, LOGOUT_URL } from '../config/index.js';
|
|
2
|
-
import { 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, LoginFailedError, NotAuthenticatedError, } 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
7
|
import { deleteSession, readSession, withSession, writeSession } from './session.js';
|
|
8
|
+
import { mergeStorageState, waitForWww2Session, www2ExpiresAt } from './www2-login.js';
|
|
9
|
+
import { readWww2Session } from '../portal/www2-session.js';
|
|
10
|
+
import { Www2SessionError } from '../errors/index.js';
|
|
8
11
|
const DEFAULT_LOGIN_TIMEOUT_MS = 180_000;
|
|
9
12
|
// Console login submits machine-fast (no human typing in the browser) and fails
|
|
10
13
|
// fast on a rejected Clave, so it needs a far smaller budget than the headed flow.
|
|
11
14
|
const CONSOLE_LOGIN_TIMEOUT_MS = 60_000;
|
|
12
15
|
// The Mi-SII landing serves this inline JS object with the contribuyente snapshot.
|
|
13
16
|
const DATOS_EXPR = "typeof DatosCntrNow !== 'undefined' ? DatosCntrNow : null";
|
|
14
|
-
|
|
15
|
-
|
|
17
|
+
const NO_WWW2 = { authenticated: false, expiresAt: null };
|
|
18
|
+
function www2StatusOf(session, now) {
|
|
19
|
+
const layer = session?.www2;
|
|
20
|
+
if (!layer)
|
|
21
|
+
return NO_WWW2;
|
|
22
|
+
const alive = layer.expiresAt === null || new Date(layer.expiresAt).getTime() > now.getTime();
|
|
23
|
+
return { authenticated: alive, expiresAt: layer.expiresAt };
|
|
24
|
+
}
|
|
25
|
+
/** Pure local read — NO portal call (sii-py "local-only" labelling). `now` decides whether the
|
|
26
|
+
* stored www2 layer is still within its cookie's own expiry. */
|
|
27
|
+
export async function localStatus(store, now) {
|
|
16
28
|
const session = await readSession(store);
|
|
17
29
|
return session
|
|
18
|
-
? {
|
|
19
|
-
|
|
30
|
+
? {
|
|
31
|
+
authenticated: true,
|
|
32
|
+
rut: session.rut,
|
|
33
|
+
sessionSource: 'cached',
|
|
34
|
+
www2: www2StatusOf(session, now),
|
|
35
|
+
}
|
|
36
|
+
: { authenticated: false, rut: null, sessionSource: 'none', www2: NO_WWW2 };
|
|
20
37
|
}
|
|
21
38
|
function identityFromDatos(datos) {
|
|
22
39
|
const c = datos?.contribuyente;
|
|
@@ -43,20 +60,22 @@ async function liveSessionRut(runtime) {
|
|
|
43
60
|
return null;
|
|
44
61
|
}
|
|
45
62
|
}
|
|
46
|
-
/** If a cached session is still live,
|
|
47
|
-
*
|
|
48
|
-
|
|
63
|
+
/** If a cached session is still live, the `already_authenticated` result (no mint) — WITHOUT
|
|
64
|
+
* auditing it. The receipt is written by the caller that actually RETURNS this outcome: a
|
|
65
|
+
* `--www2` login can find the classic session warm and still need the browser (for the www2
|
|
66
|
+
* layer), and the audit must record what happened, not what was probed (ADR-004). */
|
|
67
|
+
async function liveSessionResult(runtime) {
|
|
49
68
|
const rut = await liveSessionRut(runtime);
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
69
|
+
return rut ? { authenticated: true, rut, reason: 'already_authenticated' } : null;
|
|
70
|
+
}
|
|
71
|
+
/** The receipt for a login that ENDED as "already authenticated". */
|
|
72
|
+
function auditAlreadyAuthenticated(runtime, warm) {
|
|
73
|
+
recordAudit(runtime, {
|
|
74
|
+
action: 'auth_login',
|
|
75
|
+
result: 'ok',
|
|
76
|
+
rut: warm.rut,
|
|
77
|
+
reason: warm.reason,
|
|
78
|
+
});
|
|
60
79
|
}
|
|
61
80
|
/** Best-effort operable-set fetch on login (ADR-005). Persona accounts ask SII for
|
|
62
81
|
* the empresas they can operate (getDcvEmpresasAutorizadas); empresa accounts have
|
|
@@ -127,21 +146,75 @@ async function finalizeFreshSession(runtime, session, reason, start) {
|
|
|
127
146
|
});
|
|
128
147
|
return { authenticated: true, rut: identity.rut, reason };
|
|
129
148
|
}
|
|
149
|
+
/** Is the stored www2 layer live on the server? One cheap read via a headless restore; never
|
|
150
|
+
* throws (the login path needs "is it warm?", not an error). */
|
|
151
|
+
async function liveWww2(runtime) {
|
|
152
|
+
try {
|
|
153
|
+
await withSession(runtime, async (s) => readWww2Session(s, WWW2_APP_CARPETA));
|
|
154
|
+
return true;
|
|
155
|
+
}
|
|
156
|
+
catch {
|
|
157
|
+
return false;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
/** The www2 step (ADR-026), run on the still-open headed `session` AFTER the classic login has
|
|
161
|
+
* been persisted: snapshot the classic jar, let the user log in at SII's OAuth page, then store
|
|
162
|
+
* classic + www2 cookies together with the layer's own expiry. On timeout the classic session
|
|
163
|
+
* stays saved and `LoginFailedError` says so. */
|
|
164
|
+
async function mintWww2Layer(runtime, session) {
|
|
165
|
+
const stored = await readSession(runtime.store);
|
|
166
|
+
if (!stored)
|
|
167
|
+
throw new NotAuthenticatedError('No hay sesión. Ejecuta `sii auth login`.');
|
|
168
|
+
const start = runtime.clock.now().getTime();
|
|
169
|
+
try {
|
|
170
|
+
const classicJar = await session.storageState();
|
|
171
|
+
await waitForWww2Session(runtime, session);
|
|
172
|
+
const www2Jar = await session.storageState();
|
|
173
|
+
const expiresAt = www2ExpiresAt(www2Jar);
|
|
174
|
+
const savedAt = runtime.clock.now().toISOString();
|
|
175
|
+
await writeSession(runtime.store, {
|
|
176
|
+
...stored,
|
|
177
|
+
cookies: mergeStorageState(classicJar, www2Jar),
|
|
178
|
+
www2: { savedAt, expiresAt },
|
|
179
|
+
});
|
|
180
|
+
recordAudit(runtime, {
|
|
181
|
+
action: 'auth_login_www2',
|
|
182
|
+
result: 'ok',
|
|
183
|
+
rut: stored.rut,
|
|
184
|
+
durationMs: runtime.clock.now().getTime() - start,
|
|
185
|
+
});
|
|
186
|
+
return { authenticated: true, expiresAt };
|
|
187
|
+
}
|
|
188
|
+
catch (err) {
|
|
189
|
+
recordAudit(runtime, { action: 'auth_login_www2', result: 'failed', rut: stored.rut });
|
|
190
|
+
throw err;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
130
193
|
/** Browser cookies-only login (ADR-006). Only this + `consoleLogin` mint a session
|
|
131
194
|
* (ADR-019 lineage). Idempotent: a live cached session returns
|
|
132
|
-
* `already_authenticated` without opening a window.
|
|
133
|
-
|
|
195
|
+
* `already_authenticated` without opening a window. With `www2`, both layers must be live
|
|
196
|
+
* for that shortcut; otherwise the headed flow runs in full (classic login, then the www2
|
|
197
|
+
* step in the same browser — the classic page is what carries the user into SII). */
|
|
198
|
+
export async function login(runtime, options = {}) {
|
|
134
199
|
const start = runtime.clock.now().getTime();
|
|
135
|
-
const warm = await
|
|
136
|
-
if (warm)
|
|
137
|
-
|
|
200
|
+
const warm = await liveSessionResult(runtime);
|
|
201
|
+
if (warm && (!options.www2 || (await liveWww2(runtime)))) {
|
|
202
|
+
auditAlreadyAuthenticated(runtime, warm);
|
|
203
|
+
if (!options.www2)
|
|
204
|
+
return warm;
|
|
205
|
+
const stored = await readSession(runtime.store);
|
|
206
|
+
return { ...warm, www2: www2StatusOf(stored, runtime.clock.now()) };
|
|
207
|
+
}
|
|
138
208
|
let session = null;
|
|
139
209
|
try {
|
|
140
210
|
session = await runtime.portal.interactiveLogin({
|
|
141
211
|
destination: HOSTS.miSii,
|
|
142
212
|
timeoutMs: DEFAULT_LOGIN_TIMEOUT_MS,
|
|
143
213
|
});
|
|
144
|
-
|
|
214
|
+
const result = await finalizeFreshSession(runtime, session, 'browser_login', start);
|
|
215
|
+
if (!options.www2)
|
|
216
|
+
return result;
|
|
217
|
+
return { ...result, www2: await mintWww2Layer(runtime, session) };
|
|
145
218
|
}
|
|
146
219
|
catch (err) {
|
|
147
220
|
recordAudit(runtime, { action: 'auth_login', result: 'failed', reason: 'browser_login' });
|
|
@@ -156,10 +229,22 @@ export async function login(runtime) {
|
|
|
156
229
|
* stored, exactly like the browser path. ONE attempt, never retried (ADR-004).
|
|
157
230
|
* The Clave never reaches MCP (this task is CLI-only) nor the audit log. */
|
|
158
231
|
export async function consoleLogin(runtime, credentials) {
|
|
232
|
+
return credentialLoginFlow(runtime, () => Promise.resolve(credentials), 'console_login');
|
|
233
|
+
}
|
|
234
|
+
/** The headless fill-and-submit shared by the console (ADR-010) and keyring (ADR-025)
|
|
235
|
+
* paths — they differ ONLY in where the Clave came from, so the attempt policy lives
|
|
236
|
+
* in one place: ONE attempt, never retried (ADR-004), Clave discarded with the frame.
|
|
237
|
+
* The credentials arrive as a THUNK so the Clave is fetched only once the live-session
|
|
238
|
+
* probe has missed: an already-authenticated user must not trigger a keyring-unlock
|
|
239
|
+
* prompt for a value nobody will use (review of #101). */
|
|
240
|
+
async function credentialLoginFlow(runtime, getCredentials, reason) {
|
|
159
241
|
const start = runtime.clock.now().getTime();
|
|
160
|
-
const warm = await
|
|
161
|
-
if (warm)
|
|
242
|
+
const warm = await liveSessionResult(runtime);
|
|
243
|
+
if (warm) {
|
|
244
|
+
auditAlreadyAuthenticated(runtime, warm);
|
|
162
245
|
return warm;
|
|
246
|
+
}
|
|
247
|
+
const credentials = await getCredentials();
|
|
163
248
|
let session = null;
|
|
164
249
|
try {
|
|
165
250
|
session = await runtime.portal.credentialLogin({
|
|
@@ -168,27 +253,72 @@ export async function consoleLogin(runtime, credentials) {
|
|
|
168
253
|
destination: HOSTS.miSii,
|
|
169
254
|
timeoutMs: CONSOLE_LOGIN_TIMEOUT_MS,
|
|
170
255
|
});
|
|
171
|
-
return await finalizeFreshSession(runtime, session,
|
|
256
|
+
return await finalizeFreshSession(runtime, session, reason, start);
|
|
172
257
|
}
|
|
173
258
|
catch (err) {
|
|
174
|
-
recordAudit(runtime, { action: 'auth_login', result: 'failed', reason
|
|
259
|
+
recordAudit(runtime, { action: 'auth_login', result: 'failed', reason });
|
|
175
260
|
throw err;
|
|
176
261
|
}
|
|
177
262
|
finally {
|
|
178
263
|
await session?.close();
|
|
179
264
|
}
|
|
180
265
|
}
|
|
266
|
+
/** The RUT renderings a human plausibly stored the entry under, in lookup order. The
|
|
267
|
+
* keyring is populated BY HAND (`secret-tool`, Seahorse, Keychain Access), so the code
|
|
268
|
+
* adapts to the human rather than the reverse (ADR-025). `Rut.parse` already upper-cases
|
|
269
|
+
* a `k`, so the canonical form covers that variant. */
|
|
270
|
+
export function keyringAccounts(rut) {
|
|
271
|
+
return [rut.canonical, rut.formatted, String(rut.body)];
|
|
272
|
+
}
|
|
273
|
+
/** CLI-only keyring login (ADR-025): the Clave comes from the OS keyring instead of the
|
|
274
|
+
* terminal, and everything else matches `consoleLogin` — ONE attempt, cookies-only
|
|
275
|
+
* session, Clave never persisted by us nor audited. Nothing calls this implicitly: an
|
|
276
|
+
* expired session still requires the user to run the verb again (ADR-019 lineage). */
|
|
277
|
+
export async function keyringLogin(runtime, args) {
|
|
278
|
+
// Mod-11 BEFORE anything else: a malformed RUT must never become a wasted SII attempt
|
|
279
|
+
// (ADR-004), and it must not raise a keyring prompt either.
|
|
280
|
+
const rut = Rut.parse(args.rut);
|
|
281
|
+
const secrets = runtime.secrets;
|
|
282
|
+
if (!secrets) {
|
|
283
|
+
throw new CredentialNotFoundError('Este runtime no tiene acceso al llavero (SecretStore). Usa `sii auth login --console`.');
|
|
284
|
+
}
|
|
285
|
+
return credentialLoginFlow(runtime, async () => {
|
|
286
|
+
const accounts = keyringAccounts(rut);
|
|
287
|
+
for (const account of accounts) {
|
|
288
|
+
const clave = await secrets.get(account);
|
|
289
|
+
if (clave)
|
|
290
|
+
return { rut: rut.canonical, clave };
|
|
291
|
+
}
|
|
292
|
+
throw new CredentialNotFoundError(`No hay Clave en el llavero para ${rut.canonical} (servicio "${KEYRING_SERVICE}"). ` +
|
|
293
|
+
`Guárdala con:\n` +
|
|
294
|
+
` Linux: secret-tool store --label='SII' service ${KEYRING_SERVICE} username ${rut.canonical}\n` +
|
|
295
|
+
` macOS: security add-generic-password -s ${KEYRING_SERVICE} -a ${rut.canonical} -w`);
|
|
296
|
+
}, 'keyring_login');
|
|
297
|
+
}
|
|
181
298
|
/** Server-side close (best-effort) + wipe local session + operate context. */
|
|
182
299
|
export async function logout(runtime) {
|
|
183
300
|
const session = await readSession(runtime.store);
|
|
184
301
|
if (!session) {
|
|
185
302
|
recordAudit(runtime, { action: 'logout', result: 'ok', serverClosed: false });
|
|
186
|
-
return { loggedOut: false, serverClosed: false };
|
|
303
|
+
return { loggedOut: false, serverClosed: false, www2Closed: false };
|
|
187
304
|
}
|
|
188
305
|
let serverClosed = false;
|
|
306
|
+
let www2Closed = false;
|
|
189
307
|
let s = null;
|
|
190
308
|
try {
|
|
191
309
|
s = await runtime.portal.restore(session.cookies);
|
|
310
|
+
if (session.www2) {
|
|
311
|
+
// The www2 layer first (ADR-026): its close is the SPA's own `$logout` URL; "closed" =
|
|
312
|
+
// we came back off that path. Best-effort like the classic one.
|
|
313
|
+
try {
|
|
314
|
+
const url = `${WWW2_SESSION_CLOSE_URL}?originalUrl=${encodeURIComponent(WWW2_APP_CARPETA)}`;
|
|
315
|
+
const landed = await s.goto(url);
|
|
316
|
+
www2Closed = new URL(landed).pathname !== new URL(WWW2_SESSION_CLOSE_URL).pathname;
|
|
317
|
+
}
|
|
318
|
+
catch {
|
|
319
|
+
// best-effort
|
|
320
|
+
}
|
|
321
|
+
}
|
|
192
322
|
const landed = await s.goto(LOGOUT_URL);
|
|
193
323
|
serverClosed = new URL(landed).pathname !== new URL(LOGOUT_URL).pathname;
|
|
194
324
|
}
|
|
@@ -200,8 +330,14 @@ export async function logout(runtime) {
|
|
|
200
330
|
}
|
|
201
331
|
await deleteSession(runtime.store);
|
|
202
332
|
await clearOperateState(runtime.store);
|
|
203
|
-
recordAudit(runtime, {
|
|
204
|
-
|
|
333
|
+
recordAudit(runtime, {
|
|
334
|
+
action: 'logout',
|
|
335
|
+
result: 'ok',
|
|
336
|
+
rut: session.rut,
|
|
337
|
+
serverClosed,
|
|
338
|
+
...(session.www2 ? { www2Closed } : {}),
|
|
339
|
+
});
|
|
340
|
+
return { loggedOut: true, serverClosed, www2Closed };
|
|
205
341
|
}
|
|
206
342
|
/** Curated identity readback from the portal. Requires a live session (no implicit
|
|
207
343
|
* login) — acquired via `withSession`; here an expired jar is an explicit
|
|
@@ -212,8 +348,20 @@ export async function statusRefresh(runtime) {
|
|
|
212
348
|
throw new NotAuthenticatedError('La sesión expiró. Ejecuta `sii auth login`.');
|
|
213
349
|
}
|
|
214
350
|
const identity = identityFromDatos(await s.evaluate(DATOS_EXPR));
|
|
351
|
+
// The www2 layer, read live: a missing one is a plain `false` here, not an error — the
|
|
352
|
+
// classic identity is the job; the layer is reported (ADR-026).
|
|
353
|
+
let www2 = NO_WWW2;
|
|
354
|
+
try {
|
|
355
|
+
await readWww2Session(s, WWW2_APP_CARPETA);
|
|
356
|
+
const stored = await readSession(runtime.store);
|
|
357
|
+
www2 = { authenticated: true, expiresAt: stored?.www2?.expiresAt ?? null };
|
|
358
|
+
}
|
|
359
|
+
catch (e) {
|
|
360
|
+
if (!(e instanceof Www2SessionError))
|
|
361
|
+
throw e;
|
|
362
|
+
}
|
|
215
363
|
recordAudit(runtime, { action: 'auth_status_refresh', result: 'ok', rut: identity.rut });
|
|
216
|
-
return identity;
|
|
364
|
+
return { ...identity, www2 };
|
|
217
365
|
});
|
|
218
366
|
}
|
|
219
367
|
/** whoami — the session PRINCIPAL's own razón social/nombre + email, read live from
|
package/dist/auth/auth.js.map
CHANGED
|
@@ -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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"}
|
package/dist/auth/session.d.ts
CHANGED
|
@@ -1,14 +1,29 @@
|
|
|
1
1
|
import type { KeyValueStore, PortalSession, Runtime } from '../seams/index.js';
|
|
2
|
+
/** The www2 APP-SESSION layer riding in the same cookies-only jar (ADR-026). Present only after
|
|
3
|
+
* `sii auth login --www2`; `expiresAt` is the `X-SII-STATE-CT` cookie's own expiry (observed
|
|
4
|
+
* ~100 min), null when the cookie carried none. Metadata only — the cookies themselves live in
|
|
5
|
+
* `cookies` like the classic ones. */
|
|
6
|
+
export interface StoredWww2Layer {
|
|
7
|
+
readonly savedAt: string;
|
|
8
|
+
readonly expiresAt: string | null;
|
|
9
|
+
}
|
|
2
10
|
export interface StoredSession {
|
|
3
11
|
/** Canonical session-principal RUT (read from the portal, not a credential). */
|
|
4
12
|
readonly rut: string;
|
|
5
|
-
/** Cookies-only storage state (opaque to the core). */
|
|
13
|
+
/** Cookies-only storage state (opaque to the core). Holds BOTH layers once `--www2` ran. */
|
|
6
14
|
readonly cookies: unknown;
|
|
7
15
|
readonly savedAt: string;
|
|
16
|
+
readonly www2?: StoredWww2Layer;
|
|
8
17
|
}
|
|
9
18
|
export declare function readSession(store: KeyValueStore): Promise<StoredSession | null>;
|
|
10
19
|
export declare function writeSession(store: KeyValueStore, session: StoredSession): Promise<void>;
|
|
11
20
|
export declare function deleteSession(store: KeyValueStore): Promise<void>;
|
|
21
|
+
/** Reject a representing operate pointer BEFORE opening a session — the guard every SESSION-KEYED
|
|
22
|
+
* surface (F29, BHE, Carpeta…) runs first (ADR-005). `error` builds the surface's own typed error
|
|
23
|
+
* from the formatted empresa RUT (already user-visible via `operate --list`, so safe to echo; the
|
|
24
|
+
* razón social is PII and is NOT passed). No operate state → resolves; `withSession` then raises
|
|
25
|
+
* NotAuthenticated. Single implementation: the third copy (carpeta) turned it into a helper. */
|
|
26
|
+
export declare function assertOperatingSelf(runtime: Runtime, error: (empresaFormatted: string) => Error): Promise<void>;
|
|
12
27
|
export interface SessionContext {
|
|
13
28
|
/** Canonical session-principal RUT (who is logged in). */
|
|
14
29
|
readonly sessionRut: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/auth/session.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/auth/session.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAK/E;;;uCAGuC;AACvC,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AAED,MAAM,WAAW,aAAa;IAC5B,gFAAgF;IAChF,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,4FAA4F;IAC5F,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,eAAe,CAAC;CACjC;AAED,wBAAsB,WAAW,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAErF;AAED,wBAAsB,YAAY,CAAC,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAE9F;AAED,wBAAsB,aAAa,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAEvE;AAED;;;;iGAIiG;AACjG,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,CAAC,gBAAgB,EAAE,MAAM,KAAK,KAAK,GACzC,OAAO,CAAC,IAAI,CAAC,CAKf;AAED,MAAM,WAAW,cAAc;IAC7B,0DAA0D;IAC1D,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B;;mDAE+C;IAC/C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED;;;;;;;+CAO+C;AAC/C,wBAAsB,WAAW,CAAC,CAAC,EACjC,OAAO,EAAE,OAAO,EAChB,EAAE,EAAE,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,CAAC,CAAC,EAC/D,OAAO,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAO,GAC7B,OAAO,CAAC,CAAC,CAAC,CA4BZ"}
|
package/dist/auth/session.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { NotAuthenticatedError } from '../errors/index.js';
|
|
2
2
|
import { readOperateState, resolveOperableTarget } from '../identity/index.js';
|
|
3
|
+
import { Rut } from '../rut/index.js';
|
|
3
4
|
// Distinct KeyValueStore key (ADR-007) — never shares a file with `identity`'s 'operate'.
|
|
4
5
|
const SESSION_KEY = 'session';
|
|
5
6
|
export async function readSession(store) {
|
|
@@ -11,6 +12,17 @@ export async function writeSession(store, session) {
|
|
|
11
12
|
export async function deleteSession(store) {
|
|
12
13
|
await store.delete(SESSION_KEY);
|
|
13
14
|
}
|
|
15
|
+
/** Reject a representing operate pointer BEFORE opening a session — the guard every SESSION-KEYED
|
|
16
|
+
* surface (F29, BHE, Carpeta…) runs first (ADR-005). `error` builds the surface's own typed error
|
|
17
|
+
* from the formatted empresa RUT (already user-visible via `operate --list`, so safe to echo; the
|
|
18
|
+
* razón social is PII and is NOT passed). No operate state → resolves; `withSession` then raises
|
|
19
|
+
* NotAuthenticated. Single implementation: the third copy (carpeta) turned it into a helper. */
|
|
20
|
+
export async function assertOperatingSelf(runtime, error) {
|
|
21
|
+
const op = await readOperateState(runtime.store);
|
|
22
|
+
if (op && op.operatingRut !== op.selfRut) {
|
|
23
|
+
throw error(Rut.parse(op.operatingRut).formatted);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
14
26
|
/** Acquire a live `PortalSession` from the stored cookies-only session and run `fn`
|
|
15
27
|
* against it. This is how DOMAIN TASKS reach SII: they consume a session, they
|
|
16
28
|
* NEVER mint one (only `login` mints — ADR-006, sii-py ADR-019). The operating/body
|
package/dist/auth/session.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/auth/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/auth/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAGtC,0FAA0F;AAC1F,MAAM,WAAW,GAAG,SAAS,CAAC;AAoB9B,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,KAAoB;IACpD,OAAO,KAAK,CAAC,IAAI,CAAgB,WAAW,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,KAAoB,EAAE,OAAsB;IAC7E,MAAM,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,KAAoB;IACtD,MAAM,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AAClC,CAAC;AAED;;;;iGAIiG;AACjG,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,OAAgB,EAChB,KAA0C;IAE1C,MAAM,EAAE,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACjD,IAAI,EAAE,IAAI,EAAE,CAAC,YAAY,KAAK,EAAE,CAAC,OAAO,EAAE,CAAC;QACzC,MAAM,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,CAAC;IACpD,CAAC;AACH,CAAC;AAWD;;;;;;;+CAO+C;AAC/C,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,OAAgB,EAChB,EAA+D,EAC/D,UAA4B,EAAE;IAE9B,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAChD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,qBAAqB,CAAC,0CAA0C,CAAC,CAAC;IAC9E,CAAC;IACD,2EAA2E;IAC3E,mFAAmF;IACnF,qFAAqF;IACrF,iFAAiF;IACjF,2EAA2E;IAC3E,MAAM,YAAY,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC3D,IAAI,YAAoB,CAAC;IACzB,IAAI,OAAO,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;QAC9B,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,MAAM,IAAI,qBAAqB,CAAC,0CAA0C,CAAC,CAAC;QAC9E,CAAC;QACD,YAAY,GAAG,qBAAqB,CAAC,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IAClE,CAAC;SAAM,CAAC;QACN,YAAY,GAAG,YAAY,EAAE,YAAY,IAAI,MAAM,CAAC,GAAG,CAAC;IAC1D,CAAC;IAED,IAAI,CAAC,GAAyB,IAAI,CAAC;IACnC,IAAI,CAAC;QACH,CAAC,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACjD,OAAO,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,GAAG,EAAE,YAAY,EAAE,CAAC,CAAC;IAC/D,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC;IACnB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { Www2Session } from '../portal/www2-session.js';
|
|
2
|
+
import type { PortalSession, Runtime } from '../seams/index.js';
|
|
3
|
+
/** Same budget as the classic headed login: a human has to read the chooser, type the Clave and
|
|
4
|
+
* pass the reCAPTCHA. */
|
|
5
|
+
export declare const WWW2_LOGIN_TIMEOUT_MS = 300000;
|
|
6
|
+
/** How often the app session is re-read while the user is at the OAuth page. Each read is one
|
|
7
|
+
* cheap GET the SPA itself issues on every route change (observed), paced via `Clock.sleep`. */
|
|
8
|
+
export declare const WWW2_POLL_MS = 2000;
|
|
9
|
+
/** The www2 app-session cookies all share this prefix (observed 2026-09-12): a literal
|
|
10
|
+
* `X-SII-STATE-TYPE` plus a state cookie whose suffix VARIES (`X-SII-STATE-CT` and
|
|
11
|
+
* `X-SII-STATE-CL` both seen — the letter is not stable), and every one carries the SAME
|
|
12
|
+
* expiry (~100 min). So the layer's expiry is read from ANY of them, not a fixed name. */
|
|
13
|
+
export declare const WWW2_STATE_COOKIE_PREFIX = "X-SII-STATE-";
|
|
14
|
+
/** Union of the classic jar (snapshotted BEFORE the www2 step) and the jar AFTER it: every classic
|
|
15
|
+
* cookie is kept, every www2 cookie is added, and on a same-identity collision the later (www2)
|
|
16
|
+
* value wins — a fresher load-balancer/analytics cookie, never a lost classic one. Falls back to
|
|
17
|
+
* the www2 state alone only when the classic one is not a cookie list at all. */
|
|
18
|
+
export declare function mergeStorageState(classic: unknown, www2: unknown): unknown;
|
|
19
|
+
/** ISO expiry of the www2 layer, read off any `X-SII-STATE-*` cookie (they share one expiry;
|
|
20
|
+
* Playwright carries `expires` as epoch SECONDS, `-1` = session cookie). Null when none is present
|
|
21
|
+
* or all are session-scoped. Takes the max, so a session-scoped `-TYPE` never masks a dated pair. */
|
|
22
|
+
export declare function www2ExpiresAt(state: unknown): string | null;
|
|
23
|
+
/** Drive the headed `session` (already past the classic login) to the www2 app page and wait for
|
|
24
|
+
* the user to complete SII's OAuth login there, polling the app-session read until it answers or
|
|
25
|
+
* the budget runs out. Resolves the session JSON; raises `LoginFailedError` on timeout. Any error
|
|
26
|
+
* other than "no app session yet" propagates — never retried (ADR-004). */
|
|
27
|
+
export declare function waitForWww2Session(runtime: Runtime, session: PortalSession, timeoutMs?: number): Promise<Www2Session>;
|
|
28
|
+
//# sourceMappingURL=www2-login.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"www2-login.d.ts","sourceRoot":"","sources":["../../src/auth/www2-login.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAEhE;0BAC0B;AAC1B,eAAO,MAAM,qBAAqB,SAAU,CAAC;AAC7C;iGACiG;AACjG,eAAO,MAAM,YAAY,OAAQ,CAAC;AAElC;;;2FAG2F;AAC3F,eAAO,MAAM,wBAAwB,iBAAiB,CAAC;AA8BvD;;;kFAGkF;AAClF,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAS1E;AAED;;sGAEsG;AACtG,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAW3D;AAED;;;4EAG4E;AAC5E,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,aAAa,EACtB,SAAS,GAAE,MAA8B,GACxC,OAAO,CAAC,WAAW,CAAC,CAiBtB"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
// The www2 APP-SESSION step of `sii auth login --www2` (ADR-026): mint the second cookies-only
|
|
2
|
+
// layer `www2.sii.cl/app/*` needs, the ADR-006 way — the user types the Clave into SII's real
|
|
3
|
+
// OAuth page in the SAME headed browser the classic login used; we keep cookies only.
|
|
4
|
+
//
|
|
5
|
+
// Observed 2026-09-11/12 (#110, docs/sii-contract/auth-login.md § www2): the app page bounces an
|
|
6
|
+
// app-session-less browser to `/bifurcacion` (the chooser) → `/oauthsii-v1/` (Clave + reCAPTCHA
|
|
7
|
+
// Enterprise, hence NEVER automated — a human types) → `/app/session/create` → back to the app,
|
|
8
|
+
// now holding the httpOnly `.sii.cl` pair `X-SII-STATE-CT` + `X-SII-STATE-TYPE` (~100 min). The
|
|
9
|
+
// OAuth page WIPES the classic cookies from the browser context on mount, so the classic jar is
|
|
10
|
+
// snapshotted BEFORE this step and the www2 cookies are ADDED to it — never the reverse.
|
|
11
|
+
import { WWW2_APP_CARPETA } from '../config/index.js';
|
|
12
|
+
import { LoginFailedError, Www2SessionError } from '../errors/index.js';
|
|
13
|
+
import { readWww2Session } from '../portal/www2-session.js';
|
|
14
|
+
/** Same budget as the classic headed login: a human has to read the chooser, type the Clave and
|
|
15
|
+
* pass the reCAPTCHA. */
|
|
16
|
+
export const WWW2_LOGIN_TIMEOUT_MS = 300_000;
|
|
17
|
+
/** How often the app session is re-read while the user is at the OAuth page. Each read is one
|
|
18
|
+
* cheap GET the SPA itself issues on every route change (observed), paced via `Clock.sleep`. */
|
|
19
|
+
export const WWW2_POLL_MS = 2_000;
|
|
20
|
+
/** The www2 app-session cookies all share this prefix (observed 2026-09-12): a literal
|
|
21
|
+
* `X-SII-STATE-TYPE` plus a state cookie whose suffix VARIES (`X-SII-STATE-CT` and
|
|
22
|
+
* `X-SII-STATE-CL` both seen — the letter is not stable), and every one carries the SAME
|
|
23
|
+
* expiry (~100 min). So the layer's expiry is read from ANY of them, not a fixed name. */
|
|
24
|
+
export const WWW2_STATE_COOKIE_PREFIX = 'X-SII-STATE-';
|
|
25
|
+
const cookiesOf = (state) => {
|
|
26
|
+
if (state &&
|
|
27
|
+
typeof state === 'object' &&
|
|
28
|
+
Array.isArray(state.cookies)) {
|
|
29
|
+
return state.cookies;
|
|
30
|
+
}
|
|
31
|
+
return null;
|
|
32
|
+
};
|
|
33
|
+
// Identity of a cookie for the merge: name + domain + path (a scalar entry — the fakes use plain
|
|
34
|
+
// strings — keys by its own JSON so it survives the union untouched).
|
|
35
|
+
const keyOf = (c) => {
|
|
36
|
+
if (c && typeof c === 'object') {
|
|
37
|
+
const k = c;
|
|
38
|
+
return `${String(k.name)}|${String(k.domain)}|${String(k.path)}`;
|
|
39
|
+
}
|
|
40
|
+
return JSON.stringify(c);
|
|
41
|
+
};
|
|
42
|
+
/** Union of the classic jar (snapshotted BEFORE the www2 step) and the jar AFTER it: every classic
|
|
43
|
+
* cookie is kept, every www2 cookie is added, and on a same-identity collision the later (www2)
|
|
44
|
+
* value wins — a fresher load-balancer/analytics cookie, never a lost classic one. Falls back to
|
|
45
|
+
* the www2 state alone only when the classic one is not a cookie list at all. */
|
|
46
|
+
export function mergeStorageState(classic, www2) {
|
|
47
|
+
const a = cookiesOf(classic);
|
|
48
|
+
const b = cookiesOf(www2);
|
|
49
|
+
if (!a)
|
|
50
|
+
return www2;
|
|
51
|
+
if (!b)
|
|
52
|
+
return classic;
|
|
53
|
+
const merged = new Map();
|
|
54
|
+
for (const c of a)
|
|
55
|
+
merged.set(keyOf(c), c);
|
|
56
|
+
for (const c of b)
|
|
57
|
+
merged.set(keyOf(c), c);
|
|
58
|
+
return { ...www2, cookies: [...merged.values()] };
|
|
59
|
+
}
|
|
60
|
+
/** ISO expiry of the www2 layer, read off any `X-SII-STATE-*` cookie (they share one expiry;
|
|
61
|
+
* Playwright carries `expires` as epoch SECONDS, `-1` = session cookie). Null when none is present
|
|
62
|
+
* or all are session-scoped. Takes the max, so a session-scoped `-TYPE` never masks a dated pair. */
|
|
63
|
+
export function www2ExpiresAt(state) {
|
|
64
|
+
let best = 0;
|
|
65
|
+
for (const c of cookiesOf(state) ?? []) {
|
|
66
|
+
if (!c || typeof c !== 'object')
|
|
67
|
+
continue;
|
|
68
|
+
const k = c;
|
|
69
|
+
if (typeof k.name !== 'string' || !k.name.startsWith(WWW2_STATE_COOKIE_PREFIX))
|
|
70
|
+
continue;
|
|
71
|
+
if (typeof k.expires === 'number' && k.expires > best)
|
|
72
|
+
best = k.expires;
|
|
73
|
+
}
|
|
74
|
+
if (best <= 0)
|
|
75
|
+
return null;
|
|
76
|
+
const d = new Date(best * 1000);
|
|
77
|
+
return Number.isNaN(d.getTime()) ? null : d.toISOString();
|
|
78
|
+
}
|
|
79
|
+
/** Drive the headed `session` (already past the classic login) to the www2 app page and wait for
|
|
80
|
+
* the user to complete SII's OAuth login there, polling the app-session read until it answers or
|
|
81
|
+
* the budget runs out. Resolves the session JSON; raises `LoginFailedError` on timeout. Any error
|
|
82
|
+
* other than "no app session yet" propagates — never retried (ADR-004). */
|
|
83
|
+
export async function waitForWww2Session(runtime, session, timeoutMs = WWW2_LOGIN_TIMEOUT_MS) {
|
|
84
|
+
const start = runtime.clock.now().getTime();
|
|
85
|
+
await session.goto(WWW2_APP_CARPETA);
|
|
86
|
+
for (;;) {
|
|
87
|
+
try {
|
|
88
|
+
return await readWww2Session(session, WWW2_APP_CARPETA);
|
|
89
|
+
}
|
|
90
|
+
catch (e) {
|
|
91
|
+
if (!(e instanceof Www2SessionError))
|
|
92
|
+
throw e;
|
|
93
|
+
}
|
|
94
|
+
if (runtime.clock.now().getTime() - start >= timeoutMs) {
|
|
95
|
+
throw new LoginFailedError('Login www2 no completado (tiempo agotado en la página OAuth del SII). La sesión de ' +
|
|
96
|
+
'Mi SII sí quedó guardada; reintenta `sii auth login --www2` para la capa www2.');
|
|
97
|
+
}
|
|
98
|
+
await runtime.clock.sleep(WWW2_POLL_MS);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=www2-login.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"www2-login.js","sourceRoot":"","sources":["../../src/auth/www2-login.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts
CHANGED
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC7D,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC"}
|
package/dist/cli.js
CHANGED
|
@@ -2,5 +2,7 @@
|
|
|
2
2
|
// a Clave argument, so it is DELIBERATELY kept out of the main barrel (`@albertomarturelo/sii-core`)
|
|
3
3
|
// — the MCP server imports only the main barrel and must never wire a task that
|
|
4
4
|
// takes a password (ADR-006). The terminal CLI imports this subpath instead.
|
|
5
|
-
|
|
5
|
+
// `keyringLogin` joins it for the same reason: it READS a Clave (from the OS keyring),
|
|
6
|
+
// so it must be unreachable from the MCP server (ADR-025).
|
|
7
|
+
export { consoleLogin, keyringLogin } from './tasks/auth.js';
|
|
6
8
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,oHAAoH;AACpH,qGAAqG;AACrG,gFAAgF;AAChF,6EAA6E;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,oHAAoH;AACpH,qGAAqG;AACrG,gFAAgF;AAChF,6EAA6E;AAC7E,uFAAuF;AACvF,2DAA2D;AAC3D,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC"}
|
package/dist/config/config.d.ts
CHANGED
|
@@ -10,6 +10,12 @@ export declare const HOSTS: {
|
|
|
10
10
|
readonly portal: "https://www.sii.cl";
|
|
11
11
|
/** SPA JSON facades (RCV / F29 / F22) live under this host. */
|
|
12
12
|
readonly portalApi: "https://www4.sii.cl";
|
|
13
|
+
/** The newer SPA apps + their `/app/<name>-api/*` JSON facades — first the Carpeta
|
|
14
|
+
* Tributaria (`/carpetatributaria/…` SPA over `/app/cte-api-carpetatributaria/{rut}/…`).
|
|
15
|
+
* The `.sii.cl` session cookie SSO-carries, but every `cte-api` call answers 401 until
|
|
16
|
+
* the app's own `GET /app/session/status?originalUrl=…` warm-up ran (observed
|
|
17
|
+
* 2026-09-11, #110). (#109 / #110) */
|
|
18
|
+
readonly portalApp: "https://www2.sii.cl";
|
|
13
19
|
/** Legacy BHE/BTE consulta CGIs (boletas de honorarios). HTML skeleton filled
|
|
14
20
|
* client-side from inline JS maps; read via `PortalSession.goto`/`evaluate`, NOT
|
|
15
21
|
* the SDI-JSON facade. The `.sii.cl` session cookie SSO-carries here (observed
|
|
@@ -42,6 +48,18 @@ export declare const LOGIN_HOST = "zeusr.sii.cl";
|
|
|
42
48
|
export declare const LOGIN_URL: string;
|
|
43
49
|
/** Full server-side logout URL (host + path). The close redirects OFF this path. */
|
|
44
50
|
export declare const LOGOUT_URL: string;
|
|
51
|
+
/** The www2 app page `sii auth login --www2` opens for the user to complete SII's OAuth login
|
|
52
|
+
* (`/bifurcacion` → `/oauthsii-v1/` → `/app/session/create` → back here), and the `Referer` /
|
|
53
|
+
* `originalUrl` the Carpeta SPA sends on its own calls. Observed 2026-09-11/12 (#110, ADR-026). */
|
|
54
|
+
export declare const WWW2_APP_CARPETA: string;
|
|
55
|
+
/** The www2 app-session close (the SPA's `$logout`: `/app/session/close?originalUrl=…`, from the
|
|
56
|
+
* session library `chunk-vendors.659f67b1.js`, observed 2026-09-11). Best-effort on logout. */
|
|
57
|
+
export declare const WWW2_SESSION_CLOSE_URL: string;
|
|
58
|
+
/** The keyring "service" every entry of this tool lives under; the account (`username`
|
|
59
|
+
* in keyring terms) is the RUT. Lives here — with the other environment constants —
|
|
60
|
+
* because BOTH the pure `keyringLogin` task (for its error message) and the Node
|
|
61
|
+
* adapter that reads the store need it (ADR-025). */
|
|
62
|
+
export declare const KEYRING_SERVICE = "sii";
|
|
45
63
|
export interface Settings {
|
|
46
64
|
/** Max requests/second used to pace portal POSTs (sii-py ADR-011). */
|
|
47
65
|
readonly rateLimitRps: number;
|