agents-chain 0.0.1

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.
Files changed (70) hide show
  1. package/README.md +145 -0
  2. package/dist/audit/audit-log.d.ts +44 -0
  3. package/dist/audit/audit-log.d.ts.map +1 -0
  4. package/dist/audit/audit-log.js +88 -0
  5. package/dist/audit/audit-log.js.map +1 -0
  6. package/dist/auth/token-builder.d.ts +32 -0
  7. package/dist/auth/token-builder.d.ts.map +1 -0
  8. package/dist/auth/token-builder.js +38 -0
  9. package/dist/auth/token-builder.js.map +1 -0
  10. package/dist/auth/token-verifier.d.ts +37 -0
  11. package/dist/auth/token-verifier.d.ts.map +1 -0
  12. package/dist/auth/token-verifier.js +86 -0
  13. package/dist/auth/token-verifier.js.map +1 -0
  14. package/dist/chain.d.ts +36 -0
  15. package/dist/chain.d.ts.map +1 -0
  16. package/dist/chain.js +90 -0
  17. package/dist/chain.js.map +1 -0
  18. package/dist/crypto/ed25519.d.ts +63 -0
  19. package/dist/crypto/ed25519.d.ts.map +1 -0
  20. package/dist/crypto/ed25519.js +118 -0
  21. package/dist/crypto/ed25519.js.map +1 -0
  22. package/dist/crypto/utils.d.ts +18 -0
  23. package/dist/crypto/utils.d.ts.map +1 -0
  24. package/dist/crypto/utils.js +38 -0
  25. package/dist/crypto/utils.js.map +1 -0
  26. package/dist/errors/chain-error.d.ts +18 -0
  27. package/dist/errors/chain-error.d.ts.map +1 -0
  28. package/dist/errors/chain-error.js +22 -0
  29. package/dist/errors/chain-error.js.map +1 -0
  30. package/dist/identity/agent-identity.d.ts +33 -0
  31. package/dist/identity/agent-identity.d.ts.map +1 -0
  32. package/dist/identity/agent-identity.js +73 -0
  33. package/dist/identity/agent-identity.js.map +1 -0
  34. package/dist/index.d.ts +9 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +5 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/lib/utils.d.ts +6 -0
  39. package/dist/lib/utils.d.ts.map +1 -0
  40. package/dist/lib/utils.js +25 -0
  41. package/dist/lib/utils.js.map +1 -0
  42. package/dist/memory/encrypted-store.d.ts +29 -0
  43. package/dist/memory/encrypted-store.d.ts.map +1 -0
  44. package/dist/memory/encrypted-store.js +102 -0
  45. package/dist/memory/encrypted-store.js.map +1 -0
  46. package/dist/memory/jti-cache.d.ts +22 -0
  47. package/dist/memory/jti-cache.d.ts.map +1 -0
  48. package/dist/memory/jti-cache.js +43 -0
  49. package/dist/memory/jti-cache.js.map +1 -0
  50. package/dist/types/audit.d.ts +16 -0
  51. package/dist/types/audit.d.ts.map +1 -0
  52. package/dist/types/audit.js +2 -0
  53. package/dist/types/audit.js.map +1 -0
  54. package/dist/types/chain.d.ts +19 -0
  55. package/dist/types/chain.d.ts.map +1 -0
  56. package/dist/types/chain.js +2 -0
  57. package/dist/types/chain.js.map +1 -0
  58. package/dist/types/identity.d.ts +35 -0
  59. package/dist/types/identity.d.ts.map +1 -0
  60. package/dist/types/identity.js +3 -0
  61. package/dist/types/identity.js.map +1 -0
  62. package/dist/wrappers/anthropic-wrapper.d.ts +31 -0
  63. package/dist/wrappers/anthropic-wrapper.d.ts.map +1 -0
  64. package/dist/wrappers/anthropic-wrapper.js +97 -0
  65. package/dist/wrappers/anthropic-wrapper.js.map +1 -0
  66. package/dist/wrappers/openai-wrapper.d.ts +34 -0
  67. package/dist/wrappers/openai-wrapper.d.ts.map +1 -0
  68. package/dist/wrappers/openai-wrapper.js +106 -0
  69. package/dist/wrappers/openai-wrapper.js.map +1 -0
  70. package/package.json +56 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encrypted-store.js","sourceRoot":"","sources":["../../src/memory/encrypted-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * JtiCache — in-memory JWT ID replay protection.
