openplanter 0.1.2 → 0.2.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 (92) hide show
  1. package/dist/builder.d.ts.map +1 -1
  2. package/dist/builder.js +87 -5
  3. package/dist/builder.js.map +1 -1
  4. package/dist/credentials.d.ts.map +1 -1
  5. package/dist/credentials.js +4 -1
  6. package/dist/credentials.js.map +1 -1
  7. package/dist/engine.d.ts.map +1 -1
  8. package/dist/engine.js +5 -0
  9. package/dist/engine.js.map +1 -1
  10. package/dist/investigation-tools/advanced-analytics.d.ts +130 -0
  11. package/dist/investigation-tools/advanced-analytics.d.ts.map +1 -0
  12. package/dist/investigation-tools/advanced-analytics.js +340 -0
  13. package/dist/investigation-tools/advanced-analytics.js.map +1 -0
  14. package/dist/investigation-tools/blockchain-scanner.d.ts +83 -0
  15. package/dist/investigation-tools/blockchain-scanner.d.ts.map +1 -0
  16. package/dist/investigation-tools/blockchain-scanner.js +194 -0
  17. package/dist/investigation-tools/blockchain-scanner.js.map +1 -0
  18. package/dist/investigation-tools/crypto-ecosystem.d.ts +83 -0
  19. package/dist/investigation-tools/crypto-ecosystem.d.ts.map +1 -0
  20. package/dist/investigation-tools/crypto-ecosystem.js +124 -0
  21. package/dist/investigation-tools/crypto-ecosystem.js.map +1 -0
  22. package/dist/investigation-tools/dexscreener-pairs.d.ts +41 -0
  23. package/dist/investigation-tools/dexscreener-pairs.d.ts.map +1 -0
  24. package/dist/investigation-tools/dexscreener-pairs.js +60 -0
  25. package/dist/investigation-tools/dexscreener-pairs.js.map +1 -0
  26. package/dist/investigation-tools/document-processing.d.ts +78 -0
  27. package/dist/investigation-tools/document-processing.d.ts.map +1 -0
  28. package/dist/investigation-tools/document-processing.js +252 -0
  29. package/dist/investigation-tools/document-processing.js.map +1 -0
  30. package/dist/investigation-tools/dune-analytics.d.ts +47 -0
  31. package/dist/investigation-tools/dune-analytics.d.ts.map +1 -0
  32. package/dist/investigation-tools/dune-analytics.js +160 -0
  33. package/dist/investigation-tools/dune-analytics.js.map +1 -0
  34. package/dist/investigation-tools/global-registries.d.ts +86 -0
  35. package/dist/investigation-tools/global-registries.d.ts.map +1 -0
  36. package/dist/investigation-tools/global-registries.js +212 -0
  37. package/dist/investigation-tools/global-registries.js.map +1 -0
  38. package/dist/investigation-tools/government-records.d.ts +85 -0
  39. package/dist/investigation-tools/government-records.d.ts.map +1 -0
  40. package/dist/investigation-tools/government-records.js +170 -0
  41. package/dist/investigation-tools/government-records.js.map +1 -0
  42. package/dist/investigation-tools/index.d.ts +18 -0
  43. package/dist/investigation-tools/index.d.ts.map +1 -1
  44. package/dist/investigation-tools/index.js +19 -0
  45. package/dist/investigation-tools/index.js.map +1 -1
  46. package/dist/investigation-tools/investigation-automation.d.ts +144 -0
  47. package/dist/investigation-tools/investigation-automation.d.ts.map +1 -0
  48. package/dist/investigation-tools/investigation-automation.js +345 -0
  49. package/dist/investigation-tools/investigation-automation.js.map +1 -0
  50. package/dist/investigation-tools/monitoring-tools.d.ts +102 -0
  51. package/dist/investigation-tools/monitoring-tools.d.ts.map +1 -0
  52. package/dist/investigation-tools/monitoring-tools.js +214 -0
  53. package/dist/investigation-tools/monitoring-tools.js.map +1 -0
  54. package/dist/investigation-tools/political-finance.d.ts +114 -0
  55. package/dist/investigation-tools/political-finance.d.ts.map +1 -0
  56. package/dist/investigation-tools/political-finance.js +205 -0
  57. package/dist/investigation-tools/political-finance.js.map +1 -0
  58. package/dist/investigation-tools/polymarket-markets.d.ts +137 -0
  59. package/dist/investigation-tools/polymarket-markets.d.ts.map +1 -0
  60. package/dist/investigation-tools/polymarket-markets.js +287 -0
  61. package/dist/investigation-tools/polymarket-markets.js.map +1 -0
  62. package/dist/investigation-tools/prediction-markets.d.ts +52 -0
  63. package/dist/investigation-tools/prediction-markets.d.ts.map +1 -0
  64. package/dist/investigation-tools/prediction-markets.js +116 -0
  65. package/dist/investigation-tools/prediction-markets.js.map +1 -0
  66. package/dist/investigation-tools/sec-tools.d.ts +75 -0
  67. package/dist/investigation-tools/sec-tools.d.ts.map +1 -0
  68. package/dist/investigation-tools/sec-tools.js +192 -0
  69. package/dist/investigation-tools/sec-tools.js.map +1 -0
  70. package/dist/investigation-tools/shared-crypto.d.ts +50 -0
  71. package/dist/investigation-tools/shared-crypto.d.ts.map +1 -0
  72. package/dist/investigation-tools/shared-crypto.js +122 -0
  73. package/dist/investigation-tools/shared-crypto.js.map +1 -0
  74. package/dist/investigation-tools/social-intelligence.d.ts +91 -0
  75. package/dist/investigation-tools/social-intelligence.d.ts.map +1 -0
  76. package/dist/investigation-tools/social-intelligence.js +302 -0
  77. package/dist/investigation-tools/social-intelligence.js.map +1 -0
  78. package/dist/investigation-tools/tool-registry.d.ts +12 -0
  79. package/dist/investigation-tools/tool-registry.d.ts.map +1 -0
  80. package/dist/investigation-tools/tool-registry.js +399 -0
  81. package/dist/investigation-tools/tool-registry.js.map +1 -0
  82. package/dist/investigation-tools/wallet-clusterer.d.ts +28 -0
  83. package/dist/investigation-tools/wallet-clusterer.d.ts.map +1 -0
  84. package/dist/investigation-tools/wallet-clusterer.js +179 -0
  85. package/dist/investigation-tools/wallet-clusterer.js.map +1 -0
  86. package/dist/model.d.ts.map +1 -1
  87. package/dist/model.js +1 -1
  88. package/dist/model.js.map +1 -1
  89. package/dist/tool-defs.d.ts.map +1 -1
  90. package/dist/tool-defs.js +301 -0
  91. package/dist/tool-defs.js.map +1 -1
  92. package/package.json +1 -1
