@fin.cx/opendata 3.6.0 → 4.1.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 (93) hide show
  1. package/.smartconfig.json +23 -20
  2. package/dist_ts/00_commitinfo_data.js +3 -3
  3. package/dist_ts/handelsregister/classes.handelsregisterclient.d.ts +64 -0
  4. package/dist_ts/handelsregister/classes.handelsregisterclient.js +397 -0
  5. package/dist_ts/handelsregister/classes.handelsregistererror.d.ts +56 -0
  6. package/dist_ts/handelsregister/classes.handelsregistererror.js +37 -0
  7. package/dist_ts/handelsregister/classes.portalsession.d.ts +46 -0
  8. package/dist_ts/handelsregister/classes.portalsession.js +160 -0
  9. package/dist_ts/handelsregister/classes.slidingwindowgate.d.ts +32 -0
  10. package/dist_ts/handelsregister/classes.slidingwindowgate.js +55 -0
  11. package/dist_ts/handelsregister/constants.d.ts +13 -0
  12. package/dist_ts/handelsregister/constants.js +19 -0
  13. package/dist_ts/handelsregister/data.codelists.d.ts +29 -0
  14. package/dist_ts/handelsregister/data.codelists.js +616 -0
  15. package/dist_ts/handelsregister/forms.d.ts +27 -0
  16. package/dist_ts/handelsregister/forms.js +77 -0
  17. package/dist_ts/handelsregister/html.d.ts +26 -0
  18. package/dist_ts/handelsregister/html.js +82 -0
  19. package/dist_ts/handelsregister/index.d.ts +9 -0
  20. package/dist_ts/handelsregister/index.js +10 -0
  21. package/dist_ts/handelsregister/interfaces.d.ts +240 -0
  22. package/dist_ts/handelsregister/interfaces.js +2 -0
  23. package/dist_ts/handelsregister/parse.searchresults.d.ts +35 -0
  24. package/dist_ts/handelsregister/parse.searchresults.js +175 -0
  25. package/dist_ts/handelsregister/parse.structuredcontent.d.ts +6 -0
  26. package/dist_ts/handelsregister/parse.structuredcontent.js +306 -0
  27. package/dist_ts/handelsregister/plugins.d.ts +4 -0
  28. package/dist_ts/handelsregister/plugins.js +8 -0
  29. package/dist_ts/handelsregister/references.d.ts +38 -0
  30. package/dist_ts/handelsregister/references.js +146 -0
  31. package/dist_ts/holidays/calendar.d.ts +32 -0
  32. package/dist_ts/holidays/calendar.js +200 -0
  33. package/dist_ts/holidays/classes.holidaycalendarerror.d.ts +14 -0
  34. package/dist_ts/holidays/classes.holidaycalendarerror.js +10 -0
  35. package/dist_ts/holidays/data.holidays.d.ts +46 -0
  36. package/dist_ts/holidays/data.holidays.js +124 -0
  37. package/dist_ts/holidays/index.d.ts +4 -0
  38. package/dist_ts/holidays/index.js +7 -0
  39. package/dist_ts/holidays/interfaces.d.ts +42 -0
  40. package/dist_ts/holidays/interfaces.js +2 -0
  41. package/dist_ts/index.d.ts +0 -2
  42. package/dist_ts/index.js +1 -3
  43. package/dist_ts/plugins.d.ts +2 -20
  44. package/dist_ts/plugins.js +3 -22
  45. package/package.json +40 -37
  46. package/readme.md +250 -119
  47. package/ts/00_commitinfo_data.ts +2 -2
  48. package/ts/handelsregister/classes.handelsregisterclient.ts +474 -0
  49. package/ts/handelsregister/classes.handelsregistererror.ts +82 -0
  50. package/ts/handelsregister/classes.portalsession.ts +191 -0
  51. package/ts/handelsregister/classes.slidingwindowgate.ts +74 -0
  52. package/ts/handelsregister/constants.ts +30 -0
  53. package/ts/handelsregister/data.codelists.ts +640 -0
  54. package/ts/handelsregister/forms.ts +99 -0
  55. package/ts/handelsregister/html.ts +113 -0
  56. package/ts/handelsregister/index.ts +27 -0
  57. package/ts/handelsregister/interfaces.ts +272 -0
  58. package/ts/handelsregister/parse.searchresults.ts +241 -0
  59. package/ts/handelsregister/parse.structuredcontent.ts +338 -0
  60. package/ts/handelsregister/plugins.ts +15 -0
  61. package/ts/handelsregister/references.ts +189 -0
  62. package/ts/holidays/calendar.ts +261 -0
  63. package/ts/holidays/classes.holidaycalendarerror.ts +20 -0
  64. package/ts/holidays/data.holidays.ts +177 -0
  65. package/ts/holidays/index.ts +18 -0
  66. package/ts/holidays/interfaces.ts +87 -0
  67. package/ts/index.ts +0 -2
  68. package/ts/plugins.ts +0 -39
  69. package/dist_ts/classes.businessrecord.d.ts +0 -38
  70. package/dist_ts/classes.businessrecord.js +0 -90
  71. package/dist_ts/classes.handelsregister.d.ts +0 -134
  72. package/dist_ts/classes.handelsregister.js +0 -307
  73. package/dist_ts/classes.jsonldata.d.ts +0 -43
  74. package/dist_ts/classes.jsonldata.js +0 -68
  75. package/dist_ts/classes.main.opendata.d.ts +0 -25
  76. package/dist_ts/classes.main.opendata.js +0 -91
  77. package/dist_ts/laws/classes.lawrecord.d.ts +0 -24
  78. package/dist_ts/laws/classes.lawrecord.js +0 -181
  79. package/dist_ts/laws/classes.lawservice.d.ts +0 -52
  80. package/dist_ts/laws/classes.lawservice.js +0 -740
  81. package/dist_ts/laws/index.d.ts +0 -3
  82. package/dist_ts/laws/index.js +0 -4
  83. package/dist_ts/laws/interfaces.law.d.ts +0 -35
  84. package/dist_ts/laws/interfaces.law.js +0 -2
  85. package/readme.hints.md +0 -89
  86. package/ts/classes.businessrecord.ts +0 -67
  87. package/ts/classes.handelsregister.ts +0 -385
  88. package/ts/classes.jsonldata.ts +0 -114
  89. package/ts/classes.main.opendata.ts +0 -120
  90. package/ts/laws/classes.lawrecord.ts +0 -81
  91. package/ts/laws/classes.lawservice.ts +0 -1010
  92. package/ts/laws/index.ts +0 -3
  93. package/ts/laws/interfaces.law.ts +0 -48
