@cyanheads/secedgar-mcp-server 0.1.11 → 0.3.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 (39) hide show
  1. package/README.md +19 -6
  2. package/dist/index.js +2 -0
  3. package/dist/index.js.map +1 -1
  4. package/dist/mcp-server/resources/definitions/concepts.resource.d.ts.map +1 -1
  5. package/dist/mcp-server/resources/definitions/concepts.resource.js +15 -38
  6. package/dist/mcp-server/resources/definitions/concepts.resource.js.map +1 -1
  7. package/dist/mcp-server/tools/definitions/company-search.tool.d.ts.map +1 -1
  8. package/dist/mcp-server/tools/definitions/company-search.tool.js +5 -5
  9. package/dist/mcp-server/tools/definitions/company-search.tool.js.map +1 -1
  10. package/dist/mcp-server/tools/definitions/compare-metric.tool.d.ts.map +1 -1
  11. package/dist/mcp-server/tools/definitions/compare-metric.tool.js +11 -26
  12. package/dist/mcp-server/tools/definitions/compare-metric.tool.js.map +1 -1
  13. package/dist/mcp-server/tools/definitions/get-filing.tool.d.ts +3 -3
  14. package/dist/mcp-server/tools/definitions/get-filing.tool.d.ts.map +1 -1
  15. package/dist/mcp-server/tools/definitions/get-filing.tool.js +105 -71
  16. package/dist/mcp-server/tools/definitions/get-filing.tool.js.map +1 -1
  17. package/dist/mcp-server/tools/definitions/get-financials.tool.d.ts +1 -1
  18. package/dist/mcp-server/tools/definitions/get-financials.tool.d.ts.map +1 -1
  19. package/dist/mcp-server/tools/definitions/get-financials.tool.js +28 -37
  20. package/dist/mcp-server/tools/definitions/get-financials.tool.js.map +1 -1
  21. package/dist/mcp-server/tools/definitions/search-concepts.tool.d.ts +43 -0
  22. package/dist/mcp-server/tools/definitions/search-concepts.tool.d.ts.map +1 -0
  23. package/dist/mcp-server/tools/definitions/search-concepts.tool.js +113 -0
  24. package/dist/mcp-server/tools/definitions/search-concepts.tool.js.map +1 -0
  25. package/dist/mcp-server/tools/definitions/search-filings.tool.d.ts.map +1 -1
  26. package/dist/mcp-server/tools/definitions/search-filings.tool.js +22 -10
  27. package/dist/mcp-server/tools/definitions/search-filings.tool.js.map +1 -1
  28. package/dist/services/edgar/concept-map.d.ts +14 -0
  29. package/dist/services/edgar/concept-map.d.ts.map +1 -1
  30. package/dist/services/edgar/concept-map.js +47 -0
  31. package/dist/services/edgar/concept-map.js.map +1 -1
  32. package/dist/services/edgar/edgar-api-service.d.ts +24 -3
  33. package/dist/services/edgar/edgar-api-service.d.ts.map +1 -1
  34. package/dist/services/edgar/edgar-api-service.js +87 -15
  35. package/dist/services/edgar/edgar-api-service.js.map +1 -1
  36. package/dist/services/edgar/types.d.ts +8 -3
  37. package/dist/services/edgar/types.d.ts.map +1 -1
  38. package/package.json +6 -11
  39. package/server.json +3 -3
