@aexhq/sdk 0.46.5-canary → 0.51.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/LICENSE +201 -0
- package/NOTICE +38 -0
- package/README.md +54 -29
- package/dist/client/aex.d.ts +33 -0
- package/dist/client/aex.js +108 -0
- package/dist/client/aex.js.map +1 -0
- package/dist/client/credentials.d.ts +25 -0
- package/dist/client/credentials.js +97 -0
- package/dist/client/credentials.js.map +1 -0
- package/dist/client/routing.d.ts +7 -0
- package/dist/client/routing.js +29 -0
- package/dist/client/routing.js.map +1 -0
- package/dist/downloads/download.d.ts +18 -0
- package/dist/downloads/download.js +67 -0
- package/dist/downloads/download.js.map +1 -0
- package/dist/generated/errors.d.ts +12 -0
- package/dist/generated/errors.js +82 -0
- package/dist/generated/errors.js.map +1 -0
- package/dist/generated/models.d.ts +1392 -0
- package/dist/generated/models.js +62 -0
- package/dist/generated/models.js.map +1 -0
- package/dist/generated/resources.d.ts +710 -0
- package/dist/generated/resources.js +582 -0
- package/dist/generated/resources.js.map +1 -0
- package/dist/generated/routes.d.ts +44 -0
- package/dist/generated/routes.js +1905 -0
- package/dist/generated/routes.js.map +1 -0
- package/dist/index.d.ts +21 -50
- package/dist/index.js +14 -62
- package/dist/index.js.map +1 -1
- package/dist/node/session-file-limits.d.ts +4 -0
- package/dist/node/session-file-limits.js +7 -0
- package/dist/node/session-file-limits.js.map +1 -0
- package/dist/node/session-files.d.ts +80 -0
- package/dist/node/session-files.js +254 -0
- package/dist/node/session-files.js.map +1 -0
- package/dist/observations/stream.d.ts +1 -0
- package/dist/observations/stream.js +18 -0
- package/dist/observations/stream.js.map +1 -0
- package/dist/transport/errors.d.ts +60 -0
- package/dist/transport/errors.js +107 -0
- package/dist/transport/errors.js.map +1 -0
- package/dist/transport/pagination.d.ts +8 -0
- package/dist/transport/pagination.js +34 -0
- package/dist/transport/pagination.js.map +1 -0
- package/dist/transport/retry.d.ts +21 -0
- package/dist/transport/retry.js +37 -0
- package/dist/transport/retry.js.map +1 -0
- package/dist/transport/transport.d.ts +25 -0
- package/dist/transport/transport.js +33 -0
- package/dist/transport/transport.js.map +1 -0
- package/package.json +67 -30
- package/dist/_contracts/account-operations.d.ts +0 -101
- package/dist/_contracts/account-operations.js +0 -242
- package/dist/_contracts/account-types.d.ts +0 -461
- package/dist/_contracts/account-types.js +0 -1
- package/dist/_contracts/api-key.d.ts +0 -61
- package/dist/_contracts/api-key.js +0 -101
- package/dist/_contracts/api-routes.d.ts +0 -20
- package/dist/_contracts/api-routes.js +0 -109
- package/dist/_contracts/archive-limits.d.ts +0 -3
- package/dist/_contracts/archive-limits.js +0 -23
- package/dist/_contracts/asset-authoring.d.ts +0 -22
- package/dist/_contracts/asset-authoring.js +0 -106
- package/dist/_contracts/asset-bundle.d.ts +0 -64
- package/dist/_contracts/asset-bundle.js +0 -263
- package/dist/_contracts/asset-upload-helper.d.ts +0 -31
- package/dist/_contracts/asset-upload-helper.js +0 -84
- package/dist/_contracts/billing-admission.d.ts +0 -29
- package/dist/_contracts/billing-admission.js +0 -28
- package/dist/_contracts/bundle-manifest.d.ts +0 -89
- package/dist/_contracts/bundle-manifest.js +0 -158
- package/dist/_contracts/canonical-sha256.d.ts +0 -8
- package/dist/_contracts/canonical-sha256.js +0 -8
- package/dist/_contracts/connection-ticket.d.ts +0 -22
- package/dist/_contracts/connection-ticket.js +0 -54
- package/dist/_contracts/continuation-event.d.ts +0 -31
- package/dist/_contracts/continuation-event.js +0 -6
- package/dist/_contracts/contract-parse-error.d.ts +0 -12
- package/dist/_contracts/contract-parse-error.js +0 -51
- package/dist/_contracts/error-codes.d.ts +0 -26
- package/dist/_contracts/error-codes.js +0 -116
- package/dist/_contracts/error-factory.d.ts +0 -32
- package/dist/_contracts/error-factory.js +0 -174
- package/dist/_contracts/event-envelope.d.ts +0 -471
- package/dist/_contracts/event-envelope.js +0 -501
- package/dist/_contracts/event-stream-client.d.ts +0 -122
- package/dist/_contracts/event-stream-client.js +0 -445
- package/dist/_contracts/event-view.d.ts +0 -44
- package/dist/_contracts/event-view.js +0 -69
- package/dist/_contracts/failure-class.d.ts +0 -29
- package/dist/_contracts/failure-class.js +0 -73
- package/dist/_contracts/http.d.ts +0 -135
- package/dist/_contracts/http.js +0 -434
- package/dist/_contracts/ids.d.ts +0 -66
- package/dist/_contracts/ids.js +0 -119
- package/dist/_contracts/index.d.ts +0 -42
- package/dist/_contracts/index.js +0 -52
- package/dist/_contracts/internal.d.ts +0 -55
- package/dist/_contracts/internal.js +0 -113
- package/dist/_contracts/models.d.ts +0 -30
- package/dist/_contracts/models.js +0 -28
- package/dist/_contracts/operation-core.d.ts +0 -36
- package/dist/_contracts/operation-core.js +0 -70
- package/dist/_contracts/operations.d.ts +0 -218
- package/dist/_contracts/operations.js +0 -1496
- package/dist/_contracts/otlp-projection.d.ts +0 -78
- package/dist/_contracts/otlp-projection.js +0 -171
- package/dist/_contracts/post-hook.d.ts +0 -31
- package/dist/_contracts/post-hook.js +0 -61
- package/dist/_contracts/provider-fault.d.ts +0 -34
- package/dist/_contracts/provider-fault.js +0 -68
- package/dist/_contracts/retry-core.d.ts +0 -29
- package/dist/_contracts/retry-core.js +0 -79
- package/dist/_contracts/runner-event.d.ts +0 -117
- package/dist/_contracts/runner-event.js +0 -172
- package/dist/_contracts/runtime-kind.d.ts +0 -60
- package/dist/_contracts/runtime-kind.js +0 -70
- package/dist/_contracts/runtime-manifest.d.ts +0 -121
- package/dist/_contracts/runtime-manifest.js +0 -83
- package/dist/_contracts/runtime-security-profile.d.ts +0 -26
- package/dist/_contracts/runtime-security-profile.js +0 -73
- package/dist/_contracts/runtime-sizes.d.ts +0 -104
- package/dist/_contracts/runtime-sizes.js +0 -111
- package/dist/_contracts/runtime-types.d.ts +0 -618
- package/dist/_contracts/runtime-types.js +0 -58
- package/dist/_contracts/schemas/asset-bundle.d.ts +0 -70
- package/dist/_contracts/schemas/asset-bundle.js +0 -107
- package/dist/_contracts/schemas/asset-ref.d.ts +0 -61
- package/dist/_contracts/schemas/asset-ref.js +0 -118
- package/dist/_contracts/schemas/bundle-manifest.d.ts +0 -66
- package/dist/_contracts/schemas/bundle-manifest.js +0 -77
- package/dist/_contracts/schemas/index.d.ts +0 -32
- package/dist/_contracts/schemas/index.js +0 -30
- package/dist/_contracts/schemas/mcp-server.d.ts +0 -99
- package/dist/_contracts/schemas/mcp-server.js +0 -209
- package/dist/_contracts/schemas/models.d.ts +0 -29
- package/dist/_contracts/schemas/models.js +0 -51
- package/dist/_contracts/schemas/numeric.d.ts +0 -18
- package/dist/_contracts/schemas/numeric.js +0 -28
- package/dist/_contracts/schemas/post-hook.d.ts +0 -45
- package/dist/_contracts/schemas/post-hook.js +0 -68
- package/dist/_contracts/schemas/response-assets.d.ts +0 -75
- package/dist/_contracts/schemas/response-assets.js +0 -81
- package/dist/_contracts/schemas/response-billing.d.ts +0 -208
- package/dist/_contracts/schemas/response-billing.js +0 -139
- package/dist/_contracts/schemas/response-common.d.ts +0 -132
- package/dist/_contracts/schemas/response-common.js +0 -162
- package/dist/_contracts/schemas/response-identity.d.ts +0 -648
- package/dist/_contracts/schemas/response-identity.js +0 -131
- package/dist/_contracts/schemas/response-mcp-servers.d.ts +0 -51
- package/dist/_contracts/schemas/response-mcp-servers.js +0 -32
- package/dist/_contracts/schemas/response-secrets.d.ts +0 -50
- package/dist/_contracts/schemas/response-secrets.js +0 -32
- package/dist/_contracts/schemas/response-sessions-internal.d.ts +0 -200
- package/dist/_contracts/schemas/response-sessions-internal.js +0 -142
- package/dist/_contracts/schemas/response-sessions.d.ts +0 -1598
- package/dist/_contracts/schemas/response-sessions.js +0 -377
- package/dist/_contracts/schemas/response-webhooks.d.ts +0 -76
- package/dist/_contracts/schemas/response-webhooks.js +0 -42
- package/dist/_contracts/schemas/response-workspace.d.ts +0 -225
- package/dist/_contracts/schemas/response-workspace.js +0 -99
- package/dist/_contracts/schemas/runtime-kind.d.ts +0 -31
- package/dist/_contracts/schemas/runtime-kind.js +0 -29
- package/dist/_contracts/schemas/runtime-security-profile.d.ts +0 -28
- package/dist/_contracts/schemas/runtime-security-profile.js +0 -26
- package/dist/_contracts/schemas/runtime-sizes.d.ts +0 -70
- package/dist/_contracts/schemas/runtime-sizes.js +0 -127
- package/dist/_contracts/schemas/session-limits.d.ts +0 -34
- package/dist/_contracts/schemas/session-limits.js +0 -39
- package/dist/_contracts/schemas/session-machine.d.ts +0 -23
- package/dist/_contracts/schemas/session-machine.js +0 -24
- package/dist/_contracts/schemas/session-request-config.d.ts +0 -58
- package/dist/_contracts/schemas/session-request-config.js +0 -134
- package/dist/_contracts/schemas/session-webhook.d.ts +0 -11
- package/dist/_contracts/schemas/session-webhook.js +0 -38
- package/dist/_contracts/schemas/side-effect-audit.d.ts +0 -98
- package/dist/_contracts/schemas/side-effect-audit.js +0 -102
- package/dist/_contracts/schemas/submission-assets.d.ts +0 -117
- package/dist/_contracts/schemas/submission-assets.js +0 -147
- package/dist/_contracts/schemas/submission-body.d.ts +0 -251
- package/dist/_contracts/schemas/submission-body.js +0 -378
- package/dist/_contracts/schemas/submission-environment.d.ts +0 -79
- package/dist/_contracts/schemas/submission-environment.js +0 -179
- package/dist/_contracts/schemas/submission-request.d.ts +0 -158
- package/dist/_contracts/schemas/submission-request.js +0 -49
- package/dist/_contracts/schemas/submission-secrets.d.ts +0 -47
- package/dist/_contracts/schemas/submission-secrets.js +0 -108
- package/dist/_contracts/schemas/wire.d.ts +0 -118
- package/dist/_contracts/schemas/wire.js +0 -171
- package/dist/_contracts/schemas/workspace-resources.d.ts +0 -50
- package/dist/_contracts/schemas/workspace-resources.js +0 -87
- package/dist/_contracts/sdk-errors.d.ts +0 -212
- package/dist/_contracts/sdk-errors.js +0 -313
- package/dist/_contracts/sdk-secrets.d.ts +0 -67
- package/dist/_contracts/sdk-secrets.js +0 -427
- package/dist/_contracts/session-archive.d.ts +0 -16
- package/dist/_contracts/session-archive.js +0 -92
- package/dist/_contracts/session-artifacts.d.ts +0 -189
- package/dist/_contracts/session-artifacts.js +0 -264
- package/dist/_contracts/session-config.d.ts +0 -373
- package/dist/_contracts/session-config.js +0 -562
- package/dist/_contracts/session-cost-types.d.ts +0 -211
- package/dist/_contracts/session-cost-types.js +0 -69
- package/dist/_contracts/session-cost.d.ts +0 -8
- package/dist/_contracts/session-cost.js +0 -582
- package/dist/_contracts/session-custody.d.ts +0 -165
- package/dist/_contracts/session-custody.js +0 -345
- package/dist/_contracts/session-file-query.d.ts +0 -14
- package/dist/_contracts/session-file-query.js +0 -178
- package/dist/_contracts/session-record.d.ts +0 -112
- package/dist/_contracts/session-record.js +0 -165
- package/dist/_contracts/session-retention.d.ts +0 -201
- package/dist/_contracts/session-retention.js +0 -450
- package/dist/_contracts/side-effect-audit.d.ts +0 -126
- package/dist/_contracts/side-effect-audit.js +0 -520
- package/dist/_contracts/sse.d.ts +0 -74
- package/dist/_contracts/sse.js +0 -227
- package/dist/_contracts/stable.d.ts +0 -45
- package/dist/_contracts/stable.js +0 -62
- package/dist/_contracts/status.d.ts +0 -25
- package/dist/_contracts/status.js +0 -57
- package/dist/_contracts/submission-limits.d.ts +0 -61
- package/dist/_contracts/submission-limits.js +0 -60
- package/dist/_contracts/submission.d.ts +0 -547
- package/dist/_contracts/submission.js +0 -812
- package/dist/_contracts/suggest.d.ts +0 -15
- package/dist/_contracts/suggest.js +0 -53
- package/dist/_contracts/testing/response-bindings.d.ts +0 -45
- package/dist/_contracts/testing/response-bindings.js +0 -256
- package/dist/_contracts/testing/wire-conformance-entry.d.ts +0 -10
- package/dist/_contracts/testing/wire-conformance-entry.js +0 -8
- package/dist/_contracts/testing/wire-conformance.d.ts +0 -169
- package/dist/_contracts/testing/wire-conformance.js +0 -276
- package/dist/_contracts/turn-trace.d.ts +0 -28
- package/dist/_contracts/turn-trace.js +0 -1
- package/dist/_contracts/unknown-field-error.d.ts +0 -13
- package/dist/_contracts/unknown-field-error.js +0 -21
- package/dist/_contracts/value-guards.d.ts +0 -20
- package/dist/_contracts/value-guards.js +0 -34
- package/dist/_contracts/webhook-verify.d.ts +0 -34
- package/dist/_contracts/webhook-verify.js +0 -93
- package/dist/_contracts/wire-observer.d.ts +0 -49
- package/dist/_contracts/wire-observer.js +0 -34
- package/dist/_contracts/workflow-status.d.ts +0 -7
- package/dist/_contracts/workflow-status.js +0 -43
- package/dist/_contracts/workspace-resources.d.ts +0 -98
- package/dist/_contracts/workspace-resources.js +0 -39
- package/dist/archive-limits.d.ts +0 -1
- package/dist/archive-limits.js +0 -2
- package/dist/archive-limits.js.map +0 -1
- package/dist/asset-upload.d.ts +0 -47
- package/dist/asset-upload.js +0 -269
- package/dist/asset-upload.js.map +0 -1
- package/dist/bundle.d.ts +0 -9
- package/dist/bundle.js +0 -20
- package/dist/bundle.js.map +0 -1
- package/dist/canonical-zip.d.ts +0 -68
- package/dist/canonical-zip.js +0 -355
- package/dist/canonical-zip.js.map +0 -1
- package/dist/cli.mjs +0 -12048
- package/dist/cli.mjs.sha256 +0 -1
- package/dist/client-types.d.ts +0 -192
- package/dist/client-types.js +0 -2
- package/dist/client-types.js.map +0 -1
- package/dist/client.d.ts +0 -464
- package/dist/client.js +0 -1207
- package/dist/client.js.map +0 -1
- package/dist/event-projection.d.ts +0 -22
- package/dist/event-projection.js +0 -380
- package/dist/event-projection.js.map +0 -1
- package/dist/fetch-archive.d.ts +0 -16
- package/dist/fetch-archive.js +0 -252
- package/dist/fetch-archive.js.map +0 -1
- package/dist/file.d.ts +0 -96
- package/dist/file.js +0 -272
- package/dist/file.js.map +0 -1
- package/dist/instructions.d.ts +0 -20
- package/dist/instructions.js +0 -40
- package/dist/instructions.js.map +0 -1
- package/dist/legacy-session-provider-fault.d.ts +0 -7
- package/dist/legacy-session-provider-fault.js +0 -38
- package/dist/legacy-session-provider-fault.js.map +0 -1
- package/dist/mcp-server.d.ts +0 -84
- package/dist/mcp-server.js +0 -117
- package/dist/mcp-server.js.map +0 -1
- package/dist/node-fs.d.ts +0 -29
- package/dist/node-fs.js +0 -19
- package/dist/node-fs.js.map +0 -1
- package/dist/node-walk.d.ts +0 -69
- package/dist/node-walk.js +0 -151
- package/dist/node-walk.js.map +0 -1
- package/dist/path-basename.d.ts +0 -5
- package/dist/path-basename.js +0 -9
- package/dist/path-basename.js.map +0 -1
- package/dist/retry.d.ts +0 -70
- package/dist/retry.js +0 -155
- package/dist/retry.js.map +0 -1
- package/dist/secret.d.ts +0 -65
- package/dist/secret.js +0 -110
- package/dist/secret.js.map +0 -1
- package/dist/session-validate.d.ts +0 -100
- package/dist/session-validate.js +0 -303
- package/dist/session-validate.js.map +0 -1
- package/dist/skill.d.ts +0 -99
- package/dist/skill.js +0 -169
- package/dist/skill.js.map +0 -1
- package/dist/submission-wire.d.ts +0 -13
- package/dist/submission-wire.js +0 -69
- package/dist/submission-wire.js.map +0 -1
- package/dist/tool.d.ts +0 -41
- package/dist/tool.js +0 -76
- package/dist/tool.js.map +0 -1
- package/dist/version.d.ts +0 -9
- package/dist/version.js +0 -10
- package/dist/version.js.map +0 -1
- package/docs/authentication.md +0 -125
- package/docs/billing.md +0 -164
- package/docs/cleanup.md +0 -27
- package/docs/concepts/agent-tools.md +0 -47
- package/docs/concepts/composition.md +0 -60
- package/docs/concepts/providers-and-runtimes.md +0 -121
- package/docs/concepts/sessions.md +0 -51
- package/docs/concepts/subagents.md +0 -35
- package/docs/credentials.md +0 -116
- package/docs/defaults.md +0 -51
- package/docs/errors.md +0 -258
- package/docs/events.md +0 -143
- package/docs/files.md +0 -130
- package/docs/limits-and-quotas.md +0 -114
- package/docs/limits.md +0 -51
- package/docs/mcp.md +0 -47
- package/docs/networking.md +0 -114
- package/docs/provider-runtime-capabilities.md +0 -32
- package/docs/public-surface.json +0 -73
- package/docs/quickstart.md +0 -135
- package/docs/release.md +0 -44
- package/docs/retries.md +0 -108
- package/docs/secrets.md +0 -141
- package/docs/session-config.md +0 -51
- package/docs/session-record.md +0 -58
- package/docs/skills.md +0 -65
- package/docs/telemetry.md +0 -66
- package/docs/testing.md +0 -35
- package/docs/vision-skills.md +0 -94
- package/docs/webhooks.md +0 -143
|
@@ -1,165 +0,0 @@
|
|
|
1
|
-
import type { ProviderName } from "./submission.js";
|
|
2
|
-
export declare const CUSTODY_MANIFEST_SCHEMA_VERSION = 1;
|
|
3
|
-
export declare const CUSTODY_REDACTION_SCANNER_VERSION = 1;
|
|
4
|
-
export declare const CUSTODY_MANIFEST_KIND = "aex.custody_manifest.v1";
|
|
5
|
-
export declare const CUSTODY_MANIFEST_CONTENT_TYPE = "application/json; charset=utf-8";
|
|
6
|
-
export declare const CUSTODY_MANIFEST_SESSION_REL_PATH = "metadata/custody.json";
|
|
7
|
-
export declare const CUSTODY_SECRET_CLASSES: readonly ["provider_api_key", "mcp_credential", "proxy_endpoint_auth", "runner_bearer", "managed_system_credential"];
|
|
8
|
-
export type CustodySecretClass = (typeof CUSTODY_SECRET_CLASSES)[number];
|
|
9
|
-
export declare const CUSTODY_RESOURCE_CLASSES: readonly ["runtime_machine", "proxy_token", "execution_secret", "event_archive", "session_file", "session_log", "session_asset"];
|
|
10
|
-
export type CustodyResourceClass = (typeof CUSTODY_RESOURCE_CLASSES)[number];
|
|
11
|
-
export declare const CUSTODY_EXPOSURE_SURFACES: readonly ["aex_vault", "aex_kv", "host_env", "host_file", "dashboard_proxy", "api_provider_proxy", "api_mcp_proxy", "session_artifact_store", "coordinator_event_archive"];
|
|
12
|
-
export type CustodyExposureSurface = (typeof CUSTODY_EXPOSURE_SURFACES)[number];
|
|
13
|
-
export declare const CUSTODY_EXPOSURE_ACCESS_KINDS: readonly ["stored", "injected", "proxied", "replicated", "observed", "unknown"];
|
|
14
|
-
export type CustodyExposureAccessKind = (typeof CUSTODY_EXPOSURE_ACCESS_KINDS)[number];
|
|
15
|
-
export declare const CUSTODY_EXPOSURE_STATUSES: readonly ["exposed", "revoked", "retained", "failed", "not_applicable"];
|
|
16
|
-
export type CustodyExposureStatus = (typeof CUSTODY_EXPOSURE_STATUSES)[number];
|
|
17
|
-
export declare const CUSTODY_DISPOSITION_STATUSES: readonly ["destroyed", "revoked", "not_found", "retained_by_policy", "cleanup_failed", "parked_for_operator", "pending", "not_applicable"];
|
|
18
|
-
export type CustodyDispositionStatus = (typeof CUSTODY_DISPOSITION_STATUSES)[number];
|
|
19
|
-
export declare const CUSTODY_CLEANUP_STATUSES: readonly ["succeeded", "partial", "failed", "retained", "pending"];
|
|
20
|
-
export type CustodyCleanupStatus = (typeof CUSTODY_CLEANUP_STATUSES)[number];
|
|
21
|
-
export declare const CUSTODY_EVIDENCE_SOURCES: readonly ["session_row", "runtime_manifest", "terminal_event", "cleanup_step", "file_capture", "proxy_audit", "provider_cleanup_summary"];
|
|
22
|
-
export type CustodyEvidenceSource = (typeof CUSTODY_EVIDENCE_SOURCES)[number];
|
|
23
|
-
export declare const CUSTODY_MANIFEST_EXCLUDED_VALUE_CLASSES: readonly ["raw_secret_values", "bearer_hashes", "provider_response_bodies", "signed_urls", "object_store_keys", "vault_ids", "private_resource_handles"];
|
|
24
|
-
export type CustodyManifestExcludedValueClass = (typeof CUSTODY_MANIFEST_EXCLUDED_VALUE_CLASSES)[number];
|
|
25
|
-
export interface CustodyManifestSessionV1 {
|
|
26
|
-
readonly sessionId: string;
|
|
27
|
-
readonly workspaceId: string;
|
|
28
|
-
readonly provider: ProviderName | string;
|
|
29
|
-
readonly terminalStatus: string;
|
|
30
|
-
readonly createdAt?: string;
|
|
31
|
-
readonly terminalAt?: string;
|
|
32
|
-
}
|
|
33
|
-
export interface CustodyManifestExposureV1 {
|
|
34
|
-
readonly surface: CustodyExposureSurface | string;
|
|
35
|
-
readonly access: CustodyExposureAccessKind;
|
|
36
|
-
readonly status?: CustodyExposureStatus;
|
|
37
|
-
readonly count?: number;
|
|
38
|
-
readonly firstExposedAt?: string;
|
|
39
|
-
readonly lastExposedAt?: string;
|
|
40
|
-
readonly revokedAt?: string;
|
|
41
|
-
}
|
|
42
|
-
export interface CustodyManifestDispositionV1 {
|
|
43
|
-
readonly status: CustodyDispositionStatus;
|
|
44
|
-
readonly reason?: string;
|
|
45
|
-
readonly decidedAt?: string;
|
|
46
|
-
readonly errorClass?: string;
|
|
47
|
-
readonly followUpRequired?: boolean;
|
|
48
|
-
}
|
|
49
|
-
export interface CustodyManifestEvidenceSummaryV1 {
|
|
50
|
-
readonly source: CustodyEvidenceSource | string;
|
|
51
|
-
readonly status?: string;
|
|
52
|
-
readonly observedAt?: string;
|
|
53
|
-
readonly count?: number;
|
|
54
|
-
readonly errorClass?: string;
|
|
55
|
-
}
|
|
56
|
-
export interface CustodyManifestSecretClassV1 {
|
|
57
|
-
readonly class: CustodySecretClass | string;
|
|
58
|
-
readonly present: boolean;
|
|
59
|
-
readonly count: number;
|
|
60
|
-
readonly exposures: readonly CustodyManifestExposureV1[];
|
|
61
|
-
readonly disposition: CustodyManifestDispositionV1;
|
|
62
|
-
readonly evidence?: readonly CustodyManifestEvidenceSummaryV1[];
|
|
63
|
-
}
|
|
64
|
-
export interface CustodyManifestResourceClassV1 {
|
|
65
|
-
readonly class: CustodyResourceClass | string;
|
|
66
|
-
readonly count: number;
|
|
67
|
-
readonly exposures: readonly CustodyManifestExposureV1[];
|
|
68
|
-
readonly disposition: CustodyManifestDispositionV1;
|
|
69
|
-
readonly evidence?: readonly CustodyManifestEvidenceSummaryV1[];
|
|
70
|
-
}
|
|
71
|
-
export interface CustodyManifestCleanupV1 {
|
|
72
|
-
readonly status: CustodyCleanupStatus;
|
|
73
|
-
readonly startedAt?: string;
|
|
74
|
-
readonly finishedAt?: string;
|
|
75
|
-
readonly errorClass?: string;
|
|
76
|
-
readonly followUpRequiredCount?: number;
|
|
77
|
-
}
|
|
78
|
-
export interface CustodyManifestSummaryV1 {
|
|
79
|
-
readonly secretClassCount: number;
|
|
80
|
-
readonly secretInstanceCount: number;
|
|
81
|
-
readonly resourceClassCount: number;
|
|
82
|
-
readonly resourceInstanceCount: number;
|
|
83
|
-
readonly exposureCount: number;
|
|
84
|
-
readonly revokedExposureCount: number;
|
|
85
|
-
readonly retainedCount: number;
|
|
86
|
-
readonly cleanupFailedCount: number;
|
|
87
|
-
readonly parkedForOperatorCount: number;
|
|
88
|
-
readonly pendingCount: number;
|
|
89
|
-
readonly followUpRequiredCount: number;
|
|
90
|
-
readonly dispositionCounts: Readonly<Partial<Record<CustodyDispositionStatus, number>>>;
|
|
91
|
-
}
|
|
92
|
-
export interface CustodyManifestRedactionV1 {
|
|
93
|
-
readonly policy: "metadata_only";
|
|
94
|
-
readonly scannerVersion: typeof CUSTODY_REDACTION_SCANNER_VERSION;
|
|
95
|
-
readonly excludes: readonly CustodyManifestExcludedValueClass[];
|
|
96
|
-
}
|
|
97
|
-
export interface CustodyManifestV1 {
|
|
98
|
-
readonly schemaVersion: typeof CUSTODY_MANIFEST_SCHEMA_VERSION;
|
|
99
|
-
readonly kind: typeof CUSTODY_MANIFEST_KIND;
|
|
100
|
-
readonly generatedAt: string;
|
|
101
|
-
readonly finalizedAt?: string;
|
|
102
|
-
readonly session: CustodyManifestSessionV1;
|
|
103
|
-
readonly secrets: readonly CustodyManifestSecretClassV1[];
|
|
104
|
-
readonly resources: readonly CustodyManifestResourceClassV1[];
|
|
105
|
-
readonly cleanup: CustodyManifestCleanupV1;
|
|
106
|
-
readonly summary: CustodyManifestSummaryV1;
|
|
107
|
-
readonly redaction: CustodyManifestRedactionV1;
|
|
108
|
-
}
|
|
109
|
-
export type CustodyManifestSessionInput = CustodyManifestSessionV1;
|
|
110
|
-
export type CustodyManifestExposureInput = CustodyManifestExposureV1;
|
|
111
|
-
export type CustodyManifestDispositionInput = CustodyManifestDispositionV1;
|
|
112
|
-
export type CustodyManifestEvidenceSummaryInput = CustodyManifestEvidenceSummaryV1;
|
|
113
|
-
export type CustodyManifestCleanupInput = CustodyManifestCleanupV1;
|
|
114
|
-
export interface CustodyManifestSecretClassInput extends Omit<CustodyManifestSecretClassV1, "count" | "exposures"> {
|
|
115
|
-
readonly count?: number;
|
|
116
|
-
readonly exposures?: readonly CustodyManifestExposureInput[];
|
|
117
|
-
}
|
|
118
|
-
export interface CustodyManifestResourceClassInput extends Omit<CustodyManifestResourceClassV1, "count" | "exposures"> {
|
|
119
|
-
readonly count?: number;
|
|
120
|
-
readonly exposures?: readonly CustodyManifestExposureInput[];
|
|
121
|
-
}
|
|
122
|
-
export interface CustodyManifestInput {
|
|
123
|
-
readonly generatedAt: string;
|
|
124
|
-
readonly finalizedAt?: string;
|
|
125
|
-
readonly session: CustodyManifestSessionInput;
|
|
126
|
-
readonly secrets?: readonly CustodyManifestSecretClassInput[];
|
|
127
|
-
readonly resources?: readonly CustodyManifestResourceClassInput[];
|
|
128
|
-
readonly cleanup?: CustodyManifestCleanupInput;
|
|
129
|
-
}
|
|
130
|
-
export interface CustodyManifestWriteObject {
|
|
131
|
-
readonly key: string;
|
|
132
|
-
readonly contentType: typeof CUSTODY_MANIFEST_CONTENT_TYPE;
|
|
133
|
-
readonly manifest: CustodyManifestV1;
|
|
134
|
-
}
|
|
135
|
-
export interface CustodyManifestObjectStore {
|
|
136
|
-
putCustodyManifestObject(object: CustodyManifestWriteObject): Promise<void>;
|
|
137
|
-
}
|
|
138
|
-
export interface CustodyManifestWriteResult {
|
|
139
|
-
readonly status: "written";
|
|
140
|
-
readonly schemaVersion: typeof CUSTODY_MANIFEST_SCHEMA_VERSION;
|
|
141
|
-
readonly sessionId: string;
|
|
142
|
-
readonly workspaceId: string;
|
|
143
|
-
readonly key: string;
|
|
144
|
-
readonly writtenAt: string;
|
|
145
|
-
}
|
|
146
|
-
export interface CustodyManifestWriter {
|
|
147
|
-
writeCustodyManifest(input: CustodyManifestInput): Promise<CustodyManifestWriteResult>;
|
|
148
|
-
}
|
|
149
|
-
export type CustodyRedactionReason = "forbidden_field_name" | "uninspectable_value" | "bearer_token" | "provider_key" | "signed_url" | "object_store_key" | "vault_id" | "private_resource_handle" | "high_entropy_token";
|
|
150
|
-
export interface CustodyRedactionFinding {
|
|
151
|
-
readonly path: string;
|
|
152
|
-
readonly reason: CustodyRedactionReason;
|
|
153
|
-
readonly valueLength?: number;
|
|
154
|
-
}
|
|
155
|
-
export declare class CustodyManifestRedactionError extends Error {
|
|
156
|
-
readonly code = "custody_manifest_not_public_safe";
|
|
157
|
-
readonly findings: readonly CustodyRedactionFinding[];
|
|
158
|
-
constructor(findings: readonly CustodyRedactionFinding[]);
|
|
159
|
-
}
|
|
160
|
-
export declare function custodyManifestObjectKey(sessionId: string): string;
|
|
161
|
-
export declare function createCustodyManifestWriter(store: CustodyManifestObjectStore): CustodyManifestWriter;
|
|
162
|
-
export declare function writeCustodyManifest(store: CustodyManifestObjectStore, input: CustodyManifestInput): Promise<CustodyManifestWriteResult>;
|
|
163
|
-
export declare function buildCustodyManifest(input: CustodyManifestInput): CustodyManifestV1;
|
|
164
|
-
export declare function scanCustodyPayloadForSensitiveValues(input: unknown): readonly CustodyRedactionFinding[];
|
|
165
|
-
export declare function assertPublicSafeCustodyPayload(input: unknown): void;
|
|
@@ -1,345 +0,0 @@
|
|
|
1
|
-
import { createForbiddenFieldNamePredicate, isPlatformContentDigest, privateResourceHandlePattern, PUBLIC_SAFE_SECRET_PATTERNS, scanPublicSafePayload } from "./sdk-secrets.js";
|
|
2
|
-
export const CUSTODY_MANIFEST_SCHEMA_VERSION = 1;
|
|
3
|
-
export const CUSTODY_REDACTION_SCANNER_VERSION = 1;
|
|
4
|
-
export const CUSTODY_MANIFEST_KIND = "aex.custody_manifest.v1";
|
|
5
|
-
export const CUSTODY_MANIFEST_CONTENT_TYPE = "application/json; charset=utf-8";
|
|
6
|
-
export const CUSTODY_MANIFEST_SESSION_REL_PATH = "metadata/custody.json";
|
|
7
|
-
export const CUSTODY_SECRET_CLASSES = [
|
|
8
|
-
"provider_api_key",
|
|
9
|
-
"mcp_credential",
|
|
10
|
-
"proxy_endpoint_auth",
|
|
11
|
-
"runner_bearer",
|
|
12
|
-
"managed_system_credential"
|
|
13
|
-
];
|
|
14
|
-
export const CUSTODY_RESOURCE_CLASSES = [
|
|
15
|
-
"runtime_machine",
|
|
16
|
-
"proxy_token",
|
|
17
|
-
"execution_secret",
|
|
18
|
-
"event_archive",
|
|
19
|
-
"session_file",
|
|
20
|
-
"session_log",
|
|
21
|
-
"session_asset"
|
|
22
|
-
];
|
|
23
|
-
export const CUSTODY_EXPOSURE_SURFACES = [
|
|
24
|
-
"aex_vault",
|
|
25
|
-
"aex_kv",
|
|
26
|
-
"host_env",
|
|
27
|
-
"host_file",
|
|
28
|
-
"dashboard_proxy",
|
|
29
|
-
"api_provider_proxy",
|
|
30
|
-
"api_mcp_proxy",
|
|
31
|
-
"session_artifact_store",
|
|
32
|
-
"coordinator_event_archive"
|
|
33
|
-
];
|
|
34
|
-
export const CUSTODY_EXPOSURE_ACCESS_KINDS = [
|
|
35
|
-
"stored",
|
|
36
|
-
"injected",
|
|
37
|
-
"proxied",
|
|
38
|
-
"replicated",
|
|
39
|
-
"observed",
|
|
40
|
-
"unknown"
|
|
41
|
-
];
|
|
42
|
-
export const CUSTODY_EXPOSURE_STATUSES = [
|
|
43
|
-
"exposed",
|
|
44
|
-
"revoked",
|
|
45
|
-
"retained",
|
|
46
|
-
"failed",
|
|
47
|
-
"not_applicable"
|
|
48
|
-
];
|
|
49
|
-
export const CUSTODY_DISPOSITION_STATUSES = [
|
|
50
|
-
"destroyed",
|
|
51
|
-
"revoked",
|
|
52
|
-
"not_found",
|
|
53
|
-
"retained_by_policy",
|
|
54
|
-
"cleanup_failed",
|
|
55
|
-
"parked_for_operator",
|
|
56
|
-
"pending",
|
|
57
|
-
"not_applicable"
|
|
58
|
-
];
|
|
59
|
-
export const CUSTODY_CLEANUP_STATUSES = [
|
|
60
|
-
"succeeded",
|
|
61
|
-
"partial",
|
|
62
|
-
"failed",
|
|
63
|
-
"retained",
|
|
64
|
-
"pending"
|
|
65
|
-
];
|
|
66
|
-
export const CUSTODY_EVIDENCE_SOURCES = [
|
|
67
|
-
"session_row",
|
|
68
|
-
"runtime_manifest",
|
|
69
|
-
"terminal_event",
|
|
70
|
-
"cleanup_step",
|
|
71
|
-
"file_capture",
|
|
72
|
-
"proxy_audit",
|
|
73
|
-
"provider_cleanup_summary"
|
|
74
|
-
];
|
|
75
|
-
export const CUSTODY_MANIFEST_EXCLUDED_VALUE_CLASSES = [
|
|
76
|
-
"raw_secret_values",
|
|
77
|
-
"bearer_hashes",
|
|
78
|
-
"provider_response_bodies",
|
|
79
|
-
"signed_urls",
|
|
80
|
-
"object_store_keys",
|
|
81
|
-
"vault_ids",
|
|
82
|
-
"private_resource_handles"
|
|
83
|
-
];
|
|
84
|
-
export class CustodyManifestRedactionError extends Error {
|
|
85
|
-
code = "custody_manifest_not_public_safe";
|
|
86
|
-
findings;
|
|
87
|
-
constructor(findings) {
|
|
88
|
-
super(`custody manifest contains non-public custody data at ${formatFindingPaths(findings)}`);
|
|
89
|
-
this.name = "CustodyManifestRedactionError";
|
|
90
|
-
this.findings = Object.freeze([...findings]);
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
export function custodyManifestObjectKey(sessionId) {
|
|
94
|
-
assertSafeIdentifier(sessionId, "sessionId");
|
|
95
|
-
return `sessions/${sessionId}/${CUSTODY_MANIFEST_SESSION_REL_PATH}`;
|
|
96
|
-
}
|
|
97
|
-
export function createCustodyManifestWriter(store) {
|
|
98
|
-
return {
|
|
99
|
-
async writeCustodyManifest(input) {
|
|
100
|
-
return writeCustodyManifest(store, input);
|
|
101
|
-
}
|
|
102
|
-
};
|
|
103
|
-
}
|
|
104
|
-
export async function writeCustodyManifest(store, input) {
|
|
105
|
-
const manifest = buildCustodyManifest(input);
|
|
106
|
-
const key = custodyManifestObjectKey(manifest.session.sessionId);
|
|
107
|
-
await store.putCustodyManifestObject({
|
|
108
|
-
key,
|
|
109
|
-
contentType: CUSTODY_MANIFEST_CONTENT_TYPE,
|
|
110
|
-
manifest
|
|
111
|
-
});
|
|
112
|
-
return Object.freeze({
|
|
113
|
-
status: "written",
|
|
114
|
-
schemaVersion: CUSTODY_MANIFEST_SCHEMA_VERSION,
|
|
115
|
-
sessionId: manifest.session.sessionId,
|
|
116
|
-
workspaceId: manifest.session.workspaceId,
|
|
117
|
-
key,
|
|
118
|
-
writtenAt: manifest.finalizedAt ?? manifest.generatedAt
|
|
119
|
-
});
|
|
120
|
-
}
|
|
121
|
-
export function buildCustodyManifest(input) {
|
|
122
|
-
const secrets = Object.freeze((input.secrets ?? []).map(normalizeSecretClass));
|
|
123
|
-
const resources = Object.freeze((input.resources ?? []).map(normalizeResourceClass));
|
|
124
|
-
const cleanup = normalizeCleanup(input.cleanup);
|
|
125
|
-
const manifest = Object.freeze({
|
|
126
|
-
schemaVersion: CUSTODY_MANIFEST_SCHEMA_VERSION,
|
|
127
|
-
kind: CUSTODY_MANIFEST_KIND,
|
|
128
|
-
generatedAt: assertTimestamp(input.generatedAt, "generatedAt"),
|
|
129
|
-
...(input.finalizedAt ? { finalizedAt: assertTimestamp(input.finalizedAt, "finalizedAt") } : {}),
|
|
130
|
-
session: normalizeSession(input.session),
|
|
131
|
-
secrets,
|
|
132
|
-
resources,
|
|
133
|
-
cleanup,
|
|
134
|
-
summary: buildCustodySummary(secrets, resources, cleanup),
|
|
135
|
-
redaction: Object.freeze({
|
|
136
|
-
policy: "metadata_only",
|
|
137
|
-
scannerVersion: CUSTODY_REDACTION_SCANNER_VERSION,
|
|
138
|
-
excludes: Object.freeze([...CUSTODY_MANIFEST_EXCLUDED_VALUE_CLASSES])
|
|
139
|
-
})
|
|
140
|
-
});
|
|
141
|
-
assertPublicSafeCustodyPayload(manifest);
|
|
142
|
-
return manifest;
|
|
143
|
-
}
|
|
144
|
-
export function scanCustodyPayloadForSensitiveValues(input) {
|
|
145
|
-
return scanPublicSafePayload(input, {
|
|
146
|
-
patterns: custodyStringPatterns,
|
|
147
|
-
isForbiddenFieldName: isForbiddenCustodyFieldName,
|
|
148
|
-
isPatternExempt: ({ reason, match }) => reason === "high_entropy_token" && isPlatformContentDigest(match)
|
|
149
|
-
});
|
|
150
|
-
}
|
|
151
|
-
export function assertPublicSafeCustodyPayload(input) {
|
|
152
|
-
const findings = scanCustodyPayloadForSensitiveValues(input);
|
|
153
|
-
if (findings.length > 0) {
|
|
154
|
-
throw new CustodyManifestRedactionError(findings);
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
function normalizeSession(input) {
|
|
158
|
-
return Object.freeze({
|
|
159
|
-
sessionId: assertSafeIdentifier(input.sessionId, "session.sessionId"),
|
|
160
|
-
workspaceId: assertSafeIdentifier(input.workspaceId, "session.workspaceId"),
|
|
161
|
-
provider: assertSafeMetadataString(input.provider, "session.provider"),
|
|
162
|
-
terminalStatus: assertSafeMetadataString(input.terminalStatus, "session.terminalStatus"),
|
|
163
|
-
...(input.createdAt ? { createdAt: assertTimestamp(input.createdAt, "session.createdAt") } : {}),
|
|
164
|
-
...(input.terminalAt ? { terminalAt: assertTimestamp(input.terminalAt, "session.terminalAt") } : {})
|
|
165
|
-
});
|
|
166
|
-
}
|
|
167
|
-
function normalizeSecretClass(input) {
|
|
168
|
-
const count = nonNegativeInteger(input.count ?? (input.present ? 1 : 0), "secret.count");
|
|
169
|
-
return Object.freeze({
|
|
170
|
-
class: assertSafeMetadataString(input.class, "secret.class"),
|
|
171
|
-
present: input.present,
|
|
172
|
-
count,
|
|
173
|
-
exposures: Object.freeze((input.exposures ?? []).map(normalizeExposure)),
|
|
174
|
-
disposition: normalizeDisposition(input.disposition),
|
|
175
|
-
...(input.evidence ? { evidence: Object.freeze(input.evidence.map(normalizeEvidence)) } : {})
|
|
176
|
-
});
|
|
177
|
-
}
|
|
178
|
-
function normalizeResourceClass(input) {
|
|
179
|
-
const count = nonNegativeInteger(input.count ?? 1, "resource.count");
|
|
180
|
-
return Object.freeze({
|
|
181
|
-
class: assertSafeMetadataString(input.class, "resource.class"),
|
|
182
|
-
count,
|
|
183
|
-
exposures: Object.freeze((input.exposures ?? []).map(normalizeExposure)),
|
|
184
|
-
disposition: normalizeDisposition(input.disposition),
|
|
185
|
-
...(input.evidence ? { evidence: Object.freeze(input.evidence.map(normalizeEvidence)) } : {})
|
|
186
|
-
});
|
|
187
|
-
}
|
|
188
|
-
function normalizeExposure(input) {
|
|
189
|
-
return Object.freeze({
|
|
190
|
-
surface: assertSafeMetadataString(input.surface, "exposure.surface"),
|
|
191
|
-
access: input.access,
|
|
192
|
-
...(input.status ? { status: input.status } : {}),
|
|
193
|
-
...(input.count !== undefined ? { count: nonNegativeInteger(input.count, "exposure.count") } : {}),
|
|
194
|
-
...(input.firstExposedAt
|
|
195
|
-
? { firstExposedAt: assertTimestamp(input.firstExposedAt, "exposure.firstExposedAt") }
|
|
196
|
-
: {}),
|
|
197
|
-
...(input.lastExposedAt
|
|
198
|
-
? { lastExposedAt: assertTimestamp(input.lastExposedAt, "exposure.lastExposedAt") }
|
|
199
|
-
: {}),
|
|
200
|
-
...(input.revokedAt ? { revokedAt: assertTimestamp(input.revokedAt, "exposure.revokedAt") } : {})
|
|
201
|
-
});
|
|
202
|
-
}
|
|
203
|
-
function normalizeDisposition(input) {
|
|
204
|
-
return Object.freeze({
|
|
205
|
-
status: input.status,
|
|
206
|
-
...(input.reason ? { reason: assertSafeMetadataString(input.reason, "disposition.reason") } : {}),
|
|
207
|
-
...(input.decidedAt ? { decidedAt: assertTimestamp(input.decidedAt, "disposition.decidedAt") } : {}),
|
|
208
|
-
...(input.errorClass ? { errorClass: assertSafeMetadataString(input.errorClass, "disposition.errorClass") } : {}),
|
|
209
|
-
...(input.followUpRequired !== undefined ? { followUpRequired: input.followUpRequired } : {})
|
|
210
|
-
});
|
|
211
|
-
}
|
|
212
|
-
function normalizeEvidence(input) {
|
|
213
|
-
return Object.freeze({
|
|
214
|
-
source: assertSafeMetadataString(input.source, "evidence.source"),
|
|
215
|
-
...(input.status ? { status: assertSafeMetadataString(input.status, "evidence.status") } : {}),
|
|
216
|
-
...(input.observedAt ? { observedAt: assertTimestamp(input.observedAt, "evidence.observedAt") } : {}),
|
|
217
|
-
...(input.count !== undefined ? { count: nonNegativeInteger(input.count, "evidence.count") } : {}),
|
|
218
|
-
...(input.errorClass ? { errorClass: assertSafeMetadataString(input.errorClass, "evidence.errorClass") } : {})
|
|
219
|
-
});
|
|
220
|
-
}
|
|
221
|
-
function normalizeCleanup(input) {
|
|
222
|
-
if (!input) {
|
|
223
|
-
return Object.freeze({ status: "pending" });
|
|
224
|
-
}
|
|
225
|
-
return Object.freeze({
|
|
226
|
-
status: input.status,
|
|
227
|
-
...(input.startedAt ? { startedAt: assertTimestamp(input.startedAt, "cleanup.startedAt") } : {}),
|
|
228
|
-
...(input.finishedAt ? { finishedAt: assertTimestamp(input.finishedAt, "cleanup.finishedAt") } : {}),
|
|
229
|
-
...(input.errorClass ? { errorClass: assertSafeMetadataString(input.errorClass, "cleanup.errorClass") } : {}),
|
|
230
|
-
...(input.followUpRequiredCount !== undefined
|
|
231
|
-
? {
|
|
232
|
-
followUpRequiredCount: nonNegativeInteger(input.followUpRequiredCount, "cleanup.followUpRequiredCount")
|
|
233
|
-
}
|
|
234
|
-
: {})
|
|
235
|
-
});
|
|
236
|
-
}
|
|
237
|
-
function buildCustodySummary(secrets, resources, cleanup) {
|
|
238
|
-
const records = [...secrets, ...resources];
|
|
239
|
-
const dispositionCounts = {};
|
|
240
|
-
let exposureCount = 0;
|
|
241
|
-
let revokedExposureCount = 0;
|
|
242
|
-
let followUpRequiredCount = cleanup.followUpRequiredCount ?? 0;
|
|
243
|
-
for (const record of records) {
|
|
244
|
-
dispositionCounts[record.disposition.status] = (dispositionCounts[record.disposition.status] ?? 0) + 1;
|
|
245
|
-
exposureCount += record.exposures.length;
|
|
246
|
-
revokedExposureCount += record.exposures.filter((exposure) => exposure.status === "revoked").length;
|
|
247
|
-
if (record.disposition.followUpRequired) {
|
|
248
|
-
followUpRequiredCount++;
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
return Object.freeze({
|
|
252
|
-
secretClassCount: secrets.length,
|
|
253
|
-
secretInstanceCount: secrets.reduce((sum, record) => sum + record.count, 0),
|
|
254
|
-
resourceClassCount: resources.length,
|
|
255
|
-
resourceInstanceCount: resources.reduce((sum, record) => sum + record.count, 0),
|
|
256
|
-
exposureCount,
|
|
257
|
-
revokedExposureCount,
|
|
258
|
-
retainedCount: dispositionCounts.retained_by_policy ?? 0,
|
|
259
|
-
cleanupFailedCount: dispositionCounts.cleanup_failed ?? 0,
|
|
260
|
-
parkedForOperatorCount: dispositionCounts.parked_for_operator ?? 0,
|
|
261
|
-
pendingCount: dispositionCounts.pending ?? 0,
|
|
262
|
-
followUpRequiredCount,
|
|
263
|
-
dispositionCounts: Object.freeze({ ...dispositionCounts })
|
|
264
|
-
});
|
|
265
|
-
}
|
|
266
|
-
function normalizeSummary(input) {
|
|
267
|
-
return Object.freeze({
|
|
268
|
-
secretClassCount: nonNegativeInteger(input.secretClassCount, "summary.secretClassCount"),
|
|
269
|
-
secretInstanceCount: nonNegativeInteger(input.secretInstanceCount, "summary.secretInstanceCount"),
|
|
270
|
-
resourceClassCount: nonNegativeInteger(input.resourceClassCount, "summary.resourceClassCount"),
|
|
271
|
-
resourceInstanceCount: nonNegativeInteger(input.resourceInstanceCount, "summary.resourceInstanceCount"),
|
|
272
|
-
exposureCount: nonNegativeInteger(input.exposureCount, "summary.exposureCount"),
|
|
273
|
-
revokedExposureCount: nonNegativeInteger(input.revokedExposureCount, "summary.revokedExposureCount"),
|
|
274
|
-
retainedCount: nonNegativeInteger(input.retainedCount, "summary.retainedCount"),
|
|
275
|
-
cleanupFailedCount: nonNegativeInteger(input.cleanupFailedCount, "summary.cleanupFailedCount"),
|
|
276
|
-
parkedForOperatorCount: nonNegativeInteger(input.parkedForOperatorCount, "summary.parkedForOperatorCount"),
|
|
277
|
-
pendingCount: nonNegativeInteger(input.pendingCount, "summary.pendingCount"),
|
|
278
|
-
followUpRequiredCount: nonNegativeInteger(input.followUpRequiredCount, "summary.followUpRequiredCount"),
|
|
279
|
-
dispositionCounts: Object.freeze(Object.fromEntries(Object.entries(input.dispositionCounts).map(([key, value]) => [
|
|
280
|
-
key,
|
|
281
|
-
nonNegativeInteger(value, `summary.dispositionCounts.${key}`)
|
|
282
|
-
])))
|
|
283
|
-
});
|
|
284
|
-
}
|
|
285
|
-
const custodyStringPatterns = Object.freeze([
|
|
286
|
-
...PUBLIC_SAFE_SECRET_PATTERNS,
|
|
287
|
-
privateResourceHandlePattern([
|
|
288
|
-
"machine",
|
|
289
|
-
"agent",
|
|
290
|
-
"resource",
|
|
291
|
-
"handle",
|
|
292
|
-
"token_hash",
|
|
293
|
-
"bearer_hash"
|
|
294
|
-
])
|
|
295
|
-
]);
|
|
296
|
-
const isForbiddenCustodyFieldName = createForbiddenFieldNamePredicate([
|
|
297
|
-
"apiKey",
|
|
298
|
-
"apiKeys",
|
|
299
|
-
"secretValue",
|
|
300
|
-
"bearerHash",
|
|
301
|
-
"signedUrl",
|
|
302
|
-
"objectStoreKey",
|
|
303
|
-
"objectKey",
|
|
304
|
-
"vaultId",
|
|
305
|
-
"providerResponseBody",
|
|
306
|
-
"responseBody",
|
|
307
|
-
"privateResourceHandle",
|
|
308
|
-
"resourceHandle",
|
|
309
|
-
"rawBody"
|
|
310
|
-
]);
|
|
311
|
-
function assertSafeIdentifier(value, field) {
|
|
312
|
-
assertNonEmptyString(value, field);
|
|
313
|
-
if (!/^[A-Za-z0-9._:-]+$/.test(value)) {
|
|
314
|
-
throw new Error(`custody manifest ${field} must be an opaque identifier without path separators`);
|
|
315
|
-
}
|
|
316
|
-
assertPublicSafeCustodyPayload(value);
|
|
317
|
-
return value;
|
|
318
|
-
}
|
|
319
|
-
function assertSafeMetadataString(value, field) {
|
|
320
|
-
assertNonEmptyString(value, field);
|
|
321
|
-
assertPublicSafeCustodyPayload(value);
|
|
322
|
-
return value;
|
|
323
|
-
}
|
|
324
|
-
function assertNonEmptyString(value, field) {
|
|
325
|
-
if (typeof value !== "string" || value.trim().length === 0) {
|
|
326
|
-
throw new Error(`custody manifest ${field} must be a non-empty string`);
|
|
327
|
-
}
|
|
328
|
-
}
|
|
329
|
-
function assertTimestamp(value, field) {
|
|
330
|
-
assertSafeMetadataString(value, field);
|
|
331
|
-
const ms = Date.parse(value);
|
|
332
|
-
if (!Number.isFinite(ms)) {
|
|
333
|
-
throw new Error(`custody manifest ${field} must be an ISO timestamp string`);
|
|
334
|
-
}
|
|
335
|
-
return value;
|
|
336
|
-
}
|
|
337
|
-
function nonNegativeInteger(value, field) {
|
|
338
|
-
if (!Number.isSafeInteger(value) || value < 0) {
|
|
339
|
-
throw new Error(`custody manifest ${field} must be a non-negative safe integer`);
|
|
340
|
-
}
|
|
341
|
-
return value;
|
|
342
|
-
}
|
|
343
|
-
function formatFindingPaths(findings) {
|
|
344
|
-
return findings.map((finding) => `${finding.path} (${finding.reason})`).join(", ");
|
|
345
|
-
}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import type { SessionFile, SessionFilePathSelector, SessionFileQuery, SessionFileSelector, SessionFileType } from "./runtime-types.js";
|
|
2
|
-
/** Package-private path-selector guard shared by transport orchestration. */
|
|
3
|
-
export declare function isPathSelector(selector: SessionFileSelector): selector is SessionFilePathSelector;
|
|
4
|
-
export declare function resolveSessionFileSelector(files: readonly SessionFile[], selector: SessionFilePathSelector, sessionId?: string): SessionFile;
|
|
5
|
-
export declare function filterSessionFiles(files: readonly SessionFile[], query: SessionFileQuery): readonly SessionFile[];
|
|
6
|
-
/**
|
|
7
|
-
* The single filename-matcher for cross-session / per-session file SEARCH. A
|
|
8
|
-
* string is a case-insensitive SUBSTRING match; a RegExp is tested as given (and
|
|
9
|
-
* reset to `lastIndex = 0` so a reused `/g` regex is safe). Sharing this SSoT is
|
|
10
|
-
* what closes the T16 crash class: session-file search no longer assumes `filename`
|
|
11
|
-
* is a string and passes a RegExp into `escapeRegExp(...).replace(...)`.
|
|
12
|
-
*/
|
|
13
|
-
export declare function toFilenameMatcher(filename: string | RegExp): (name: string) => boolean;
|
|
14
|
-
export declare function classifySessionFile(file: Pick<SessionFile, "filename" | "contentType">): SessionFileType;
|