3
+ *
4
+ * Security properties:
5
+ * - Every agent+jwt carries a unique `jti` (JWT ID).
6
+ * - Once seen, the jti is recorded for REPLAY_WINDOW_MS.
7
+ * - Any attempt to reuse the same jti within that window throws ChainAuthError.
8
+ * - This prevents replay attacks: an intercepted token cannot be reused.
9
+ * - TTL eviction is lazy (checked on insert) — no background timer needed.
10
+ *
11
+ * The window is 90 seconds to comfortably cover the 60-second token max TTL
12
+ * plus clock skew tolerance.
13
+ */
14
+ export declare class JtiCache {
15
+ /** Map of "<agentId>:<jti>" → expiry timestamp (Unix ms) */
16
+ private readonly cache;
17
+ assert(agentId: string, jti: string): void;
18
+ /** Remove all entries whose expiry has passed. */
19
+ private evictExpired;
20
+ get size(): number;
21
+ }
22
+ //# sourceMappingURL=jti-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jti-cache.d.ts","sourceRoot":"","sources":["../../src/memory/jti-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAMH,qBAAa,QAAQ;IACjB,4DAA4D;IAC5D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA6B;IAEnD,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAgB1C,kDAAkD;IAClD,OAAO,CAAC,YAAY;IASpB,IAAI,IAAI,IAAI,MAAM,CAEjB;CACJ"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * JtiCache — in-memory JWT ID replay protection.
3
+ *
4
+ * Security properties:
5
+ * - Every agent+jwt carries a unique `jti` (JWT ID).
6
+ * - Once seen, the jti is recorded for REPLAY_WINDOW_MS.
7
+ * - Any attempt to reuse the same jti within that window throws ChainAuthError.
8
+ * - This prevents replay attacks: an intercepted token cannot be reused.
9
+ * - TTL eviction is lazy (checked on insert) — no background timer needed.
10
+ *
11
+ * The window is 90 seconds to comfortably cover the 60-second token max TTL
12
+ * plus clock skew tolerance.
13
+ */
14
+ import { ChainAuthError } from "../errors/chain-error.js";
15
+ const REPLAY_WINDOW_MS = 90000; // 90 seconds
16
+ export class JtiCache {
17
+ constructor() {
18
+ /** Map of "<agentId>:<jti>" → expiry timestamp (Unix ms) */
19
+ this.cache = new Map();
20
+ }
21
+ assert(agentId, jti) {
22
+ this.evictExpired();
23
+ const cacheKey = `${agentId}:${jti}`;
24
+ const existing = this.cache.get(cacheKey);
25
+ if (existing !== undefined) {
26
+ throw new ChainAuthError("token_replayed", `JWT has already been used (jti="${jti}") — replay attack detected`);
27
+ }
28
+ this.cache.set(cacheKey, Date.now() + REPLAY_WINDOW_MS);
29
+ }
30
+ /** Remove all entries whose expiry has passed. */
31
+ evictExpired() {
32
+ const now = Date.now();
33
+ for (const [key, expiry] of this.cache) {
34
+ if (expiry < now) {
35
+ this.cache.delete(key);
36
+ }
37
+ }
38
+ }
39
+ get size() {
40
+ return this.cache.size;
41
+ }
42
+ }
43
+ //# sourceMappingURL=jti-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jti-cache.js","sourceRoot":"","sources":["../../src/memory/jti-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D,MAAM,gBAAgB,GAAG,KAAM,CAAC,CAAC,aAAa;AAE9C,MAAM,OAAO,QAAQ;IAArB;QACI,4DAA4D;QAC3C,UAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IA+BvD,CAAC;IA7BG,MAAM,CAAC,OAAe,EAAE,GAAW;QAC/B,IAAI,CAAC,YAAY,EAAE,CAAC;QAEpB,MAAM,QAAQ,GAAG,GAAG,OAAO,IAAI,GAAG,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAE1C,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,IAAI,cAAc,CACpB,gBAAgB,EAChB,mCAAmC,GAAG,6BAA6B,CACtE,CAAC;QACN,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,gBAAgB,CAAC,CAAC;IAC5D,CAAC;IAED,kDAAkD;IAC1C,YAAY;QAChB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACrC,IAAI,MAAM,GAAG,GAAG,EAAE,CAAC;gBACf,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC3B,CAAC;QACL,CAAC;IACL,CAAC;IAED,IAAI,IAAI;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IAC3B,CAAC;CACJ"}
@@ -0,0 +1,16 @@
1
+ export type AuditResult = "success" | "denied" | "error";
2
+ export type AuditEntry = {
3
+ id: string;
4
+ agentId: string;
5
+ agentName: string;
6
+ hostname: string;
7
+ capability: string;
8
+ args: Record<string, unknown>;
9
+ result: AuditResult;
10
+ denialReason?: string;
11
+ errorMessage?: string;
12
+ jti: string;
13
+ timestamp: number;
14
+ durationMs: number;
15
+ };
16
+ //# sourceMappingURL=audit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/types/audit.ts"],"names":[],"mappings":"AACA,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEzD,MAAM,MAAM,UAAU,GAAG;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,MAAM,EAAE,WAAW,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACtB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=audit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/types/audit.ts"],"names":[],"mappings":""}
@@ -0,0 +1,19 @@
1
+ import type { AgentConfig } from "./identity.js";
2
+ import type { AuditEntry } from "./audit.js";
3
+ export type { AgentConfig };
4
+ export type ChainStats = {
5
+ agentId: string;
6
+ agentName: string;
7
+ hostname: string;
8
+ totalCalls: number;
9
+ successfulCalls: number;
10
+ deniedCalls: number;
11
+ errorCalls: number;
12
+ registeredAt: number;
13
+ };
14
+ export type AuditSnapshot = {
15
+ agentId: string;
16
+ entries: AuditEntry[];
17
+ exportedAt: number;
18
+ };
19
+ //# sourceMappingURL=chain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chain.d.ts","sourceRoot":"","sources":["../../src/types/chain.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,YAAY,EAAE,WAAW,EAAE,CAAC;AAE5B,MAAM,MAAM,UAAU,GAAG;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACtB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=chain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chain.js","sourceRoot":"","sources":["../../src/types/chain.ts"],"names":[],"mappings":""}
@@ -0,0 +1,35 @@
1
+ export type AgentConfig = {
2
+ agentName: string;
3
+ hostname: string;
4
+ capabilities: string[];
5
+ /**
6
+ * Optional AES-256-GCM encryption key (64 hex chars = 32 bytes).
7
+ * If omitted, a random key is generated per session.
8
+ * Provide this if you need to persist and reload audit logs.
9
+ */
10
+ encryptionKey?: string;
11
+ };
12
+ export type CapabilityGrant = {
13
+ capability: string;
14
+ grantedAt: number;
15
+ constraints?: CapabilityConstraints;
16
+ };
17
+ export type CapabilityConstraints = Record<string, ConstraintValue>;
18
+ export type ConstraintPrimitive = string | number | boolean;
19
+ export type ConstraintOperator = {
20
+ max?: number;
21
+ min?: number;
22
+ in?: ConstraintPrimitive[];
23
+ not_in?: ConstraintPrimitive[];
24
+ };
25
+ export type ConstraintValue = ConstraintPrimitive | ConstraintOperator;
26
+ export type RegisteredAgent = {
27
+ agentId: string;
28
+ agentName: string;
29
+ hostname: string;
30
+ publicKeyJwk: JsonWebKey;
31
+ thumbprint: string;
32
+ capabilities: CapabilityGrant[];
33
+ registeredAt: number;
34
+ };
35
+ //# sourceMappingURL=identity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../src/types/identity.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,WAAW,GAAG;IAEtB,SAAS,EAAE,MAAM,CAAC;IAElB,QAAQ,EAAE,MAAM,CAAC;IAEjB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,qBAAqB,CAAC;CACvC,CAAC;AAGF,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;AAEpE,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE5D,MAAM,MAAM,kBAAkB,GAAG;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,EAAE,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAC3B,MAAM,CAAC,EAAE,mBAAmB,EAAE,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,mBAAmB,GAAG,kBAAkB,CAAC;AAEvE,MAAM,MAAM,eAAe,GAAG;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,UAAU,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,eAAe,EAAE,CAAC;IAChC,YAAY,EAAE,MAAM,CAAC;CACxB,CAAC"}
@@ -0,0 +1,3 @@
1
+ // ─── Agent Identity Types ─────────────────────────────────────────────────────
2
+ export {};
3
+ //# sourceMappingURL=identity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity.js","sourceRoot":"","sources":["../../src/types/identity.ts"],"names":[],"mappings":"AAAA,iFAAiF"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Anthropic SDK wrapper — intercepts calls and runs the auth + audit pipeline.
3
+ *
4
+ * Intercepted capability names (mapped from SDK method paths):
5
+ * client.messages.create → "message"
6
+ * client.messages.stream → "message.stream"
7
+ * client.messages.countTokens → "message.count_tokens"
8
+ * client.completions.create → "completion" (legacy)
9
+ * client.beta.messages.create → "message.beta"
10
+ *
11
+ * Any other method path passes through without interception.
12
+ *
13
+ * Same Proxy approach as the OpenAI wrapper — no SDK monkey-patching.
14
+ */
15
+ import type { TokenBuilder } from "../auth/token-builder.js";
16
+ import type { TokenVerifier } from "../auth/token-verifier.js";
17
+ import type { AuditLog } from "../audit/audit-log.js";
18
+ import type { AgentIdentity } from "../identity/agent-identity.js";
19
+ type InterceptContext = {
20
+ identity: AgentIdentity;
21
+ builder: TokenBuilder;
22
+ verifier: TokenVerifier;
23
+ log: AuditLog;
24
+ };
25
+ /**
26
+ * Wrap an Anthropic client instance.
27
+ * Returns a Proxy that enforces agent auth on every intercepted method.
28
+ */
29
+ export declare function wrapAnthropic<T extends object>(client: T, ctx: InterceptContext): T;
30
+ export {};
31
+ //# sourceMappingURL=anthropic-wrapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic-wrapper.d.ts","sourceRoot":"","sources":["../../src/wrappers/anthropic-wrapper.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAUnE,KAAK,gBAAgB,GAAG;IACpB,QAAQ,EAAE,aAAa,CAAC;IACxB,OAAO,EAAE,YAAY,CAAC;IACtB,QAAQ,EAAE,aAAa,CAAC;IACxB,GAAG,EAAE,QAAQ,CAAC;CACjB,CAAC;AAEF;;;GAGG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,gBAAgB,GAAG,CAAC,CAEnF"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Anthropic SDK wrapper — intercepts calls and runs the auth + audit pipeline.
3
+ *
4
+ * Intercepted capability names (mapped from SDK method paths):
5
+ * client.messages.create → "message"
6
+ * client.messages.stream → "message.stream"
7
+ * client.messages.countTokens → "message.count_tokens"
8
+ * client.completions.create → "completion" (legacy)
9
+ * client.beta.messages.create → "message.beta"
10
+ *
11
+ * Any other method path passes through without interception.
12
+ *
13
+ * Same Proxy approach as the OpenAI wrapper — no SDK monkey-patching.
14
+ */
15
+ import { ChainAuthError } from "../errors/chain-error.js";
16
+ const METHOD_CAPABILITY_MAP = {
17
+ "messages.create": "message",
18
+ "messages.stream": "message.stream",
19
+ "messages.countTokens": "message.count_tokens",
20
+ "completions.create": "completion",
21
+ "beta.messages.create": "message.beta",
22
+ };
23
+ /**
24
+ * Wrap an Anthropic client instance.
25
+ * Returns a Proxy that enforces agent auth on every intercepted method.
26
+ */
27
+ export function wrapAnthropic(client, ctx) {
28
+ return buildProxy(client, ctx, []);
29
+ }
30
+ function buildProxy(target, ctx, path) {
31
+ return new Proxy(target, {
32
+ get(obj, prop) {
33
+ if (typeof prop !== "string")
34
+ return Reflect.get(obj, prop);
35
+ const nextPath = [...path, prop];
36
+ const pathKey = nextPath.join(".");
37
+ const capability = METHOD_CAPABILITY_MAP[pathKey];
38
+ const value = Reflect.get(obj, prop);
39
+ if (capability !== undefined && typeof value === "function") {
40
+ return createInterceptedMethod(value.bind(obj), capability, ctx);
41
+ }
42
+ if (typeof value === "object" && value !== null) {
43
+ return buildProxy(value, ctx, nextPath);
44
+ }
45
+ return value;
46
+ },
47
+ });
48
+ }
49
+ function createInterceptedMethod(originalFn, capability, ctx) {
50
+ return async (...args) => {
51
+ const callArgs = (args[0] ?? {});
52
+ let jti = "unknown";
53
+ try {
54
+ const { token, claims } = await ctx.builder.build(capability);
55
+ jti = claims.jti;
56
+ const verified = await ctx.verifier.verify(token, capability);
57
+ const start = Date.now();
58
+ let result;
59
+ try {
60
+ result = await Promise.resolve(originalFn(...args));
61
+ }
62
+ catch (sdkErr) {
63
+ ctx.log.recordCall({
64
+ context: verified,
65
+ args: callArgs,
66
+ result: "error",
67
+ durationMs: Date.now() - start,
68
+ errorMessage: sdkErr instanceof Error ? sdkErr.message : String(sdkErr),
69
+ });
70
+ throw sdkErr;
71
+ }
72
+ ctx.log.recordCall({
73
+ context: verified,
74
+ args: callArgs,
75
+ result: "success",
76
+ durationMs: Date.now() - start,
77
+ });
78
+ return result;
79
+ }
80
+ catch (err) {
81
+ if (err instanceof ChainAuthError) {
82
+ ctx.log.recordDenied({
83
+ agentId: ctx.identity.agentId,
84
+ agentName: ctx.identity.registration.agentName,
85
+ hostname: ctx.identity.registration.hostname,
86
+ capability,
87
+ args: callArgs,
88
+ reason: err.message,
89
+ jti,
90
+ });
91
+ throw err;
92
+ }
93
+ throw err;
94
+ }
95
+ };
96
+ }
97
+ //# sourceMappingURL=anthropic-wrapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic-wrapper.js","sourceRoot":"","sources":["../../src/wrappers/anthropic-wrapper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * OpenAI SDK wrapper — intercepts calls and runs the auth + audit pipeline.
3
+ *
4
+ * Intercepted capability names (mapped from SDK method paths):
5
+ * client.chat.completions.create → "chat.completion"
6
+ * client.embeddings.create → "embedding"
7
+ * client.images.generate → "image.generation"
8
+ * client.audio.transcriptions.create → "audio.transcription"
9
+ * client.audio.speech.create → "audio.speech"
10
+ * client.moderations.create → "moderation"
11
+ * client.responses.create → "response" (Responses API)
12
+ *
13
+ * Any other method path passes through without interception.
14
+ *
15
+ * The wrapper uses JavaScript Proxy so it does not modify the original
16
+ * client object and works with any OpenAI SDK version.
17
+ */
18
+ import type { TokenBuilder } from "../auth/token-builder.js";
19
+ import type { TokenVerifier } from "../auth/token-verifier.js";
20
+ import type { AuditLog } from "../audit/audit-log.js";
21
+ import type { AgentIdentity } from "../identity/agent-identity.js";
22
+ type InterceptContext = {
23
+ identity: AgentIdentity;
24
+ builder: TokenBuilder;
25
+ verifier: TokenVerifier;
26
+ log: AuditLog;
27
+ };
28
+ /**
29
+ * Wrap an OpenAI client instance.
30
+ * Returns a Proxy that enforces agent auth on every intercepted method.
31
+ */
32
+ export declare function wrapOpenAI<T extends object>(client: T, ctx: InterceptContext): T;
33
+ export {};
34
+ //# sourceMappingURL=openai-wrapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-wrapper.d.ts","sourceRoot":"","sources":["../../src/wrappers/openai-wrapper.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAanE,KAAK,gBAAgB,GAAG;IACpB,QAAQ,EAAE,aAAa,CAAC;IACxB,OAAO,EAAE,YAAY,CAAC;IACtB,QAAQ,EAAE,aAAa,CAAC;IACxB,GAAG,EAAE,QAAQ,CAAC;CACjB,CAAC;AAEF;;;GAGG;AACH,wBAAgB,UAAU,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,gBAAgB,GAAG,CAAC,CAEhF"}
@@ -0,0 +1,106 @@
1
+ /**
2
+ * OpenAI SDK wrapper — intercepts calls and runs the auth + audit pipeline.
3
+ *
4
+ * Intercepted capability names (mapped from SDK method paths):
5
+ * client.chat.completions.create → "chat.completion"
6
+ * client.embeddings.create → "embedding"
7
+ * client.images.generate → "image.generation"
8
+ * client.audio.transcriptions.create → "audio.transcription"
9
+ * client.audio.speech.create → "audio.speech"
10
+ * client.moderations.create → "moderation"
11
+ * client.responses.create → "response" (Responses API)
12
+ *
13
+ * Any other method path passes through without interception.
14
+ *
15
+ * The wrapper uses JavaScript Proxy so it does not modify the original
16
+ * client object and works with any OpenAI SDK version.
17
+ */
18
+ import { ChainAuthError } from "../errors/chain-error.js";
19
+ /** Map from SDK method path (dot-joined) to capability name */
20
+ const METHOD_CAPABILITY_MAP = {
21
+ "chat.completions.create": "chat.completion",
22
+ "embeddings.create": "embedding",
23
+ "images.generate": "image.generation",
24
+ "audio.transcriptions.create": "audio.transcription",
25
+ "audio.speech.create": "audio.speech",
26
+ "moderations.create": "moderation",
27
+ "responses.create": "response",
28
+ };
29
+ /**
30
+ * Wrap an OpenAI client instance.
31
+ * Returns a Proxy that enforces agent auth on every intercepted method.
32
+ */
33
+ export function wrapOpenAI(client, ctx) {
34
+ return buildProxy(client, ctx, []);
35
+ }
36
+ function buildProxy(target, ctx, path) {
37
+ return new Proxy(target, {
38
+ get(obj, prop) {
39
+ if (typeof prop !== "string")
40
+ return Reflect.get(obj, prop);
41
+ const nextPath = [...path, prop];
42
+ const pathKey = nextPath.join(".");
43
+ const capability = METHOD_CAPABILITY_MAP[pathKey];
44
+ const value = Reflect.get(obj, prop);
45
+ // If this exact path maps to a known capability, intercept the function
46
+ if (capability !== undefined && typeof value === "function") {
47
+ return createInterceptedMethod(value.bind(obj), capability, ctx);
48
+ }
49
+ // If it's an object (namespace like client.chat), proxy it deeper
50
+ if (typeof value === "object" && value !== null) {
51
+ return buildProxy(value, ctx, nextPath);
52
+ }
53
+ return value;
54
+ },
55
+ });
56
+ }
57
+ function createInterceptedMethod(originalFn, capability, ctx) {
58
+ return async (...args) => {
59
+ const callArgs = (args[0] ?? {});
60
+ // Build + verify a fresh single-use token
61
+ let jti = "unknown";
62
+ try {
63
+ const { token, claims } = await ctx.builder.build(capability);
64
+ jti = claims.jti;
65
+ const verified = await ctx.verifier.verify(token, capability);
66
+ const start = Date.now();
67
+ let result;
68
+ try {
69
+ result = await Promise.resolve(originalFn(...args));
70
+ }
71
+ catch (sdkErr) {
72
+ ctx.log.recordCall({
73
+ context: verified,
74
+ args: callArgs,
75
+ result: "error",
76
+ durationMs: Date.now() - start,
77
+ errorMessage: sdkErr instanceof Error ? sdkErr.message : String(sdkErr),
78
+ });
79
+ throw sdkErr;
80
+ }
81
+ ctx.log.recordCall({
82
+ context: verified,
83
+ args: callArgs,
84
+ result: "success",
85
+ durationMs: Date.now() - start,
86
+ });
87
+ return result;
88
+ }
89
+ catch (err) {
90
+ if (err instanceof ChainAuthError) {
91
+ ctx.log.recordDenied({
92
+ agentId: ctx.identity.agentId,
93
+ agentName: ctx.identity.registration.agentName,
94
+ hostname: ctx.identity.registration.hostname,
95
+ capability,
96
+ args: callArgs,
97
+ reason: err.message,
98
+ jti,
99
+ });
100
+ throw err;
101
+ }
102
+ throw err;
103
+ }
104
+ };
105
+ }
106
+ //# sourceMappingURL=openai-wrapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-wrapper.js","sourceRoot":"","sources":["../../src/wrappers/openai-wrapper.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAM1D,+DAA+D;AAC/D,MAAM,qBAAqB,GAA2B;IAClD,yBAAyB,EAAE,iBAAiB;IAC5C,mBAAmB,EAAE,WAAW;IAChC,iBAAiB,EAAE,kBAAkB;IACrC,6BAA6B,EAAE,qBAAqB;IACpD,qBAAqB,EAAE,cAAc;IACrC,oBAAoB,EAAE,YAAY;IAClC,kBAAkB,EAAE,UAAU;CACjC,CAAC;AASF;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAmB,MAAS,EAAE,GAAqB;IACzE,OAAO,UAAU,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;AACvC,CAAC;AAED,SAAS,UAAU,CACf,MAAS,EACT,GAAqB,EACrB,IAAc;IAEd,OAAO,IAAI,KAAK,CAAC,MAAM,EAAE;QACrB,GAAG,CAAC,GAAG,EAAE,IAAI;YACT,IAAI,OAAO,IAAI,KAAK,QAAQ;gBAAE,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAE5D,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,EAAE,IAAI,CAAC,CAAC;YACjC,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACnC,MAAM,UAAU,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;YAElD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAErC,wEAAwE;YACxE,IAAI,UAAU,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;gBAC1D,OAAO,uBAAuB,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;YACrE,CAAC;YAED,kEAAkE;YAClE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBAC9C,OAAO,UAAU,CAAC,KAAe,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;YACtD,CAAC;YAED,OAAO,KAAK,CAAC;QACjB,CAAC;KACJ,CAAM,CAAC;AACZ,CAAC;AAED,SAAS,uBAAuB,CAC5B,UAA2C,EAC3C,UAAkB,EAClB,GAAqB;IAErB,OAAO,KAAK,EAAE,GAAG,IAAe,EAAE,EAAE;QAChC,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAA4B,CAAC;QAE5D,0CAA0C;QAC1C,IAAI,GAAG,GAAG,SAAS,CAAC;QACpB,IAAI,CAAC;YACD,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAC9D,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;YACjB,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;YAE9D,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACzB,IAAI,MAAe,CAAC;YACpB,IAAI,CAAC;gBACD,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;YACxD,CAAC;YAAC,OAAO,MAAM,EAAE,CAAC;gBACd,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC;oBACf,OAAO,EAAE,QAAQ;oBACjB,IAAI,EAAE,QAAQ;oBACd,MAAM,EAAE,OAAO;oBACf,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;oBAC9B,YAAY,EAAE,MAAM,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;iBAC1E,CAAC,CAAC;gBACH,MAAM,MAAM,CAAC;YACjB,CAAC;YAED,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC;gBACf,OAAO,EAAE,QAAQ;gBACjB,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,SAAS;gBACjB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;aACjC,CAAC,CAAC;YAEH,OAAO,MAAM,CAAC;QAClB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,IAAI,GAAG,YAAY,cAAc,EAAE,CAAC;gBAChC,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC;oBACjB,OAAO,EAAE,GAAG,CAAC,QAAQ,CAAC,OAAO;oBAC7B,SAAS,EAAE,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,SAAS;oBAC9C,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,QAAQ;oBAC5C,UAAU;oBACV,IAAI,EAAE,QAAQ;oBACd,MAAM,EAAE,GAAG,CAAC,OAAO;oBACnB,GAAG;iBACN,CAAC,CAAC;gBACH,MAAM,GAAG,CAAC;YACd,CAAC;YACD,MAAM,GAAG,CAAC;QACd,CAAC;IACL,CAAC,CAAC;AACN,CAAC"}
package/package.json ADDED
@@ -0,0 +1,56 @@
1
+ {
2
+ "name": "agents-chain",
3
+ "version": "0.0.1",
4
+ "description": "Lightweight identity, auth, and audit layer for AI agent SDKs (OpenAI, Anthropic)",
5
+ "main": "./dist/index.js",
6
+ "types": "./dist/index.d.ts",
7
+ "exports": {
8
+ ".": {
9
+ "import": "./dist/index.js",
10
+ "types": "./dist/index.d.ts"
11
+ }
12
+ },
13
+ "files": [
14
+ "dist",
15
+ "README.md",
16
+ "LICENSE"
17
+ ],
18
+ "scripts": {
19
+ "build": "tsc",
20
+ "dev": "tsc --watch",
21
+ "prepublishOnly": "pnpm run build",
22
+ "lint": "prettier --check .",
23
+ "format": "prettier --write .",
24
+ "test": "echo \"Error: no test specified\" && exit 1"
25
+ },
26
+ "keywords": [
27
+ "ai",
28
+ "agents",
29
+ "openai",
30
+ "anthropic",
31
+ "auth",
32
+ "jwt",
33
+ "audit",
34
+ "identity",
35
+ "llm"
36
+ ],
37
+ "author": "Brian Mwangi (https://github.com/Brian-Mwangi-developer)",
38
+ "license": "MIT",
39
+ "type": "module",
40
+ "engines": {
41
+ "node": ">=18"
42
+ },
43
+ "repository": {
44
+ "type": "git",
45
+ "url": "https://github.com/Brian-Mwangi-developer/agentchain.git"
46
+ },
47
+ "bugs": {
48
+ "url": "https://github.com/Brian-Mwangi-developer/agentchain/issues"
49
+ },
50
+ "homepage": "https://github.com/Brian-Mwangi-developer/agentchain#readme",
51
+ "devDependencies": {
52
+ "@types/node": "^25.9.1",
53
+ "prettier": "^3.8.3",
54
+ "typescript": "^6.0.3"
55
+ }
56
+ }