openplanter 0.2.3 → 0.2.5

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.
@@ -2,23 +2,20 @@
2
2
  * bulk-asx-announcements.ts — Bulk ASX Announcement Fetcher
3
3
  *
4
4
  * Fetches recent ASX announcements (Appendix 3Y director trades, 4C cashflow
5
- * reports, 3B issue of securities) for multiple tickers. Returns structured
6
- * announcement records with URLs for PDF downloads.
5
+ * reports, 3B issue of securities) for multiple tickers via the ASX Markit
6
+ * Digital API. Returns structured announcement records.
7
7
  */
8
- import { fetchJson, normalizeTicker, sleep, DEFAULT_USER_AGENT, } from "./shared.js";
8
+ import { fetchJson, normalizeTicker, isValidTicker, sleep, DEFAULT_USER_AGENT, } from "./shared.js";
9
9
  // ── Constants ───────────────────────────────────────────────────
10
- const ASX_ANNOUNCEMENTS_API = "https://www.asx.com.au/asx/1/company/{ticker}/announcements";
11
- const ASX_BASE_URL = "https://www.asx.com.au";
10
+ const ASX_MARKIT_API = "https://asx.api.markitdigital.com/asx-research/1.0/companies/{ticker}/announcements";
12
11
  const REQUEST_DELAY_MS = 1000;
13
- const MAX_PAGES_PER_TICKER = 10;
12
+ const MAX_PAGES_PER_TICKER = 5;
14
13
  const PAGE_SIZE = 20;
15
- /** All supported type codes. */
16
14
  export const ALL_TYPE_CODES = [
17
15
  "3Y",
18
16
  "4C",
19
17
  "3B",
20
18
  ];