@@ -0,0 +1,75 @@
1
+ /**
2
+ * sec-tools.ts — SEC EDGAR tools for insider trades and company filings.
3
+ *
4
+ * Tools: sec_form4_parser, sec_edgar_filer, sec_whistleblower_awards
5
+ */
6
+ import { type Provenance } from "./shared-crypto.js";
7
+ export interface Form4Transaction {
8
+ filerName: string;
9
+ filerCik: string;
10
+ issuerName: string;
11
+ issuerTicker: string;
12
+ transactionDate: string;
13
+ transactionCode: string;
14
+ sharesTraded: number;
15
+ pricePerShare: number;
16
+ totalValue: number;
17
+ sharesOwnedAfter: number;
18
+ directOrIndirect: string;
19
+ filingDate: string;
20
+ accessionNumber: string;
21
+ url: string;
22
+ }
23
+ export interface Form4Result {
24
+ transactions: Form4Transaction[];
25
+ total: number;
26
+ provenance: Provenance;
27
+ }
28
+ export interface EdgarFiling {
29
+ accessionNumber: string;
30
+ formType: string;
31
+ filingDate: string;
32
+ acceptanceDate: string;
33
+ company: string;
34
+ cik: string;
35
+ description: string;
36
+ url: string;
37
+ size: number;
38
+ }
39
+ export interface EdgarResult {
40
+ filings: EdgarFiling[];
41
+ total: number;
42
+ provenance: Provenance;
43
+ }
44
+ export interface WhistleblowerAward {
45
+ date: string;
46
+ amount: number;
47
+ description: string;
48
+ caseType: string;
49
+ }
50
+ export interface WhistleblowerResult {
51
+ awards: WhistleblowerAward[];
52
+ totalAmount: number;
53
+ provenance: Provenance;
54
+ }
55
+ export declare function parseForm4(opts: {
56
+ ticker?: string;
57
+ cik?: string;
58
+ filerName?: string;
59
+ daysBack?: number;
60
+ limit?: number;
61
+ test?: boolean;
62
+ }): Promise<Form4Result>;
63
+ export declare function searchEdgarFilings(opts: {
64
+ query: string;
65
+ formType?: string;
66
+ dateFrom?: string;
67
+ dateTo?: string;
68
+ limit?: number;
69
+ test?: boolean;
70
+ }): Promise<EdgarResult>;
71
+ export declare function fetchWhistleblowerAwards(opts: {
72
+ year?: number;
73
+ test?: boolean;
74
+ }): Promise<WhistleblowerResult>;
75
+ //# sourceMappingURL=sec-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sec-tools.d.ts","sourceRoot":"","sources":["../../src/investigation-tools/sec-tools.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAkB,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAIrE,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,gBAAgB,EAAE,CAAC;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,UAAU,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,UAAU,CAAC;CACxB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,kBAAkB,EAAE,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,UAAU,CAAC;CACxB;AAiED,wBAAsB,UAAU,CAAC,IAAI,EAAE;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,GAAG,OAAO,CAAC,WAAW,CAAC,CAiEvB;AAID,wBAAsB,kBAAkB,CAAC,IAAI,EAAE;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,GAAG,OAAO,CAAC,WAAW,CAAC,CA+BvB;AAID,wBAAsB,wBAAwB,CAAC,IAAI,EAAE;IACnD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAkC/B"}
@@ -0,0 +1,192 @@
1
+ /**
2
+ * sec-tools.ts — SEC EDGAR tools for insider trades and company filings.
3
+ *
4
+ * Tools: sec_form4_parser, sec_edgar_filer, sec_whistleblower_awards
5
+ */
6
+ import { fetchJson, fetchHtml } from "./shared.js";
7
+ import { makeProvenance } from "./shared-crypto.js";
8
+ // ── Constants ────────────────────────────────────────────────────
9
+ const EDGAR_BASE = "https://efts.sec.gov/LATEST";
10
+ const EDGAR_FULL_TEXT = "https://efts.sec.gov/LATEST/search-index";
11
+ const EDGAR_FILINGS = "https://www.sec.gov/cgi-bin/browse-edgar";
12
+ const SEC_USER_AGENT = "OpenPlanter/0.1 (research@openplanter.dev)";
13
+ const FORM4_CODES = {
14
+ P: "Purchase", S: "Sale", A: "Grant/Award", D: "Disposition",
15
+ F: "Tax Withholding", M: "Exercise/Conversion", C: "Conversion",
16
+ G: "Gift", J: "Other", I: "Discretionary", X: "Exercise",
17
+ };
18
+ const MOCK_FORM4 = {
19
+ transactions: [
20
+ {
21
+ filerName: "John C. Smith", filerCik: "0001234567",
22
+ issuerName: "TechCorp Inc", issuerTicker: "TCOR",
23
+ transactionDate: "2026-02-15", transactionCode: "S",
24
+ sharesTraded: 50000, pricePerShare: 45.20, totalValue: 2_260_000,
25
+ sharesOwnedAfter: 150000, directOrIndirect: "D",
26
+ filingDate: "2026-02-17", accessionNumber: "0001234567-26-000042",
27
+ url: "https://www.sec.gov/Archives/edgar/data/0001234567/000123456726000042/form4.xml",
28
+ },
29
+ {
30
+ filerName: "Jane A. Director", filerCik: "0009876543",
31
+ issuerName: "TechCorp Inc", issuerTicker: "TCOR",
32
+ transactionDate: "2026-02-14", transactionCode: "P",
33
+ sharesTraded: 25000, pricePerShare: 43.80, totalValue: 1_095_000,
34
+ sharesOwnedAfter: 275000, directOrIndirect: "D",
35
+ filingDate: "2026-02-16", accessionNumber: "0009876543-26-000015",
36
+ url: "https://www.sec.gov/Archives/edgar/data/0009876543/000987654326000015/form4.xml",
37
+ },
38
+ ],
39
+ total: 2,
40
+ provenance: makeProvenance("sec_edgar", "test://mock", ["test_mode"]),
41
+ };
42
+ const MOCK_FILINGS = {
43
+ filings: [
44
+ {
45
+ accessionNumber: "0001234567-26-000100", formType: "10-K",
46
+ filingDate: "2026-02-10", acceptanceDate: "2026-02-10T16:30:00Z",
47
+ company: "TechCorp Inc", cik: "0001234567",
48
+ description: "Annual report for fiscal year 2025",
49
+ url: "https://www.sec.gov/Archives/edgar/data/0001234567/000123456726000100/tcor-20251231.htm",
50
+ size: 4_200_000,
51
+ },
52
+ ],
53
+ total: 1,
54
+ provenance: makeProvenance("sec_edgar", "test://mock", ["test_mode"]),
55
+ };
56
+ const MOCK_WHISTLEBLOWER = {
57
+ awards: [
58
+ { date: "2026-01-15", amount: 28_000_000, description: "Award for securities fraud tip", caseType: "Securities Fraud" },
59
+ ],
60
+ totalAmount: 28_000_000,
61
+ provenance: makeProvenance("sec_whistleblower", "test://mock", ["test_mode"]),
62
+ };
63
+ // ── sec_form4_parser ─────────────────────────────────────────────
64
+ export async function parseForm4(opts) {
65
+ if (opts.test)
66
+ return MOCK_FORM4;
67
+ const params = new URLSearchParams();
68
+ params.set("forms", "4");
69
+ params.set("dateRange", "custom");
70
+ const endDate = new Date();
71
+ const startDate = new Date();
72
+ startDate.setDate(startDate.getDate() - (opts.daysBack ?? 30));
73
+ params.set("startdt", startDate.toISOString().slice(0, 10));
74
+ params.set("enddt", endDate.toISOString().slice(0, 10));
75
+ if (opts.ticker)
76
+ params.set("q", opts.ticker);
77
+ if (opts.cik)
78
+ params.set("q", opts.cik);
79
+ const url = `${EDGAR_BASE}/search-index?${params}`;
80
+ const headers = { "User-Agent": SEC_USER_AGENT, Accept: "application/json" };
81
+ const resp = await fetch(url, { headers });
82
+ if (!resp.ok) {
83
+ const fullTextUrl = `https://efts.sec.gov/LATEST/search-index?q=%22${opts.ticker ?? opts.cik ?? ""}%22&forms=4&dateRange=custom&startdt=${startDate.toISOString().slice(0, 10)}&enddt=${endDate.toISOString().slice(0, 10)}`;
84
+ const resp2 = await fetch(fullTextUrl, { headers });
85
+ if (!resp2.ok)
86
+ throw new Error(`SEC EDGAR search failed: HTTP ${resp2.status}`);
87
+ }
88
+ const eftsUrl = `https://efts.sec.gov/LATEST/search-index?q=%22${encodeURIComponent(opts.ticker ?? opts.cik ?? "")}%22&forms=4`;
89
+ let data;
90
+ try {
91
+ data = await fetchJson(eftsUrl, { delay: 0.5 });
92
+ }
93
+ catch {
94
+ data = {};
95
+ }
96
+ const hits = (data.hits ?? { hits: [] });
97
+ const filingEntries = Array.isArray(hits.hits) ? hits.hits : [];
98
+ const transactions = [];
99
+ for (const entry of filingEntries.slice(0, opts.limit ?? 50)) {
100
+ const source = (entry._source ?? {});
101
+ const names = String(source.display_names ?? source.entity_name ?? "");
102
+ const ticker = String(source.display_tickers ?? opts.ticker ?? "");
103
+ transactions.push({
104
+ filerName: names,
105
+ filerCik: String(source.entity_id ?? ""),
106
+ issuerName: String(source.display_names ?? ""),
107
+ issuerTicker: ticker.replace(/[[\]"]/g, "").trim(),
108
+ transactionDate: String(source.file_date ?? source.period_of_report ?? ""),
109
+ transactionCode: "S",
110
+ sharesTraded: 0,
111
+ pricePerShare: 0,
112
+ totalValue: 0,
113
+ sharesOwnedAfter: 0,
114
+ directOrIndirect: "D",
115
+ filingDate: String(source.file_date ?? ""),
116
+ accessionNumber: String(source.file_num ?? entry._id ?? ""),
117
+ url: `https://www.sec.gov/cgi-bin/viewer?action=view&cik=${source.entity_id}&type=4`,
118
+ });
119
+ }
120
+ return {
121
+ transactions,
122
+ total: transactions.length,
123
+ provenance: makeProvenance("sec_edgar", eftsUrl),
124
+ };
125
+ }
126
+ // ── sec_edgar_filer ──────────────────────────────────────────────
127
+ export async function searchEdgarFilings(opts) {
128
+ if (opts.test)
129
+ return MOCK_FILINGS;
130
+ const params = new URLSearchParams();
131
+ params.set("q", opts.query);
132
+ if (opts.formType)
133
+ params.set("forms", opts.formType);
134
+ if (opts.dateFrom)
135
+ params.set("startdt", opts.dateFrom);
136
+ if (opts.dateTo)
137
+ params.set("enddt", opts.dateTo);
138
+ const url = `${EDGAR_BASE}/search-index?${params}`;
139
+ const data = await fetchJson(url, { delay: 0.5 });
140
+ const hits = (data.hits ?? { hits: [] });
141
+ const entries = Array.isArray(hits.hits) ? hits.hits : [];
142
+ const filings = entries.slice(0, opts.limit ?? 50).map((entry) => {
143
+ const s = (entry._source ?? {});
144
+ return {
145
+ accessionNumber: String(entry._id ?? ""),
146
+ formType: String(s.form_type ?? s.file_type ?? ""),
147
+ filingDate: String(s.file_date ?? ""),
148
+ acceptanceDate: String(s.file_date ?? ""),
149
+ company: String(s.display_names ?? s.entity_name ?? ""),
150
+ cik: String(s.entity_id ?? ""),
151
+ description: String(s.file_description ?? ""),
152
+ url: `https://www.sec.gov/cgi-bin/viewer?action=view&cik=${s.entity_id}`,
153
+ size: 0,
154
+ };
155
+ });
156
+ return { filings, total: filings.length, provenance: makeProvenance("sec_edgar", url) };
157
+ }
158
+ // ── sec_whistleblower_awards ─────────────────────────────────────
159
+ export async function fetchWhistleblowerAwards(opts) {
160
+ if (opts.test)
161
+ return MOCK_WHISTLEBLOWER;
162
+ const year = opts.year ?? new Date().getFullYear();
163
+ const url = `https://www.sec.gov/whistleblower/pressreleases`;
164
+ try {
165
+ const $ = await fetchHtml(url, { delay: 1.0 });
166
+ const awards = [];
167
+ $("table tbody tr, .press-release-content li").each((_, el) => {
168
+ const text = $(el).text().trim();
169
+ const amountMatch = text.match(/\$([0-9,.]+)\s*(million|billion)?/i);
170
+ const dateMatch = text.match(/(\w+ \d{1,2},? \d{4})/);
171
+ if (amountMatch) {
172
+ let amount = parseFloat(amountMatch[1].replace(/,/g, ""));
173
+ if (amountMatch[2]?.toLowerCase() === "million")
174
+ amount *= 1_000_000;
175
+ if (amountMatch[2]?.toLowerCase() === "billion")
176
+ amount *= 1_000_000_000;
177
+ awards.push({
178
+ date: dateMatch ? dateMatch[1] : "",
179
+ amount,
180
+ description: text.slice(0, 200),
181
+ caseType: text.includes("fraud") ? "Fraud" : "Other",
182
+ });
183
+ }
184
+ });
185
+ const totalAmount = awards.reduce((sum, a) => sum + a.amount, 0);
186
+ return { awards, totalAmount, provenance: makeProvenance("sec_whistleblower", url) };
187
+ }
188
+ catch {
189
+ return { awards: [], totalAmount: 0, provenance: makeProvenance("sec_whistleblower", url, ["fetch_failed"]) };
190
+ }
191
+ }
192
+ //# sourceMappingURL=sec-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sec-tools.js","sourceRoot":"","sources":["../../src/investigation-tools/sec-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * shared-crypto.ts — Shared utilities for blockchain, prediction market, and crypto investigation tools.
3
+ */
4
+ export interface Provenance {
5
+ source: string;
6
+ url?: string;
7
+ fetchedAt: string;
8
+ transforms?: string[];
9
+ }
10
+ export declare function makeProvenance(source: string, url?: string, transforms?: string[]): Provenance;
11
+ export interface ConfidenceScore {
12
+ score: number;
13
+ factors: string[];
14
+ }
15
+ export declare function computeConfidence(factors: Array<[string, number]>): ConfidenceScore;
16
+ export interface PaginatedResult<T> {
17
+ items: T[];
18
+ totalFetched: number;
19
+ hasMore: boolean;
20
+ nextCursor?: string;
21
+ }
22
+ export declare function fetchPaginated<T>(buildUrl: (cursor?: string) => string, extractItems: (data: unknown) => T[], extractCursor: (data: unknown) => string | undefined, opts?: {
23
+ maxPages?: number;
24
+ delay?: number;
25
+ }): Promise<PaginatedResult<T>>;
26
+ export declare function isValidEvmAddress(address: string): boolean;
27
+ export declare function shortenAddress(address: string): string;
28
+ export declare function normalizeAddress(address: string): string;
29
+ export declare function weiToEth(wei: string | bigint): number;
30
+ export declare function usdcToUsd(amount: string | bigint, decimals?: number): number;
31
+ export declare function batchFetch<T>(urls: string[], parser: (resp: Response) => Promise<T>, opts?: {
32
+ concurrency?: number;
33
+ delay?: number;
34
+ }): Promise<Array<{
35
+ url: string;
36
+ result: T | null;
37
+ error?: string;
38
+ }>>;
39
+ export declare function scrapeHtml(url: string, opts?: {
40
+ delay?: number;
41
+ userAgent?: string;
42
+ }): Promise<import("cheerio").CheerioAPI>;
43
+ export declare function zScore(values: number[], index: number, window: number): number | null;
44
+ export declare function rollingMean(values: number[], index: number, window: number): number | null;
45
+ export declare function percentChange(from: number, to: number): number;
46
+ export declare function mockResponse<T>(data: T, source: string): {
47
+ data: T;
48
+ provenance: Provenance;
49
+ };
50
+ //# sourceMappingURL=shared-crypto.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared-crypto.d.ts","sourceRoot":"","sources":["../../src/investigation-tools/shared-crypto.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,122 @@
1
+ /**
2
+ * shared-crypto.ts — Shared utilities for blockchain, prediction market, and crypto investigation tools.
3
+ */
4
+ import { fetchJson, fetchWithDelay, isoNow } from "./shared.js";
5
+ import { load as cheerioLoad } from "cheerio";
6
+ export function makeProvenance(source, url, transforms) {
7
+ return { source, url, fetchedAt: isoNow(), transforms };
8
+ }
9
+ export function computeConfidence(factors) {
10
+ if (factors.length === 0)
11
+ return { score: 0, factors: [] };
12
+ const total = factors.reduce((sum, [, v]) => sum + v, 0);
13
+ const score = Math.min(100, Math.max(0, Math.round(total / factors.length)));
14
+ return { score, factors: factors.map(([f]) => f) };
15
+ }
16
+ export async function fetchPaginated(buildUrl, extractItems, extractCursor, opts = {}) {
17
+ const maxPages = opts.maxPages ?? 10;
18
+ const delay = opts.delay ?? 1.0;
19
+ const items = [];
20
+ let cursor;
21
+ let hasMore = false;
22
+ for (let page = 0; page < maxPages; page++) {
23
+ const url = buildUrl(cursor);
24
+ const data = await fetchJson(url, { delay });
25
+ const pageItems = extractItems(data);
26
+ items.push(...pageItems);
27
+ cursor = extractCursor(data);
28
+ if (!cursor || pageItems.length === 0)
29
+ break;
30
+ if (page === maxPages - 1)
31
+ hasMore = true;
32
+ }
33
+ return { items, totalFetched: items.length, hasMore, nextCursor: cursor };
34
+ }
35
+ // ── Ethereum / Polygon Address Utilities ────────────────────────
36
+ export function isValidEvmAddress(address) {
37
+ return /^0x[0-9a-fA-F]{40}$/.test(address);
38
+ }
39
+ export function shortenAddress(address) {
40
+ if (address.length < 12)
41
+ return address;
42
+ return `${address.slice(0, 6)}...${address.slice(-4)}`;
43
+ }
44
+ export function normalizeAddress(address) {
45
+ return address.toLowerCase().trim();
46
+ }
47
+ export function weiToEth(wei) {
48
+ const val = typeof wei === "string" ? BigInt(wei) : wei;
49
+ return Number(val) / 1e18;
50
+ }
51
+ export function usdcToUsd(amount, decimals = 6) {
52
+ const val = typeof amount === "string" ? BigInt(amount) : amount;
53
+ return Number(val) / 10 ** decimals;
54
+ }
55
+ // ── Rate-Limited Batch Fetch ────────────────────────────────────
56
+ export async function batchFetch(urls, parser, opts = {}) {
57
+ const concurrency = opts.concurrency ?? 3;
58
+ const delay = opts.delay ?? 0.5;
59
+ const results = [];
60
+ const queue = [...urls];
61
+ while (queue.length > 0) {
62
+ const batch = queue.splice(0, concurrency);
63
+ const promises = batch.map(async (url) => {
64
+ try {
65
+ const resp = await fetchWithDelay(url, { delay });
66
+ if (!resp.ok)
67
+ return { url, result: null, error: `HTTP ${resp.status}` };
68
+ const data = await parser(resp);
69
+ return { url, result: data };
70
+ }
71
+ catch (err) {
72
+ return { url, result: null, error: String(err) };
73
+ }
74
+ });
75
+ const batchResults = await Promise.all(promises);
76
+ results.push(...batchResults);
77
+ }
78
+ return results;
79
+ }
80
+ // ── HTML Scrape Helper ──────────────────────────────────────────
81
+ export async function scrapeHtml(url, opts = {}) {
82
+ const resp = await fetchWithDelay(url, opts);
83
+ if (!resp.ok)
84
+ throw new Error(`HTTP ${resp.status} fetching ${url}`);
85
+ const html = await resp.text();
86
+ return cheerioLoad(html);
87
+ }
88
+ // ── Time Series Utilities ───────────────────────────────────────
89
+ export function zScore(values, index, window) {
90
+ const start = Math.max(0, index - window);
91
+ const slice = values.slice(start, index);
92
+ if (slice.length < 2)
93
+ return null;
94
+ const mean = slice.reduce((a, b) => a + b, 0) / slice.length;
95
+ const variance = slice.reduce((a, v) => a + (v - mean) ** 2, 0) / (slice.length - 1);
96
+ const std = Math.sqrt(variance);
97
+ if (std === 0)
98
+ return 0;
99
+ return (values[index] - mean) / std;
100
+ }
101
+ export function rollingMean(values, index, window) {
102
+ const start = Math.max(0, index - window + 1);
103
+ if (index - start + 1 < window)
104
+ return null;
105
+ let sum = 0;
106
+ for (let i = start; i <= index; i++)
107
+ sum += values[i];
108
+ return sum / window;
109
+ }
110
+ export function percentChange(from, to) {
111
+ if (from === 0)
112
+ return 0;
113
+ return ((to - from) / Math.abs(from)) * 100;
114
+ }
115
+ // ── Test Mode Mock Data Helpers ─────────────────────────────────
116
+ export function mockResponse(data, source) {
117
+ return {
118
+ data,
119
+ provenance: makeProvenance(source, "test://mock", ["test_mode"]),
120
+ };
121
+ }
122
+ //# sourceMappingURL=shared-crypto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared-crypto.js","sourceRoot":"","sources":["../../src/investigation-tools/shared-crypto.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,91 @@
1
+ /**
2
+ * social-intelligence.ts — Social media intelligence and sentiment tools.
3
+ *
4
+ * Tools: twitter_market_mentions, reddit_wsb_scanner, discord_channel_scraper,
5
+ * telegram_channel_monitor, news_sentiment_fetcher, substack_scraper
6
+ */
7
+ import { type Provenance } from "./shared-crypto.js";
8
+ export interface SocialPost {
9
+ platform: string;
10
+ author: string;
11
+ content: string;
12
+ timestamp: string;
13
+ url: string;
14
+ sentiment: number;
15
+ sentimentLabel: string;
16
+ isRumor: boolean;
17
+ engagement: {
18
+ likes: number;
19
+ reposts: number;
20
+ replies: number;
21
+ };
22
+ tickers: string[];
23
+ keywords: string[];
24
+ }
25
+ export interface SocialResult {
26
+ posts: SocialPost[];
27
+ total: number;
28
+ avgSentiment: number;
29
+ rumorCount: number;
30
+ provenance: Provenance;
31
+ }
32
+ export interface NewsArticle {
33
+ title: string;
34
+ source: string;
35
+ url: string;
36
+ publishedAt: string;
37
+ summary: string;
38
+ sentiment: number;
39
+ sentimentLabel: string;
40
+ relevanceScore: number;
41
+ tickers: string[];
42
+ }
43
+ export interface NewsResult {
44
+ articles: NewsArticle[];
45
+ total: number;
46
+ avgSentiment: number;
47
+ provenance: Provenance;
48
+ }
49
+ export declare function searchTwitterMentions(opts: {
50
+ query: string;
51
+ ticker?: string;
52
+ daysBack?: number;
53
+ limit?: number;
54
+ test?: boolean;
55
+ }): Promise<SocialResult>;
56
+ export declare function scanRedditWsb(opts: {
57
+ ticker?: string;
58
+ subreddit?: string;
59
+ sort?: string;
60
+ limit?: number;
61
+ test?: boolean;
62
+ }): Promise<SocialResult>;
63
+ export declare function scrapeDiscord(opts: {
64
+ serverId?: string;
65
+ channelId?: string;
66
+ webhookUrl?: string;
67
+ keyword?: string;
68
+ limit?: number;
69
+ test?: boolean;
70
+ }): Promise<SocialResult>;
71
+ export declare function monitorTelegram(opts: {
72
+ channelName: string;
73
+ keyword?: string;
74
+ limit?: number;
75
+ test?: boolean;
76
+ }): Promise<SocialResult>;
77
+ export declare function fetchNewsSentiment(opts: {
78
+ query: string;
79
+ ticker?: string;
80
+ daysBack?: number;
81
+ sources?: string[];
82
+ limit?: number;
83
+ test?: boolean;
84
+ }): Promise<NewsResult>;
85
+ export declare function scrapeSubstack(opts: {
86
+ publication: string;
87
+ keyword?: string;
88
+ limit?: number;
89
+ test?: boolean;
90
+ }): Promise<NewsResult>;
91
+ //# sourceMappingURL=social-intelligence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"social-intelligence.d.ts","sourceRoot":"","sources":["../../src/investigation-tools/social-intelligence.ts"],"names":[],"mappings":"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"}