@fin.cx/opendata 4.6.0 → 4.8.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/.smartconfig.json +6 -2
- package/dist_ts/00_commitinfo_data.js +3 -3
- package/dist_ts/financialstatements/amounts.d.ts +58 -0
- package/dist_ts/financialstatements/amounts.js +130 -0
- package/dist_ts/financialstatements/classes.financialstatementerror.d.ts +24 -0
- package/dist_ts/financialstatements/classes.financialstatementerror.js +10 -0
- package/dist_ts/financialstatements/constants.d.ts +16 -0
- package/dist_ts/financialstatements/constants.js +20 -0
- package/dist_ts/financialstatements/dates.d.ts +16 -0
- package/dist_ts/financialstatements/dates.js +72 -0
- package/dist_ts/financialstatements/html.d.ts +21 -0
- package/dist_ts/financialstatements/html.js +92 -0
- package/dist_ts/financialstatements/index.d.ts +6 -0
- package/dist_ts/financialstatements/index.js +11 -0
- package/dist_ts/financialstatements/interfaces.d.ts +258 -0
- package/dist_ts/financialstatements/interfaces.js +2 -0
- package/dist_ts/financialstatements/layout.d.ts +20 -0
- package/dist_ts/financialstatements/layout.html.d.ts +8 -0
- package/dist_ts/financialstatements/layout.html.js +125 -0
- package/dist_ts/financialstatements/layout.js +2 -0
- package/dist_ts/financialstatements/layout.pdf.d.ts +6 -0
- package/dist_ts/financialstatements/layout.pdf.js +229 -0
- package/dist_ts/financialstatements/mediatypes.d.ts +3 -0
- package/dist_ts/financialstatements/mediatypes.js +11 -0
- package/dist_ts/financialstatements/outline.d.ts +22 -0
- package/dist_ts/financialstatements/outline.js +26 -0
- package/dist_ts/financialstatements/parse.esef.d.ts +13 -0
- package/dist_ts/financialstatements/parse.esef.js +349 -0
- package/dist_ts/financialstatements/parse.hgb.d.ts +9 -0
- package/dist_ts/financialstatements/parse.hgb.js +1014 -0
- package/dist_ts/financialstatements/parse.statement.d.ts +8 -0
- package/dist_ts/financialstatements/parse.statement.js +25 -0
- package/dist_ts/financialstatements/plugins.d.ts +10 -0
- package/dist_ts/financialstatements/plugins.js +15 -0
- package/dist_ts/financialstatements/read.d.ts +10 -0
- package/dist_ts/financialstatements/read.js +113 -0
- package/dist_ts/handelsregister/classes.handelsregisterclient.d.ts +8 -2
- package/dist_ts/handelsregister/classes.handelsregisterclient.js +14 -5
- package/dist_ts/handelsregister/classes.handelsregistererror.d.ts +3 -1
- package/dist_ts/handelsregister/classes.handelsregistererror.js +1 -1
- package/dist_ts/handelsregister/classes.portalsession.d.ts +19 -3
- package/dist_ts/handelsregister/classes.portalsession.js +67 -9
- package/dist_ts/handelsregister/interfaces.d.ts +9 -2
- package/package.json +16 -6
- package/readme.md +86 -5
- package/ts/00_commitinfo_data.ts +2 -2
- package/ts/financialstatements/amounts.ts +181 -0
- package/ts/financialstatements/classes.financialstatementerror.ts +35 -0
- package/ts/financialstatements/constants.ts +24 -0
- package/ts/financialstatements/dates.ts +89 -0
- package/ts/financialstatements/html.ts +107 -0
- package/ts/financialstatements/index.ts +17 -0
- package/ts/financialstatements/interfaces.ts +268 -0
- package/ts/financialstatements/layout.html.ts +130 -0
- package/ts/financialstatements/layout.pdf.ts +268 -0
- package/ts/financialstatements/layout.ts +16 -0
- package/ts/financialstatements/mediatypes.ts +14 -0
- package/ts/financialstatements/outline.ts +44 -0
- package/ts/financialstatements/parse.esef.ts +394 -0
- package/ts/financialstatements/parse.hgb.ts +1235 -0
- package/ts/financialstatements/parse.statement.ts +26 -0
- package/ts/financialstatements/plugins.ts +29 -0
- package/ts/financialstatements/read.ts +135 -0
- package/ts/handelsregister/classes.handelsregisterclient.ts +18 -4
- package/ts/handelsregister/classes.handelsregistererror.ts +3 -0
- package/ts/handelsregister/classes.portalsession.ts +78 -9
- package/ts/handelsregister/interfaces.ts +9 -2
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { IHgbStatement } from './interfaces.js';
|
|
2
|
+
/**
|
|
3
|
+
* Reads a statement under the HGB from the HTML or the PDF a register shows: the balance sheet
|
|
4
|
+
* (§ 266 HGB) and, where one is published, the income statement (§ 275 HGB). Everything it returns
|
|
5
|
+
* was printed and adds up; where the current year's balance sheet cannot be read with certainty it
|
|
6
|
+
* throws `unparseable` rather than guess. A PDF is read from its text layer only.
|
|
7
|
+
*/
|
|
8
|
+
export declare const parseStatementDocument: (bytesArg: Uint8Array, mediaTypeArg: string) => Promise<IHgbStatement>;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { FinancialStatementError } from './classes.financialstatementerror.js';
|
|
2
|
+
import { maxStatementBytes } from './constants.js';
|
|
3
|
+
import { decodeHtml } from './html.js';
|
|
4
|
+
import { htmlLayout } from './layout.html.js';
|
|
5
|
+
import { pdfLayout } from './layout.pdf.js';
|
|
6
|
+
import { statementMediaTypeOf } from './mediatypes.js';
|
|
7
|
+
import { readHgbStatement } from './parse.hgb.js';
|
|
8
|
+
/**
|
|
9
|
+
* Reads a statement under the HGB from the HTML or the PDF a register shows: the balance sheet
|
|
10
|
+
* (§ 266 HGB) and, where one is published, the income statement (§ 275 HGB). Everything it returns
|
|
11
|
+
* was printed and adds up; where the current year's balance sheet cannot be read with certainty it
|
|
12
|
+
* throws `unparseable` rather than guess. A PDF is read from its text layer only.
|
|
13
|
+
*/
|
|
14
|
+
export const parseStatementDocument = async (bytesArg, mediaTypeArg) => {
|
|
15
|
+
const mediaType = statementMediaTypeOf(mediaTypeArg);
|
|
16
|
+
if (mediaType !== 'text/html' && mediaType !== 'application/xhtml+xml' && mediaType !== 'application/pdf') {
|
|
17
|
+
throw new FinancialStatementError('unsupported_media_type', `A statement in "${mediaTypeArg}" is not read here; HTML and PDF are.`);
|
|
18
|
+
}
|
|
19
|
+
if (bytesArg.byteLength > maxStatementBytes) {
|
|
20
|
+
throw new FinancialStatementError('too_large', `The document has ${bytesArg.byteLength} bytes, more than the ${maxStatementBytes} read here.`);
|
|
21
|
+
}
|
|
22
|
+
const blocks = mediaType === 'application/pdf' ? await pdfLayout(bytesArg) : htmlLayout(decodeHtml(bytesArg));
|
|
23
|
+
return readHgbStatement(blocks);
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2Uuc3RhdGVtZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvZmluYW5jaWFsc3RhdGVtZW50cy9wYXJzZS5zdGF0ZW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDL0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN2QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDOUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR2xEOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsS0FBSyxFQUFFLFFBQW9CLEVBQUUsWUFBb0IsRUFBMEIsRUFBRTtJQUNqSCxNQUFNLFNBQVMsR0FBRyxvQkFBb0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNyRCxJQUFJLFNBQVMsS0FBSyxXQUFXLElBQUksU0FBUyxLQUFLLHVCQUF1QixJQUFJLFNBQVMsS0FBSyxpQkFBaUIsRUFBRSxDQUFDO1FBQzFHLE1BQU0sSUFBSSx1QkFBdUIsQ0FBQyx3QkFBd0IsRUFBRSxtQkFBbUIsWUFBWSx1Q0FBdUMsQ0FBQyxDQUFDO0lBQ3RJLENBQUM7SUFDRCxJQUFJLFFBQVEsQ0FBQyxVQUFVLEdBQUcsaUJBQWlCLEVBQUUsQ0FBQztRQUM1QyxNQUFNLElBQUksdUJBQXVCLENBQUMsV0FBVyxFQUFFLG9CQUFvQixRQUFRLENBQUMsVUFBVSx5QkFBeUIsaUJBQWlCLGFBQWEsQ0FBQyxDQUFDO0lBQ2pKLENBQUM7SUFDRCxNQUFNLE1BQU0sR0FBRyxTQUFTLEtBQUssaUJBQWlCLENBQUMsQ0FBQyxDQUFDLE1BQU0sU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDOUcsT0FBTyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNsQyxDQUFDLENBQUMifQ==
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import * as path from 'node:path';
|
|
2
|
+
import { createRequire } from 'node:module';
|
|
3
|
+
export { path, createRequire, };
|
|
4
|
+
import * as smartarchiveZip from '@push.rocks/smartarchive/web/zip';
|
|
5
|
+
import * as smartxmlXpath from '@push.rocks/smartxml/xpath';
|
|
6
|
+
export { smartarchiveZip, smartxmlXpath, };
|
|
7
|
+
import * as parse5 from 'parse5';
|
|
8
|
+
export { parse5, };
|
|
9
|
+
/** PDF.js for Node.js (its legacy build), loaded when the first PDF is read */
|
|
10
|
+
export declare const loadPdfjs: () => Promise<typeof import("pdfjs-dist/legacy/build/pdf.mjs")>;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
// This entry point stands alone: it imports nothing from the rest of the package and needs no storage.
|
|
2
|
+
// node native scope
|
|
3
|
+
import * as path from 'node:path';
|
|
4
|
+
import { createRequire } from 'node:module';
|
|
5
|
+
export { path, createRequire, };
|
|
6
|
+
// @push.rocks scope
|
|
7
|
+
import * as smartarchiveZip from '@push.rocks/smartarchive/web/zip';
|
|
8
|
+
import * as smartxmlXpath from '@push.rocks/smartxml/xpath';
|
|
9
|
+
export { smartarchiveZip, smartxmlXpath, };
|
|
10
|
+
// third party scope
|
|
11
|
+
import * as parse5 from 'parse5';
|
|
12
|
+
export { parse5, };
|
|
13
|
+
/** PDF.js for Node.js (its legacy build), loaded when the first PDF is read */
|
|
14
|
+
export const loadPdfjs = () => import('pdfjs-dist/legacy/build/pdf.mjs');
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL2ZpbmFuY2lhbHN0YXRlbWVudHMvcGx1Z2lucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1R0FBdUc7QUFFdkcsb0JBQW9CO0FBQ3BCLE9BQU8sS0FBSyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFNUMsT0FBTyxFQUNMLElBQUksRUFDSixhQUFhLEdBQ2QsQ0FBQTtBQUVELG9CQUFvQjtBQUNwQixPQUFPLEtBQUssZUFBZSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3BFLE9BQU8sS0FBSyxhQUFhLE1BQU0sNEJBQTRCLENBQUM7QUFFNUQsT0FBTyxFQUNMLGVBQWUsRUFDZixhQUFhLEdBQ2QsQ0FBQTtBQUVELG9CQUFvQjtBQUNwQixPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUVqQyxPQUFPLEVBQ0wsTUFBTSxHQUNQLENBQUE7QUFFRCwrRUFBK0U7QUFDL0UsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDIn0=
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { IFinancialStatement, IReadFinancialStatementOptions } from './interfaces.js';
|
|
2
|
+
/**
|
|
3
|
+
* Keeps a published statement as a caller stores it: the filing as the caller states it, the
|
|
4
|
+
* document byte for byte with its SHA-256, and what could be read from it: an ESEF report by
|
|
5
|
+
* `parseEsefPackage` or `parseEsefReport`, any other HTML or PDF by `parseStatementDocument`. A
|
|
6
|
+
* document that cannot be read with certainty is kept with `parsed` null and `parseFailure` saying
|
|
7
|
+
* why. Throws `invalid_input`, `unsupported_media_type` and, for a document larger than
|
|
8
|
+
* `maxStatementBytes`, `too_large`, as nothing would be kept.
|
|
9
|
+
*/
|
|
10
|
+
export declare const readFinancialStatement: (optionsArg: IReadFinancialStatementOptions) => Promise<IFinancialStatement>;
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { FinancialStatementError } from './classes.financialstatementerror.js';
|
|
2
|
+
import { maxStatementBytes, unternehmensregisterNotice } from './constants.js';
|
|
3
|
+
import { statementMediaTypeOf } from './mediatypes.js';
|
|
4
|
+
import { parseEsefPackage, parseEsefReport } from './parse.esef.js';
|
|
5
|
+
import { parseStatementDocument } from './parse.statement.js';
|
|
6
|
+
const filingSources = ['unternehmensregister', 'bundesanzeiger', 'issuer', 'unknown'];
|
|
7
|
+
const filingKinds = ['annual_accounts', 'consolidated_accounts', 'deposited_balance_sheet', 'annual_financial_report'];
|
|
8
|
+
const sizeClasses = ['micro', 'small', 'medium', 'large'];
|
|
9
|
+
const parseFailureCodes = new Set(['invalid_package', 'unreadable', 'no_text', 'unparseable', 'too_large']);
|
|
10
|
+
/** the inline XBRL namespace, which marks an HTML document as an ESEF report */
|
|
11
|
+
const inlineXbrlNamespace = 'http://www.xbrl.org/2013/inlineXBRL';
|
|
12
|
+
const invalid = (messageArg) => {
|
|
13
|
+
throw new FinancialStatementError('invalid_input', messageArg);
|
|
14
|
+
};
|
|
15
|
+
const isIsoDate = (valueArg) => {
|
|
16
|
+
if (!/^\d{4}-\d{2}-\d{2}$/.test(valueArg)) {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
const date = new Date(`${valueArg}T00:00:00Z`);
|
|
20
|
+
return !Number.isNaN(date.getTime()) && date.toISOString().slice(0, 10) === valueArg;
|
|
21
|
+
};
|
|
22
|
+
const filingOf = (inputArg) => {
|
|
23
|
+
if (!filingSources.includes(inputArg?.source)) {
|
|
24
|
+
invalid(`The filing's source "${inputArg?.source}" is not one of ${filingSources.join(', ')}.`);
|
|
25
|
+
}
|
|
26
|
+
if (!filingKinds.includes(inputArg.kind)) {
|
|
27
|
+
invalid(`The filing's kind "${inputArg.kind}" is not one of ${filingKinds.join(', ')}.`);
|
|
28
|
+
}
|
|
29
|
+
if (inputArg.sizeClass != null && !sizeClasses.includes(inputArg.sizeClass)) {
|
|
30
|
+
invalid(`The filing's size class "${inputArg.sizeClass}" is not one of ${sizeClasses.join(', ')}.`);
|
|
31
|
+
}
|
|
32
|
+
for (const field of ['fiscalYearStart', 'fiscalYearEnd', 'publishedOn']) {
|
|
33
|
+
const value = inputArg[field];
|
|
34
|
+
if (value != null && (typeof value !== 'string' || !isIsoDate(value))) {
|
|
35
|
+
invalid(`The filing's ${field} "${value}" is not an ISO date (YYYY-MM-DD).`);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
if (inputArg.source === 'unternehmensregister' && inputArg.publishedOn == null) {
|
|
39
|
+
invalid('A filing from the Unternehmensregister needs publishedOn, the day it was posted or deposited, for its origin note.');
|
|
40
|
+
}
|
|
41
|
+
return {
|
|
42
|
+
source: inputArg.source,
|
|
43
|
+
kind: inputArg.kind,
|
|
44
|
+
companyName: inputArg.companyName ?? null,
|
|
45
|
+
registerReference: inputArg.registerReference ?? null,
|
|
46
|
+
lei: inputArg.lei ?? null,
|
|
47
|
+
fiscalYearStart: inputArg.fiscalYearStart ?? null,
|
|
48
|
+
fiscalYearEnd: inputArg.fiscalYearEnd ?? null,
|
|
49
|
+
publishedOn: inputArg.publishedOn ?? null,
|
|
50
|
+
title: inputArg.title ?? null,
|
|
51
|
+
sizeClass: inputArg.sizeClass ?? null,
|
|
52
|
+
documentId: inputArg.documentId ?? null,
|
|
53
|
+
sourceUrl: inputArg.sourceUrl ?? null,
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
|
+
const sha256Of = async (bytesArg) => {
|
|
57
|
+
const digest = new Uint8Array(await globalThis.crypto.subtle.digest('SHA-256', bytesArg));
|
|
58
|
+
return [...digest].map((byteArg) => byteArg.toString(16).padStart(2, '0')).join('');
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* Keeps a published statement as a caller stores it: the filing as the caller states it, the
|
|
62
|
+
* document byte for byte with its SHA-256, and what could be read from it: an ESEF report by
|
|
63
|
+
* `parseEsefPackage` or `parseEsefReport`, any other HTML or PDF by `parseStatementDocument`. A
|
|
64
|
+
* document that cannot be read with certainty is kept with `parsed` null and `parseFailure` saying
|
|
65
|
+
* why. Throws `invalid_input`, `unsupported_media_type` and, for a document larger than
|
|
66
|
+
* `maxStatementBytes`, `too_large`, as nothing would be kept.
|
|
67
|
+
*/
|
|
68
|
+
export const readFinancialStatement = async (optionsArg) => {
|
|
69
|
+
if (!(optionsArg?.bytes instanceof Uint8Array)) {
|
|
70
|
+
invalid('bytes must be a Uint8Array.');
|
|
71
|
+
}
|
|
72
|
+
const filing = filingOf(optionsArg.filing);
|
|
73
|
+
if (optionsArg.bytes.byteLength > maxStatementBytes) {
|
|
74
|
+
throw new FinancialStatementError('too_large', `The document has ${optionsArg.bytes.byteLength} bytes, more than the ${maxStatementBytes} read here.`);
|
|
75
|
+
}
|
|
76
|
+
const mediaType = statementMediaTypeOf(String(optionsArg.mediaType));
|
|
77
|
+
if (!mediaType) {
|
|
78
|
+
throw new FinancialStatementError('unsupported_media_type', `A statement in "${optionsArg.mediaType}" is not read here; HTML, PDF, XHTML and ZIP packages are.`);
|
|
79
|
+
}
|
|
80
|
+
const bytes = new Uint8Array(optionsArg.bytes);
|
|
81
|
+
const sha256 = await sha256Of(bytes);
|
|
82
|
+
let parsed = null;
|
|
83
|
+
let parseFailure = null;
|
|
84
|
+
try {
|
|
85
|
+
if (mediaType === 'application/zip') {
|
|
86
|
+
parsed = await parseEsefPackage(bytes);
|
|
87
|
+
}
|
|
88
|
+
else if (mediaType === 'application/xhtml+xml' ||
|
|
89
|
+
(mediaType === 'text/html' && new TextDecoder('windows-1252').decode(bytes.subarray(0, 65536)).includes(inlineXbrlNamespace))) {
|
|
90
|
+
parsed = parseEsefReport(bytes);
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
parsed = await parseStatementDocument(bytes, mediaType);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
if (!(error instanceof FinancialStatementError) || !parseFailureCodes.has(error.code)) {
|
|
98
|
+
throw error;
|
|
99
|
+
}
|
|
100
|
+
parseFailure = { code: error.code, message: error.message };
|
|
101
|
+
}
|
|
102
|
+
return {
|
|
103
|
+
filing,
|
|
104
|
+
raw: { bytes, mediaType, sha256 },
|
|
105
|
+
parsed,
|
|
106
|
+
parseFailure,
|
|
107
|
+
obtainedAt: (optionsArg.now ?? Date.now)(),
|
|
108
|
+
notice: filing.source === 'unternehmensregister'
|
|
109
|
+
? unternehmensregisterNotice(filing.publishedOn, filing.kind === 'deposited_balance_sheet')
|
|
110
|
+
: null,
|
|
111
|
+
};
|
|
112
|
+
};
|
|
113
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL2ZpbmFuY2lhbHN0YXRlbWVudHMvcmVhZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMvRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFZOUQsTUFBTSxhQUFhLEdBQW9CLENBQUMsc0JBQXNCLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ3ZHLE1BQU0sV0FBVyxHQUFrQixDQUFDLGlCQUFpQixFQUFFLHVCQUF1QixFQUFFLHlCQUF5QixFQUFFLHlCQUF5QixDQUFDLENBQUM7QUFDdEksTUFBTSxXQUFXLEdBQWlCLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDeEUsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsQ0FBUyxDQUFDLGlCQUFpQixFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7QUFFcEgsZ0ZBQWdGO0FBQ2hGLE1BQU0sbUJBQW1CLEdBQUcscUNBQXFDLENBQUM7QUFFbEUsTUFBTSxPQUFPLEdBQUcsQ0FBQyxVQUFrQixFQUFTLEVBQUU7SUFDNUMsTUFBTSxJQUFJLHVCQUF1QixDQUFDLGVBQWUsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUNqRSxDQUFDLENBQUM7QUFFRixNQUFNLFNBQVMsR0FBRyxDQUFDLFFBQWdCLEVBQVcsRUFBRTtJ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
|
|
@@ -5,14 +5,18 @@ import type { IHandelsregisterClientOptions, IRegisterCallOptions, IRegisterEntr
|
|
|
5
5
|
* plain HTTP and without storage.
|
|
6
6
|
*
|
|
7
7
|
* Every call opens its own visit to the portal and forgets it afterwards: nothing is cached or
|
|
8
|
-
* shared between calls. The client never
|
|
9
|
-
*
|
|
8
|
+
* shared between calls. The client never logs, and asks its gate before every request the portal's
|
|
9
|
+
* terms count:
|
|
10
10
|
* - `search()` makes one counted search;
|
|
11
11
|
* - `getEntry()` makes one counted search and, when the portal offers structured content for the
|
|
12
12
|
* entry, one counted retrieval.
|
|
13
13
|
*
|
|
14
14
|
* Each search also loads the search form and the result list, two pages the terms do not count.
|
|
15
15
|
*
|
|
16
|
+
* The client repeats a request only when the portal closed the connection without answering it,
|
|
17
|
+
* and only once: the portal's front end does that to have the request sent again. A counted request
|
|
18
|
+
* sent once more asks the gate again and counts again.
|
|
19
|
+
*
|
|
16
20
|
* The portal's terms allow single lookups for information only, at most 60 searches or
|
|
17
21
|
* retrievals per hour, and no systematic retrieval to build or update a copy of the registers.
|
|
18
22
|
*/
|
|
@@ -49,6 +53,8 @@ export declare class HandelsregisterClient {
|
|
|
49
53
|
* error of the gate reaches the caller unchanged.
|
|
50
54
|
*/
|
|
51
55
|
private acquireSlot;
|
|
56
|
+
/** asks the gate for a counted request the portal dropped before it is sent once more, and counts it */
|
|
57
|
+
private countAgain;
|
|
52
58
|
private runSearch;
|
|
53
59
|
private pickRow;
|
|
54
60
|
private retrieveStructuredContent;
|
|
@@ -72,14 +72,18 @@ const decodeUtf8 = (bytesArg) => new TextDecoder('utf-8').decode(bytesArg);
|
|
|
72
72
|
* plain HTTP and without storage.
|
|
73
73
|
*
|
|
74
74
|
* Every call opens its own visit to the portal and forgets it afterwards: nothing is cached or
|
|
75
|
-
* shared between calls. The client never
|
|
76
|
-
*
|
|
75
|
+
* shared between calls. The client never logs, and asks its gate before every request the portal's
|
|
76
|
+
* terms count:
|
|
77
77
|
* - `search()` makes one counted search;
|
|
78
78
|
* - `getEntry()` makes one counted search and, when the portal offers structured content for the
|
|
79
79
|
* entry, one counted retrieval.
|
|
80
80
|
*
|
|
81
81
|
* Each search also loads the search form and the result list, two pages the terms do not count.
|
|
82
82
|
*
|
|
83
|
+
* The client repeats a request only when the portal closed the connection without answering it,
|
|
84
|
+
* and only once: the portal's front end does that to have the request sent again. A counted request
|
|
85
|
+
* sent once more asks the gate again and counts again.
|
|
86
|
+
*
|
|
83
87
|
* The portal's terms allow single lookups for information only, at most 60 searches or
|
|
84
88
|
* retrievals per hour, and no systematic retrieval to build or update a copy of the registers.
|
|
85
89
|
*/
|
|
@@ -226,6 +230,11 @@ export class HandelsregisterClient {
|
|
|
226
230
|
throw error;
|
|
227
231
|
}
|
|
228
232
|
}
|
|
233
|
+
/** asks the gate for a counted request the portal dropped before it is sent once more, and counts it */
|
|
234
|
+
async countAgain(kindArg, stepArg, progressArg) {
|
|
235
|
+
await this.acquireSlot(kindArg, stepArg, progressArg);
|
|
236
|
+
progressArg.countedRequests += 1;
|
|
237
|
+
}
|
|
229
238
|
async runSearch(planArg, progressArg, sessionArg) {
|
|
230
239
|
await this.acquireSlot('search', 'search', progressArg);
|
|
231
240
|
try {
|
|
@@ -270,7 +279,7 @@ export class HandelsregisterClient {
|
|
|
270
279
|
forms.setField(fields, field.searchButton, '');
|
|
271
280
|
progressArg.step = 'search';
|
|
272
281
|
progressArg.countedRequests += 1;
|
|
273
|
-
const resultPage = await sessionArg.post(sessionArg.resolve(form.action, formPage.url), fields);
|
|
282
|
+
const resultPage = await sessionArg.post(sessionArg.resolve(form.action, formPage.url), fields, () => this.countAgain('search', 'search', progressArg));
|
|
274
283
|
progressArg.step = 'result_list';
|
|
275
284
|
const resultText = decodeUtf8(resultPage.body);
|
|
276
285
|
try {
|
|
@@ -333,7 +342,7 @@ export class HandelsregisterClient {
|
|
|
333
342
|
forms.setField(fields, name, value);
|
|
334
343
|
}
|
|
335
344
|
progressArg.countedRequests += 1;
|
|
336
|
-
const answer = await sessionArg.post(sessionArg.resolve(resultForm.action, outcomeArg.pageUrl), fields);
|
|
345
|
+
const answer = await sessionArg.post(sessionArg.resolve(resultForm.action, outcomeArg.pageUrl), fields, () => this.countAgain('retrieval', 'structured_content', progressArg));
|
|
337
346
|
if (/html/i.test(answer.contentType)) {
|
|
338
347
|
this.throwIfBlocked(decodeUtf8(answer.body));
|
|
339
348
|
throw new HandelsregisterError('unexpected_response', 'The portal answered with a page instead of the structured content.');
|
|
@@ -394,4 +403,4 @@ export class HandelsregisterClient {
|
|
|
394
403
|
return text ? text : undefined;
|
|
395
404
|
}
|
|
396
405
|
}
|
|
397
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5oYW5kZWxzcmVnaXN0ZXJjbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9oYW5kZWxzcmVnaXN0ZXIvY2xhc3Nlcy5oYW5kZWxzcmVnaXN0ZXJjbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG9CQUFvQixFQUE2QixNQUFNLG1DQUFtQyxDQUFDO0FBQ3BHLE9BQU8sRUFBRSxhQUFhLEVBQTRDLE1BQU0sNEJBQTRCLENBQUM7QUFDckcsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixnQkFBZ0IsRUFDaEIsdUJBQXVCLEVBQ3ZCLGdCQUFnQixFQUNoQixhQUFhLEVBQ2IsdUJBQXVCLEdBQ3hCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sS0FBSyxLQUFLLE1BQU0sWUFBWSxDQUFDO0FBQ3BDLE9BQU8sS0FBSyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBZWxDLE9BQU8sRUFBRSxjQUFjLEVBQTJDLE1BQU0sMEJBQTBCLENBQUM7QUFDbkcsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDdEUsT0FBTyxFQUFFLG1CQUFtQixFQUE2QixNQUFNLGlCQUFpQixDQUFDO0FBRWpGLE1BQU0sY0FBYyxHQUFHLHVDQUF1QyxDQUFDO0FBQy9ELE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQztBQUM1QixNQUFNLEtBQUssR0FBRztJQUNaLFFBQVEsRUFBRSxvQkFBb0I7SUFDOUIsV0FBVyxFQUFFLHlCQUF5QjtJQUN0QyxJQUFJLEVBQUUsd0JBQXdCO0lBQzlCLFlBQVksRUFBRSx3QkFBd0I7SUFDdEMsY0FBYyxFQUFFLHFCQUFxQjtJQUNyQyxLQUFLLEVBQUUsNEJBQTRCO0lBQ25DLFFBQVEsRUFBRSwrQkFBK0I7SUFDekMsYUFBYSxFQUFFLDJCQUEyQjtJQUMxQyxZQUFZLEVBQUUsZUFB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
|
|
406
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5oYW5kZWxzcmVnaXN0ZXJjbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9oYW5kZWxzcmVnaXN0ZXIvY2xhc3Nlcy5oYW5kZWxzcmVnaXN0ZXJjbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG9CQUFvQixFQUE2QixNQUFNLG1DQUFtQyxDQUFDO0FBQ3BHLE9BQU8sRUFBRSxhQUFhLEVBQTRDLE1BQU0sNEJBQTRCLENBQUM7QUFDckcsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixnQkFBZ0IsRUFDaEIsdUJBQXVCLEVBQ3ZCLGdCQUFnQixFQUNoQixhQUFhLEVBQ2IsdUJBQXVCLEdBQ3hCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sS0FBSyxLQUFLLE1BQU0sWUFBWSxDQUFDO0FBQ3BDLE9BQU8sS0FBSyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBZWxDLE9BQU8sRUFBRSxjQUFjLEVBQTJDLE1BQU0sMEJBQTBCLENBQUM7QUFDbkcsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDdEUsT0FBTyxFQUFFLG1CQUFtQixFQUE2QixNQUFNLGlCQUFpQixDQUFDO0FBRWpGLE1BQU0sY0FBYyxHQUFHLHVDQUF1QyxDQUFDO0FBQy9ELE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQztBQUM1QixNQUFNLEtBQUssR0FBRztJQUNaLFFBQVEsRUFBRSxvQkFBb0I7SUFDOUIsV0FBVyxFQUFFLHlCQUF5QjtJQUN0QyxJQUFJLEVBQUUsd0JBQXdCO0lBQzlCLFlBQVksRUFBRSx3QkFBd0I7SUFDdEMsY0FBYyxFQUFFLHFCQUFxQjtJQUNyQyxLQUFLLEVBQUUsNEJBQTRCO0lBQ25DLFFBQVEsRUFBRSwrQkFBK0I7SUFDekMsYUFBYSxFQUFFLDJCQUEyQjtJQUMxQyxZQUFZLEVBQUUsZUFB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
|
|
@@ -6,6 +6,8 @@ import type { IRegisterMatch } from './interfaces.js';
|
|
|
6
6
|
* - `aborted`: the caller's signal aborted the call;
|
|
7
7
|
* - `timeout`: a request to the portal took longer than the client's limit;
|
|
8
8
|
* - `unreachable`: the portal could not be reached (name resolution, connection, TLS);
|
|
9
|
+
* - `dropped`: the portal closed the connection without answering, also when the request was sent
|
|
10
|
+
* once more. Its front end does so when it lost its back end's answer;
|
|
9
11
|
* - `refused`: the portal answered with an HTTP error, for example 403 when it blocks an address,
|
|
10
12
|
* 429 or 503 when it is overloaded (`status` carries the code), or with its notice that it refuses
|
|
11
13
|
* retrievals from this address (`portalMessage` carries its words);
|
|
@@ -16,7 +18,7 @@ import type { IRegisterMatch } from './interfaces.js';
|
|
|
16
18
|
* - `ambiguous`: several register sheets match the reference; `matches` lists them;
|
|
17
19
|
* - `invalid_structured_content`: the structured register content could not be read.
|
|
18
20
|
*/
|
|
19
|
-
export type THandelsregisterErrorCode = 'invalid_query' | 'rate_limited' | 'aborted' | 'timeout' | 'unreachable' | 'refused' | 'too_large' | 'unexpected_response' | 'not_found' | 'ambiguous' | 'invalid_structured_content';
|
|
21
|
+
export type THandelsregisterErrorCode = 'invalid_query' | 'rate_limited' | 'aborted' | 'timeout' | 'unreachable' | 'dropped' | 'refused' | 'too_large' | 'unexpected_response' | 'not_found' | 'ambiguous' | 'invalid_structured_content';
|
|
20
22
|
/** the step of a call that failed */
|
|
21
23
|
export type THandelsregisterStep = 'search_form' | 'search' | 'result_list' | 'structured_content';
|
|
22
24
|
export interface IHandelsregisterErrorDetails {
|
|
@@ -34,4 +34,4 @@ export class HandelsregisterError extends Error {
|
|
|
34
34
|
this.portalMessage = detailsArg.portalMessage;
|
|
35
35
|
}
|
|
36
36
|
}
|
|
37
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5oYW5kZWxzcmVnaXN0ZXJlcnJvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL2hhbmRlbHNyZWdpc3Rlci9jbGFzc2VzLmhhbmRlbHNyZWdpc3RlcmVycm9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWdEQTs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sb0JBQXFCLFNBQVEsS0FBSztJQUM3QixJQUFJLENBQTRCO0lBQ2hELG1DQUFtQztJQUNuQixNQUFNLENBQVU7SUFDaEMsNkRBQTZEO0lBQzdDLE9BQU8sQ0FBVTtJQUNqQywyQkFBMkI7SUFDWCxJQUFJLENBQXdCO0lBQzVDOzs7T0FHRztJQUNhLGVBQWUsQ0FBVTtJQUN6Qzs7O09BR0c7SUFDYSxPQUFPLENBQW9CO0lBQzNDLHVFQUF1RTtJQUN2RCxhQUFhLENBQVU7SUFFdkMsWUFBWSxPQUFrQyxFQUFFLFVBQWtCLEVBQUUsVUFBVSxHQUFpQyxFQUFFO1FBQy9HLEtBQUssQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDNUYsSUFBSSxDQUFDLElBQUksR0FBRyxzQkFBc0IsQ0FBQztRQUNuQyxJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQztRQUNwQixJQUFJLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7UUFDaEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQztRQUM1QixJQUFJLENBQUMsZUFBZSxHQUFHLFVBQVUsQ0FBQyxlQUFlLENBQUM7UUFDbEQsSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxhQUFhLEdBQUcsVUFBVSxDQUFDLGFBQWEsQ0FBQztJQUNoRCxDQUFDO0NBQ0YifQ==
|
|
@@ -33,11 +33,27 @@ export declare class PortalSession {
|
|
|
33
33
|
constructor(settings: IPortalSessionSettings, progress: ICallProgress);
|
|
34
34
|
/** resolves a path or a relative action against the portal or a page */
|
|
35
35
|
resolve(targetArg: string, baseArg?: string): string;
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
36
|
+
/**
|
|
37
|
+
* Loads a page. Like `post()`, it sends the request once more when the portal closes the
|
|
38
|
+
* connection without answering; `beforeRepeatArg` runs before that.
|
|
39
|
+
*/
|
|
40
|
+
get(urlArg: string, beforeRepeatArg?: () => Promise<void>): Promise<IPortalResponse>;
|
|
41
|
+
/**
|
|
42
|
+
* Submits a form as `application/x-www-form-urlencoded`. When the portal closes the connection
|
|
43
|
+
* without answering, the form is sent once more after `beforeRepeatArg`; a redirect it answers
|
|
44
|
+
* with is followed the same way, without `beforeRepeatArg`.
|
|
45
|
+
*/
|
|
46
|
+
post(urlArg: string, fieldsArg: Array<[string, string]>, beforeRepeatArg?: () => Promise<void>): Promise<IPortalResponse>;
|
|
39
47
|
private fail;
|
|
40
48
|
private request;
|
|
49
|
+
/**
|
|
50
|
+
* Sends a request, and once more when the portal closed the connection without answering it. The
|
|
51
|
+
* portal's front end, Apache httpd with mod_proxy_http before the application servers, closes a
|
|
52
|
+
* kept-alive connection without any answer when it could not read its back end's answer, so that
|
|
53
|
+
* the client sends the request again, as browsers do. Every request of this client reads; sending
|
|
54
|
+
* one again changes nothing at the portal. A second close without an answer ends in `dropped`.
|
|
55
|
+
*/
|
|
56
|
+
private sendRepeating;
|
|
41
57
|
private send;
|
|
42
58
|
/** a signal for one request: the caller's signal and the request's own time limit */
|
|
43
59
|
private requestSignal;
|
|
@@ -1,6 +1,24 @@
|
|
|
1
1
|
import { HandelsregisterError } from './classes.handelsregistererror.js';
|
|
2
2
|
const redirectStatuses = new Set([301, 302, 303]);
|
|
3
3
|
const maxRedirects = 3;
|
|
4
|
+
/**
|
|
5
|
+
* error codes of a connection the other side closed or reset before it answered: undici's
|
|
6
|
+
* `UND_ERR_SOCKET` (the `fetch` of Node.js: "other side closed") and the system's `ECONNRESET` and
|
|
7
|
+
* `EPIPE`
|
|
8
|
+
*/
|
|
9
|
+
const closedConnectionCodes = new Set(['UND_ERR_SOCKET', 'ECONNRESET', 'EPIPE']);
|
|
10
|
+
/** whether a failed `fetch` failed because the connection was closed before any answer arrived */
|
|
11
|
+
const closedWithoutAnswer = (errorArg) => {
|
|
12
|
+
let current = errorArg;
|
|
13
|
+
for (let depth = 0; depth < 4 && current instanceof Error; depth++) {
|
|
14
|
+
const code = current.code;
|
|
15
|
+
if (typeof code === 'string' && closedConnectionCodes.has(code)) {
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
current = current.cause;
|
|
19
|
+
}
|
|
20
|
+
return false;
|
|
21
|
+
};
|
|
4
22
|
/**
|
|
5
23
|
* One visit to the register portal: a cookie jar, the fixed language and a limit for every
|
|
6
24
|
* request. It lives for one call of the client and is dropped afterwards, so nothing is shared
|
|
@@ -22,12 +40,20 @@ export class PortalSession {
|
|
|
22
40
|
resolve(targetArg, baseArg = this.origin) {
|
|
23
41
|
return new URL(targetArg, baseArg).toString();
|
|
24
42
|
}
|
|
25
|
-
|
|
26
|
-
|
|
43
|
+
/**
|
|
44
|
+
* Loads a page. Like `post()`, it sends the request once more when the portal closes the
|
|
45
|
+
* connection without answering; `beforeRepeatArg` runs before that.
|
|
46
|
+
*/
|
|
47
|
+
async get(urlArg, beforeRepeatArg) {
|
|
48
|
+
return this.request('GET', urlArg, undefined, beforeRepeatArg);
|
|
27
49
|
}
|
|
28
|
-
/**
|
|
29
|
-
|
|
30
|
-
|
|
50
|
+
/**
|
|
51
|
+
* Submits a form as `application/x-www-form-urlencoded`. When the portal closes the connection
|
|
52
|
+
* without answering, the form is sent once more after `beforeRepeatArg`; a redirect it answers
|
|
53
|
+
* with is followed the same way, without `beforeRepeatArg`.
|
|
54
|
+
*/
|
|
55
|
+
async post(urlArg, fieldsArg, beforeRepeatArg) {
|
|
56
|
+
return this.request('POST', urlArg, new URLSearchParams(fieldsArg).toString(), beforeRepeatArg);
|
|
31
57
|
}
|
|
32
58
|
fail(codeArg, messageArg, extraArg = {}) {
|
|
33
59
|
return new HandelsregisterError(codeArg, messageArg, {
|
|
@@ -36,7 +62,7 @@ export class PortalSession {
|
|
|
36
62
|
countedRequests: this.progress.countedRequests,
|
|
37
63
|
});
|
|
38
64
|
}
|
|
39
|
-
async request(methodArg, urlArg, bodyArg) {
|
|
65
|
+
async request(methodArg, urlArg, bodyArg, beforeRepeatArg) {
|
|
40
66
|
let method = methodArg;
|
|
41
67
|
let url = urlArg;
|
|
42
68
|
let body = bodyArg;
|
|
@@ -44,7 +70,7 @@ export class PortalSession {
|
|
|
44
70
|
if (new URL(url).origin !== this.origin) {
|
|
45
71
|
throw this.fail('unexpected_response', 'The portal pointed to another site.');
|
|
46
72
|
}
|
|
47
|
-
const response = await this.
|
|
73
|
+
const response = await this.sendRepeating(method, url, body, redirects === 0 ? beforeRepeatArg : undefined);
|
|
48
74
|
if (redirectStatuses.has(response.status)) {
|
|
49
75
|
const location = response.headers.get('location');
|
|
50
76
|
await response.body?.cancel();
|
|
@@ -69,6 +95,35 @@ export class PortalSession {
|
|
|
69
95
|
};
|
|
70
96
|
}
|
|
71
97
|
}
|
|
98
|
+
/**
|
|
99
|
+
* Sends a request, and once more when the portal closed the connection without answering it. The
|
|
100
|
+
* portal's front end, Apache httpd with mod_proxy_http before the application servers, closes a
|
|
101
|
+
* kept-alive connection without any answer when it could not read its back end's answer, so that
|
|
102
|
+
* the client sends the request again, as browsers do. Every request of this client reads; sending
|
|
103
|
+
* one again changes nothing at the portal. A second close without an answer ends in `dropped`.
|
|
104
|
+
*/
|
|
105
|
+
async sendRepeating(methodArg, urlArg, bodyArg, beforeRepeatArg) {
|
|
106
|
+
try {
|
|
107
|
+
return await this.send(methodArg, urlArg, bodyArg);
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
if (!(error instanceof HandelsregisterError) || error.code !== 'dropped') {
|
|
111
|
+
throw error;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
await beforeRepeatArg?.();
|
|
115
|
+
try {
|
|
116
|
+
return await this.send(methodArg, urlArg, bodyArg);
|
|
117
|
+
}
|
|
118
|
+
catch (error) {
|
|
119
|
+
if (error instanceof HandelsregisterError && error.code === 'dropped') {
|
|
120
|
+
throw this.fail('dropped', 'The register portal closed the connection without answering, also when the request was sent once more.', {
|
|
121
|
+
cause: error.cause,
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
throw error;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
72
127
|
async send(methodArg, urlArg, bodyArg) {
|
|
73
128
|
if (this.settings.signal?.aborted) {
|
|
74
129
|
throw this.fail('aborted', 'The call was aborted.', { cause: this.settings.signal.reason });
|
|
@@ -95,7 +150,10 @@ export class PortalSession {
|
|
|
95
150
|
});
|
|
96
151
|
}
|
|
97
152
|
catch (error) {
|
|
98
|
-
|
|
153
|
+
const failure = this.failureOf(error);
|
|
154
|
+
throw failure.code === 'unreachable' && closedWithoutAnswer(error)
|
|
155
|
+
? this.fail('dropped', 'The register portal closed the connection without answering.', { cause: error })
|
|
156
|
+
: failure;
|
|
99
157
|
}
|
|
100
158
|
for (const cookie of response.headers.getSetCookie()) {
|
|
101
159
|
const pair = cookie.split(';', 1)[0];
|
|
@@ -157,4 +215,4 @@ export class PortalSession {
|
|
|
157
215
|
return body;
|
|
158
216
|
}
|
|
159
217
|
}
|
|
160
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
218
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5wb3J0YWxzZXNzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvaGFuZGVsc3JlZ2lzdGVyL2NsYXNzZXMucG9ydGFsc2Vzc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsb0JBQW9CLEVBQTZCLE1BQU0sbUNBQW1DLENBQUM7QUF3QnBHLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDbEQsTUFBTSxZQUFZLEdBQUcsQ0FBQyxDQUFDO0FBRXZCOzs7O0dBSUc7QUFDSCxNQUFNLHFCQUFxQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFFakYsa0dBQWtHO0FBQ2xHLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxRQUFpQixFQUFXLEVBQUU7SUFDekQsSUFBSSxPQUFPLEdBQVksUUFBUSxDQUFDO0lBQ2hDLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxDQUFDLElBQUksT0FBTyxZQUFZLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO1FBQ25FLE1BQU0sSUFBSSxHQUFJLE9BQXNDLENBQUMsSUFBSSxDQUFDO1FBQzFELElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxJQUFJLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ2hFLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUNELE9BQU8sR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO0lBQzFCLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMsQ0FBQztBQUVGOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8sYUFBYTtJQU1KLFFBQVE7SUFBa0MsUUFBUTtJQUw5RCxPQUFPLEdBQUcsSUFBSSxH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
|