@albertomarturelo/sii-core 0.4.0 → 0.6.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 (43) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/dist/adapters/fake/index.d.ts +10 -1
  3. package/dist/adapters/fake/index.d.ts.map +1 -1
  4. package/dist/adapters/fake/index.js +9 -0
  5. package/dist/adapters/fake/index.js.map +1 -1
  6. package/dist/adapters/node/portal.d.ts.map +1 -1
  7. package/dist/adapters/node/portal.js +18 -0
  8. package/dist/adapters/node/portal.js.map +1 -1
  9. package/dist/config/config.d.ts +6 -0
  10. package/dist/config/config.d.ts.map +1 -1
  11. package/dist/config/config.js +6 -0
  12. package/dist/config/config.js.map +1 -1
  13. package/dist/errors/errors.d.ts +8 -0
  14. package/dist/errors/errors.d.ts.map +1 -1
  15. package/dist/errors/errors.js +9 -1
  16. package/dist/errors/errors.js.map +1 -1
  17. package/dist/index.d.ts +4 -2
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +2 -1
  20. package/dist/index.js.map +1 -1
  21. package/dist/portal/gwt-schema.d.ts +3 -0
  22. package/dist/portal/gwt-schema.d.ts.map +1 -0
  23. package/dist/portal/gwt-schema.js +123 -0
  24. package/dist/portal/gwt-schema.js.map +1 -0
  25. package/dist/portal/gwt.d.ts +24 -0
  26. package/dist/portal/gwt.d.ts.map +1 -0
  27. package/dist/portal/gwt.js +206 -0
  28. package/dist/portal/gwt.js.map +1 -0
  29. package/dist/portal/peticiones.d.ts +31 -0
  30. package/dist/portal/peticiones.d.ts.map +1 -0
  31. package/dist/portal/peticiones.js +137 -0
  32. package/dist/portal/peticiones.js.map +1 -0
  33. package/dist/seams/index.d.ts +17 -0
  34. package/dist/seams/index.d.ts.map +1 -1
  35. package/dist/tasks/peticiones.d.ts +9 -0
  36. package/dist/tasks/peticiones.d.ts.map +1 -0
  37. package/dist/tasks/peticiones.js +35 -0
  38. package/dist/tasks/peticiones.js.map +1 -0
  39. package/dist/tasks/rcv.d.ts +34 -1
  40. package/dist/tasks/rcv.d.ts.map +1 -1
  41. package/dist/tasks/rcv.js +85 -0
  42. package/dist/tasks/rcv.js.map +1 -1
  43. package/package.json +1 -1
