agents-chain 0.0.2 → 0.0.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.
Files changed (57) hide show
  1. package/README.md +238 -52
  2. package/dist/app/app-wrapper.d.ts +43 -0
  3. package/dist/app/app-wrapper.d.ts.map +1 -0
  4. package/dist/app/app-wrapper.js +122 -0
  5. package/dist/app/app-wrapper.js.map +1 -0
  6. package/dist/app/capability-registry.d.ts +31 -0
  7. package/dist/app/capability-registry.d.ts.map +1 -0
  8. package/dist/app/capability-registry.js +65 -0
  9. package/dist/app/capability-registry.js.map +1 -0
  10. package/dist/audit/audit-exporter.d.ts +82 -0
  11. package/dist/audit/audit-exporter.d.ts.map +1 -0
  12. package/dist/audit/audit-exporter.js +94 -0
  13. package/dist/audit/audit-exporter.js.map +1 -0
  14. package/dist/audit/audit-log.d.ts +10 -0
  15. package/dist/audit/audit-log.d.ts.map +1 -1
  16. package/dist/audit/audit-log.js +18 -0
  17. package/dist/audit/audit-log.js.map +1 -1
  18. package/dist/auth/constraints.d.ts +19 -0
  19. package/dist/auth/constraints.d.ts.map +1 -0
  20. package/dist/auth/constraints.js +85 -0
  21. package/dist/auth/constraints.js.map +1 -0
  22. package/dist/auth/token-verifier.d.ts +26 -2
  23. package/dist/auth/token-verifier.d.ts.map +1 -1
  24. package/dist/auth/token-verifier.js +47 -9
  25. package/dist/auth/token-verifier.js.map +1 -1
  26. package/dist/chain.d.ts +59 -1
  27. package/dist/chain.d.ts.map +1 -1
  28. package/dist/chain.js +115 -0
  29. package/dist/chain.js.map +1 -1
  30. package/dist/crypto/ed25519.d.ts.map +1 -1
  31. package/dist/crypto/ed25519.js +2 -1
  32. package/dist/crypto/ed25519.js.map +1 -1
  33. package/dist/crypto/utils.d.ts +1 -1
  34. package/dist/crypto/utils.d.ts.map +1 -1
  35. package/dist/host/host-identity.d.ts +66 -0
  36. package/dist/host/host-identity.d.ts.map +1 -0
  37. package/dist/host/host-identity.js +109 -0
  38. package/dist/host/host-identity.js.map +1 -0
  39. package/dist/index.d.ts +14 -1
  40. package/dist/index.d.ts.map +1 -1
  41. package/dist/index.js +11 -0
  42. package/dist/index.js.map +1 -1
  43. package/dist/memory/jti-cache.d.ts +31 -4
  44. package/dist/memory/jti-cache.d.ts.map +1 -1
  45. package/dist/memory/jti-cache.js +40 -13
  46. package/dist/memory/jti-cache.js.map +1 -1
  47. package/dist/types/capabilities.d.ts +64 -0
  48. package/dist/types/capabilities.d.ts.map +1 -0
  49. package/dist/types/capabilities.js +9 -0
  50. package/dist/types/capabilities.js.map +1 -0
  51. package/dist/types/chain.d.ts +51 -1
  52. package/dist/types/chain.d.ts.map +1 -1
  53. package/dist/types/protocol.d.ts +61 -0
  54. package/dist/types/protocol.d.ts.map +1 -0
  55. package/dist/types/protocol.js +10 -0
  56. package/dist/types/protocol.js.map +1 -0
  57. package/package.json +1 -1
package/dist/chain.js CHANGED
@@ -23,6 +23,9 @@ import { TokenVerifier } from "./auth/token-verifier.js";
23
23
  import { AuditLog } from "./audit/audit-log.js";
24
24
  import { wrapOpenAI } from "./wrappers/openai-wrapper.js";
25
25
  import { wrapAnthropic } from "./wrappers/anthropic-wrapper.js";
26
+ import { HostIdentity } from "./host/host-identity.js";
27
+ import { CapabilityRegistry } from "./app/capability-registry.js";
28
+ import { wrapApp, attachRegistry } from "./app/app-wrapper.js";
26
29
  export class AgentsChain {
27
30
  constructor(store, identity, builder, verifier, log) {
28
31
  this.store = store;
@@ -87,4 +90,116 @@ export class AgentsChain {
87
90
  };
88
91
  }
89
92
  }
