openplanter 0.2.9 → 0.3.1
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/dist/investigation-tools/asx-options-flow.d.ts +75 -0
- package/dist/investigation-tools/asx-options-flow.d.ts.map +1 -0
- package/dist/investigation-tools/asx-options-flow.js +272 -0
- package/dist/investigation-tools/asx-options-flow.js.map +1 -0
- package/dist/investigation-tools/glassdoor-asx-analyzer.d.ts +55 -0
- package/dist/investigation-tools/glassdoor-asx-analyzer.d.ts.map +1 -0
- package/dist/investigation-tools/glassdoor-asx-analyzer.js +244 -0
- package/dist/investigation-tools/glassdoor-asx-analyzer.js.map +1 -0
- package/dist/investigation-tools/index.d.ts +7 -0
- package/dist/investigation-tools/index.d.ts.map +1 -1
- package/dist/investigation-tools/index.js +7 -0
- package/dist/investigation-tools/index.js.map +1 -1
- package/dist/investigation-tools/ip-australia-patent-scraper.d.ts +51 -0
- package/dist/investigation-tools/ip-australia-patent-scraper.d.ts.map +1 -0
- package/dist/investigation-tools/ip-australia-patent-scraper.js +303 -0
- package/dist/investigation-tools/ip-australia-patent-scraper.js.map +1 -0
- package/dist/investigation-tools/linkedin-asx-employee-scraper.d.ts +49 -0
- package/dist/investigation-tools/linkedin-asx-employee-scraper.d.ts.map +1 -0
- package/dist/investigation-tools/linkedin-asx-employee-scraper.js +250 -0
- package/dist/investigation-tools/linkedin-asx-employee-scraper.js.map +1 -0
- package/dist/investigation-tools/state-mp-holdings-scraper.d.ts +49 -0
- package/dist/investigation-tools/state-mp-holdings-scraper.d.ts.map +1 -0
- package/dist/investigation-tools/state-mp-holdings-scraper.js +286 -0
- package/dist/investigation-tools/state-mp-holdings-scraper.js.map +1 -0
- package/dist/investigation-tools/stocktwits-asx-scraper.d.ts +61 -0
- package/dist/investigation-tools/stocktwits-asx-scraper.d.ts.map +1 -0
- package/dist/investigation-tools/stocktwits-asx-scraper.js +246 -0
- package/dist/investigation-tools/stocktwits-asx-scraper.js.map +1 -0
- package/dist/investigation-tools/tenders-gov-au-scraper.d.ts +39 -0
- package/dist/investigation-tools/tenders-gov-au-scraper.d.ts.map +1 -0
- package/dist/investigation-tools/tenders-gov-au-scraper.js +265 -0
- package/dist/investigation-tools/tenders-gov-au-scraper.js.map +1 -0
- package/dist/investigation-tools/tool-registry.d.ts.map +1 -1
- package/dist/investigation-tools/tool-registry.js +77 -0
- package/dist/investigation-tools/tool-registry.js.map +1 -1
- package/dist/tool-defs.d.ts.map +1 -1
- package/dist/tool-defs.js +220 -0
- package/dist/tool-defs.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stocktwits-asx-scraper.js","sourceRoot":"","sources":["../../src/investigation-tools/stocktwits-asx-scraper.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* tenders-gov-au-scraper.ts -- AusTender Government Tender Scraper
|
|
3
|
+
*
|
|
4
|
+
* Searches AusTender.gov.au for recent contract awards to ASX-listed
|
|
5
|
+
* companies. Useful for detecting pre-announcement revenue signals.
|
|
6
|
+
*
|
|
7
|
+
* Data source: https://www.tenders.gov.au/
|
|
8
|
+
*
|
|
9
|
+
* DISCLAIMER:
|
|
10
|
+
* This tool is provided for research and educational purposes only.
|
|
11
|
+
* Users are solely responsible for ensuring compliance with all applicable
|
|
12
|
+
* laws, regulations, and website terms before using this tool.
|
|
13
|
+
*/
|
|
14
|
+
export interface TenderAward {
|
|
15
|
+
company: string;
|
|
16
|
+
tender_id: string;
|
|
17
|
+
value: number | null;
|
|
18
|
+
value_raw: string;
|
|
19
|
+
award_date: string;
|
|
20
|
+
description: string;
|
|
21
|
+
agency: string;
|
|
22
|
+
category: string;
|
|
23
|
+
url: string;
|
|
24
|
+
}
|
|
25
|
+
export interface TenderResult {
|
|
26
|
+
scraped_at: string;
|
|
27
|
+
query: string;
|
|
28
|
+
days_back: number;
|
|
29
|
+
state: string;
|
|
30
|
+
total_awards: number;
|
|
31
|
+
awards: TenderAward[];
|
|
32
|
+
}
|
|
33
|
+
export declare function scrapeTenders(opts: {
|
|
34
|
+
query: string;
|
|
35
|
+
days?: number;
|
|
36
|
+
state?: string;
|
|
37
|
+
}): Promise<TenderResult>;
|
|
38
|
+
export declare function sampleData(query: string): TenderResult;
|
|
39
|
+
//# sourceMappingURL=tenders-gov-au-scraper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tenders-gov-au-scraper.d.ts","sourceRoot":"","sources":["../../src/investigation-tools/tenders-gov-au-scraper.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAuCH,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB;AAYD,wBAAsB,aAAa,CAAC,IAAI,EAAE;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,YAAY,CAAC,CAwDxB;AAmJD,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,CAsDtD"}
|
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* tenders-gov-au-scraper.ts -- AusTender Government Tender Scraper
|
|
3
|
+
*
|
|
4
|
+
* Searches AusTender.gov.au for recent contract awards to ASX-listed
|
|
5
|
+
* companies. Useful for detecting pre-announcement revenue signals.
|
|
6
|
+
*
|
|
7
|
+
* Data source: https://www.tenders.gov.au/
|
|
8
|
+
*
|
|
9
|
+
* DISCLAIMER:
|
|
10
|
+
* This tool is provided for research and educational purposes only.
|
|
11
|
+
* Users are solely responsible for ensuring compliance with all applicable
|
|
12
|
+
* laws, regulations, and website terms before using this tool.
|
|
13
|
+
*/
|
|
14
|
+
import { fetchHtml, isoNow, normalizeCompany, } from "./shared.js";
|
|
15
|
+
// ── Constants ────────────────────────────────────────────────────
|
|
16
|
+
const AUSTENDER_BASE = "https://www.tenders.gov.au";
|
|
17
|
+
const AUSTENDER_CN_ADVANCED_URL = `${AUSTENDER_BASE}/Search/CnAdvancedSearch`;
|
|
18
|
+
const DEFAULT_DELAY = 1.5;
|
|
19
|
+
const RESULTS_PER_PAGE = 15;
|
|
20
|
+
const MAX_PAGES = 60;
|
|
21
|
+
const MAX_DAY_SPAN = 365;
|
|
22
|
+
const MONTHS = [
|
|
23
|
+
"Jan",
|
|
24
|
+
"Feb",
|
|
25
|
+
"Mar",
|
|
26
|
+
"Apr",
|
|
27
|
+
"May",
|
|
28
|
+
"Jun",
|
|
29
|
+
"Jul",
|
|
30
|
+
"Aug",
|
|
31
|
+
"Sep",
|
|
32
|
+
"Oct",
|
|
33
|
+
"Nov",
|
|
34
|
+
"Dec",
|
|
35
|
+
];
|
|
36
|
+
// ── Helpers ──────────────────────────────────────────────────────
|
|
37
|
+
function parseAuDollar(text) {
|
|
38
|
+
const cleaned = text.replace(/[^0-9.,]/g, "").replace(/,/g, "");
|
|
39
|
+
const num = parseFloat(cleaned);
|
|
40
|
+
return isNaN(num) ? null : num;
|
|
41
|
+
}
|
|
42
|
+
// ── Scraper ──────────────────────────────────────────────────────
|
|
43
|
+
export async function scrapeTenders(opts) {
|
|
44
|
+
const query = opts.query?.trim() ?? "";
|
|
45
|
+
const days = sanitizeDays(opts.days ?? 30);
|
|
46
|
+
const state = opts.state ?? "AU";
|
|
47
|
+
const collected = new Map();
|
|
48
|
+
try {
|
|
49
|
+
const { start, end } = computeDateRange(days);
|
|
50
|
+
const baseParams = buildSearchParams({ query, start, end });
|
|
51
|
+
let totalPages = 1;
|
|
52
|
+
for (let page = 1; page <= totalPages && page <= MAX_PAGES; page += 1) {
|
|
53
|
+
const pageParams = new URLSearchParams(baseParams);
|
|
54
|
+
if (page > 1)
|
|
55
|
+
pageParams.set("page", String(page));
|
|
56
|
+
const url = `${AUSTENDER_CN_ADVANCED_URL}?${pageParams.toString()}`;
|
|
57
|
+
const $ = await fetchHtml(url, { delay: DEFAULT_DELAY });
|
|
58
|
+
if (page === 1) {
|
|
59
|
+
const totalRecords = extractTotalRecords($);
|
|
60
|
+
if (totalRecords != null) {
|
|
61
|
+
totalPages = Math.max(1, Math.min(MAX_PAGES, Math.ceil(totalRecords / RESULTS_PER_PAGE)));
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
const awards = parseTenderArticles($, query);
|
|
65
|
+
if (awards.length === 0)
|
|
66
|
+
break;
|
|
67
|
+
for (const award of awards) {
|
|
68
|
+
if (!award.tender_id || collected.has(award.tender_id))
|
|
69
|
+
continue;
|
|
70
|
+
collected.set(award.tender_id, award);
|
|
71
|
+
}
|
|
72
|
+
if (awards.length < RESULTS_PER_PAGE && totalPages === 1)
|
|
73
|
+
break;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
catch (err) {
|
|
77
|
+
console.error(`[tenders_gov_au] Scrape error: ${err}`);
|
|
78
|
+
}
|
|
79
|
+
const awards = Array.from(collected.values()).filter((award) => matchesQuery(award, query));
|
|
80
|
+
return {
|
|
81
|
+
scraped_at: isoNow(),
|
|
82
|
+
query,
|
|
83
|
+
days_back: days,
|
|
84
|
+
state,
|
|
85
|
+
total_awards: awards.length,
|
|
86
|
+
awards,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
// ── Helpers ──────────────────────────────────────────────────────
|
|
90
|
+
function sanitizeDays(days) {
|
|
91
|
+
if (!Number.isFinite(days))
|
|
92
|
+
return 30;
|
|
93
|
+
return Math.min(MAX_DAY_SPAN, Math.max(1, Math.floor(days)));
|
|
94
|
+
}
|
|
95
|
+
function computeDateRange(days) {
|
|
96
|
+
const endDate = startOfDay(new Date());
|
|
97
|
+
const startDate = new Date(endDate);
|
|
98
|
+
startDate.setDate(startDate.getDate() - days);
|
|
99
|
+
return {
|
|
100
|
+
start: formatUiDate(startDate),
|
|
101
|
+
end: formatUiDate(endDate),
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
function startOfDay(input) {
|
|
105
|
+
const d = new Date(input);
|
|
106
|
+
d.setHours(0, 0, 0, 0);
|
|
107
|
+
return d;
|
|
108
|
+
}
|
|
109
|
+
function formatUiDate(date) {
|
|
110
|
+
const day = String(date.getDate()).padStart(2, "0");
|
|
111
|
+
const month = MONTHS[date.getMonth()];
|
|
112
|
+
const year = date.getFullYear();
|
|
113
|
+
return `${day}-${month}-${year}`;
|
|
114
|
+
}
|
|
115
|
+
function buildSearchParams(opts) {
|
|
116
|
+
const params = new URLSearchParams({
|
|
117
|
+
SearchFrom: "CnSearch",
|
|
118
|
+
Type: "Cn",
|
|
119
|
+
AgencyStatus: "-1",
|
|
120
|
+
DateType: "Publish Date",
|
|
121
|
+
DateStart: opts.start,
|
|
122
|
+
DateEnd: opts.end,
|
|
123
|
+
});
|
|
124
|
+
if (opts.query) {
|
|
125
|
+
params.set("Keyword", opts.query);
|
|
126
|
+
params.set("KeywordTypeSearch", "AllWord");
|
|
127
|
+
}
|
|
128
|
+
return params;
|
|
129
|
+
}
|
|
130
|
+
function cleanText(text) {
|
|
131
|
+
return text.replace(/\u00A0/g, " ").replace(/\s+/g, " ").trim();
|
|
132
|
+
}
|
|
133
|
+
function extractTotalRecords($) {
|
|
134
|
+
const text = cleanText($(".total-result").first().text());
|
|
135
|
+
const match = text.match(/of\s+([\d,]+)/i);
|
|
136
|
+
if (!match)
|
|
137
|
+
return null;
|
|
138
|
+
const total = Number(match[1].replace(/,/g, ""));
|
|
139
|
+
return Number.isFinite(total) ? total : null;
|
|
140
|
+
}
|
|
141
|
+
function parseTenderArticles($, fallbackQuery) {
|
|
142
|
+
const awards = [];
|
|
143
|
+
$("article").each((_i, el) => {
|
|
144
|
+
const heading = cleanText($(el).find(".boxY .lead").first().text());
|
|
145
|
+
const fields = extractFieldMap($, el);
|
|
146
|
+
const tenderId = fields.get("cn id") ?? "";
|
|
147
|
+
if (!tenderId)
|
|
148
|
+
return;
|
|
149
|
+
const valueRaw = fields.get("contract value (aud)") ?? "";
|
|
150
|
+
const supplier = fields.get("supplier name") ?? "";
|
|
151
|
+
const publishDate = fields.get("publish date") ?? "";
|
|
152
|
+
const executionDate = fields.get("execution date") ?? "";
|
|
153
|
+
const agency = fields.get("agency") ?? "";
|
|
154
|
+
const linkHref = $(el).find("a.detail").attr("href") ??
|
|
155
|
+
($(el).find(".list-desc-inner a").first().attr("href") ?? "");
|
|
156
|
+
const url = linkHref
|
|
157
|
+
? (linkHref.startsWith("http") ? linkHref : `${AUSTENDER_BASE}${linkHref}`)
|
|
158
|
+
: `${AUSTENDER_BASE}/Cn/Show/${encodeURIComponent(tenderId)}`;
|
|
159
|
+
awards.push({
|
|
160
|
+
company: supplier || fallbackQuery || "Unknown Supplier",
|
|
161
|
+
tender_id: tenderId,
|
|
162
|
+
value: parseAuDollar(valueRaw),
|
|
163
|
+
value_raw: valueRaw,
|
|
164
|
+
award_date: publishDate || executionDate,
|
|
165
|
+
description: heading || tenderId,
|
|
166
|
+
agency,
|
|
167
|
+
category: "",
|
|
168
|
+
url,
|
|
169
|
+
});
|
|
170
|
+
});
|
|
171
|
+
return awards;
|
|
172
|
+
}
|
|
173
|
+
function extractFieldMap($, el) {
|
|
174
|
+
const map = new Map();
|
|
175
|
+
$(el).find(".list-desc").each((_idx, desc) => {
|
|
176
|
+
const label = cleanText($(desc).find("span").first().text()).replace(/:$/u, "").toLowerCase();
|
|
177
|
+
const value = cleanText($(desc).find(".list-desc-inner").text());
|
|
178
|
+
if (!label || !value)
|
|
179
|
+
return;
|
|
180
|
+
map.set(label, value);
|
|
181
|
+
});
|
|
182
|
+
return map;
|
|
183
|
+
}
|
|
184
|
+
function matchesQuery(award, query) {
|
|
185
|
+
if (!query)
|
|
186
|
+
return true;
|
|
187
|
+
const needle = query.toLowerCase();
|
|
188
|
+
const normalizedNeedle = normalizeCompany(query).toLowerCase();
|
|
189
|
+
const haystacks = [
|
|
190
|
+
award.company,
|
|
191
|
+
award.description,
|
|
192
|
+
award.agency,
|
|
193
|
+
award.tender_id,
|
|
194
|
+
award.url,
|
|
195
|
+
];
|
|
196
|
+
if (haystacks.some((value) => value.toLowerCase().includes(needle))) {
|
|
197
|
+
return true;
|
|
198
|
+
}
|
|
199
|
+
if (normalizedNeedle) {
|
|
200
|
+
const normalizedFields = [
|
|
201
|
+
normalizeCompany(award.company),
|
|
202
|
+
normalizeCompany(award.description),
|
|
203
|
+
normalizeCompany(award.agency),
|
|
204
|
+
];
|
|
205
|
+
return normalizedFields.some((value) => value.toLowerCase().includes(normalizedNeedle));
|
|
206
|
+
}
|
|
207
|
+
return false;
|
|
208
|
+
}
|
|
209
|
+
// ── Test/sample data ─────────────────────────────────────────────
|
|
210
|
+
export function sampleData(query) {
|
|
211
|
+
return {
|
|
212
|
+
scraped_at: isoNow(),
|
|
213
|
+
query,
|
|
214
|
+
days_back: 30,
|
|
215
|
+
state: "AU",
|
|
216
|
+
total_awards: 4,
|
|
217
|
+
awards: [
|
|
218
|
+
{
|
|
219
|
+
company: "Telstra Corporation Ltd",
|
|
220
|
+
tender_id: "CN4123456",
|
|
221
|
+
value: 12500000,
|
|
222
|
+
value_raw: "$12,500,000.00",
|
|
223
|
+
award_date: "2026-02-15",
|
|
224
|
+
description: "Managed Network Services for Department of Defence",
|
|
225
|
+
agency: "Department of Defence",
|
|
226
|
+
category: "ICT",
|
|
227
|
+
url: "https://www.tenders.gov.au/cn/view?id=CN4123456",
|
|
228
|
+
},
|
|
229
|
+
{
|
|
230
|
+
company: "Downer EDI Limited",
|
|
231
|
+
tender_id: "CN4123457",
|
|
232
|
+
value: 85000000,
|
|
233
|
+
value_raw: "$85,000,000.00",
|
|
234
|
+
award_date: "2026-02-10",
|
|
235
|
+
description: "Road Infrastructure Maintenance Contract - NSW Pacific Highway",
|
|
236
|
+
agency: "Department of Infrastructure",
|
|
237
|
+
category: "Construction",
|
|
238
|
+
url: "https://www.tenders.gov.au/cn/view?id=CN4123457",
|
|
239
|
+
},
|
|
240
|
+
{
|
|
241
|
+
company: "Leighton Holdings (CIMIC Group)",
|
|
242
|
+
tender_id: "CN4123458",
|
|
243
|
+
value: 230000000,
|
|
244
|
+
value_raw: "$230,000,000.00",
|
|
245
|
+
award_date: "2026-02-05",
|
|
246
|
+
description: "Western Sydney Airport Terminal Fit-Out Phase 2",
|
|
247
|
+
agency: "Western Sydney Airport Co",
|
|
248
|
+
category: "Construction",
|
|
249
|
+
url: "https://www.tenders.gov.au/cn/view?id=CN4123458",
|
|
250
|
+
},
|
|
251
|
+
{
|
|
252
|
+
company: "Thales Australia",
|
|
253
|
+
tender_id: "CN4123459",
|
|
254
|
+
value: 45000000,
|
|
255
|
+
value_raw: "$45,000,000.00",
|
|
256
|
+
award_date: "2026-01-28",
|
|
257
|
+
description: "Protected Mobile Forces Communication System Upgrade",
|
|
258
|
+
agency: "Department of Defence",
|
|
259
|
+
category: "Defence",
|
|
260
|
+
url: "https://www.tenders.gov.au/cn/view?id=CN4123459",
|
|
261
|
+
},
|
|
262
|
+
],
|
|
263
|
+
};
|
|
264
|
+
}
|
|
265
|
+
//# sourceMappingURL=tenders-gov-au-scraper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tenders-gov-au-scraper.js","sourceRoot":"","sources":["../../src/investigation-tools/tenders-gov-au-scraper.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-registry.d.ts","sourceRoot":"","sources":["../../src/investigation-tools/tool-registry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"tool-registry.d.ts","sourceRoot":"","sources":["../../src/investigation-tools/tool-registry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA6CH,KAAK,WAAW,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;AAMjF,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CA05BxD,CAAC;AAEF,eAAO,MAAM,aAAa,aAAyC,CAAC;AAEpE,wBAAsB,SAAS,CAC7B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,MAAM,CAAC,CAUjB"}
|
|
@@ -38,6 +38,13 @@ import * as yahooFinanceAu from "./yahoo-finance-au-scraper.js";
|
|
|
38
38
|
import * as seekingAlphaAsx from "./seeking-alpha-asx-scraper.js";
|
|
39
39
|
import * as universalForum from "./universal-forum-scraper.js";
|
|
40
40
|
import * as volumeScanner from "./volume-scanner.js";
|
|
41
|
+
import * as stateMpHoldings from "./state-mp-holdings-scraper.js";
|
|
42
|
+
import * as tendersGovAu from "./tenders-gov-au-scraper.js";
|
|
43
|
+
import * as linkedinAsx from "./linkedin-asx-employee-scraper.js";
|
|
44
|
+
import * as glassdoorAsx from "./glassdoor-asx-analyzer.js";
|
|
45
|
+
import * as stocktwitsAsx from "./stocktwits-asx-scraper.js";
|
|
46
|
+
import * as asxOptions from "./asx-options-flow.js";
|
|
47
|
+
import * as ipAustralia from "./ip-australia-patent-scraper.js";
|
|
41
48
|
import { isoNow } from "./shared.js";
|
|
42
49
|
function jsonResult(result) {
|
|
43
50
|
return JSON.stringify(result, null, 2);
|
|
@@ -723,6 +730,76 @@ export const TS_TOOL_REGISTRY = {
|
|
|
723
730
|
days: args.days != null ? Number(args.days) : undefined,
|
|
724
731
|
}));
|
|
725
732
|
},
|
|
733
|
+
// ── Political & Gov Signals (AU) ───────────────────────────────
|
|
734
|
+
state_mp_holdings_scraper: async (args) => {
|
|
735
|
+
const states = Array.isArray(args.states) ? args.states.map(String) : ["NSW", "VIC", "QLD"];
|
|
736
|
+
if (args.test)
|
|
737
|
+
return jsonResult(stateMpHoldings.sampleData(states));
|
|
738
|
+
return jsonResult(await stateMpHoldings.scrapeStateMpHoldings({
|
|
739
|
+
states,
|
|
740
|
+
tickerFilter: args.ticker_filter,
|
|
741
|
+
}));
|
|
742
|
+
},
|
|
743
|
+
tenders_gov_au_scraper: async (args) => {
|
|
744
|
+
if (args.test)
|
|
745
|
+
return jsonResult(tendersGovAu.sampleData(String(args.query ?? "Telstra")));
|
|
746
|
+
return jsonResult(await tendersGovAu.scrapeTenders({
|
|
747
|
+
query: String(args.query ?? ""),
|
|
748
|
+
days: args.days != null ? Number(args.days) : undefined,
|
|
749
|
+
state: args.state,
|
|
750
|
+
}));
|
|
751
|
+
},
|
|
752
|
+
// ── Employee & Social Signals ──────────────────────────────────
|
|
753
|
+
linkedin_asx_employee_scraper: async (args) => {
|
|
754
|
+
const ticker = String(args.ticker ?? args.abn ?? "BHP");
|
|
755
|
+
if (args.test)
|
|
756
|
+
return jsonResult(linkedinAsx.sampleData(ticker));
|
|
757
|
+
return jsonResult(await linkedinAsx.scrapeLinkedInSignals({
|
|
758
|
+
ticker: args.ticker,
|
|
759
|
+
company: args.abn,
|
|
760
|
+
keywords: Array.isArray(args.keywords) ? args.keywords.map(String) : undefined,
|
|
761
|
+
days: args.days != null ? Number(args.days) : undefined,
|
|
762
|
+
}));
|
|
763
|
+
},
|
|
764
|
+
glassdoor_asx_analyzer: async (args) => {
|
|
765
|
+
if (args.test)
|
|
766
|
+
return jsonResult(glassdoorAsx.sampleData(String(args.ticker ?? "BHP")));
|
|
767
|
+
return jsonResult(await glassdoorAsx.analyzeGlassdoor({
|
|
768
|
+
ticker: String(args.ticker ?? ""),
|
|
769
|
+
days: args.days != null ? Number(args.days) : undefined,
|
|
770
|
+
minReviews: args.min_reviews != null ? Number(args.min_reviews) : undefined,
|
|
771
|
+
}));
|
|
772
|
+
},
|
|
773
|
+
stocktwits_asx_scraper: async (args) => {
|
|
774
|
+
if (args.test)
|
|
775
|
+
return jsonResult(stocktwitsAsx.sampleData(String(args.ticker ?? "BHP")));
|
|
776
|
+
return jsonResult(await stocktwitsAsx.scrapeStocktwits({
|
|
777
|
+
ticker: String(args.ticker ?? ""),
|
|
778
|
+
days: args.days != null ? Number(args.days) : undefined,
|
|
779
|
+
format: args.format,
|
|
780
|
+
}));
|
|
781
|
+
},
|
|
782
|
+
// ── Financial & IP Precursors ──────────────────────────────────
|
|
783
|
+
asx_options_flow: async (args) => {
|
|
784
|
+
if (args.test)
|
|
785
|
+
return jsonResult(asxOptions.sampleData(String(args.ticker ?? "BHP")));
|
|
786
|
+
return jsonResult(await asxOptions.fetchOptionsFlow({
|
|
787
|
+
ticker: String(args.ticker ?? ""),
|
|
788
|
+
days: args.days != null ? Number(args.days) : undefined,
|
|
789
|
+
threshold: args.threshold != null ? Number(args.threshold) : undefined,
|
|
790
|
+
}));
|
|
791
|
+
},
|
|
792
|
+
ip_australia_patent_scraper: async (args) => {
|
|
793
|
+
const tickerOrCompany = String(args.company ?? args.ticker ?? "CSL");
|
|
794
|
+
if (args.test)
|
|
795
|
+
return jsonResult(ipAustralia.sampleData(tickerOrCompany));
|
|
796
|
+
return jsonResult(await ipAustralia.scrapeIpAustralia({
|
|
797
|
+
company: args.company,
|
|
798
|
+
ticker: args.ticker,
|
|
799
|
+
days: args.days != null ? Number(args.days) : undefined,
|
|
800
|
+
status: args.status,
|
|
801
|
+
}));
|
|
802
|
+
},
|
|
726
803
|
};
|
|
727
804
|
export const TS_TOOL_NAMES = new Set(Object.keys(TS_TOOL_REGISTRY));
|
|
728
805
|
export async function runTsTool(name, args) {
|