@moltzap/identity 2026.902.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +19 -0
  3. package/README.md +31 -0
  4. package/bin/moltzap-registry +9 -0
  5. package/dist/agent-card.d.ts +69 -0
  6. package/dist/agent-card.d.ts.map +1 -0
  7. package/dist/agent-card.js +257 -0
  8. package/dist/agent-card.js.map +1 -0
  9. package/dist/agent-key.d.ts +77 -0
  10. package/dist/agent-key.d.ts.map +1 -0
  11. package/dist/agent-key.js +251 -0
  12. package/dist/agent-key.js.map +1 -0
  13. package/dist/authenticated-http.d.ts +44 -0
  14. package/dist/authenticated-http.d.ts.map +1 -0
  15. package/dist/authenticated-http.js +226 -0
  16. package/dist/authenticated-http.js.map +1 -0
  17. package/dist/canonical-json.d.ts +40 -0
  18. package/dist/canonical-json.d.ts.map +1 -0
  19. package/dist/canonical-json.js +399 -0
  20. package/dist/canonical-json.js.map +1 -0
  21. package/dist/http-errors.d.ts +115 -0
  22. package/dist/http-errors.d.ts.map +1 -0
  23. package/dist/http-errors.js +55 -0
  24. package/dist/http-errors.js.map +1 -0
  25. package/dist/http-signature.d.ts +60 -0
  26. package/dist/http-signature.d.ts.map +1 -0
  27. package/dist/http-signature.js +337 -0
  28. package/dist/http-signature.js.map +1 -0
  29. package/dist/identifiers.d.ts +32 -0
  30. package/dist/identifiers.d.ts.map +1 -0
  31. package/dist/identifiers.js +55 -0
  32. package/dist/identifiers.js.map +1 -0
  33. package/dist/index.d.ts +33 -0
  34. package/dist/index.d.ts.map +1 -0
  35. package/dist/index.js +34 -0
  36. package/dist/index.js.map +1 -0
  37. package/dist/registry/admission.d.ts +27 -0
  38. package/dist/registry/admission.d.ts.map +1 -0
  39. package/dist/registry/admission.js +107 -0
  40. package/dist/registry/admission.js.map +1 -0
  41. package/dist/registry/client.d.ts +20 -0
  42. package/dist/registry/client.d.ts.map +1 -0
  43. package/dist/registry/client.js +250 -0
  44. package/dist/registry/client.js.map +1 -0
  45. package/dist/registry/contract.d.ts +213 -0
  46. package/dist/registry/contract.d.ts.map +1 -0
  47. package/dist/registry/contract.js +132 -0
  48. package/dist/registry/contract.js.map +1 -0
  49. package/dist/registry/http.d.ts +27 -0
  50. package/dist/registry/http.d.ts.map +1 -0
  51. package/dist/registry/http.js +258 -0
  52. package/dist/registry/http.js.map +1 -0
  53. package/dist/registry/migrations/0001_registry.d.ts +6 -0
  54. package/dist/registry/migrations/0001_registry.d.ts.map +1 -0
  55. package/dist/registry/migrations/0001_registry.js +36 -0
  56. package/dist/registry/migrations/0001_registry.js.map +1 -0
  57. package/dist/registry/rpc.d.ts +138 -0
  58. package/dist/registry/rpc.d.ts.map +1 -0
  59. package/dist/registry/rpc.js +85 -0
  60. package/dist/registry/rpc.js.map +1 -0
  61. package/dist/registry/server.d.ts +52 -0
  62. package/dist/registry/server.d.ts.map +1 -0
  63. package/dist/registry/server.js +157 -0
  64. package/dist/registry/server.js.map +1 -0
  65. package/dist/registry/storage.d.ts +62 -0
  66. package/dist/registry/storage.d.ts.map +1 -0
  67. package/dist/registry/storage.js +341 -0
  68. package/dist/registry/storage.js.map +1 -0
  69. package/dist/registry.d.ts +34 -0
  70. package/dist/registry.d.ts.map +1 -0
  71. package/dist/registry.js +13 -0
  72. package/dist/registry.js.map +1 -0
  73. package/dist/signed-message.d.ts +54 -0
  74. package/dist/signed-message.d.ts.map +1 -0
  75. package/dist/signed-message.js +289 -0
  76. package/dist/signed-message.js.map +1 -0
  77. package/dist/version.d.ts +4 -0
  78. package/dist/version.d.ts.map +1 -0
  79. package/dist/version.js +4 -0
  80. package/dist/version.js.map +1 -0
  81. package/package.json +139 -0
