Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
08ead1d
feat(security): audit_trail_events table, list endpoint and Maple's o…
Makisuo Nov 11, 2026
ded2423
fix(security): best-effort trail copy on the direct write, sibling cr…
Makisuo Nov 12, 2026
3b562af
fix(security): fail an email filter when the member directory is down…
Makisuo Nov 12, 2026
918b68c
feat(security): the audit log page in the Security hub
Makisuo Nov 12, 2026
e26901d
feat(security): an outcome reason on audit trail events, and Maple en…
Makisuo Nov 12, 2026
09838bd
Merge branch 'audit-trail/table' into audit-trail/page
Makisuo Nov 12, 2026
a098f13
fix(security): the audit trail endpoint's errors carry a public title…
Makisuo Nov 12, 2026
60525ab
Merge branch 'audit-trail/table' into audit-trail/page
Makisuo Nov 12, 2026
0153b0c
fix(security): audit log page review fixes
Makisuo Nov 12, 2026
cc6dca8
test(web): a sample URL for the security audit log page
Makisuo Nov 12, 2026
001b331
fix(web): the audit log row toggle says when the event happened
Makisuo Nov 12, 2026
2c15b63
fix(web): name the audit log's filter selects for what they filter
Makisuo Nov 12, 2026
736658e
fix(security): a refused API request is a permission event with a target
Makisuo Nov 12, 2026
7c1ab46
Merge branch 'audit-trail/table' into audit-trail/page
Makisuo Nov 12, 2026
e150a50
fix(security): audit log page fixes from testing on the preview
Makisuo Nov 12, 2026
d3a9f40
fix(web): an actor typed but not applied survives a change of another…
Makisuo Nov 12, 2026
9f6d7fc
fix(security): the audit log's event id link carries the entry's time…
Makisuo Nov 12, 2026
22849d0
feat(security): Vercel and GCP audit events go to the audit trail, no…
Makisuo Nov 12, 2026
5e11c11
fix(security): the audit trail accepts only the org's own drain, boun…
Makisuo Nov 12, 2026
10153a2
fix(security): a source lookup that fails asks the Vercel audit drain…
Makisuo Nov 12, 2026
d8f5e05
fix(security): an audit actor filter stays out of API spans
Makisuo Nov 12, 2026
6d4324d
Merge branch 'audit-trail/table' into audit-trail/page
Makisuo Nov 12, 2026
73aa975
Merge branch 'audit-trail/page' into audit-trail/vercel-gcp
Makisuo Nov 12, 2026
14ee1c9
Merge remote-tracking branch 'origin/main' into audit-trail/table
Makisuo Nov 13, 2026
a59b9d6
Merge branch 'audit-trail/table' into audit-trail/page
Makisuo Nov 13, 2026
8fef5b3
Merge branch 'audit-trail/page' into audit-trail/vercel-gcp
Makisuo Nov 13, 2026
d32d7de
fix(audit-trail): cost sources have a category in the trail
Makisuo Nov 13, 2026
f5dceed
Merge branch 'audit-trail/table' into audit-trail/page
Makisuo Nov 13, 2026
7816d03
Merge branch 'audit-trail/page' into audit-trail/vercel-gcp
Makisuo Nov 13, 2026
e89330f
fix(audit-trail): a dropped trail copy from the queue is a warning, n…
Makisuo Nov 13, 2026
7b544b4
Merge branch 'audit-trail/table' into audit-trail/page
Makisuo Nov 13, 2026
67090fa
Merge branch 'audit-trail/page' into audit-trail/vercel-gcp
Makisuo Nov 13, 2026
bec8c40
fix(security): the audit log names the platform on a phone and in its…
Makisuo Nov 13, 2026
61c0c83
Merge remote-tracking branch 'origin/main' into audit-trail/table
Makisuo Nov 13, 2026
73fd519
Merge branch 'audit-trail/table' into audit-trail/page
Makisuo Nov 13, 2026
04f6108
Merge branch 'audit-trail/page' into audit-trail/vercel-gcp
Makisuo Nov 13, 2026
d8dd5ff
Merge remote-tracking branch 'origin/main' into audit-trail/vercel-gcp
Makisuo Nov 13, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 0 additions & 13 deletions apps/api/src/routes/internal/query-engine.http.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ import {
PlanetScaleInfraTimeseriesResponse,
RailwayInfraRowsResponse,
VercelAiGatewayResponse,
VercelAuditLogResponse,
VercelInfraDependenciesResponse,
VercelInfraFunctionsResponse,
VercelInfraFunctionTimeseriesResponse,
Expand Down Expand Up @@ -1000,18 +999,6 @@ export const HttpQueryEngineLive = HttpApiBuilder.group(MapleInternalApi, "query
})
}),
)
.handle("vercelAuditLog", ({ payload }) =>
Effect.gen(function* () {
const tenant = yield* CurrentTenant.Context
const rows = yield* runQuery(Queries.vercelAuditLog, tenant, payload)
return new VercelAuditLogResponse({
events: Arr.map(rows, (row) => ({
...row,
timestamp: DateTime.formatIso(row.timestamp),
})),
})
}),
)
.handle("gcpInfraPresence", ({ payload }) =>
Effect.gen(function* () {
const tenant = yield* CurrentTenant.Context
Expand Down
3 changes: 3 additions & 0 deletions apps/ingest/alchemy.run.ts
Original file line number Diff line number Diff line change
Expand Up @@ -522,6 +522,9 @@ export const createMapleIngest = ({ stage, region, hostname, profile, dbLogin }:
...(yield* blockedIngestKeysEnv),
// The org Maple's own telemetry is filed under. Required, no fallback.
MAPLE_INTERNAL_ORG_ID: yield* requiredPlain("MAPLE_INTERNAL_ORG_ID"),
// On wherever a stage is deployed whole and never rolled back to an older gateway; prd
// turns it on in its environment once `audit_trail_events` is there.
...(stage.kind !== "prd" && { INGEST_AUDIT_TRAIL_ENABLED: "true" }),
...(yield* gatewayTuningEnv),
// `INGEST_COMMIT_SHA` (prd) is the image's own revision, so a deploy that leaves
// `apps/ingest` alone does not change the task definition and roll the hosts.
Expand Down
3 changes: 3 additions & 0 deletions apps/ingest/alchemy/gateway-env.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,9 @@ export const gatewayTuningEnv: Config.Config<PlainEnv> = Config.all([
// switch rule application off in an emergency.
optionalPlain("INGEST_RULES_ENABLED"),
optionalPlain("INGEST_RULES_CACHE_TTL_SECS"),
// Provider audit events go to the audit trail instead of the logs. The gateway defaults to off:
// set "true" once `audit_trail_events` exists and every task runs a build that knows the switch.
optionalPlain("INGEST_AUDIT_TRAIL_ENABLED"),
optionalPlain("INGEST_MAX_REQUEST_BODY_BYTES"),
optionalPlain("INGEST_MAX_DECODED_BODY_BYTES"),
optionalPlain("INGEST_MAX_DECODE_HEAP_BYTES"),
Expand Down
Loading
Loading