93
+ // ─── AppChain ─────────────────────────────────────────────────────────────────
94
+ /**
95
+ * AppChain — wraps any app object with capability-gated security.
96
+ *
97
+ * Unlike AgentsChain (which wraps AI SDKs), AppChain wraps your own service
98
+ * objects or any external app, enforcing agent identity, permission grants,
99
+ * constraint validation, and an audit trail on every capability call.
100
+ *
101
+ * Usage:
102
+ * const chain = await AppChain.create({
103
+ * providerName: "billing-service",
104
+ * issuer: "https://billing.mycompany.com",
105
+ * capabilities: [invoiceCapability, refundCapability],
106
+ * });
107
+ *
108
+ * // Wrap your service — every call is identity-bound and audited
109
+ * const secured = chain.wrap(billingService, agentGrants);
110
+ * const invoice = await secured.createInvoice({ customerId: "c1", amount: 500 });
111
+ *
112
+ * // Serve well-known for agent discovery
113
+ * app.get("/.well-known/agent-configuration", (req, res) => res.json(chain.getWellKnownConfig()));
114
+ *
115
+ * // Flush audit on shutdown
116
+ * process.on("SIGTERM", () => chain.drain());
117
+ */
118
+ export class AppChain {
119
+ constructor(host, registry, identity, builder, verifier, log, exporter) {
120
+ this.host = host;
121
+ this.registry = registry;
122
+ this.identity = identity;
123
+ this.builder = builder;
124
+ this.verifier = verifier;
125
+ this.log = log;
126
+ this.exporter = exporter;
127
+ }
128
+ static async create(config) {
129
+ const store = EncryptedStore.create(config.encryptionKey);
130
+ const jtiCache = new JtiCache(config.jtiAdapter);
131
+ // Create a synthetic agent identity for this app chain instance
132
+ const identity = await AgentIdentity.create({
133
+ agentName: config.providerName,
134
+ hostname: config.providerName,
135
+ capabilities: config.capabilities.map((c) => c.name),
136
+ encryptionKey: config.encryptionKey,
137
+ }, store);
138
+ const builder = new TokenBuilder(identity);
139
+ const verifier = new TokenVerifier(identity, jtiCache, {
140
+ grantResolver: config.grantResolver,
141
+ });
142
+ const log = new AuditLog(store);
143
+ // Build capability registry
144
+ const registry = new CapabilityRegistry();
145
+ for (const cap of config.capabilities) {
146
+ registry.register(cap);
147
+ }
148
+ // Create Host identity for signing agent registration JWTs
149
+ const host = await HostIdentity.create({
150
+ name: config.host?.name ?? config.providerName,
151
+ issuerUrl: config.host?.issuerUrl ?? config.issuer,
152
+ encryptionKey: config.encryptionKey,
153
+ });
154
+ return new AppChain(host, registry, identity, builder, verifier, log, config.auditExporter);
155
+ }
156
+ /**
157
+ * Wrap any object with capability-gated security.
158
+ *
159
+ * @param target The service object to wrap
160
+ * @param grants The resolved grants for the agent making calls
161
+ * @returns A Proxy with the same type as target
162
+ */
163
+ wrap(target, grants) {
164
+ const ctx = {
165
+ identity: this.identity,
166
+ builder: this.builder,
167
+ verifier: this.verifier,
168
+ log: this.log,
169
+ grants,
170
+ };
171
+ attachRegistry(ctx, this.registry);
172
+ return wrapApp(target, this.registry, ctx);
173
+ }
174
+ /**
175
+ * Get the well-known configuration object.
176
+ * Serve this at GET /.well-known/agent-configuration.
177
+ */
178
+ getWellKnownConfig(endpointPrefix) {
179
+ return this.registry.buildWellKnownConfig(this.host.getRegistration().issuerUrl, this.host.getRegistration().name, endpointPrefix);
180
+ }
181
+ getAuditLog() {
182
+ return this.log.getAll();
183
+ }
184
+ getStats() {
185
+ const entries = this.log.getAll();
186
+ return {
187
+ agentId: this.identity.agentId,
188
+ agentName: this.identity.registration.agentName,
189
+ hostname: this.identity.registration.hostname,
190
+ totalCalls: entries.length,
191
+ successfulCalls: entries.filter((e) => e.result === "success").length,
192
+ deniedCalls: entries.filter((e) => e.result === "denied").length,
193
+ errorCalls: entries.filter((e) => e.result === "error").length,
194
+ registeredAt: this.identity.registration.registeredAt,
195
+ };
196
+ }
197
+ /**
198
+ * Export all audit entries via the configured exporter, then clear the log.
199
+ * If no exporter configured, the log is just cleared.
200
+ */
201
+ async drain(exporter) {
202
+ return this.log.drain(exporter ?? this.exporter);
203
+ }
204
+ }
90
205
  //# sourceMappingURL=chain.js.map