@@ -0,0 +1,77 @@
1
+ /** @file Exact Ed25519 public keys and opaque private signing authority. */
2
+ import { Effect, Redacted, Schema } from "effect";
3
+ import { type CryptoKey } from "jose";
4
+ /**
5
+ * Checks the closed Ed25519 signature representation before cryptographic
6
+ * verification.
7
+ *
8
+ * The standards verifier supplies the strict verification equation. This
9
+ * boundary additionally rejects alternate point and scalar encodings that
10
+ * permissive platform verifiers may otherwise accept. The public-key Schema
11
+ * separately rejects small-order verification keys.
12
+ *
13
+ * @param signature Candidate 64-byte Ed25519 signature.
14
+ * @returns Whether its point and scalar use the single accepted encoding.
15
+ */
16
+ export declare const hasCanonicalEd25519SignatureEncoding: (signature: Uint8Array) => boolean;
17
+ /** Exact immutable Ed25519 public JWK. */
18
+ export declare const Ed25519PublicKey: Schema.brand<Schema.transform<Schema.Struct<{
19
+ crv: Schema.Literal<["Ed25519"]>;
20
+ kty: Schema.Literal<["OKP"]>;
21
+ x: Schema.filter<typeof Schema.String>;
22
+ }>, Schema.declare<Readonly<{
23
+ crv: "Ed25519";
24
+ kty: "OKP";
25
+ x: string;
26
+ }>, Readonly<{
27
+ crv: "Ed25519";
28
+ kty: "OKP";
29
+ x: string;
30
+ }>, readonly [], never>>, "Ed25519PublicKey">;
31
+ /** Validated immutable Ed25519 public JWK. */
32
+ export type Ed25519PublicKey = typeof Ed25519PublicKey.Type;
33
+ declare const Ed25519PublicKeyOperationError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
34
+ readonly _tag: "Ed25519PublicKeyOperationError";
35
+ } & Readonly<A>;
36
+ /** Reports failure to derive the standard thumbprint URI for a validated key. */
37
+ export declare class Ed25519PublicKeyOperationError extends Ed25519PublicKeyOperationError_base {
38
+ }
39
+ /**
40
+ * Derives the RFC JWK thumbprint URI for a validated Ed25519 public key.
41
+ *
42
+ * @param publicKey Validated public key.
43
+ * @returns The standard SHA-256 JWK thumbprint URI.
44
+ * @failure Ed25519PublicKeyOperationError when the JOSE implementation cannot
45
+ * derive the URI.
46
+ */
47
+ export declare const ed25519PublicKeyThumbprintUri: (publicKey: Ed25519PublicKey) => Effect.Effect<string, Ed25519PublicKeyOperationError>;
48
+ declare const agentSigningAuthorityBrand: unique symbol;
49
+ /** Opaque authority over one imported Ed25519 private key. */
50
+ export interface AgentSigningAuthority {
51
+ readonly [agentSigningAuthorityBrand]: "AgentSigningAuthority";
52
+ }
53
+ declare const InvalidAgentPrivateKeyError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
54
+ readonly _tag: "InvalidAgentPrivateKeyError";
55
+ } & Readonly<A>;
56
+ /** The supplied private-key material cannot act as an Ed25519 signer. */
57
+ export declare class InvalidAgentPrivateKeyError extends InvalidAgentPrivateKeyError_base {
58
+ }
59
+ declare const fromPkcs8: (pkcs8: Redacted.Redacted) => Effect.Effect<AgentSigningAuthority, InvalidAgentPrivateKeyError>;
60
+ declare const publicKey: (authority: AgentSigningAuthority) => Ed25519PublicKey;
61
+ /**
62
+ * Returns the non-extractable key to identity-owned signed-artifact modules.
63
+ *
64
+ * @param authority Authority whose private key is needed.
65
+ * @returns The authority's non-extractable private key.
66
+ */
67
+ export declare const agentSigningPrivateKey: (authority: AgentSigningAuthority) => CryptoKey;
68
+ /**
69
+ * Loads and identifies one Ed25519 signing authority without exposing its
70
+ * private key or a generic signing operation.
71
+ */
72
+ export declare const AgentSigningAuthority: Readonly<{
73
+ fromPkcs8: typeof fromPkcs8;
74
+ publicKey: typeof publicKey;
75
+ }>;
76
+ export {};
77
+ //# sourceMappingURL=agent-key.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-key.d.ts","sourceRoot":"","sources":["../src/agent-key.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAE5E,OAAO,EAAQ,MAAM,EAAoB,QAAQ,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC1E,OAAO,EAEL,KAAK,SAAS,EAGf,MAAM,MAAM,CAAC;AAgGd;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,oCAAoC,cACpC,UAAU,KACpB,OAUF,CAAC;AA8EF,0CAA0C;AAE1C,eAAO,MAAM,gBAAgB;;;;;SA7EtB,SAAS;SACT,KAAK;OACP,MAAM;;;;;6CAsGV,CAAC;AAEF,8CAA8C;AAE9C,MAAM,MAAM,gBAAgB,GAAG,OAAO,gBAAgB,CAAC,IAAI,CAAC;;;;AAE5D,iFAAiF;AACjF,qBAAa,8BAA+B,SAAQ,mCAEnD;CAAG;AAEJ;;;;;;;GAOG;AACH,eAAO,MAAM,6BAA6B,cAC7B,gBAAgB,KAC1B,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,8BAA8B,CAYnD,CAAC;AAEL,OAAO,CAAC,MAAM,0BAA0B,EAAE,OAAO,MAAM,CAAC;AAExD,8DAA8D;AAC9D,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,CAAC,0BAA0B,CAAC,EAAE,uBAAuB,CAAC;CAChE;;;;AAED,yEAAyE;AACzE,qBAAa,2BAA4B,SAAQ,gCAEhD;CAAG;AAiBJ,QAAA,MAAM,SAAS,UACN,QAAQ,CAAC,QAAQ,KACvB,MAAM,CAAC,MAAM,CAAC,qBAAqB,EAAE,2BAA2B,CAyC/D,CAAC;AAEL,QAAA,MAAM,SAAS,cAAe,qBAAqB,KAAG,gBACd,CAAC;AAEzC;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,cACtB,qBAAqB,KAC/B,SAAoD,CAAC;AAExD;;;GAGG;AAEH,eAAO,MAAM,qBAAqB;;;EAGhC,CAAC"}
@@ -0,0 +1,251 @@
1
+ /** @file Exact Ed25519 public keys and opaque private signing authority. */
2
+ import { Data, Effect, Either, Encoding, Redacted, Schema } from "effect";
3
+ import { calculateJwkThumbprintUri, exportJWK, importPKCS8, } from "jose";
4
+ const PUBLIC_KEY_BYTE_LENGTH = 32;
5
+ const SIGNATURE_BYTE_LENGTH = 64;
6
+ const FIELD_MODULUS = Uint8Array.from([
7
+ 0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
8
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
9
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f,
10
+ ]);
11
+ const SCALAR_ORDER = Uint8Array.from([
12
+ 0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde,
13
+ 0xf9, 0xde, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
14
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
15
+ ]);
16
+ const bytesFromHex = (value) => Uint8Array.from(Buffer.from(value, "hex"));
17
+ const SMALL_ORDER_POINTS = Object.freeze([
18
+ bytesFromHex("00".repeat(32)),
19
+ bytesFromHex(`01${"00".repeat(31)}`),
20
+ bytesFromHex("26e8958fc2b227b045c3f489f2ef98f0d5dfac05d3c63339b13802886d53fc05"),
21
+ bytesFromHex("c7176a703d4dd84fba3c0b760d10670f2a2053fa2c39ccc64ec7fd7792ac037a"),
22
+ bytesFromHex(`ec${"ff".repeat(30)}7f`),
23
+ bytesFromHex(`ed${"ff".repeat(30)}7f`),
24
+ bytesFromHex(`ee${"ff".repeat(30)}7f`),
25
+ ]);
26
+ const isLessThanLittleEndian = (value, upperBound) => {
27
+ if (value.byteLength !== upperBound.byteLength) {
28
+ return false;
29
+ }
30
+ for (let index = value.byteLength - 1; index >= 0; index -= 1) {
31
+ const valueByte = value[index];
32
+ const boundByte = upperBound[index];
33
+ if (valueByte === undefined || boundByte === undefined) {
34
+ return false;
35
+ }
36
+ if (valueByte !== boundByte) {
37
+ return valueByte < boundByte;
38
+ }
39
+ }
40
+ return false;
41
+ };
42
+ const hasCanonicalPointEncoding = (value) => {
43
+ if (value.byteLength !== PUBLIC_KEY_BYTE_LENGTH) {
44
+ return false;
45
+ }
46
+ const coordinate = Uint8Array.from(value);
47
+ const finalByte = coordinate[PUBLIC_KEY_BYTE_LENGTH - 1];
48
+ if (finalByte === undefined) {
49
+ return false;
50
+ }
51
+ coordinate[PUBLIC_KEY_BYTE_LENGTH - 1] = finalByte & 0x7f;
52
+ return isLessThanLittleEndian(coordinate, FIELD_MODULUS);
53
+ };
54
+ const encodesSmallOrderPoint = (value) => SMALL_ORDER_POINTS.some((point) => {
55
+ for (let index = 0; index < PUBLIC_KEY_BYTE_LENGTH; index += 1) {
56
+ const valueByte = value[index];
57
+ const pointByte = point[index];
58
+ if (valueByte === undefined || pointByte === undefined) {
59
+ return false;
60
+ }
61
+ const mask = index === PUBLIC_KEY_BYTE_LENGTH - 1 ? 0x7f : 0xff;
62
+ if ((valueByte & mask) !== pointByte) {
63
+ return false;
64
+ }
65
+ }
66
+ return true;
67
+ });
68
+ const hasAcceptedPublicKeyEncoding = (value) => hasCanonicalPointEncoding(value) && !encodesSmallOrderPoint(value);
69
+ const decodeAcceptedPublicKey = (value) => Either.match(Encoding.decodeBase64Url(value), {
70
+ onLeft: () => undefined,
71
+ onRight: (bytes) => Encoding.encodeBase64Url(bytes) === value &&
72
+ hasAcceptedPublicKeyEncoding(bytes)
73
+ ? bytes
74
+ : undefined,
75
+ });
76
+ /**
77
+ * Checks the closed Ed25519 signature representation before cryptographic
78
+ * verification.
79
+ *
80
+ * The standards verifier supplies the strict verification equation. This
81
+ * boundary additionally rejects alternate point and scalar encodings that
82
+ * permissive platform verifiers may otherwise accept. The public-key Schema
83
+ * separately rejects small-order verification keys.
84
+ *
85
+ * @param signature Candidate 64-byte Ed25519 signature.
86
+ * @returns Whether its point and scalar use the single accepted encoding.
87
+ */
88
+ export const hasCanonicalEd25519SignatureEncoding = (signature) => {
89
+ if (signature.byteLength !== SIGNATURE_BYTE_LENGTH) {
90
+ return false;
91
+ }
92
+ const encodedPoint = signature.subarray(0, PUBLIC_KEY_BYTE_LENGTH);
93
+ const scalar = signature.subarray(PUBLIC_KEY_BYTE_LENGTH);
94
+ return (hasCanonicalPointEncoding(encodedPoint) &&
95
+ isLessThanLittleEndian(scalar, SCALAR_ORDER));
96
+ };
97
+ const missingMember = Symbol("missingMember");
98
+ const hasExactPublicKeyNames = (value) => {
99
+ const keys = Reflect.ownKeys(value);
100
+ const names = new Set(keys);
101
+ return (keys.length === 3 && names.has("crv") && names.has("kty") && names.has("x"));
102
+ };
103
+ const readPublicKeyMember = (value, name) => {
104
+ const descriptor = Object.getOwnPropertyDescriptor(value, name);
105
+ if (descriptor === undefined ||
106
+ descriptor.enumerable !== true ||
107
+ !("value" in descriptor)) {
108
+ return missingMember;
109
+ }
110
+ return descriptor.value;
111
+ };
112
+ const hasPublicKeyMembers = (value) => {
113
+ if (!hasExactPublicKeyNames(value)) {
114
+ return false;
115
+ }
116
+ const crv = readPublicKeyMember(value, "crv");
117
+ const kty = readPublicKeyMember(value, "kty");
118
+ const x = readPublicKeyMember(value, "x");
119
+ return crv === "Ed25519" && kty === "OKP" && typeof x === "string";
120
+ };
121
+ const isFrozenPublicKey = (value) => {
122
+ try {
123
+ return (typeof value === "object" &&
124
+ value !== null &&
125
+ Object.isFrozen(value) &&
126
+ hasPublicKeyMembers(value));
127
+ // eslint-disable-next-line agent-code-guard/bare-catch -- A Schema predicate converts hostile reflection into ordinary validation failure. #ignore-sloppy-code-next-line[bare-catch]: The predicate returns false.
128
+ }
129
+ catch {
130
+ return false;
131
+ }
132
+ };
133
+ const publicKeyValueSchema = Schema.declare(isFrozenPublicKey, {
134
+ identifier: "Ed25519PublicKeyValue",
135
+ });
136
+ const publicKeyRepresentation = Schema.Struct({
137
+ crv: Schema.Literal("Ed25519"),
138
+ kty: Schema.Literal("OKP"),
139
+ x: Schema.String.pipe(Schema.filter((value) => decodeAcceptedPublicKey(value) !== undefined, {
140
+ identifier: "Ed25519PublicKeyCoordinate",
141
+ description: "Canonical non-small-order Ed25519 public-key coordinate",
142
+ })),
143
+ }).annotations({
144
+ identifier: "Ed25519PublicKeyRepresentation",
145
+ parseOptions: {
146
+ exact: true,
147
+ onExcessProperty: "error",
148
+ },
149
+ });
150
+ /** Exact immutable Ed25519 public JWK. */
151
+ // eslint-disable-next-line @typescript-eslint/naming-convention -- Effect Schemas use the public model's type name so callers import one vocabulary term.
152
+ export const Ed25519PublicKey = Schema.transform(publicKeyRepresentation, publicKeyValueSchema, {
153
+ strict: true,
154
+ decode: (value) => Object.freeze({
155
+ crv: value.crv,
156
+ kty: value.kty,
157
+ x: value.x,
158
+ }),
159
+ encode: (value) => ({
160
+ crv: value.crv,
161
+ kty: value.kty,
162
+ x: value.x,
163
+ }),
164
+ }).pipe(Schema.brand("Ed25519PublicKey"), Schema.annotations({
165
+ identifier: "Ed25519PublicKey",
166
+ description: "Exact immutable Ed25519 public JWK",
167
+ parseOptions: {
168
+ exact: true,
169
+ onExcessProperty: "error",
170
+ },
171
+ }));
172
+ /** Reports failure to derive the standard thumbprint URI for a validated key. */
173
+ export class Ed25519PublicKeyOperationError extends Data.TaggedError("Ed25519PublicKeyOperationError") {
174
+ }
175
+ /**
176
+ * Derives the RFC JWK thumbprint URI for a validated Ed25519 public key.
177
+ *
178
+ * @param publicKey Validated public key.
179
+ * @returns The standard SHA-256 JWK thumbprint URI.
180
+ * @failure Ed25519PublicKeyOperationError when the JOSE implementation cannot
181
+ * derive the URI.
182
+ */
183
+ export const ed25519PublicKeyThumbprintUri = (publicKey) => Effect.tryPromise({
184
+ try: () => calculateJwkThumbprintUri({
185
+ crv: publicKey.crv,
186
+ kty: publicKey.kty,
187
+ x: publicKey.x,
188
+ }, "sha256"),
189
+ catch: () => new Ed25519PublicKeyOperationError(),
190
+ });
191
+ /** The supplied private-key material cannot act as an Ed25519 signer. */
192
+ export class InvalidAgentPrivateKeyError extends Data.TaggedError("InvalidAgentPrivateKeyError") {
193
+ }
194
+ const authorityState = new WeakMap();
195
+ const getAuthorityState = (authority) => {
196
+ const state = authorityState.get(authority);
197
+ // eslint-disable-next-line agent-code-guard/require-assertion-rationale -- The construction invariant inserts state before this opaque value escapes.
198
+ return state;
199
+ };
200
+ const fromPkcs8 = (pkcs8) => Effect.gen(function* () {
201
+ // JOSE needs an extractable import to derive the public JWK, while the
202
+ // authority retains a separate non-extractable import.
203
+ const extractableKey = yield* Effect.tryPromise({
204
+ try: () => importPKCS8(Redacted.value(pkcs8), "Ed25519", {
205
+ extractable: true,
206
+ }),
207
+ catch: () => new InvalidAgentPrivateKeyError(),
208
+ });
209
+ const exportedKey = yield* Effect.tryPromise({
210
+ try: () => exportJWK(extractableKey),
211
+ catch: () => new InvalidAgentPrivateKeyError(),
212
+ });
213
+ const publicKey = yield* Schema.decodeUnknown(Ed25519PublicKey)({
214
+ crv: exportedKey.crv,
215
+ kty: exportedKey.kty,
216
+ x: exportedKey.x,
217
+ }, {
218
+ exact: true,
219
+ onExcessProperty: "error",
220
+ }).pipe(
221
+ // eslint-disable-next-line agent-code-guard/no-effect-error-coalescing -- The public contract intentionally represents every unusable private key with one empty error.
222
+ Effect.mapError(() => new InvalidAgentPrivateKeyError()));
223
+ const privateKey = yield* Effect.tryPromise({
224
+ try: () => importPKCS8(Redacted.value(pkcs8), "Ed25519", {
225
+ extractable: false,
226
+ }),
227
+ catch: () => new InvalidAgentPrivateKeyError(),
228
+ });
229
+ // eslint-disable-next-line agent-code-guard/require-assertion-rationale -- This assertion is safe because this module alone constructs values after inserting their WeakMap state.
230
+ const authority = Object.freeze({});
231
+ authorityState.set(authority, { privateKey, publicKey });
232
+ return authority;
233
+ });
234
+ const publicKey = (authority) => getAuthorityState(authority).publicKey;
235
+ /**
236
+ * Returns the non-extractable key to identity-owned signed-artifact modules.
237
+ *
238
+ * @param authority Authority whose private key is needed.
239
+ * @returns The authority's non-extractable private key.
240
+ */
241
+ export const agentSigningPrivateKey = (authority) => getAuthorityState(authority).privateKey;
242
+ /**
243
+ * Loads and identifies one Ed25519 signing authority without exposing its
244
+ * private key or a generic signing operation.
245
+ */
246
+ // eslint-disable-next-line @typescript-eslint/naming-convention, @typescript-eslint/no-redeclare -- The approved Effect-style API uses one name for its opaque type and capability value.
247
+ export const AgentSigningAuthority = Object.freeze({
248
+ fromPkcs8,
249
+ publicKey,
250
+ });
251
+ //# sourceMappingURL=agent-key.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-key.js","sourceRoot":"","sources":["../src/agent-key.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ /** @file Registered-agent HTTP signing, resolution, replay defense, and verification. */
2
+ import type { HttpClientRequest, HttpServerRequest } from "@effect/platform";
3
+ import { Brand, Context, Effect, Layer } from "effect";
4
+ import type { VerifiedAgentCard } from "./agent-card.js";
5
+ import type { AgentSigningAuthority } from "./agent-key.js";
6
+ import { AuthenticationFailedError, MalformedRequestError, OverloadedError, UnavailableError, VersionMismatchError } from "./http-errors.js";
7
+ import { AgentSigningError } from "./http-signature.js";
8
+ import { type AgentId as AgentIdValue } from "./identifiers.js";
9
+ import { Registry } from "./registry.js";
10
+ /** Request body and caller identity established by AuthenticatedHttp. */
11
+ export type VerifiedAgentRequest = Readonly<{
12
+ readonly callerAgentId: AgentIdValue;
13
+ readonly agentCard: VerifiedAgentCard;
14
+ readonly request: unknown;
15
+ }> & Brand.Brand<"VerifiedAgentRequest">;
16
+ type AuthenticationError = MalformedRequestError | AuthenticationFailedError | VersionMismatchError | OverloadedError | UnavailableError;
17
+ interface AuthenticatedHttpService {
18
+ readonly verifyAgentRequest: (input: {
19
+ readonly httpRequest: HttpServerRequest.HttpServerRequest;
20
+ readonly bodyBytes: Uint8Array;
21
+ }) => Effect.Effect<VerifiedAgentRequest, AuthenticationError>;
22
+ }
23
+ declare const AuthenticatedHttp_base: Context.TagClass<AuthenticatedHttp, "@moltzap/identity/AuthenticatedHttp", AuthenticatedHttpService>;
24
+ /** Registered-agent request signing and verification. */
25
+ export declare class AuthenticatedHttp extends AuthenticatedHttp_base {
26
+ static readonly signAgentRequest: typeof signAgentRequest;
27
+ static readonly verifyAgentRequest: (input: {
28
+ readonly httpRequest: HttpServerRequest.HttpServerRequest;
29
+ readonly bodyBytes: Uint8Array;
30
+ }) => Effect.Effect<VerifiedAgentRequest, AuthenticationError, AuthenticatedHttp>;
31
+ static readonly layer: (input: {
32
+ readonly liveNonceCapacity: number;
33
+ readonly agentCardCacheCapacity: number;
34
+ readonly registryLookupConcurrencyLimit: number;
35
+ }) => Layer.Layer<AuthenticatedHttp, never, Registry>;
36
+ }
37
+ declare function signAgentRequest(input: {
38
+ readonly httpRequest: HttpClientRequest.HttpClientRequest;
39
+ readonly callerAgentId: AgentIdValue;
40
+ readonly encodedRequest: unknown;
41
+ readonly signingAuthority: AgentSigningAuthority;
42
+ }): Effect.Effect<HttpClientRequest.HttpClientRequest, AgentSigningError>;
43
+ export {};
44
+ //# sourceMappingURL=authenticated-http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authenticated-http.d.ts","sourceRoot":"","sources":["../src/authenticated-http.ts"],"names":[],"mappings":"AAAA,yFAAyF;AAEzF,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EACL,KAAK,EACL,OAAO,EAEP,MAAM,EACN,KAAK,EAIN,MAAM,QAAQ,CAAC;AAChB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAG5D,OAAO,EACL,yBAAyB,EACzB,qBAAqB,EACrB,eAAe,EACf,gBAAgB,EAChB,oBAAoB,EACrB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,iBAAiB,EAGlB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAW,KAAK,OAAO,IAAI,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAGzC,yEAAyE;AACzE,MAAM,MAAM,oBAAoB,GAAG,QAAQ,CAAC;IAC1C,QAAQ,CAAC,aAAa,EAAE,YAAY,CAAC;IACrC,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B,CAAC,GACA,KAAK,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;AAEtC,KAAK,mBAAmB,GACpB,qBAAqB,GACrB,yBAAyB,GACzB,oBAAoB,GACpB,eAAe,GACf,gBAAgB,CAAC;AAErB,UAAU,wBAAwB;IAChC,QAAQ,CAAC,kBAAkB,EAAE,CAAC,KAAK,EAAE;QACnC,QAAQ,CAAC,WAAW,EAAE,iBAAiB,CAAC,iBAAiB,CAAC;QAC1D,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC;KAChC,KAAK,MAAM,CAAC,MAAM,CAAC,oBAAoB,EAAE,mBAAmB,CAAC,CAAC;CAChE;;AAED,yDAAyD;AACzD,qBAAa,iBAAkB,SAAQ,sBAES;IAC9C,MAAM,CAAC,QAAQ,CAAC,gBAAgB,0BAAoB;IAEpD,MAAM,CAAC,QAAQ,CAAC,kBAAkB,EAAE,CAAC,KAAK,EAAE;QAC1C,QAAQ,CAAC,WAAW,EAAE,iBAAiB,CAAC,iBAAiB,CAAC;QAC1D,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC;KAChC,KAAK,MAAM,CAAC,MAAM,CACjB,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,CAClB,CAGC;IAEF,MAAM,CAAC,QAAQ,CAAC,KAAK,UAAW;QAC9B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;QACnC,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAC;QACxC,QAAQ,CAAC,8BAA8B,EAAE,MAAM,CAAC;KACjD,KAAG,KAAK,CAAC,KAAK,CAAC,iBAAiB,EAAE,KAAK,EAAE,QAAQ,CAAC,CACU;CAC9D;AA2CD,iBAAS,gBAAgB,CAAC,KAAK,EAAE;IAC/B,QAAQ,CAAC,WAAW,EAAE,iBAAiB,CAAC,iBAAiB,CAAC;IAC1D,QAAQ,CAAC,aAAa,EAAE,YAAY,CAAC;IACrC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,gBAAgB,EAAE,qBAAqB,CAAC;CAClD,GAAG,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,CAiBxE"}
@@ -0,0 +1,226 @@
1
+ /** @file Registered-agent HTTP signing, resolution, replay defense, and verification. */
2
+ import { Brand, Context, Deferred, Effect, Layer, Option, Ref, Schema, } from "effect";
3
+ import { decodeCanonicalJson, encodeCanonicalJson } from "./canonical-json.js";
4
+ import { AuthenticationFailedError, MalformedRequestError, OverloadedError, UnavailableError, VersionMismatchError, } from "./http-errors.js";
5
+ import { AgentSigningError, signHttpRequest, verifyHttpRequestSignature, } from "./http-signature.js";
6
+ import { AgentId } from "./identifiers.js";
7
+ import { Registry } from "./registry.js";
8
+ import { MOLTZAP_VERSION } from "./version.js";
9
+ /** Registered-agent request signing and verification. */
10
+ export class AuthenticatedHttp extends Context.Tag("@moltzap/identity/AuthenticatedHttp")() {
11
+ static signAgentRequest = signAgentRequest;
12
+ static verifyAgentRequest = Effect.serviceFunctionEffect(AuthenticatedHttp, (service) => service.verifyAgentRequest);
13
+ static layer = (input) => Layer.effect(AuthenticatedHttp, makeService({ ...input }));
14
+ }
15
+ const brandVerifiedAgentRequest = Brand.nominal();
16
+ const exactStruct = (fields) => Schema.Struct(fields).annotations({
17
+ parseOptions: {
18
+ exact: true,
19
+ onExcessProperty: "error",
20
+ },
21
+ });
22
+ const registeredAgentBody = exactStruct({
23
+ callerAgentId: AgentId,
24
+ request: Schema.Unknown,
25
+ });
26
+ function makeService(input) {
27
+ return Effect.gen(function* () {
28
+ const registry = yield* Registry;
29
+ const nonces = yield* Ref.make(new Map());
30
+ const resolveCard = yield* makeCardResolver({
31
+ cacheCapacity: input.agentCardCacheCapacity,
32
+ lookupConcurrencyLimit: input.registryLookupConcurrencyLimit,
33
+ }, (request) => registry.lookup(request));
34
+ return {
35
+ verifyAgentRequest: (request) => verifyRequest(request, {
36
+ liveNonceCapacity: input.liveNonceCapacity,
37
+ nonces,
38
+ resolveCard,
39
+ }),
40
+ };
41
+ });
42
+ }
43
+ function signAgentRequest(input) {
44
+ return encodeCanonicalJson({
45
+ callerAgentId: input.callerAgentId,
46
+ request: input.encodedRequest,
47
+ }).pipe(Effect.catchTag("CanonicalJsonError", () => Effect.fail(new AgentSigningError())), Effect.flatMap((bodyBytes) => signHttpRequest({
48
+ httpRequest: input.httpRequest,
49
+ bodyBytes,
50
+ signingAuthority: input.signingAuthority,
51
+ profile: "normal",
52
+ })));
53
+ }
54
+ function verifyRequest(input, dependencies) {
55
+ return Effect.gen(function* () {
56
+ const body = yield* decodeCanonicalJson(registeredAgentBody, Uint8Array.from(input.bodyBytes)).pipe(Effect.catchTag("CanonicalJsonError", () => Effect.fail(new MalformedRequestError())));
57
+ const agentCard = yield* dependencies.resolveCard(body.callerAgentId);
58
+ const signature = yield* verifyHttpRequestSignature({
59
+ httpRequest: input.httpRequest,
60
+ bodyBytes: input.bodyBytes,
61
+ publicKey: agentCard.publicKey,
62
+ profile: "normal",
63
+ });
64
+ const claim = yield* claimNonce(dependencies.nonces, {
65
+ capacity: dependencies.liveNonceCapacity,
66
+ nonce: signature.nonce,
67
+ expires: signature.expires,
68
+ now: signature.verifiedAt,
69
+ });
70
+ if (claim === "replayed") {
71
+ return yield* new AuthenticationFailedError();
72
+ }
73
+ if (claim === "full") {
74
+ return yield* new OverloadedError();
75
+ }
76
+ if (input.httpRequest.headers["moltzap-version"] !== MOLTZAP_VERSION) {
77
+ return yield* new VersionMismatchError();
78
+ }
79
+ return makeVerifiedAgentRequest({
80
+ callerAgentId: body.callerAgentId,
81
+ agentCard,
82
+ request: body.request,
83
+ });
84
+ });
85
+ }
86
+ function makeCardResolver(settings, lookup) {
87
+ return Effect.gen(function* () {
88
+ const cache = yield* Ref.make({
89
+ cards: new Map(),
90
+ recency: Object.freeze([]),
91
+ pending: new Map(),
92
+ });
93
+ const lookupPermits = yield* Effect.makeSemaphore(settings.lookupConcurrencyLimit);
94
+ const dependencies = {
95
+ cache,
96
+ cacheCapacity: settings.cacheCapacity,
97
+ lookup,
98
+ lookupPermits,
99
+ };
100
+ return (agentId) => Effect.uninterruptibleMask((restoreInterruptibility) => resolveCard(dependencies, agentId, restoreInterruptibility));
101
+ });
102
+ }
103
+ function resolveCard(dependencies, agentId, restoreInterruptibility) {
104
+ return Effect.gen(function* () {
105
+ const candidate = yield* Deferred.make();
106
+ const access = yield* beginCardResolution(dependencies.cache, agentId, candidate);
107
+ return yield* resolveCacheAccess(dependencies, agentId, access, restoreInterruptibility);
108
+ });
109
+ }
110
+ function resolveCacheAccess(dependencies, agentId, access, restoreInterruptibility) {
111
+ // CacheAccess is a closed discriminated union.
112
+ // eslint-disable-next-line default-case -- the switch is exhaustive
113
+ switch (access.kind) {
114
+ case "cached":
115
+ return Effect.succeed(access.card);
116
+ case "join":
117
+ return restoreInterruptibility(Deferred.await(access.deferred));
118
+ case "lead":
119
+ return Effect.forkDaemon(runLeadingResolution(dependencies, agentId, access.deferred).pipe(Effect.interruptible)).pipe(Effect.zipRight(restoreInterruptibility(Deferred.await(access.deferred))));
120
+ }
121
+ }
122
+ function runLeadingResolution(dependencies, agentId, deferred) {
123
+ return lookupCard(dependencies, agentId).pipe(Effect.tap((card) => retainResolvedCard(dependencies.cache, {
124
+ capacity: dependencies.cacheCapacity,
125
+ agentId,
126
+ card,
127
+ })), Effect.onExit((exit) => removePendingResolution(dependencies.cache, agentId).pipe(Effect.zipRight(Deferred.done(deferred, exit)))));
128
+ }
129
+ function lookupCard(dependencies, agentId) {
130
+ return dependencies.lookupPermits
131
+ .withPermitsIfAvailable(1)(dependencies.lookup({ agentId }).pipe(
132
+ // Registry failures have one recovery at this boundary: the caller
133
+ // identity cannot currently be resolved.
134
+ // eslint-disable-next-line agent-code-guard/no-effect-error-coalescing -- collapse the Registry client surface into the approved boundary error
135
+ Effect.mapError(() => new UnavailableError())))
136
+ .pipe(Effect.flatMap(resolveLookupAttempt));
137
+ }
138
+ function resolveLookupAttempt(attempted) {
139
+ if (Option.isNone(attempted)) {
140
+ return Effect.fail(new OverloadedError());
141
+ }
142
+ return attempted.value.kind === "found"
143
+ ? Effect.succeed(attempted.value.agentCard)
144
+ : Effect.fail(new AuthenticationFailedError());
145
+ }
146
+ function beginCardResolution(cache, agentId, candidate) {
147
+ return Ref.modify(cache, (current) => {
148
+ const card = current.cards.get(agentId);
149
+ if (card !== undefined) {
150
+ return [
151
+ { kind: "cached", card },
152
+ {
153
+ ...current,
154
+ recency: Object.freeze([
155
+ ...current.recency.filter((value) => value !== agentId),
156
+ agentId,
157
+ ]),
158
+ },
159
+ ];
160
+ }
161
+ const pending = current.pending.get(agentId);
162
+ if (pending !== undefined) {
163
+ return [{ kind: "join", deferred: pending }, current];
164
+ }
165
+ return [
166
+ { kind: "lead", deferred: candidate },
167
+ {
168
+ ...current,
169
+ pending: new Map(current.pending).set(agentId, candidate),
170
+ },
171
+ ];
172
+ });
173
+ }
174
+ function removePendingResolution(cache, agentId) {
175
+ return Ref.update(cache, (current) => {
176
+ const pending = new Map(current.pending);
177
+ pending.delete(agentId);
178
+ return { ...current, pending };
179
+ });
180
+ }
181
+ function retainResolvedCard(cache, input) {
182
+ return Ref.update(cache, (current) => {
183
+ const pending = new Map(current.pending);
184
+ pending.delete(input.agentId);
185
+ const cards = new Map(current.cards);
186
+ const recency = [
187
+ ...current.recency.filter((value) => value !== input.agentId),
188
+ input.agentId,
189
+ ];
190
+ cards.set(input.agentId, input.card);
191
+ while (recency.length > input.capacity) {
192
+ const evicted = recency.shift();
193
+ if (evicted !== undefined) {
194
+ cards.delete(evicted);
195
+ }
196
+ }
197
+ return {
198
+ cards,
199
+ recency: Object.freeze(recency),
200
+ pending,
201
+ };
202
+ });
203
+ }
204
+ function claimNonce(nonces, input) {
205
+ return Ref.modify(nonces, (current) => updateNonces(current, input));
206
+ }
207
+ function updateNonces(current, input) {
208
+ const live = new Map();
209
+ for (const [retainedNonce, retainedExpiry] of current) {
210
+ if (retainedExpiry >= input.now) {
211
+ live.set(retainedNonce, retainedExpiry);
212
+ }
213
+ }
214
+ if (live.has(input.nonce)) {
215
+ return ["replayed", live];
216
+ }
217
+ if (live.size >= input.capacity) {
218
+ return ["full", live];
219
+ }
220
+ live.set(input.nonce, input.expires);
221
+ return ["claimed", live];
222
+ }
223
+ function makeVerifiedAgentRequest(input) {
224
+ return brandVerifiedAgentRequest(Object.freeze({ ...input }));
225
+ }
226
+ //# sourceMappingURL=authenticated-http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authenticated-http.js","sourceRoot":"","sources":["../src/authenticated-http.ts"],"names":[],"mappings":"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"}