@@ -0,0 +1,206 @@
1
+ // In-house GWT-RPC codec for the SISPAD peticiones read (ADR-020). No third-party GWT
2
+ // library — the request template and the response object-graph reader are derived
3
+ // first-hand from the compiled permutation (strong-name A477…, module sispadinternet,
4
+ // GWT 2.0.3, observed 2026-07-03); the per-type field schema lives in `gwt-schema.ts`.
5
+ // Full wire contract: docs/sii-contract/peticiones.md.
6
+ //
7
+ // Transport shape: a `text/x-gwt-rpc` POST returns `//OK[…]` (success) or `//EX[…]`
8
+ // (a serialized business exception). The `[…]` is a JSON array laid out as
9
+ // [ …payload ints…, [stringTable], flags, version ]
10
+ // read by DECREMENTING an index from the end (GWT emits the payload reversed). A value
11
+ // is resolved by its position's declared TYPE (schema-directed), never guessed:
12
+ // readInt -> one raw token
13
+ // readLong -> two tokens; value = a + b (GWT splits high·2³² + low)
14
+ // readString-> one token: >0 => stringTable[t-1], else null
15
+ // readObject-> one token: 0 => null, <0 => back-reference, >0 => stringTable[t-1] is a
16
+ // type signature; instantiate (adds to the seen list BEFORE its fields, so
17
+ // cycles resolve) then run that class's field ops.
18
+ // Boxed leaves and collections resolve through the same schema (Integer="i", Timestamp=
19
+ // "li", ArrayList/Vector="L", …); object/primitive arrays are handled by the "[" prefix.
20
+ import { GWT_SCHEMA } from './gwt-schema.js';
21
+ import { PeticionesError } from '../errors/index.js';
22
+ /** True when `v` is a decoded object node (not a scalar/null). */
23
+ export function isNode(v) {
24
+ return typeof v === 'object' && v !== null;
25
+ }
26
+ const isSig = (s) => s.startsWith('[') || /\/\d+$/.test(s);
27
+ const className = (sig) => sig.split('/')[0];
28
+ // ── Request ──────────────────────────────────────────────────────────────────
29
+ // The peticionesUsuario(Integer rut, String token) call. Only the module base, the
30
+ // serialization-policy strong-name, the rut and the (unvalidated) token vary; the rest is
31
+ // the fixed invocation encoding observed 2026-07-03. String table (7 entries, 1-based):
32
+ // [moduleBase, policyHash, service iface, method, Integer sig, String sig, token].
33
+ const SERVICE_IFACE = 'cl.sii.sdi.difsj.sispadinternet.web.client.service.aplicacion.peticion.ServicePeticion';
34
+ const INTEGER_SIG = 'java.lang.Integer/3438268394';
35
+ const STRING_SIG = 'java.lang.String/2004016611';
36
+ /** Build the `text/x-gwt-rpc` body for `peticionesUsuario`. `rut` is the numeric body
37
+ * (no DV); `token` is a placeholder (the server does not validate it — auth is by the
38
+ * session cookie + rut, ADR-020). */
39
+ export function buildPeticionesRequest(moduleBase, policyHash, rut, token) {
40
+ return (`5|0|7|${moduleBase}|${policyHash}|${SERVICE_IFACE}|peticionesUsuario|` +
41
+ `${INTEGER_SIG}|${STRING_SIG}|${token}|1|2|3|4|2|5|6|5|${rut}|7|`);
42
+ }
43
+ // ── Response ─────────────────────────────────────────────────────────────────
44
+ class GraphReader {
45
+ payload;
46
+ st;
47
+ i;
48
+ seen = [];
49
+ constructor(payload, st) {
50
+ this.payload = payload;
51
+ this.st = st;
52
+ this.i = payload.length - 1;
53
+ }
54
+ done() {
55
+ return this.i === -1;
56
+ }
57
+ tok() {
58
+ if (this.i < 0)
59
+ throw new PeticionesError(SCRAPER_ROTO + ' (fin de datos inesperado)');
60
+ return this.payload[this.i--];
61
+ }
62
+ readString() {
63
+ const t = this.tok();
64
+ return t > 0 ? (this.st[t - 1] ?? null) : null;
65
+ }
66
+ readObject() {
67
+ const t = this.tok();
68
+ if (t === 0)
69
+ return null;
70
+ if (t < 0) {
71
+ const ref = this.seen[-t - 1];
72
+ if (ref === undefined)
73
+ throw new PeticionesError(SCRAPER_ROTO + ' (referencia inválida)');
74
+ return ref;
75
+ }
76
+ const sig = this.st[t - 1];
77
+ if (sig === undefined || !isSig(sig)) {
78
+ throw new PeticionesError(SCRAPER_ROTO + ` (se esperaba un tipo, llegó "${String(sig).slice(0, 24)}")`);
79
+ }
80
+ const node = { sig, fields: [] };
81
+ this.seen.push(node);
82
+ if (sig.startsWith('[')) {
83
+ this.readArray(sig, node);
84
+ return node;
85
+ }
86
+ const ops = GWT_SCHEMA[className(sig)];
87
+ if (ops === undefined)
88
+ throw new PeticionesError(SCRAPER_ROTO + ` (tipo sin esquema: ${className(sig)})`);
89
+ this.runOps(ops, node);
90
+ return node;
91
+ }
92
+ readArray(sig, node) {
93
+ const el = sig[1];
94
+ const n = this.tok();
95
+ const items = [];
96
+ for (let k = 0; k < n; k++) {
97
+ if (el === 'L' || el === '[')
98
+ items.push(this.readObject());
99
+ else if (el === 'J')
100
+ items.push(this.tok() + this.tok()); // long[]
101
+ else
102
+ items.push(this.tok()); // C/I/Z/B/S/D/F -> one raw token
103
+ }
104
+ node.items = items;
105
+ }
106
+ runOps(ops, node) {
107
+ for (const op of ops) {
108
+ switch (op) {
109
+ case 's':
110
+ node.fields.push(this.readString());
111
+ break;
112
+ case 'i':
113
+ case 'd':
114
+ node.fields.push(this.tok());
115
+ break;
116
+ case 'l':
117
+ node.fields.push(this.tok() + this.tok());
118
+ break;
119
+ case 'o':
120
+ node.fields.push(this.readObject());
121
+ break;
122
+ case 'L': {
123
+ const n = this.tok();
124
+ const items = [];
125
+ for (let k = 0; k < n; k++)
126
+ items.push(this.readObject());
127
+ node.items = items;
128
+ break;
129
+ }
130
+ case 'M': {
131
+ const n = this.tok();
132
+ for (let k = 0; k < n; k++) {
133
+ this.readObject();
134
+ this.readObject();
135
+ }
136
+ break;
137
+ }
138
+ default:
139
+ throw new PeticionesError(SCRAPER_ROTO + ` (op desconocida ${op})`);
140
+ }
141
+ }
142
+ }
143
+ }
144
+ const SCRAPER_ROTO = 'No se pudo interpretar la respuesta de SII (scraper roto)';
145
+ /** Decode a `//OK[…]` GWT-RPC response into its root object-graph node. A `//EX[…]`
146
+ * business error is surfaced VERBATIM as a `PeticionesError` (ADR-004); any other body
147
+ * (or a schema mismatch mid-decode) is a loud "scraper roto". */
148
+ export function decodeGwtResponse(text) {
149
+ const body = text.trimStart();
150
+ if (body.startsWith('//EX')) {
151
+ throw new PeticionesError(extractExceptionMessage(body));
152
+ }
153
+ if (!body.startsWith('//OK')) {
154
+ // requestText already maps a LOGIN_HOST bounce to SessionExpiredError, so reaching
155
+ // here with a non-OK/EX body means the wire shape changed — fail loud, never retry.
156
+ throw new PeticionesError(SCRAPER_ROTO + ' (respuesta no es //OK)');
157
+ }
158
+ const arr = parseArray(body);
159
+ const st = arr[arr.length - 3];
160
+ if (!Array.isArray(st))
161
+ throw new PeticionesError(SCRAPER_ROTO + ' (sin tabla de strings)');
162
+ const payload = arr.slice(0, arr.length - 3);
163
+ const reader = new GraphReader(payload, st);
164
+ const root = reader.readObject();
165
+ if (!reader.done())
166
+ throw new PeticionesError(SCRAPER_ROTO + ' (datos sobrantes)');
167
+ return root;
168
+ }
169
+ /** True when the server rejected the serialization-policy hash — the trigger to
170
+ * re-source the hash and retry (self-heal, ADR-020). GWT answers a bad/blocked policy
171
+ * with an IncompatibleRemoteServiceException `//EX`. */
172
+ export function isPolicyError(e) {
173
+ return (e instanceof PeticionesError &&
174
+ /IncompatibleRemoteService|policy|blocked|no est[aá] incluid/i.test(e.message));
175
+ }
176
+ function parseArray(body) {
177
+ const json = body.slice(body.indexOf('[')); // drop the `//OK` / `//EX` prefix
178
+ try {
179
+ const v = JSON.parse(json);
180
+ if (!Array.isArray(v))
181
+ throw new Error('not an array');
182
+ return v;
183
+ }
184
+ catch {
185
+ throw new PeticionesError(SCRAPER_ROTO + ' (JSON inválido)');
186
+ }
187
+ }
188
+ // The `//EX` graph is a serialized Throwable; its human message is the string-table
189
+ // entry that is neither a type signature nor an empty string. Join the plausible message
190
+ // strings so SII's wording reaches the user verbatim (ADR-004).
191
+ function extractExceptionMessage(body) {
192
+ try {
193
+ const arr = parseArray(body);
194
+ const st = arr[arr.length - 3];
195
+ if (Array.isArray(st)) {
196
+ const msgs = st.filter((s) => typeof s === 'string' && s.length > 0 && !isSig(s) && /\s/.test(s));
197
+ if (msgs.length)
198
+ return `SII rechazó la consulta de peticiones: ${msgs.join(' | ')}`;
199
+ }
200
+ }
201
+ catch {
202
+ /* fall through */
203
+ }
204
+ return 'SII rechazó la consulta de peticiones (error de servicio).';
205
+ }
206
+ //# sourceMappingURL=gwt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gwt.js","sourceRoot":"","sources":["../../src/portal/gwt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import type { PortalSession } from '../seams/index.js';
2
+ import type { Rut } from '../rut/index.js';
3
+ /** One state transition in a petition's timeline. `estado` is SII's label with any
4
+ * internal functionary suffix stripped; `mensaje` is SII's verbatim note to the taxpayer
5
+ * (what's pending / why) when present — the value behind an "en espera de Antecedentes". */
6
+ export interface EstadoPeticion {
7
+ readonly estado: string;
8
+ /** ISO-8601 date-time of the transition, or null when SII sent none. */
9
+ readonly fecha: string | null;
10
+ readonly mensaje: string | null;
11
+ }
12
+ /** One petición administrativa (curated; NO `raw`). */
13
+ export interface Peticion {
14
+ readonly numero: number;
15
+ readonly materia: string | null;
16
+ /** The most recent state's label (the timeline entry with the latest `fecha`). */
17
+ readonly estadoActual: string;
18
+ /** Full state history, most-recent-first. */
19
+ readonly timeline: readonly EstadoPeticion[];
20
+ }
21
+ /** All peticiones administrativas for `rut` (the resolved body RUT). */
22
+ export interface PeticionesResult {
23
+ readonly rut: string;
24
+ readonly peticiones: readonly Peticion[];
25
+ }
26
+ /** Read every petición administrativa for `rut` (body-RUT). Self-heals the policy hash on
27
+ * a policy rejection, then decodes + curates. Never retried after a genuine SII error. */
28
+ export declare function fetchPeticiones(session: PortalSession, args: {
29
+ readonly rut: Rut;
30
+ }): Promise<PeticionesResult>;
31
+ //# sourceMappingURL=peticiones.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"peticiones.d.ts","sourceRoot":"","sources":["../../src/portal/peticiones.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAuB3C;;6FAE6F;AAC7F,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,wEAAwE;IACxE,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAED,uDAAuD;AACvD,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,kFAAkF;IAClF,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,6CAA6C;IAC7C,QAAQ,CAAC,QAAQ,EAAE,SAAS,cAAc,EAAE,CAAC;CAC9C;AAED,wEAAwE;AACxE,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,UAAU,EAAE,SAAS,QAAQ,EAAE,CAAC;CAC1C;AAgDD;2FAC2F;AAC3F,wBAAsB,eAAe,CACnC,OAAO,EAAE,aAAa,EACtB,IAAI,EAAE;IAAE,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAA;CAAE,GAC1B,OAAO,CAAC,gBAAgB,CAAC,CAK3B"}
@@ -0,0 +1,137 @@
1
+ // Peticiones Administrativas (SISPAD) — typed facade over the GWT-RPC read seam
2
+ // (`PortalSession.requestText`, ADR-020). Reaches `peticionesUsuario(rut, token)` on the
3
+ // legacy GWT app `www3.sii.cl/sispadinternet` with a COLD authenticated POST (no SPA
4
+ // warm-up) and decodes the `//OK[…]` object graph in-house (`gwt.ts`). Body-RUT like RCV:
5
+ // the caller resolves the operating RUT and validates `--rut` vs the operable set (ADR-005).
6
+ //
7
+ // PII posture — NO `raw`, tight allowlist (ADR-004 / ADR-006). The graph is PII-dense on
8
+ // every side (own identity, SII functionary names + emails, third-party RUTs); a per-field
9
+ // denylist is not provably complete, so only the tracking fields are curated. Even an
10
+ // estado glosa can embed a functionary name — `Petición … (Subrogancia Informal [NOMBRE])`
11
+ // — which is stripped. Full wire contract: docs/sii-contract/peticiones.md.
12
+ import { buildPeticionesRequest, decodeGwtResponse, isNode, isPolicyError } from './gwt.js';
13
+ import { HOSTS } from '../config/index.js';
14
+ import { PeticionesError } from '../errors/index.js';
15
+ const MODULE_BASE = `${HOSTS.sispad}/`;
16
+ const ENDPOINT = `${HOSTS.sispad}/peticion`;
17
+ const NOCACHE_URL = `${HOSTS.sispad}/sispadinternet.nocache.js`;
18
+ // Last-known-good serialization-policy strong-name (observed 2026-07-03). Validated by the
19
+ // server and rotated on SII recompile → self-healed at runtime (see `callWithHealing`).
20
+ const LAST_KNOWN_HASH = '598C9D524B940C07227C7D58BBBBDDFC';
21
+ // The GWT UI conversation id — NOT validated by the server (auth is by cookie + rut, ADR-020),
22
+ // so a constant placeholder suffices; a real token is a session secret we never need.
23
+ const TOKEN_PLACEHOLDER = 'SIICOREPETICIONESREAD';
24
+ const GWT_HEADERS = {
25
+ 'Content-Type': 'text/x-gwt-rpc; charset=utf-8',
26
+ 'X-GWT-Module-Base': MODULE_BASE,
27
+ };
28
+ // Curated field positions in the decoded graph — the observed contract (2026-07-03). A
29
+ // class whose fields shift on recompile is caught by the schema decode ("scraper roto");
30
+ // these indices are validated softly below (número numeric, estado glosa `Petici…`).
31
+ const PET = { numero: 12, materia: 26, estados: 21 };
32
+ const MATERIA_GLOSA = 10;
33
+ const EST = { glosa: 10, fecha: 7, nota: 9 };
34
+ // Module-scoped cache of the working policy hash (global to the SII deploy, so process-wide).
35
+ let cachedHash = null;
36
+ const nodeAt = (n, i) => n.fields[i] ?? null;
37
+ function intOf(v) {
38
+ return isNode(v) && typeof v.fields[0] === 'number' ? v.fields[0] : null;
39
+ }
40
+ function tsIso(v) {
41
+ if (!isNode(v) || typeof v.fields[0] !== 'number')
42
+ return null;
43
+ const d = new Date(v.fields[0]);
44
+ return Number.isNaN(d.getTime()) ? null : d.toISOString();
45
+ }
46
+ // SII embeds the acting functionary in some estado glosas: "… (Subrogancia Informal [NAME])".
47
+ // Strip that internal-PII suffix; the base label is the state (ADR-006).
48
+ const stripFunctionaryPII = (glosa) => glosa.replace(/\s*\(Subrogancia[^)]*\)\s*$/i, '').trim();
49
+ function curateEstado(node) {
50
+ if (!isNode(node))
51
+ return null;
52
+ const raw = nodeAt(node, EST.glosa);
53
+ if (typeof raw !== 'string' || !raw.startsWith('Petici'))
54
+ return null; // curation drift guard
55
+ const nota = nodeAt(node, EST.nota);
56
+ return {
57
+ estado: stripFunctionaryPII(raw),
58
+ fecha: tsIso(nodeAt(node, EST.fecha)),
59
+ mensaje: typeof nota === 'string' && nota.length > 0 ? nota : null,
60
+ };
61
+ }
62
+ function curatePeticion(node) {
63
+ if (!isNode(node))
64
+ return null;
65
+ const numero = intOf(nodeAt(node, PET.numero));
66
+ if (numero === null)
67
+ return null; // not a PeticionTo shape → skip (guard)
68
+ const materiaNode = nodeAt(node, PET.materia);
69
+ const materia = isNode(materiaNode)
70
+ ? (nodeAt(materiaNode, MATERIA_GLOSA) ?? null)
71
+ : null;
72
+ const estadosNode = nodeAt(node, PET.estados);
73
+ const timeline = (isNode(estadosNode) ? (estadosNode.items ?? []) : [])
74
+ .map(curateEstado)
75
+ .filter((e) => e !== null)
76
+ .sort((a, b) => (b.fecha ?? '').localeCompare(a.fecha ?? ''));
77
+ const estadoActual = timeline[0]?.estado ?? '';
78
+ return { numero, materia: typeof materia === 'string' ? materia : null, estadoActual, timeline };
79
+ }
80
+ /** Read every petición administrativa for `rut` (body-RUT). Self-heals the policy hash on
81
+ * a policy rejection, then decodes + curates. Never retried after a genuine SII error. */
82
+ export async function fetchPeticiones(session, args) {
83
+ const root = await callWithHealing(session, args.rut.body);
84
+ const arr = isNode(root) ? (root.items ?? []) : [];
85
+ const peticiones = arr.map(curatePeticion).filter((p) => p !== null);
86
+ return { rut: args.rut.canonical, peticiones };
87
+ }
88
+ async function callOnce(session, rut, hash) {
89
+ const body = buildPeticionesRequest(MODULE_BASE, hash, rut, TOKEN_PLACEHOLDER);
90
+ const resp = await session.requestText(ENDPOINT, { method: 'POST', headers: GWT_HEADERS, body });
91
+ return decodeGwtResponse(resp.body);
92
+ }
93
+ async function callWithHealing(session, rut) {
94
+ const first = cachedHash ?? LAST_KNOWN_HASH;
95
+ try {
96
+ const root = await callOnce(session, rut, first);
97
+ cachedHash = first;
98
+ return root;
99
+ }
100
+ catch (e) {
101
+ if (!isPolicyError(e))
102
+ throw e;
103
+ // Self-heal: the policy strong-name rotated. Re-source candidates from the shipped
104
+ // permutation JS and try each (≤ a handful) until one deserializes (ADR-020).
105
+ const candidates = (await sourceHashCandidates(session)).filter((h) => h !== first);
106
+ for (const hash of candidates) {
107
+ try {
108
+ const root = await callOnce(session, rut, hash);
109
+ cachedHash = hash;
110
+ return root;
111
+ }
112
+ catch (inner) {
113
+ if (!isPolicyError(inner))
114
+ throw inner;
115
+ }
116
+ }
117
+ throw new PeticionesError('No se pudo determinar la política de serialización de SISPAD (scraper roto): el hash rotó y ningún candidato del JS de permutación fue aceptado.');
118
+ }
119
+ }
120
+ // Source candidate policy strong-names from the shipped GWT bundle: the bootstrap
121
+ // nocache.js lists the permutation strong-names; any permutation's `.cache.html` embeds
122
+ // the serialization-policy hashes (as `POc='…'` constants). Both are authenticated GETs.
123
+ async function sourceHashCandidates(session) {
124
+ const HEX32 = /[0-9A-F]{32}/g;
125
+ const nocache = await session.requestText(NOCACHE_URL, { method: 'GET' });
126
+ const perms = [...new Set(nocache.body.match(HEX32) ?? [])];
127
+ for (const perm of perms) {
128
+ const cache = await session.requestText(`${HOSTS.sispad}/${perm}.cache.html`, {
129
+ method: 'GET',
130
+ });
131
+ const hashes = [...new Set(cache.body.match(HEX32) ?? [])].filter((h) => h !== perm);
132
+ if (hashes.length)
133
+ return hashes;
134
+ }
135
+ return [];
136
+ }
137
+ //# sourceMappingURL=peticiones.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"peticiones.js","sourceRoot":"","sources":["../../src/portal/peticiones.ts"],"names":[],"mappings":"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"}
@@ -47,6 +47,17 @@ export interface FormRequest {
47
47
  readonly headers?: Record<string, string>;
48
48
  readonly form?: Record<string, string>;
49
49
  }
