openplanter 0.2.5 → 0.2.6
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/README.md +1 -0
- package/dist/investigation-tools/asic-officer-lookup.d.ts +7 -4
- package/dist/investigation-tools/asic-officer-lookup.d.ts.map +1 -1
- package/dist/investigation-tools/asic-officer-lookup.js +84 -24
- package/dist/investigation-tools/asic-officer-lookup.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -371,6 +371,7 @@ All engine parameters can be configured via environment variables with the `OPEN
|
|
|
371
371
|
| `OPENPLANTER_CMD_TIMEOUT` | `45` | Shell command timeout (seconds) |
|
|
372
372
|
| `OPENPLANTER_RECURSIVE` | `true` | Enable recursive mode |
|
|
373
373
|
| `OPENPLANTER_DEMO` | `false` | Censor entity names |
|
|
374
|
+
| `OPENPLANTER_ABR_GUID` | _(none)_ | ABR API GUID for ASIC officer lookups (register at https://abr.business.gov.au) |
|
|
374
375
|
| `OPENPLANTER_MAX_OBS_CHARS` | `6000` | Max observation characters |
|
|
375
376
|
| `OPENPLANTER_MAX_FILES` | `400` | Max files listed |
|
|
376
377
|
| `OPENPLANTER_MAX_FILE_CHARS` | `20000` | Max file read characters |
|
|
@@ -4,11 +4,13 @@
|
|
|
4
4
|
*
|
|
5
5
|
* Data sources:
|
|
6
6
|
* - ASIC Connect Registry Search:
|
|
7
|
-
* https://
|
|
7
|
+
* https://asicconnect.asic.gov.au/public/
|
|
8
|
+
* (fallback: https://connectonline.asic.gov.au/RegistrySearch/)
|
|
8
9
|
* - Australian Business Register (ABR) JSON API:
|
|
9
|
-
* https://abr.business.gov.au/json/AbnDetails.aspx?abn=XXX&callback=callback
|
|
10
|
-
*
|
|
11
|
-
*
|
|
10
|
+
* https://abr.business.gov.au/json/AbnDetails.aspx?abn=XXX&guid=YYY&callback=callback
|
|
11
|
+
* Requires ABR_GUID env var — register at https://abr.business.gov.au
|
|
12
|
+
* - ASX Markit Digital Company Header API:
|
|
13
|
+
* https://asx.api.markitdigital.com/asx-research/1.0/companies/{ticker}/header
|
|
12
14
|
*/
|
|
13
15
|
export interface AsxCompanyInfo {
|
|
14
16
|
name_full?: string;
|
|
@@ -23,6 +25,7 @@ export interface AbrData {
|
|
|
23
25
|
BusinessName?: Array<string | {
|
|
24
26
|
Value?: string;
|
|
25
27
|
}>;
|
|
28
|
+
Message?: string;
|
|
26
29
|
[key: string]: unknown;
|
|
27
30
|
}
|
|
28
31
|
export interface OfficerRecord {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"asic-officer-lookup.d.ts","sourceRoot":"","sources":["../../src/investigation-tools/asic-officer-lookup.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"asic-officer-lookup.d.ts","sourceRoot":"","sources":["../../src/investigation-tools/asic-officer-lookup.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAgCH,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,OAAO;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAwBD,wBAAsB,aAAa,CACjC,MAAM,EAAE,MAAM,EACd,KAAK,GAAE,MAAsB,GAC5B,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAsBhC;AAYD,wBAAsB,QAAQ,CAC5B,GAAG,EAAE,MAAM,EACX,KAAK,GAAE,MAAsB,GAC5B,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAsCzB;AAuBD,wBAAsB,SAAS,CAC7B,WAAW,EAAE,MAAM,EACnB,KAAK,GAAE,MAAsB,GAC5B,OAAO,CAAC,aAAa,EAAE,CAAC,CA6E1B;AAID,wBAAsB,cAAc,CAClC,WAAW,EAAE,MAAM,EACnB,UAAU,GAAE,MAA4B,GACvC,OAAO,CAAC,aAAa,EAAE,CAAC,CA0F1B"}
|
|
@@ -4,18 +4,22 @@
|
|
|
4
4
|
*
|
|
5
5
|
* Data sources:
|
|
6
6
|
* - ASIC Connect Registry Search:
|
|
7
|
-
* https://
|
|
7
|
+
* https://asicconnect.asic.gov.au/public/
|
|
8
|
+
* (fallback: https://connectonline.asic.gov.au/RegistrySearch/)
|
|
8
9
|
* - Australian Business Register (ABR) JSON API:
|
|
9
|
-
* https://abr.business.gov.au/json/AbnDetails.aspx?abn=XXX&callback=callback
|
|
10
|
-
*
|
|
11
|
-
*
|
|
10
|
+
* https://abr.business.gov.au/json/AbnDetails.aspx?abn=XXX&guid=YYY&callback=callback
|
|
11
|
+
* Requires ABR_GUID env var — register at https://abr.business.gov.au
|
|
12
|
+
* - ASX Markit Digital Company Header API:
|
|
13
|
+
* https://asx.api.markitdigital.com/asx-research/1.0/companies/{ticker}/header
|
|
12
14
|
*/
|
|
13
|
-
import { fetchHtml, fetchWithDelay, fetchJson, cleanAbn, formatAbn, sleep, } from "./shared.js";
|
|
15
|
+
import { fetchHtml, fetchWithDelay, fetchJson, cleanAbn, formatAbn, sleep, DEFAULT_USER_AGENT, } from "./shared.js";
|
|
14
16
|
// ── Constants ────────────────────────────────────────────────────
|
|
15
|
-
const
|
|
16
|
-
"
|
|
17
|
+
const ASIC_SEARCH_URLS = [
|
|
18
|
+
"https://asicconnect.asic.gov.au/public/",
|
|
19
|
+
"https://connectonline.asic.gov.au/RegistrySearch/faces/landing/SearchRegisters.jspx",
|
|
20
|
+
];
|
|
17
21
|
const ABR_API_URL = "https://abr.business.gov.au/json/AbnDetails.aspx";
|
|
18
|
-
const
|
|
22
|
+
const ASX_MARKIT_HEADER_URL = "https://asx.api.markitdigital.com/asx-research/1.0/companies/{ticker}/header";
|
|
19
23
|
const DEFAULT_MAX_RESULTS = 20;
|
|
20
24
|
const DEFAULT_DELAY = 1.0;
|
|
21
25
|
// ── Helpers ──────────────────────────────────────────────────────
|
|
@@ -23,11 +27,24 @@ function isAbnInput(value) {
|
|
|
23
27
|
const digits = value.replace(/\D/g, "");
|
|
24
28
|
return digits.length === 11;
|
|
25
29
|
}
|
|
26
|
-
// ── ASX company info lookup ──────────────────────────────────────
|
|
27
30
|
export async function resolveTicker(ticker, delay = DEFAULT_DELAY) {
|
|
28
|
-
const url =
|
|
31
|
+
const url = ASX_MARKIT_HEADER_URL.replace("{ticker}", ticker.toUpperCase());
|
|
29
32
|
try {
|
|
30
|
-
|
|
33
|
+
const resp = await fetchJson(url, {
|
|
34
|
+
delay,
|
|
35
|
+
userAgent: DEFAULT_USER_AGENT,
|
|
36
|
+
});
|
|
37
|
+
const d = resp.data;
|
|
38
|
+
if (!d)
|
|
39
|
+
return null;
|
|
40
|
+
return {
|
|
41
|
+
name_full: d.displayName ?? undefined,
|
|
42
|
+
name_short: d.symbol ?? undefined,
|
|
43
|
+
industry_group_name: d.industryGroup ?? d.sector ?? undefined,
|
|
44
|
+
listing_date: d.dateListed ?? undefined,
|
|
45
|
+
market_cap: d.marketCap,
|
|
46
|
+
security_type: d.securityType,
|
|
47
|
+
};
|
|
31
48
|
}
|
|
32
49
|
catch (err) {
|
|
33
50
|
const msg = err instanceof Error ? err.message : String(err);
|
|
@@ -36,21 +53,39 @@ export async function resolveTicker(ticker, delay = DEFAULT_DELAY) {
|
|
|
36
53
|
}
|
|
37
54
|
}
|
|
38
55
|
// ── ABR API lookup ───────────────────────────────────────────────
|
|
56
|
+
function getAbrGuid() {
|
|
57
|
+
return (process.env["OPENPLANTER_ABR_GUID"] ??
|
|
58
|
+
process.env["ABR_GUID"] ??
|
|
59
|
+
null);
|
|
60
|
+
}
|
|
39
61
|
export async function queryAbr(abn, delay = DEFAULT_DELAY) {
|
|
62
|
+
const guid = getAbrGuid();
|
|
63
|
+
if (!guid) {
|
|
64
|
+
console.error("[WARN] ABR lookup skipped: no ABR_GUID configured. " +
|
|
65
|
+
"Register at https://abr.business.gov.au to obtain a GUID, " +
|
|
66
|
+
"then set ABR_GUID or OPENPLANTER_ABR_GUID env var.");
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
40
69
|
const clean = cleanAbn(abn);
|
|
41
|
-
const url = `${ABR_API_URL}?abn=${clean}&callback=callback`;
|
|
70
|
+
const url = `${ABR_API_URL}?abn=${clean}&guid=${encodeURIComponent(guid)}&callback=callback`;
|
|
42
71
|
try {
|
|
43
72
|
const resp = await fetchWithDelay(url, { delay });
|
|
44
73
|
if (!resp.ok) {
|
|
45
74
|
throw new Error(`HTTP ${resp.status}`);
|
|
46
75
|
}
|
|
47
76
|
const text = (await resp.text()).trim();
|
|
48
|
-
// Strip JSONP wrapper: callback({...})
|
|
49
77
|
const match = text.match(/^callback\((.+)\)\s*$/s);
|
|
50
|
-
if (match)
|
|
51
|
-
return
|
|
78
|
+
if (!match)
|
|
79
|
+
return null;
|
|
80
|
+
const data = JSON.parse(match[1]);
|
|
81
|
+
if (data.Message && !data.Abn) {
|
|
82
|
+
console.error(`[WARN] ABR API error for ABN ${clean}: ${data.Message}`);
|
|
83
|
+
return null;
|
|
52
84
|
}
|
|
53
|
-
|
|
85
|
+
if (!data.EntityName && !data.Abn) {
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
return data;
|
|
54
89
|
}
|
|
55
90
|
catch (err) {
|
|
56
91
|
const msg = err instanceof Error ? err.message : String(err);
|
|
@@ -59,33 +94,58 @@ export async function queryAbr(abn, delay = DEFAULT_DELAY) {
|
|
|
59
94
|
}
|
|
60
95
|
}
|
|
61
96
|
// ── ASIC Connect scraping (best-effort) ──────────────────────────
|
|
97
|
+
async function tryAsicUrl(url, delay) {
|
|
98
|
+
try {
|
|
99
|
+
const ch = await fetchHtml(url, { delay });
|
|
100
|
+
const title = ch("title").text().trim().toLowerCase();
|
|
101
|
+
if (title.includes("service availability") || title.includes("maintenance")) {
|
|
102
|
+
console.error(`[WARN] ASIC Connect at ${url} is showing a maintenance page.`);
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
return { ch, url };
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
return null;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
62
111
|
export async function queryAsic(_searchTerm, delay = DEFAULT_DELAY) {
|
|
63
112
|
const officers = [];
|
|
64
113
|
try {
|
|
65
|
-
|
|
66
|
-
const
|
|
114
|
+
let page = null;
|
|
115
|
+
for (const url of ASIC_SEARCH_URLS) {
|
|
116
|
+
page = await tryAsicUrl(url, delay);
|
|
117
|
+
if (page)
|
|
118
|
+
break;
|
|
119
|
+
}
|
|
120
|
+
if (!page) {
|
|
121
|
+
console.error("[WARN] ASIC Connect is unavailable (all endpoints returned " +
|
|
122
|
+
"maintenance pages). Officer scraping skipped.");
|
|
123
|
+
return officers;
|
|
124
|
+
}
|
|
125
|
+
const { ch, url: activeUrl } = page;
|
|
67
126
|
const viewstateTag = ch('input[name="javax.faces.ViewState"]');
|
|
68
127
|
if (!viewstateTag.length) {
|
|
69
|
-
console.error("[WARN] ASIC Connect: could not locate ViewState
|
|
128
|
+
console.error("[WARN] ASIC Connect: could not locate ViewState on " +
|
|
129
|
+
activeUrl + " – page structure may have changed.");
|
|
70
130
|
return officers;
|
|
71
131
|
}
|
|
72
132
|
const viewstate = viewstateTag.attr("value") ?? "";
|
|
73
|
-
// Step 2: POST a search form submission
|
|
74
|
-
// ASIC Connect form IDs change frequently; this is best-effort.
|
|
75
133
|
const formData = new URLSearchParams({
|
|
76
134
|
"javax.faces.ViewState": viewstate,
|
|
77
135
|
"javax.faces.partial.ajax": "true",
|
|
78
136
|
});
|
|
79
137
|
await sleep(delay * 1000);
|
|
80
|
-
const searchResp = await fetch(
|
|
138
|
+
const searchResp = await fetch(activeUrl, {
|
|
81
139
|
method: "POST",
|
|
82
|
-
headers: {
|
|
140
|
+
headers: {
|
|
141
|
+
"Content-Type": "application/x-www-form-urlencoded",
|
|
142
|
+
"User-Agent": DEFAULT_USER_AGENT,
|
|
143
|
+
},
|
|
83
144
|
body: formData.toString(),
|
|
84
145
|
});
|
|
85
146
|
if (!searchResp.ok) {
|
|
86
147
|
throw new Error(`HTTP ${searchResp.status}`);
|
|
87
148
|
}
|
|
88
|
-
// Step 3: Parse officer table from results
|
|
89
149
|
const cheerio = await import("cheerio");
|
|
90
150
|
const resultHtml = await searchResp.text();
|
|
91
151
|
const result$ = cheerio.load(resultHtml);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"asic-officer-lookup.js","sourceRoot":"","sources":["../../src/investigation-tools/asic-officer-lookup.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"asic-officer-lookup.js","sourceRoot":"","sources":["../../src/investigation-tools/asic-officer-lookup.ts"],"names":[],"mappings":"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"}
|