package/dist/chain.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"chain.js","sourceRoot":"","sources":["../src/chain.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chain.js","sourceRoot":"","sources":["../src/chain.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ed25519.d.ts","sourceRoot":"","sources":["../../src/crypto/ed25519.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAyD,KAAK,MAAM,EAAE,MAAM,YAAY,CAAC;AAIhG,MAAM,MAAM,SAAS,GAAG;IACpB,GAAG,EAAE,OAAO,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,UAAU,CAAC,CAAC,SAAS,UAAU,GAAG,UAAU,IAAI;IACxD,MAAM,EAAE,SAAS,CAAC;IAClB,OAAO,EAAE,CAAC,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC3B,WAAW,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACvB,IAAI,EAAE,UAAU,EAAE,CAAC;CACtB,CAAC;AAIF,wBAAsB,eAAe,IAAI,OAAO,CAAC;IAC7C,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,EAAE,SAAS,CAAC;CACzB,CAAC,CAOD;AAID,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAE5E;AAED,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAE7E;AAED,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,CAW5E;AAED,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,CAW7E;AAID;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM,CAO5D;AAQD;;;GAGG;AACH,wBAAsB,OAAO,CAAC,CAAC,SAAS,UAAU,EAC9C,OAAO,EAAE,CAAC,EACV,UAAU,EAAE,SAAS,EACrB,GAAG,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,CAAC,CAcjB;AASD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS,UAAU,GAAG,UAAU,EAC7D,KAAK,EAAE,MAAM,GACd,UAAU,CAAC,CAAC,CAAC,CAwBf;AAID;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,CAAC,SAAS,UAAU,GAAG,UAAU,EACtE,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,gBAAgB,GACvB,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAyBxB"}
1
+ {"version":3,"file":"ed25519.d.ts","sourceRoot":"","sources":["../../src/crypto/ed25519.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAyD,KAAK,MAAM,EAAE,MAAM,YAAY,CAAC;AAIhG,MAAM,MAAM,SAAS,GAAG;IACpB,GAAG,EAAE,OAAO,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,UAAU,CAAC,CAAC,SAAS,UAAU,GAAG,UAAU,IAAI;IACxD,MAAM,EAAE,SAAS,CAAC;IAClB,OAAO,EAAE,CAAC,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC3B,WAAW,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACvB,IAAI,EAAE,UAAU,EAAE,CAAC;CACtB,CAAC;AAIF,wBAAsB,eAAe,IAAI,OAAO,CAAC;IAC7C,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,EAAE,SAAS,CAAC;CACzB,CAAC,CAOD;AAID,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAE5E;AAED,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAE7E;AAED,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,CAW5E;AAED,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,CAW7E;AAID;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM,CAO5D;AAQD;;;GAGG;AACH,wBAAsB,OAAO,CAAC,CAAC,SAAS,UAAU,EAC9C,OAAO,EAAE,CAAC,EACV,UAAU,EAAE,SAAS,EACrB,GAAG,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,CAAC,CAcjB;AAUD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS,UAAU,GAAG,UAAU,EAC7D,KAAK,EAAE,MAAM,GACd,UAAU,CAAC,CAAC,CAAC,CAwBf;AAID;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,CAAC,SAAS,UAAU,GAAG,UAAU,EACtE,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,gBAAgB,GACvB,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAyBxB"}
@@ -66,7 +66,8 @@ export async function signJwt(payload, privateKey, typ) {
66
66
  function isJwtHeader(value) {
67
67
  if (!isObject(value))
68
68
  return false;
69
- return value["alg"] === "EdDSA" && value["typ"] === "agent+jwt";
69
+ const typ = value["typ"];
70
+ return value["alg"] === "EdDSA" && (typ === "agent+jwt" || typ === "host+jwt");
70
71
  }
71
72
  /**
72
73
  * Decode a JWT without verifying its signature.
@@ -1 +1 @@
1
- {"version":3,"file":"ed25519.js","sourceRoot":"","sources":["../../src/crypto/ed25519.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ed25519.js","sourceRoot":"","sources":["../../src/crypto/ed25519.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,QAAQ,EAAE,SAAS,EAAe,MAAM,YAAY,CAAC;AAmChG,iFAAiF;AAEjF,MAAM,CAAC,KAAK,UAAU,eAAe;IAIjC,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,WAAW,CAC3C,SAAgC,EAChC,IAAI,EACJ,CAAC,MAAM,EAAE,QAAQ,CAAC,CACJ,CAAC;IACnB,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC;AAC5E,CAAC;AAED,iFAAiF;AAEjF,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,GAAc;IACnD,OAAO,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,GAAc;IACpD,OAAO,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,GAAe;IACpD,IAAI,GAAG,CAAC,GAAG,KAAK,KAAK,IAAI,GAAG,CAAC,GAAG,KAAK,SAAS,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QACvD,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;IACpF,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,SAAS,CAC1B,KAAK,EACL,GAAG,EACH,EAAE,IAAI,EAAE,SAAS,EAAyB,EAC1C,IAAI,EACJ,CAAC,QAAQ,CAAC,CACb,CAAC;AACN,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,GAAe;IACrD,IAAI,GAAG,CAAC,GAAG,KAAK,KAAK,IAAI,GAAG,CAAC,GAAG,KAAK,SAAS,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QACjE,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;IAC5F,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,SAAS,CAC1B,KAAK,EACL,GAAG,EACH,EAAE,IAAI,EAAE,SAAS,EAAyB,EAC1C,IAAI,EACJ,CAAC,MAAM,CAAC,CACX,CAAC;AACN,CAAC;AAED,iFAAiF;AAEjF;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,GAAe;IAChD,IAAI,GAAG,CAAC,GAAG,KAAK,KAAK,IAAI,GAAG,CAAC,GAAG,KAAK,SAAS,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QACvD,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACtE,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IAC3E,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,CAAC;IAC7D,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC;AACjC,CAAC;AAED,iFAAiF;AAEjF,SAAS,aAAa,CAAC,GAAW;IAC9B,OAAO,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CACzB,OAAU,EACV,UAAqB,EACrB,GAAW;IAEX,MAAM,MAAM,GAAc,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;IAChD,MAAM,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IAC5C,MAAM,cAAc,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IAC9C,MAAM,YAAY,GAAG,GAAG,aAAa,IAAI,cAAc,EAAE,CAAC;IAE1D,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CACrC,SAAgC,EAChC,UAAU,EACV,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,0BAA0B;KACpE,CAAC;IAEF,MAAM,GAAG,GAAG,eAAe,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;IACtD,OAAO,GAAG,YAAY,IAAI,GAAG,EAAE,CAAC;AACpC,CAAC;AAED,gFAAgF;AAEhF,SAAS,WAAW,CAAC,KAAc;IAC/B,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACnC,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;IACzB,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,OAAO,IAAI,CAAC,GAAG,KAAK,WAAW,IAAI,GAAG,KAAK,UAAU,CAAC,CAAC;AACnF,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAC3B,KAAa;IAEb,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC/B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,CAAC,SAAS,EAAE,UAAU,EAAE,SAAS,CAAC,GAAG,KAAiC,CAAC;IAE7E,MAAM,SAAS,GAAG,SAAS,CAAU,eAAe,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAClF,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;IAC7E,CAAC;IAED,MAAM,UAAU,GAAG,SAAS,CAAU,eAAe,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IACpF,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO;QACH,MAAM,EAAE,SAAS;QACjB,OAAO,EAAE,UAAe;QACxB,YAAY,EAAE,GAAG,SAAS,IAAI,UAAU,EAAE;QAC1C,SAAS;KACZ,CAAC;AACN,CAAC;AAED,iFAAiF;AAEjF;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACpC,KAAa,EACb,SAAoB,EACpB,IAAsB;IAEtB,MAAM,OAAO,GAAG,eAAe,CAAI,KAAK,CAAC,CAAC;IAE1C,IAAI,OAAO,CAAC,MAAM,CAAC,GAAG,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,+BAA+B,IAAI,CAAC,WAAW,WAAW,OAAO,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC;IACrG,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,CAAC,GAAG,KAAK,OAAO,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,4CAA4C,OAAO,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC;IACvF,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,UAAU,CAAC,eAAe,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;IACpE,MAAM,UAAU,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAElE,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CACpC,SAAgC,EAChC,SAAS,EACT,QAAQ,EACR,UAAU,CAAC,0BAA0B;KACxC,CAAC;IAEF,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;IACnF,CAAC;IAED,OAAO,OAAO,CAAC;AACnB,CAAC"}
@@ -1,4 +1,4 @@
1
- export type JwtTyp = "agent+jwt";
1
+ export type JwtTyp = "agent+jwt" | "host+jwt";
2
2
  export declare function base64UrlEncode(buffer: Buffer | Uint8Array): string;
3
3
  export declare function base64UrlDecode(str: string): Buffer;
4
4
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/crypto/utils.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,MAAM,GAAG,WAAW,CAAC;AAEjC,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,MAAM,CAMnE;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAGnD;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAGjD;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAIxD;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzE;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,CAE7C"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/crypto/utils.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,MAAM,GAAG,WAAW,GAAG,UAAU,CAAC;AAE9C,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,MAAM,CAMnE;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAGnD;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAGjD;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAIxD;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzE;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,CAE7C"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * HostIdentity — the user's identity anchor for one app.
3
+ *
4
+ * A Host holds an Ed25519 keypair. Its JWK thumbprint is the stable Host ID.
5
+ * It signs host+jwt tokens for management operations (registering agents,
6
+ * revoking, rotating keys) against an agent-auth compliant server.
7
+ *
8
+ * Security properties:
9
+ * - Private key is non-extractable by default (stays in process memory)
10
+ * - Thumbprint (Host ID) is derived from the public key — cryptographically stable
11
+ * - On process restart, a new keypair is generated → new Host ID (key rotation)
12
+ * - If the user needs a stable identity across restarts, they persist and reload
13
+ * the private key via HostIdentity.fromPrivateKeyJwk()
14
+ */
15
+ import type { HostJwtClaims } from "../types/protocol.js";
16
+ export type HostConfig = {
17
+ name: string;
18
+ issuerUrl: string;
19
+ encryptionKey?: string;
20
+ };
21
+ export type HostRegistration = {
22
+ hostId: string;
23
+ name: string;
24
+ issuerUrl: string;
25
+ publicKeyJwk: JsonWebKey;
26
+ thumbprint: string;
27
+ createdAt: number;
28
+ };
29
+ export declare class HostIdentity {
30
+ private readonly privateKey;
31
+ private readonly registration;
32
+ private readonly store;
33
+ /** The stable Host ID — the SHA-256 JWK thumbprint of the public key. */
34
+ readonly hostId: string;
35
+ private constructor();
36
+ /**
37
+ * Create a new HostIdentity with a freshly generated Ed25519 keypair.
38
+ * Each call produces a different keypair (and therefore a different hostId).
39
+ */
40
+ static create(config: HostConfig): Promise<HostIdentity>;
41
+ /**
42
+ * Restore a HostIdentity from both private and public key JWKs.
43
+ * Use this for stable identity across restarts.
44
+ */
45
+ static fromKeyPair(privateKeyJwk: JsonWebKey, publicKeyJwk: JsonWebKey, config: HostConfig): Promise<HostIdentity>;
46
+ /**
47
+ * Export the private key as JWK so the caller can persist it.
48
+ * The caller is responsible for securing this value.
49
+ */
50
+ exportPrivateKeyJwk(): Promise<JsonWebKey>;
51
+ /**
52
+ * Sign a 60-second host+jwt for management operations.
53
+ *
54
+ * @param extra Optional additional claims to include (e.g. agent_public_key for registration)
55
+ */
56
+ signJwt(extra?: Partial<HostJwtClaims>): Promise<string>;
57
+ /**
58
+ * Sign a host+jwt that embeds the agent's public key.
59
+ * Used when calling POST /agent/register on an agent-auth server.
60
+ */
61
+ signAgentRegistrationJwt(agentPublicKeyJwk: JsonWebKey): Promise<string>;
62
+ getPublicKeyJwk(): JsonWebKey;
63
+ getRegistration(): HostRegistration;
64
+ get thumbprint(): string;
65
+ }
66
+ //# sourceMappingURL=host-identity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host-identity.d.ts","sourceRoot":"","sources":["../../src/host/host-identity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAaH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAK1D,MAAM,MAAM,UAAU,GAAG;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,UAAU,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,qBAAa,YAAY;IAKjB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,KAAK;IAN1B,yEAAyE;IACzE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB,OAAO;IAQP;;;OAGG;WACU,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC;IAmB9D;;;OAGG;WACU,WAAW,CACpB,aAAa,EAAE,UAAU,EACzB,YAAY,EAAE,UAAU,EACxB,MAAM,EAAE,UAAU,GACnB,OAAO,CAAC,YAAY,CAAC;IAkBxB;;;OAGG;IACG,mBAAmB,IAAI,OAAO,CAAC,UAAU,CAAC;IAIhD;;;;OAIG;IACG,OAAO,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAgB9D;;;OAGG;IACG,wBAAwB,CAAC,iBAAiB,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAI9E,eAAe,IAAI,UAAU;IAI7B,eAAe,IAAI,gBAAgB;IAInC,IAAI,UAAU,IAAI,MAAM,CAEvB;CACJ"}
@@ -0,0 +1,109 @@
1
+ /**
2
+ * HostIdentity — the user's identity anchor for one app.
3
+ *
4
+ * A Host holds an Ed25519 keypair. Its JWK thumbprint is the stable Host ID.
5
+ * It signs host+jwt tokens for management operations (registering agents,
6
+ * revoking, rotating keys) against an agent-auth compliant server.
7
+ *
8
+ * Security properties:
9
+ * - Private key is non-extractable by default (stays in process memory)
10
+ * - Thumbprint (Host ID) is derived from the public key — cryptographically stable
11
+ * - On process restart, a new keypair is generated → new Host ID (key rotation)
12
+ * - If the user needs a stable identity across restarts, they persist and reload
13
+ * the private key via HostIdentity.fromPrivateKeyJwk()
14
+ */
15
+ import { randomBytes } from "node:crypto";
16
+ import { generateKeyPair, exportPublicKeyJwk, exportPrivateKeyJwk, importPrivateKeyJwk, computeJwkThumbprint, signJwt, } from "../crypto/ed25519.js";
17
+ import { base64UrlEncode } from "../crypto/utils.js";
18
+ import { EncryptedStore } from "../memory/encrypted-store.js";
19
+ const TOKEN_TTL_SECONDS = 60;
20
+ const STORE_KEY = "host:identity";
21
+ export class HostIdentity {
22
+ constructor(privateKey, registration, store) {
23
+ this.privateKey = privateKey;
24
+ this.registration = registration;
25
+ this.store = store;
26
+ this.hostId = registration.hostId;
27
+ }
28
+ /**
29
+ * Create a new HostIdentity with a freshly generated Ed25519 keypair.
30
+ * Each call produces a different keypair (and therefore a different hostId).
31
+ */
32
+ static async create(config) {
33
+ const store = EncryptedStore.create(config.encryptionKey);
34
+ const { publicKey, privateKey } = await generateKeyPair();
35
+ const publicKeyJwk = await exportPublicKeyJwk(publicKey);
36
+ const thumbprint = computeJwkThumbprint(publicKeyJwk);
37
+ const registration = {
38
+ hostId: thumbprint,
39
+ name: config.name,
40
+ issuerUrl: config.issuerUrl,
41
+ publicKeyJwk,
42
+ thumbprint,
43
+ createdAt: Date.now(),
44
+ };
45
+ store.set(STORE_KEY, registration);
46
+ return new HostIdentity(privateKey, registration, store);
47
+ }
48
+ /**
49
+ * Restore a HostIdentity from both private and public key JWKs.
50
+ * Use this for stable identity across restarts.
51
+ */
52
+ static async fromKeyPair(privateKeyJwk, publicKeyJwk, config) {
53
+ const store = EncryptedStore.create(config.encryptionKey);
54
+ const privateKey = await importPrivateKeyJwk(privateKeyJwk);
55
+ const thumbprint = computeJwkThumbprint(publicKeyJwk);
56
+ const registration = {
57
+ hostId: thumbprint,
58
+ name: config.name,
59
+ issuerUrl: config.issuerUrl,
60
+ publicKeyJwk,
61
+ thumbprint,
62
+ createdAt: Date.now(),
63
+ };
64
+ store.set(STORE_KEY, registration);
65
+ return new HostIdentity(privateKey, registration, store);
66
+ }
67
+ /**
68
+ * Export the private key as JWK so the caller can persist it.
69
+ * The caller is responsible for securing this value.
70
+ */
71
+ async exportPrivateKeyJwk() {
72
+ return exportPrivateKeyJwk(this.privateKey);
73
+ }
74
+ /**
75
+ * Sign a 60-second host+jwt for management operations.
76
+ *
77
+ * @param extra Optional additional claims to include (e.g. agent_public_key for registration)
78
+ */
79
+ async signJwt(extra) {
80
+ const nowSeconds = Math.floor(Date.now() / 1000);
81
+ const jti = base64UrlEncode(randomBytes(16));
82
+ const claims = {
83
+ iss: this.registration.thumbprint,
84
+ aud: this.registration.issuerUrl,
85
+ iat: nowSeconds,
86
+ exp: nowSeconds + TOKEN_TTL_SECONDS,
87
+ jti,
88
+ ...extra,
89
+ };
90
+ return signJwt(claims, this.privateKey, "host+jwt");
91
+ }
92
+ /**
93
+ * Sign a host+jwt that embeds the agent's public key.
94
+ * Used when calling POST /agent/register on an agent-auth server.
95
+ */
96
+ async signAgentRegistrationJwt(agentPublicKeyJwk) {
97
+ return this.signJwt({ agent_public_key: agentPublicKeyJwk });
98
+ }
99
+ getPublicKeyJwk() {
100
+ return this.registration.publicKeyJwk;
101
+ }
102
+ getRegistration() {
103
+ return this.registration;
104
+ }
105
+ get thumbprint() {
106
+ return this.registration.thumbprint;
107
+ }
108
+ }
109
+ //# sourceMappingURL=host-identity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host-identity.js","sourceRoot":"","sources":["../../src/host/host-identity.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,9 +1,22 @@
1
1
  export { AgentsChain } from "./chain.js";
2
+ export { AppChain } from "./chain.js";
3
+ export { HostIdentity } from "./host/host-identity.js";
4
+ export type { HostConfig, HostRegistration } from "./host/host-identity.js";
5
+ export { CapabilityRegistry } from "./app/capability-registry.js";
6
+ export { wrapApp } from "./app/app-wrapper.js";
7
+ export type { AppInterceptContext } from "./app/app-wrapper.js";
8
+ export { ConsoleAuditExporter, HttpAuditExporter } from "./audit/audit-exporter.js";
9
+ export type { AuditExporter, HttpAuditExporterConfig } from "./audit/audit-exporter.js";
2
10
  export { ChainAuthError } from "./errors/chain-error.js";
3
11
  export type { ChainErrorCode } from "./errors/chain-error.js";
4
- export type { AgentConfig, ChainStats, AuditSnapshot } from "./types/chain.js";
12
+ export type { AgentConfig, ChainStats, AuditSnapshot, AppChainConfig } from "./types/chain.js";
5
13
  export type { AuditEntry, AuditResult } from "./types/audit.js";
6
14
  export type { RegisteredAgent, CapabilityGrant, CapabilityConstraints, ConstraintOperator, ConstraintValue, ConstraintPrimitive, } from "./types/identity.js";
15
+ export type { Capability, AgentContext, GrantConstraints, JsonSchemaObject, } from "./types/capabilities.js";
16
+ export type { ConstraintOperator as CapabilityConstraintOperator, ConstraintValue as CapabilityConstraintValue, ConstraintPrimitive as CapabilityConstraintPrimitive, } from "./types/capabilities.js";
17
+ export type { HostJwtClaims, AgentJwtClaims, AgentConfiguration, GrantStatus, ResolvedGrant, } from "./types/protocol.js";
18
+ export type { JtiPersistenceAdapter } from "./memory/jti-cache.js";
19
+ export type { VerifierConfig, VerifiedCallContext } from "./auth/token-verifier.js";
7
20
  export { generateKeyPair, exportPublicKeyJwk, exportPrivateKeyJwk, importPublicKeyJwk, computeJwkThumbprint, signJwt, verifyJwtSignature, decodeJwtUnsafe, } from "./crypto/ed25519.js";
8
21
  export { generateId, generateAgentId, base64UrlEncode, base64UrlDecode } from "./crypto/utils.js";
9
22
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,YAAY,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC/E,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAChE,YAAY,EACR,eAAe,EACf,eAAe,EACf,qBAAqB,EACrB,kBAAkB,EAClB,eAAe,EACf,mBAAmB,GACtB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACH,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACpB,OAAO,EACP,kBAAkB,EAClB,eAAe,GAClB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAItC,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAI5E,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,YAAY,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAIhE,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACpF,YAAY,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAIxF,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,YAAY,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAI9D,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAI/F,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAIhE,YAAY,EACR,eAAe,EACf,eAAe,EACf,qBAAqB,EACrB,kBAAkB,EAClB,eAAe,EACf,mBAAmB,GACtB,MAAM,qBAAqB,CAAC;AAI7B,YAAY,EACR,UAAU,EACV,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,GACnB,MAAM,yBAAyB,CAAC;AAGjC,YAAY,EACR,kBAAkB,IAAI,4BAA4B,EAClD,eAAe,IAAI,yBAAyB,EAC5C,mBAAmB,IAAI,6BAA6B,GACvD,MAAM,yBAAyB,CAAC;AAIjC,YAAY,EACR,aAAa,EACb,cAAc,EACd,kBAAkB,EAClB,WAAW,EACX,aAAa,GAChB,MAAM,qBAAqB,CAAC;AAI7B,YAAY,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAInE,YAAY,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAIpF,OAAO,EACH,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACpB,OAAO,EACP,kBAAkB,EAClB,eAAe,GAClB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC"}
package/dist/index.js CHANGED
@@ -1,5 +1,16 @@
1
+ // ─── Main classes ─────────────────────────────────────────────────────────────
1
2
  export { AgentsChain } from "./chain.js";
3
+ export { AppChain } from "./chain.js";
4
+ // ─── Host layer ───────────────────────────────────────────────────────────────
5
+ export { HostIdentity } from "./host/host-identity.js";
6
+ // ─── App wrapper ──────────────────────────────────────────────────────────────
7
+ export { CapabilityRegistry } from "./app/capability-registry.js";
8
+ export { wrapApp } from "./app/app-wrapper.js";
9
+ // ─── Audit exporters ─────────────────────────────────────────────────────────
10
+ export { ConsoleAuditExporter, HttpAuditExporter } from "./audit/audit-exporter.js";
11
+ // ─── Errors ───────────────────────────────────────────────────────────────────
2
12
  export { ChainAuthError } from "./errors/chain-error.js";
13
+ // ─── Crypto utilities ─────────────────────────────────────────────────────────
3
14
  export { generateKeyPair, exportPublicKeyJwk, exportPrivateKeyJwk, importPublicKeyJwk, computeJwkThumbprint, signJwt, verifyJwtSignature, decodeJwtUnsafe, } from "./crypto/ed25519.js";
4
15
  export { generateId, generateAgentId, base64UrlEncode, base64UrlDecode } from "./crypto/utils.js";
5
16
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAazD,OAAO,EACH,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACpB,OAAO,EACP,kBAAkB,EAClB,eAAe,GAClB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,iFAAiF;AAEjF,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,iFAAiF;AAEjF,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAGvD,iFAAiF;AAEjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAG/C,gFAAgF;AAEhF,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAGpF,iFAAiF;AAEjF,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAwDzD,iFAAiF;AAEjF,OAAO,EACH,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACpB,OAAO,EACP,kBAAkB,EAClB,eAAe,GAClB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * JtiCache — in-memory JWT ID replay protection.
2
+ * JtiCache — JWT ID replay protection with optional persistence adapter.
3
3
  *
4
4
  * Security properties:
5
5
  * - Every agent+jwt carries a unique `jti` (JWT ID).
@@ -10,13 +10,40 @@
10
10
  *
11
11
  * The window is 90 seconds to comfortably cover the 60-second token max TTL
12
12
  * plus clock skew tolerance.
13
+ *
14
+ * Persistence adapter (optional):
15
+ * By default, the cache is in-memory and resets on process restart (which is
16
+ * safe — a new keypair = new identity = old tokens invalid anyway).
17
+ *
18
+ * If you need replay protection to survive restarts (e.g. shared deployment),
19
+ * provide a JtiPersistenceAdapter backed by Redis or your DB.
20
+ * The package does NOT ship a Redis client — the user provides it.
21
+ *
22
+ * Example Redis adapter:
23
+ * const adapter: JtiPersistenceAdapter = {
24
+ * has: (key) => redis.exists(key).then(Boolean),
25
+ * set: (key, ttlMs) => redis.set(key, "1", "PX", ttlMs).then(() => {}),
26
+ * };
13
27
  */
28
+ /**
29
+ * Interface for backing the JTI cache with a persistent store (e.g. Redis).
30
+ * Implement this interface and pass it to JtiCache to survive process restarts.
31
+ */
32
+ export interface JtiPersistenceAdapter {
33
+ /** Returns true if the key exists (and has not expired). */
34
+ has(key: string): Promise<boolean>;
35
+ /** Store the key with the given TTL in milliseconds. */
36
+ set(key: string, ttlMs: number): Promise<void>;
37
+ }
14
38
  export declare class JtiCache {
15
39
  /** 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. */
40
+ private readonly inMemory;
41
+ private readonly adapter?;
42
+ constructor(adapter?: JtiPersistenceAdapter);
43
+ assert(agentId: string, jti: string): Promise<void>;
44
+ /** Remove all in-memory entries whose expiry has passed. */
19
45
  private evictExpired;
46
+ /** Number of in-memory entries (does not reflect persistent store). */
20
47
  get size(): number;
21
48
  }
22
49
  //# sourceMappingURL=jti-cache.d.ts.map
@@ -1 +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"}
1
+ {"version":3,"file":"jti-cache.d.ts","sourceRoot":"","sources":["../../src/memory/jti-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAMH;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IAClC,4DAA4D;IAC5D,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACnC,wDAAwD;IACxD,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAClD;AAED,qBAAa,QAAQ;IACjB,4DAA4D;IAC5D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA6B;IACtD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAwB;gBAErC,OAAO,CAAC,EAAE,qBAAqB;IAIrC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA2BzD,4DAA4D;IAC5D,OAAO,CAAC,YAAY;IASpB,uEAAuE;IACvE,IAAI,IAAI,IAAI,MAAM,CAEjB;CACJ"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * JtiCache — in-memory JWT ID replay protection.
2
+ * JtiCache — JWT ID replay protection with optional persistence adapter.
3
3
  *
4
4
  * Security properties:
5
5
  * - Every agent+jwt carries a unique `jti` (JWT ID).
@@ -10,34 +10,61 @@
10
10
  *
11
11
  * The window is 90 seconds to comfortably cover the 60-second token max TTL
12
12
  * plus clock skew tolerance.
13
+ *
14
+ * Persistence adapter (optional):
15
+ * By default, the cache is in-memory and resets on process restart (which is
16
+ * safe — a new keypair = new identity = old tokens invalid anyway).
17
+ *
18
+ * If you need replay protection to survive restarts (e.g. shared deployment),
19
+ * provide a JtiPersistenceAdapter backed by Redis or your DB.
20
+ * The package does NOT ship a Redis client — the user provides it.
21
+ *
22
+ * Example Redis adapter:
23
+ * const adapter: JtiPersistenceAdapter = {
24
+ * has: (key) => redis.exists(key).then(Boolean),
25
+ * set: (key, ttlMs) => redis.set(key, "1", "PX", ttlMs).then(() => {}),
26
+ * };
13
27
  */
14
28
  import { ChainAuthError } from "../errors/chain-error.js";
15
29
  const REPLAY_WINDOW_MS = 90000; // 90 seconds
16
30
  export class JtiCache {
17
- constructor() {
31
+ constructor(adapter) {
18
32
  /** Map of "<agentId>:<jti>" → expiry timestamp (Unix ms) */
19
- this.cache = new Map();
33
+ this.inMemory = new Map();
34
+ this.adapter = adapter;
20
35
  }
21
- assert(agentId, jti) {
22
- this.evictExpired();
36
+ async assert(agentId, jti) {
23
37
  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`);
38
+ if (this.adapter) {
39
+ // Persistent path delegate to adapter
40
+ const exists = await this.adapter.has(cacheKey);
41
+ if (exists) {
42
+ throw new ChainAuthError("token_replayed", `JWT has already been used (jti="${jti}") — replay attack detected`);
43
+ }
44
+ await this.adapter.set(cacheKey, REPLAY_WINDOW_MS);
45
+ }
46
+ else {
47
+ // In-memory path
48
+ this.evictExpired();
49
+ const existing = this.inMemory.get(cacheKey);
50
+ if (existing !== undefined) {
51
+ throw new ChainAuthError("token_replayed", `JWT has already been used (jti="${jti}") — replay attack detected`);
52
+ }
53
+ this.inMemory.set(cacheKey, Date.now() + REPLAY_WINDOW_MS);
27
54
  }
28
- this.cache.set(cacheKey, Date.now() + REPLAY_WINDOW_MS);
29
55
  }
30
- /** Remove all entries whose expiry has passed. */
56
+ /** Remove all in-memory entries whose expiry has passed. */
31
57
  evictExpired() {
32
58
  const now = Date.now();
33
- for (const [key, expiry] of this.cache) {
59
+ for (const [key, expiry] of this.inMemory) {
34
60
  if (expiry < now) {
35
- this.cache.delete(key);
61
+ this.inMemory.delete(key);
36
62
  }
37
63
  }
38
64
  }
65
+ /** Number of in-memory entries (does not reflect persistent store). */
39
66
  get size() {
40
- return this.cache.size;
67
+ return this.inMemory.size;
41
68
  }
42
69
  }
43
70
  //# sourceMappingURL=jti-cache.js.map
@@ -1 +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"}
1
+ {"version":3,"file":"jti-cache.js","sourceRoot":"","sources":["../../src/memory/jti-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D,MAAM,gBAAgB,GAAG,KAAM,CAAC,CAAC,aAAa;AAa9C,MAAM,OAAO,QAAQ;IAKjB,YAAY,OAA+B;QAJ3C,4DAA4D;QAC3C,aAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;QAIlD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAe,EAAE,GAAW;QACrC,MAAM,QAAQ,GAAG,GAAG,OAAO,IAAI,GAAG,EAAE,CAAC;QAErC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,wCAAwC;YACxC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAChD,IAAI,MAAM,EAAE,CAAC;gBACT,MAAM,IAAI,cAAc,CACpB,gBAAgB,EAChB,mCAAmC,GAAG,6BAA6B,CACtE,CAAC;YACN,CAAC;YACD,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;QACvD,CAAC;aAAM,CAAC;YACJ,iBAAiB;YACjB,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC7C,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBACzB,MAAM,IAAI,cAAc,CACpB,gBAAgB,EAChB,mCAAmC,GAAG,6BAA6B,CACtE,CAAC;YACN,CAAC;YACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,gBAAgB,CAAC,CAAC;QAC/D,CAAC;IACL,CAAC;IAED,4DAA4D;IACpD,YAAY;QAChB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACxC,IAAI,MAAM,GAAG,GAAG,EAAE,CAAC;gBACf,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC9B,CAAC;QACL,CAAC;IACL,CAAC;IAED,uEAAuE;IACvE,IAAI,IAAI;QACJ,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC9B,CAAC;CACJ"}