@@ -0,0 +1,113 @@
1
+ /**
2
+ * @fileoverview Search supported XBRL financial concepts by keyword, statement group, or taxonomy.
3
+ * Discovery tool for the friendly names accepted by secedgar_get_financials and secedgar_compare_metric.
4
+ * Also performs reverse lookup: passing a raw XBRL tag returns the friendly mapping(s) it belongs to.
5
+ * @module mcp-server/tools/definitions/search-concepts
6
+ */
7
+ import { tool, z } from '@cyanheads/mcp-ts-core';
8
+ import { searchConcepts } from '../../../services/edgar/concept-map.js';
9
+ const GROUP_VALUES = [
10
+ 'income_statement',
11
+ 'balance_sheet',
12
+ 'cash_flow',
13
+ 'per_share',
14
+ 'entity_info',
15
+ ];
16
+ const TAXONOMY_VALUES = [
17
+ 'us-gaap',
18
+ 'ifrs-full',
19
+ 'dei',
20
+ ];
21
+ export const searchConceptsTool = tool('secedgar_search_concepts', {
22
+ description: 'Search supported XBRL financial concepts by keyword, statement group, or taxonomy. Use before secedgar_get_financials or secedgar_compare_metric to discover the right friendly name, or pass a raw XBRL tag (e.g., "NetIncomeLoss") to reverse-lookup which friendly names map to it. Empty search with no filters returns the full catalog.',
23
+ annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: false },
24
+ input: z.object({
25
+ search: z
26
+ .string()
27
+ .optional()
28
+ .describe('Case-insensitive substring matched against friendly name, label, and XBRL tags. Examples: "cash" finds cash and operating_cash_flow; "earnings" finds eps_basic and eps_diluted; "NetIncomeLoss" reverse-maps to net_income. Omit to list all concepts.'),
29
+ group: z
30
+ .enum(GROUP_VALUES)
31
+ .optional()
32
+ .describe('Filter to a single financial statement group. income_statement covers P&L items; balance_sheet covers position items (use instant periods in compare_metric); cash_flow covers CF statement items; per_share covers EPS; entity_info covers DEI items like shares outstanding.'),
33
+ taxonomy: z
34
+ .enum(TAXONOMY_VALUES)
35
+ .optional()
36
+ .describe('Filter to a single XBRL taxonomy. us-gaap for US filers, ifrs-full for foreign filers, dei for entity info.'),
37
+ }),
38
+ output: z.object({
39
+ total: z.number().describe('Number of concepts matching the filters.'),
40
+ concepts: z
41
+ .array(z.object({
42
+ name: z
43
+ .string()
44
+ .describe('Friendly name to pass as the concept argument to secedgar_get_financials or secedgar_compare_metric.'),
45
+ label: z.string().describe('Human-readable concept label.'),
46
+ tags: z
47
+ .array(z.string())
48
+ .describe('XBRL tags this friendly name resolves to, tried in order. Multiple tags cover historical naming changes (e.g., pre- vs post-ASC 606 revenue).'),
49
+ taxonomy: z.enum(TAXONOMY_VALUES).describe('XBRL taxonomy.'),
50
+ unit: z
51
+ .string()
52
+ .describe('Unit of measure (USD, USD/shares, shares, pure). Note: secedgar_compare_metric expects the dashed form USD-per-shares.'),
53
+ group: z.enum(GROUP_VALUES).describe('Financial statement group.'),
54
+ }))
55
+ .describe('Matching concepts, ordered by group then alphabetical by name.'),
56
+ }),
57
+ handler(input, ctx) {
58
+ let results = searchConcepts(input.search ?? '');
59
+ if (input.group) {
60
+ results = results.filter((c) => c.group === input.group);
61
+ }
62
+ if (input.taxonomy) {
63
+ results = results.filter((c) => c.taxonomy === input.taxonomy);
64
+ }
65
+ ctx.log.info('Concept search completed', {
66
+ search: input.search,
67
+ group: input.group,
68
+ taxonomy: input.taxonomy,
69
+ matches: results.length,
70
+ });
71
+ return {
72
+ total: results.length,
73
+ concepts: results.map((c) => ({
74
+ name: c.name,
75
+ label: c.label,
76
+ tags: c.tags,
77
+ taxonomy: c.taxonomy,
78
+ unit: c.unit,
79
+ group: c.group,
80
+ })),
81
+ };
82
+ },
83
+ format: (result) => {
84
+ if (result.total === 0) {
85
+ return [
86
+ {
87
+ type: 'text',
88
+ text: 'No concepts matched. Try a broader search, different group, or call with no filters to see the full catalog.',
89
+ },
90
+ ];
91
+ }
92
+ const lines = [`Found ${result.total} concept${result.total === 1 ? '' : 's'}:`, ''];
93
+ let currentGroup;
94
+ for (const c of result.concepts) {
95
+ if (c.group !== currentGroup) {
96
+ if (currentGroup)
97
+ lines.push('');
98
+ lines.push(`## ${formatGroup(c.group)} (\`${c.group}\`)`);
99
+ currentGroup = c.group;
100
+ }
101
+ const tagList = c.tags.map((t) => `\`${t}\``).join(', ');
102
+ lines.push(`- \`${c.name}\` — ${c.label} (${c.taxonomy}, ${c.unit}) → ${tagList}`);
103
+ }
104
+ return [{ type: 'text', text: lines.join('\n') }];
105
+ },
106
+ });
107
+ function formatGroup(group) {
108
+ return group
109
+ .split('_')
110
+ .map((w) => w[0]?.toUpperCase() + w.slice(1))
111
+ .join(' ');
112
+ }
113
+ //# sourceMappingURL=search-concepts.tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-concepts.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/search-concepts.tool.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"search-filings.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/search-filings.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAgDjD,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;kBAsK5B,CAAC"}
1
+ {"version":3,"file":"search-filings.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/search-filings.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AA6DjD,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;kBAsK5B,CAAC"}
@@ -5,6 +5,18 @@
5
5
  import { tool, z } from '@cyanheads/mcp-ts-core';
6
6
  import { validationError } from '@cyanheads/mcp-ts-core/errors';
7
7
  import { getEdgarApiService } from '../../../services/edgar/edgar-api-service.js';