21
- /** Mapping of announcement type codes to search keywords. */
22
19
  const TYPE_KEYWORDS = {
23
20
  "3Y": ["appendix 3y", "change of director", "director's interest"],
24
21
  "4C": [
@@ -29,71 +26,43 @@ const TYPE_KEYWORDS = {
29
26
  ],
30
27
  "3B": ["appendix 3b", "issue of securities", "new issue"],
31
28
  };
29
+ const TYPE_ANNOUNCEMENT_TYPES = {
30
+ "3Y": ["DIRECTOR APPOINTMENT/RESIGNATION", "CHANGE IN SUBSTANTIAL HOLDING"],
31
+ "4C": ["QUARTERLY ACTIVITIES REPORT", "QUARTERLY CASHFLOW REPORT"],
32
+ "3B": ["ISSUE OF SECURITIES"],
33
+ };
32
34
  // ── Helpers ─────────────────────────────────────────────────────
33
- /**
34
- * Parse common ASX date strings into YYYY-MM-DD format.
35
- * Returns the original string if no format matches.
36
- */
37
35
  function isoDate(raw) {
38
36
  const trimmed = raw.trim();
39
- const formats = [
40
- {
41
- re: /^(\d{4})-(\d{2})-(\d{2})T/,
42
- parse: (m) => new Date(trimmed),
43
- },
44
- {
45
- re: /^(\d{4})-(\d{2})-(\d{2})$/,
46
- parse: (m) => new Date(+m[1], +m[2] - 1, +m[3]),
47
- },
48
- {
49
- re: /^(\d{1,2})\/(\d{1,2})\/(\d{4})$/,
50
- parse: (m) => new Date(+m[3], +m[2] - 1, +m[1]),
51
- },
52
- ];
53
- for (const fmt of formats) {
54
- const m = trimmed.match(fmt.re);
55
- if (m) {
56
- const d = fmt.parse(m);
57
- if (!isNaN(d.getTime())) {
58
- return d.toISOString().slice(0, 10);
59
- }
60
- }
37
+ const d = new Date(trimmed);
38
+ if (!isNaN(d.getTime())) {
39
+ return d.toISOString().slice(0, 10);
61
40
  }
62
41
  return trimmed;
63
42
  }
64
- /**
65
- * Return the matched type code if the announcement title contains any of
66
- * the keywords for the requested types, else null.
67
- */
68
- function matchAnnouncementType(title, requestedTypes) {
69
- const lower = title.toLowerCase();
43
+ function matchAnnouncementType(headline, announcementType, requestedTypes) {
44
+ const lowerHeadline = headline.toLowerCase();
45
+ const upperType = announcementType.toUpperCase();
70
46
  for (const typeCode of requestedTypes) {
47
+ const typeMatches = TYPE_ANNOUNCEMENT_TYPES[typeCode] ?? [];
48
+ for (const tm of typeMatches) {
49
+ if (upperType.includes(tm))
50
+ return typeCode;
51
+ }
71
52
  const keywords = TYPE_KEYWORDS[typeCode] ?? [];
72
53
  for (const kw of keywords) {
73
- if (lower.includes(kw))
54
+ if (lowerHeadline.includes(kw))
74
55
  return typeCode;
75
56
  }
76
57
  }
77
58
  return null;
78
59
  }
79
- /**
80
- * Build the full announcement URL from the API response field.
81
- * Returns the URL as-is if it is already absolute.
82
- */
83
- function resolveUrl(docUrl) {
84
- if (!docUrl)
60
+ function buildDocumentUrl(documentKey) {
61
+ if (!documentKey)
85
62
  return "";
86
- if (docUrl.startsWith("http"))
87
- return docUrl;
88
- return ASX_BASE_URL + docUrl;
63
+ return `https://www.asx.com.au/asx/v2/statistics/displayAnnouncement.do?display=pdf&idsId=${documentKey}`;
89
64
  }
90
65
  // ── Core Fetching ───────────────────────────────────────────────
91
- /**
92
- * Fetch announcements for a single ticker from the ASX API.
93
- *
94
- * Paginates up to {@link MAX_PAGES_PER_TICKER} pages and returns records
95
- * whose titles match the requested types within the date window.
96
- */
97
66
  export async function fetchAnnouncementsForTicker(ticker, opts = {}) {
98
67
  const requestedTypes = opts.types ?? [...ALL_TYPE_CODES];
99
68
  const daysBack = opts.daysBack ?? 90;
@@ -101,73 +70,61 @@ export async function fetchAnnouncementsForTicker(ticker, opts = {}) {
101
70
  const cutoff = new Date(Date.now() - daysBack * 24 * 60 * 60 * 1000);
102
71
  const results = [];
103
72
  const normalised = normalizeTicker(ticker);
104
- const url = ASX_ANNOUNCEMENTS_API.replace("{ticker}", normalised);
105
- for (let page = 1; page <= MAX_PAGES_PER_TICKER; page++) {
106
- const params = new URLSearchParams({
107
- count: String(PAGE_SIZE),
108
- market_sensitive: "false",
109
- });
110
- if (page > 1) {
111
- params.set("start", String((page - 1) * PAGE_SIZE));
112
- }
113
- const fullUrl = `${url}?${params.toString()}`;
73
+ if (!isValidTicker(normalised)) {
74
+ console.warn(`[warn] Skipping invalid ticker: ${ticker}`);
75
+ return [];
76
+ }
77
+ const baseUrl = ASX_MARKIT_API.replace("{ticker}", normalised);
78
+ for (let page = 0; page < MAX_PAGES_PER_TICKER; page++) {
79
+ const start = page * PAGE_SIZE;
80
+ const url = `${baseUrl}?count=${PAGE_SIZE}&start=${start}`;
114
81
  let data;
115
82
  try {
116
- data = await fetchJson(fullUrl, {
83
+ data = await fetchJson(url, {
117
84
  delay: delayMs / 1000,
118
85
  userAgent: DEFAULT_USER_AGENT,
119
86
  });
120
87
  }
121
88
  catch {
122
- // API error – stop paging for this ticker
123
89
  break;
124
90
  }
125
- const announcements = Array.isArray(data)
126
- ? data
127
- : data.data ?? [];
128
- if (announcements.length === 0)
91
+ const items = data.data?.items ?? [];
92
+ if (items.length === 0)
129
93
  break;
130
94
  let reachedCutoff = false;
131
- for (const ann of announcements) {
132
- const annDateRaw = ann.document_date ?? ann.date ?? "";
95
+ for (const item of items) {
96
+ const annDateRaw = item.date ?? "";
133
97
  const annDate = isoDate(annDateRaw);
134
- const title = ann.header ?? ann.title ?? "";
135
- const docUrl = resolveUrl(ann.url ?? ann.document_url ?? "");
136
- // Check date cutoff
98
+ const headline = item.headline ?? "";
99
+ const annType = item.announcementType ?? "";
100
+ const docKey = item.documentKey ?? "";
101
+ const docUrl = item.url || buildDocumentUrl(docKey);
137
102
  const annDt = new Date(annDate);
138
103
  if (!isNaN(annDt.getTime()) && annDt < cutoff) {
139
104
  reachedCutoff = true;
140
105
  break;
141
106
  }
142
- // Match type
143
- const matchedType = matchAnnouncementType(title, requestedTypes);
107
+ const matchedType = matchAnnouncementType(headline, annType, requestedTypes);
144
108
  if (matchedType === null)
145
109
  continue;
146
- const fileSize = ann.size ?? ann.number_of_pages ?? null;
110
+ const fileSize = item.fileSize ?? null;
147
111
  results.push({
148
112
  ticker: normalised,
149
113
  announcement_type: matchedType,
150
114
  date: annDate || null,
151
- title,
115
+ title: headline,
152
116
  url: docUrl,
153
- file_size: fileSize !== null ? String(fileSize) : null,
117
+ file_size: fileSize,
154
118
  });
155
119
  }
156
- if (reachedCutoff || announcements.length < PAGE_SIZE)
120
+ if (reachedCutoff || items.length < PAGE_SIZE)
157
121
  break;
158
- // Rate limit between pages
159
- if (page < MAX_PAGES_PER_TICKER) {
122
+ if (page < MAX_PAGES_PER_TICKER - 1) {
160
123
  await sleep(delayMs);
161
124
  }
162
125
  }
163
126
  return results;
164
127
  }
165
- /**
166
- * Bulk-fetch announcements for multiple tickers.
167
- *
168
- * Fetches sequentially with rate-limiting between tickers to respect
169
- * ASX API fair-use expectations.
170
- */
171
128
  export async function fetchBulkAnnouncements(tickers, opts = {}) {
172
129
  const delayMs = opts.delayMs ?? REQUEST_DELAY_MS;
173
130
  const allRecords = [];
@@ -184,16 +141,12 @@ export async function fetchBulkAnnouncements(tickers, opts = {}) {
184
141
  if (opts.onProgress) {
185
142
  opts.onProgress(ticker, records.length, allRecords.length);
186
143
  }
187
- // Rate limit between tickers
188
144
  if (i < tickers.length - 1) {
189
145
  await sleep(delayMs);
190
146
  }
191
147
  }
192
148
  return allRecords;
193
149
  }
194
- /**
195
- * Parse a comma-separated ticker string into an array of normalised tickers.
196
- */
197
150
  export function parseTickers(raw) {
198
151
  return raw
199
152
  .split(",")
@@ -1 +1 @@
1
- {"version":3,"file":"bulk-asx-announcements.js","sourceRoot":"","sources":["../../src/investigation-tools/bulk-asx-announcements.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bulk-asx-announcements.js","sourceRoot":"","sources":["../../src/investigation-tools/bulk-asx-announcements.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,9 @@
1
1
  /**
2
2
  * price-fetcher.ts – ASX OHLCV price fetcher with anomaly detection.
3
3
  *
4
- * Fetches historical OHLCV data from Yahoo Finance for Australian (ASX)
4
+ * Fetches historical OHLCV data via yahoo-finance2 for Australian (ASX)
5
5
  * tickers, computes derived metrics, and flags trading anomalies.
6
6
  */
7
- /** Raw OHLCV bar from Yahoo Finance. */
8
7
  export interface OhlcvBar {
9
8
  date: string;
10
9
  open: number;
@@ -13,7 +12,6 @@ export interface OhlcvBar {
13
12
  close: number;
14
13
  volume: number;
15
14
  }
16
- /** OHLCV bar with computed metrics and anomaly flags. */
17
15
  export interface PriceMetrics {
18
16
  ticker: string;
19
17
  date: string;
@@ -28,7 +26,6 @@ export interface PriceMetrics {
28
26
  gapPct: number | null;
29
27
  anomalyFlags: string[];
30
28
  }
31
- /** Per-ticker summary of the requested period. */
32
29
  export interface TickerSummary {
33
30
  ticker: string;
34
31
  avgVolume: number;
@@ -51,31 +48,8 @@ export declare const ROLLING_VOLATILITY_WINDOW = 20;
51
48
  export declare const VOLATILITY_BASELINE_WINDOW = 60;
52
49
  export declare const VALID_PERIODS: Set<string>;
53
50
  export declare const VALID_INTERVALS: Set<string>;
54
- /**
55
- * Fetch OHLCV data from Yahoo Finance for the given ASX tickers.
56
- *
57
- * Each ticker is automatically suffixed with `.AX` if needed.
58
- * Returns a mapping of clean ticker → OhlcvBar[].
59
- */
60
51
  export declare function fetchOhlcv(tickers: string[], period?: string, interval?: string): Promise<Map<string, OhlcvBar[]>>;
61
- /**
62
- * Compute derived metrics and anomaly flags for an array of OHLCV bars.
63
- *
64
- * Metrics:
65
- * - `dailyReturnPct`: percentage change in close vs previous close
66
- * - `volumeRatio`: current volume / 20-day rolling mean volume
67
- * - `volatility`: 20-day rolling sample std of daily returns
68
- * - `gapPct`: percentage gap between open and previous close
69
- * - `anomalyFlags`: list of triggered threshold names
70
- */
71
52
  export declare function computeMetrics(ticker: string, bars: OhlcvBar[]): PriceMetrics[];
72
- /**
73
- * Merge per-ticker data into a flat array of PriceMetrics.
74
- * Optionally filter to only rows with at least one anomaly flag.
75
- */
76
53
  export declare function buildOutput(allData: Map<string, OhlcvBar[]>, anomaliesOnly?: boolean): PriceMetrics[];
77
- /**
78
- * Produce a per-ticker summary from OHLCV data.
79
- */
80
54
  export declare function buildSummary(allData: Map<string, OhlcvBar[]>): TickerSummary[];
81
55
  //# sourceMappingURL=price-fetcher.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"price-fetcher.d.ts","sourceRoot":"","sources":["../../src/investigation-tools/price-fetcher.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,wCAAwC;AACxC,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,yDAAyD;AACzD,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,kDAAkD;AAClD,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACtB;AAuBD,eAAO,MAAM,kBAAkB;;;;;;;CAOrB,CAAC;AAEX,eAAO,MAAM,qBAAqB,KAAK,CAAC;AACxC,eAAO,MAAM,yBAAyB,KAAK,CAAC;AAC5C,eAAO,MAAM,0BAA0B,KAAK,CAAC;AAE7C,eAAO,MAAM,aAAa,aAExB,CAAC;AAEH,eAAO,MAAM,eAAe,aAG1B,CAAC;AA+FH;;;;;GAKG;AACH,wBAAsB,UAAU,CAC9B,OAAO,EAAE,MAAM,EAAE,EACjB,MAAM,GAAE,MAAc,EACtB,QAAQ,GAAE,MAAa,GACtB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,CAiClC;AAID;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,QAAQ,EAAE,GACf,YAAY,EAAE,CAsFhB;AAID;;;GAGG;AACH,wBAAgB,WAAW,CACzB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,EAChC,aAAa,GAAE,OAAe,GAC7B,YAAY,EAAE,CAYhB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,GAC/B,aAAa,EAAE,CA0CjB"}
1
+ {"version":3,"file":"price-fetcher.d.ts","sourceRoot":"","sources":["../../src/investigation-tools/price-fetcher.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAaH,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACtB;AAID,eAAO,MAAM,kBAAkB;;;;;;;CAOrB,CAAC;AAEX,eAAO,MAAM,qBAAqB,KAAK,CAAC;AACxC,eAAO,MAAM,yBAAyB,KAAK,CAAC;AAC5C,eAAO,MAAM,0BAA0B,KAAK,CAAC;AAE7C,eAAO,MAAM,aAAa,aAExB,CAAC;AAEH,eAAO,MAAM,eAAe,aAG1B,CAAC;AAqEH,wBAAsB,UAAU,CAC9B,OAAO,EAAE,MAAM,EAAE,EACjB,MAAM,GAAE,MAAc,EACtB,QAAQ,GAAE,MAAa,GACtB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,CA2ClC;AAMD,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,QAAQ,EAAE,GACf,YAAY,EAAE,CAgFhB;AAID,wBAAgB,WAAW,CACzB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,EAChC,aAAa,GAAE,OAAe,GAC7B,YAAY,EAAE,CAYhB;AAED,wBAAgB,YAAY,CAC1B,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,GAC/B,aAAa,EAAE,CA0CjB"}
@@ -1,10 +1,12 @@
1
1
  /**
2
2
  * price-fetcher.ts – ASX OHLCV price fetcher with anomaly detection.
3
3
  *
4
- * Fetches historical OHLCV data from Yahoo Finance for Australian (ASX)
4
+ * Fetches historical OHLCV data via yahoo-finance2 for Australian (ASX)
5
5
  * tickers, computes derived metrics, and flags trading anomalies.
6
6
  */
7
- import { fetchJson, yahooTicker, normalizeTicker, } from "./shared.js";
7
+ import YahooFinance from "yahoo-finance2";
8
+ import { yahooTicker, normalizeTicker, isValidTicker, } from "./shared.js";
9
+ const yf = new YahooFinance();
8
10
  // ── Constants ────────────────────────────────────────────────────
9
11
  export const ANOMALY_THRESHOLDS = {
10
12
  volume_spike: 2.0,
@@ -25,10 +27,6 @@ export const VALID_INTERVALS = new Set([
25
27
  "1d", "5d", "1wk", "1mo", "3mo",
26
28
  ]);
27
29
  // ── Rolling window helpers ───────────────────────────────────────
28
- /**
29
- * Compute the rolling mean over the last `window` entries ending at `index`.
30
- * Uses min_periods=1 (returns a value as long as at least one valid entry exists).
31
- */
32
30
  function rollingMean(values, index, window) {
33
31
  const start = Math.max(0, index - window + 1);
34
32
  let sum = 0;
@@ -42,10 +40,6 @@ function rollingMean(values, index, window) {
42
40
  }
43
41
  return count > 0 ? sum / count : null;
44
42
  }
45
- /**
46
- * Compute the rolling sample standard deviation over the last `window`
47
- * entries ending at `index`. Requires at least 2 valid values (ddof=1).
48
- */
49
43
  function rollingStd(values, index, window) {
50
44
  const start = Math.max(0, index - window + 1);
51
45
  const valid = [];
@@ -68,57 +62,49 @@ function round4(n) {
68
62
  return Math.round(n * 10000) / 10000;
69
63
  }
70
64
  // ── Data fetching ────────────────────────────────────────────────
71
- /**
72
- * Parse a Yahoo Finance chart API JSON response into an array of OhlcvBar.
73
- */
74
- function parseChartResponse(data) {
75
- const result = data.chart.result;
76
- if (!result || result.length === 0)
77
- return [];
78
- const { timestamp, indicators } = result[0];
79
- const quote = indicators.quote[0];
80
- const bars = [];
81
- for (let i = 0; i < timestamp.length; i++) {
82
- const o = quote.open[i];
83
- const h = quote.high[i];
84
- const l = quote.low[i];
85
- const c = quote.close[i];
86
- const v = quote.volume[i];
87
- // Skip bars with any null OHLCV value
88
- if (o == null || h == null || l == null || c == null || v == null)
89
- continue;
90
- const dt = new Date(timestamp[i] * 1000);
91
- bars.push({
92
- date: dt.toISOString().slice(0, 10),
93
- open: o,
94
- high: h,
95
- low: l,
96
- close: c,
97
- volume: v,
98
- });
65
+ function periodToDate(period) {
66
+ const now = new Date();
67
+ const map = {
68
+ "1d": 1, "5d": 5, "1mo": 30, "3mo": 90, "6mo": 180,
69
+ "1y": 365, "2y": 730, "5y": 1825, "10y": 3650,
70
+ };
71
+ const days = map[period];
72
+ if (days) {
73
+ return new Date(now.getTime() - days * 24 * 60 * 60 * 1000);
99
74
  }
100
- return bars;
75
+ if (period === "ytd") {
76
+ return new Date(now.getFullYear(), 0, 1);
77
+ }
78
+ // "max"
79
+ return new Date("1970-01-01");
101
80
  }
102
- /**
103
- * Fetch OHLCV data from Yahoo Finance for the given ASX tickers.
104
- *
105
- * Each ticker is automatically suffixed with `.AX` if needed.
106
- * Returns a mapping of clean ticker → OhlcvBar[].
107
- */
108
81
  export async function fetchOhlcv(tickers, period = "3mo", interval = "1d") {
109
82
  const results = new Map();
110
83
  for (const raw of tickers) {
84
+ if (!isValidTicker(raw)) {
85
+ console.warn(`[warn] Skipping invalid ticker: ${raw}`);
86
+ continue;
87
+ }
111
88
  const symbol = yahooTicker(raw);
112
89
  const clean = normalizeTicker(raw);
113
- const url = `https://query1.finance.yahoo.com/v8/finance/chart/${encodeURIComponent(symbol)}` +
114
- `?range=${period}&interval=${interval}`;
115
90
  try {
116
- const data = await fetchJson(url, { delay: 0.5 });
117
- if (data.chart.error) {
118
- console.warn(`[warn] Yahoo API error for ${symbol}: ${data.chart.error.description}`);
119
- continue;
91
+ const chartResult = await yf.chart(symbol, {
92
+ period1: periodToDate(period),
93
+ interval: interval,
94
+ });
95
+ const bars = [];
96
+ for (const q of chartResult.quotes) {
97
+ if (q.open == null || q.high == null || q.low == null || q.close == null || q.volume == null)
98
+ continue;
99
+ bars.push({
100
+ date: q.date.toISOString().slice(0, 10),
101
+ open: q.open,
102
+ high: q.high,
103
+ low: q.low,
104
+ close: q.close,
105
+ volume: q.volume,
106
+ });
120
107
  }
121
- const bars = parseChartResponse(data);
122
108
  if (bars.length === 0) {
123
109
  console.warn(`[warn] No data returned for ${symbol}. Skipping.`);
124
110
  continue;
@@ -126,33 +112,21 @@ export async function fetchOhlcv(tickers, period = "3mo", interval = "1d") {
126
112
  results.set(clean, bars);
127
113
  }
128
114
  catch (err) {
129
- console.warn(`[error] Failed to fetch ${symbol}: ${err}`);
115
+ console.warn(`[warn] Failed to fetch ${symbol}: ${err}`);
130
116
  }
131
117
  }
132
118
  return results;
133
119
  }
134
120
  // ── Derived metrics & anomaly detection ──────────────────────────
135
- /**
136
- * Compute derived metrics and anomaly flags for an array of OHLCV bars.
137
- *
138
- * Metrics:
139
- * - `dailyReturnPct`: percentage change in close vs previous close
140
- * - `volumeRatio`: current volume / 20-day rolling mean volume
141
- * - `volatility`: 20-day rolling sample std of daily returns
142
- * - `gapPct`: percentage gap between open and previous close
143
- * - `anomalyFlags`: list of triggered threshold names
144
- */
145
121
  export function computeMetrics(ticker, bars) {
146
122
  if (bars.length === 0)
147
123
  return [];
148
- // Pre-compute daily return percentages
149
124
  const dailyReturns = bars.map((bar, i) => {
150
125
  if (i === 0)
151
126
  return null;
152
127
  const prev = bars[i - 1].close;
153
128
  return prev !== 0 ? ((bar.close - prev) / prev) * 100.0 : null;
154
129
  });
155
- // Pre-compute gap percentages
156
130
  const gapPcts = bars.map((bar, i) => {
157
131
  if (i === 0)
158
132
  return null;
@@ -161,11 +135,8 @@ export function computeMetrics(ticker, bars) {
161
135
  ? ((bar.open - prevClose) / prevClose) * 100.0
162
136
  : null;
163
137
  });
164
- // Volume array for rolling calculations
165
138
  const volumes = bars.map((b) => b.volume);
166
- // Volatilities (rolling std of daily returns)
167
139
  const volatilities = bars.map((_, i) => rollingStd(dailyReturns, i, ROLLING_VOLATILITY_WINDOW));
168
- // Volatility baseline (60-day rolling mean of volatilities)
169
140
  const volBaseline = bars.map((_, i) => rollingMean(volatilities, i, VOLATILITY_BASELINE_WINDOW));
170
141
  return bars.map((bar, i) => {
171
142
  const ret = dailyReturns[i];
@@ -174,7 +145,6 @@ export function computeMetrics(ticker, bars) {
174
145
  const vol = volatilities[i];
175
146
  const gp = gapPcts[i];
176
147
  const volBl = volBaseline[i];
177
- // Anomaly flags
178
148
  const flags = [];
179
149
  if (isFiniteNum(volumeRatio) &&
180
150
  volumeRatio > ANOMALY_THRESHOLDS.volume_spike) {
@@ -215,10 +185,6 @@ export function computeMetrics(ticker, bars) {
215
185
  });
216
186
  }
217
187
  // ── Output builders ──────────────────────────────────────────────
218
- /**
219
- * Merge per-ticker data into a flat array of PriceMetrics.
220
- * Optionally filter to only rows with at least one anomaly flag.
221
- */
222
188
  export function buildOutput(allData, anomaliesOnly = false) {
223
189
  const rows = [];
224
190
  for (const [ticker, bars] of allData) {
@@ -229,9 +195,6 @@ export function buildOutput(allData, anomaliesOnly = false) {
229
195
  }
230
196
  return rows;
231
197
  }
232
- /**
233
- * Produce a per-ticker summary from OHLCV data.
234
- */
235
198
  export function buildSummary(allData) {
236
199
  const summaries = [];
237
200
  for (const [ticker, bars] of allData) {
@@ -1 +1 @@
1
- {"version":3,"file":"price-fetcher.js","sourceRoot":"","sources":["../../src/investigation-tools/price-fetcher.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"price-fetcher.js","sourceRoot":"","sources":["../../src/investigation-tools/price-fetcher.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,7 @@ export declare function sentimentScore(text: string): number;
10
10
  export declare function sentimentLabel(score: number): string;
11
11
  export declare function isRumor(text: string): boolean;
12
12
  export declare function normalizeTicker(ticker: string): string;
13
+ export declare function isValidTicker(ticker: string): boolean;
13
14
  export declare function yahooTicker(ticker: string): string;
14
15
  export declare function normalizeCompany(name: string): string;
15
16
  export declare function normalizePerson(name: string): string;
@@ -20,7 +21,7 @@ export declare function isAbn(value: string): boolean;
20
21
  export declare function levenshtein(a: string, b: string): number;
21
22
  export declare function fuzzyRatio(a: string, b: string): number;
22
23
  export declare function tokenSortRatio(a: string, b: string): number;
23
- export declare const DEFAULT_USER_AGENT = "Mozilla/5.0 (compatible; OpenPlanter/0.1; +https://github.com/openplanter)";
24
+ export declare const DEFAULT_USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36";
24
25
  export declare function fetchWithDelay(url: string, opts?: {
25
26
  delay?: number;
26
27
  userAgent?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/investigation-tools/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,IAAI,WAAW,EAAE,MAAM,SAAS,CAAC;AAE9C,MAAM,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;AAkCxD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAWnD;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,IAAI,GAAG,MAAM,CAE7C;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,MAAM,CAIpD;AAID,eAAO,MAAM,gBAAgB,UAG5B,CAAC;AAEF,eAAO,MAAM,gBAAgB,UAG5B,CAAC;AAEF,eAAO,MAAM,cAAc,UAI1B,CAAC;AAEF,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAUnD;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIpD;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAG7C;AAOD,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAKtD;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAGlD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAWpD;AAMD,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAOhD;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG7C;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE5C;AAID,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAiBxD;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAKvD;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAI3D;AAID,eAAO,MAAM,kBAAkB,+EAC+C,CAAC;AAE/E,wBAAsB,cAAc,CAClC,GAAG,EAAE,MAAM,EACX,IAAI,GAAE;IACJ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7B,GACL,OAAO,CAAC,QAAQ,CAAC,CAgBnB;AAED,wBAAsB,SAAS,CAC7B,GAAG,EAAE,MAAM,EACX,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GAChD,OAAO,CAAC,UAAU,CAAC,CAKrB;AAED,wBAAsB,SAAS,CAAC,CAAC,GAAG,OAAO,EACzC,GAAG,EAAE,MAAM,EACX,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GAChD,OAAO,CAAC,CAAC,CAAC,CAIZ;AAID,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/C;AAED,wBAAgB,MAAM,IAAI,MAAM,CAE/B"}
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/investigation-tools/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,IAAI,WAAW,EAAE,MAAM,SAAS,CAAC;AAE9C,MAAM,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;AAkCxD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAWnD;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,IAAI,GAAG,MAAM,CAE7C;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,MAAM,CAIpD;AAID,eAAO,MAAM,gBAAgB,UAG5B,CAAC;AAEF,eAAO,MAAM,gBAAgB,UAG5B,CAAC;AAEF,eAAO,MAAM,cAAc,UAI1B,CAAC;AAEF,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAUnD;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIpD;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAG7C;AAOD,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAKtD;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAGrD;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAGlD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAWpD;AAMD,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAOhD;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG7C;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE5C;AAID,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAiBxD;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAKvD;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAI3D;AAID,eAAO,MAAM,kBAAkB,oHACoF,CAAC;AAEpH,wBAAsB,cAAc,CAClC,GAAG,EAAE,MAAM,EACX,IAAI,GAAE;IACJ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7B,GACL,OAAO,CAAC,QAAQ,CAAC,CAgBnB;AAED,wBAAsB,SAAS,CAC7B,GAAG,EAAE,MAAM,EACX,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GAChD,OAAO,CAAC,UAAU,CAAC,CAKrB;AAED,wBAAsB,SAAS,CAAC,CAAC,GAAG,OAAO,EACzC,GAAG,EAAE,MAAM,EACX,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GAChD,OAAO,CAAC,CAAC,CAAC,CAIZ;AAID,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/C;AAED,wBAAgB,MAAM,IAAI,MAAM,CAE/B"}