@datasynx/agentic-ai-cartography 2.6.0 → 2.8.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.
- package/dist/api-bin.js +2 -2
- package/dist/{chunk-X3UWUX3G.js → chunk-5D5ZZEZM.js} +242 -19
- package/dist/chunk-5D5ZZEZM.js.map +1 -0
- package/dist/{chunk-PQ7Q6MI5.js → chunk-TBPGFEMQ.js} +2 -2
- package/dist/{chunk-GA4427LB.js → chunk-YVV6NIT2.js} +11 -1
- package/dist/chunk-YVV6NIT2.js.map +1 -0
- package/dist/cli.js +38 -6
- package/dist/cli.js.map +1 -1
- package/dist/index.cjs +228 -14
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +159 -12
- package/dist/index.d.ts +159 -12
- package/dist/index.js +223 -14
- package/dist/index.js.map +1 -1
- package/dist/mcp-bin.js +2 -2
- package/package.json +3 -2
- package/server.json +2 -2
- package/dist/chunk-GA4427LB.js.map +0 -1
- package/dist/chunk-X3UWUX3G.js.map +0 -1
- /package/dist/{chunk-PQ7Q6MI5.js.map → chunk-TBPGFEMQ.js.map} +0 -0
package/dist/index.d.cts
CHANGED
|
@@ -982,6 +982,12 @@ interface NodeAttribution {
|
|
|
982
982
|
|
|
983
983
|
/** Default tenant for single-user / pre-migration installs. */
|
|
984
984
|
declare const DEFAULT_TENANT = "local";
|
|
985
|
+
/**
|
|
986
|
+
* The current catalog schema version. A fresh DB initializes here and the migration
|
|
987
|
+
* chain advances to it; the collector readiness probe (4.7) asserts a reopened DB
|
|
988
|
+
* reports exactly this. Keep in lockstep with the final `user_version` set in `migrate()`.
|
|
989
|
+
*/
|
|
990
|
+
declare const SCHEMA_VERSION = 15;
|
|
985
991
|
/**
|
|
986
992
|
* Normalize an untrusted tenant id: strip invisible/control characters, trim,
|
|
987
993
|
* cap length, and enforce a conservative key charset. Falls back to DEFAULT_TENANT
|
|
@@ -1352,6 +1358,12 @@ declare class CartographyDB {
|
|
|
1352
1358
|
* Prune sessions older than the given ISO date string. Returns count of deleted sessions.
|
|
1353
1359
|
*/
|
|
1354
1360
|
pruneSessions(olderThan: string): number;
|
|
1361
|
+
/**
|
|
1362
|
+
* Retention/compaction (4.7): delete audit events older than `olderThan` (ISO 8601).
|
|
1363
|
+
* The audit trail grows unbounded on a busy collector; this bounds it without touching
|
|
1364
|
+
* sessions/nodes/edges. Returns the number of events removed.
|
|
1365
|
+
*/
|
|
1366
|
+
pruneEventsOlderThan(olderThan: string): number;
|
|
1355
1367
|
/** Fetch a single node by id within a session. */
|
|
1356
1368
|
getNode(sessionId: string, nodeId: string): NodeRow | undefined;
|
|
1357
1369
|
/** Batch-fetch nodes by id, keyed for O(1) lookup. Chunked to stay under SQLite's bind-variable limit. */
|
|
@@ -1457,9 +1469,18 @@ interface NodeIdentity {
|
|
|
1457
1469
|
/** Secondary merge key — content hash that catches `id` drift between machines. */
|
|
1458
1470
|
contentHash: string;
|
|
1459
1471
|
}
|
|
1472
|
+
/**
|
|
1473
|
+
* A value that may be produced synchronously (SQLite, `better-sqlite3`) or
|
|
1474
|
+
* asynchronously (a graph DB over the async Bolt driver, 4.3). The ingest core
|
|
1475
|
+
* `await`s every backend call, so a sync implementation incurs no overhead and the
|
|
1476
|
+
* SQLite path stays byte-for-byte synchronous.
|
|
1477
|
+
*/
|
|
1478
|
+
type Awaitable<T> = T | Promise<T>;
|
|
1460
1479
|
/**
|
|
1461
1480
|
* A provider-agnostic central store. All operations are scoped to a single tenant
|
|
1462
|
-
* (`org`); there is no cross-tenant read or write path.
|
|
1481
|
+
* (`org`); there is no cross-tenant read or write path. Methods are **async-capable**
|
|
1482
|
+
* (4.3): `SqliteStoreBackend` returns synchronously, `GraphStoreBackend` returns
|
|
1483
|
+
* Promises; consumers await either.
|
|
1463
1484
|
*/
|
|
1464
1485
|
interface StoreBackend {
|
|
1465
1486
|
/**
|
|
@@ -1468,15 +1489,15 @@ interface StoreBackend {
|
|
|
1468
1489
|
* `'created'` when this is the first observation of the logical node, `'merged'`
|
|
1469
1490
|
* when it collapsed onto an existing one.
|
|
1470
1491
|
*/
|
|
1471
|
-
upsertNode(org: string, node: DiscoveryNode, identity: NodeIdentity, contributor: Contributor): 'created' | 'merged'
|
|
1492
|
+
upsertNode(org: string, node: DiscoveryNode, identity: NodeIdentity, contributor: Contributor): Awaitable<'created' | 'merged'>;
|
|
1472
1493
|
/** Insert an edge under `org` (idempotent on the logical `(source, target, relationship)` key). */
|
|
1473
|
-
insertEdge(org: string, edge: DiscoveryEdge): void
|
|
1494
|
+
insertEdge(org: string, edge: DiscoveryEdge): Awaitable<void>;
|
|
1474
1495
|
/** Org-wide aggregate summary (merged counts across all contributors). */
|
|
1475
|
-
getSummary(org: string): OrgSummary
|
|
1496
|
+
getSummary(org: string): Awaitable<OrgSummary>;
|
|
1476
1497
|
/** Contributors for a merged logical node (test/audit helper). */
|
|
1477
|
-
getContributors(globalId: string): Contributor[]
|
|
1498
|
+
getContributors(globalId: string): Awaitable<Contributor[]>;
|
|
1478
1499
|
/** Release any underlying resources. */
|
|
1479
|
-
close(): void
|
|
1500
|
+
close(): Awaitable<void>;
|
|
1480
1501
|
}
|
|
1481
1502
|
|
|
1482
1503
|
/**
|
|
@@ -1507,6 +1528,76 @@ declare class SqliteStoreBackend implements StoreBackend {
|
|
|
1507
1528
|
close(): void;
|
|
1508
1529
|
}
|
|
1509
1530
|
|
|
1531
|
+
/**
|
|
1532
|
+
* `GraphStoreBackend` (4.3) — an opt-in central-store backend over a Bolt-speaking
|
|
1533
|
+
* graph database (Neo4j / Memgraph). Implements the async-capable {@link StoreBackend}
|
|
1534
|
+
* seam so the central collector's merge + org-summary path can scale to 10K+ nodes on a
|
|
1535
|
+
* native graph engine, while SQLite stays the zero-config default.
|
|
1536
|
+
*
|
|
1537
|
+
* `neo4j-driver` is an OPTIONAL dependency, dynamically imported by `openStoreBackend`
|
|
1538
|
+
* (`src/store/index.ts`); this module depends only on a minimal structural Bolt interface,
|
|
1539
|
+
* so it compiles and the package degrades gracefully when the driver is absent. The driver
|
|
1540
|
+
* is injected (constructor), which also lets tests drive it with a mock — no live DB in CI.
|
|
1541
|
+
*
|
|
1542
|
+
* Merge identity mirrors SQLite: a logical node is keyed by `(org, globalId)`; the
|
|
1543
|
+
* `contentHash` is stored + indexed for the id-drift secondary collapse (best-effort here,
|
|
1544
|
+
* tracked as a follow-up). Contributors are `(org, globalId, machineId)` with max-confidence.
|
|
1545
|
+
*/
|
|
1546
|
+
|
|
1547
|
+
interface BoltRecord {
|
|
1548
|
+
get(key: string): unknown;
|
|
1549
|
+
}
|
|
1550
|
+
interface BoltResult {
|
|
1551
|
+
records: BoltRecord[];
|
|
1552
|
+
}
|
|
1553
|
+
interface BoltSession {
|
|
1554
|
+
run(cypher: string, params?: Record<string, unknown>): Promise<BoltResult>;
|
|
1555
|
+
close(): Promise<void>;
|
|
1556
|
+
}
|
|
1557
|
+
interface BoltDriver {
|
|
1558
|
+
session(): BoltSession;
|
|
1559
|
+
close(): Promise<void>;
|
|
1560
|
+
verifyConnectivity?(): Promise<unknown>;
|
|
1561
|
+
}
|
|
1562
|
+
declare class GraphStoreBackend implements StoreBackend {
|
|
1563
|
+
private readonly driver;
|
|
1564
|
+
constructor(driver: BoltDriver);
|
|
1565
|
+
private run;
|
|
1566
|
+
upsertNode(org: string, node: DiscoveryNode, identity: NodeIdentity, contributor: Contributor): Promise<'created' | 'merged'>;
|
|
1567
|
+
insertEdge(org: string, edge: DiscoveryEdge): Promise<void>;
|
|
1568
|
+
getSummary(org: string): Promise<OrgSummary>;
|
|
1569
|
+
getContributors(globalId: string): Promise<Contributor[]>;
|
|
1570
|
+
close(): Promise<void>;
|
|
1571
|
+
}
|
|
1572
|
+
|
|
1573
|
+
/**
|
|
1574
|
+
* Central-store backend factory (4.3).
|
|
1575
|
+
*
|
|
1576
|
+
* `openStoreBackend` returns a {@link GraphStoreBackend} only when a graph backend is
|
|
1577
|
+
* explicitly requested AND the optional `neo4j-driver` is installed AND the server is
|
|
1578
|
+
* reachable; otherwise it logs a structured WARN and returns the always-available
|
|
1579
|
+
* {@link SqliteStoreBackend}. A missing driver or an unreachable graph server therefore
|
|
1580
|
+
* NEVER breaks the collector — it degrades to SQLite (the "optional deps degrade" locked
|
|
1581
|
+
* constraint). SQLite stays the zero-config default.
|
|
1582
|
+
*/
|
|
1583
|
+
|
|
1584
|
+
interface StoreBackendOptions {
|
|
1585
|
+
/** `'graph'` opts into the graph DB; anything else (default) uses SQLite. */
|
|
1586
|
+
backend?: 'sqlite' | 'graph';
|
|
1587
|
+
/** Bolt URL, e.g. `bolt://graph.internal:7687` or `neo4j+s://…`. */
|
|
1588
|
+
graphUrl?: string;
|
|
1589
|
+
graphUser?: string;
|
|
1590
|
+
graphPassword?: string;
|
|
1591
|
+
/** Injected driver factory (tests). Defaults to dynamically importing `neo4j-driver`. */
|
|
1592
|
+
driverFactory?: (url: string, user: string, password: string) => Promise<BoltDriver>;
|
|
1593
|
+
}
|
|
1594
|
+
/**
|
|
1595
|
+
* Resolve the central store backend. Graph when requested + available; else SQLite.
|
|
1596
|
+
* The returned backend is owned by the caller (call `close()` on shutdown for the graph
|
|
1597
|
+
* backend; the SQLite backend's `close()` is a no-op — the `CartographyDB` is shared).
|
|
1598
|
+
*/
|
|
1599
|
+
declare function openStoreBackend(db: CartographyDB, opts?: StoreBackendOptions): Promise<StoreBackend>;
|
|
1600
|
+
|
|
1510
1601
|
/**
|
|
1511
1602
|
* `QueryBackend` — the **read-only** query seam for the API server (4.2).
|
|
1512
1603
|
*
|
|
@@ -1758,7 +1849,38 @@ interface IngestOptions {
|
|
|
1758
1849
|
* The caller (HTTP handler) wraps this in try/catch; the store's per-node upsert is
|
|
1759
1850
|
* itself transactional, so a single bad node never half-writes a row.
|
|
1760
1851
|
*/
|
|
1761
|
-
declare function ingestEnvelope(store: StoreBackend, envelope: IngestEnvelope, opts?: IngestOptions): IngestResult
|
|
1852
|
+
declare function ingestEnvelope(store: StoreBackend, envelope: IngestEnvelope, opts?: IngestOptions): Promise<IngestResult>;
|
|
1853
|
+
|
|
1854
|
+
/**
|
|
1855
|
+
* Ingest backpressure for the central collector (4.7).
|
|
1856
|
+
*
|
|
1857
|
+
* A pure, in-memory **per-org token-bucket** rate limiter. The networked `POST /ingest`
|
|
1858
|
+
* write endpoint must protect the shared store from a runaway or hostile client; over-quota
|
|
1859
|
+
* requests are refused with `429 + Retry-After` rather than admitted. Deterministic given an
|
|
1860
|
+
* injected clock, so it is unit-testable without real time. In-process only (a multi-replica
|
|
1861
|
+
* deployment would front it with a shared limiter; documented in the runbook).
|
|
1862
|
+
*/
|
|
1863
|
+
interface QuotaConfig {
|
|
1864
|
+
/** Bucket capacity = max burst, and the number of tokens refilled over one `refillMs` window. */
|
|
1865
|
+
capacity: number;
|
|
1866
|
+
/** Milliseconds over which a fully-drained bucket refills to `capacity`. */
|
|
1867
|
+
refillMs: number;
|
|
1868
|
+
}
|
|
1869
|
+
/** Sensible default: 120 ingests / minute / org (burst 120). */
|
|
1870
|
+
declare const DEFAULT_INGEST_QUOTA: QuotaConfig;
|
|
1871
|
+
interface QuotaDecision {
|
|
1872
|
+
allowed: boolean;
|
|
1873
|
+
/** Seconds to wait before retrying — populated only when `!allowed` (≥1). */
|
|
1874
|
+
retryAfterSec: number;
|
|
1875
|
+
}
|
|
1876
|
+
declare class RateLimiter {
|
|
1877
|
+
private readonly cfg;
|
|
1878
|
+
private readonly now;
|
|
1879
|
+
private readonly buckets;
|
|
1880
|
+
constructor(cfg?: QuotaConfig, now?: () => number);
|
|
1881
|
+
/** Consume one token for `key`. Returns whether the request is allowed (+ Retry-After when not). */
|
|
1882
|
+
take(key: string): QuotaDecision;
|
|
1883
|
+
}
|
|
1762
1884
|
|
|
1763
1885
|
/**
|
|
1764
1886
|
* The central-collector ingest HTTP surface (2.12).
|
|
@@ -1775,12 +1897,18 @@ declare function ingestEnvelope(store: StoreBackend, envelope: IngestEnvelope, o
|
|
|
1775
1897
|
* handler ever runs, so the handler never sees (and never logs) the token.
|
|
1776
1898
|
*/
|
|
1777
1899
|
|
|
1778
|
-
/** A transport-agnostic HTTP-ish response: a status code
|
|
1900
|
+
/** A transport-agnostic HTTP-ish response: a status code, a JSON-serializable body, optional headers. */
|
|
1779
1901
|
interface IngestResponse {
|
|
1780
1902
|
status: number;
|
|
1781
1903
|
body: unknown;
|
|
1904
|
+
/** Extra response headers (e.g. `Retry-After` on a 429). */
|
|
1905
|
+
headers?: Record<string, string>;
|
|
1906
|
+
}
|
|
1907
|
+
type IngestHandler = (body: unknown) => Promise<IngestResponse>;
|
|
1908
|
+
interface IngestHandlerOptions extends IngestOptions {
|
|
1909
|
+
/** Per-org ingest rate limiter (4.7 backpressure). Over-quota → 429 + Retry-After. */
|
|
1910
|
+
quota?: RateLimiter;
|
|
1782
1911
|
}
|
|
1783
|
-
type IngestHandler = (body: unknown) => IngestResponse;
|
|
1784
1912
|
/**
|
|
1785
1913
|
* Build the `/ingest` handler over a {@link StoreBackend}. The handler validates the
|
|
1786
1914
|
* 2.11 push envelope, runs ingest (re-validating anonymization first), and maps the
|
|
@@ -1789,7 +1917,7 @@ type IngestHandler = (body: unknown) => IngestResponse;
|
|
|
1789
1917
|
* - 500 — ingest threw (the store's per-node transaction rolls that node back).
|
|
1790
1918
|
* - 200 — {@link IngestResult}.
|
|
1791
1919
|
*/
|
|
1792
|
-
declare function createIngestHandler(store: StoreBackend, opts?:
|
|
1920
|
+
declare function createIngestHandler(store: StoreBackend, opts?: IngestHandlerOptions): IngestHandler;
|
|
1793
1921
|
|
|
1794
1922
|
/**
|
|
1795
1923
|
* Org-key lifecycle for the 2.10 anonymization layer.
|
|
@@ -2137,6 +2265,12 @@ interface CreateMcpServerOptions {
|
|
|
2137
2265
|
* behaviour exactly. The org is normalized to a tenant.
|
|
2138
2266
|
*/
|
|
2139
2267
|
org?: string;
|
|
2268
|
+
/**
|
|
2269
|
+
* Org-wide summary source (4.3). When set (server-mode with a graph backend), the
|
|
2270
|
+
* org `get_summary` reads from here instead of `db.getOrgSummary` — so a graph-DB
|
|
2271
|
+
* collector serves its own merged aggregate. Defaults to the SQLite central store.
|
|
2272
|
+
*/
|
|
2273
|
+
orgSummary?: (org: string) => OrgSummary | Promise<OrgSummary>;
|
|
2140
2274
|
/**
|
|
2141
2275
|
* The authenticated principal (4.5 RBAC). When set, mutating tools (`run_discovery`)
|
|
2142
2276
|
* are gated by role: a `viewer` is refused with a forbidden error. Read tools are
|
|
@@ -2180,9 +2314,14 @@ interface HttpOptions {
|
|
|
2180
2314
|
* caps the body, parses JSON, and returns the hook's `{ status, body }`. When unset,
|
|
2181
2315
|
* `/ingest` 404s exactly like any other path — the collector stays dark by default.
|
|
2182
2316
|
*/
|
|
2183
|
-
onIngest?: (body: unknown) => {
|
|
2317
|
+
onIngest?: (body: unknown) => Promise<{
|
|
2184
2318
|
status: number;
|
|
2185
2319
|
body: unknown;
|
|
2320
|
+
headers?: Record<string, string>;
|
|
2321
|
+
}> | {
|
|
2322
|
+
status: number;
|
|
2323
|
+
body: unknown;
|
|
2324
|
+
headers?: Record<string, string>;
|
|
2186
2325
|
};
|
|
2187
2326
|
/**
|
|
2188
2327
|
* RBAC (4.5). When `store` holds credentials, the transport runs in RBAC mode: a
|
|
@@ -2197,6 +2336,14 @@ interface HttpOptions {
|
|
|
2197
2336
|
};
|
|
2198
2337
|
/** Tenant assigned to implicit (shared/loopback) admin principals. */
|
|
2199
2338
|
defaultTenant?: string;
|
|
2339
|
+
/**
|
|
2340
|
+
* Readiness probe (4.7). When set, `GET /readyz` calls it: 200 when `ready`, else 503.
|
|
2341
|
+
* `GET /healthz` (liveness) is always 200. Both are PUBLIC (no auth) for k8s/LB probes.
|
|
2342
|
+
*/
|
|
2343
|
+
readiness?: () => {
|
|
2344
|
+
ready: boolean;
|
|
2345
|
+
detail?: Record<string, unknown>;
|
|
2346
|
+
};
|
|
2200
2347
|
}
|
|
2201
2348
|
/**
|
|
2202
2349
|
* Start a Streamable HTTP server. A fresh MCP server instance is created per
|
|
@@ -4128,4 +4275,4 @@ declare function logInfo(message: string, context?: Record<string, unknown>): vo
|
|
|
4128
4275
|
declare function logWarn(message: string, context?: Record<string, unknown>): void;
|
|
4129
4276
|
declare function logError(message: string, context?: Record<string, unknown>): void;
|
|
4130
4277
|
|
|
4131
|
-
export { ACTIONS, ANOMALY_KINDS, ANOMALY_SEVERITIES, type Action, ActionSchema, type AgentProvider, type AgentRunContext, type AgentTool, type Anomaly, type AnomalyConfig, type AnomalyKind, type AnomalySeverity, type AnomalyThresholds, type AnonViolation, type AnonymizationLevel, type ApiServerOptions, type AskUserFn, type AuthConfig, AuthConfigSchema, AuthorizationError, type BackstageEntity, type BackstageMapOptions, type BindGuardOptions, CLIENTS, CONFIDENCE, COST_PERIODS, type CartographyConfig, CartographyDB, type CartographyMapData, type CentralDbConfig, CentralDbConfigSchema, type ClassifiedItem, type ClassifyInput, type ClassifyResult, type ClientSpec, type Cluster, ClusterSchema, type ComplianceInput, type ComplianceReport, ComplianceReportSchema, type ComplianceRule, ComplianceRuleSchema, type Condition, ConditionSchema, ConfigError, type ConfigFile, ConfigFileSchema, type ConfigFormat, type Connection, ConnectionSchema, type Contributor, type ControlResult, ControlResultSchema, type CostEntry, CostEntrySchema, type CostPeriod, type CostRecord, type CostSource, type CreateMcpServerOptions, type CredentialConfig, CredentialConfigSchema, type CredentialDb, type CredentialRecord, type CredentialStore, type CronFields, CsvCostSource, type CsvCostSourceOptions, DEFAULT_ANOMALY_THRESHOLDS, DEFAULT_FAST_MODEL, DEFAULT_LEAD_MODEL, DEFAULT_SERVER_NAME, DEFAULT_TENANT, DOMAIN_COLORS, DOMAIN_PALETTE, DRIFT_FIELDS, type DataAsset, DataAssetSchema, type DependencyQuery, type DiscoveryEdge, type DiscoveryEvent, type DiscoveryFn, type DiscoveryNode, type DriftAlert, type DriftAlertItem, type DriftConfig, DriftConfigSchema, type DriftField, type DriftItemKind, type DriftRunRow, type DriftSink, type DriftSinkConfig, EDGE_RELATIONSHIPS, type EdgeRelationship, type EdgeRow, EdgeSchema, type EmbeddingProvider, type EnrichResult, type EntryOptions, type EstablishedConn, type EvidenceKind, type FetchLike, type FragmentKind, type GraphSummary, type HealthResult, type HttpOptions, INGEST_SCHEMA_VERSION, type IngestEnvelope, IngestEnvelopeSchema, type IngestHandler, type IngestOptions, type IngestResponse, type IngestResult, type InstallPlan, InvalidTenantError, type JiraIssue, type JiraOptions, JiraSink, type JiraSinkOptions, LOOPBACK_HOSTS, type LocalDiscoveryOptions, type LocalDiscoveryResult, type LogEntry, type LogLevel, MCP_BIN, type MatchStrategy, NODE_TYPES, NODE_TYPE_GROUPS, type NlIntent, type NlQueryOptions, type NlQueryResult, type NlRelation, type NodeAttribution, type NodeChange, type NodeIdentity, type NodeQuery, type NodeRow, NodeSchema, type NodeType, type NodesResult, NotFoundError, OUTPUT_FORMATS, type OrgKeyOptions, type OrgSummary, type OsKind, type OutputFormat, PACKAGE_NAME, PAGERDUTY_ENQUEUE_URL, PENDING_STATUSES, PERSONAL, PORT_MAP, PRIVATE_IP, PUSH_SCHEMA_VERSION, type PagerDutyEvent, PagerDutySink, type PagerDutySinkOptions, type ParsedApiArgs, type PendingShareRow, type PendingStatus, type PlanOptions, type PolicyResult, type PostJsonOptions, type Principal, PrincipalSchema, type ProviderFactory, type ProviderName, ProviderRegistry, type PushItem, type PushOptions, type PushResult, type QueryBackend, RELATION_TO_DIRECTION, ROLES, type ResolveContext, type ResolveOptions, type Role, RoleSchema, type RuleCheck, RuleCheckSchema, type RuleScope, type Ruleset, RulesetSchema, type RunDriftOptions, SCAN_ARG_PATTERNS, SDL, SECURITY_METADATA_KEYS, SEVERITIES, SEVERITY_WEIGHT, SHARING_LEVELS, type ScanArgKind, type ScanContext, type ScanHintParams, type ScanResult, type Scanner, type ScannerPlugin, type ScannerPluginApi, ScannerRegistry, ScannerShape, type ScheduleConfig, ScheduleConfigSchema, type ScheduledRunResult, type Scope, type SearchFn, type SemanticSearchOptions, type ServerEntry, type SessionRow, type Severity, type SharePreview, type SharePreviewEntry, type SharingLevel, SharingLevelSchema, type SharingPolicy, type ShellKind, type SlackMessage, SlackSink, SqliteCredentialStore, SqliteQueryBackend, SqliteStoreBackend, type StartApiOptions, StdoutSink, type StoreBackend, type SyncClassifyOptions, type SyncClassifyResult, TENANT_HEADER, type TenantContext, TenantMismatchError, type TenantOptions, type ToolResult, type TopologyDelta, type TopologyDiff, type TopologyInput, type TraversalResult, VectorStore, WebhookSink, type WebhookSinkOptions, applyInstall, applySharingLevel, assertReadOnly, assertSafeBind, assertSafeScanArg, assertSameTenant, assignColors, authorize, bearerToken, bookmarksScanner, buildCartographyToolHandlers, buildMapData, buildOpenApiDocument, buildReport, buildSinks, can, centralDbFromEnv, checkBearer, checkPrerequisites, checkReadOnly, clampText, classify, classifyDrift, cleanupTempFiles, cloudAwsScanner, cloudAzureScanner, cloudGcpScanner, codeAddMcpCommand, computeCentroid, computeClusterBounds, computeIdentity, connectionsScanner, contentHash, createBashTool, createCartographyTools, createClaudeProvider, createDefaultRegistry, createHashEmbedder, createIngestHandler, createLocalEmbedder, createMcpServer, createOllamaProvider, createOpenAIProvider, createScanRunner, createSemanticSearch, createSqliteQueryBackend, currentOs, cursorDeeplink, databasesScanner, deepMerge, defaultAllowedHosts, defaultConfig, defaultContext, defaultProviderRegistry, defaultRegistry, defaultServerEntry, definePlugin, deriveSessionName, detectAnomalies, detectOrphans, detectShadowIt, diffTopology, edgesToConnections, enrichCosts, entitiesToYaml, evaluateCheck, evaluateRule, evidenceLine, executeGraphql, executeNlQuery, exportAll, exportBackstageYAML, exportComplianceReport, exportCostCSV, exportCostSummary, exportDiscoveryApp, exportJGF, exportJSON, extractListeningPorts, filterBySeverity, findAnonViolations, formatComplianceText, formatJira, formatPagerDuty, formatSlack, generateDependencyMermaid, generateDiffMermaid, generateTopologyMermaid, getClient, getRuleset, globalId, groupByDomain, handleGraphqlGet, hashToken, hexCorners, hexDistance, hexNeighbors, hexRing, hexSpiral, hexToPixel, hmacKey, hostname, ingestEnvelope, installedAppsScanner, isLoopbackHost, isPersonalHost, isReadOnlyCommand, isRemembered, isSecureWebhookUrl, k8sScanner, keyMetaOf, layoutClusters, listClients, listRulesets, loadConfig, loadOrgKey, loadPlugins, loadRuleset, localDiscoveryFn, log, logDebug, logError, logInfo, logWarn, machineId, maxSeverity, mcpServerObject, newAnomalies, nextRun, nodesToAssets, normalizeId, normalizeTenant, orgKeyPath, osUser, parseApiArgs, parseComposeDeps, parseConfig, parseConnectionString, parseCostCsv, parseCron, parseEstablished, parseNginxUpstreams, parseNlQuery, parseScanHint, pixelToHex, planInstall, portsScanner, postJson, previewShare, pseudonymize, pseudonymizeFragment, pseudonymizeString, pushDeltas, readConfigFile, redactConnectionString, redactSecrets, redactValue, renderDiff, resolveEffectiveLevel, resolveNlQuery, resolvePrincipal, resolveSharingLevel, resolveTenant, revalidateAnonymized, reversalKey, reversePseudonym, rotateOrgKey, runApi, runDiscovery, runDrift, runHttp, runLocalDiscovery, runOnce, runStdio, runSyncClassify, safeEnv, safeJson, safetyHook, sanitizeUntrusted, sanitizeValue, scopeReads, scoreTopology, securityRelevantChange, serializeConfig, serviceConfigScanner, setVerbose, shadeVariant, shapeToJsonSchema, shareHash, splitSegments, stableStringify, startApi, stripSensitive, timingSafeEqual, toBackstageEntities, validateScanner, vscodeDeeplink, zodToJsonSchema };
|
|
4278
|
+
export { ACTIONS, ANOMALY_KINDS, ANOMALY_SEVERITIES, type Action, ActionSchema, type AgentProvider, type AgentRunContext, type AgentTool, type Anomaly, type AnomalyConfig, type AnomalyKind, type AnomalySeverity, type AnomalyThresholds, type AnonViolation, type AnonymizationLevel, type ApiServerOptions, type AskUserFn, type AuthConfig, AuthConfigSchema, AuthorizationError, type Awaitable, type BackstageEntity, type BackstageMapOptions, type BindGuardOptions, type BoltDriver, type BoltRecord, type BoltResult, type BoltSession, CLIENTS, CONFIDENCE, COST_PERIODS, type CartographyConfig, CartographyDB, type CartographyMapData, type CentralDbConfig, CentralDbConfigSchema, type ClassifiedItem, type ClassifyInput, type ClassifyResult, type ClientSpec, type Cluster, ClusterSchema, type ComplianceInput, type ComplianceReport, ComplianceReportSchema, type ComplianceRule, ComplianceRuleSchema, type Condition, ConditionSchema, ConfigError, type ConfigFile, ConfigFileSchema, type ConfigFormat, type Connection, ConnectionSchema, type Contributor, type ControlResult, ControlResultSchema, type CostEntry, CostEntrySchema, type CostPeriod, type CostRecord, type CostSource, type CreateMcpServerOptions, type CredentialConfig, CredentialConfigSchema, type CredentialDb, type CredentialRecord, type CredentialStore, type CronFields, CsvCostSource, type CsvCostSourceOptions, DEFAULT_ANOMALY_THRESHOLDS, DEFAULT_FAST_MODEL, DEFAULT_INGEST_QUOTA, DEFAULT_LEAD_MODEL, DEFAULT_SERVER_NAME, DEFAULT_TENANT, DOMAIN_COLORS, DOMAIN_PALETTE, DRIFT_FIELDS, type DataAsset, DataAssetSchema, type DependencyQuery, type DiscoveryEdge, type DiscoveryEvent, type DiscoveryFn, type DiscoveryNode, type DriftAlert, type DriftAlertItem, type DriftConfig, DriftConfigSchema, type DriftField, type DriftItemKind, type DriftRunRow, type DriftSink, type DriftSinkConfig, EDGE_RELATIONSHIPS, type EdgeRelationship, type EdgeRow, EdgeSchema, type EmbeddingProvider, type EnrichResult, type EntryOptions, type EstablishedConn, type EvidenceKind, type FetchLike, type FragmentKind, GraphStoreBackend, type GraphSummary, type HealthResult, type HttpOptions, INGEST_SCHEMA_VERSION, type IngestEnvelope, IngestEnvelopeSchema, type IngestHandler, type IngestHandlerOptions, type IngestOptions, type IngestResponse, type IngestResult, type InstallPlan, InvalidTenantError, type JiraIssue, type JiraOptions, JiraSink, type JiraSinkOptions, LOOPBACK_HOSTS, type LocalDiscoveryOptions, type LocalDiscoveryResult, type LogEntry, type LogLevel, MCP_BIN, type MatchStrategy, NODE_TYPES, NODE_TYPE_GROUPS, type NlIntent, type NlQueryOptions, type NlQueryResult, type NlRelation, type NodeAttribution, type NodeChange, type NodeIdentity, type NodeQuery, type NodeRow, NodeSchema, type NodeType, type NodesResult, NotFoundError, OUTPUT_FORMATS, type OrgKeyOptions, type OrgSummary, type OsKind, type OutputFormat, PACKAGE_NAME, PAGERDUTY_ENQUEUE_URL, PENDING_STATUSES, PERSONAL, PORT_MAP, PRIVATE_IP, PUSH_SCHEMA_VERSION, type PagerDutyEvent, PagerDutySink, type PagerDutySinkOptions, type ParsedApiArgs, type PendingShareRow, type PendingStatus, type PlanOptions, type PolicyResult, type PostJsonOptions, type Principal, PrincipalSchema, type ProviderFactory, type ProviderName, ProviderRegistry, type PushItem, type PushOptions, type PushResult, type QueryBackend, type QuotaConfig, type QuotaDecision, RELATION_TO_DIRECTION, ROLES, RateLimiter, type ResolveContext, type ResolveOptions, type Role, RoleSchema, type RuleCheck, RuleCheckSchema, type RuleScope, type Ruleset, RulesetSchema, type RunDriftOptions, SCAN_ARG_PATTERNS, SCHEMA_VERSION, SDL, SECURITY_METADATA_KEYS, SEVERITIES, SEVERITY_WEIGHT, SHARING_LEVELS, type ScanArgKind, type ScanContext, type ScanHintParams, type ScanResult, type Scanner, type ScannerPlugin, type ScannerPluginApi, ScannerRegistry, ScannerShape, type ScheduleConfig, ScheduleConfigSchema, type ScheduledRunResult, type Scope, type SearchFn, type SemanticSearchOptions, type ServerEntry, type SessionRow, type Severity, type SharePreview, type SharePreviewEntry, type SharingLevel, SharingLevelSchema, type SharingPolicy, type ShellKind, type SlackMessage, SlackSink, SqliteCredentialStore, SqliteQueryBackend, SqliteStoreBackend, type StartApiOptions, StdoutSink, type StoreBackend, type StoreBackendOptions, type SyncClassifyOptions, type SyncClassifyResult, TENANT_HEADER, type TenantContext, TenantMismatchError, type TenantOptions, type ToolResult, type TopologyDelta, type TopologyDiff, type TopologyInput, type TraversalResult, VectorStore, WebhookSink, type WebhookSinkOptions, applyInstall, applySharingLevel, assertReadOnly, assertSafeBind, assertSafeScanArg, assertSameTenant, assignColors, authorize, bearerToken, bookmarksScanner, buildCartographyToolHandlers, buildMapData, buildOpenApiDocument, buildReport, buildSinks, can, centralDbFromEnv, checkBearer, checkPrerequisites, checkReadOnly, clampText, classify, classifyDrift, cleanupTempFiles, cloudAwsScanner, cloudAzureScanner, cloudGcpScanner, codeAddMcpCommand, computeCentroid, computeClusterBounds, computeIdentity, connectionsScanner, contentHash, createBashTool, createCartographyTools, createClaudeProvider, createDefaultRegistry, createHashEmbedder, createIngestHandler, createLocalEmbedder, createMcpServer, createOllamaProvider, createOpenAIProvider, createScanRunner, createSemanticSearch, createSqliteQueryBackend, currentOs, cursorDeeplink, databasesScanner, deepMerge, defaultAllowedHosts, defaultConfig, defaultContext, defaultProviderRegistry, defaultRegistry, defaultServerEntry, definePlugin, deriveSessionName, detectAnomalies, detectOrphans, detectShadowIt, diffTopology, edgesToConnections, enrichCosts, entitiesToYaml, evaluateCheck, evaluateRule, evidenceLine, executeGraphql, executeNlQuery, exportAll, exportBackstageYAML, exportComplianceReport, exportCostCSV, exportCostSummary, exportDiscoveryApp, exportJGF, exportJSON, extractListeningPorts, filterBySeverity, findAnonViolations, formatComplianceText, formatJira, formatPagerDuty, formatSlack, generateDependencyMermaid, generateDiffMermaid, generateTopologyMermaid, getClient, getRuleset, globalId, groupByDomain, handleGraphqlGet, hashToken, hexCorners, hexDistance, hexNeighbors, hexRing, hexSpiral, hexToPixel, hmacKey, hostname, ingestEnvelope, installedAppsScanner, isLoopbackHost, isPersonalHost, isReadOnlyCommand, isRemembered, isSecureWebhookUrl, k8sScanner, keyMetaOf, layoutClusters, listClients, listRulesets, loadConfig, loadOrgKey, loadPlugins, loadRuleset, localDiscoveryFn, log, logDebug, logError, logInfo, logWarn, machineId, maxSeverity, mcpServerObject, newAnomalies, nextRun, nodesToAssets, normalizeId, normalizeTenant, openStoreBackend, orgKeyPath, osUser, parseApiArgs, parseComposeDeps, parseConfig, parseConnectionString, parseCostCsv, parseCron, parseEstablished, parseNginxUpstreams, parseNlQuery, parseScanHint, pixelToHex, planInstall, portsScanner, postJson, previewShare, pseudonymize, pseudonymizeFragment, pseudonymizeString, pushDeltas, readConfigFile, redactConnectionString, redactSecrets, redactValue, renderDiff, resolveEffectiveLevel, resolveNlQuery, resolvePrincipal, resolveSharingLevel, resolveTenant, revalidateAnonymized, reversalKey, reversePseudonym, rotateOrgKey, runApi, runDiscovery, runDrift, runHttp, runLocalDiscovery, runOnce, runStdio, runSyncClassify, safeEnv, safeJson, safetyHook, sanitizeUntrusted, sanitizeValue, scopeReads, scoreTopology, securityRelevantChange, serializeConfig, serviceConfigScanner, setVerbose, shadeVariant, shapeToJsonSchema, shareHash, splitSegments, stableStringify, startApi, stripSensitive, timingSafeEqual, toBackstageEntities, validateScanner, vscodeDeeplink, zodToJsonSchema };
|
package/dist/index.d.ts
CHANGED
|
@@ -982,6 +982,12 @@ interface NodeAttribution {
|
|
|
982
982
|
|
|
983
983
|
/** Default tenant for single-user / pre-migration installs. */
|
|
984
984
|
declare const DEFAULT_TENANT = "local";
|
|
985
|
+
/**
|
|
986
|
+
* The current catalog schema version. A fresh DB initializes here and the migration
|
|
987
|
+
* chain advances to it; the collector readiness probe (4.7) asserts a reopened DB
|
|
988
|
+
* reports exactly this. Keep in lockstep with the final `user_version` set in `migrate()`.
|
|
989
|
+
*/
|
|
990
|
+
declare const SCHEMA_VERSION = 15;
|
|
985
991
|
/**
|
|
986
992
|
* Normalize an untrusted tenant id: strip invisible/control characters, trim,
|
|
987
993
|
* cap length, and enforce a conservative key charset. Falls back to DEFAULT_TENANT
|
|
@@ -1352,6 +1358,12 @@ declare class CartographyDB {
|
|
|
1352
1358
|
* Prune sessions older than the given ISO date string. Returns count of deleted sessions.
|
|
1353
1359
|
*/
|
|
1354
1360
|
pruneSessions(olderThan: string): number;
|
|
1361
|
+
/**
|
|
1362
|
+
* Retention/compaction (4.7): delete audit events older than `olderThan` (ISO 8601).
|
|
1363
|
+
* The audit trail grows unbounded on a busy collector; this bounds it without touching
|
|
1364
|
+
* sessions/nodes/edges. Returns the number of events removed.
|
|
1365
|
+
*/
|
|
1366
|
+
pruneEventsOlderThan(olderThan: string): number;
|
|
1355
1367
|
/** Fetch a single node by id within a session. */
|
|
1356
1368
|
getNode(sessionId: string, nodeId: string): NodeRow | undefined;
|
|
1357
1369
|
/** Batch-fetch nodes by id, keyed for O(1) lookup. Chunked to stay under SQLite's bind-variable limit. */
|
|
@@ -1457,9 +1469,18 @@ interface NodeIdentity {
|
|
|
1457
1469
|
/** Secondary merge key — content hash that catches `id` drift between machines. */
|
|
1458
1470
|
contentHash: string;
|
|
1459
1471
|
}
|
|
1472
|
+
/**
|
|
1473
|
+
* A value that may be produced synchronously (SQLite, `better-sqlite3`) or
|
|
1474
|
+
* asynchronously (a graph DB over the async Bolt driver, 4.3). The ingest core
|
|
1475
|
+
* `await`s every backend call, so a sync implementation incurs no overhead and the
|
|
1476
|
+
* SQLite path stays byte-for-byte synchronous.
|
|
1477
|
+
*/
|
|
1478
|
+
type Awaitable<T> = T | Promise<T>;
|
|
1460
1479
|
/**
|
|
1461
1480
|
* A provider-agnostic central store. All operations are scoped to a single tenant
|
|
1462
|
-
* (`org`); there is no cross-tenant read or write path.
|
|
1481
|
+
* (`org`); there is no cross-tenant read or write path. Methods are **async-capable**
|
|
1482
|
+
* (4.3): `SqliteStoreBackend` returns synchronously, `GraphStoreBackend` returns
|
|
1483
|
+
* Promises; consumers await either.
|
|
1463
1484
|
*/
|
|
1464
1485
|
interface StoreBackend {
|
|
1465
1486
|
/**
|
|
@@ -1468,15 +1489,15 @@ interface StoreBackend {
|
|
|
1468
1489
|
* `'created'` when this is the first observation of the logical node, `'merged'`
|
|
1469
1490
|
* when it collapsed onto an existing one.
|
|
1470
1491
|
*/
|
|
1471
|
-
upsertNode(org: string, node: DiscoveryNode, identity: NodeIdentity, contributor: Contributor): 'created' | 'merged'
|
|
1492
|
+
upsertNode(org: string, node: DiscoveryNode, identity: NodeIdentity, contributor: Contributor): Awaitable<'created' | 'merged'>;
|
|
1472
1493
|
/** Insert an edge under `org` (idempotent on the logical `(source, target, relationship)` key). */
|
|
1473
|
-
insertEdge(org: string, edge: DiscoveryEdge): void
|
|
1494
|
+
insertEdge(org: string, edge: DiscoveryEdge): Awaitable<void>;
|
|
1474
1495
|
/** Org-wide aggregate summary (merged counts across all contributors). */
|
|
1475
|
-
getSummary(org: string): OrgSummary
|
|
1496
|
+
getSummary(org: string): Awaitable<OrgSummary>;
|
|
1476
1497
|
/** Contributors for a merged logical node (test/audit helper). */
|
|
1477
|
-
getContributors(globalId: string): Contributor[]
|
|
1498
|
+
getContributors(globalId: string): Awaitable<Contributor[]>;
|
|
1478
1499
|
/** Release any underlying resources. */
|
|
1479
|
-
close(): void
|
|
1500
|
+
close(): Awaitable<void>;
|
|
1480
1501
|
}
|
|
1481
1502
|
|
|
1482
1503
|
/**
|
|
@@ -1507,6 +1528,76 @@ declare class SqliteStoreBackend implements StoreBackend {
|
|
|
1507
1528
|
close(): void;
|
|
1508
1529
|
}
|
|
1509
1530
|
|
|
1531
|
+
/**
|
|
1532
|
+
* `GraphStoreBackend` (4.3) — an opt-in central-store backend over a Bolt-speaking
|
|
1533
|
+
* graph database (Neo4j / Memgraph). Implements the async-capable {@link StoreBackend}
|
|
1534
|
+
* seam so the central collector's merge + org-summary path can scale to 10K+ nodes on a
|
|
1535
|
+
* native graph engine, while SQLite stays the zero-config default.
|
|
1536
|
+
*
|
|
1537
|
+
* `neo4j-driver` is an OPTIONAL dependency, dynamically imported by `openStoreBackend`
|
|
1538
|
+
* (`src/store/index.ts`); this module depends only on a minimal structural Bolt interface,
|
|
1539
|
+
* so it compiles and the package degrades gracefully when the driver is absent. The driver
|
|
1540
|
+
* is injected (constructor), which also lets tests drive it with a mock — no live DB in CI.
|
|
1541
|
+
*
|
|
1542
|
+
* Merge identity mirrors SQLite: a logical node is keyed by `(org, globalId)`; the
|
|
1543
|
+
* `contentHash` is stored + indexed for the id-drift secondary collapse (best-effort here,
|
|
1544
|
+
* tracked as a follow-up). Contributors are `(org, globalId, machineId)` with max-confidence.
|
|
1545
|
+
*/
|
|
1546
|
+
|
|
1547
|
+
interface BoltRecord {
|
|
1548
|
+
get(key: string): unknown;
|
|
1549
|
+
}
|
|
1550
|
+
interface BoltResult {
|
|
1551
|
+
records: BoltRecord[];
|
|
1552
|
+
}
|
|
1553
|
+
interface BoltSession {
|
|
1554
|
+
run(cypher: string, params?: Record<string, unknown>): Promise<BoltResult>;
|
|
1555
|
+
close(): Promise<void>;
|
|
1556
|
+
}
|
|
1557
|
+
interface BoltDriver {
|
|
1558
|
+
session(): BoltSession;
|
|
1559
|
+
close(): Promise<void>;
|
|
1560
|
+
verifyConnectivity?(): Promise<unknown>;
|
|
1561
|
+
}
|
|
1562
|
+
declare class GraphStoreBackend implements StoreBackend {
|
|
1563
|
+
private readonly driver;
|
|
1564
|
+
constructor(driver: BoltDriver);
|
|
1565
|
+
private run;
|
|
1566
|
+
upsertNode(org: string, node: DiscoveryNode, identity: NodeIdentity, contributor: Contributor): Promise<'created' | 'merged'>;
|
|
1567
|
+
insertEdge(org: string, edge: DiscoveryEdge): Promise<void>;
|
|
1568
|
+
getSummary(org: string): Promise<OrgSummary>;
|
|
1569
|
+
getContributors(globalId: string): Promise<Contributor[]>;
|
|
1570
|
+
close(): Promise<void>;
|
|
1571
|
+
}
|
|
1572
|
+
|
|
1573
|
+
/**
|
|
1574
|
+
* Central-store backend factory (4.3).
|
|
1575
|
+
*
|
|
1576
|
+
* `openStoreBackend` returns a {@link GraphStoreBackend} only when a graph backend is
|
|
1577
|
+
* explicitly requested AND the optional `neo4j-driver` is installed AND the server is
|
|
1578
|
+
* reachable; otherwise it logs a structured WARN and returns the always-available
|
|
1579
|
+
* {@link SqliteStoreBackend}. A missing driver or an unreachable graph server therefore
|
|
1580
|
+
* NEVER breaks the collector — it degrades to SQLite (the "optional deps degrade" locked
|
|
1581
|
+
* constraint). SQLite stays the zero-config default.
|
|
1582
|
+
*/
|
|
1583
|
+
|
|
1584
|
+
interface StoreBackendOptions {
|
|
1585
|
+
/** `'graph'` opts into the graph DB; anything else (default) uses SQLite. */
|
|
1586
|
+
backend?: 'sqlite' | 'graph';
|
|
1587
|
+
/** Bolt URL, e.g. `bolt://graph.internal:7687` or `neo4j+s://…`. */
|
|
1588
|
+
graphUrl?: string;
|
|
1589
|
+
graphUser?: string;
|
|
1590
|
+
graphPassword?: string;
|
|
1591
|
+
/** Injected driver factory (tests). Defaults to dynamically importing `neo4j-driver`. */
|
|
1592
|
+
driverFactory?: (url: string, user: string, password: string) => Promise<BoltDriver>;
|
|
1593
|
+
}
|
|
1594
|
+
/**
|
|
1595
|
+
* Resolve the central store backend. Graph when requested + available; else SQLite.
|
|
1596
|
+
* The returned backend is owned by the caller (call `close()` on shutdown for the graph
|
|
1597
|
+
* backend; the SQLite backend's `close()` is a no-op — the `CartographyDB` is shared).
|
|
1598
|
+
*/
|
|
1599
|
+
declare function openStoreBackend(db: CartographyDB, opts?: StoreBackendOptions): Promise<StoreBackend>;
|
|
1600
|
+
|
|
1510
1601
|
/**
|
|
1511
1602
|
* `QueryBackend` — the **read-only** query seam for the API server (4.2).
|
|
1512
1603
|
*
|
|
@@ -1758,7 +1849,38 @@ interface IngestOptions {
|
|
|
1758
1849
|
* The caller (HTTP handler) wraps this in try/catch; the store's per-node upsert is
|
|
1759
1850
|
* itself transactional, so a single bad node never half-writes a row.
|
|
1760
1851
|
*/
|
|
1761
|
-
declare function ingestEnvelope(store: StoreBackend, envelope: IngestEnvelope, opts?: IngestOptions): IngestResult
|
|
1852
|
+
declare function ingestEnvelope(store: StoreBackend, envelope: IngestEnvelope, opts?: IngestOptions): Promise<IngestResult>;
|
|
1853
|
+
|
|
1854
|
+
/**
|
|
1855
|
+
* Ingest backpressure for the central collector (4.7).
|
|
1856
|
+
*
|
|
1857
|
+
* A pure, in-memory **per-org token-bucket** rate limiter. The networked `POST /ingest`
|
|
1858
|
+
* write endpoint must protect the shared store from a runaway or hostile client; over-quota
|
|
1859
|
+
* requests are refused with `429 + Retry-After` rather than admitted. Deterministic given an
|
|
1860
|
+
* injected clock, so it is unit-testable without real time. In-process only (a multi-replica
|
|
1861
|
+
* deployment would front it with a shared limiter; documented in the runbook).
|
|
1862
|
+
*/
|
|
1863
|
+
interface QuotaConfig {
|
|
1864
|
+
/** Bucket capacity = max burst, and the number of tokens refilled over one `refillMs` window. */
|
|
1865
|
+
capacity: number;
|
|
1866
|
+
/** Milliseconds over which a fully-drained bucket refills to `capacity`. */
|
|
1867
|
+
refillMs: number;
|
|
1868
|
+
}
|
|
1869
|
+
/** Sensible default: 120 ingests / minute / org (burst 120). */
|
|
1870
|
+
declare const DEFAULT_INGEST_QUOTA: QuotaConfig;
|
|
1871
|
+
interface QuotaDecision {
|
|
1872
|
+
allowed: boolean;
|
|
1873
|
+
/** Seconds to wait before retrying — populated only when `!allowed` (≥1). */
|
|
1874
|
+
retryAfterSec: number;
|
|
1875
|
+
}
|
|
1876
|
+
declare class RateLimiter {
|
|
1877
|
+
private readonly cfg;
|
|
1878
|
+
private readonly now;
|
|
1879
|
+
private readonly buckets;
|
|
1880
|
+
constructor(cfg?: QuotaConfig, now?: () => number);
|
|
1881
|
+
/** Consume one token for `key`. Returns whether the request is allowed (+ Retry-After when not). */
|
|
1882
|
+
take(key: string): QuotaDecision;
|
|
1883
|
+
}
|
|
1762
1884
|
|
|
1763
1885
|
/**
|
|
1764
1886
|
* The central-collector ingest HTTP surface (2.12).
|
|
@@ -1775,12 +1897,18 @@ declare function ingestEnvelope(store: StoreBackend, envelope: IngestEnvelope, o
|
|
|
1775
1897
|
* handler ever runs, so the handler never sees (and never logs) the token.
|
|
1776
1898
|
*/
|
|
1777
1899
|
|
|
1778
|
-
/** A transport-agnostic HTTP-ish response: a status code
|
|
1900
|
+
/** A transport-agnostic HTTP-ish response: a status code, a JSON-serializable body, optional headers. */
|
|
1779
1901
|
interface IngestResponse {
|
|
1780
1902
|
status: number;
|
|
1781
1903
|
body: unknown;
|
|
1904
|
+
/** Extra response headers (e.g. `Retry-After` on a 429). */
|
|
1905
|
+
headers?: Record<string, string>;
|
|
1906
|
+
}
|
|
1907
|
+
type IngestHandler = (body: unknown) => Promise<IngestResponse>;
|
|
1908
|
+
interface IngestHandlerOptions extends IngestOptions {
|
|
1909
|
+
/** Per-org ingest rate limiter (4.7 backpressure). Over-quota → 429 + Retry-After. */
|
|
1910
|
+
quota?: RateLimiter;
|
|
1782
1911
|
}
|
|
1783
|
-
type IngestHandler = (body: unknown) => IngestResponse;
|
|
1784
1912
|
/**
|
|
1785
1913
|
* Build the `/ingest` handler over a {@link StoreBackend}. The handler validates the
|
|
1786
1914
|
* 2.11 push envelope, runs ingest (re-validating anonymization first), and maps the
|
|
@@ -1789,7 +1917,7 @@ type IngestHandler = (body: unknown) => IngestResponse;
|
|
|
1789
1917
|
* - 500 — ingest threw (the store's per-node transaction rolls that node back).
|
|
1790
1918
|
* - 200 — {@link IngestResult}.
|
|
1791
1919
|
*/
|
|
1792
|
-
declare function createIngestHandler(store: StoreBackend, opts?:
|
|
1920
|
+
declare function createIngestHandler(store: StoreBackend, opts?: IngestHandlerOptions): IngestHandler;
|
|
1793
1921
|
|
|
1794
1922
|
/**
|
|
1795
1923
|
* Org-key lifecycle for the 2.10 anonymization layer.
|
|
@@ -2137,6 +2265,12 @@ interface CreateMcpServerOptions {
|
|
|
2137
2265
|
* behaviour exactly. The org is normalized to a tenant.
|
|
2138
2266
|
*/
|
|
2139
2267
|
org?: string;
|
|
2268
|
+
/**
|
|
2269
|
+
* Org-wide summary source (4.3). When set (server-mode with a graph backend), the
|
|
2270
|
+
* org `get_summary` reads from here instead of `db.getOrgSummary` — so a graph-DB
|
|
2271
|
+
* collector serves its own merged aggregate. Defaults to the SQLite central store.
|
|
2272
|
+
*/
|
|
2273
|
+
orgSummary?: (org: string) => OrgSummary | Promise<OrgSummary>;
|
|
2140
2274
|
/**
|
|
2141
2275
|
* The authenticated principal (4.5 RBAC). When set, mutating tools (`run_discovery`)
|
|
2142
2276
|
* are gated by role: a `viewer` is refused with a forbidden error. Read tools are
|
|
@@ -2180,9 +2314,14 @@ interface HttpOptions {
|
|
|
2180
2314
|
* caps the body, parses JSON, and returns the hook's `{ status, body }`. When unset,
|
|
2181
2315
|
* `/ingest` 404s exactly like any other path — the collector stays dark by default.
|
|
2182
2316
|
*/
|
|
2183
|
-
onIngest?: (body: unknown) => {
|
|
2317
|
+
onIngest?: (body: unknown) => Promise<{
|
|
2184
2318
|
status: number;
|
|
2185
2319
|
body: unknown;
|
|
2320
|
+
headers?: Record<string, string>;
|
|
2321
|
+
}> | {
|
|
2322
|
+
status: number;
|
|
2323
|
+
body: unknown;
|
|
2324
|
+
headers?: Record<string, string>;
|
|
2186
2325
|
};
|
|
2187
2326
|
/**
|
|
2188
2327
|
* RBAC (4.5). When `store` holds credentials, the transport runs in RBAC mode: a
|
|
@@ -2197,6 +2336,14 @@ interface HttpOptions {
|
|
|
2197
2336
|
};
|
|
2198
2337
|
/** Tenant assigned to implicit (shared/loopback) admin principals. */
|
|
2199
2338
|
defaultTenant?: string;
|
|
2339
|
+
/**
|
|
2340
|
+
* Readiness probe (4.7). When set, `GET /readyz` calls it: 200 when `ready`, else 503.
|
|
2341
|
+
* `GET /healthz` (liveness) is always 200. Both are PUBLIC (no auth) for k8s/LB probes.
|
|
2342
|
+
*/
|
|
2343
|
+
readiness?: () => {
|
|
2344
|
+
ready: boolean;
|
|
2345
|
+
detail?: Record<string, unknown>;
|
|
2346
|
+
};
|
|
2200
2347
|
}
|
|
2201
2348
|
/**
|
|
2202
2349
|
* Start a Streamable HTTP server. A fresh MCP server instance is created per
|
|
@@ -4128,4 +4275,4 @@ declare function logInfo(message: string, context?: Record<string, unknown>): vo
|
|
|
4128
4275
|
declare function logWarn(message: string, context?: Record<string, unknown>): void;
|
|
4129
4276
|
declare function logError(message: string, context?: Record<string, unknown>): void;
|
|
4130
4277
|
|
|
4131
|
-
export { ACTIONS, ANOMALY_KINDS, ANOMALY_SEVERITIES, type Action, ActionSchema, type AgentProvider, type AgentRunContext, type AgentTool, type Anomaly, type AnomalyConfig, type AnomalyKind, type AnomalySeverity, type AnomalyThresholds, type AnonViolation, type AnonymizationLevel, type ApiServerOptions, type AskUserFn, type AuthConfig, AuthConfigSchema, AuthorizationError, type BackstageEntity, type BackstageMapOptions, type BindGuardOptions, CLIENTS, CONFIDENCE, COST_PERIODS, type CartographyConfig, CartographyDB, type CartographyMapData, type CentralDbConfig, CentralDbConfigSchema, type ClassifiedItem, type ClassifyInput, type ClassifyResult, type ClientSpec, type Cluster, ClusterSchema, type ComplianceInput, type ComplianceReport, ComplianceReportSchema, type ComplianceRule, ComplianceRuleSchema, type Condition, ConditionSchema, ConfigError, type ConfigFile, ConfigFileSchema, type ConfigFormat, type Connection, ConnectionSchema, type Contributor, type ControlResult, ControlResultSchema, type CostEntry, CostEntrySchema, type CostPeriod, type CostRecord, type CostSource, type CreateMcpServerOptions, type CredentialConfig, CredentialConfigSchema, type CredentialDb, type CredentialRecord, type CredentialStore, type CronFields, CsvCostSource, type CsvCostSourceOptions, DEFAULT_ANOMALY_THRESHOLDS, DEFAULT_FAST_MODEL, DEFAULT_LEAD_MODEL, DEFAULT_SERVER_NAME, DEFAULT_TENANT, DOMAIN_COLORS, DOMAIN_PALETTE, DRIFT_FIELDS, type DataAsset, DataAssetSchema, type DependencyQuery, type DiscoveryEdge, type DiscoveryEvent, type DiscoveryFn, type DiscoveryNode, type DriftAlert, type DriftAlertItem, type DriftConfig, DriftConfigSchema, type DriftField, type DriftItemKind, type DriftRunRow, type DriftSink, type DriftSinkConfig, EDGE_RELATIONSHIPS, type EdgeRelationship, type EdgeRow, EdgeSchema, type EmbeddingProvider, type EnrichResult, type EntryOptions, type EstablishedConn, type EvidenceKind, type FetchLike, type FragmentKind, type GraphSummary, type HealthResult, type HttpOptions, INGEST_SCHEMA_VERSION, type IngestEnvelope, IngestEnvelopeSchema, type IngestHandler, type IngestOptions, type IngestResponse, type IngestResult, type InstallPlan, InvalidTenantError, type JiraIssue, type JiraOptions, JiraSink, type JiraSinkOptions, LOOPBACK_HOSTS, type LocalDiscoveryOptions, type LocalDiscoveryResult, type LogEntry, type LogLevel, MCP_BIN, type MatchStrategy, NODE_TYPES, NODE_TYPE_GROUPS, type NlIntent, type NlQueryOptions, type NlQueryResult, type NlRelation, type NodeAttribution, type NodeChange, type NodeIdentity, type NodeQuery, type NodeRow, NodeSchema, type NodeType, type NodesResult, NotFoundError, OUTPUT_FORMATS, type OrgKeyOptions, type OrgSummary, type OsKind, type OutputFormat, PACKAGE_NAME, PAGERDUTY_ENQUEUE_URL, PENDING_STATUSES, PERSONAL, PORT_MAP, PRIVATE_IP, PUSH_SCHEMA_VERSION, type PagerDutyEvent, PagerDutySink, type PagerDutySinkOptions, type ParsedApiArgs, type PendingShareRow, type PendingStatus, type PlanOptions, type PolicyResult, type PostJsonOptions, type Principal, PrincipalSchema, type ProviderFactory, type ProviderName, ProviderRegistry, type PushItem, type PushOptions, type PushResult, type QueryBackend, RELATION_TO_DIRECTION, ROLES, type ResolveContext, type ResolveOptions, type Role, RoleSchema, type RuleCheck, RuleCheckSchema, type RuleScope, type Ruleset, RulesetSchema, type RunDriftOptions, SCAN_ARG_PATTERNS, SDL, SECURITY_METADATA_KEYS, SEVERITIES, SEVERITY_WEIGHT, SHARING_LEVELS, type ScanArgKind, type ScanContext, type ScanHintParams, type ScanResult, type Scanner, type ScannerPlugin, type ScannerPluginApi, ScannerRegistry, ScannerShape, type ScheduleConfig, ScheduleConfigSchema, type ScheduledRunResult, type Scope, type SearchFn, type SemanticSearchOptions, type ServerEntry, type SessionRow, type Severity, type SharePreview, type SharePreviewEntry, type SharingLevel, SharingLevelSchema, type SharingPolicy, type ShellKind, type SlackMessage, SlackSink, SqliteCredentialStore, SqliteQueryBackend, SqliteStoreBackend, type StartApiOptions, StdoutSink, type StoreBackend, type SyncClassifyOptions, type SyncClassifyResult, TENANT_HEADER, type TenantContext, TenantMismatchError, type TenantOptions, type ToolResult, type TopologyDelta, type TopologyDiff, type TopologyInput, type TraversalResult, VectorStore, WebhookSink, type WebhookSinkOptions, applyInstall, applySharingLevel, assertReadOnly, assertSafeBind, assertSafeScanArg, assertSameTenant, assignColors, authorize, bearerToken, bookmarksScanner, buildCartographyToolHandlers, buildMapData, buildOpenApiDocument, buildReport, buildSinks, can, centralDbFromEnv, checkBearer, checkPrerequisites, checkReadOnly, clampText, classify, classifyDrift, cleanupTempFiles, cloudAwsScanner, cloudAzureScanner, cloudGcpScanner, codeAddMcpCommand, computeCentroid, computeClusterBounds, computeIdentity, connectionsScanner, contentHash, createBashTool, createCartographyTools, createClaudeProvider, createDefaultRegistry, createHashEmbedder, createIngestHandler, createLocalEmbedder, createMcpServer, createOllamaProvider, createOpenAIProvider, createScanRunner, createSemanticSearch, createSqliteQueryBackend, currentOs, cursorDeeplink, databasesScanner, deepMerge, defaultAllowedHosts, defaultConfig, defaultContext, defaultProviderRegistry, defaultRegistry, defaultServerEntry, definePlugin, deriveSessionName, detectAnomalies, detectOrphans, detectShadowIt, diffTopology, edgesToConnections, enrichCosts, entitiesToYaml, evaluateCheck, evaluateRule, evidenceLine, executeGraphql, executeNlQuery, exportAll, exportBackstageYAML, exportComplianceReport, exportCostCSV, exportCostSummary, exportDiscoveryApp, exportJGF, exportJSON, extractListeningPorts, filterBySeverity, findAnonViolations, formatComplianceText, formatJira, formatPagerDuty, formatSlack, generateDependencyMermaid, generateDiffMermaid, generateTopologyMermaid, getClient, getRuleset, globalId, groupByDomain, handleGraphqlGet, hashToken, hexCorners, hexDistance, hexNeighbors, hexRing, hexSpiral, hexToPixel, hmacKey, hostname, ingestEnvelope, installedAppsScanner, isLoopbackHost, isPersonalHost, isReadOnlyCommand, isRemembered, isSecureWebhookUrl, k8sScanner, keyMetaOf, layoutClusters, listClients, listRulesets, loadConfig, loadOrgKey, loadPlugins, loadRuleset, localDiscoveryFn, log, logDebug, logError, logInfo, logWarn, machineId, maxSeverity, mcpServerObject, newAnomalies, nextRun, nodesToAssets, normalizeId, normalizeTenant, orgKeyPath, osUser, parseApiArgs, parseComposeDeps, parseConfig, parseConnectionString, parseCostCsv, parseCron, parseEstablished, parseNginxUpstreams, parseNlQuery, parseScanHint, pixelToHex, planInstall, portsScanner, postJson, previewShare, pseudonymize, pseudonymizeFragment, pseudonymizeString, pushDeltas, readConfigFile, redactConnectionString, redactSecrets, redactValue, renderDiff, resolveEffectiveLevel, resolveNlQuery, resolvePrincipal, resolveSharingLevel, resolveTenant, revalidateAnonymized, reversalKey, reversePseudonym, rotateOrgKey, runApi, runDiscovery, runDrift, runHttp, runLocalDiscovery, runOnce, runStdio, runSyncClassify, safeEnv, safeJson, safetyHook, sanitizeUntrusted, sanitizeValue, scopeReads, scoreTopology, securityRelevantChange, serializeConfig, serviceConfigScanner, setVerbose, shadeVariant, shapeToJsonSchema, shareHash, splitSegments, stableStringify, startApi, stripSensitive, timingSafeEqual, toBackstageEntities, validateScanner, vscodeDeeplink, zodToJsonSchema };
|
|
4278
|
+
export { ACTIONS, ANOMALY_KINDS, ANOMALY_SEVERITIES, type Action, ActionSchema, type AgentProvider, type AgentRunContext, type AgentTool, type Anomaly, type AnomalyConfig, type AnomalyKind, type AnomalySeverity, type AnomalyThresholds, type AnonViolation, type AnonymizationLevel, type ApiServerOptions, type AskUserFn, type AuthConfig, AuthConfigSchema, AuthorizationError, type Awaitable, type BackstageEntity, type BackstageMapOptions, type BindGuardOptions, type BoltDriver, type BoltRecord, type BoltResult, type BoltSession, CLIENTS, CONFIDENCE, COST_PERIODS, type CartographyConfig, CartographyDB, type CartographyMapData, type CentralDbConfig, CentralDbConfigSchema, type ClassifiedItem, type ClassifyInput, type ClassifyResult, type ClientSpec, type Cluster, ClusterSchema, type ComplianceInput, type ComplianceReport, ComplianceReportSchema, type ComplianceRule, ComplianceRuleSchema, type Condition, ConditionSchema, ConfigError, type ConfigFile, ConfigFileSchema, type ConfigFormat, type Connection, ConnectionSchema, type Contributor, type ControlResult, ControlResultSchema, type CostEntry, CostEntrySchema, type CostPeriod, type CostRecord, type CostSource, type CreateMcpServerOptions, type CredentialConfig, CredentialConfigSchema, type CredentialDb, type CredentialRecord, type CredentialStore, type CronFields, CsvCostSource, type CsvCostSourceOptions, DEFAULT_ANOMALY_THRESHOLDS, DEFAULT_FAST_MODEL, DEFAULT_INGEST_QUOTA, DEFAULT_LEAD_MODEL, DEFAULT_SERVER_NAME, DEFAULT_TENANT, DOMAIN_COLORS, DOMAIN_PALETTE, DRIFT_FIELDS, type DataAsset, DataAssetSchema, type DependencyQuery, type DiscoveryEdge, type DiscoveryEvent, type DiscoveryFn, type DiscoveryNode, type DriftAlert, type DriftAlertItem, type DriftConfig, DriftConfigSchema, type DriftField, type DriftItemKind, type DriftRunRow, type DriftSink, type DriftSinkConfig, EDGE_RELATIONSHIPS, type EdgeRelationship, type EdgeRow, EdgeSchema, type EmbeddingProvider, type EnrichResult, type EntryOptions, type EstablishedConn, type EvidenceKind, type FetchLike, type FragmentKind, GraphStoreBackend, type GraphSummary, type HealthResult, type HttpOptions, INGEST_SCHEMA_VERSION, type IngestEnvelope, IngestEnvelopeSchema, type IngestHandler, type IngestHandlerOptions, type IngestOptions, type IngestResponse, type IngestResult, type InstallPlan, InvalidTenantError, type JiraIssue, type JiraOptions, JiraSink, type JiraSinkOptions, LOOPBACK_HOSTS, type LocalDiscoveryOptions, type LocalDiscoveryResult, type LogEntry, type LogLevel, MCP_BIN, type MatchStrategy, NODE_TYPES, NODE_TYPE_GROUPS, type NlIntent, type NlQueryOptions, type NlQueryResult, type NlRelation, type NodeAttribution, type NodeChange, type NodeIdentity, type NodeQuery, type NodeRow, NodeSchema, type NodeType, type NodesResult, NotFoundError, OUTPUT_FORMATS, type OrgKeyOptions, type OrgSummary, type OsKind, type OutputFormat, PACKAGE_NAME, PAGERDUTY_ENQUEUE_URL, PENDING_STATUSES, PERSONAL, PORT_MAP, PRIVATE_IP, PUSH_SCHEMA_VERSION, type PagerDutyEvent, PagerDutySink, type PagerDutySinkOptions, type ParsedApiArgs, type PendingShareRow, type PendingStatus, type PlanOptions, type PolicyResult, type PostJsonOptions, type Principal, PrincipalSchema, type ProviderFactory, type ProviderName, ProviderRegistry, type PushItem, type PushOptions, type PushResult, type QueryBackend, type QuotaConfig, type QuotaDecision, RELATION_TO_DIRECTION, ROLES, RateLimiter, type ResolveContext, type ResolveOptions, type Role, RoleSchema, type RuleCheck, RuleCheckSchema, type RuleScope, type Ruleset, RulesetSchema, type RunDriftOptions, SCAN_ARG_PATTERNS, SCHEMA_VERSION, SDL, SECURITY_METADATA_KEYS, SEVERITIES, SEVERITY_WEIGHT, SHARING_LEVELS, type ScanArgKind, type ScanContext, type ScanHintParams, type ScanResult, type Scanner, type ScannerPlugin, type ScannerPluginApi, ScannerRegistry, ScannerShape, type ScheduleConfig, ScheduleConfigSchema, type ScheduledRunResult, type Scope, type SearchFn, type SemanticSearchOptions, type ServerEntry, type SessionRow, type Severity, type SharePreview, type SharePreviewEntry, type SharingLevel, SharingLevelSchema, type SharingPolicy, type ShellKind, type SlackMessage, SlackSink, SqliteCredentialStore, SqliteQueryBackend, SqliteStoreBackend, type StartApiOptions, StdoutSink, type StoreBackend, type StoreBackendOptions, type SyncClassifyOptions, type SyncClassifyResult, TENANT_HEADER, type TenantContext, TenantMismatchError, type TenantOptions, type ToolResult, type TopologyDelta, type TopologyDiff, type TopologyInput, type TraversalResult, VectorStore, WebhookSink, type WebhookSinkOptions, applyInstall, applySharingLevel, assertReadOnly, assertSafeBind, assertSafeScanArg, assertSameTenant, assignColors, authorize, bearerToken, bookmarksScanner, buildCartographyToolHandlers, buildMapData, buildOpenApiDocument, buildReport, buildSinks, can, centralDbFromEnv, checkBearer, checkPrerequisites, checkReadOnly, clampText, classify, classifyDrift, cleanupTempFiles, cloudAwsScanner, cloudAzureScanner, cloudGcpScanner, codeAddMcpCommand, computeCentroid, computeClusterBounds, computeIdentity, connectionsScanner, contentHash, createBashTool, createCartographyTools, createClaudeProvider, createDefaultRegistry, createHashEmbedder, createIngestHandler, createLocalEmbedder, createMcpServer, createOllamaProvider, createOpenAIProvider, createScanRunner, createSemanticSearch, createSqliteQueryBackend, currentOs, cursorDeeplink, databasesScanner, deepMerge, defaultAllowedHosts, defaultConfig, defaultContext, defaultProviderRegistry, defaultRegistry, defaultServerEntry, definePlugin, deriveSessionName, detectAnomalies, detectOrphans, detectShadowIt, diffTopology, edgesToConnections, enrichCosts, entitiesToYaml, evaluateCheck, evaluateRule, evidenceLine, executeGraphql, executeNlQuery, exportAll, exportBackstageYAML, exportComplianceReport, exportCostCSV, exportCostSummary, exportDiscoveryApp, exportJGF, exportJSON, extractListeningPorts, filterBySeverity, findAnonViolations, formatComplianceText, formatJira, formatPagerDuty, formatSlack, generateDependencyMermaid, generateDiffMermaid, generateTopologyMermaid, getClient, getRuleset, globalId, groupByDomain, handleGraphqlGet, hashToken, hexCorners, hexDistance, hexNeighbors, hexRing, hexSpiral, hexToPixel, hmacKey, hostname, ingestEnvelope, installedAppsScanner, isLoopbackHost, isPersonalHost, isReadOnlyCommand, isRemembered, isSecureWebhookUrl, k8sScanner, keyMetaOf, layoutClusters, listClients, listRulesets, loadConfig, loadOrgKey, loadPlugins, loadRuleset, localDiscoveryFn, log, logDebug, logError, logInfo, logWarn, machineId, maxSeverity, mcpServerObject, newAnomalies, nextRun, nodesToAssets, normalizeId, normalizeTenant, openStoreBackend, orgKeyPath, osUser, parseApiArgs, parseComposeDeps, parseConfig, parseConnectionString, parseCostCsv, parseCron, parseEstablished, parseNginxUpstreams, parseNlQuery, parseScanHint, pixelToHex, planInstall, portsScanner, postJson, previewShare, pseudonymize, pseudonymizeFragment, pseudonymizeString, pushDeltas, readConfigFile, redactConnectionString, redactSecrets, redactValue, renderDiff, resolveEffectiveLevel, resolveNlQuery, resolvePrincipal, resolveSharingLevel, resolveTenant, revalidateAnonymized, reversalKey, reversePseudonym, rotateOrgKey, runApi, runDiscovery, runDrift, runHttp, runLocalDiscovery, runOnce, runStdio, runSyncClassify, safeEnv, safeJson, safetyHook, sanitizeUntrusted, sanitizeValue, scopeReads, scoreTopology, securityRelevantChange, serializeConfig, serviceConfigScanner, setVerbose, shadeVariant, shapeToJsonSchema, shareHash, splitSegments, stableStringify, startApi, stripSensitive, timingSafeEqual, toBackstageEntities, validateScanner, vscodeDeeplink, zodToJsonSchema };
|