8
+ /**
9
+ * EDGAR's `display_names[0]` embeds the ticker(s) and CIK in trailing parentheticals
10
+ * (e.g., "Apple Inc. (AAPL) (CIK 0000320193)"). Strip them so consumers see a clean
11
+ * company name — ticker and CIK are already surfaced as their own fields.
12
+ */
13
+ function cleanCompanyName(displayName) {
14
+ return displayName
15
+ .replace(/\s*\(CIK\s*\d+\)/gi, '')
16
+ .replace(/\s*\([A-Z0-9,\s.]+\)\s*$/, '')
17
+ .replace(/\s+/g, ' ')
18
+ .trim();
19
+ }
8
20
  /**
9
21
  * Extract entity targeting (cik: or ticker:) from a query string,
10
22
  * resolve to a CIK, and return the cleaned query + resolved CIK.
@@ -43,17 +55,13 @@ async function resolveEntityTargeting(query) {
43
55
  return { query };
44
56
  }
45
57
  export const searchFilingsTool = tool('secedgar_search_filings', {
46
- description: 'Full-text search across all EDGAR filing documents since 1993. ' +
47
- 'Supports exact phrases, boolean operators, wildcards, and entity targeting (ticker:AAPL or cik:320193 in query).',
58
+ description: 'Full-text search across all EDGAR filing documents since 1993. Supports exact phrases, boolean operators, wildcards, and entity targeting (ticker:AAPL or cik:320193 in query).',
48
59
  annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: true },
49
60
  input: z.object({
50
61
  query: z
51
62
  .string()
52
63
  .min(1)
53
- .describe('Full-text search query. Supports: exact phrases ("material weakness"), ' +
54
- 'boolean operators (revenue OR income), exclusion (-preliminary), ' +
55
- 'wildcard suffix (account*), entity targeting (ticker:AAPL or cik:320193 in the query). ' +
56
- "Terms are AND'd by default."),
64
+ .describe('Full-text search query. Supports: exact phrases ("material weakness"), boolean operators (revenue OR income), exclusion (-preliminary), wildcard suffix (account*), entity targeting (ticker:AAPL or cik:320193 in the query). Terms are AND\'d by default.'),
57
65
  forms: z
58
66
  .array(z.string())
59
67
  .optional()
@@ -77,8 +85,9 @@ export const searchFilingsTool = tool('secedgar_search_filings', {
77
85
  .number()
78
86
  .int()
79
87
  .min(0)
88
+ .max(9999)
80
89
  .default(0)
81
- .describe('Pagination offset. Increment by limit for next page. Hard cap at 10,000 total results.'),
90
+ .describe('Pagination offset. Increment by limit for the next page. EDGAR caps total accessible results at 10,000 — offsets past this return nothing.'),
82
91
  }),
83
92
  output: z.object({
84
93
  total: z.number().describe('Total matching filings (capped at 10,000).'),
@@ -140,7 +149,7 @@ export const searchFilingsTool = tool('secedgar_search_filings', {
140
149
  form: hit._source.form ?? undefined,
141
150
  filing_date: hit._source.file_date,
142
151
  period_ending: hit._source.period_ending ?? undefined,
143
- company_name: hit._source.display_names?.[0] || '',
152
+ company_name: cleanCompanyName(hit._source.display_names?.[0] || ''),
144
153
  cik: hit._source.ciks?.[0] || '',
145
154
  file_description: hit._source.file_description ?? undefined,
146
155
  sic: hit._source.sics?.[0] ?? undefined,
@@ -163,11 +172,14 @@ export const searchFilingsTool = tool('secedgar_search_filings', {
163
172
  return { total, total_is_exact: totalIsExact, results, form_distribution: formDistribution };
164
173
  },
165
174
  format: (result) => {
166
- const lines = [`Found ${result.total}${result.total_is_exact ? '' : '+'} filings`];
175
+ const exactness = result.total_is_exact ? 'exact' : 'capped at 10,000';
176
+ const lines = [`Found ${result.total} filings (${exactness})`];
167
177
  for (const r of result.results) {
168
178
  const period = r.period_ending ? ` (period: ${r.period_ending})` : '';
169
179
  const desc = r.file_description ? ` — ${r.file_description}` : '';
170
- lines.push(`- ${r.form ?? 'N/A'} ${r.filing_date}${period} — ${r.company_name} (CIK ${r.cik})${desc} [${r.accession_number}]`);
180
+ const sic = r.sic ? ` | SIC ${r.sic}` : '';
181
+ const loc = r.location ? ` | ${r.location}` : '';
182
+ lines.push(`- ${r.form ?? 'N/A'} ${r.filing_date}${period} — ${r.company_name} (CIK ${r.cik})${sic}${loc}${desc} [${r.accession_number}]`);
171
183
  }
172
184
  if (result.form_distribution) {
173
185
  const dist = Object.entries(result.form_distribution)
@@ -1 +1 @@
1
- {"version":3,"file":"search-filings.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/search-filings.tool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"search-filings.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/search-filings.tool.ts"],"names":[],"mappings":"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"}
@@ -10,4 +10,18 @@ import type { ConceptMapping } from './types.js';
10
10
  export declare function resolveConcept(input: string): ConceptMapping | undefined;
11
11
  /** Get all concept mappings for reference resource generation. */
12
12
  export declare function getAllConcepts(): Record<string, ConceptMapping>;