50
+ /** An AUTHENTICATED raw-body request from the session (cookies ride along). The primitive
51
+ * behind GWT-RPC read facades (SISPAD peticiones, ADR-020): the body is an opaque string
52
+ * (a `text/x-gwt-rpc` payload) and the response is text (`//OK[…]`), neither JSON nor
53
+ * urlencoded/HTML. The authenticated, arbitrary-content-type peer of `requestPublic`. The
54
+ * facade sets `Content-Type` (+ `X-GWT-Module-Base`) via `headers`. */
55
+ export interface TextRequest {
56
+ readonly method?: 'GET' | 'POST';
57
+ readonly headers?: Record<string, string>;
58
+ /** Raw request body, sent verbatim (e.g. the GWT-RPC stream). Omit for GET. */
59
+ readonly body?: string;
60
+ }
50
61
  export interface PortalSession {
51
62
  /** Navigate; returns the URL actually landed on (for URL-based auth detection). */
52
63
  goto(url: string): Promise<string>;
@@ -63,6 +74,12 @@ export interface PortalSession {
63
74
  * Login-wall detection is URL-based (landing on `LOGIN_HOST`) → `SessionExpiredError`,
64
75
  * since an HTML body is EXPECTED here (unlike `requestJson`). */
65
76
  requestForm(url: string, options?: FormRequest): Promise<PublicResponse>;
77
+ /** Issue an authenticated raw-body request from the session and return the decoded
78
+ * text body (charset-aware). The primitive behind GWT-RPC read facades (SISPAD
79
+ * peticiones, ADR-020) — a `text/x-gwt-rpc` POST returning `//OK[…]`. Login-wall
80
+ * detection is URL-based (landing on `LOGIN_HOST`) → `SessionExpiredError`, since a
81
+ * non-JSON body is EXPECTED (unlike `requestJson`). */
82
+ requestText(url: string, options?: TextRequest): Promise<PublicResponse>;
66
83
  /** Value of a cookie visible to `url` (e.g. the SPA conversation `TOKEN`), or
67
84
  * null. Used to seed SDI request metadata. */
68
85
  cookie(url: string, name: string): Promise<string | null>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/seams/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/seams/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { PeticionesResult } from '../portal/peticiones.js';
2
+ import type { Runtime } from '../seams/index.js';
3
+ export type { EstadoPeticion, Peticion, PeticionesResult } from '../portal/peticiones.js';
4
+ interface PeticionesArgs {
5
+ /** Per-call operating RUT override (must be in the operable set); else the pointer. */
6
+ readonly rut?: string;
7
+ }
8
+ export declare function peticionesList(runtime: Runtime, args?: PeticionesArgs): Promise<PeticionesResult>;
9
+ //# sourceMappingURL=peticiones.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"peticiones.d.ts","sourceRoot":"","sources":["../../src/tasks/peticiones.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,KAAK,EAAc,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE7D,YAAY,EAAE,cAAc,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE1F,UAAU,cAAc;IACtB,uFAAuF;IACvF,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;CACvB;AAQD,wBAAsB,cAAc,CAClC,OAAO,EAAE,OAAO,EAChB,IAAI,GAAE,cAAmB,GACxB,OAAO,CAAC,gBAAgB,CAAC,CAsB3B"}
@@ -0,0 +1,35 @@
1
+ // Public peticiones task the surfaces call (ADR-003). Wraps the GWT-RPC facade in
2
+ // `withSession` — consume a live session, resolve the body RUT (override > pointer > self,
3
+ // ADR-005) — and writes ONE audit receipt. Peticiones is BODY-RUT (like RCV): `--rut`/
4
+ // operate selects a represented empresa; the operable-set gate lives in `withSession`.
5
+ // The audit records only that a read happened (rut + count) — NEVER petition contents
6
+ // (materia, estados, the SII messages are PII/business data, ADR-006 / ADR-020).
7
+ import { withSession } from '../auth/index.js';
8
+ import { recordAudit } from '../audit/index.js';
9
+ import { Rut } from '../rut/index.js';
10
+ import { fetchPeticiones } from '../portal/peticiones.js';
11
+ const sessionOpts = (rut) => (rut !== undefined ? { rut } : {});
12
+ function audit(runtime, result, extra) {
13
+ recordAudit(runtime, { action: 'peticiones_list', result, ...extra });
14
+ }
15
+ export async function peticionesList(runtime, args = {}) {
16
+ const start = runtime.clock.now().getTime();
17
+ try {
18
+ const { res, sessionRut } = await withSession(runtime, async (session, ctx) => ({
19
+ res: await fetchPeticiones(session, { rut: Rut.parse(ctx.operatingRut) }),
20
+ sessionRut: ctx.sessionRut,
21
+ }), sessionOpts(args.rut));
22
+ audit(runtime, 'ok', {
23
+ rut: res.rut,
24
+ count: res.peticiones.length,
25
+ durationMs: runtime.clock.now().getTime() - start,
26
+ ...(res.rut !== sessionRut ? { rutAuth: sessionRut } : {}),
27
+ });
28
+ return res;
29
+ }
30
+ catch (e) {
31
+ audit(runtime, 'failed', {});
32
+ throw e;
33
+ }
34
+ }
35
+ //# sourceMappingURL=peticiones.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"peticiones.js","sourceRoot":"","sources":["../../src/tasks/peticiones.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,2FAA2F;AAC3F,uFAAuF;AACvF,uFAAuF;AACvF,sFAAsF;AACtF,iFAAiF;AACjF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAW1D,MAAM,WAAW,GAAG,CAAC,GAAY,EAAoB,EAAE,CAAC,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAE3F,SAAS,KAAK,CAAC,OAAgB,EAAE,MAAc,EAAE,KAA0B;IACzE,WAAW,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;AACxE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,OAAgB,EAChB,OAAuB,EAAE;IAEzB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC5C,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,MAAM,WAAW,CAC3C,OAAO,EACP,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;YACvB,GAAG,EAAE,MAAM,eAAe,CAAC,OAAO,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;YACzE,UAAU,EAAE,GAAG,CAAC,UAAU;SAC3B,CAAC,EACF,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CACtB,CAAC;QACF,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE;YACnB,GAAG,EAAE,GAAG,CAAC,GAAG;YACZ,KAAK,EAAE,GAAG,CAAC,UAAU,CAAC,MAAM;YAC5B,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK;YACjD,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC3D,CAAC,CAAC;QACH,OAAO,GAAG,CAAC;IACb,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;QAC7B,MAAM,CAAC,CAAC;IACV,CAAC;AACH,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { RcvDetalle, RcvResumen, RcvSide } from '../portal/rcv.js';
1
+ import type { RcvDetalle, RcvDetalleDoc, RcvResumen, RcvSide } from '../portal/rcv.js';
2
2
  import type { Runtime } from '../seams/index.js';
3
3
  export type { RcvDetalle, RcvDetalleDoc, RcvResumen, RcvResumenRow, RcvSide, } from '../portal/rcv.js';
4
4
  interface RcvResumenArgs {
@@ -12,6 +12,39 @@ interface RcvDetalleArgs extends RcvResumenArgs {
12
12
  /** SII DTE type code (from a prior `rcvSummary` for the same period). */
13
13
  readonly codigoTipoDoc: string;
14
14
  }
15
+ /** A detalle doc flattened across DTE types, carrying the type it belongs to. */
16
+ export interface RcvDetalleAllDoc extends RcvDetalleDoc {
17
+ /** The DTE type code this doc belongs to (from the resumen enumeration). */
18
+ readonly codigoTipoDoc: string;
19
+ }
20
+ /** Flat "todos los documentos" view of one (RUT, period, side): every detalle doc across
21
+ * every DTE type the resumen reports, from a SINGLE session. */
22
+ export interface RcvDetalleAll {
23
+ readonly rut: string;
24
+ readonly periodo: string;
25
+ readonly side: RcvSide;
26
+ /** All docs across all types, each carrying its `codigoTipoDoc`. */
27
+ readonly docs: readonly RcvDetalleAllDoc[];
28
+ /** true when ≥1 type was rejected by SII (its docs are absent from `docs`). */
29
+ readonly incomplete: boolean;
30
+ /** DTE type codes SII rejected — captured verbatim as absent, never retried (ADR-004). */
31
+ readonly rejectedTypes: readonly string[];
32
+ }
15
33
  export declare function rcvSummary(runtime: Runtime, args: RcvResumenArgs): Promise<RcvResumen>;
16
34
  export declare function rcvList(runtime: Runtime, args: RcvDetalleArgs): Promise<RcvDetalle>;
35
+ /** "Todos los documentos" of one (RUT, period, side): a SINGLE-session fan-out of
36
+ * `fetchRcvDetalle` over every DTE type the resumen reports, flattened. A consumer gets
37
+ * one flat table without opening N browser sessions (the whole motivation — ADR-003:
38
+ * the fan-out belongs in the library, not the caller). Body-RUT (ADR-005): `--rut`/operate
39
+ * selects a represented empresa. Paced between POSTs (ADR-004). The period is validated
40
+ * locally BEFORE any session.
41
+ *
42
+ * PER-TYPE RESILIENCE (mirrors `f22Historial`): SII can reject ONE DTE type's detalle
43
+ * (an `RcvError`) while others succeed. Since the fan-out spans every type the resumen
44
+ * reports, one type's failure MUST NOT bury the rest — the type code is captured in
45
+ * `rejectedTypes` (ADR-004: surfaced, never hidden, never retried) and `incomplete` flips
46
+ * true, while the successful types' docs still return. A session-level failure
47
+ * (`NotAuthenticated`/`SessionExpired`) is NOT an `RcvError`, so it propagates and aborts
48
+ * the whole read. */
49
+ export declare function rcvListAll(runtime: Runtime, args: RcvResumenArgs): Promise<RcvDetalleAll>;
17
50
  //# sourceMappingURL=rcv.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"rcv.d.ts","sourceRoot":"","sources":["../../src/tasks/rcv.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,KAAK,EAAc,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE7D,YAAY,EACV,UAAU,EACV,aAAa,EACb,UAAU,EACV,aAAa,EACb,OAAO,GACR,MAAM,kBAAkB,CAAC;AAE1B,UAAU,cAAc;IACtB,8EAA8E;IAC9E,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,uFAAuF;IACvF,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,UAAU,cAAe,SAAQ,cAAc;IAC7C,yEAAyE;IACzE,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAYD,wBAAsB,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC,CA4B5F;AAED,wBAAsB,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC,CAkCzF"}
1
+ {"version":3,"file":"rcv.d.ts","sourceRoot":"","sources":["../../src/tasks/rcv.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AACvF,OAAO,KAAK,EAAc,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE7D,YAAY,EACV,UAAU,EACV,aAAa,EACb,UAAU,EACV,aAAa,EACb,OAAO,GACR,MAAM,kBAAkB,CAAC;AAE1B,UAAU,cAAc;IACtB,8EAA8E;IAC9E,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,uFAAuF;IACvF,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,UAAU,cAAe,SAAQ,cAAc;IAC7C,yEAAyE;IACzE,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAKD,iFAAiF;AACjF,MAAM,WAAW,gBAAiB,SAAQ,aAAa;IACrD,4EAA4E;IAC5E,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAED;iEACiE;AACjE,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,oEAAoE;IACpE,QAAQ,CAAC,IAAI,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAC3C,+EAA+E;IAC/E,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,0FAA0F;IAC1F,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;CAC3C;AAYD,wBAAsB,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC,CA4B5F;AAED,wBAAsB,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC,CAkCzF;AAED;;;;;;;;;;;;;sBAasB;AACtB,wBAAsB,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAqE/F"}