atabey 0.1.1-beta → 0.1.3
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/README.md +145 -79
- package/dist/atabey/src/cli/commands/coverage.js +17 -12
- package/dist/atabey/src/cli/commands/coverage.js.map +1 -1
- package/dist/atabey/src/cli/commands/lint.d.ts +2 -1
- package/dist/atabey/src/cli/commands/lint.js +20 -1
- package/dist/atabey/src/cli/commands/lint.js.map +1 -1
- package/dist/atabey/src/cli/commands/mcp.js +56 -23
- package/dist/atabey/src/cli/commands/mcp.js.map +1 -1
- package/dist/atabey/src/cli/commands/orchestrate.d.ts +6 -6
- package/dist/atabey/src/cli/index.js +1 -1
- package/dist/shared/src/agent-identity.d.ts +1 -34
- package/dist/shared/src/agent-identity.js +1 -76
- package/dist/shared/src/agent-identity.js.map +1 -1
- package/dist/shared/src/api-catalog.d.ts +1 -57
- package/dist/shared/src/api-catalog.js +1 -253
- package/dist/shared/src/api-catalog.js.map +1 -1
- package/dist/shared/src/audit-chain.d.ts +1 -80
- package/dist/shared/src/audit-chain.js +1 -261
- package/dist/shared/src/audit-chain.js.map +1 -1
- package/dist/shared/src/audit.d.ts +1 -121
- package/dist/shared/src/audit.js +1 -321
- package/dist/shared/src/audit.js.map +1 -1
- package/dist/shared/src/constants.d.ts +1 -150
- package/dist/shared/src/constants.js +1 -211
- package/dist/shared/src/constants.js.map +1 -1
- package/dist/shared/src/database.d.ts +1 -6
- package/dist/shared/src/database.js +1 -15
- package/dist/shared/src/database.js.map +1 -1
- package/dist/shared/src/errors.d.ts +1 -46
- package/dist/shared/src/errors.js +1 -68
- package/dist/shared/src/errors.js.map +1 -1
- package/dist/shared/src/file-lock.d.ts +1 -93
- package/dist/shared/src/file-lock.js +1 -239
- package/dist/shared/src/file-lock.js.map +1 -1
- package/dist/shared/src/fs.d.ts +1 -9
- package/dist/shared/src/fs.js +1 -53
- package/dist/shared/src/fs.js.map +1 -1
- package/dist/shared/src/index.d.ts +2 -31
- package/dist/shared/src/index.js +2 -31
- package/dist/shared/src/index.js.map +1 -1
- package/dist/shared/src/job-queue.d.ts +1 -76
- package/dist/shared/src/job-queue.js +1 -199
- package/dist/shared/src/job-queue.js.map +1 -1
- package/dist/shared/src/lock.d.ts +1 -82
- package/dist/shared/src/lock.js +1 -158
- package/dist/shared/src/lock.js.map +1 -1
- package/dist/shared/src/logger.d.ts +1 -31
- package/dist/shared/src/logger.js +1 -152
- package/dist/shared/src/logger.js.map +1 -1
- package/dist/shared/src/memory-prune.d.ts +1 -18
- package/dist/shared/src/memory-prune.js +1 -47
- package/dist/shared/src/memory-prune.js.map +1 -1
- package/dist/shared/src/migrations.d.ts +1 -69
- package/dist/shared/src/migrations.js +1 -393
- package/dist/shared/src/migrations.js.map +1 -1
- package/dist/shared/src/modules/agent/agent-identity.d.ts +34 -0
- package/dist/shared/src/modules/agent/agent-identity.js +77 -0
- package/dist/shared/src/modules/agent/agent-identity.js.map +1 -0
- package/dist/shared/src/modules/agent/api-catalog.d.ts +57 -0
- package/dist/shared/src/modules/agent/api-catalog.js +254 -0
- package/dist/shared/src/modules/agent/api-catalog.js.map +1 -0
- package/dist/shared/src/modules/agent/index.d.ts +3 -0
- package/dist/shared/src/modules/agent/index.js +4 -0
- package/dist/shared/src/modules/agent/index.js.map +1 -0
- package/dist/shared/src/modules/agent/tokenizer.d.ts +54 -0
- package/dist/shared/src/modules/agent/tokenizer.js +272 -0
- package/dist/shared/src/modules/agent/tokenizer.js.map +1 -0
- package/dist/shared/src/modules/concurrency/file-lock.d.ts +93 -0
- package/dist/shared/src/modules/concurrency/file-lock.js +240 -0
- package/dist/shared/src/modules/concurrency/file-lock.js.map +1 -0
- package/dist/shared/src/modules/concurrency/index.d.ts +6 -0
- package/dist/shared/src/modules/concurrency/index.js +7 -0
- package/dist/shared/src/modules/concurrency/index.js.map +1 -0
- package/dist/shared/src/modules/concurrency/job-queue.d.ts +76 -0
- package/dist/shared/src/modules/concurrency/job-queue.js +200 -0
- package/dist/shared/src/modules/concurrency/job-queue.js.map +1 -0
- package/dist/shared/src/modules/concurrency/lock.d.ts +82 -0
- package/dist/shared/src/modules/concurrency/lock.js +159 -0
- package/dist/shared/src/modules/concurrency/lock.js.map +1 -0
- package/dist/shared/src/modules/concurrency/resilience.d.ts +84 -0
- package/dist/shared/src/modules/concurrency/resilience.js +217 -0
- package/dist/shared/src/modules/concurrency/resilience.js.map +1 -0
- package/dist/shared/src/modules/concurrency/worker-pool.d.ts +52 -0
- package/dist/shared/src/modules/concurrency/worker-pool.js +229 -0
- package/dist/shared/src/modules/concurrency/worker-pool.js.map +1 -0
- package/dist/shared/src/modules/concurrency/worker-thread.d.ts +21 -0
- package/dist/shared/src/modules/concurrency/worker-thread.js +67 -0
- package/dist/shared/src/modules/concurrency/worker-thread.js.map +1 -0
- package/dist/shared/src/modules/index.d.ts +14 -0
- package/dist/shared/src/modules/index.js +15 -0
- package/dist/shared/src/modules/index.js.map +1 -0
- package/dist/shared/src/modules/observability/audit-chain.d.ts +80 -0
- package/dist/shared/src/modules/observability/audit-chain.js +262 -0
- package/dist/shared/src/modules/observability/audit-chain.js.map +1 -0
- package/dist/shared/src/modules/observability/audit.d.ts +121 -0
- package/dist/shared/src/modules/observability/audit.js +322 -0
- package/dist/shared/src/modules/observability/audit.js.map +1 -0
- package/dist/shared/src/modules/observability/index.d.ts +4 -0
- package/dist/shared/src/modules/observability/index.js +5 -0
- package/dist/shared/src/modules/observability/index.js.map +1 -0
- package/dist/shared/src/modules/observability/logger.d.ts +31 -0
- package/dist/shared/src/modules/observability/logger.js +153 -0
- package/dist/shared/src/modules/observability/logger.js.map +1 -0
- package/dist/shared/src/modules/observability/otel.d.ts +39 -0
- package/dist/shared/src/modules/observability/otel.js +93 -0
- package/dist/shared/src/modules/observability/otel.js.map +1 -0
- package/dist/shared/src/modules/primitives/constants.d.ts +150 -0
- package/dist/shared/src/modules/primitives/constants.js +212 -0
- package/dist/shared/src/modules/primitives/constants.js.map +1 -0
- package/dist/shared/src/modules/primitives/errors.d.ts +46 -0
- package/dist/shared/src/modules/primitives/errors.js +69 -0
- package/dist/shared/src/modules/primitives/errors.js.map +1 -0
- package/dist/shared/src/modules/primitives/fs.d.ts +9 -0
- package/dist/shared/src/modules/primitives/fs.js +54 -0
- package/dist/shared/src/modules/primitives/fs.js.map +1 -0
- package/dist/shared/src/modules/primitives/index.d.ts +7 -0
- package/dist/shared/src/modules/primitives/index.js +8 -0
- package/dist/shared/src/modules/primitives/index.js.map +1 -0
- package/dist/shared/src/modules/primitives/outbound-http.d.ts +32 -0
- package/dist/shared/src/modules/primitives/outbound-http.js +88 -0
- package/dist/shared/src/modules/primitives/outbound-http.js.map +1 -0
- package/dist/shared/src/modules/primitives/string.d.ts +1 -0
- package/dist/shared/src/modules/primitives/string.js +30 -0
- package/dist/shared/src/modules/primitives/string.js.map +1 -0
- package/dist/shared/src/modules/primitives/time.d.ts +5 -0
- package/dist/shared/src/modules/primitives/time.js +35 -0
- package/dist/shared/src/modules/primitives/time.js.map +1 -0
- package/dist/shared/src/modules/primitives/types.d.ts +27 -0
- package/dist/shared/src/modules/primitives/types.js +17 -0
- package/dist/shared/src/modules/primitives/types.js.map +1 -0
- package/dist/shared/src/modules/sandbox/index.d.ts +3 -0
- package/dist/shared/src/modules/sandbox/index.js +4 -0
- package/dist/shared/src/modules/sandbox/index.js.map +1 -0
- package/dist/shared/src/modules/sandbox/sandbox-fs.d.ts +28 -0
- package/dist/shared/src/modules/sandbox/sandbox-fs.js +143 -0
- package/dist/shared/src/modules/sandbox/sandbox-fs.js.map +1 -0
- package/dist/shared/src/modules/sandbox/sandbox-runtime.d.ts +78 -0
- package/dist/shared/src/modules/sandbox/sandbox-runtime.js +282 -0
- package/dist/shared/src/modules/sandbox/sandbox-runtime.js.map +1 -0
- package/dist/shared/src/modules/sandbox/sandbox.d.ts +54 -0
- package/dist/shared/src/modules/sandbox/sandbox.js +179 -0
- package/dist/shared/src/modules/sandbox/sandbox.js.map +1 -0
- package/dist/shared/src/modules/security/index.d.ts +5 -0
- package/dist/shared/src/modules/security/index.js +6 -0
- package/dist/shared/src/modules/security/index.js.map +1 -0
- package/dist/shared/src/modules/security/pii.d.ts +70 -0
- package/dist/shared/src/modules/security/pii.js +276 -0
- package/dist/shared/src/modules/security/pii.js.map +1 -0
- package/dist/shared/src/modules/security/policy-gate.d.ts +42 -0
- package/dist/shared/src/modules/security/policy-gate.js +172 -0
- package/dist/shared/src/modules/security/policy-gate.js.map +1 -0
- package/dist/shared/src/modules/security/retention.d.ts +68 -0
- package/dist/shared/src/modules/security/retention.js +218 -0
- package/dist/shared/src/modules/security/retention.js.map +1 -0
- package/dist/shared/src/modules/security/secrets.d.ts +99 -0
- package/dist/shared/src/modules/security/secrets.js +371 -0
- package/dist/shared/src/modules/security/secrets.js.map +1 -0
- package/dist/shared/src/modules/security/tls.d.ts +87 -0
- package/dist/shared/src/modules/security/tls.js +154 -0
- package/dist/shared/src/modules/security/tls.js.map +1 -0
- package/dist/shared/src/modules/storage/database.d.ts +6 -0
- package/dist/shared/src/modules/storage/database.js +16 -0
- package/dist/shared/src/modules/storage/database.js.map +1 -0
- package/dist/shared/src/modules/storage/index.d.ts +4 -0
- package/dist/shared/src/modules/storage/index.js +5 -0
- package/dist/shared/src/modules/storage/index.js.map +1 -0
- package/dist/shared/src/modules/storage/memory-prune.d.ts +18 -0
- package/dist/shared/src/modules/storage/memory-prune.js +48 -0
- package/dist/shared/src/modules/storage/memory-prune.js.map +1 -0
- package/dist/shared/src/modules/storage/migrations.d.ts +69 -0
- package/dist/shared/src/modules/storage/migrations.js +394 -0
- package/dist/shared/src/modules/storage/migrations.js.map +1 -0
- package/dist/shared/src/modules/storage/storage.d.ts +341 -0
- package/dist/shared/src/modules/storage/storage.js +1004 -0
- package/dist/shared/src/modules/storage/storage.js.map +1 -0
- package/dist/shared/src/otel.d.ts +1 -39
- package/dist/shared/src/otel.js +1 -92
- package/dist/shared/src/otel.js.map +1 -1
- package/dist/shared/src/outbound-http.d.ts +1 -32
- package/dist/shared/src/outbound-http.js +1 -87
- package/dist/shared/src/outbound-http.js.map +1 -1
- package/dist/shared/src/pii.d.ts +1 -70
- package/dist/shared/src/pii.js +1 -275
- package/dist/shared/src/pii.js.map +1 -1
- package/dist/shared/src/policy-gate.d.ts +1 -42
- package/dist/shared/src/policy-gate.js +1 -171
- package/dist/shared/src/policy-gate.js.map +1 -1
- package/dist/shared/src/resilience.d.ts +1 -84
- package/dist/shared/src/resilience.js +1 -216
- package/dist/shared/src/resilience.js.map +1 -1
- package/dist/shared/src/retention.d.ts +1 -68
- package/dist/shared/src/retention.js +1 -217
- package/dist/shared/src/retention.js.map +1 -1
- package/dist/shared/src/sandbox-fs.d.ts +1 -28
- package/dist/shared/src/sandbox-fs.js +1 -142
- package/dist/shared/src/sandbox-fs.js.map +1 -1
- package/dist/shared/src/sandbox-runtime.d.ts +1 -78
- package/dist/shared/src/sandbox-runtime.js +1 -281
- package/dist/shared/src/sandbox-runtime.js.map +1 -1
- package/dist/shared/src/sandbox.d.ts +1 -54
- package/dist/shared/src/sandbox.js +1 -178
- package/dist/shared/src/sandbox.js.map +1 -1
- package/dist/shared/src/secrets.d.ts +1 -99
- package/dist/shared/src/secrets.js +1 -370
- package/dist/shared/src/secrets.js.map +1 -1
- package/dist/shared/src/storage.d.ts +1 -341
- package/dist/shared/src/storage.js +1 -1003
- package/dist/shared/src/storage.js.map +1 -1
- package/dist/shared/src/string.d.ts +1 -1
- package/dist/shared/src/string.js +1 -29
- package/dist/shared/src/string.js.map +1 -1
- package/dist/shared/src/time.d.ts +1 -5
- package/dist/shared/src/time.js +1 -34
- package/dist/shared/src/time.js.map +1 -1
- package/dist/shared/src/tls.d.ts +1 -87
- package/dist/shared/src/tls.js +1 -153
- package/dist/shared/src/tls.js.map +1 -1
- package/dist/shared/src/tokenizer.d.ts +1 -54
- package/dist/shared/src/tokenizer.js +1 -271
- package/dist/shared/src/tokenizer.js.map +1 -1
- package/dist/shared/src/types.d.ts +1 -27
- package/dist/shared/src/types.js +1 -16
- package/dist/shared/src/types.js.map +1 -1
- package/dist/shared/src/worker-pool.d.ts +1 -52
- package/dist/shared/src/worker-pool.js +1 -228
- package/dist/shared/src/worker-pool.js.map +1 -1
- package/dist/shared/src/worker-thread.d.ts +1 -21
- package/dist/shared/src/worker-thread.js +1 -66
- package/dist/shared/src/worker-thread.js.map +1 -1
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../../../../src/cli/commands/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,GAAG,EAAE,MAAM,2BAA2B,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AAEpC;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAc;IAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC;IAErC,QAAQ,UAAU,EAAE,CAAC;QACjB,KAAK,OAAO;YACR,MAAM,cAAc,EAAE,CAAC;YACvB,MAAM;QACV,KAAK,SAAS;YACV,MAAM,gBAAgB,EAAE,CAAC;YACzB,MAAM;QACV,KAAK,QAAQ;YACT,MAAM,cAAc,EAAE,CAAC;YACvB,MAAM;QACV,KAAK,MAAM,CAAC;QACZ;YACI,WAAW,EAAE,CAAC;YACd,MAAM;IACd,CAAC;AACL,CAAC;AAED,KAAK,UAAU,cAAc;IACzB,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,+BAA+B,CAAC,CAAC;IAEpD,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAElC,6EAA6E;IAC7E,IAAI,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC3D,IAAI,MAAM,GAAG,MAAM,CAAC;IAEpB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1B,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,qBAAqB,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC;QACzF,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAC9B,OAAO,GAAG,YAAY,CAAC;QAC3B,CAAC;aAAM,CAAC;YACJ,6DAA6D;YAC7D,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,gCAAgC,CAAC,CAAC;YACzE,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzB,OAAO,GAAG,OAAO,CAAC;gBAClB,MAAM,GAAG,KAAK,CAAC;YACnB,CAAC;iBAAM,CAAC;gBACJ,MAAM,GAAG,KAAK,CAAC;gBACf,OAAO,GAAG,YAAY,CAAC;YAC3B,CAAC;QACL,CAAC;IACL,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,KAAK,KAAK;QACzB,CAAC,CAAC,CAAC,OAAO,KAAK,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACtE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAEhB,EAAE,CAAC,OAAO,CAAC,0BAA0B,GAAG,MAAM,GAAG,KAAK,CAAC,CAAC;IACxD,MAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IAEpE,
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../../../../src/cli/commands/mcp.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,26 +14,26 @@ export declare const HermesMessageSchema: z.ZodObject<{
|
|
|
14
14
|
requiresApproval: z.ZodOptional<z.ZodBoolean>;
|
|
15
15
|
dependencies: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
16
16
|
}, "strip", z.ZodTypeAny, {
|
|
17
|
-
content: string;
|
|
18
|
-
traceId: string;
|
|
19
17
|
to: string;
|
|
20
18
|
from: string;
|
|
21
|
-
|
|
19
|
+
traceId: string;
|
|
20
|
+
status: "PENDING" | "PROCESSED" | "WAITING" | "APPROVED";
|
|
22
21
|
category: "DELEGATION" | "ALERT" | "ACTION" | "SUBTASK" | "REPLY";
|
|
23
22
|
timestamp: string;
|
|
23
|
+
content: string;
|
|
24
24
|
requiresApproval?: boolean | undefined;
|
|
25
25
|
parentId?: string | undefined;
|
|
26
26
|
priority?: "LOW" | "HIGH" | "NORMAL" | undefined;
|
|
27
27
|
action?: string | undefined;
|
|
28
28
|
dependencies?: string[] | undefined;
|
|
29
29
|
}, {
|
|
30
|
-
content: string;
|
|
31
|
-
traceId: string;
|
|
32
30
|
to: string;
|
|
33
31
|
from: string;
|
|
34
|
-
|
|
32
|
+
traceId: string;
|
|
33
|
+
status: "PENDING" | "PROCESSED" | "WAITING" | "APPROVED";
|
|
35
34
|
category: "DELEGATION" | "ALERT" | "ACTION" | "SUBTASK" | "REPLY";
|
|
36
35
|
timestamp: string;
|
|
36
|
+
content: string;
|
|
37
37
|
requiresApproval?: boolean | undefined;
|
|
38
38
|
parentId?: string | undefined;
|
|
39
39
|
priority?: "LOW" | "HIGH" | "NORMAL" | undefined;
|
|
@@ -384,7 +384,7 @@ async function main() {
|
|
|
384
384
|
}
|
|
385
385
|
function showHelp() {
|
|
386
386
|
process.stdout.write(`
|
|
387
|
-
[ATABEY] v${getPackageVersion()} — AI
|
|
387
|
+
[ATABEY] v${getPackageVersion()} — Local AI Control Plane & Discipline Layer
|
|
388
388
|
|
|
389
389
|
Usage:
|
|
390
390
|
atabey <command> [options]
|
|
@@ -1,34 +1 @@
|
|
|
1
|
-
|
|
2
|
-
* Agent Identity — cryptographically signed agent tokens.
|
|
3
|
-
*
|
|
4
|
-
* Problem: `ATABEY_ACTIVE_AGENT` is a plain env var, so any tool/subprocess can
|
|
5
|
-
* impersonate `@manager` or `@security`. When `ATABEY_AGENT_SECRET` is set,
|
|
6
|
-
* Atabey accepts an HMAC-signed `ATABEY_AGENT_TOKEN` and verifies it
|
|
7
|
-
* (fail-closed on tampering/expiry). Set `ATABEY_AGENT_IDENTITY_REQUIRED=true`
|
|
8
|
-
* to refuse plain-env identity entirely.
|
|
9
|
-
*
|
|
10
|
-
* Token format: `${agent}.${issuedAt}.${expiresAt}.${hmacSha256Base64url}`
|
|
11
|
-
*/
|
|
12
|
-
export interface AgentIdentity {
|
|
13
|
-
agent: string;
|
|
14
|
-
issuedAt: number;
|
|
15
|
-
expiresAt: number;
|
|
16
|
-
}
|
|
17
|
-
export interface AgentTokenResult {
|
|
18
|
-
valid: boolean;
|
|
19
|
-
agent?: string;
|
|
20
|
-
reason?: string;
|
|
21
|
-
}
|
|
22
|
-
/** True when agent-token verification is mandatory (plain env rejected). */
|
|
23
|
-
export declare function isAgentIdentityEnforced(): boolean;
|
|
24
|
-
/** Sign an agent identity into a compact token. */
|
|
25
|
-
export declare function signAgentToken(agent: string, options?: {
|
|
26
|
-
ttlMs?: number;
|
|
27
|
-
key?: string | Buffer;
|
|
28
|
-
}): string;
|
|
29
|
-
/** Verify an agent token (signature + expiry). */
|
|
30
|
-
export declare function verifyAgentToken(token: string, options?: {
|
|
31
|
-
key?: string | Buffer;
|
|
32
|
-
}): AgentTokenResult;
|
|
33
|
-
/** Decode a token's identity without verification (for diagnostics only). */
|
|
34
|
-
export declare function decodeAgentToken(token: string): AgentIdentity | null;
|
|
1
|
+
export * from "./modules/agent/agent-identity.js";
|
|
@@ -1,77 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
* Agent Identity — cryptographically signed agent tokens.
|
|
3
|
-
*
|
|
4
|
-
* Problem: `ATABEY_ACTIVE_AGENT` is a plain env var, so any tool/subprocess can
|
|
5
|
-
* impersonate `@manager` or `@security`. When `ATABEY_AGENT_SECRET` is set,
|
|
6
|
-
* Atabey accepts an HMAC-signed `ATABEY_AGENT_TOKEN` and verifies it
|
|
7
|
-
* (fail-closed on tampering/expiry). Set `ATABEY_AGENT_IDENTITY_REQUIRED=true`
|
|
8
|
-
* to refuse plain-env identity entirely.
|
|
9
|
-
*
|
|
10
|
-
* Token format: `${agent}.${issuedAt}.${expiresAt}.${hmacSha256Base64url}`
|
|
11
|
-
*/
|
|
12
|
-
import crypto from "crypto";
|
|
13
|
-
import { resolveAuditChainKey } from "./audit-chain.js";
|
|
14
|
-
function resolveKey(explicit) {
|
|
15
|
-
if (explicit) {
|
|
16
|
-
return Buffer.isBuffer(explicit) ? explicit : crypto.createHash("sha256").update(explicit, "utf8").digest();
|
|
17
|
-
}
|
|
18
|
-
const envSecret = process.env.ATABEY_AGENT_SECRET;
|
|
19
|
-
if (envSecret && envSecret.trim()) {
|
|
20
|
-
return crypto.createHash("sha256").update(envSecret.trim(), "utf8").digest();
|
|
21
|
-
}
|
|
22
|
-
return resolveAuditChainKey();
|
|
23
|
-
}
|
|
24
|
-
function timingSafeEqual(a, b) {
|
|
25
|
-
const ba = Buffer.from(a);
|
|
26
|
-
const bb = Buffer.from(b);
|
|
27
|
-
if (ba.length !== bb.length)
|
|
28
|
-
return false;
|
|
29
|
-
return crypto.timingSafeEqual(ba, bb);
|
|
30
|
-
}
|
|
31
|
-
/** True when agent-token verification is mandatory (plain env rejected). */
|
|
32
|
-
export function isAgentIdentityEnforced() {
|
|
33
|
-
return process.env.ATABEY_AGENT_IDENTITY_REQUIRED === "true";
|
|
34
|
-
}
|
|
35
|
-
/** Sign an agent identity into a compact token. */
|
|
36
|
-
export function signAgentToken(agent, options = {}) {
|
|
37
|
-
const key = resolveKey(options.key);
|
|
38
|
-
if (!key) {
|
|
39
|
-
throw new Error("[AGENT_IDENTITY] No signing key. Set ATABEY_AGENT_SECRET.");
|
|
40
|
-
}
|
|
41
|
-
const name = agent.replace(/^@/, "");
|
|
42
|
-
const issuedAt = Date.now();
|
|
43
|
-
const expiresAt = issuedAt + (options.ttlMs ?? 60 * 60 * 1000);
|
|
44
|
-
const payload = `${name}.${issuedAt}.${expiresAt}`;
|
|
45
|
-
const sig = crypto.createHmac("sha256", key).update(payload).digest("base64url");
|
|
46
|
-
return `${payload}.${sig}`;
|
|
47
|
-
}
|
|
48
|
-
/** Verify an agent token (signature + expiry). */
|
|
49
|
-
export function verifyAgentToken(token, options = {}) {
|
|
50
|
-
const key = resolveKey(options.key);
|
|
51
|
-
if (!key)
|
|
52
|
-
return { valid: false, reason: "No signing key configured." };
|
|
53
|
-
if (!token || typeof token !== "string")
|
|
54
|
-
return { valid: false, reason: "Empty token." };
|
|
55
|
-
const parts = token.split(".");
|
|
56
|
-
if (parts.length !== 4)
|
|
57
|
-
return { valid: false, reason: "Malformed token." };
|
|
58
|
-
const [name, issuedAt, expiresAt, sig] = parts;
|
|
59
|
-
const payload = `${name}.${issuedAt}.${expiresAt}`;
|
|
60
|
-
const expected = crypto.createHmac("sha256", key).update(payload).digest("base64url");
|
|
61
|
-
if (!timingSafeEqual(sig, expected))
|
|
62
|
-
return { valid: false, reason: "Signature mismatch." };
|
|
63
|
-
const exp = Number(expiresAt);
|
|
64
|
-
if (!Number.isFinite(exp))
|
|
65
|
-
return { valid: false, reason: "Invalid expiry." };
|
|
66
|
-
if (Date.now() > exp)
|
|
67
|
-
return { valid: false, reason: "Token expired." };
|
|
68
|
-
return { valid: true, agent: `@${name}` };
|
|
69
|
-
}
|
|
70
|
-
/** Decode a token's identity without verification (for diagnostics only). */
|
|
71
|
-
export function decodeAgentToken(token) {
|
|
72
|
-
const parts = token.split(".");
|
|
73
|
-
if (parts.length !== 4)
|
|
74
|
-
return null;
|
|
75
|
-
return { agent: `@${parts[0]}`, issuedAt: Number(parts[1]), expiresAt: Number(parts[2]) };
|
|
76
|
-
}
|
|
1
|
+
export * from "./modules/agent/agent-identity.js";
|
|
77
2
|
//# sourceMappingURL=agent-identity.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-identity.js","sourceRoot":"","sources":["../../../../shared/src/agent-identity.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"agent-identity.js","sourceRoot":"","sources":["../../../../shared/src/agent-identity.ts"],"names":[],"mappings":"AAAA,cAAc,mCAAmC,CAAC"}
|
|
@@ -1,57 +1 @@
|
|
|
1
|
-
|
|
2
|
-
* API Catalog — endpoint registry, route/OpenAPI scanner, and drift detection.
|
|
3
|
-
*
|
|
4
|
-
* Purpose: let frontend/mobile agents integrate against the backend API using
|
|
5
|
-
* a compact JSON catalog instead of reading large route source files (token
|
|
6
|
-
* savings + zero context pollution).
|
|
7
|
-
*
|
|
8
|
-
* The scanner is HEURISTIC (regex/AST-lite) and covers:
|
|
9
|
-
* - Express / Fastify: app|router|server|fastify.get('/path', ...)
|
|
10
|
-
* - Fastify route(): fastify.route({ method, url, ... })
|
|
11
|
-
* - NestJS decorators: @Get('path') / @Post('path')
|
|
12
|
-
* - OpenAPI v3 / Swagger v2 JSON specs
|
|
13
|
-
*/
|
|
14
|
-
export interface ApiEndpoint {
|
|
15
|
-
method: string;
|
|
16
|
-
path: string;
|
|
17
|
-
tag?: string;
|
|
18
|
-
summary?: string;
|
|
19
|
-
authRequired: boolean;
|
|
20
|
-
requestSchema?: string;
|
|
21
|
-
responseSchema?: string;
|
|
22
|
-
source?: string;
|
|
23
|
-
updatedAt: string;
|
|
24
|
-
}
|
|
25
|
-
export interface ApiCatalog {
|
|
26
|
-
version: 1;
|
|
27
|
-
generatedAt: string;
|
|
28
|
-
endpoints: ApiEndpoint[];
|
|
29
|
-
}
|
|
30
|
-
export interface ApiDrift {
|
|
31
|
-
added: ApiEndpoint[];
|
|
32
|
-
removed: ApiEndpoint[];
|
|
33
|
-
changed: Array<{
|
|
34
|
-
previous: ApiEndpoint;
|
|
35
|
-
current: ApiEndpoint;
|
|
36
|
-
}>;
|
|
37
|
-
}
|
|
38
|
-
export declare function endpointKey(e: {
|
|
39
|
-
method: string;
|
|
40
|
-
path: string;
|
|
41
|
-
}): string;
|
|
42
|
-
export declare function normalizePath(p: string): string;
|
|
43
|
-
/** Parse an OpenAPI v3 or Swagger v2 spec object into endpoints. */
|
|
44
|
-
export declare function parseOpenApiSpec(spec: unknown): ApiEndpoint[];
|
|
45
|
-
/**
|
|
46
|
-
* Walk a project tree and collect endpoints from route source files and any
|
|
47
|
-
* OpenAPI/Swagger JSON specs.
|
|
48
|
-
*/
|
|
49
|
-
export declare function scanProjectForEndpoints(rootDir: string, options?: {
|
|
50
|
-
maxFiles?: number;
|
|
51
|
-
}): ApiEndpoint[];
|
|
52
|
-
export declare function dedupe(endpoints: ApiEndpoint[]): ApiEndpoint[];
|
|
53
|
-
/**
|
|
54
|
-
* Diff a previous catalog against a freshly scanned one.
|
|
55
|
-
*/
|
|
56
|
-
export declare function detectApiDrift(previous: ApiEndpoint[], current: ApiEndpoint[]): ApiDrift;
|
|
57
|
-
export declare function isApiDriftClean(drift: ApiDrift): boolean;
|
|
1
|
+
export * from "./modules/agent/api-catalog.js";
|
|
@@ -1,254 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
* API Catalog — endpoint registry, route/OpenAPI scanner, and drift detection.
|
|
3
|
-
*
|
|
4
|
-
* Purpose: let frontend/mobile agents integrate against the backend API using
|
|
5
|
-
* a compact JSON catalog instead of reading large route source files (token
|
|
6
|
-
* savings + zero context pollution).
|
|
7
|
-
*
|
|
8
|
-
* The scanner is HEURISTIC (regex/AST-lite) and covers:
|
|
9
|
-
* - Express / Fastify: app|router|server|fastify.get('/path', ...)
|
|
10
|
-
* - Fastify route(): fastify.route({ method, url, ... })
|
|
11
|
-
* - NestJS decorators: @Get('path') / @Post('path')
|
|
12
|
-
* - OpenAPI v3 / Swagger v2 JSON specs
|
|
13
|
-
*/
|
|
14
|
-
import fs from "fs";
|
|
15
|
-
import path from "path";
|
|
16
|
-
const HTTP_METHODS = ["get", "post", "put", "patch", "delete", "options", "head"];
|
|
17
|
-
const ROUTE_EXTENSIONS = new Set([".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs"]);
|
|
18
|
-
const SKIP_DIRS = new Set(["node_modules", "dist", "build", ".git", "coverage", ".atabey", ".next"]);
|
|
19
|
-
export function endpointKey(e) {
|
|
20
|
-
return `${e.method.toUpperCase()} ${normalizePath(e.path)}`;
|
|
21
|
-
}
|
|
22
|
-
export function normalizePath(p) {
|
|
23
|
-
if (!p)
|
|
24
|
-
return "/";
|
|
25
|
-
let out = p.trim();
|
|
26
|
-
if (!out.startsWith("/"))
|
|
27
|
-
out = `/${out}`;
|
|
28
|
-
// Collapse :param and {param} to a stable placeholder for drift comparison.
|
|
29
|
-
out = out.replace(/\{[^}]+\}/g, ":param").replace(/:[A-Za-z0-9_]+/g, ":param");
|
|
30
|
-
out = out.replace(/\/+$/, "");
|
|
31
|
-
return out || "/";
|
|
32
|
-
}
|
|
33
|
-
function defaultTag(p) {
|
|
34
|
-
const seg = p.split("/").filter(Boolean);
|
|
35
|
-
return seg[0] || "root";
|
|
36
|
-
}
|
|
37
|
-
/** Extract a route statement plus a few following lines for schema hints. */
|
|
38
|
-
function scanRouteSource(filePath, content) {
|
|
39
|
-
const now = new Date().toISOString();
|
|
40
|
-
const lines = content.split("\n");
|
|
41
|
-
const found = new Map();
|
|
42
|
-
const add = (method, rawPath, schemaHint, authHint) => {
|
|
43
|
-
if (!rawPath || rawPath === "*")
|
|
44
|
-
return;
|
|
45
|
-
const m = method.toUpperCase();
|
|
46
|
-
const p = rawPath;
|
|
47
|
-
const key = endpointKey({ method: m, path: p });
|
|
48
|
-
if (found.has(key))
|
|
49
|
-
return;
|
|
50
|
-
const schemaMatch = /(?:schema|body|response)\s*:\s*([A-Za-z0-9_.]+)/.exec(schemaHint);
|
|
51
|
-
found.set(key, {
|
|
52
|
-
method: m,
|
|
53
|
-
path: p.startsWith("/") ? p : `/${p}`,
|
|
54
|
-
tag: defaultTag(p),
|
|
55
|
-
authRequired: authHint,
|
|
56
|
-
requestSchema: schemaMatch?.[1],
|
|
57
|
-
source: filePath,
|
|
58
|
-
updatedAt: now,
|
|
59
|
-
});
|
|
60
|
-
};
|
|
61
|
-
const isRouteLine = (l) => /\.(get|post|put|patch|delete|options|head)\s*\(/.test(l) ||
|
|
62
|
-
/@(Get|Post|Put|Patch|Delete|Options|Head)\s*\(/.test(l) ||
|
|
63
|
-
/\broute\s*\(/.test(l);
|
|
64
|
-
for (let i = 0; i < lines.length; i++) {
|
|
65
|
-
const line = lines[i];
|
|
66
|
-
// Statement-bounded window: stop at the next route line or statement end
|
|
67
|
-
// so schema/auth hints cannot bleed into the following route.
|
|
68
|
-
let window = line;
|
|
69
|
-
for (let j = i + 1; j < Math.min(i + 12, lines.length); j++) {
|
|
70
|
-
if (isRouteLine(lines[j]))
|
|
71
|
-
break;
|
|
72
|
-
window += `\n${lines[j]}`;
|
|
73
|
-
if (/;\s*$/.test(lines[j]))
|
|
74
|
-
break;
|
|
75
|
-
}
|
|
76
|
-
const authHint = /\b(authenticate|authGuard|verifyToken|preHandler\s*:\s*\[?\s*auth|requireAuth|jwt)\b/i.test(window);
|
|
77
|
-
// Express / Fastify shorthand: app.get('/x', ...) / router.post("/x", ...)
|
|
78
|
-
const short = /\.(get|post|put|patch|delete|options|head)\s*\(\s*[`'"]([^`'"]+)[`'"]/gi;
|
|
79
|
-
let m;
|
|
80
|
-
while ((m = short.exec(line)) !== null) {
|
|
81
|
-
add(m[1], m[2], window, authHint);
|
|
82
|
-
}
|
|
83
|
-
// Fastify route({ method: 'GET', url: '/x' }) — method/url may be in either order.
|
|
84
|
-
if (/\broute\s*\(/.test(line) || /\burl\s*:/.test(line)) {
|
|
85
|
-
const methodM = /method\s*:\s*[`'"](\w+)[`'"]/i.exec(window);
|
|
86
|
-
const urlM = /url\s*:\s*[`'"]([^`'"]+)[`'"]/i.exec(window);
|
|
87
|
-
if (methodM && urlM)
|
|
88
|
-
add(methodM[1], urlM[1], window, authHint);
|
|
89
|
-
}
|
|
90
|
-
// NestJS decorators: @Get('path') @Post()
|
|
91
|
-
const dec = /@(Get|Post|Put|Patch|Delete|Options|Head)\s*\(\s*[`'"]?([^`'")]*)[`'"]?\s*\)/g;
|
|
92
|
-
while ((m = dec.exec(line)) !== null) {
|
|
93
|
-
add(m[1], m[2] || "/", window, authHint);
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
return [...found.values()];
|
|
97
|
-
}
|
|
98
|
-
/** Parse an OpenAPI v3 or Swagger v2 spec object into endpoints. */
|
|
99
|
-
export function parseOpenApiSpec(spec) {
|
|
100
|
-
const now = new Date().toISOString();
|
|
101
|
-
const doc = spec;
|
|
102
|
-
const paths = doc?.["paths"];
|
|
103
|
-
if (!paths || typeof paths !== "object")
|
|
104
|
-
return [];
|
|
105
|
-
const out = [];
|
|
106
|
-
for (const [rawPath, item] of Object.entries(paths)) {
|
|
107
|
-
if (!item || typeof item !== "object")
|
|
108
|
-
continue;
|
|
109
|
-
for (const method of HTTP_METHODS) {
|
|
110
|
-
const op = item[method];
|
|
111
|
-
if (!op)
|
|
112
|
-
continue;
|
|
113
|
-
const tags = Array.isArray(op["tags"]) ? op["tags"] : [];
|
|
114
|
-
const security = op["security"];
|
|
115
|
-
const requestSchema = refName(op["requestBody"]?.["content"]?.["application/json"]) ??
|
|
116
|
-
refName(op["parameters"]);
|
|
117
|
-
const responses = op["responses"];
|
|
118
|
-
const okResp = responses?.["200"] ?? responses?.["201"] ?? Object.values(responses || {})[0];
|
|
119
|
-
const responseSchema = refName((okResp?.["content"]?.["application/json"]) ?? okResp?.["schema"]);
|
|
120
|
-
out.push({
|
|
121
|
-
method: method.toUpperCase(),
|
|
122
|
-
path: rawPath,
|
|
123
|
-
tag: tags[0] || defaultTag(rawPath),
|
|
124
|
-
summary: typeof op["summary"] === "string" ? op["summary"] : undefined,
|
|
125
|
-
authRequired: Array.isArray(security) ? security.length > 0 : false,
|
|
126
|
-
requestSchema,
|
|
127
|
-
responseSchema,
|
|
128
|
-
source: "openapi",
|
|
129
|
-
updatedAt: now,
|
|
130
|
-
});
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
return out;
|
|
134
|
-
}
|
|
135
|
-
function refName(node) {
|
|
136
|
-
if (!node || typeof node !== "object")
|
|
137
|
-
return undefined;
|
|
138
|
-
const obj = node;
|
|
139
|
-
if (typeof obj["$ref"] === "string")
|
|
140
|
-
return obj["$ref"];
|
|
141
|
-
if (typeof obj["title"] === "string")
|
|
142
|
-
return obj["title"];
|
|
143
|
-
const schema = obj["schema"];
|
|
144
|
-
if (schema && typeof schema === "object") {
|
|
145
|
-
const s = schema;
|
|
146
|
-
if (typeof s["$ref"] === "string")
|
|
147
|
-
return s["$ref"];
|
|
148
|
-
if (typeof s["title"] === "string")
|
|
149
|
-
return s["title"];
|
|
150
|
-
}
|
|
151
|
-
return undefined;
|
|
152
|
-
}
|
|
153
|
-
/**
|
|
154
|
-
* Walk a project tree and collect endpoints from route source files and any
|
|
155
|
-
* OpenAPI/Swagger JSON specs.
|
|
156
|
-
*/
|
|
157
|
-
export function scanProjectForEndpoints(rootDir, options = {}) {
|
|
158
|
-
const maxFiles = options.maxFiles ?? 5000;
|
|
159
|
-
const results = [];
|
|
160
|
-
let visited = 0;
|
|
161
|
-
const walk = (dir) => {
|
|
162
|
-
if (visited >= maxFiles)
|
|
163
|
-
return;
|
|
164
|
-
let entries;
|
|
165
|
-
try {
|
|
166
|
-
entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
167
|
-
}
|
|
168
|
-
catch {
|
|
169
|
-
return;
|
|
170
|
-
}
|
|
171
|
-
for (const entry of entries) {
|
|
172
|
-
if (visited >= maxFiles)
|
|
173
|
-
return;
|
|
174
|
-
const full = path.join(dir, entry.name);
|
|
175
|
-
if (entry.isDirectory()) {
|
|
176
|
-
if (SKIP_DIRS.has(entry.name))
|
|
177
|
-
continue;
|
|
178
|
-
walk(full);
|
|
179
|
-
}
|
|
180
|
-
else if (entry.isFile()) {
|
|
181
|
-
visited++;
|
|
182
|
-
const ext = path.extname(entry.name).toLowerCase();
|
|
183
|
-
try {
|
|
184
|
-
if (ext === ".json" && /openapi|swagger/i.test(entry.name)) {
|
|
185
|
-
const spec = JSON.parse(fs.readFileSync(full, "utf8"));
|
|
186
|
-
results.push(...parseOpenApiSpec(spec));
|
|
187
|
-
}
|
|
188
|
-
else if (ROUTE_EXTENSIONS.has(ext)) {
|
|
189
|
-
const content = fs.readFileSync(full, "utf8");
|
|
190
|
-
if (/\.(get|post|put|patch|delete)\(|@(Get|Post|Put|Patch|Delete)\(|\broute\(/.test(content)) {
|
|
191
|
-
results.push(...scanRouteSource(path.relative(rootDir, full), content));
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
catch {
|
|
196
|
-
/* skip unreadable files */
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
};
|
|
201
|
-
walk(rootDir);
|
|
202
|
-
return dedupe(results);
|
|
203
|
-
}
|
|
204
|
-
export function dedupe(endpoints) {
|
|
205
|
-
const map = new Map();
|
|
206
|
-
for (const e of endpoints) {
|
|
207
|
-
const key = endpointKey(e);
|
|
208
|
-
const existing = map.get(key);
|
|
209
|
-
if (!existing) {
|
|
210
|
-
map.set(key, e);
|
|
211
|
-
}
|
|
212
|
-
else {
|
|
213
|
-
// Prefer the record with richer schema info.
|
|
214
|
-
map.set(key, {
|
|
215
|
-
...existing,
|
|
216
|
-
requestSchema: existing.requestSchema ?? e.requestSchema,
|
|
217
|
-
responseSchema: existing.responseSchema ?? e.responseSchema,
|
|
218
|
-
authRequired: existing.authRequired || e.authRequired,
|
|
219
|
-
});
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
return [...map.values()].sort((a, b) => endpointKey(a).localeCompare(endpointKey(b)));
|
|
223
|
-
}
|
|
224
|
-
/**
|
|
225
|
-
* Diff a previous catalog against a freshly scanned one.
|
|
226
|
-
*/
|
|
227
|
-
export function detectApiDrift(previous, current) {
|
|
228
|
-
const prevMap = new Map(previous.map((e) => [endpointKey(e), e]));
|
|
229
|
-
const curMap = new Map(current.map((e) => [endpointKey(e), e]));
|
|
230
|
-
const added = [];
|
|
231
|
-
const removed = [];
|
|
232
|
-
const changed = [];
|
|
233
|
-
for (const [key, cur] of curMap) {
|
|
234
|
-
const prev = prevMap.get(key);
|
|
235
|
-
if (!prev) {
|
|
236
|
-
added.push(cur);
|
|
237
|
-
continue;
|
|
238
|
-
}
|
|
239
|
-
if ((prev.requestSchema ?? "") !== (cur.requestSchema ?? "") ||
|
|
240
|
-
(prev.responseSchema ?? "") !== (cur.responseSchema ?? "") ||
|
|
241
|
-
prev.authRequired !== cur.authRequired) {
|
|
242
|
-
changed.push({ previous: prev, current: cur });
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
for (const [key, prev] of prevMap) {
|
|
246
|
-
if (!curMap.has(key))
|
|
247
|
-
removed.push(prev);
|
|
248
|
-
}
|
|
249
|
-
return { added, removed, changed };
|
|
250
|
-
}
|
|
251
|
-
export function isApiDriftClean(drift) {
|
|
252
|
-
return drift.added.length === 0 && drift.removed.length === 0 && drift.changed.length === 0;
|
|
253
|
-
}
|
|
1
|
+
export * from "./modules/agent/api-catalog.js";
|
|
254
2
|
//# sourceMappingURL=api-catalog.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-catalog.js","sourceRoot":"","sources":["../../../../shared/src/api-catalog.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"api-catalog.js","sourceRoot":"","sources":["../../../../shared/src/api-catalog.ts"],"names":[],"mappings":"AAAA,cAAc,gCAAgC,CAAC"}
|
|
@@ -1,80 +1 @@
|
|
|
1
|
-
|
|
2
|
-
* Tamper-evident audit hash chain helpers (Phase 1.4).
|
|
3
|
-
*
|
|
4
|
-
* Chain: each entry stores prev_hash (previous entry hash or GENESIS) and hash = SHA-256(payload).
|
|
5
|
-
* Any mutation of historical rows fails verification.
|
|
6
|
-
*/
|
|
7
|
-
export declare const AUDIT_CHAIN_GENESIS = "GENESIS";
|
|
8
|
-
export declare function resolveAuditChainKey(): Buffer | null;
|
|
9
|
-
/** Test helper — clears the memoized key. */
|
|
10
|
-
export declare function clearAuditChainKeyCache(): void;
|
|
11
|
-
/**
|
|
12
|
-
* Keyed digest for audit chain entries.
|
|
13
|
-
* Uses HMAC-SHA256 when a key is available; otherwise falls back to plain
|
|
14
|
-
* SHA-256 with a one-time warning (degraded, not recommended).
|
|
15
|
-
*/
|
|
16
|
-
export declare function chainDigest(payload: string): string;
|
|
17
|
-
/** @deprecated Use chainDigest() — unkeyed SHA-256 is not tamper-evident. */
|
|
18
|
-
export declare function sha256Hex(payload: string): string;
|
|
19
|
-
export interface ChainAnchor {
|
|
20
|
-
tip: string;
|
|
21
|
-
count: number;
|
|
22
|
-
updatedAt: string;
|
|
23
|
-
}
|
|
24
|
-
export declare function writeChainAnchor(name: string, tip: string, count: number): void;
|
|
25
|
-
export declare function readChainAnchor(name: string): ChainAnchor | null;
|
|
26
|
-
export declare function clearChainAnchor(name: string): void;
|
|
27
|
-
/**
|
|
28
|
-
* Canonical payload for agent execution logs (Storage.saveLog).
|
|
29
|
-
*
|
|
30
|
-
* v2: fields are length-delimited via JSON to remove `|`-join boundary
|
|
31
|
-
* ambiguity (previously agent="a|b" collided with action="b|c"). Changing this
|
|
32
|
-
* invalidates verification of rows written by older (v1) builds.
|
|
33
|
-
*/
|
|
34
|
-
export declare function buildAgentLogChainPayload(fields: {
|
|
35
|
-
prevHash: string;
|
|
36
|
-
agent: string;
|
|
37
|
-
action: string;
|
|
38
|
-
traceId: string;
|
|
39
|
-
status: string;
|
|
40
|
-
summary: string;
|
|
41
|
-
timestamp: string;
|
|
42
|
-
}): string;
|
|
43
|
-
/**
|
|
44
|
-
* Canonical payload for structured Audit.log entries (v2, length-delimited).
|
|
45
|
-
*/
|
|
46
|
-
export declare function buildStructuredAuditChainPayload(fields: {
|
|
47
|
-
prevHash: string;
|
|
48
|
-
agent: string;
|
|
49
|
-
action: string;
|
|
50
|
-
status: string;
|
|
51
|
-
traceId: string;
|
|
52
|
-
timestamp: string;
|
|
53
|
-
detailsJson: string;
|
|
54
|
-
errorMessage: string;
|
|
55
|
-
}): string;
|
|
56
|
-
export interface ChainRow {
|
|
57
|
-
id: number;
|
|
58
|
-
prev_hash: string | null;
|
|
59
|
-
hash: string | null;
|
|
60
|
-
}
|
|
61
|
-
export interface ChainVerifyResult {
|
|
62
|
-
valid: boolean;
|
|
63
|
-
checked: number;
|
|
64
|
-
failedLogId?: number;
|
|
65
|
-
reason?: string;
|
|
66
|
-
tip?: string;
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* Verify a sequence of rows already ordered by id ASC.
|
|
70
|
-
* `computePayload(row, prevHash)` must rebuild the exact string used at insert time.
|
|
71
|
-
*
|
|
72
|
-
* @param options.digest keyed digest used at insert time (default: chainDigest)
|
|
73
|
-
* @param options.expectedTip last appended hash (from an external anchor) — detects truncation
|
|
74
|
-
* @param options.expectedCount number of chained rows expected — detects deletion at the tail
|
|
75
|
-
*/
|
|
76
|
-
export declare function verifyHashChain<T extends ChainRow>(rows: T[], computePayload: (row: T, prevHash: string) => string, options?: {
|
|
77
|
-
digest?: (payload: string) => string;
|
|
78
|
-
expectedTip?: string;
|
|
79
|
-
expectedCount?: number;
|
|
80
|
-
}): ChainVerifyResult;
|
|
1
|
+
export * from "./modules/observability/audit-chain.js";
|