13
+ /** Entry returned by search/list operations — friendly name paired with its mapping. */
14
+ export interface ConceptEntry extends ConceptMapping {
15
+ name: string;
16
+ }
17
+ /**
18
+ * Return every concept entry as a flat, stable-ordered array (by group, then alphabetical by name).
19
+ */
20
+ export declare function listConcepts(): ConceptEntry[];
21
+ /**
22
+ * Search concepts by substring against friendly name, label, and XBRL tags.
23
+ * Passing a raw XBRL tag will reverse-lookup the friendly mapping(s).
24
+ * Empty/whitespace query returns all entries.
25
+ */
26
+ export declare function searchConcepts(query: string): ConceptEntry[];
13
27
  //# sourceMappingURL=concept-map.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"concept-map.d.ts","sourceRoot":"","sources":["../../../src/services/edgar/concept-map.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AA+FjD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAGxE;AAED,kEAAkE;AAClE,wBAAgB,cAAc,IAAI,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAE/D"}
1
+ {"version":3,"file":"concept-map.d.ts","sourceRoot":"","sources":["../../../src/services/edgar/concept-map.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AA6GjD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAGxE;AAED,kEAAkE;AAClE,wBAAgB,cAAc,IAAI,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAE/D;AAED,wFAAwF;AACxF,MAAM,WAAW,YAAa,SAAQ,cAAc;IAClD,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,YAAY,EAAE,CAI7C;AAUD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,EAAE,CAY5D"}
@@ -5,6 +5,7 @@
5
5
  /** Friendly name → XBRL tag mapping. Tags are tried in order for companyconcept lookups. */
6
6
  const CONCEPT_MAP = {
7
7
  revenue: {
8
+ group: 'income_statement',
8
9
  tags: [
9
10
  'RevenueFromContractWithCustomerExcludingAssessedTax',
10
11
  'Revenues',
@@ -16,78 +17,91 @@ const CONCEPT_MAP = {
16
17
  label: 'Revenue',
17
18
  },
18
19
  net_income: {
20
+ group: 'income_statement',
19
21
  tags: ['NetIncomeLoss'],
20
22
  taxonomy: 'us-gaap',
21
23
  unit: 'USD',
22
24
  label: 'Net Income (Loss)',
23
25
  },
24
26
  operating_income: {
27
+ group: 'income_statement',
25
28
  tags: ['OperatingIncomeLoss'],
26
29
  taxonomy: 'us-gaap',
27
30
  unit: 'USD',
28
31
  label: 'Operating Income (Loss)',
29
32
  },
30
33
  gross_profit: {
34
+ group: 'income_statement',
31
35
  tags: ['GrossProfit'],
32
36
  taxonomy: 'us-gaap',
33
37
  unit: 'USD',
34
38
  label: 'Gross Profit',
35
39
  },
36
40
  eps_basic: {
41
+ group: 'per_share',
37
42
  tags: ['EarningsPerShareBasic'],
38
43
  taxonomy: 'us-gaap',
39
44
  unit: 'USD/shares',
40
45
  label: 'Earnings Per Share (Basic)',
41
46
  },
42
47
  eps_diluted: {
48
+ group: 'per_share',
43
49
  tags: ['EarningsPerShareDiluted'],
44
50
  taxonomy: 'us-gaap',
45
51
  unit: 'USD/shares',
46
52
  label: 'Earnings Per Share (Diluted)',
47
53
  },
48
54
  assets: {
55
+ group: 'balance_sheet',
49
56
  tags: ['Assets'],
50
57
  taxonomy: 'us-gaap',
51
58
  unit: 'USD',
52
59
  label: 'Total Assets',
53
60
  },
54
61
  liabilities: {
62
+ group: 'balance_sheet',
55
63
  tags: ['Liabilities'],
56
64
  taxonomy: 'us-gaap',
57
65
  unit: 'USD',
58
66
  label: 'Total Liabilities',
59
67
  },
60
68
  equity: {
69
+ group: 'balance_sheet',
61
70
  tags: ['StockholdersEquity'],
62
71
  taxonomy: 'us-gaap',
63
72
  unit: 'USD',
64
73
  label: "Stockholders' Equity",
65
74
  },
66
75
  cash: {
76
+ group: 'balance_sheet',
67
77
  tags: ['CashAndCashEquivalentsAtCarryingValue'],
68
78
  taxonomy: 'us-gaap',
69
79
  unit: 'USD',
70
80
  label: 'Cash and Cash Equivalents',
71
81
  },
72
82
  debt: {
83
+ group: 'balance_sheet',
73
84
  tags: ['LongTermDebt', 'LongTermDebtNoncurrent'],
74
85
  taxonomy: 'us-gaap',
75
86
  unit: 'USD',
76
87
  label: 'Long-Term Debt',
77
88
  },
78
89
  shares_outstanding: {
90
+ group: 'entity_info',
79
91
  tags: ['EntityCommonStockSharesOutstanding'],
80
92
  taxonomy: 'dei',
81
93
  unit: 'shares',
82
94
  label: 'Shares Outstanding',
83
95
  },
84
96
  operating_cash_flow: {
97
+ group: 'cash_flow',
85
98
  tags: ['NetCashProvidedByUsedInOperatingActivities'],
86
99
  taxonomy: 'us-gaap',
87
100
  unit: 'USD',
88
101
  label: 'Operating Cash Flow',
89
102
  },
90
103
  capex: {
104
+ group: 'cash_flow',
91
105
  tags: ['PaymentsToAcquirePropertyPlantAndEquipment'],
92
106
  taxonomy: 'us-gaap',
93
107
  unit: 'USD',
@@ -106,4 +120,37 @@ export function resolveConcept(input) {
106
120
  export function getAllConcepts() {
107
121
  return CONCEPT_MAP;
108
122
  }
123
+ /**
124
+ * Return every concept entry as a flat, stable-ordered array (by group, then alphabetical by name).
125
+ */
126
+ export function listConcepts() {
127
+ return Object.entries(CONCEPT_MAP)
128
+ .map(([name, mapping]) => ({ name, ...mapping }))
129
+ .sort((a, b) => a.group.localeCompare(b.group) || a.name.localeCompare(b.name));
130
+ }
131
+ /** Normalize a string for fuzzy matching: lowercase, collapse non-alphanumerics to spaces. */
132
+ function normalizeForSearch(s) {
133
+ return s
134
+ .toLowerCase()
135
+ .replace(/[^a-z0-9]+/g, ' ')
136
+ .trim();
137
+ }
138
+ /**
139
+ * Search concepts by substring against friendly name, label, and XBRL tags.
140
+ * Passing a raw XBRL tag will reverse-lookup the friendly mapping(s).
141
+ * Empty/whitespace query returns all entries.
142
+ */
143
+ export function searchConcepts(query) {
144
+ const needle = normalizeForSearch(query);
145
+ if (!needle)
146
+ return listConcepts();
147
+ return listConcepts().filter((entry) => {
148
+ const haystacks = [
149
+ normalizeForSearch(entry.name),
150
+ normalizeForSearch(entry.label),
151
+ ...entry.tags.map(normalizeForSearch),
152
+ ];
153
+ return haystacks.some((h) => h.includes(needle));
154
+ });
155
+ }
109
156
  //# sourceMappingURL=concept-map.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"concept-map.js","sourceRoot":"","sources":["../../../src/services/edgar/concept-map.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,4FAA4F;AAC5F,MAAM,WAAW,GAAmC;IAClD,OAAO,EAAE;QACP,IAAI,EAAE;YACJ,qDAAqD;YACrD,UAAU;YACV,iBAAiB;YACjB,sBAAsB;SACvB;QACD,QAAQ,EAAE,SAAS;QACnB,IAAI,EAAE,KAAK;QACX,KAAK,EAAE,SAAS;KACjB;IACD,UAAU,EAAE;QACV,IAAI,EAAE,CAAC,eAAe,CAAC;QACvB,QAAQ,EAAE,SAAS;QACnB,IAAI,EAAE,KAAK;QACX,KAAK,EAAE,mBAAmB;KAC3B;IACD,gBAAgB,EAAE;QAChB,IAAI,EAAE,CAAC,qBAAqB,CAAC;QAC7B,QAAQ,EAAE,SAAS;QACnB,IAAI,EAAE,KAAK;QACX,KAAK,EAAE,yBAAyB;KACjC;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,CAAC,aAAa,CAAC;QACrB,QAAQ,EAAE,SAAS;QACnB,IAAI,EAAE,KAAK;QACX,KAAK,EAAE,cAAc;KACtB;IACD,SAAS,EAAE;QACT,IAAI,EAAE,CAAC,uBAAuB,CAAC;QAC/B,QAAQ,EAAE,SAAS;QACnB,IAAI,EAAE,YAAY;QAClB,KAAK,EAAE,4BAA4B;KACpC;IACD,WAAW,EAAE;QACX,IAAI,EAAE,CAAC,yBAAyB,CAAC;QACjC,QAAQ,EAAE,SAAS;QACnB,IAAI,EAAE,YAAY;QAClB,KAAK,EAAE,8BAA8B;KACtC;IACD,MAAM,EAAE;QACN,IAAI,EAAE,CAAC,QAAQ,CAAC;QAChB,QAAQ,EAAE,SAAS;QACnB,IAAI,EAAE,KAAK;QACX,KAAK,EAAE,cAAc;KACtB;IACD,WAAW,EAAE;QACX,IAAI,EAAE,CAAC,aAAa,CAAC;QACrB,QAAQ,EAAE,SAAS;QACnB,IAAI,EAAE,KAAK;QACX,KAAK,EAAE,mBAAmB;KAC3B;IACD,MAAM,EAAE;QACN,IAAI,EAAE,CAAC,oBAAoB,CAAC;QAC5B,QAAQ,EAAE,SAAS;QACnB,IAAI,EAAE,KAAK;QACX,KAAK,EAAE,sBAAsB;KAC9B;IACD,IAAI,EAAE;QACJ,IAAI,EAAE,CAAC,uCAAuC,CAAC;QAC/C,QAAQ,EAAE,SAAS;QACnB,IAAI,EAAE,KAAK;QACX,KAAK,EAAE,2BAA2B;KACnC;IACD,IAAI,EAAE;QACJ,IAAI,EAAE,CAAC,cAAc,EAAE,wBAAwB,CAAC;QAChD,QAAQ,EAAE,SAAS;QACnB,IAAI,EAAE,KAAK;QACX,KAAK,EAAE,gBAAgB;KACxB;IACD,kBAAkB,EAAE;QAClB,IAAI,EAAE,CAAC,oCAAoC,CAAC;QAC5C,QAAQ,EAAE,KAAK;QACf,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,oBAAoB;KAC5B;IACD,mBAAmB,EAAE;QACnB,IAAI,EAAE,CAAC,4CAA4C,CAAC;QACpD,QAAQ,EAAE,SAAS;QACnB,IAAI,EAAE,KAAK;QACX,KAAK,EAAE,qBAAqB;KAC7B;IACD,KAAK,EAAE;QACL,IAAI,EAAE,CAAC,4CAA4C,CAAC;QACpD,QAAQ,EAAE,SAAS;QACnB,IAAI,EAAE,KAAK;QACX,KAAK,EAAE,sBAAsB;KAC9B;CACF,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAC7D,OAAO,WAAW,CAAC,UAAU,CAAC,CAAC;AACjC,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,cAAc;IAC5B,OAAO,WAAW,CAAC;AACrB,CAAC"}
1
+ {"version":3,"file":"concept-map.js","sourceRoot":"","sources":["../../../src/services/edgar/concept-map.ts"],"names":[],"mappings":"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"}
@@ -9,13 +9,18 @@ declare class EdgarApiService {
9
9
  private lastRequestAt;
10
10
  private minIntervalMs;
11
11
  private tickerCache;
12
+ private throttleQueue;
12
13
  constructor();
13
14
  /** Rate-limited, retried fetch with User-Agent header. */
14
15
  fetch(url: string): Promise<Response>;
15
16
  /** Fetch and parse JSON, throwing on non-OK responses. */
16
17
  fetchJson<T>(url: string): Promise<T>;
18
+ /** Fetch JSON, returning `null` on 404 and throwing on other non-OK responses. */
19
+ tryFetchJson<T>(url: string): Promise<T | null>;
17
20
  /** Fetch raw text content (HTML filing documents). */
18
21
  fetchText(url: string): Promise<string>;
22
+ /** Fetch raw text content, returning `null` on 404 and throwing on other failures. */
23
+ tryFetchText(url: string): Promise<string | null>;
19
24
  /**
20
25
  * Resolve a query (ticker, name, or CIK) to company match(es).
21
26
  * - Numeric input → direct CIK lookup
@@ -34,10 +39,26 @@ declare class EdgarApiService {
34
39
  from?: number | undefined;
35
40
  size?: number | undefined;
36
41
  }): Promise<EftsResponse>;
37
- getFilingIndex(cik: string, accessionNumber: string): Promise<FilingIndex>;
42
+ /**
43
+ * Resolve likely company CIKs for a filing accession number using SEC search metadata.
44
+ * Returns zero or more padded 10-digit CIKs in SEC-provided order.
45
+ */
46
+ findFilingCiks(accessionNumber: string): Promise<string[]>;
47
+ /** Fetch a filing's document index. Returns `null` if the filing does not exist. */
48
+ tryGetFilingIndex(cik: string, accessionNumber: string): Promise<FilingIndex | null>;
38
49
  getFilingDocument(cik: string, accessionNumber: string, document: string): Promise<string>;
39
- getCompanyConcept(cik: string, taxonomy: string, tag: string): Promise<CompanyConceptResponse>;
40
- getFrames(taxonomy: string, tag: string, unit: string, period: string): Promise<FramesResponse>;
50
+ /**
51
+ * Fetch a filing document, returning `null` when the archive path exists but this document does not.
52
+ */
53
+ tryGetFilingDocument(cik: string, accessionNumber: string, document: string): Promise<string | null>;
54
+ /** Fetch XBRL data for a concept. Returns `null` if the company does not report this tag. */
55
+ tryGetCompanyConcept(cik: string, taxonomy: string, tag: string): Promise<CompanyConceptResponse | null>;
56
+ /** Fetch cross-company frame data. Returns `null` if no companies report this combination. */
57
+ tryGetFrames(taxonomy: string, tag: string, unit: string, period: string): Promise<FramesResponse | null>;
58
+ /**
59
+ * Serialize throttle checks through a promise chain so concurrent callers
60
+ * can't observe a stale `lastRequestAt` and fire in parallel within one window.
61
+ */
41
62
  private throttle;
42
63
  private getTickerCache;
43
64
  }
@@ -1 +1 @@
1
- {"version":3,"file":"edgar-api-service.d.ts","sourceRoot":"","sources":["../../../src/services/edgar/edgar-api-service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EACV,QAAQ,EACR,sBAAsB,EACtB,YAAY,EACZ,WAAW,EACX,cAAc,EACd,mBAAmB,EAEpB,MAAM,YAAY,CAAC;AAapB,cAAM,eAAe;IACnB,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,WAAW,CAA0B;;IAO7C,0DAA0D;IACpD,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAwC3C,0DAA0D;IACpD,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAW3C,sDAAsD;IAChD,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAmB7C;;;;;OAKG;IACG,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,QAAQ,EAAE,CAAC;IA+C/D,2CAA2C;IACrC,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAO3D,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAOzD,aAAa,CAAC,MAAM,EAAE;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;QAC7B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC/B,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC7B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC1B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;KAC3B,GAAG,OAAO,CAAC,YAAY,CAAC;IAezB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAQ1E,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAQ1F,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAO9F,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;YAQjF,QAAQ;YASR,cAAc;CA8B7B;AASD,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C;AAED,wBAAgB,kBAAkB,IAAI,eAAe,CAIpD"}
1
+ {"version":3,"file":"edgar-api-service.d.ts","sourceRoot":"","sources":["../../../src/services/edgar/edgar-api-service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EACV,QAAQ,EACR,sBAAsB,EACtB,YAAY,EACZ,WAAW,EACX,cAAc,EACd,mBAAmB,EAEpB,MAAM,YAAY,CAAC;AAapB,cAAM,eAAe;IACnB,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,WAAW,CAA0B;IAC7C,OAAO,CAAC,aAAa,CAAoC;;IAOzD,0DAA0D;IACpD,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAwC3C,0DAA0D;IACpD,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAW3C,kFAAkF;IAC5E,YAAY,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAYrD,sDAAsD;IAChD,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAiB7C,sFAAsF;IAChF,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAoBvD;;;;;OAKG;IACG,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,QAAQ,EAAE,CAAC;IAiD/D,2CAA2C;IACrC,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAO3D,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAOzD,aAAa,CAAC,MAAM,EAAE;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;QAC7B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC/B,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC7B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC1B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;KAC3B,GAAG,OAAO,CAAC,YAAY,CAAC;IAezB;;;OAGG;IACG,cAAc,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAoBhE,oFAAoF;IACpF,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAQpF,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAQ1F;;OAEG;IACH,oBAAoB,CAClB,GAAG,EAAE,MAAM,EACX,eAAe,EAAE,MAAM,EACvB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAQzB,6FAA6F;IAC7F,oBAAoB,CAClB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC;IAOzC,8FAA8F;IAC9F,YAAY,CACV,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAQjC;;;OAGG;IACH,OAAO,CAAC,QAAQ;YAcF,cAAc;CA8B7B;AASD,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C;AAED,wBAAgB,kBAAkB,IAAI,eAAe,CAIpD"}
@@ -12,6 +12,7 @@ class EdgarApiService {
12
12
  lastRequestAt = 0;
13
13
  minIntervalMs;
14
14
  tickerCache;
15
+ throttleQueue = Promise.resolve();
15
16
  constructor() {
16
17
  const config = getServerConfig();
17
18
  this.minIntervalMs = Math.ceil(1000 / config.rateLimitRps);
@@ -57,6 +58,19 @@ class EdgarApiService {
57
58
  }
58
59
  return response.json();
59
60
  }
61
+ /** Fetch JSON, returning `null` on 404 and throwing on other non-OK responses. */
62
+ async tryFetchJson(url) {
63
+ const response = await this.fetch(url);
64
+ if (response.status === 404)
65
+ return null;
66
+ if (!response.ok) {
67
+ throw serviceUnavailable(`SEC EDGAR API returned ${response.status} for ${url}`, {
68
+ url,
69
+ status: response.status,
70
+ });
71
+ }
72
+ return response.json();
73
+ }
60
74
  /** Fetch raw text content (HTML filing documents). */
61
75
  async fetchText(url) {
62
76
  await this.throttle();
@@ -72,6 +86,23 @@ class EdgarApiService {
72
86
  }
73
87
  return response.text();
74
88
  }
89
+ /** Fetch raw text content, returning `null` on 404 and throwing on other failures. */
90
+ async tryFetchText(url) {
91
+ await this.throttle();
92
+ const config = getServerConfig();
93
+ const response = await globalThis.fetch(url, {
94
+ headers: { 'User-Agent': config.userAgent },
95
+ });
96
+ if (response.status === 404)
97
+ return null;
98
+ if (!response.ok) {
99
+ throw serviceUnavailable(`SEC EDGAR returned ${response.status} for ${url}`, {
100
+ url,
101
+ status: response.status,
102
+ });
103
+ }
104
+ return response.text();
105
+ }
75
106
  // --- CIK Resolution ---
76
107
  /**
77
108
  * Resolve a query (ticker, name, or CIK) to company match(es).
@@ -88,8 +119,9 @@ class EdgarApiService {
88
119
  const match = cache.byCik.get(padded);
89
120
  if (match)
90
121
  return match;
91
- // Return a synthetic match — CIK may be valid even if not in tickers file
92
- return { cik: padded, name: '', ticker: '' };
122
+ // CIK may be valid even if absent from the tickers file (e.g. individual filers) —
123
+ // return a CIK-only match and let the caller resolve identity from submissions.
124
+ return { cik: padded };
93
125
  }
94
126
  // Short alphabetic → ticker
95
127
  const upper = trimmed.toUpperCase();
@@ -104,6 +136,8 @@ class EdgarApiService {
104
136
  const prefix = [];
105
137
  const substring = [];
106
138
  for (const entry of cache.allEntries) {
139
+ if (!entry.name)
140
+ continue;
107
141
  const name = entry.name.toLowerCase();
108
142
  if (name === lower) {
109
143
  exact.push(entry);
@@ -147,31 +181,69 @@ class EdgarApiService {
147
181
  url.searchParams.set('size', String(params.size ?? 20));
148
182
  return this.fetchJson(url.toString());
149
183
  }
150
- getFilingIndex(cik, accessionNumber) {
184
+ /**
185
+ * Resolve likely company CIKs for a filing accession number using SEC search metadata.
186
+ * Returns zero or more padded 10-digit CIKs in SEC-provided order.
187
+ */
188
+ async findFilingCiks(accessionNumber) {
189
+ const response = await this.searchFilings({ query: accessionNumber, size: 10 });
190
+ const normalizedAccession = accessionNumber.replace(/[^0-9]/g, '');
191
+ const ciks = new Set();
192
+ for (const hit of response.hits.hits) {
193
+ const hitAccession = (hit._source.adsh || hit._id.split(':')[0] || hit._id).replace(/[^0-9]/g, '');
194
+ if (hitAccession !== normalizedAccession)
195
+ continue;
196
+ for (const cik of hit._source.ciks ?? []) {
197
+ ciks.add(cik.padStart(10, '0'));
198
+ }
199
+ }
200
+ return [...ciks];
201
+ }
202
+ /** Fetch a filing's document index. Returns `null` if the filing does not exist. */
203
+ tryGetFilingIndex(cik, accessionNumber) {
151
204
  const padded = cik.padStart(10, '0');
152
205
  const noDashes = accessionNumber.replace(/-/g, '');
153
- return this.fetchJson(`https://www.sec.gov/Archives/edgar/data/${padded}/${noDashes}/index.json`);
206
+ return this.tryFetchJson(`https://www.sec.gov/Archives/edgar/data/${padded}/${noDashes}/index.json`);
154
207
  }
155
208
  getFilingDocument(cik, accessionNumber, document) {
156
209
  const padded = cik.padStart(10, '0');
157
210
  const noDashes = accessionNumber.replace(/-/g, '');
158
211
  return this.fetchText(`https://www.sec.gov/Archives/edgar/data/${padded}/${noDashes}/${document}`);
159
212
  }
160
- getCompanyConcept(cik, taxonomy, tag) {
213
+ /**
214
+ * Fetch a filing document, returning `null` when the archive path exists but this document does not.
215
+ */
216
+ tryGetFilingDocument(cik, accessionNumber, document) {
217
+ const padded = cik.padStart(10, '0');
218
+ const noDashes = accessionNumber.replace(/-/g, '');
219
+ return this.tryFetchText(`https://www.sec.gov/Archives/edgar/data/${padded}/${noDashes}/${document}`);
220
+ }
221
+ /** Fetch XBRL data for a concept. Returns `null` if the company does not report this tag. */
222
+ tryGetCompanyConcept(cik, taxonomy, tag) {
161
223
  const padded = cik.padStart(10, '0');
162
- return this.fetchJson(`https://data.sec.gov/api/xbrl/companyconcept/CIK${padded}/${taxonomy}/${tag}.json`);
224
+ return this.tryFetchJson(`https://data.sec.gov/api/xbrl/companyconcept/CIK${padded}/${taxonomy}/${tag}.json`);
163
225
  }
164
- getFrames(taxonomy, tag, unit, period) {
165
- return this.fetchJson(`https://data.sec.gov/api/xbrl/frames/${taxonomy}/${tag}/${unit}/${period}.json`);
226
+ /** Fetch cross-company frame data. Returns `null` if no companies report this combination. */
227
+ tryGetFrames(taxonomy, tag, unit, period) {
228
+ return this.tryFetchJson(`https://data.sec.gov/api/xbrl/frames/${taxonomy}/${tag}/${unit}/${period}.json`);
166
229
  }
167
230
  // --- Internals ---
168
- async throttle() {
169
- const now = Date.now();
170
- const elapsed = now - this.lastRequestAt;
171
- if (elapsed < this.minIntervalMs) {
172
- await sleep(this.minIntervalMs - elapsed);
173
- }
174
- this.lastRequestAt = Date.now();
231
+ /**
232
+ * Serialize throttle checks through a promise chain so concurrent callers
233
+ * can't observe a stale `lastRequestAt` and fire in parallel within one window.
234
+ */
235
+ throttle() {
236
+ const next = this.throttleQueue.then(async () => {
237
+ const elapsed = Date.now() - this.lastRequestAt;
238
+ if (elapsed < this.minIntervalMs) {
239
+ await sleep(this.minIntervalMs - elapsed);
240
+ }
241
+ this.lastRequestAt = Date.now();
242
+ });
243
+ this.throttleQueue = next.catch(() => {
244
+ /* swallow: errors propagate to the caller's awaited chain, not the queue */
245
+ });
246
+ return next;
175
247
  }
176
248
  async getTickerCache() {
177
249
  const config = getServerConfig();