@@ -0,0 +1,27 @@
1
+ import * as html from './html.js';
2
+ /** an option of a select element */
3
+ export interface IFormOption {
4
+ value: string;
5
+ label: string;
6
+ }
7
+ /** a form as a browser would submit it */
8
+ export interface IPortalForm {
9
+ id: string;
10
+ /** the action as the page states it, relative to the page */
11
+ action: string;
12
+ /** the successful controls with their current values, in document order */
13
+ fields: Array<[string, string]>;
14
+ /** the options of each select element, by name */
15
+ options: Map<string, IFormOption[]>;
16
+ /** the names of every control, including unchecked boxes and buttons */
17
+ controlNames: Set<string>;
18
+ }
19
+ /**
20
+ * Reads a form the way a browser collects it for submission: text and hidden inputs with their
21
+ * values, checked boxes and radios, textareas, and the selected (or first) option of each select.
22
+ */
23
+ export declare const readForm: (documentArg: html.THtmlDocument, formIdArg: string) => IPortalForm | undefined;
24
+ /** sets a field to one value, replacing every earlier value of that name */
25
+ export declare const setField: (fieldsArg: Array<[string, string]>, nameArg: string, valueArg: string) => void;
26
+ /** removes every value of a field */
27
+ export declare const removeField: (fieldsArg: Array<[string, string]>, nameArg: string) => void;
@@ -0,0 +1,77 @@
1
+ import * as html from './html.js';
2
+ const skippedInputTypes = new Set(['submit', 'button', 'image', 'reset', 'file']);
3
+ /**
4
+ * Reads a form the way a browser collects it for submission: text and hidden inputs with their
5
+ * values, checked boxes and radios, textareas, and the selected (or first) option of each select.
6
+ */
7
+ export const readForm = (documentArg, formIdArg) => {
8
+ const form = html.findById(documentArg, formIdArg);
9
+ if (!form || form.tagName !== 'form') {
10
+ return undefined;
11
+ }
12
+ const action = html.getAttribute(form, 'action');
13
+ if (!action) {
14
+ return undefined;
15
+ }
16
+ const fields = [];
17
+ const options = new Map();
18
+ const controlNames = new Set();
19
+ for (const element of html.descendants(form)) {
20
+ const name = html.getAttribute(element, 'name');
21
+ if (!name) {
22
+ continue;
23
+ }
24
+ if (element.tagName === 'input') {
25
+ controlNames.add(name);
26
+ const type = (html.getAttribute(element, 'type') ?? 'text').toLowerCase();
27
+ if (skippedInputTypes.has(type)) {
28
+ continue;
29
+ }
30
+ if (type === 'checkbox' || type === 'radio') {
31
+ if (html.getAttribute(element, 'checked') !== undefined) {
32
+ fields.push([name, html.getAttribute(element, 'value') ?? 'on']);
33
+ }
34
+ continue;
35
+ }
36
+ fields.push([name, html.getAttribute(element, 'value') ?? '']);
37
+ }
38
+ else if (element.tagName === 'textarea') {
39
+ controlNames.add(name);
40
+ fields.push([name, element.childNodes.map((childArg) => ('value' in childArg ? childArg.value : '')).join('')]);
41
+ }
42
+ else if (element.tagName === 'select') {
43
+ controlNames.add(name);
44
+ const selectOptions = html
45
+ .findAll(element, (optionArg) => optionArg.tagName === 'option')
46
+ .map((optionArg) => ({
47
+ value: html.getAttribute(optionArg, 'value') ?? html.textOf(optionArg),
48
+ label: html.textOf(optionArg),
49
+ selected: html.getAttribute(optionArg, 'selected') !== undefined,
50
+ }));
51
+ options.set(name, selectOptions.map((optionArg) => ({ value: optionArg.value, label: optionArg.label })));
52
+ const chosen = selectOptions.find((optionArg) => optionArg.selected) ?? selectOptions[0];
53
+ if (chosen) {
54
+ fields.push([name, chosen.value]);
55
+ }
56
+ }
57
+ else if (element.tagName === 'button') {
58
+ controlNames.add(name);
59
+ }
60
+ }
61
+ return { id: formIdArg, action, fields, options, controlNames };
62
+ };
63
+ /** sets a field to one value, replacing every earlier value of that name */
64
+ export const setField = (fieldsArg, nameArg, valueArg) => {
65
+ const index = fieldsArg.findIndex(([fieldName]) => fieldName === nameArg);
66
+ const remaining = fieldsArg.filter(([fieldName]) => fieldName !== nameArg);
67
+ fieldsArg.length = 0;
68
+ fieldsArg.push(...remaining);
69
+ fieldsArg.splice(index >= 0 ? index : fieldsArg.length, 0, [nameArg, valueArg]);
70
+ };
71
+ /** removes every value of a field */
72
+ export const removeField = (fieldsArg, nameArg) => {
73
+ const remaining = fieldsArg.filter(([fieldName]) => fieldName !== nameArg);
74
+ fieldsArg.length = 0;
75
+ fieldsArg.push(...remaining);
76
+ };
77
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9oYW5kZWxzcmVnaXN0ZXIvZm9ybXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLElBQUksTUFBTSxXQUFXLENBQUM7QUFxQmxDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUVsRjs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxXQUErQixFQUFFLFNBQWlCLEVBQTJCLEVBQUU7SUFDdEcsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDbkQsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLE1BQU0sRUFBRSxDQUFDO1FBQ3JDLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFDRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNqRCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDWixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBQ0QsTUFBTSxNQUFNLEdBQTRCLEVBQUUsQ0FBQztJQUMzQyxNQUFNLE9BQU8sR0FBRyxJQUFJLEdBQUcsRUFBeUIsQ0FBQztJQUNqRCxNQUFNLFlBQVksR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO0lBQ3ZDLEtBQUssTUFBTSxPQUFPLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQzdDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNW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
@@ -0,0 +1,26 @@
1
+ import * as plugins from './plugins.js';
2
+ export type THtmlDocument = plugins.parse5.DefaultTreeAdapterTypes.Document;
3
+ export type THtmlElement = plugins.parse5.DefaultTreeAdapterTypes.Element;
4
+ type THtmlParentNode = plugins.parse5.DefaultTreeAdapterTypes.ParentNode;
5
+ type THtmlChildNode = plugins.parse5.DefaultTreeAdapterTypes.ChildNode;
6
+ export declare const parseHtml: (htmlArg: string) => THtmlDocument;
7
+ /** the element children of a node */
8
+ export declare const elementChildren: (nodeArg: THtmlParentNode) => THtmlElement[];
9
+ /** every element below a node, in document order */
10
+ export declare const descendants: (nodeArg: THtmlParentNode) => THtmlElement[];
11
+ export declare const getAttribute: (elementArg: THtmlElement, nameArg: string) => string | undefined;
12
+ export declare const hasClass: (elementArg: THtmlElement, classArg: string) => boolean;
13
+ export declare const findById: (nodeArg: THtmlParentNode, idArg: string) => THtmlElement | undefined;
14
+ export declare const findAll: (nodeArg: THtmlParentNode, predicateArg: (elementArg: THtmlElement) => boolean) => THtmlElement[];
15
+ export declare const findFirst: (nodeArg: THtmlParentNode, predicateArg: (elementArg: THtmlElement) => boolean) => THtmlElement | undefined;
16
+ /** the text of a node with white space collapsed */
17
+ export declare const textOf: (nodeArg: THtmlChildNode | THtmlParentNode) => string;
18
+ /** the text of the text nodes directly inside an element */
19
+ export declare const ownTextOf: (elementArg: THtmlElement) => string;
20
+ /** the next element sibling */
21
+ export declare const nextElementSibling: (elementArg: THtmlElement) => THtmlElement | undefined;
22
+ /** the previous element sibling */
23
+ export declare const previousElementSibling: (elementArg: THtmlElement) => THtmlElement | undefined;
24
+ /** the language the document declares on its root element */
25
+ export declare const documentLanguage: (documentArg: THtmlDocument) => string | undefined;
26
+ export {};
@@ -0,0 +1,82 @@
1
+ import * as plugins from './plugins.js';
2
+ export const parseHtml = (htmlArg) => plugins.parse5.parse(htmlArg);
3
+ const isElement = (nodeArg) => 'tagName' in nodeArg;
4
+ /** the element children of a node */
5
+ export const elementChildren = (nodeArg) => nodeArg.childNodes.filter(isElement);
6
+ /** every element below a node, in document order */
7
+ export const descendants = (nodeArg) => {
8
+ const result = [];
9
+ const stack = elementChildren(nodeArg).reverse();
10
+ while (stack.length > 0) {
11
+ const element = stack.pop();
12
+ result.push(element);
13
+ const children = element.tagName === 'template' ? [] : elementChildren(element);
14
+ for (let index = children.length - 1; index >= 0; index--) {
15
+ stack.push(children[index]);
16
+ }
17
+ }
18
+ return result;
19
+ };
20
+ export const getAttribute = (elementArg, nameArg) => elementArg.attrs.find((attrArg) => attrArg.name === nameArg)?.value;
21
+ export const hasClass = (elementArg, classArg) => (getAttribute(elementArg, 'class') ?? '').split(/\s+/).includes(classArg);
22
+ export const findById = (nodeArg, idArg) => descendants(nodeArg).find((elementArg) => getAttribute(elementArg, 'id') === idArg);
23
+ export const findAll = (nodeArg, predicateArg) => descendants(nodeArg).filter(predicateArg);
24
+ export const findFirst = (nodeArg, predicateArg) => descendants(nodeArg).find(predicateArg);
25
+ /**
26
+ * the raw text of a node and everything below it, scripts and styles left out: the text nodes in
27
+ * document order, separated by spaces. Walks the tree with its own stack, so no nesting depth a page
28
+ * can have exhausts the call stack.
29
+ */
30
+ const rawText = (nodeArg) => {
31
+ const pieces = [];
32
+ const stack = [nodeArg];
33
+ for (let node = stack.pop(); node !== undefined; node = stack.pop()) {
34
+ if ('value' in node && node.nodeName === '#text') {
35
+ pieces.push(node.value);
36
+ continue;
37
+ }
38
+ if (!('childNodes' in node)) {
39
+ continue;
40
+ }
41
+ if ('tagName' in node && (node.tagName === 'script' || node.tagName === 'style')) {
42
+ continue;
43
+ }
44
+ for (let index = node.childNodes.length - 1; index >= 0; index--) {
45
+ stack.push(node.childNodes[index]);
46
+ }
47
+ }
48
+ return pieces.join(' ');
49
+ };
50
+ /** the text of a node with white space collapsed */
51
+ export const textOf = (nodeArg) => rawText(nodeArg).replace(/\s+/g, ' ').trim();
52
+ /** the text of the text nodes directly inside an element */
53
+ export const ownTextOf = (elementArg) => elementArg.childNodes
54
+ .map((childArg) => ('value' in childArg && childArg.nodeName === '#text' ? childArg.value : ''))
55
+ .join(' ')
56
+ .replace(/\s+/g, ' ')
57
+ .trim();
58
+ /** the next element sibling */
59
+ export const nextElementSibling = (elementArg) => {
60
+ const parent = elementArg.parentNode;
61
+ if (!parent) {
62
+ return undefined;
63
+ }
64
+ const siblings = elementChildren(parent);
65
+ return siblings[siblings.indexOf(elementArg) + 1];
66
+ };
67
+ /** the previous element sibling */
68
+ export const previousElementSibling = (elementArg) => {
69
+ const parent = elementArg.parentNode;
70
+ if (!parent) {
71
+ return undefined;
72
+ }
73
+ const siblings = elementChildren(parent);
74
+ const index = siblings.indexOf(elementArg);
75
+ return index > 0 ? siblings[index - 1] : undefined;
76
+ };
77
+ /** the language the document declares on its root element */
78
+ export const documentLanguage = (documentArg) => {
79
+ const root = elementChildren(documentArg).find((elementArg) => elementArg.tagName === 'html');
80
+ return root ? getAttribute(root, 'lang') : undefined;
81
+ };
82
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHRtbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL2hhbmRlbHNyZWdpc3Rlci9odG1sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBT3hDLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxDQUFDLE9BQWUsRUFBaUIsRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBRTNGLE1BQU0sU0FBUyxHQUFHLENBQUMsT0FBdUIsRUFBMkIsRUFBRSxDQUFDLFNBQVMsSUFBSSxPQUFPLENBQUM7QUFFN0YscUNBQXFDO0FBQ3JDLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUFDLE9BQXdCLEVBQWtCLEVBQUUsQ0FDMUUsT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7QUFFdkMsb0RBQW9EO0FBQ3BELE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxDQUFDLE9BQXdCLEVBQWtCLEVBQUU7SUFDdEUsTUFBTSxNQUFNLEdBQW1CLEVBQUUsQ0FBQztJQUNsQyxNQUFNLEtBQUssR0FBbUIsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2pFLE9BQU8sS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN4QixNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFrQixDQUFDO1FBQzVDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckIsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLE9BQU8sS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2hGLEtBQUssSUFBSSxLQUFLLEdBQUcsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsS0FBSyxJ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
@@ -0,0 +1,9 @@
1
+ export * from './interfaces.js';
2
+ export { HandelsregisterError, type IHandelsregisterErrorDetails, type THandelsregisterErrorCode, type THandelsregisterStep, } from './classes.handelsregistererror.js';
3
+ export { HandelsregisterClient } from './classes.handelsregisterclient.js';
4
+ export { SlidingWindowGate, type ISlidingWindowGateOptions } from './classes.slidingwindowgate.js';
5
+ export { portalMaximumHits, portalRequestsPerHour, registerDocuments, registerTypes, structuredContentNotice, } from './constants.js';
6
+ export { registerCourts } from './data.codelists.js';
7
+ export { findRegisterCourt, formatRegisterReference, parseRegisterNumber, parseRegisterReferenceText, type IParsedRegisterReferenceText, type IRegisterNumberParts, } from './references.js';
8
+ export { parseSearchResults, type IParsedSearchResults } from './parse.searchresults.js';
9
+ export { parseStructuredContent } from './parse.structuredcontent.js';
@@ -0,0 +1,10 @@
1
+ export * from './interfaces.js';
2
+ export { HandelsregisterError, } from './classes.handelsregistererror.js';
3
+ export { HandelsregisterClient } from './classes.handelsregisterclient.js';
4
+ export { SlidingWindowGate } from './classes.slidingwindowgate.js';
5
+ export { portalMaximumHits, portalRequestsPerHour, registerDocuments, registerTypes, structuredContentNotice, } from './constants.js';
6
+ export { registerCourts } from './data.codelists.js';
7
+ export { findRegisterCourt, formatRegisterReference, parseRegisterNumber, parseRegisterReferenceText, } from './references.js';
8
+ export { parseSearchResults } from './parse.searchresults.js';
9
+ export { parseStructuredContent } from './parse.structuredcontent.js';
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9oYW5kZWxzcmVnaXN0ZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxPQUFPLEVBQ0wsb0JBQW9CLEdBSXJCLE1BQU0sbUNBQW1DLENBQUM7QUFDM0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDM0UsT0FBTyxFQUFFLGlCQUFpQixFQUFrQyxNQUFNLGdDQUFnQyxDQUFDO0FBQ25HLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIscUJBQXFCLEVBQ3JCLGlCQUFpQixFQUNqQixhQUFhLEVBQ2IsdUJBQXVCLEdBQ3hCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsdUJBQXVCLEVBQ3ZCLG1CQUFtQixFQUNuQiwwQkFBMEIsR0FHM0IsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUUsa0JBQWtCLEVBQTZCLE1BQU0sMEJBQTBCLENBQUM7QUFDekYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sOEJBQThCLENBQUMifQ==
@@ -0,0 +1,240 @@
1
+ /**
2
+ * The register types the register portal searches: Handelsregister A and B, Genossenschafts-,
3
+ * Partnerschafts-, Vereins- and Gesellschaftsregister.
4
+ */
5
+ export type TRegisterType = 'HRA' | 'HRB' | 'GnR' | 'PR' | 'VR' | 'GsR';
6
+ /** a register court of the portal */
7
+ export interface IRegisterCourt {
8
+ /** XJustiz court code, for example `H1101` */
9
+ code: string;
10
+ /** the court's name as the portal writes it after "Amtsgericht", for example `Bremen` */
11
+ name: string;
12
+ }
13
+ /** one register sheet, as the portal identifies it */
14
+ export interface IRegisterReference {
15
+ court: IRegisterCourt;
16
+ type: TRegisterType;
17
+ /**
18
+ * the register number as the portal shows it, with the location suffix where the court uses
19
+ * one: `35230 HB`, `999928 NM`, `12345`
20
+ */
21
+ number: string;
22
+ }
23
+ /** what a caller passes to identify one register sheet */
24
+ export interface IRegisterReferenceInput {
25
+ /** XJustiz court code, see `registerCourts` and `findRegisterCourt()` */
26
+ courtCode: string;
27
+ type: TRegisterType;
28
+ /** `35230`, `35230 HB` or `35230HB`; a location suffix is compared when it is given */
29
+ number: string;
30
+ }
31
+ /** the documents the portal offers for an entry */
32
+ export type TRegisterDocument = 'AD' | 'CD' | 'HD' | 'DK' | 'UT' | 'VÖ' | 'SI';
33
+ /** an earlier name of an entry, from the portal's result list */
34
+ export interface IRegisterFormerName {
35
+ name: string;
36
+ /** the seat at the time, when the portal names one */
37
+ seat?: string;
38
+ }
39
+ /**
40
+ * The state of a register sheet in the portal's result list:
41
+ * - `current`: the portal's "aktuell";
42
+ * - `closed`: the portal's "Geschlossenes Registerblatt". The entry was deleted, or its sheet was
43
+ * closed because the entity moved to another court, changed its legal form or merged. The list
44
+ * does not say which;
45
+ * - `other`: a word this version does not know; `sheetStatusText` carries it.
46
+ */
47
+ export type TRegisterSheetStatus = 'current' | 'closed' | 'other';
48
+ /** one row of the portal's result list */
49
+ export interface IRegisterMatch {
50
+ reference: IRegisterReference;
51
+ /** the court that kept the sheet before ("früher Amtsgericht …"), as the portal names it */
52
+ formerCourt?: string;
53
+ /** the federal state of the register court, as the portal names it */
54
+ federalState: string;
55
+ /** the current name (Firma) */
56
+ name: string;
57
+ /** the seat, as the portal shows it */
58
+ seat: string;
59
+ sheetStatus: TRegisterSheetStatus;
60
+ /** the portal's own word for the sheet status, German */
61
+ sheetStatusText: string;
62
+ /** earlier names, as the portal numbers them */
63
+ formerNames: IRegisterFormerName[];
64
+ /** the documents the portal offers for this entry; `SI` is the structured register content */
65
+ documents: TRegisterDocument[];
66
+ }
67
+ /**
68
+ * The portal's note on the structured register content. Every result carries it, because the
69
+ * structured content is not binding: the current printout (AD) is.
70
+ */
71
+ export interface IStructuredContentNotice {
72
+ /** the portal's words, German, verbatim */
73
+ de: string;
74
+ /** the same in English */
75
+ en: string;
76
+ }
77
+ export interface IRegisterSearchResult {
78
+ /** every row the portal returned, in its order; never narrowed down to one */
79
+ matches: IRegisterMatch[];
80
+ /** the portal stopped at its maximum number of hits (100) and asked for a narrower search */
81
+ truncated: boolean;
82
+ /** the portal's notice above the list, German, when it shows one */
83
+ portalNotice?: string;
84
+ /** epoch ms: when the result list arrived */
85
+ retrievedAt: number;
86
+ /** requests of this call that count against the portal's limit of 60 per hour (always 1) */
87
+ countedRequests: number;
88
+ notice: IStructuredContentNotice;
89
+ }
90
+ /**
91
+ * The state of the legal entity, from the structured register content (XJustiz list
92
+ * reg.status-rechtstraeger):
93
+ * - `active` ("aktiv");
94
+ * - `deleted` ("gelöscht");
95
+ * - `in_liquidation`: dissolved and being wound up ("in Abwicklung");
96
+ * - `insolvent` ("insolvent");
97
+ * - `merged`: merged into an entity that is not registered;
98
+ * - `unknown`: a code this version does not know.
99
+ */
100
+ export type TRegisterEntityState = 'active' | 'deleted' | 'in_liquidation' | 'insolvent' | 'merged' | 'unknown';
101
+ export interface IRegisterEntityStatus {
102
+ state: TRegisterEntityState;
103
+ /** code of the XJustiz list reg.status-rechtstraeger */
104
+ code: string;
105
+ /** its German designation, when the code is known */
106
+ label?: string;
107
+ }
108
+ export interface IRegisterLegalForm {
109
+ /** code of the XUnternehmen list of legal forms, for example `221110` */
110
+ code: string;
111
+ /** short designation, for example `GmbH`, when the code is known */
112
+ short?: string;
113
+ /** full designation, for example `Gesellschaft mit beschränkter Haftung`, when the code is known */
114
+ long?: string;
115
+ }
116
+ export interface IRegisterSeat {
117
+ city: string;
118
+ /** ISO 3166-1 alpha-2, when the state key is known */
119
+ country?: string;
120
+ /** the BfJ state key as the content gives it; `000` is Germany */
121
+ countryKey?: string;
122
+ }
123
+ /** a business address; private addresses are never read */
124
+ export interface IRegisterAddress {
125
+ street?: string;
126
+ houseNumber?: string;
127
+ postalCode?: string;
128
+ city?: string;
129
+ /** ISO 3166-1 alpha-2, when the state key is known */
130
+ country?: string;
131
+ /** the BfJ state key as the content gives it; `000` is Germany */
132
+ countryKey?: string;
133
+ }
134
+ /**
135
+ * Someone the structured content names as entitled to represent the entity. Only the name and the
136
+ * function are read: birth dates, places of residence and addresses of people never leave the parser.
137
+ */
138
+ export interface IRegisterRepresentative {
139
+ /** for a person: title, given names, name prefix, family name and suffix; for an organisation its name */
140
+ name: string;
141
+ kind: 'person' | 'organisation';
142
+ /** the function, German, for example `Geschäftsführer(in)`; absent for a code this version does not know */
143
+ function?: string;
144
+ /** code of the XJustiz list gds.rollenbezeichnung */
145
+ functionCode: string;
146
+ }
147
+ /** the register sheet as the structured content states it */
148
+ export interface IRegisterContentRegister {
149
+ courtCode?: string;
150
+ type?: string;
151
+ number?: string;
152
+ }
153
+ /** the parsed structured register content (SI) of one entry */
154
+ export interface IRegisterStructuredContent {
155
+ /** whether the content describes the entity as an organisation or as a natural person */
156
+ entityKind: 'organisation' | 'person';
157
+ name: string;
158
+ legalForm?: IRegisterLegalForm;
159
+ seat?: IRegisterSeat;
160
+ address?: IRegisterAddress;
161
+ register: IRegisterContentRegister;
162
+ /** absent when the content states no status */
163
+ status?: IRegisterEntityStatus;
164
+ /** ISO date of the most recent entry on the sheet; the content states no date for the status itself */
165
+ lastEntryOn?: string;
166
+ /** whether the content names who may represent the entity */
167
+ representationStated: boolean;
168
+ representatives: IRegisterRepresentative[];
169
+ /** when the portal produced the content, as it states it (ISO 8601) */
170
+ producedAt?: string;
171
+ binding: false;
172
+ notice: IStructuredContentNotice;
173
+ }
174
+ export interface IRegisterEntry {
175
+ /** the entry's row in the portal's result list */
176
+ match: IRegisterMatch;
177
+ /** the parsed structured content; null when the portal offers none for this entry */
178
+ structuredContent: IRegisterStructuredContent | null;
179
+ /** epoch ms: when the last answer of the portal arrived */
180
+ retrievedAt: number;
181
+ /** requests of this call that count against the portal's limit: 2, or 1 without structured content */
182
+ countedRequests: number;
183
+ notice: IStructuredContentNotice;
184
+ }
185
+ /** a search by the name (Firma) */
186
+ export interface IRegisterNameQuery {
187
+ /** keywords of the name */
188
+ name: string;
189
+ /** `all` keywords (default), `any` keyword, or the `exact` name */
190
+ match?: 'all' | 'any' | 'exact';
191
+ /** the seat or the place of a branch */
192
+ seat?: string;
193
+ type?: TRegisterType;
194
+ courtCode?: string;
195
+ /** also closed register sheets (deleted entries) */
196
+ includeClosed?: boolean;
197
+ }
198
+ /** a search by register number; without a court, every court's entry with that number is returned */
199
+ export interface IRegisterNumberQuery {
200
+ type: TRegisterType;
201
+ /** `35230`, `35230 HB` or `35230HB`; with a location suffix only rows with that suffix are returned */
202
+ number: string;
203
+ courtCode?: string;
204
+ /** also closed register sheets (deleted entries) */
205
+ includeClosed?: boolean;
206
+ }
207
+ export type TRegisterSearchQuery = IRegisterNameQuery | IRegisterNumberQuery;
208
+ /** the two kinds of request the portal's terms count: at most 60 together per hour */
209
+ export type TRegisterCountedRequestKind = 'search' | 'retrieval';
210
+ export interface IRegisterCountedRequest {
211
+ kind: TRegisterCountedRequestKind;
212
+ }
213
+ /**
214
+ * Decides whether the next counted request may be made. The client calls `acquire()` before
215
+ * every search and every retrieval, before the step contacts the portal. Resolve to allow the
216
+ * request; throw to refuse it, and nothing is sent. A `HandelsregisterError` reaches the caller
217
+ * with the refused step and the requests the call counted before it; any other error reaches the
218
+ * caller unchanged.
219
+ */
220
+ export interface IRegisterRequestGate {
221
+ acquire(request: IRegisterCountedRequest): Promise<void>;
222
+ }
223
+ export interface IHandelsregisterClientOptions {
224
+ /** decides before every counted request whether it may be made; see `SlidingWindowGate` */
225
+ gate: IRegisterRequestGate;
226
+ /** default `https://www.handelsregister.de` */
227
+ portalUrl?: string;
228
+ /** sent as User-Agent; name your installation and a contact */
229
+ userAgent?: string;
230
+ /** limit for each HTTP request, including its body; default 20000 ms */
231
+ requestTimeoutMs?: number;
232
+ /** limit for each response body; default 5 MiB */
233
+ maxResponseBytes?: number;
234
+ /** clock for `retrievedAt`; default `Date.now` */
235
+ now?: () => number;
236
+ }
237
+ export interface IRegisterCallOptions {
238
+ /** aborts the call; a request already sent may still have counted */
239
+ signal?: AbortSignal;
240
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL2hhbmRlbHNyZWdpc3Rlci9pbnRlcmZhY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ==
@@ -0,0 +1,35 @@
1
+ import * as forms from './forms.js';
2
+ import type { IRegisterCourt, IRegisterMatch, IStructuredContentNotice, TRegisterDocument } from './interfaces.js';
3
+ export declare const resultFormId = "ergebnissForm";
4
+ /** one row of the result list with what is needed to retrieve its documents */
5
+ export interface IResultRow {
6
+ match: IRegisterMatch;
7
+ /** the extra fields a click on each document link submits with the result form */
8
+ documentSubmissions: Map<TRegisterDocument, Array<[string, string]>>;
9
+ }
10
+ export interface IParsedResultList {
11
+ rows: IResultRow[];
12
+ truncated: boolean;
13
+ portalNotice?: string;
14
+ /** the number of hits the portal reports */
15
+ hitCount?: number;
16
+ /** the result form, for retrieving documents */
17
+ form?: forms.IPortalForm;
18
+ }
19
+ /** the public shape of a parsed result list */
20
+ export interface IParsedSearchResults {
21
+ matches: IRegisterMatch[];
22
+ truncated: boolean;
23
+ portalNotice?: string;
24
+ notice: IStructuredContentNotice;
25
+ }
26
+ /**
27
+ * Reads the portal's result list. `courtsArg` are the register courts the rows are resolved
28
+ * against; by default the courts this version knows.
29
+ */
30
+ export declare const readResultList: (htmlArg: string, courtsArg?: readonly IRegisterCourt[]) => IParsedResultList;
31
+ /**
32
+ * Parses a result list page of the register portal, as saved from a browser, into matches.
33
+ * Makes no request.
34
+ */
35
+ export declare const parseSearchResults: (htmlArg: string) => IParsedSearchResults;