@akasecurity/ai-tc-claude-code 0.9.0 → 0.9.2
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/.claude-plugin/plugin.json +1 -1
- package/README.md +3 -1
- package/commands/setup.md +112 -29
- package/package.json +4 -4
- package/scripts/apply-suppressions.js +4607 -848
- package/scripts/backfill.js +2346 -639
- package/scripts/filescan.js +3554 -756
- package/scripts/firstrun.js +2132 -583
- package/scripts/intro.js +908 -168
- package/scripts/onboard.js +2140 -582
- package/scripts/post-tool-use.js +2344 -628
- package/scripts/pre-tool-use.js +2349 -633
- package/scripts/query.js +2133 -584
- package/scripts/reconcile.js +2158 -603
- package/scripts/remediate.js +2341 -640
- package/scripts/session-start.js +2216 -657
- package/scripts/start-light.js +911 -171
- package/scripts/statusline.js +2146 -587
- package/scripts/stop.js +965 -188
- package/scripts/triage-rubric.md +4 -3
- package/scripts/user-prompt-submit.js +2352 -636
package/scripts/intro.js
CHANGED
|
@@ -15182,7 +15182,12 @@ var FindingFacets = external_exports.object({
|
|
|
15182
15182
|
severity: external_exports.array(FindingFacetItem),
|
|
15183
15183
|
subtype: external_exports.array(FindingFacetItem),
|
|
15184
15184
|
provider: external_exports.array(FindingFacetItem),
|
|
15185
|
-
action: external_exports.array(FindingFacetItem)
|
|
15185
|
+
action: external_exports.array(FindingFacetItem),
|
|
15186
|
+
// Counts by the group's derived status. The SQLite store derives a status
|
|
15187
|
+
// for every instance, so every group lands in a bucket; a status-less
|
|
15188
|
+
// group (possible only for callers whose rows carry no statuses) is
|
|
15189
|
+
// counted under no value.
|
|
15190
|
+
status: external_exports.array(FindingFacetItem)
|
|
15186
15191
|
}).meta({ id: "FindingFacets" });
|
|
15187
15192
|
var ListGroupedFindingsQuery = external_exports.object({
|
|
15188
15193
|
// NOTE: severity filters by Severity (critical/high/medium/low), not by
|
|
@@ -15191,6 +15196,10 @@ var ListGroupedFindingsQuery = external_exports.object({
|
|
|
15191
15196
|
subtype: external_exports.array(external_exports.string()).optional(),
|
|
15192
15197
|
provider: external_exports.array(FindingProvider).optional(),
|
|
15193
15198
|
action: external_exports.array(FindingAction).optional(),
|
|
15199
|
+
// Matches a group's DERIVED status (see FindingGroup.status), not its
|
|
15200
|
+
// individual instances' — so a filtered group's Status column always reads
|
|
15201
|
+
// one of the requested values.
|
|
15202
|
+
status: external_exports.array(FindingStatus).optional(),
|
|
15194
15203
|
q: external_exports.string().optional(),
|
|
15195
15204
|
// Scope to findings whose event carries this session id (the Activity page's
|
|
15196
15205
|
// session → findings drilldown). Findings without a session never match.
|
|
@@ -15371,6 +15380,33 @@ var ToolCallAttributes = external_exports.object({
|
|
|
15371
15380
|
parent_uuid: external_exports.string().optional(),
|
|
15372
15381
|
run_key: external_exports.string().optional()
|
|
15373
15382
|
}).catchall(external_exports.unknown());
|
|
15383
|
+
var CaptureAttributes = external_exports.object({
|
|
15384
|
+
// The harness/tool that produced the capture (`claude-code`, `cli`, …). A
|
|
15385
|
+
// column on the legacy `events` table; here it rides the bag because a
|
|
15386
|
+
// capture-typed audit row has no equivalent column of its own.
|
|
15387
|
+
source_tool: external_exports.string().optional(),
|
|
15388
|
+
file_path: external_exports.string().optional(),
|
|
15389
|
+
repo: external_exports.string().optional(),
|
|
15390
|
+
// The host tool whose input/output was scanned (e.g. 'Bash', 'WebFetch') —
|
|
15391
|
+
// gives a non-file capture a display location ("via Bash") when file_path
|
|
15392
|
+
// is absent. The tool NAME only, never its arguments/output.
|
|
15393
|
+
tool_name: external_exports.string().optional(),
|
|
15394
|
+
// Presence-only provenance flag: set when the file is excluded by the
|
|
15395
|
+
// repo's .gitignore. Omitted (not false) for tracked files.
|
|
15396
|
+
gitignored: external_exports.boolean().optional(),
|
|
15397
|
+
// Set ONLY when the capture is a COMPLETE file snapshot (a worktree scan
|
|
15398
|
+
// reading from disk), never a partial fragment (a hook-captured edit).
|
|
15399
|
+
whole_file: external_exports.boolean().optional(),
|
|
15400
|
+
// Distributed-tracing correlation: `correlation_id` ties the capture back to
|
|
15401
|
+
// the request that produced it; `trace_id` is the originating span's W3C
|
|
15402
|
+
// trace id when telemetry is enabled.
|
|
15403
|
+
correlation_id: external_exports.uuid().optional(),
|
|
15404
|
+
trace_id: external_exports.string().regex(/^[0-9a-f]{32}$/).optional(),
|
|
15405
|
+
// Ids of the detection exceptions that downgraded findings in this capture
|
|
15406
|
+
// to 'allow' — the enforcement audit trail's link back to the grant that
|
|
15407
|
+
// authorized the bypass.
|
|
15408
|
+
exception_ids: external_exports.array(external_exports.guid()).optional()
|
|
15409
|
+
}).catchall(external_exports.unknown());
|
|
15374
15410
|
var ToolCallInspection = external_exports.object({
|
|
15375
15411
|
ruleId: external_exports.string().min(1),
|
|
15376
15412
|
ruleName: external_exports.string(),
|
|
@@ -15457,7 +15493,18 @@ var InspectionFindingInput = external_exports.object({
|
|
|
15457
15493
|
span: Span,
|
|
15458
15494
|
maskedMatch: external_exports.string(),
|
|
15459
15495
|
actionTaken: ActionTaken,
|
|
15460
|
-
confidence: external_exports.number().min(0).max(1)
|
|
15496
|
+
confidence: external_exports.number().min(0).max(1),
|
|
15497
|
+
// Stable, content-addressed key correlating this finding across re-detections
|
|
15498
|
+
// — mirrors the legacy `findings.finding_key` (uq_inspection_findings_key is
|
|
15499
|
+
// its unique index). Optional: only an at-rest/re-scannable finding carries
|
|
15500
|
+
// one; an in-flight capture (prompt/response) has nothing to re-detect
|
|
15501
|
+
// against and leaves it unset, so every insert is a fresh row.
|
|
15502
|
+
findingKey: external_exports.string().optional(),
|
|
15503
|
+
// The ORIGINAL detection time, preserved across a later re-detection of the
|
|
15504
|
+
// same findingKey — mirrors the legacy `findings.first_detected_at`.
|
|
15505
|
+
// Optional: when omitted, the writer derives it from the referenced audit
|
|
15506
|
+
// event's startedAt on first insert (see SqliteInspectionFindingsRepository).
|
|
15507
|
+
firstDetectedAt: external_exports.iso.datetime().optional()
|
|
15461
15508
|
});
|
|
15462
15509
|
var InventoryContext = external_exports.object({
|
|
15463
15510
|
host: InventoryInput.optional(),
|
|
@@ -15656,6 +15703,7 @@ var ActivityOverviewResponse = external_exports.object({
|
|
|
15656
15703
|
|
|
15657
15704
|
// ../../packages/schema/src/zod/event.ts
|
|
15658
15705
|
var EventKind = external_exports.enum(["prompt", "response", "code_change", "tool_use"]).meta({ id: "EventKind" });
|
|
15706
|
+
var CAPTURE_EVENT_TYPES_SQL = EventKind.options.map((k) => `'${k}'`).join(",");
|
|
15659
15707
|
var SourceTool = external_exports.enum(["claude-code", "claude-desktop", "cursor", "chatgpt", "github-copilot", "cli", "unknown"]).meta({ id: "SourceTool" });
|
|
15660
15708
|
var EventMetadata = external_exports.object({
|
|
15661
15709
|
sessionId: external_exports.string().optional(),
|
|
@@ -15996,6 +16044,7 @@ var ExceptionBundleEntry = DetectionException.pick({
|
|
|
15996
16044
|
|
|
15997
16045
|
// ../../packages/schema/src/zod/rule.ts
|
|
15998
16046
|
var MatcherType = external_exports.enum(["keyword", "regex", "validator"]).meta({ id: "MatcherType" });
|
|
16047
|
+
var RuleProbeVerdict = external_exports.enum(["safe", "quarantined"]).meta({ id: "RuleProbeVerdict" });
|
|
15999
16048
|
var KeywordMatcher = external_exports.object({
|
|
16000
16049
|
type: external_exports.literal("keyword"),
|
|
16001
16050
|
// An empty keyword matches at every position, yielding one zero-length span
|
|
@@ -16020,9 +16069,10 @@ function matchesEmptyString(pattern, flags) {
|
|
|
16020
16069
|
return false;
|
|
16021
16070
|
}
|
|
16022
16071
|
}
|
|
16072
|
+
var MAX_PATTERN_LENGTH = 2e3;
|
|
16023
16073
|
var RegexMatcher = external_exports.object({
|
|
16024
16074
|
type: external_exports.literal("regex"),
|
|
16025
|
-
pattern: external_exports.string(),
|
|
16075
|
+
pattern: external_exports.string().min(1).max(MAX_PATTERN_LENGTH),
|
|
16026
16076
|
flags: external_exports.string().default("gi"),
|
|
16027
16077
|
captureGroup: external_exports.number().int().nonnegative().optional()
|
|
16028
16078
|
}).refine((v) => isValidRegex(v.pattern, v.flags), {
|
|
@@ -16143,6 +16193,12 @@ var PolicyBundle = external_exports.object({
|
|
|
16143
16193
|
// on-disk caches — that omit the field still parse; consumers read
|
|
16144
16194
|
// `bundle.exceptions ?? []`.
|
|
16145
16195
|
exceptions: external_exports.array(ExceptionBundleEntry).optional(),
|
|
16196
|
+
// Installed pack version, keyed by ruleId, for rules in `rules` that came
|
|
16197
|
+
// from a versioned installed pack. Optional so older backends — and older
|
|
16198
|
+
// on-disk caches — that omit the field still parse; consumers fall back to
|
|
16199
|
+
// the rule's own spec version. NOT the bundle version above — see
|
|
16200
|
+
// installedRuleset's ruleVersions for the source of truth.
|
|
16201
|
+
ruleVersions: external_exports.record(external_exports.string(), external_exports.string()).optional(),
|
|
16146
16202
|
customKeywords: external_exports.array(external_exports.string()),
|
|
16147
16203
|
fetchedAt: external_exports.iso.datetime()
|
|
16148
16204
|
}).meta({ id: "PolicyBundle" });
|
|
@@ -16504,6 +16560,212 @@ var ImportDetectionRequest = external_exports.object({
|
|
|
16504
16560
|
})
|
|
16505
16561
|
}).meta({ id: "ImportDetectionRequest" });
|
|
16506
16562
|
|
|
16563
|
+
// ../../packages/schema/src/zod/shares.ts
|
|
16564
|
+
var DestinationKind = external_exports.enum(["provider", "internal", "external", "ip"]).meta({ id: "DestinationKind" });
|
|
16565
|
+
var Transport = external_exports.enum(["https", "http", "sftp", "grpc", "smtp", "ws", "wss"]).meta({ id: "Transport" });
|
|
16566
|
+
var DataClass = external_exports.enum(["secrets", "pii", "customer", "source", "telemetry", "logs", "metrics", "none"]).meta({ id: "DataClass" });
|
|
16567
|
+
var DATA_CLASS_ORDER = DataClass.options;
|
|
16568
|
+
var ShareTrustLevel = external_exports.enum(["recognized", "internal", "unverified", "ip"]).meta({ id: "ShareTrustLevel" });
|
|
16569
|
+
var EgressDecision = external_exports.enum(["allow", "block"]).meta({ id: "EgressDecision" });
|
|
16570
|
+
var EgressStatus = external_exports.enum(["allowed", "blocked", "review"]).meta({ id: "EgressStatus" });
|
|
16571
|
+
var ReviewReason = external_exports.enum(["raw_ip", "unverified_domain", "plaintext_transport"]).meta({ id: "ReviewReason" });
|
|
16572
|
+
var HttpMethod = external_exports.enum(["GET", "POST", "PUT", "DELETE", "SDK", "REF"]).meta({ id: "HttpMethod" });
|
|
16573
|
+
var ReviewInfo = external_exports.object({
|
|
16574
|
+
needsReview: external_exports.boolean(),
|
|
16575
|
+
reasons: external_exports.array(ReviewReason)
|
|
16576
|
+
}).meta({ id: "ReviewInfo" });
|
|
16577
|
+
var DestinationNetwork = external_exports.object({
|
|
16578
|
+
port: external_exports.number().int().nullable(),
|
|
16579
|
+
geo: external_exports.string().nullable(),
|
|
16580
|
+
ptr: external_exports.string().nullable()
|
|
16581
|
+
}).meta({ id: "DestinationNetwork" });
|
|
16582
|
+
var EndpointSummary = external_exports.object({
|
|
16583
|
+
id: external_exports.string(),
|
|
16584
|
+
method: HttpMethod,
|
|
16585
|
+
transport: Transport,
|
|
16586
|
+
url: external_exports.string(),
|
|
16587
|
+
template: external_exports.boolean(),
|
|
16588
|
+
dataClass: DataClass,
|
|
16589
|
+
lastSeen: external_exports.iso.datetime(),
|
|
16590
|
+
callSiteCount: external_exports.number().int().nonnegative()
|
|
16591
|
+
}).meta({ id: "EndpointSummary" });
|
|
16592
|
+
var CallSite = external_exports.object({
|
|
16593
|
+
id: external_exports.string(),
|
|
16594
|
+
project: external_exports.string(),
|
|
16595
|
+
file: external_exports.string(),
|
|
16596
|
+
line: external_exports.number().int().nonnegative(),
|
|
16597
|
+
snippet: external_exports.string(),
|
|
16598
|
+
dynamic: external_exports.boolean(),
|
|
16599
|
+
vendored: external_exports.boolean(),
|
|
16600
|
+
/** Deep-link to the Inventory project, when the repo is governed there. */
|
|
16601
|
+
projectId: external_exports.string().nullable()
|
|
16602
|
+
}).meta({ id: "CallSite" });
|
|
16603
|
+
var EndpointWithSites = EndpointSummary.extend({
|
|
16604
|
+
sites: external_exports.array(CallSite)
|
|
16605
|
+
}).meta({ id: "EndpointWithSites" });
|
|
16606
|
+
var ShareDestinationSummary = external_exports.object({
|
|
16607
|
+
id: external_exports.string(),
|
|
16608
|
+
kind: DestinationKind,
|
|
16609
|
+
name: external_exports.string(),
|
|
16610
|
+
host: external_exports.string(),
|
|
16611
|
+
category: external_exports.string(),
|
|
16612
|
+
trust: ShareTrustLevel,
|
|
16613
|
+
/** Effective state (decision applied over the trust default). */
|
|
16614
|
+
status: EgressStatus,
|
|
16615
|
+
/** True when an egress decision override differs from the trust default. */
|
|
16616
|
+
isCustom: external_exports.boolean(),
|
|
16617
|
+
lastSeen: external_exports.iso.datetime(),
|
|
16618
|
+
endpointCount: external_exports.number().int().nonnegative(),
|
|
16619
|
+
callSiteCount: external_exports.number().int().nonnegative(),
|
|
16620
|
+
transports: external_exports.array(Transport),
|
|
16621
|
+
/** Most-sensitive first. */
|
|
16622
|
+
dataClasses: external_exports.array(DataClass),
|
|
16623
|
+
review: ReviewInfo,
|
|
16624
|
+
/** Non-provider hosts only; null for providers. */
|
|
16625
|
+
network: DestinationNetwork.nullable(),
|
|
16626
|
+
/** Embedded for inline expansion — no call sites here. */
|
|
16627
|
+
endpoints: external_exports.array(EndpointSummary)
|
|
16628
|
+
}).meta({ id: "ShareDestinationSummary" });
|
|
16629
|
+
var ShareDestinationDetail = ShareDestinationSummary.omit({
|
|
16630
|
+
endpointCount: true,
|
|
16631
|
+
callSiteCount: true,
|
|
16632
|
+
endpoints: true
|
|
16633
|
+
}).extend({
|
|
16634
|
+
/** Ownership/geo rationale; null for providers. */
|
|
16635
|
+
note: external_exports.string().nullable(),
|
|
16636
|
+
endpoints: external_exports.array(EndpointWithSites)
|
|
16637
|
+
}).meta({ id: "ShareDestinationDetail" });
|
|
16638
|
+
var ReviewDestination = external_exports.object({
|
|
16639
|
+
id: external_exports.string(),
|
|
16640
|
+
kind: DestinationKind,
|
|
16641
|
+
name: external_exports.string(),
|
|
16642
|
+
/** Registrable host — lets the strip derive the provider lettermark, as the register does. */
|
|
16643
|
+
host: external_exports.string(),
|
|
16644
|
+
trust: ShareTrustLevel,
|
|
16645
|
+
status: EgressStatus,
|
|
16646
|
+
review: ReviewInfo,
|
|
16647
|
+
topDataClass: DataClass,
|
|
16648
|
+
callSiteCount: external_exports.number().int().nonnegative(),
|
|
16649
|
+
lastSeen: external_exports.iso.datetime()
|
|
16650
|
+
}).meta({ id: "ReviewDestination" });
|
|
16651
|
+
var ShareDestinationGroup = external_exports.object({
|
|
16652
|
+
kind: DestinationKind,
|
|
16653
|
+
total: external_exports.number().int().nonnegative(),
|
|
16654
|
+
items: external_exports.array(ShareDestinationSummary)
|
|
16655
|
+
}).meta({ id: "ShareDestinationGroup" });
|
|
16656
|
+
var ListShareDestinationsResponse = external_exports.object({ groups: external_exports.array(ShareDestinationGroup) }).meta({ id: "ListShareDestinationsResponse" });
|
|
16657
|
+
var NeedsReviewResponse = external_exports.object({ items: external_exports.array(ReviewDestination) }).meta({ id: "NeedsReviewResponse" });
|
|
16658
|
+
var SharesStats = external_exports.object({
|
|
16659
|
+
destinations: external_exports.number().int().nonnegative(),
|
|
16660
|
+
endpoints: external_exports.number().int().nonnegative(),
|
|
16661
|
+
callSites: external_exports.number().int().nonnegative(),
|
|
16662
|
+
needsReview: external_exports.number().int().nonnegative(),
|
|
16663
|
+
insecure: external_exports.number().int().nonnegative(),
|
|
16664
|
+
byKind: external_exports.object({
|
|
16665
|
+
provider: external_exports.number().int().nonnegative(),
|
|
16666
|
+
internal: external_exports.number().int().nonnegative(),
|
|
16667
|
+
external: external_exports.number().int().nonnegative(),
|
|
16668
|
+
ip: external_exports.number().int().nonnegative()
|
|
16669
|
+
}),
|
|
16670
|
+
byTrust: external_exports.object({
|
|
16671
|
+
recognized: external_exports.number().int().nonnegative(),
|
|
16672
|
+
internal: external_exports.number().int().nonnegative(),
|
|
16673
|
+
unverified: external_exports.number().int().nonnegative(),
|
|
16674
|
+
ip: external_exports.number().int().nonnegative()
|
|
16675
|
+
})
|
|
16676
|
+
}).meta({ id: "SharesStats" });
|
|
16677
|
+
var SetEgressDecisionBody = external_exports.object({
|
|
16678
|
+
/** `null` clears the override — reverts to the trust default, isCustom false. */
|
|
16679
|
+
decision: EgressDecision.nullable()
|
|
16680
|
+
}).meta({ id: "SetEgressDecisionBody" });
|
|
16681
|
+
var SetEgressDecisionResponse = external_exports.object({ destination: ShareDestinationSummary }).meta({ id: "SetEgressDecisionResponse" });
|
|
16682
|
+
var ListShareDestinationsQuery = external_exports.object({
|
|
16683
|
+
/** Case-insensitive match over destination name/category, endpoint url, call-site project/file. */
|
|
16684
|
+
q: external_exports.string().optional(),
|
|
16685
|
+
/** Repeatable. Restrict to these DestinationKind values; absent means all kinds. */
|
|
16686
|
+
kind: external_exports.array(DestinationKind).optional(),
|
|
16687
|
+
/** Reserved for future grouping modes; only 'destination' is supported today. */
|
|
16688
|
+
groupBy: external_exports.enum(["destination"]).default("destination"),
|
|
16689
|
+
/**
|
|
16690
|
+
* When true, return a flat severity-ordered `items[]` instead of `groups`.
|
|
16691
|
+
* Uses `z.stringbool()` (NOT `z.coerce.boolean()` — `Boolean(str)` is true for
|
|
16692
|
+
* any non-empty string, so `?review=false`/`?review=0` would wrongly coerce
|
|
16693
|
+
* to `true`). `z.stringbool()` parses true/1/yes vs false/0/no correctly.
|
|
16694
|
+
*/
|
|
16695
|
+
review: external_exports.stringbool().default(false)
|
|
16696
|
+
});
|
|
16697
|
+
var ExportSharesQuery = external_exports.object({
|
|
16698
|
+
format: external_exports.enum(["csv", "json"]).default("csv"),
|
|
16699
|
+
q: external_exports.string().optional(),
|
|
16700
|
+
kind: external_exports.array(DestinationKind).optional()
|
|
16701
|
+
});
|
|
16702
|
+
|
|
16703
|
+
// ../../packages/schema/src/zod/egress-extraction.ts
|
|
16704
|
+
var EgressEcosystem = external_exports.enum(["npm", "pypi", "go", "maven", "rubygems", "cargo", "composer", "nuget"]).meta({ id: "EgressEcosystem" });
|
|
16705
|
+
var ProviderRegistryEntry = external_exports.object({
|
|
16706
|
+
id: external_exports.string(),
|
|
16707
|
+
name: external_exports.string(),
|
|
16708
|
+
category: external_exports.string(),
|
|
16709
|
+
/** Suffix-matched: 'stripe.com' matches api.stripe.com, never evilstripe.com. */
|
|
16710
|
+
hostSuffixes: external_exports.array(external_exports.string()).min(1),
|
|
16711
|
+
/** Canonical API base URL recorded for manifest-derived (method 'SDK') endpoints. */
|
|
16712
|
+
apiBase: external_exports.string(),
|
|
16713
|
+
/** Most-sensitive first; index 0 becomes the endpoint dataClass. */
|
|
16714
|
+
defaultDataClasses: external_exports.array(DataClass).min(1),
|
|
16715
|
+
/** SDK identifiers per ecosystem ('go' prefix-matched by path, 'maven' by group-id prefix). */
|
|
16716
|
+
sdks: external_exports.partialRecord(EgressEcosystem, external_exports.array(external_exports.string()))
|
|
16717
|
+
}).meta({ id: "ProviderRegistryEntry" });
|
|
16718
|
+
var EgressCallSiteHit = external_exports.object({
|
|
16719
|
+
file: external_exports.string(),
|
|
16720
|
+
line: external_exports.number().int().positive(),
|
|
16721
|
+
snippet: external_exports.string(),
|
|
16722
|
+
dynamic: external_exports.boolean(),
|
|
16723
|
+
vendored: external_exports.boolean()
|
|
16724
|
+
}).meta({ id: "EgressCallSiteHit" });
|
|
16725
|
+
var ResolvedEgressHit = external_exports.object({
|
|
16726
|
+
host: external_exports.string(),
|
|
16727
|
+
kind: DestinationKind,
|
|
16728
|
+
name: external_exports.string(),
|
|
16729
|
+
category: external_exports.string(),
|
|
16730
|
+
trust: ShareTrustLevel,
|
|
16731
|
+
network: DestinationNetwork.nullable(),
|
|
16732
|
+
method: HttpMethod,
|
|
16733
|
+
transport: Transport,
|
|
16734
|
+
url: external_exports.string(),
|
|
16735
|
+
template: external_exports.boolean(),
|
|
16736
|
+
dataClass: DataClass,
|
|
16737
|
+
site: EgressCallSiteHit
|
|
16738
|
+
}).meta({ id: "ResolvedEgressHit" });
|
|
16739
|
+
var EgressReconcile = external_exports.discriminatedUnion("mode", [
|
|
16740
|
+
external_exports.object({ mode: external_exports.literal("walk"), walkedPrefix: external_exports.string() }),
|
|
16741
|
+
external_exports.object({
|
|
16742
|
+
mode: external_exports.literal("ledger"),
|
|
16743
|
+
scannedFiles: external_exports.array(external_exports.string()),
|
|
16744
|
+
deletedFiles: external_exports.array(external_exports.string())
|
|
16745
|
+
})
|
|
16746
|
+
]).meta({ id: "EgressReconcile" });
|
|
16747
|
+
var RecordProjectEgressInput = external_exports.object({
|
|
16748
|
+
/** Stable reconcile key: 'git:<repo identity>' or 'path:<abs root>' (non-git). */
|
|
16749
|
+
projectKey: external_exports.string().min(1),
|
|
16750
|
+
/** Display name only — never keys reconciliation. */
|
|
16751
|
+
project: external_exports.string(),
|
|
16752
|
+
projectId: external_exports.string().nullable(),
|
|
16753
|
+
reconcile: EgressReconcile,
|
|
16754
|
+
hits: external_exports.array(ResolvedEgressHit)
|
|
16755
|
+
}).meta({ id: "RecordProjectEgressInput" });
|
|
16756
|
+
var EgressWriteSummary = external_exports.object({
|
|
16757
|
+
destinations: external_exports.number().int().nonnegative(),
|
|
16758
|
+
endpoints: external_exports.number().int().nonnegative(),
|
|
16759
|
+
callSites: external_exports.number().int().nonnegative(),
|
|
16760
|
+
truncated: external_exports.boolean(),
|
|
16761
|
+
/**
|
|
16762
|
+
* Files the cap dropped whole. Their stored rows were left untouched, so a
|
|
16763
|
+
* ledger-keeping caller must withhold their ledger entries and read them
|
|
16764
|
+
* again next scan.
|
|
16765
|
+
*/
|
|
16766
|
+
droppedFiles: external_exports.array(external_exports.string()).default([])
|
|
16767
|
+
}).meta({ id: "EgressWriteSummary" });
|
|
16768
|
+
|
|
16507
16769
|
// ../../packages/schema/src/zod/installed-pack.ts
|
|
16508
16770
|
var InstalledPack = external_exports.object({
|
|
16509
16771
|
id: external_exports.guid(),
|
|
@@ -16535,10 +16797,14 @@ var PatchInstalledPackRequest = external_exports.object({
|
|
|
16535
16797
|
}).meta({ id: "PatchInstalledPackRequest" });
|
|
16536
16798
|
|
|
16537
16799
|
// ../../packages/schema/src/zod/local.ts
|
|
16538
|
-
var WORKSPACE_SETTINGS_SPEC_VERSION =
|
|
16800
|
+
var WORKSPACE_SETTINGS_SPEC_VERSION = 4;
|
|
16539
16801
|
var RunMode = external_exports.enum(["standalone"]);
|
|
16540
16802
|
var SimpleDetectionPolicy = external_exports.enum(["redact", "warn"]);
|
|
16541
16803
|
var HistoricalAccess = external_exports.enum(["full", "session-only"]);
|
|
16804
|
+
var ModelJudgeConsent = external_exports.object({
|
|
16805
|
+
acknowledgedAt: external_exports.iso.datetime(),
|
|
16806
|
+
payloadVersion: external_exports.number().int().positive()
|
|
16807
|
+
});
|
|
16542
16808
|
var WorkspaceSettings = external_exports.object({
|
|
16543
16809
|
specVersion: external_exports.number().int().positive().default(WORKSPACE_SETTINGS_SPEC_VERSION),
|
|
16544
16810
|
// Settings files written by earlier releases may carry the retired 'attached'
|
|
@@ -16550,8 +16816,16 @@ var WorkspaceSettings = external_exports.object({
|
|
|
16550
16816
|
policy: SimpleDetectionPolicy.default("redact"),
|
|
16551
16817
|
// Consent for scanning pre-install surfaces; opt-in (see HistoricalAccess).
|
|
16552
16818
|
historicalAccess: HistoricalAccess.default("session-only"),
|
|
16819
|
+
// In-place egress extraction on the scan paths; disable to stop all Data
|
|
16820
|
+
// Shares writes.
|
|
16821
|
+
dataSharesInPlace: external_exports.boolean().default(true),
|
|
16553
16822
|
// Absent until /aka:setup completes; its presence is what "onboarded" means.
|
|
16554
|
-
onboardedAt: external_exports.iso.datetime().optional()
|
|
16823
|
+
onboardedAt: external_exports.iso.datetime().optional(),
|
|
16824
|
+
// Records that the user consented to sending findings to the model API for
|
|
16825
|
+
// the /aka:setup judge, along with the payload-shape version they agreed to.
|
|
16826
|
+
// Absent until granted; a stale payloadVersion means the consent no longer
|
|
16827
|
+
// covers the current payload and must be re-granted.
|
|
16828
|
+
modelJudgeConsent: ModelJudgeConsent.optional()
|
|
16555
16829
|
});
|
|
16556
16830
|
|
|
16557
16831
|
// ../../packages/schema/src/zod/project-files.ts
|
|
@@ -16926,152 +17200,17 @@ var SetupHandoffOffer = external_exports.object({
|
|
|
16926
17200
|
path: ["liveKeys"]
|
|
16927
17201
|
});
|
|
16928
17202
|
|
|
16929
|
-
// ../../packages/schema/src/zod/shares.ts
|
|
16930
|
-
var DestinationKind = external_exports.enum(["provider", "internal", "ip"]).meta({ id: "DestinationKind" });
|
|
16931
|
-
var Transport = external_exports.enum(["https", "http", "sftp", "grpc", "smtp"]).meta({ id: "Transport" });
|
|
16932
|
-
var DataClass = external_exports.enum(["secrets", "pii", "customer", "source", "telemetry", "logs", "metrics", "none"]).meta({ id: "DataClass" });
|
|
16933
|
-
var DATA_CLASS_ORDER = DataClass.options;
|
|
16934
|
-
var ShareTrustLevel = external_exports.enum(["recognized", "internal", "unverified", "ip"]).meta({ id: "ShareTrustLevel" });
|
|
16935
|
-
var EgressDecision = external_exports.enum(["allow", "block"]).meta({ id: "EgressDecision" });
|
|
16936
|
-
var EgressStatus = external_exports.enum(["allowed", "blocked", "review"]).meta({ id: "EgressStatus" });
|
|
16937
|
-
var ReviewReason = external_exports.enum(["raw_ip", "unverified_domain", "plaintext_transport"]).meta({ id: "ReviewReason" });
|
|
16938
|
-
var HttpMethod = external_exports.enum(["GET", "POST", "PUT", "DELETE"]).meta({ id: "HttpMethod" });
|
|
16939
|
-
var ReviewInfo = external_exports.object({
|
|
16940
|
-
needsReview: external_exports.boolean(),
|
|
16941
|
-
reasons: external_exports.array(ReviewReason)
|
|
16942
|
-
}).meta({ id: "ReviewInfo" });
|
|
16943
|
-
var DestinationNetwork = external_exports.object({
|
|
16944
|
-
port: external_exports.number().int().nullable(),
|
|
16945
|
-
geo: external_exports.string().nullable(),
|
|
16946
|
-
ptr: external_exports.string().nullable()
|
|
16947
|
-
}).meta({ id: "DestinationNetwork" });
|
|
16948
|
-
var EndpointSummary = external_exports.object({
|
|
16949
|
-
id: external_exports.string(),
|
|
16950
|
-
method: HttpMethod,
|
|
16951
|
-
transport: Transport,
|
|
16952
|
-
url: external_exports.string(),
|
|
16953
|
-
template: external_exports.boolean(),
|
|
16954
|
-
dataClass: DataClass,
|
|
16955
|
-
lastSeen: external_exports.iso.datetime(),
|
|
16956
|
-
callSiteCount: external_exports.number().int().nonnegative()
|
|
16957
|
-
}).meta({ id: "EndpointSummary" });
|
|
16958
|
-
var CallSite = external_exports.object({
|
|
16959
|
-
id: external_exports.string(),
|
|
16960
|
-
project: external_exports.string(),
|
|
16961
|
-
file: external_exports.string(),
|
|
16962
|
-
line: external_exports.number().int().nonnegative(),
|
|
16963
|
-
snippet: external_exports.string(),
|
|
16964
|
-
dynamic: external_exports.boolean(),
|
|
16965
|
-
vendored: external_exports.boolean(),
|
|
16966
|
-
/** Deep-link to the Inventory project, when the repo is governed there. */
|
|
16967
|
-
projectId: external_exports.string().nullable()
|
|
16968
|
-
}).meta({ id: "CallSite" });
|
|
16969
|
-
var EndpointWithSites = EndpointSummary.extend({
|
|
16970
|
-
sites: external_exports.array(CallSite)
|
|
16971
|
-
}).meta({ id: "EndpointWithSites" });
|
|
16972
|
-
var ShareDestinationSummary = external_exports.object({
|
|
16973
|
-
id: external_exports.string(),
|
|
16974
|
-
kind: DestinationKind,
|
|
16975
|
-
name: external_exports.string(),
|
|
16976
|
-
host: external_exports.string(),
|
|
16977
|
-
category: external_exports.string(),
|
|
16978
|
-
trust: ShareTrustLevel,
|
|
16979
|
-
/** Effective state (decision applied over the trust default). */
|
|
16980
|
-
status: EgressStatus,
|
|
16981
|
-
/** True when an egress decision override differs from the trust default. */
|
|
16982
|
-
isCustom: external_exports.boolean(),
|
|
16983
|
-
lastSeen: external_exports.iso.datetime(),
|
|
16984
|
-
endpointCount: external_exports.number().int().nonnegative(),
|
|
16985
|
-
callSiteCount: external_exports.number().int().nonnegative(),
|
|
16986
|
-
transports: external_exports.array(Transport),
|
|
16987
|
-
/** Most-sensitive first. */
|
|
16988
|
-
dataClasses: external_exports.array(DataClass),
|
|
16989
|
-
review: ReviewInfo,
|
|
16990
|
-
/** Non-provider hosts only; null for providers. */
|
|
16991
|
-
network: DestinationNetwork.nullable(),
|
|
16992
|
-
/** Embedded for inline expansion — no call sites here. */
|
|
16993
|
-
endpoints: external_exports.array(EndpointSummary)
|
|
16994
|
-
}).meta({ id: "ShareDestinationSummary" });
|
|
16995
|
-
var ShareDestinationDetail = ShareDestinationSummary.omit({
|
|
16996
|
-
endpointCount: true,
|
|
16997
|
-
callSiteCount: true,
|
|
16998
|
-
endpoints: true
|
|
16999
|
-
}).extend({
|
|
17000
|
-
/** Ownership/geo rationale; null for providers. */
|
|
17001
|
-
note: external_exports.string().nullable(),
|
|
17002
|
-
endpoints: external_exports.array(EndpointWithSites)
|
|
17003
|
-
}).meta({ id: "ShareDestinationDetail" });
|
|
17004
|
-
var ReviewDestination = external_exports.object({
|
|
17005
|
-
id: external_exports.string(),
|
|
17006
|
-
kind: DestinationKind,
|
|
17007
|
-
name: external_exports.string(),
|
|
17008
|
-
/** Registrable host — lets the strip derive the provider lettermark, as the register does. */
|
|
17009
|
-
host: external_exports.string(),
|
|
17010
|
-
trust: ShareTrustLevel,
|
|
17011
|
-
status: EgressStatus,
|
|
17012
|
-
review: ReviewInfo,
|
|
17013
|
-
topDataClass: DataClass,
|
|
17014
|
-
callSiteCount: external_exports.number().int().nonnegative(),
|
|
17015
|
-
lastSeen: external_exports.iso.datetime()
|
|
17016
|
-
}).meta({ id: "ReviewDestination" });
|
|
17017
|
-
var ShareDestinationGroup = external_exports.object({
|
|
17018
|
-
kind: DestinationKind,
|
|
17019
|
-
total: external_exports.number().int().nonnegative(),
|
|
17020
|
-
items: external_exports.array(ShareDestinationSummary)
|
|
17021
|
-
}).meta({ id: "ShareDestinationGroup" });
|
|
17022
|
-
var ListShareDestinationsResponse = external_exports.object({ groups: external_exports.array(ShareDestinationGroup) }).meta({ id: "ListShareDestinationsResponse" });
|
|
17023
|
-
var NeedsReviewResponse = external_exports.object({ items: external_exports.array(ReviewDestination) }).meta({ id: "NeedsReviewResponse" });
|
|
17024
|
-
var SharesStats = external_exports.object({
|
|
17025
|
-
destinations: external_exports.number().int().nonnegative(),
|
|
17026
|
-
endpoints: external_exports.number().int().nonnegative(),
|
|
17027
|
-
callSites: external_exports.number().int().nonnegative(),
|
|
17028
|
-
needsReview: external_exports.number().int().nonnegative(),
|
|
17029
|
-
insecure: external_exports.number().int().nonnegative(),
|
|
17030
|
-
byKind: external_exports.object({
|
|
17031
|
-
provider: external_exports.number().int().nonnegative(),
|
|
17032
|
-
internal: external_exports.number().int().nonnegative(),
|
|
17033
|
-
ip: external_exports.number().int().nonnegative()
|
|
17034
|
-
}),
|
|
17035
|
-
byTrust: external_exports.object({
|
|
17036
|
-
recognized: external_exports.number().int().nonnegative(),
|
|
17037
|
-
internal: external_exports.number().int().nonnegative(),
|
|
17038
|
-
unverified: external_exports.number().int().nonnegative(),
|
|
17039
|
-
ip: external_exports.number().int().nonnegative()
|
|
17040
|
-
})
|
|
17041
|
-
}).meta({ id: "SharesStats" });
|
|
17042
|
-
var SetEgressDecisionBody = external_exports.object({
|
|
17043
|
-
/** `null` clears the override — reverts to the trust default, isCustom false. */
|
|
17044
|
-
decision: EgressDecision.nullable()
|
|
17045
|
-
}).meta({ id: "SetEgressDecisionBody" });
|
|
17046
|
-
var SetEgressDecisionResponse = external_exports.object({ destination: ShareDestinationSummary }).meta({ id: "SetEgressDecisionResponse" });
|
|
17047
|
-
var ListShareDestinationsQuery = external_exports.object({
|
|
17048
|
-
/** Case-insensitive match over destination name/category, endpoint url, call-site project/file. */
|
|
17049
|
-
q: external_exports.string().optional(),
|
|
17050
|
-
/** Repeatable. Restrict to these DestinationKind values; absent means all kinds. */
|
|
17051
|
-
kind: external_exports.array(DestinationKind).optional(),
|
|
17052
|
-
/** Reserved for future grouping modes; only 'destination' is supported today. */
|
|
17053
|
-
groupBy: external_exports.enum(["destination"]).default("destination"),
|
|
17054
|
-
/**
|
|
17055
|
-
* When true, return a flat severity-ordered `items[]` instead of `groups`.
|
|
17056
|
-
* Uses `z.stringbool()` (NOT `z.coerce.boolean()` — `Boolean(str)` is true for
|
|
17057
|
-
* any non-empty string, so `?review=false`/`?review=0` would wrongly coerce
|
|
17058
|
-
* to `true`). `z.stringbool()` parses true/1/yes vs false/0/no correctly.
|
|
17059
|
-
*/
|
|
17060
|
-
review: external_exports.stringbool().default(false)
|
|
17061
|
-
});
|
|
17062
|
-
var ExportSharesQuery = external_exports.object({
|
|
17063
|
-
format: external_exports.enum(["csv", "json"]).default("csv"),
|
|
17064
|
-
q: external_exports.string().optional(),
|
|
17065
|
-
kind: external_exports.array(DestinationKind).optional()
|
|
17066
|
-
});
|
|
17067
|
-
|
|
17068
17203
|
// src/provenance.ts
|
|
17069
17204
|
import { execFileSync } from "child_process";
|
|
17070
17205
|
var USE_SHELL = process.platform === "win32";
|
|
17071
17206
|
|
|
17207
|
+
// ../../packages/plugin-sdk/src/config.ts
|
|
17208
|
+
import { existsSync as existsSync3 } from "fs";
|
|
17209
|
+
import { join as join6 } from "path";
|
|
17210
|
+
|
|
17072
17211
|
// ../../packages/persistence/src/database.ts
|
|
17073
17212
|
import { randomUUID as randomUUID8 } from "crypto";
|
|
17074
|
-
import { existsSync, renameSync, rmSync } from "fs";
|
|
17213
|
+
import { existsSync, renameSync as renameSync2, rmSync as rmSync2 } from "fs";
|
|
17075
17214
|
import { join, sep } from "path";
|
|
17076
17215
|
import { DatabaseSync } from "node:sqlite";
|
|
17077
17216
|
|
|
@@ -17079,7 +17218,7 @@ import { DatabaseSync } from "node:sqlite";
|
|
|
17079
17218
|
import { createHash } from "crypto";
|
|
17080
17219
|
|
|
17081
17220
|
// ../../packages/persistence/src/paths.ts
|
|
17082
|
-
import { chmodSync, mkdirSync } from "fs";
|
|
17221
|
+
import { chmodSync, lstatSync, mkdirSync, renameSync, rmSync, writeFileSync } from "fs";
|
|
17083
17222
|
|
|
17084
17223
|
// ../../packages/persistence/src/repositories/activity.ts
|
|
17085
17224
|
var LIVE_ACTIVITY_WINDOW_MS = 30 * 6e4;
|
|
@@ -17109,23 +17248,26 @@ import { randomUUID as randomUUID6 } from "crypto";
|
|
|
17109
17248
|
// ../../packages/persistence/src/repositories/shares.ts
|
|
17110
17249
|
import { randomUUID as randomUUID7 } from "crypto";
|
|
17111
17250
|
|
|
17251
|
+
// ../../packages/persistence/src/finding-key.ts
|
|
17252
|
+
import { createHash as createHash3 } from "crypto";
|
|
17253
|
+
|
|
17112
17254
|
// ../../packages/persistence/src/fingerprint.ts
|
|
17113
17255
|
import { createHmac, randomBytes } from "crypto";
|
|
17114
|
-
import {
|
|
17256
|
+
import { readFileSync } from "fs";
|
|
17115
17257
|
import { join as join2 } from "path";
|
|
17116
17258
|
|
|
17117
17259
|
// ../../packages/persistence/src/local-layout.ts
|
|
17118
|
-
import {
|
|
17119
|
-
import {
|
|
17260
|
+
import { renameSync as renameSync3 } from "fs";
|
|
17261
|
+
import { mkdir } from "fs/promises";
|
|
17120
17262
|
import { homedir } from "os";
|
|
17121
17263
|
import { join as join3 } from "path";
|
|
17122
17264
|
|
|
17123
17265
|
// ../../packages/persistence/src/settings.ts
|
|
17124
|
-
import { readFileSync as readFileSync2
|
|
17266
|
+
import { readFileSync as readFileSync2 } from "fs";
|
|
17125
17267
|
import { join as join4 } from "path";
|
|
17126
17268
|
|
|
17127
17269
|
// ../../packages/persistence/src/warn-era-cap.ts
|
|
17128
|
-
import { existsSync as existsSync2, writeFileSync as
|
|
17270
|
+
import { existsSync as existsSync2, writeFileSync as writeFileSync2 } from "fs";
|
|
17129
17271
|
import { join as join5 } from "path";
|
|
17130
17272
|
|
|
17131
17273
|
// ../../packages/plugin-sdk/src/provider-env.ts
|
|
@@ -17149,15 +17291,583 @@ var ProviderEnvSchema = external_exports.object(providerEnvShape);
|
|
|
17149
17291
|
// ../../packages/plugin-sdk/src/config-inventory.ts
|
|
17150
17292
|
import { readdirSync, readFileSync as readFileSync4, realpathSync, statSync as statSync2 } from "fs";
|
|
17151
17293
|
import { homedir as homedir2 } from "os";
|
|
17152
|
-
import { basename as basename2, join as
|
|
17294
|
+
import { basename as basename2, join as join8 } from "path";
|
|
17295
|
+
|
|
17296
|
+
// ../../packages/detections/src/egress/registry.ts
|
|
17297
|
+
var EXTRACTOR_VERSION = "1";
|
|
17298
|
+
var PROVIDER_REGISTRY = [
|
|
17299
|
+
{
|
|
17300
|
+
id: "stripe",
|
|
17301
|
+
name: "Stripe",
|
|
17302
|
+
category: "Payments",
|
|
17303
|
+
hostSuffixes: ["stripe.com"],
|
|
17304
|
+
apiBase: "https://api.stripe.com",
|
|
17305
|
+
defaultDataClasses: ["pii", "customer"],
|
|
17306
|
+
sdks: {
|
|
17307
|
+
npm: ["stripe"],
|
|
17308
|
+
pypi: ["stripe"],
|
|
17309
|
+
go: ["github.com/stripe/stripe-go"],
|
|
17310
|
+
maven: ["com.stripe"],
|
|
17311
|
+
rubygems: ["stripe"],
|
|
17312
|
+
composer: ["stripe/stripe-php"],
|
|
17313
|
+
nuget: ["Stripe.net"]
|
|
17314
|
+
}
|
|
17315
|
+
},
|
|
17316
|
+
{
|
|
17317
|
+
id: "datadog",
|
|
17318
|
+
name: "Datadog",
|
|
17319
|
+
category: "Observability",
|
|
17320
|
+
hostSuffixes: ["datadoghq.com", "datadoghq.eu"],
|
|
17321
|
+
apiBase: "https://api.datadoghq.com",
|
|
17322
|
+
defaultDataClasses: ["telemetry", "logs", "metrics"],
|
|
17323
|
+
sdks: {
|
|
17324
|
+
npm: ["dd-trace", "@datadog/browser-logs"],
|
|
17325
|
+
pypi: ["datadog", "ddtrace"],
|
|
17326
|
+
go: ["github.com/DataDog/dd-trace-go"],
|
|
17327
|
+
maven: ["com.datadoghq"],
|
|
17328
|
+
rubygems: ["ddtrace", "dogapi"],
|
|
17329
|
+
nuget: ["Datadog.Trace"]
|
|
17330
|
+
}
|
|
17331
|
+
},
|
|
17332
|
+
{
|
|
17333
|
+
id: "newrelic",
|
|
17334
|
+
name: "New Relic",
|
|
17335
|
+
category: "Observability",
|
|
17336
|
+
hostSuffixes: ["newrelic.com", "nr-data.net"],
|
|
17337
|
+
apiBase: "https://api.newrelic.com",
|
|
17338
|
+
defaultDataClasses: ["telemetry", "logs", "metrics"],
|
|
17339
|
+
sdks: {
|
|
17340
|
+
npm: ["newrelic"],
|
|
17341
|
+
pypi: ["newrelic"],
|
|
17342
|
+
go: ["github.com/newrelic/go-agent"],
|
|
17343
|
+
maven: ["com.newrelic.agent.java"],
|
|
17344
|
+
rubygems: ["newrelic_rpm"],
|
|
17345
|
+
nuget: ["NewRelic.Agent"]
|
|
17346
|
+
}
|
|
17347
|
+
},
|
|
17348
|
+
{
|
|
17349
|
+
id: "sentry",
|
|
17350
|
+
name: "Sentry",
|
|
17351
|
+
category: "Error tracking",
|
|
17352
|
+
hostSuffixes: ["sentry.io"],
|
|
17353
|
+
apiBase: "https://sentry.io",
|
|
17354
|
+
defaultDataClasses: ["source", "telemetry"],
|
|
17355
|
+
sdks: {
|
|
17356
|
+
npm: ["@sentry/node", "@sentry/react", "@sentry/nextjs"],
|
|
17357
|
+
pypi: ["sentry-sdk"],
|
|
17358
|
+
go: ["github.com/getsentry/sentry-go"],
|
|
17359
|
+
maven: ["io.sentry"],
|
|
17360
|
+
rubygems: ["sentry-ruby"],
|
|
17361
|
+
cargo: ["sentry"],
|
|
17362
|
+
composer: ["sentry/sentry"],
|
|
17363
|
+
nuget: ["Sentry"]
|
|
17364
|
+
}
|
|
17365
|
+
},
|
|
17366
|
+
{
|
|
17367
|
+
id: "openai",
|
|
17368
|
+
name: "OpenAI",
|
|
17369
|
+
category: "LLM provider",
|
|
17370
|
+
hostSuffixes: ["openai.com"],
|
|
17371
|
+
apiBase: "https://api.openai.com",
|
|
17372
|
+
defaultDataClasses: ["pii", "source"],
|
|
17373
|
+
sdks: {
|
|
17374
|
+
npm: ["openai"],
|
|
17375
|
+
pypi: ["openai"],
|
|
17376
|
+
go: ["github.com/sashabaranov/go-openai"],
|
|
17377
|
+
maven: ["com.openai"],
|
|
17378
|
+
rubygems: ["ruby-openai"],
|
|
17379
|
+
cargo: ["async-openai"],
|
|
17380
|
+
composer: ["openai-php/client"],
|
|
17381
|
+
nuget: ["OpenAI"]
|
|
17382
|
+
}
|
|
17383
|
+
},
|
|
17384
|
+
{
|
|
17385
|
+
id: "anthropic",
|
|
17386
|
+
name: "Anthropic",
|
|
17387
|
+
category: "LLM provider",
|
|
17388
|
+
hostSuffixes: ["anthropic.com"],
|
|
17389
|
+
apiBase: "https://api.anthropic.com",
|
|
17390
|
+
defaultDataClasses: ["pii", "source"],
|
|
17391
|
+
sdks: {
|
|
17392
|
+
npm: ["@anthropic-ai/sdk"],
|
|
17393
|
+
pypi: ["anthropic"],
|
|
17394
|
+
go: ["github.com/anthropics/anthropic-sdk-go"],
|
|
17395
|
+
nuget: ["Anthropic.SDK"]
|
|
17396
|
+
}
|
|
17397
|
+
},
|
|
17398
|
+
{
|
|
17399
|
+
id: "aws",
|
|
17400
|
+
name: "Amazon Web Services",
|
|
17401
|
+
category: "Cloud platform",
|
|
17402
|
+
hostSuffixes: ["amazonaws.com"],
|
|
17403
|
+
apiBase: "https://s3.amazonaws.com",
|
|
17404
|
+
defaultDataClasses: ["secrets", "customer"],
|
|
17405
|
+
sdks: {
|
|
17406
|
+
npm: ["@aws-sdk/client-s3", "aws-sdk"],
|
|
17407
|
+
pypi: ["boto3"],
|
|
17408
|
+
go: ["github.com/aws/aws-sdk-go", "github.com/aws/aws-sdk-go-v2"],
|
|
17409
|
+
maven: ["com.amazonaws", "software.amazon.awssdk"],
|
|
17410
|
+
rubygems: ["aws-sdk-s3"],
|
|
17411
|
+
cargo: ["aws-sdk-s3"],
|
|
17412
|
+
nuget: ["AWSSDK.S3"]
|
|
17413
|
+
}
|
|
17414
|
+
},
|
|
17415
|
+
{
|
|
17416
|
+
id: "gcp",
|
|
17417
|
+
name: "Google Cloud",
|
|
17418
|
+
category: "Cloud platform",
|
|
17419
|
+
hostSuffixes: ["googleapis.com"],
|
|
17420
|
+
apiBase: "https://storage.googleapis.com",
|
|
17421
|
+
defaultDataClasses: ["customer", "logs"],
|
|
17422
|
+
sdks: {
|
|
17423
|
+
npm: ["@google-cloud/storage"],
|
|
17424
|
+
pypi: ["google-cloud-storage"],
|
|
17425
|
+
go: ["cloud.google.com/go"],
|
|
17426
|
+
maven: ["com.google.cloud"],
|
|
17427
|
+
rubygems: ["google-cloud-storage"],
|
|
17428
|
+
nuget: ["Google.Cloud.Storage.V1"]
|
|
17429
|
+
}
|
|
17430
|
+
},
|
|
17431
|
+
{
|
|
17432
|
+
id: "azure",
|
|
17433
|
+
name: "Microsoft Azure",
|
|
17434
|
+
category: "Cloud platform",
|
|
17435
|
+
hostSuffixes: ["azure.com", "windows.net"],
|
|
17436
|
+
apiBase: "https://management.azure.com",
|
|
17437
|
+
defaultDataClasses: ["customer", "logs"],
|
|
17438
|
+
sdks: {
|
|
17439
|
+
npm: ["@azure/storage-blob"],
|
|
17440
|
+
pypi: ["azure-storage-blob"],
|
|
17441
|
+
go: ["github.com/Azure/azure-sdk-for-go"],
|
|
17442
|
+
maven: ["com.azure"],
|
|
17443
|
+
rubygems: ["azure-storage-blob"],
|
|
17444
|
+
nuget: ["Azure.Storage.Blobs"]
|
|
17445
|
+
}
|
|
17446
|
+
},
|
|
17447
|
+
{
|
|
17448
|
+
id: "slack",
|
|
17449
|
+
name: "Slack",
|
|
17450
|
+
category: "Notifications",
|
|
17451
|
+
hostSuffixes: ["slack.com"],
|
|
17452
|
+
apiBase: "https://slack.com/api",
|
|
17453
|
+
defaultDataClasses: ["logs"],
|
|
17454
|
+
sdks: {
|
|
17455
|
+
npm: ["@slack/web-api"],
|
|
17456
|
+
pypi: ["slack-sdk"],
|
|
17457
|
+
go: ["github.com/slack-go/slack"],
|
|
17458
|
+
maven: ["com.slack.api"],
|
|
17459
|
+
rubygems: ["slack-ruby-client"],
|
|
17460
|
+
composer: ["slack-php/slack-api"],
|
|
17461
|
+
nuget: ["SlackNet"]
|
|
17462
|
+
}
|
|
17463
|
+
},
|
|
17464
|
+
{
|
|
17465
|
+
id: "segment",
|
|
17466
|
+
name: "Segment",
|
|
17467
|
+
category: "Analytics",
|
|
17468
|
+
hostSuffixes: ["segment.io", "segment.com"],
|
|
17469
|
+
apiBase: "https://api.segment.io",
|
|
17470
|
+
defaultDataClasses: ["customer"],
|
|
17471
|
+
sdks: {
|
|
17472
|
+
npm: ["@segment/analytics-node", "analytics-node"],
|
|
17473
|
+
pypi: ["segment-analytics-python"],
|
|
17474
|
+
go: ["github.com/segmentio/analytics-go"],
|
|
17475
|
+
maven: ["com.segment.analytics.java"],
|
|
17476
|
+
rubygems: ["analytics-ruby"],
|
|
17477
|
+
nuget: ["Analytics"]
|
|
17478
|
+
}
|
|
17479
|
+
},
|
|
17480
|
+
{
|
|
17481
|
+
id: "twilio",
|
|
17482
|
+
name: "Twilio",
|
|
17483
|
+
category: "Communications",
|
|
17484
|
+
hostSuffixes: ["twilio.com"],
|
|
17485
|
+
apiBase: "https://api.twilio.com",
|
|
17486
|
+
defaultDataClasses: ["pii", "customer"],
|
|
17487
|
+
sdks: {
|
|
17488
|
+
npm: ["twilio"],
|
|
17489
|
+
pypi: ["twilio"],
|
|
17490
|
+
go: ["github.com/twilio/twilio-go"],
|
|
17491
|
+
maven: ["com.twilio.sdk"],
|
|
17492
|
+
rubygems: ["twilio-ruby"],
|
|
17493
|
+
composer: ["twilio/sdk"],
|
|
17494
|
+
nuget: ["Twilio"]
|
|
17495
|
+
}
|
|
17496
|
+
},
|
|
17497
|
+
{
|
|
17498
|
+
id: "sendgrid",
|
|
17499
|
+
name: "SendGrid",
|
|
17500
|
+
category: "Email",
|
|
17501
|
+
hostSuffixes: ["sendgrid.com"],
|
|
17502
|
+
apiBase: "https://api.sendgrid.com",
|
|
17503
|
+
defaultDataClasses: ["pii"],
|
|
17504
|
+
sdks: {
|
|
17505
|
+
npm: ["@sendgrid/mail"],
|
|
17506
|
+
pypi: ["sendgrid"],
|
|
17507
|
+
go: ["github.com/sendgrid/sendgrid-go"],
|
|
17508
|
+
maven: ["com.sendgrid"],
|
|
17509
|
+
rubygems: ["sendgrid-ruby"],
|
|
17510
|
+
composer: ["sendgrid/sendgrid"],
|
|
17511
|
+
nuget: ["SendGrid"]
|
|
17512
|
+
}
|
|
17513
|
+
},
|
|
17514
|
+
{
|
|
17515
|
+
id: "mailgun",
|
|
17516
|
+
name: "Mailgun",
|
|
17517
|
+
category: "Email",
|
|
17518
|
+
hostSuffixes: ["mailgun.net"],
|
|
17519
|
+
apiBase: "https://api.mailgun.net",
|
|
17520
|
+
defaultDataClasses: ["pii"],
|
|
17521
|
+
sdks: {
|
|
17522
|
+
npm: ["mailgun.js"],
|
|
17523
|
+
pypi: ["mailgun"],
|
|
17524
|
+
rubygems: ["mailgun-ruby"],
|
|
17525
|
+
composer: ["mailgun/mailgun-php"],
|
|
17526
|
+
nuget: ["Mailgun"]
|
|
17527
|
+
}
|
|
17528
|
+
},
|
|
17529
|
+
{
|
|
17530
|
+
id: "mixpanel",
|
|
17531
|
+
name: "Mixpanel",
|
|
17532
|
+
category: "Analytics",
|
|
17533
|
+
hostSuffixes: ["mixpanel.com"],
|
|
17534
|
+
apiBase: "https://api.mixpanel.com",
|
|
17535
|
+
defaultDataClasses: ["customer", "telemetry"],
|
|
17536
|
+
sdks: {
|
|
17537
|
+
npm: ["mixpanel"],
|
|
17538
|
+
pypi: ["mixpanel"],
|
|
17539
|
+
rubygems: ["mixpanel-ruby"],
|
|
17540
|
+
nuget: ["Mixpanel"]
|
|
17541
|
+
}
|
|
17542
|
+
},
|
|
17543
|
+
{
|
|
17544
|
+
id: "amplitude",
|
|
17545
|
+
name: "Amplitude",
|
|
17546
|
+
category: "Analytics",
|
|
17547
|
+
hostSuffixes: ["amplitude.com"],
|
|
17548
|
+
apiBase: "https://api2.amplitude.com",
|
|
17549
|
+
defaultDataClasses: ["customer", "telemetry"],
|
|
17550
|
+
sdks: {
|
|
17551
|
+
npm: ["@amplitude/analytics-node"],
|
|
17552
|
+
pypi: ["amplitude-analytics"],
|
|
17553
|
+
nuget: ["Amplitude"]
|
|
17554
|
+
}
|
|
17555
|
+
},
|
|
17556
|
+
{
|
|
17557
|
+
id: "posthog",
|
|
17558
|
+
name: "PostHog",
|
|
17559
|
+
category: "Analytics",
|
|
17560
|
+
hostSuffixes: ["posthog.com"],
|
|
17561
|
+
apiBase: "https://us.i.posthog.com",
|
|
17562
|
+
defaultDataClasses: ["customer", "telemetry"],
|
|
17563
|
+
sdks: {
|
|
17564
|
+
npm: ["posthog-node", "posthog-js"],
|
|
17565
|
+
pypi: ["posthog"],
|
|
17566
|
+
go: ["github.com/posthog/posthog-go"],
|
|
17567
|
+
rubygems: ["posthog-ruby"],
|
|
17568
|
+
composer: ["posthog/posthog-php"],
|
|
17569
|
+
nuget: ["PostHog"]
|
|
17570
|
+
}
|
|
17571
|
+
},
|
|
17572
|
+
{
|
|
17573
|
+
id: "honeycomb",
|
|
17574
|
+
name: "Honeycomb",
|
|
17575
|
+
category: "Observability",
|
|
17576
|
+
hostSuffixes: ["honeycomb.io"],
|
|
17577
|
+
apiBase: "https://api.honeycomb.io",
|
|
17578
|
+
defaultDataClasses: ["telemetry", "metrics"],
|
|
17579
|
+
sdks: {
|
|
17580
|
+
npm: ["libhoney"],
|
|
17581
|
+
pypi: ["libhoney"],
|
|
17582
|
+
go: ["github.com/honeycombio/libhoney-go"],
|
|
17583
|
+
rubygems: ["libhoney"]
|
|
17584
|
+
}
|
|
17585
|
+
},
|
|
17586
|
+
{
|
|
17587
|
+
id: "grafana",
|
|
17588
|
+
name: "Grafana Cloud",
|
|
17589
|
+
category: "Observability",
|
|
17590
|
+
hostSuffixes: ["grafana.net"],
|
|
17591
|
+
apiBase: "https://grafana.net",
|
|
17592
|
+
defaultDataClasses: ["logs", "metrics"],
|
|
17593
|
+
sdks: {
|
|
17594
|
+
npm: ["@grafana/faro-web-sdk"]
|
|
17595
|
+
}
|
|
17596
|
+
},
|
|
17597
|
+
{
|
|
17598
|
+
id: "splunk",
|
|
17599
|
+
name: "Splunk",
|
|
17600
|
+
category: "Observability",
|
|
17601
|
+
hostSuffixes: ["splunkcloud.com", "splunk.com"],
|
|
17602
|
+
apiBase: "https://http-inputs.splunkcloud.com",
|
|
17603
|
+
defaultDataClasses: ["logs"],
|
|
17604
|
+
sdks: {
|
|
17605
|
+
npm: ["splunk-logging"],
|
|
17606
|
+
pypi: ["splunk-sdk"],
|
|
17607
|
+
maven: ["com.splunk"],
|
|
17608
|
+
nuget: ["Splunk.Logging.Common"]
|
|
17609
|
+
}
|
|
17610
|
+
},
|
|
17611
|
+
{
|
|
17612
|
+
id: "pagerduty",
|
|
17613
|
+
name: "PagerDuty",
|
|
17614
|
+
category: "Incident response",
|
|
17615
|
+
hostSuffixes: ["pagerduty.com"],
|
|
17616
|
+
apiBase: "https://api.pagerduty.com",
|
|
17617
|
+
defaultDataClasses: ["logs"],
|
|
17618
|
+
sdks: {
|
|
17619
|
+
npm: ["@pagerduty/pdjs"],
|
|
17620
|
+
pypi: ["pdpyras"],
|
|
17621
|
+
go: ["github.com/PagerDuty/go-pagerduty"],
|
|
17622
|
+
rubygems: ["pagerduty"]
|
|
17623
|
+
}
|
|
17624
|
+
},
|
|
17625
|
+
{
|
|
17626
|
+
id: "github",
|
|
17627
|
+
name: "GitHub",
|
|
17628
|
+
category: "Developer platform",
|
|
17629
|
+
hostSuffixes: ["github.com", "githubusercontent.com"],
|
|
17630
|
+
apiBase: "https://api.github.com",
|
|
17631
|
+
defaultDataClasses: ["source"],
|
|
17632
|
+
sdks: {
|
|
17633
|
+
npm: ["@octokit/rest", "octokit"],
|
|
17634
|
+
pypi: ["pygithub"],
|
|
17635
|
+
go: ["github.com/google/go-github"],
|
|
17636
|
+
maven: ["org.kohsuke.github-api"],
|
|
17637
|
+
rubygems: ["octokit"],
|
|
17638
|
+
cargo: ["octocrab"],
|
|
17639
|
+
composer: ["knplabs/github-api"],
|
|
17640
|
+
nuget: ["Octokit"]
|
|
17641
|
+
}
|
|
17642
|
+
},
|
|
17643
|
+
{
|
|
17644
|
+
id: "gitlab",
|
|
17645
|
+
name: "GitLab",
|
|
17646
|
+
category: "Developer platform",
|
|
17647
|
+
hostSuffixes: ["gitlab.com"],
|
|
17648
|
+
apiBase: "https://gitlab.com/api",
|
|
17649
|
+
defaultDataClasses: ["source"],
|
|
17650
|
+
sdks: {
|
|
17651
|
+
npm: ["@gitbeaker/rest"],
|
|
17652
|
+
pypi: ["python-gitlab"],
|
|
17653
|
+
go: ["gitlab.com/gitlab-org/api/client-go"],
|
|
17654
|
+
rubygems: ["gitlab"],
|
|
17655
|
+
nuget: ["GitLabApiClient"]
|
|
17656
|
+
}
|
|
17657
|
+
},
|
|
17658
|
+
{
|
|
17659
|
+
id: "auth0",
|
|
17660
|
+
name: "Auth0",
|
|
17661
|
+
category: "Identity",
|
|
17662
|
+
hostSuffixes: ["auth0.com"],
|
|
17663
|
+
apiBase: "https://login.auth0.com",
|
|
17664
|
+
defaultDataClasses: ["pii"],
|
|
17665
|
+
sdks: {
|
|
17666
|
+
npm: ["auth0"],
|
|
17667
|
+
pypi: ["auth0-python"],
|
|
17668
|
+
go: ["github.com/auth0/go-auth0"],
|
|
17669
|
+
maven: ["com.auth0"],
|
|
17670
|
+
rubygems: ["auth0"],
|
|
17671
|
+
composer: ["auth0/auth0-php"],
|
|
17672
|
+
nuget: ["Auth0.ManagementApi"]
|
|
17673
|
+
}
|
|
17674
|
+
},
|
|
17675
|
+
{
|
|
17676
|
+
id: "okta",
|
|
17677
|
+
name: "Okta",
|
|
17678
|
+
category: "Identity",
|
|
17679
|
+
hostSuffixes: ["okta.com", "oktapreview.com"],
|
|
17680
|
+
apiBase: "https://login.okta.com",
|
|
17681
|
+
defaultDataClasses: ["pii"],
|
|
17682
|
+
sdks: {
|
|
17683
|
+
npm: ["@okta/okta-sdk-nodejs"],
|
|
17684
|
+
pypi: ["okta"],
|
|
17685
|
+
go: ["github.com/okta/okta-sdk-golang"],
|
|
17686
|
+
maven: ["com.okta.sdk"],
|
|
17687
|
+
nuget: ["Okta.Sdk"]
|
|
17688
|
+
}
|
|
17689
|
+
},
|
|
17690
|
+
{
|
|
17691
|
+
id: "clerk",
|
|
17692
|
+
name: "Clerk",
|
|
17693
|
+
category: "Identity",
|
|
17694
|
+
hostSuffixes: ["clerk.com", "clerk.dev"],
|
|
17695
|
+
apiBase: "https://api.clerk.com",
|
|
17696
|
+
defaultDataClasses: ["pii"],
|
|
17697
|
+
sdks: {
|
|
17698
|
+
npm: ["@clerk/backend", "@clerk/nextjs"],
|
|
17699
|
+
pypi: ["clerk-backend-api"],
|
|
17700
|
+
go: ["github.com/clerk/clerk-sdk-go"]
|
|
17701
|
+
}
|
|
17702
|
+
},
|
|
17703
|
+
{
|
|
17704
|
+
id: "supabase",
|
|
17705
|
+
name: "Supabase",
|
|
17706
|
+
category: "Backend platform",
|
|
17707
|
+
hostSuffixes: ["supabase.co", "supabase.com"],
|
|
17708
|
+
apiBase: "https://api.supabase.com",
|
|
17709
|
+
defaultDataClasses: ["pii", "customer"],
|
|
17710
|
+
sdks: {
|
|
17711
|
+
npm: ["@supabase/supabase-js"],
|
|
17712
|
+
pypi: ["supabase"],
|
|
17713
|
+
cargo: ["postgrest"]
|
|
17714
|
+
}
|
|
17715
|
+
},
|
|
17716
|
+
{
|
|
17717
|
+
id: "firebase",
|
|
17718
|
+
name: "Firebase",
|
|
17719
|
+
category: "Backend platform",
|
|
17720
|
+
hostSuffixes: ["firebaseio.com", "firebase.google.com"],
|
|
17721
|
+
apiBase: "https://firebaseio.com",
|
|
17722
|
+
defaultDataClasses: ["customer"],
|
|
17723
|
+
sdks: {
|
|
17724
|
+
npm: ["firebase", "firebase-admin"],
|
|
17725
|
+
pypi: ["firebase-admin"],
|
|
17726
|
+
go: ["firebase.google.com/go"],
|
|
17727
|
+
maven: ["com.google.firebase"]
|
|
17728
|
+
}
|
|
17729
|
+
},
|
|
17730
|
+
{
|
|
17731
|
+
id: "mongodb-atlas",
|
|
17732
|
+
name: "MongoDB Atlas",
|
|
17733
|
+
category: "Database SaaS",
|
|
17734
|
+
hostSuffixes: ["mongodb.net", "mongodb.com"],
|
|
17735
|
+
apiBase: "https://cloud.mongodb.com",
|
|
17736
|
+
defaultDataClasses: ["customer"],
|
|
17737
|
+
sdks: {
|
|
17738
|
+
npm: ["mongodb"],
|
|
17739
|
+
pypi: ["pymongo"],
|
|
17740
|
+
go: ["go.mongodb.org/mongo-driver"],
|
|
17741
|
+
maven: ["org.mongodb"],
|
|
17742
|
+
rubygems: ["mongo"],
|
|
17743
|
+
cargo: ["mongodb"],
|
|
17744
|
+
nuget: ["MongoDB.Driver"]
|
|
17745
|
+
}
|
|
17746
|
+
},
|
|
17747
|
+
{
|
|
17748
|
+
id: "planetscale",
|
|
17749
|
+
name: "PlanetScale",
|
|
17750
|
+
category: "Database SaaS",
|
|
17751
|
+
hostSuffixes: ["psdb.cloud", "planetscale.com"],
|
|
17752
|
+
apiBase: "https://api.planetscale.com",
|
|
17753
|
+
defaultDataClasses: ["customer"],
|
|
17754
|
+
sdks: {
|
|
17755
|
+
npm: ["@planetscale/database"],
|
|
17756
|
+
go: ["github.com/planetscale/planetscale-go"]
|
|
17757
|
+
}
|
|
17758
|
+
},
|
|
17759
|
+
{
|
|
17760
|
+
id: "algolia",
|
|
17761
|
+
name: "Algolia",
|
|
17762
|
+
category: "Search SaaS",
|
|
17763
|
+
hostSuffixes: ["algolia.net", "algolianet.com"],
|
|
17764
|
+
apiBase: "https://algolia.net",
|
|
17765
|
+
defaultDataClasses: ["customer"],
|
|
17766
|
+
sdks: {
|
|
17767
|
+
npm: ["algoliasearch"],
|
|
17768
|
+
pypi: ["algoliasearch"],
|
|
17769
|
+
go: ["github.com/algolia/algoliasearch-client-go"],
|
|
17770
|
+
maven: ["com.algolia"],
|
|
17771
|
+
rubygems: ["algolia"],
|
|
17772
|
+
composer: ["algolia/algoliasearch-client-php"],
|
|
17773
|
+
nuget: ["Algolia.Search"]
|
|
17774
|
+
}
|
|
17775
|
+
},
|
|
17776
|
+
{
|
|
17777
|
+
id: "cloudflare",
|
|
17778
|
+
name: "Cloudflare",
|
|
17779
|
+
category: "CDN / edge",
|
|
17780
|
+
hostSuffixes: ["cloudflare.com", "workers.dev"],
|
|
17781
|
+
apiBase: "https://api.cloudflare.com",
|
|
17782
|
+
defaultDataClasses: ["logs"],
|
|
17783
|
+
sdks: {
|
|
17784
|
+
npm: ["cloudflare"],
|
|
17785
|
+
pypi: ["cloudflare"],
|
|
17786
|
+
go: ["github.com/cloudflare/cloudflare-go"],
|
|
17787
|
+
nuget: ["CloudFlare.Client"]
|
|
17788
|
+
}
|
|
17789
|
+
},
|
|
17790
|
+
{
|
|
17791
|
+
id: "huggingface",
|
|
17792
|
+
name: "Hugging Face",
|
|
17793
|
+
category: "LLM provider",
|
|
17794
|
+
hostSuffixes: ["huggingface.co"],
|
|
17795
|
+
apiBase: "https://api-inference.huggingface.co",
|
|
17796
|
+
defaultDataClasses: ["source"],
|
|
17797
|
+
sdks: {
|
|
17798
|
+
npm: ["@huggingface/inference"],
|
|
17799
|
+
pypi: ["huggingface-hub", "transformers"],
|
|
17800
|
+
rubygems: ["hugging-face"]
|
|
17801
|
+
}
|
|
17802
|
+
},
|
|
17803
|
+
{
|
|
17804
|
+
id: "cohere",
|
|
17805
|
+
name: "Cohere",
|
|
17806
|
+
category: "LLM provider",
|
|
17807
|
+
hostSuffixes: ["cohere.com", "cohere.ai"],
|
|
17808
|
+
apiBase: "https://api.cohere.com",
|
|
17809
|
+
defaultDataClasses: ["pii", "source"],
|
|
17810
|
+
sdks: {
|
|
17811
|
+
npm: ["cohere-ai"],
|
|
17812
|
+
pypi: ["cohere"],
|
|
17813
|
+
go: ["github.com/cohere-ai/cohere-go"]
|
|
17814
|
+
}
|
|
17815
|
+
},
|
|
17816
|
+
{
|
|
17817
|
+
id: "mistral",
|
|
17818
|
+
name: "Mistral AI",
|
|
17819
|
+
category: "LLM provider",
|
|
17820
|
+
hostSuffixes: ["mistral.ai"],
|
|
17821
|
+
apiBase: "https://api.mistral.ai",
|
|
17822
|
+
defaultDataClasses: ["pii", "source"],
|
|
17823
|
+
sdks: {
|
|
17824
|
+
npm: ["@mistralai/mistralai"],
|
|
17825
|
+
pypi: ["mistralai"],
|
|
17826
|
+
go: ["github.com/gage-technologies/mistral-go"]
|
|
17827
|
+
}
|
|
17828
|
+
}
|
|
17829
|
+
];
|
|
17830
|
+
var EGRESS_VERSION_MATERIAL = `${EXTRACTOR_VERSION}
|
|
17831
|
+
${JSON.stringify(PROVIDER_REGISTRY)}`;
|
|
17832
|
+
|
|
17833
|
+
// ../../packages/detections/src/egress/extract.ts
|
|
17834
|
+
var SECRET_KEY_NAMES = "api[_-]?key|apikey|private[_-]?key|access[_-]?key|access[_-]?token|token|secret|credentials?|password|passwd|pwd|authorization|sig|signature|sas|assertion";
|
|
17835
|
+
var AUTH_SCHEMES = "Bearer|Basic|Token|Digest|ApiKey|SSWS|AWS4-HMAC-SHA256";
|
|
17836
|
+
var SECRET_VALUE = new RegExp(
|
|
17837
|
+
`((?:${SECRET_KEY_NAMES})['"\`]?\\s*[:=]\\s*['"\`]?)(?!(?:${AUTH_SCHEMES})[\\s'"\`])[^\\s'"\`&]+`,
|
|
17838
|
+
"gi"
|
|
17839
|
+
);
|
|
17840
|
+
var AUTH_SCHEME_VALUE = new RegExp(
|
|
17841
|
+
`((?:${SECRET_KEY_NAMES})['"\`]?\\s*[:=]\\s*['"\`]?)(${AUTH_SCHEMES})\\s+[^\\s'"\`]+`,
|
|
17842
|
+
"gi"
|
|
17843
|
+
);
|
|
17844
|
+
var WEBHOOK_SECRET_PATHS = [
|
|
17845
|
+
{ hosts: ["hooks.slack.com"], prefix: "/services/" },
|
|
17846
|
+
{
|
|
17847
|
+
hosts: ["discord.com", "discordapp.com", "ptb.discord.com", "canary.discord.com"],
|
|
17848
|
+
prefix: "/api/webhooks/"
|
|
17849
|
+
},
|
|
17850
|
+
{ hosts: ["hooks.zapier.com"], prefix: "/hooks/" },
|
|
17851
|
+
{ hosts: ["outlook.office.com", "outlook.office365.com"], prefix: "/webhook/" }
|
|
17852
|
+
];
|
|
17853
|
+
function escapeRegExp(literal2) {
|
|
17854
|
+
return literal2.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
17855
|
+
}
|
|
17856
|
+
var WEBHOOK_URL = new RegExp(
|
|
17857
|
+
`(https?://(?:${WEBHOOK_SECRET_PATHS.flatMap(
|
|
17858
|
+
(entry) => entry.hosts.map((host) => `${escapeRegExp(host)}${escapeRegExp(entry.prefix)}`)
|
|
17859
|
+
).join("|")}))[^\\s'"\`<>()[\\]{},;]+`,
|
|
17860
|
+
"gi"
|
|
17861
|
+
);
|
|
17153
17862
|
|
|
17154
17863
|
// ../../packages/detections/src/escape-regexp.ts
|
|
17155
|
-
function
|
|
17864
|
+
function escapeRegExp2(value) {
|
|
17156
17865
|
return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
17157
17866
|
}
|
|
17158
17867
|
|
|
17159
17868
|
// ../../packages/detections/src/matchers/limits.ts
|
|
17160
17869
|
var MAX_MATCHES_PER_RULE = 1e4;
|
|
17870
|
+
var MAX_REGEX_INPUT_LENGTH = 2e5;
|
|
17161
17871
|
|
|
17162
17872
|
// ../../packages/detections/src/matchers/keyword.ts
|
|
17163
17873
|
var KeywordMatcher2 = class {
|
|
@@ -17168,7 +17878,7 @@ var KeywordMatcher2 = class {
|
|
|
17168
17878
|
for (const kw of keywords) {
|
|
17169
17879
|
if (kw.length === 0) continue;
|
|
17170
17880
|
if (spans.length >= MAX_MATCHES_PER_RULE) break;
|
|
17171
|
-
const re = new RegExp(
|
|
17881
|
+
const re = new RegExp(escapeRegExp2(kw), caseSensitive ? "gu" : "giu");
|
|
17172
17882
|
let m;
|
|
17173
17883
|
while ((m = re.exec(text)) !== null) {
|
|
17174
17884
|
spans.push({ start: m.index, end: m.index + m[0].length });
|
|
@@ -17185,9 +17895,13 @@ var RegexMatcher2 = class {
|
|
|
17185
17895
|
if (rule.matcher.type !== "regex") return [];
|
|
17186
17896
|
const { pattern, flags, captureGroup } = rule.matcher;
|
|
17187
17897
|
const re = new RegExp(pattern, flags.includes("d") ? flags : `${flags}d`);
|
|
17898
|
+
const scanText2 = text.length > MAX_REGEX_INPUT_LENGTH ? text.slice(0, MAX_REGEX_INPUT_LENGTH) : text;
|
|
17188
17899
|
const spans = [];
|
|
17189
17900
|
let m;
|
|
17190
|
-
|
|
17901
|
+
const maxIterations = scanText2.length + 1;
|
|
17902
|
+
let iterations = 0;
|
|
17903
|
+
while ((m = re.exec(scanText2)) !== null) {
|
|
17904
|
+
if (++iterations > maxIterations) break;
|
|
17191
17905
|
const group = captureGroup != null ? m[captureGroup] : m[0];
|
|
17192
17906
|
if (m[0].length === 0) re.lastIndex++;
|
|
17193
17907
|
if (group && spans.length < MAX_MATCHES_PER_RULE) {
|
|
@@ -17262,27 +17976,53 @@ var CONFIG_POSTURE_RULES = [
|
|
|
17262
17976
|
}
|
|
17263
17977
|
];
|
|
17264
17978
|
|
|
17979
|
+
// ../../packages/detections/src/security/redos-probe.ts
|
|
17980
|
+
var EXPONENTIAL_UNITS = [
|
|
17981
|
+
"a",
|
|
17982
|
+
"0",
|
|
17983
|
+
" ",
|
|
17984
|
+
"x",
|
|
17985
|
+
"ab",
|
|
17986
|
+
"a.",
|
|
17987
|
+
"a-",
|
|
17988
|
+
"a_",
|
|
17989
|
+
"a@",
|
|
17990
|
+
"a/",
|
|
17991
|
+
"a:",
|
|
17992
|
+
"a=",
|
|
17993
|
+
"a;",
|
|
17994
|
+
"aA0",
|
|
17995
|
+
" "
|
|
17996
|
+
];
|
|
17997
|
+
var EXPONENTIAL_PROBES = EXPONENTIAL_UNITS.flatMap(
|
|
17998
|
+
(unit) => [23, 25].map((len) => unit.repeat(Math.ceil(len / unit.length)).slice(0, len) + "!")
|
|
17999
|
+
);
|
|
18000
|
+
var POLYNOMIAL_PROBES = ["abc-", "a.", "a ", "a=", "x", "0", "a@", "a/", "ab"].map(
|
|
18001
|
+
(unit) => unit.repeat(1e4).slice(0, 4e4) + "!"
|
|
18002
|
+
);
|
|
18003
|
+
|
|
17265
18004
|
// ../../packages/plugin-sdk/src/repo.ts
|
|
17266
|
-
import { existsSync as
|
|
17267
|
-
import { basename, dirname, isAbsolute, join as
|
|
18005
|
+
import { existsSync as existsSync4, readFileSync as readFileSync3, statSync } from "fs";
|
|
18006
|
+
import { basename, dirname, isAbsolute, join as join7, sep as sep2 } from "path";
|
|
17268
18007
|
|
|
17269
18008
|
// ../../packages/plugin-sdk/src/events.ts
|
|
17270
|
-
import { createHash as
|
|
17271
|
-
|
|
17272
|
-
// ../../packages/plugin-sdk/src/finding-key.ts
|
|
17273
|
-
import { createHash as createHash4 } from "crypto";
|
|
18009
|
+
import { createHash as createHash4, randomUUID as randomUUID9 } from "crypto";
|
|
17274
18010
|
|
|
17275
18011
|
// ../../packages/plugin-sdk/src/inventory-resolver.ts
|
|
17276
18012
|
import { arch, hostname as hostname3, platform, release } from "os";
|
|
17277
18013
|
|
|
17278
18014
|
// ../../packages/plugin-sdk/src/nudge.ts
|
|
17279
|
-
import { mkdirSync as
|
|
17280
|
-
import { join as
|
|
18015
|
+
import { mkdirSync as mkdirSync2, readFileSync as readFileSync5, writeFileSync as writeFileSync3 } from "fs";
|
|
18016
|
+
import { join as join9 } from "path";
|
|
18017
|
+
|
|
18018
|
+
// ../../packages/plugin-sdk/src/paths.ts
|
|
18019
|
+
import { readdirSync as readdirSync2, realpathSync as realpathSync2 } from "fs";
|
|
18020
|
+
import { basename as basename3, dirname as dirname2, sep as sep3 } from "path";
|
|
17281
18021
|
|
|
17282
18022
|
// ../../packages/plugin-sdk/src/project-files.ts
|
|
17283
18023
|
var import_ignore = __toESM(require_ignore(), 1);
|
|
17284
|
-
import { existsSync as
|
|
17285
|
-
import { basename as
|
|
18024
|
+
import { existsSync as existsSync5, readdirSync as readdirSync3, readFileSync as readFileSync6 } from "fs";
|
|
18025
|
+
import { basename as basename4, join as join10, relative, sep as sep4 } from "path";
|
|
17286
18026
|
|
|
17287
18027
|
// ../../packages/plugin-sdk/src/runtime.ts
|
|
17288
18028
|
import { randomUUID as randomUUID10 } from "crypto";
|
|
@@ -17291,11 +18031,11 @@ import { randomUUID as randomUUID10 } from "crypto";
|
|
|
17291
18031
|
var THIRTY_DAYS_MS = 30 * 24 * 60 * 60 * 1e3;
|
|
17292
18032
|
|
|
17293
18033
|
// ../../packages/plugin-sdk/src/throttle.ts
|
|
17294
|
-
import { mkdirSync as
|
|
17295
|
-
import { join as
|
|
18034
|
+
import { mkdirSync as mkdirSync3, statSync as statSync3, writeFileSync as writeFileSync4 } from "fs";
|
|
18035
|
+
import { join as join11 } from "path";
|
|
17296
18036
|
|
|
17297
18037
|
// src/command-registry.ts
|
|
17298
|
-
import { readdirSync as
|
|
18038
|
+
import { readdirSync as readdirSync4 } from "fs";
|
|
17299
18039
|
import { fileURLToPath } from "url";
|
|
17300
18040
|
var COMMANDS_DIR = fileURLToPath(new URL("../commands", import.meta.url));
|
|
17301
18041
|
|