@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.
- package/LICENSE +202 -0
- package/NOTICE +19 -0
- package/README.md +31 -0
- package/bin/moltzap-registry +9 -0
- package/dist/agent-card.d.ts +69 -0
- package/dist/agent-card.d.ts.map +1 -0
- package/dist/agent-card.js +257 -0
- package/dist/agent-card.js.map +1 -0
- package/dist/agent-key.d.ts +77 -0
- package/dist/agent-key.d.ts.map +1 -0
- package/dist/agent-key.js +251 -0
- package/dist/agent-key.js.map +1 -0
- package/dist/authenticated-http.d.ts +44 -0
- package/dist/authenticated-http.d.ts.map +1 -0
- package/dist/authenticated-http.js +226 -0
- package/dist/authenticated-http.js.map +1 -0
- package/dist/canonical-json.d.ts +40 -0
- package/dist/canonical-json.d.ts.map +1 -0
- package/dist/canonical-json.js +399 -0
- package/dist/canonical-json.js.map +1 -0
- package/dist/http-errors.d.ts +115 -0
- package/dist/http-errors.d.ts.map +1 -0
- package/dist/http-errors.js +55 -0
- package/dist/http-errors.js.map +1 -0
- package/dist/http-signature.d.ts +60 -0
- package/dist/http-signature.d.ts.map +1 -0
- package/dist/http-signature.js +337 -0
- package/dist/http-signature.js.map +1 -0
- package/dist/identifiers.d.ts +32 -0
- package/dist/identifiers.d.ts.map +1 -0
- package/dist/identifiers.js +55 -0
- package/dist/identifiers.js.map +1 -0
- package/dist/index.d.ts +33 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +34 -0
- package/dist/index.js.map +1 -0
- package/dist/registry/admission.d.ts +27 -0
- package/dist/registry/admission.d.ts.map +1 -0
- package/dist/registry/admission.js +107 -0
- package/dist/registry/admission.js.map +1 -0
- package/dist/registry/client.d.ts +20 -0
- package/dist/registry/client.d.ts.map +1 -0
- package/dist/registry/client.js +250 -0
- package/dist/registry/client.js.map +1 -0
- package/dist/registry/contract.d.ts +213 -0
- package/dist/registry/contract.d.ts.map +1 -0
- package/dist/registry/contract.js +132 -0
- package/dist/registry/contract.js.map +1 -0
- package/dist/registry/http.d.ts +27 -0
- package/dist/registry/http.d.ts.map +1 -0
- package/dist/registry/http.js +258 -0
- package/dist/registry/http.js.map +1 -0
- package/dist/registry/migrations/0001_registry.d.ts +6 -0
- package/dist/registry/migrations/0001_registry.d.ts.map +1 -0
- package/dist/registry/migrations/0001_registry.js +36 -0
- package/dist/registry/migrations/0001_registry.js.map +1 -0
- package/dist/registry/rpc.d.ts +138 -0
- package/dist/registry/rpc.d.ts.map +1 -0
- package/dist/registry/rpc.js +85 -0
- package/dist/registry/rpc.js.map +1 -0
- package/dist/registry/server.d.ts +52 -0
- package/dist/registry/server.d.ts.map +1 -0
- package/dist/registry/server.js +157 -0
- package/dist/registry/server.js.map +1 -0
- package/dist/registry/storage.d.ts +62 -0
- package/dist/registry/storage.d.ts.map +1 -0
- package/dist/registry/storage.js +341 -0
- package/dist/registry/storage.js.map +1 -0
- package/dist/registry.d.ts +34 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +13 -0
- package/dist/registry.js.map +1 -0
- package/dist/signed-message.d.ts +54 -0
- package/dist/signed-message.d.ts.map +1 -0
- package/dist/signed-message.js +289 -0
- package/dist/signed-message.js.map +1 -0
- package/dist/version.d.ts +4 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +4 -0
- package/dist/version.js.map +1 -0
- package/package.json +139 -0
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/** @file Registry-owned bootstrap admission before private dispatch. */
|
|
2
|
+
import { Effect, Redacted, Schema } from "effect";
|
|
3
|
+
import { createHash, timingSafeEqual } from "node:crypto";
|
|
4
|
+
import { Ed25519PublicKey } from "../agent-key.js";
|
|
5
|
+
import { parseCanonicalJson } from "../canonical-json.js";
|
|
6
|
+
import { AuthenticationFailedError, MalformedRequestError, OverloadedError, VersionMismatchError, } from "../http-errors.js";
|
|
7
|
+
import { verifyHttpRequestSignature, } from "../http-signature.js";
|
|
8
|
+
import { hasCanonicalBase64UrlLength } from "../identifiers.js";
|
|
9
|
+
import { MOLTZAP_VERSION } from "../version.js";
|
|
10
|
+
import { registrationBody, } from "./contract.js";
|
|
11
|
+
const registrationPublicKeyRepresentation = Schema.Struct({
|
|
12
|
+
crv: Schema.Literal("Ed25519"),
|
|
13
|
+
kty: Schema.Literal("OKP"),
|
|
14
|
+
x: Schema.String.pipe(Schema.filter((value) => hasCanonicalBase64UrlLength(value, 32))),
|
|
15
|
+
});
|
|
16
|
+
const minimumRegistrationBody = Schema.Struct({
|
|
17
|
+
request: Schema.Struct({
|
|
18
|
+
publicKey: registrationPublicKeyRepresentation,
|
|
19
|
+
}),
|
|
20
|
+
});
|
|
21
|
+
const admissionValue = /^MoltZap-Admission ((?=.{8,512}$)[A-Za-z0-9\-._~+/]+=*)$/;
|
|
22
|
+
/**
|
|
23
|
+
* Verifies Registry-owned bootstrap admission through its durable replay step.
|
|
24
|
+
*
|
|
25
|
+
* @param input Bootstrap boundary dependencies and request.
|
|
26
|
+
* @param input.httpRequest Server request carrying signed framing.
|
|
27
|
+
* @param input.bodyBytes Bounded body octets covered by the signature.
|
|
28
|
+
* @param input.admissionCredential Configured bootstrap secret.
|
|
29
|
+
* @param input.nonceCapacity Maximum live bootstrap nonces.
|
|
30
|
+
* @param input.storage Durable nonce store.
|
|
31
|
+
* @returns The complete registration request after every admission check.
|
|
32
|
+
*/
|
|
33
|
+
export function verifyBootstrapRegistration(input) {
|
|
34
|
+
return Effect.gen(function* () {
|
|
35
|
+
const parsedBody = yield* malformedRequest(parseCanonicalJson(Uint8Array.from(input.bodyBytes)));
|
|
36
|
+
const minimum = yield* malformedRequest(Schema.decodeUnknown(minimumRegistrationBody)(parsedBody));
|
|
37
|
+
yield* requireAdmissionCredential(input);
|
|
38
|
+
const publicKey = yield* authenticatePublicKey(minimum.request.publicKey);
|
|
39
|
+
const signature = yield* verifyHttpRequestSignature({
|
|
40
|
+
httpRequest: input.httpRequest,
|
|
41
|
+
bodyBytes: input.bodyBytes,
|
|
42
|
+
publicKey,
|
|
43
|
+
profile: "registration",
|
|
44
|
+
});
|
|
45
|
+
yield* claimNonce(input, signature);
|
|
46
|
+
if (input.httpRequest.headers["moltzap-version"] !== MOLTZAP_VERSION) {
|
|
47
|
+
return yield* new VersionMismatchError();
|
|
48
|
+
}
|
|
49
|
+
const complete = yield* malformedRequest(Schema.decodeUnknown(registrationBody)(parsedBody, {
|
|
50
|
+
exact: true,
|
|
51
|
+
onExcessProperty: "error",
|
|
52
|
+
}));
|
|
53
|
+
return complete.request;
|
|
54
|
+
}).pipe(Effect.withSpan("verifyBootstrapRegistration"));
|
|
55
|
+
}
|
|
56
|
+
function malformedRequest(effect) {
|
|
57
|
+
return effect.pipe(
|
|
58
|
+
// eslint-disable-next-line agent-code-guard/no-effect-error-coalescing -- Canonical JSON and closed request-schema failures share one exact public malformed envelope.
|
|
59
|
+
Effect.mapError(() => new MalformedRequestError()));
|
|
60
|
+
}
|
|
61
|
+
function requireAdmissionCredential(input) {
|
|
62
|
+
const credential = readAdmissionCredential(input.httpRequest.headers.authorization);
|
|
63
|
+
return credential !== undefined &&
|
|
64
|
+
sameCredential(credential, input.admissionCredential)
|
|
65
|
+
? Effect.void
|
|
66
|
+
: Effect.fail(new AuthenticationFailedError());
|
|
67
|
+
}
|
|
68
|
+
function authenticatePublicKey(candidate) {
|
|
69
|
+
return Schema.decodeUnknown(Ed25519PublicKey)(candidate).pipe(
|
|
70
|
+
// eslint-disable-next-line agent-code-guard/no-effect-error-coalescing -- A syntactically valid but cryptographically unusable verification key is an authentication failure.
|
|
71
|
+
Effect.mapError(() => new AuthenticationFailedError()));
|
|
72
|
+
}
|
|
73
|
+
function claimNonce(input, signature) {
|
|
74
|
+
return Effect.gen(function* () {
|
|
75
|
+
const claim = yield* input.storage.claimRegistrationNonce({
|
|
76
|
+
nonce: signature.nonce,
|
|
77
|
+
expires: signature.expires,
|
|
78
|
+
now: signature.verifiedAt,
|
|
79
|
+
capacity: input.nonceCapacity,
|
|
80
|
+
});
|
|
81
|
+
if (claim === "replayed") {
|
|
82
|
+
return yield* new AuthenticationFailedError();
|
|
83
|
+
}
|
|
84
|
+
if (claim === "full") {
|
|
85
|
+
return yield* new OverloadedError();
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
function readAdmissionCredential(authorization) {
|
|
90
|
+
if (authorization === undefined) {
|
|
91
|
+
return undefined;
|
|
92
|
+
}
|
|
93
|
+
const match = admissionValue.exec(authorization);
|
|
94
|
+
if (match === null) {
|
|
95
|
+
return undefined;
|
|
96
|
+
}
|
|
97
|
+
const credential = match[1];
|
|
98
|
+
return typeof credential === "string" ? credential : undefined;
|
|
99
|
+
}
|
|
100
|
+
function sameCredential(received, configured) {
|
|
101
|
+
const receivedDigest = createHash("sha256").update(received).digest();
|
|
102
|
+
const configuredDigest = createHash("sha256")
|
|
103
|
+
.update(Redacted.value(configured))
|
|
104
|
+
.digest();
|
|
105
|
+
return timingSafeEqual(receivedDigest, configuredDigest);
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=admission.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admission.js","sourceRoot":"","sources":["../../src/registry/admission.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/** @file Authenticated HTTP adapter behind the public Registry capability. */
|
|
2
|
+
import { HttpClient } from "@effect/platform";
|
|
3
|
+
import { Duration, Effect } from "effect";
|
|
4
|
+
import { type Ed25519PublicKey } from "../agent-key.js";
|
|
5
|
+
import { type RegistryClientService } from "./contract.js";
|
|
6
|
+
/**
|
|
7
|
+
* Builds the service installed behind the public Registry capability.
|
|
8
|
+
*
|
|
9
|
+
* @param input Immutable Registry client configuration.
|
|
10
|
+
* @param input.origin Registry HTTP origin.
|
|
11
|
+
* @param input.registrySignerPublicKey Pinned Registry verification key.
|
|
12
|
+
* @param input.requestTimeout Complete per-call deadline.
|
|
13
|
+
* @returns The configured service, requiring an Effect HTTP client.
|
|
14
|
+
*/
|
|
15
|
+
export declare function makeRegistryService(input: {
|
|
16
|
+
readonly origin: URL;
|
|
17
|
+
readonly registrySignerPublicKey: Ed25519PublicKey;
|
|
18
|
+
readonly requestTimeout: Duration.Duration;
|
|
19
|
+
}): Effect.Effect<RegistryClientService, never, HttpClient.HttpClient>;
|
|
20
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/registry/client.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAE9E,OAAO,EACL,UAAU,EAGX,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAsC,MAAM,QAAQ,CAAC;AAG9E,OAAO,EAAyB,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAiB/E,OAAO,EAQL,KAAK,qBAAqB,EAW3B,MAAM,eAAe,CAAC;AAEvB;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE;IACzC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC;IACrB,QAAQ,CAAC,uBAAuB,EAAE,gBAAgB,CAAC;IACnD,QAAQ,CAAC,cAAc,EAAE,QAAQ,CAAC,QAAQ,CAAC;CAC5C,GAAG,MAAM,CAAC,MAAM,CAAC,qBAAqB,EAAE,KAAK,EAAE,UAAU,CAAC,UAAU,CAAC,CA4BrE"}
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
/** @file Authenticated HTTP adapter behind the public Registry capability. */
|
|
2
|
+
import { HttpClient, HttpClientRequest, } from "@effect/platform";
|
|
3
|
+
import { Duration, Effect, Either, Encoding, Redacted, Schema } from "effect";
|
|
4
|
+
import { AgentCard } from "../agent-card.js";
|
|
5
|
+
import { AgentSigningAuthority } from "../agent-key.js";
|
|
6
|
+
import { decodeCanonicalJson, encodeCanonicalJson } from "../canonical-json.js";
|
|
7
|
+
import { AuthenticationFailedError, InternalServerError, MalformedRequestError, MethodNotAllowedError, OverloadedError, PayloadTooLargeError, RouteNotFoundError, UnavailableError, UnsupportedMediaTypeError, VersionMismatchError, } from "../http-errors.js";
|
|
8
|
+
import { AgentSigningError, signHttpRequest } from "../http-signature.js";
|
|
9
|
+
import { MOLTZAP_VERSION } from "../version.js";
|
|
10
|
+
import { LIST_PATH, listResponseSchema, LOOKUP_PATH, lookupResponseSchema, REGISTER_PATH, registerResponseSchema, registrationBody, RegistryConnectionError, RegistryInvalidResponseError, RegistryListRequest, RegistryLookupRequest, RegistryRequestTimeoutError, } from "./contract.js";
|
|
11
|
+
/**
|
|
12
|
+
* Builds the service installed behind the public Registry capability.
|
|
13
|
+
*
|
|
14
|
+
* @param input Immutable Registry client configuration.
|
|
15
|
+
* @param input.origin Registry HTTP origin.
|
|
16
|
+
* @param input.registrySignerPublicKey Pinned Registry verification key.
|
|
17
|
+
* @param input.requestTimeout Complete per-call deadline.
|
|
18
|
+
* @returns The configured service, requiring an Effect HTTP client.
|
|
19
|
+
*/
|
|
20
|
+
export function makeRegistryService(input) {
|
|
21
|
+
const origin = new URL(input.origin.href);
|
|
22
|
+
const requestTimeout = Duration.millis(Duration.toMillis(input.requestTimeout));
|
|
23
|
+
return Effect.map(HttpClient.HttpClient, (client) => ({
|
|
24
|
+
register: makeRegister({
|
|
25
|
+
client,
|
|
26
|
+
origin,
|
|
27
|
+
registrySignerPublicKey: input.registrySignerPublicKey,
|
|
28
|
+
requestTimeout,
|
|
29
|
+
}),
|
|
30
|
+
lookup: makeLookup({
|
|
31
|
+
client,
|
|
32
|
+
origin,
|
|
33
|
+
registrySignerPublicKey: input.registrySignerPublicKey,
|
|
34
|
+
requestTimeout,
|
|
35
|
+
}),
|
|
36
|
+
list: makeList({
|
|
37
|
+
client,
|
|
38
|
+
origin,
|
|
39
|
+
registrySignerPublicKey: input.registrySignerPublicKey,
|
|
40
|
+
requestTimeout,
|
|
41
|
+
}),
|
|
42
|
+
}));
|
|
43
|
+
}
|
|
44
|
+
const errorEnvelope = new Map([
|
|
45
|
+
[
|
|
46
|
+
400,
|
|
47
|
+
{ body: '{"error":"malformed"}', make: () => new MalformedRequestError() },
|
|
48
|
+
],
|
|
49
|
+
[
|
|
50
|
+
401,
|
|
51
|
+
{
|
|
52
|
+
body: '{"error":"authentication_failed"}',
|
|
53
|
+
make: () => new AuthenticationFailedError(),
|
|
54
|
+
},
|
|
55
|
+
],
|
|
56
|
+
[
|
|
57
|
+
404,
|
|
58
|
+
{ body: '{"error":"not_found"}', make: () => new RouteNotFoundError() },
|
|
59
|
+
],
|
|
60
|
+
[
|
|
61
|
+
405,
|
|
62
|
+
{
|
|
63
|
+
body: '{"error":"method_not_allowed"}',
|
|
64
|
+
make: () => new MethodNotAllowedError(),
|
|
65
|
+
},
|
|
66
|
+
],
|
|
67
|
+
[
|
|
68
|
+
412,
|
|
69
|
+
{
|
|
70
|
+
body: '{"error":"version_mismatch"}',
|
|
71
|
+
make: () => new VersionMismatchError(),
|
|
72
|
+
},
|
|
73
|
+
],
|
|
74
|
+
[
|
|
75
|
+
413,
|
|
76
|
+
{
|
|
77
|
+
body: '{"error":"payload_too_large"}',
|
|
78
|
+
make: () => new PayloadTooLargeError(),
|
|
79
|
+
},
|
|
80
|
+
],
|
|
81
|
+
[
|
|
82
|
+
415,
|
|
83
|
+
{
|
|
84
|
+
body: '{"error":"unsupported_media_type"}',
|
|
85
|
+
make: () => new UnsupportedMediaTypeError(),
|
|
86
|
+
},
|
|
87
|
+
],
|
|
88
|
+
[429, { body: '{"error":"overloaded"}', make: () => new OverloadedError() }],
|
|
89
|
+
[
|
|
90
|
+
503,
|
|
91
|
+
{ body: '{"error":"unavailable"}', make: () => new UnavailableError() },
|
|
92
|
+
],
|
|
93
|
+
[
|
|
94
|
+
500,
|
|
95
|
+
{ body: '{"error":"internal"}', make: () => new InternalServerError() },
|
|
96
|
+
],
|
|
97
|
+
]);
|
|
98
|
+
const invalidResponse = () => new RegistryInvalidResponseError();
|
|
99
|
+
const textDecoder = new TextDecoder("utf-8", {
|
|
100
|
+
fatal: true,
|
|
101
|
+
ignoreBOM: true,
|
|
102
|
+
});
|
|
103
|
+
const exactText = (bytes) => {
|
|
104
|
+
try {
|
|
105
|
+
return textDecoder.decode(bytes);
|
|
106
|
+
// eslint-disable-next-line agent-code-guard/bare-catch -- Invalid UTF-8 is an ordinary closed-response validation failure. #ignore-sloppy-code-next-line[bare-catch]: The decoder returns undefined.
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
return undefined;
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
const operationDeclares = (operation, error) => operation === "register" || error._tag !== "AuthenticationFailedError";
|
|
113
|
+
const connectionFailure = (effect) => effect.pipe(
|
|
114
|
+
// eslint-disable-next-line agent-code-guard/no-effect-error-coalescing -- The client exposes one transport failure without leaking platform implementation details.
|
|
115
|
+
Effect.mapError(() => new RegistryConnectionError()));
|
|
116
|
+
const readResponseBytes = (response) => connectionFailure(response.arrayBuffer).pipe(Effect.map((buffer) => new Uint8Array(buffer)));
|
|
117
|
+
const decodeEnvelope = (operation, response, bytes) => {
|
|
118
|
+
if (response.headers["content-type"] !== "application/json") {
|
|
119
|
+
return Effect.fail(invalidResponse());
|
|
120
|
+
}
|
|
121
|
+
const expected = errorEnvelope.get(response.status);
|
|
122
|
+
const actual = exactText(bytes);
|
|
123
|
+
if (expected === undefined || actual !== expected.body) {
|
|
124
|
+
return Effect.fail(invalidResponse());
|
|
125
|
+
}
|
|
126
|
+
const error = expected.make();
|
|
127
|
+
return operationDeclares(operation, error)
|
|
128
|
+
? Effect.fail(error)
|
|
129
|
+
: Effect.fail(invalidResponse());
|
|
130
|
+
};
|
|
131
|
+
const execute = (input) => connectionFailure(input.client.execute(input.request)).pipe(Effect.flatMap((response) => readResponseBytes(response).pipe(Effect.flatMap((bytes) => response.status === 200
|
|
132
|
+
? Effect.succeed([response, bytes])
|
|
133
|
+
: decodeEnvelope(input.operation, response, bytes)))));
|
|
134
|
+
const executePublicRead = (input) => execute(input).pipe(Effect.catchTag("AuthenticationFailedError", () => Effect.fail(invalidResponse())));
|
|
135
|
+
const requireJsonSuccess = (response) => response.headers["content-type"] === "application/json"
|
|
136
|
+
? Effect.void
|
|
137
|
+
: Effect.fail(invalidResponse());
|
|
138
|
+
const encodeRequest = (schema, request) => Schema.encode(schema)(request).pipe(Effect.mapError(invalidResponse), Effect.flatMap(encodeCanonicalJson), Effect.mapError(invalidResponse));
|
|
139
|
+
const verifyCard = (agentCard, registrySignerPublicKey) => AgentCard.verify({ agentCard, registrySignerPublicKey }).pipe(Effect.mapError(invalidResponse));
|
|
140
|
+
const decodeAgentIdBytes = (agentId) => Either.match(Encoding.decodeBase64Url(agentId.slice(4)), {
|
|
141
|
+
// The AgentId type already proves this branch unreachable.
|
|
142
|
+
onLeft: () => new Uint8Array(),
|
|
143
|
+
onRight: (bytes) => bytes,
|
|
144
|
+
});
|
|
145
|
+
const compareAgentIds = (left, right) => {
|
|
146
|
+
const leftBytes = decodeAgentIdBytes(left);
|
|
147
|
+
const rightBytes = decodeAgentIdBytes(right);
|
|
148
|
+
for (let index = 0; index < leftBytes.byteLength; index += 1) {
|
|
149
|
+
const difference = (leftBytes[index] ?? 0) - (rightBytes[index] ?? 0);
|
|
150
|
+
if (difference !== 0) {
|
|
151
|
+
return difference;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
return 0;
|
|
155
|
+
};
|
|
156
|
+
const withDeadline = (effect, timeout) => effect.pipe(Effect.timeoutFail({
|
|
157
|
+
duration: timeout,
|
|
158
|
+
onTimeout: () => new RegistryRequestTimeoutError(),
|
|
159
|
+
}));
|
|
160
|
+
const makePost = (origin, path, bodyBytes) => HttpClientRequest.post(new URL(path, origin)).pipe(HttpClientRequest.bodyUint8Array(bodyBytes, "application/json"), HttpClientRequest.setHeader("moltzap-version", MOLTZAP_VERSION));
|
|
161
|
+
const makeSignedRegistrationRequest = (input, call) => Effect.gen(function* () {
|
|
162
|
+
if (AgentSigningAuthority.publicKey(call.signingAuthority).x !==
|
|
163
|
+
call.request.publicKey.x) {
|
|
164
|
+
return yield* new AgentSigningError();
|
|
165
|
+
}
|
|
166
|
+
const bodyBytes = yield* encodeRequest(registrationBody, {
|
|
167
|
+
request: call.request,
|
|
168
|
+
});
|
|
169
|
+
const httpRequest = makePost(input.origin, REGISTER_PATH, bodyBytes).pipe(HttpClientRequest.setHeader("authorization", `MoltZap-Admission ${Redacted.value(call.admissionCredential)}`));
|
|
170
|
+
return yield* signHttpRequest({
|
|
171
|
+
httpRequest,
|
|
172
|
+
bodyBytes,
|
|
173
|
+
signingAuthority: call.signingAuthority,
|
|
174
|
+
profile: "registration",
|
|
175
|
+
});
|
|
176
|
+
});
|
|
177
|
+
const registrationMatchesCall = (agentCard, call) => agentCard.principalId === call.request.principalId &&
|
|
178
|
+
agentCard.agentName === call.request.agentName &&
|
|
179
|
+
agentCard.publicKey.x === call.request.publicKey.x;
|
|
180
|
+
const decodeRegistrationResult = (input, call, responseBytes) => Effect.gen(function* () {
|
|
181
|
+
const result = yield* decodeCanonicalJson(registerResponseSchema, responseBytes).pipe(Effect.mapError(invalidResponse));
|
|
182
|
+
if (result.kind !== "registered") {
|
|
183
|
+
return Object.freeze({ kind: result.kind });
|
|
184
|
+
}
|
|
185
|
+
const agentCard = yield* verifyCard(result.agentCard, input.registrySignerPublicKey);
|
|
186
|
+
if (!registrationMatchesCall(agentCard, call)) {
|
|
187
|
+
return yield* invalidResponse();
|
|
188
|
+
}
|
|
189
|
+
return Object.freeze({ kind: "registered", agentCard });
|
|
190
|
+
});
|
|
191
|
+
function makeRegister(input) {
|
|
192
|
+
return (call) => Effect.gen(function* () {
|
|
193
|
+
const request = yield* makeSignedRegistrationRequest(input, call);
|
|
194
|
+
const [response, responseBytes] = yield* execute({
|
|
195
|
+
client: input.client,
|
|
196
|
+
request,
|
|
197
|
+
operation: "register",
|
|
198
|
+
});
|
|
199
|
+
yield* requireJsonSuccess(response);
|
|
200
|
+
return yield* decodeRegistrationResult(input, call, responseBytes);
|
|
201
|
+
}).pipe((effect) => withDeadline(effect, input.requestTimeout));
|
|
202
|
+
}
|
|
203
|
+
function makeLookup(input) {
|
|
204
|
+
return (call) => Effect.gen(function* () {
|
|
205
|
+
const bodyBytes = yield* encodeRequest(RegistryLookupRequest, call);
|
|
206
|
+
const [response, responseBytes] = yield* executePublicRead({
|
|
207
|
+
client: input.client,
|
|
208
|
+
request: makePost(input.origin, LOOKUP_PATH, bodyBytes),
|
|
209
|
+
operation: "lookup",
|
|
210
|
+
});
|
|
211
|
+
yield* requireJsonSuccess(response);
|
|
212
|
+
const result = yield* decodeCanonicalJson(lookupResponseSchema, responseBytes).pipe(Effect.mapError(invalidResponse));
|
|
213
|
+
if (result.kind === "not_found") {
|
|
214
|
+
return Object.freeze({ kind: "not_found" });
|
|
215
|
+
}
|
|
216
|
+
const agentCard = yield* verifyCard(result.agentCard, input.registrySignerPublicKey);
|
|
217
|
+
if (("agentId" in call && agentCard.agentId !== call.agentId) ||
|
|
218
|
+
("agentName" in call && agentCard.agentName !== call.agentName)) {
|
|
219
|
+
return yield* invalidResponse();
|
|
220
|
+
}
|
|
221
|
+
return Object.freeze({ kind: "found", agentCard });
|
|
222
|
+
}).pipe((effect) => withDeadline(effect, input.requestTimeout));
|
|
223
|
+
}
|
|
224
|
+
function makeList(input) {
|
|
225
|
+
return (call) => Effect.gen(function* () {
|
|
226
|
+
const bodyBytes = yield* encodeRequest(RegistryListRequest, call);
|
|
227
|
+
const [response, responseBytes] = yield* executePublicRead({
|
|
228
|
+
client: input.client,
|
|
229
|
+
request: makePost(input.origin, LIST_PATH, bodyBytes),
|
|
230
|
+
operation: "list",
|
|
231
|
+
});
|
|
232
|
+
yield* requireJsonSuccess(response);
|
|
233
|
+
const result = yield* decodeCanonicalJson(listResponseSchema, responseBytes).pipe(Effect.mapError(invalidResponse));
|
|
234
|
+
const agentCards = yield* Effect.forEach(result.agentCards, (card) => verifyCard(card, input.registrySignerPublicKey), { concurrency: 1 });
|
|
235
|
+
let previous = call.afterAgentId;
|
|
236
|
+
for (const card of agentCards) {
|
|
237
|
+
if (previous !== undefined &&
|
|
238
|
+
compareAgentIds(previous, card.agentId) >= 0) {
|
|
239
|
+
return yield* invalidResponse();
|
|
240
|
+
}
|
|
241
|
+
previous = card.agentId;
|
|
242
|
+
}
|
|
243
|
+
return Object.freeze({
|
|
244
|
+
kind: "page",
|
|
245
|
+
agentCards: Object.freeze([...agentCards]),
|
|
246
|
+
hasMore: result.hasMore,
|
|
247
|
+
});
|
|
248
|
+
}).pipe((effect) => withDeadline(effect, input.requestTimeout));
|
|
249
|
+
}
|
|
250
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/registry/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
/** @file Complete Registry-owned client, request, and representation contract. */
|
|
2
|
+
import { type Effect, type Redacted, Schema } from "effect";
|
|
3
|
+
import type { HttpEnvelopeError } from "../http-errors.js";
|
|
4
|
+
import type { AgentSigningError } from "../http-signature.js";
|
|
5
|
+
import { AgentCard, type VerifiedAgentCard } from "../agent-card.js";
|
|
6
|
+
import { type AgentSigningAuthority, Ed25519PublicKey } from "../agent-key.js";
|
|
7
|
+
/** Idempotency identity for a registration operation. */
|
|
8
|
+
export declare const OperationId: Schema.brand<Schema.filter<typeof Schema.String>, "OperationId">;
|
|
9
|
+
/** Validated nominal value decoded by OperationId. */
|
|
10
|
+
export type OperationId = typeof OperationId.Type;
|
|
11
|
+
declare const RegistryConnectionError_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 & {
|
|
12
|
+
readonly _tag: "RegistryConnectionError";
|
|
13
|
+
} & Readonly<A>;
|
|
14
|
+
/** The Registry connection could not be established or used. */
|
|
15
|
+
export declare class RegistryConnectionError extends RegistryConnectionError_base {
|
|
16
|
+
}
|
|
17
|
+
declare const RegistryRequestTimeoutError_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 & {
|
|
18
|
+
readonly _tag: "RegistryRequestTimeoutError";
|
|
19
|
+
} & Readonly<A>;
|
|
20
|
+
/** The configured complete Registry call deadline expired. */
|
|
21
|
+
export declare class RegistryRequestTimeoutError extends RegistryRequestTimeoutError_base {
|
|
22
|
+
}
|
|
23
|
+
declare const RegistryInvalidResponseError_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 & {
|
|
24
|
+
readonly _tag: "RegistryInvalidResponseError";
|
|
25
|
+
} & Readonly<A>;
|
|
26
|
+
/** A Registry response did not match the selected operation contract. */
|
|
27
|
+
export declare class RegistryInvalidResponseError extends RegistryInvalidResponseError_base {
|
|
28
|
+
}
|
|
29
|
+
/** Closed Registry bootstrap registration request. */
|
|
30
|
+
export declare const RegistryRegisterRequest: Schema.Struct<{
|
|
31
|
+
operationId: Schema.brand<Schema.filter<typeof Schema.String>, "OperationId">;
|
|
32
|
+
principalId: Schema.brand<Schema.filter<typeof Schema.String>, "PrincipalId">;
|
|
33
|
+
agentName: Schema.brand<Schema.filter<Schema.filter<Schema.filter<typeof Schema.String>>>, "AgentName">;
|
|
34
|
+
publicKey: Schema.brand<Schema.transform<Schema.Struct<{
|
|
35
|
+
crv: Schema.Literal<["Ed25519"]>;
|
|
36
|
+
kty: Schema.Literal<["OKP"]>;
|
|
37
|
+
x: Schema.filter<typeof Schema.String>;
|
|
38
|
+
}>, Schema.declare<Readonly<{
|
|
39
|
+
crv: "Ed25519";
|
|
40
|
+
kty: "OKP";
|
|
41
|
+
x: string;
|
|
42
|
+
}>, Readonly<{
|
|
43
|
+
crv: "Ed25519";
|
|
44
|
+
kty: "OKP";
|
|
45
|
+
x: string;
|
|
46
|
+
}>, readonly [], never>>, "Ed25519PublicKey">;
|
|
47
|
+
}>;
|
|
48
|
+
/** Validated Registry bootstrap registration request. */
|
|
49
|
+
export type RegistryRegisterRequest = typeof RegistryRegisterRequest.Type;
|
|
50
|
+
/** Closed Registry lookup selector. */
|
|
51
|
+
export declare const RegistryLookupRequest: Schema.Union<[Schema.Struct<{
|
|
52
|
+
agentId: Schema.brand<Schema.filter<typeof Schema.String>, "AgentId">;
|
|
53
|
+
}>, Schema.Struct<{
|
|
54
|
+
agentName: Schema.brand<Schema.filter<Schema.filter<Schema.filter<typeof Schema.String>>>, "AgentName">;
|
|
55
|
+
}>]>;
|
|
56
|
+
/** Validated Registry lookup selector. */
|
|
57
|
+
export type RegistryLookupRequest = typeof RegistryLookupRequest.Type;
|
|
58
|
+
/** Closed Registry list continuation request. */
|
|
59
|
+
export declare const RegistryListRequest: Schema.Struct<{
|
|
60
|
+
afterAgentId: Schema.optional<Schema.brand<Schema.filter<typeof Schema.String>, "AgentId">>;
|
|
61
|
+
}>;
|
|
62
|
+
/** Validated Registry list continuation request. */
|
|
63
|
+
export type RegistryListRequest = typeof RegistryListRequest.Type;
|
|
64
|
+
/** Closed domain outcome from one bootstrap registration attempt. */
|
|
65
|
+
export type RegistryRegisterResult = Readonly<{
|
|
66
|
+
kind: "registered";
|
|
67
|
+
agentCard: VerifiedAgentCard;
|
|
68
|
+
}> | Readonly<{
|
|
69
|
+
kind: "name_taken";
|
|
70
|
+
}> | Readonly<{
|
|
71
|
+
kind: "key_already_registered";
|
|
72
|
+
}> | Readonly<{
|
|
73
|
+
kind: "idempotency_conflict";
|
|
74
|
+
}>;
|
|
75
|
+
/** Closed domain outcome from one public identity lookup. */
|
|
76
|
+
export type RegistryLookupResult = Readonly<{
|
|
77
|
+
kind: "found";
|
|
78
|
+
agentCard: VerifiedAgentCard;
|
|
79
|
+
}> | Readonly<{
|
|
80
|
+
kind: "not_found";
|
|
81
|
+
}>;
|
|
82
|
+
/** One deterministic page of complete immutable AgentCards. */
|
|
83
|
+
export type RegistryListResult = Readonly<{
|
|
84
|
+
kind: "page";
|
|
85
|
+
agentCards: readonly VerifiedAgentCard[];
|
|
86
|
+
hasMore: boolean;
|
|
87
|
+
}>;
|
|
88
|
+
/** Complete bootstrap registration call made through the Registry client. */
|
|
89
|
+
export type RegistryRegisterCall = Readonly<{
|
|
90
|
+
request: RegistryRegisterRequest;
|
|
91
|
+
admissionCredential: Redacted.Redacted;
|
|
92
|
+
signingAuthority: AgentSigningAuthority;
|
|
93
|
+
}>;
|
|
94
|
+
/** Closed Registry client implementation failures. */
|
|
95
|
+
type RegistryClientError = RegistryConnectionError | RegistryRequestTimeoutError | RegistryInvalidResponseError;
|
|
96
|
+
/** Shared envelopes accepted by public Registry reads. */
|
|
97
|
+
export type RegistryPublicReadError = Exclude<HttpEnvelopeError, {
|
|
98
|
+
readonly _tag: "AuthenticationFailedError";
|
|
99
|
+
}>;
|
|
100
|
+
/** Structural service installed behind the public Registry capability. */
|
|
101
|
+
export interface RegistryClientService {
|
|
102
|
+
readonly register: (input: RegistryRegisterCall) => Effect.Effect<RegistryRegisterResult, HttpEnvelopeError | RegistryClientError | AgentSigningError>;
|
|
103
|
+
readonly lookup: (request: RegistryLookupRequest) => Effect.Effect<RegistryLookupResult, RegistryPublicReadError | RegistryClientError>;
|
|
104
|
+
readonly list: (request: RegistryListRequest) => Effect.Effect<RegistryListResult, RegistryPublicReadError | RegistryClientError>;
|
|
105
|
+
}
|
|
106
|
+
/** Package-private validated registration outcome. */
|
|
107
|
+
export declare const registerResultSchema: Schema.Union<[Schema.Struct<{
|
|
108
|
+
kind: Schema.Literal<["registered"]>;
|
|
109
|
+
agentCard: Schema.declare<VerifiedAgentCard, VerifiedAgentCard, readonly [], never>;
|
|
110
|
+
}>, Schema.Struct<{
|
|
111
|
+
kind: Schema.Literal<["name_taken"]>;
|
|
112
|
+
}>, Schema.Struct<{
|
|
113
|
+
kind: Schema.Literal<["key_already_registered"]>;
|
|
114
|
+
}>, Schema.Struct<{
|
|
115
|
+
kind: Schema.Literal<["idempotency_conflict"]>;
|
|
116
|
+
}>]>;
|
|
117
|
+
/** Package-private validated lookup outcome. */
|
|
118
|
+
export declare const lookupResultSchema: Schema.Union<[Schema.Struct<{
|
|
119
|
+
kind: Schema.Literal<["found"]>;
|
|
120
|
+
agentCard: Schema.declare<VerifiedAgentCard, VerifiedAgentCard, readonly [], never>;
|
|
121
|
+
}>, Schema.Struct<{
|
|
122
|
+
kind: Schema.Literal<["not_found"]>;
|
|
123
|
+
}>]>;
|
|
124
|
+
/** Package-private validated list outcome. */
|
|
125
|
+
export declare const listResultSchema: Schema.Struct<{
|
|
126
|
+
kind: Schema.Literal<["page"]>;
|
|
127
|
+
agentCards: Schema.Array$<Schema.declare<VerifiedAgentCard, VerifiedAgentCard, readonly [], never>>;
|
|
128
|
+
hasMore: typeof Schema.Boolean;
|
|
129
|
+
}>;
|
|
130
|
+
/** Exact registration response representation used by both HTTP adapters. */
|
|
131
|
+
export declare const registerResponseSchema: Schema.Union<[Schema.Struct<{
|
|
132
|
+
kind: Schema.Literal<["registered"]>;
|
|
133
|
+
agentCard: Schema.Schema<AgentCard, unknown, never> & Readonly<{
|
|
134
|
+
readonly verify: (input: {
|
|
135
|
+
readonly agentCard: AgentCard;
|
|
136
|
+
readonly registrySignerPublicKey: Ed25519PublicKey;
|
|
137
|
+
}) => Effect.Effect<VerifiedAgentCard, import("../agent-card.js").AgentCardVerificationError>;
|
|
138
|
+
}>;
|
|
139
|
+
}>, Schema.Struct<{
|
|
140
|
+
kind: Schema.Literal<["name_taken"]>;
|
|
141
|
+
}>, Schema.Struct<{
|
|
142
|
+
kind: Schema.Literal<["key_already_registered"]>;
|
|
143
|
+
}>, Schema.Struct<{
|
|
144
|
+
kind: Schema.Literal<["idempotency_conflict"]>;
|
|
145
|
+
}>]>;
|
|
146
|
+
/** Exact lookup response representation used by both HTTP adapters. */
|
|
147
|
+
export declare const lookupResponseSchema: Schema.Union<[Schema.Struct<{
|
|
148
|
+
kind: Schema.Literal<["found"]>;
|
|
149
|
+
agentCard: Schema.Schema<AgentCard, unknown, never> & Readonly<{
|
|
150
|
+
readonly verify: (input: {
|
|
151
|
+
readonly agentCard: AgentCard;
|
|
152
|
+
readonly registrySignerPublicKey: Ed25519PublicKey;
|
|
153
|
+
}) => Effect.Effect<VerifiedAgentCard, import("../agent-card.js").AgentCardVerificationError>;
|
|
154
|
+
}>;
|
|
155
|
+
}>, Schema.Struct<{
|
|
156
|
+
kind: Schema.Literal<["not_found"]>;
|
|
157
|
+
}>]>;
|
|
158
|
+
/** Exact list response representation used by both HTTP adapters. */
|
|
159
|
+
export declare const listResponseSchema: Schema.Struct<{
|
|
160
|
+
kind: Schema.Literal<["page"]>;
|
|
161
|
+
agentCards: Schema.Array$<Schema.Schema<AgentCard, unknown, never> & Readonly<{
|
|
162
|
+
readonly verify: (input: {
|
|
163
|
+
readonly agentCard: AgentCard;
|
|
164
|
+
readonly registrySignerPublicKey: Ed25519PublicKey;
|
|
165
|
+
}) => Effect.Effect<VerifiedAgentCard, import("../agent-card.js").AgentCardVerificationError>;
|
|
166
|
+
}>>;
|
|
167
|
+
hasMore: typeof Schema.Boolean;
|
|
168
|
+
}>;
|
|
169
|
+
/** Exact bootstrap registration HTTP body. */
|
|
170
|
+
export declare const registrationBody: Schema.Struct<{
|
|
171
|
+
request: Schema.Struct<{
|
|
172
|
+
operationId: Schema.brand<Schema.filter<typeof Schema.String>, "OperationId">;
|
|
173
|
+
principalId: Schema.brand<Schema.filter<typeof Schema.String>, "PrincipalId">;
|
|
174
|
+
agentName: Schema.brand<Schema.filter<Schema.filter<Schema.filter<typeof Schema.String>>>, "AgentName">;
|
|
175
|
+
publicKey: Schema.brand<Schema.transform<Schema.Struct<{
|
|
176
|
+
crv: Schema.Literal<["Ed25519"]>;
|
|
177
|
+
kty: Schema.Literal<["OKP"]>;
|
|
178
|
+
x: Schema.filter<typeof Schema.String>;
|
|
179
|
+
}>, Schema.declare<Readonly<{
|
|
180
|
+
crv: "Ed25519";
|
|
181
|
+
kty: "OKP";
|
|
182
|
+
x: string;
|
|
183
|
+
}>, Readonly<{
|
|
184
|
+
crv: "Ed25519";
|
|
185
|
+
kty: "OKP";
|
|
186
|
+
x: string;
|
|
187
|
+
}>, readonly [], never>>, "Ed25519PublicKey">;
|
|
188
|
+
}>;
|
|
189
|
+
}>;
|
|
190
|
+
/** Exact bootstrap registration request path. */
|
|
191
|
+
export declare const REGISTER_PATH = "/v1/identities:register";
|
|
192
|
+
/** Exact public lookup request path. */
|
|
193
|
+
export declare const LOOKUP_PATH = "/v1/identities:lookup";
|
|
194
|
+
/** Exact public list request path. */
|
|
195
|
+
export declare const LIST_PATH = "/v1/identities:list";
|
|
196
|
+
/** Exact Registry readiness path. */
|
|
197
|
+
export declare const HEALTH_PATH = "/healthz";
|
|
198
|
+
/** Effect Router patterns escape the literal colon in Registry paths. */
|
|
199
|
+
export declare const REGISTER_ROUTE = "/v1/identities::register";
|
|
200
|
+
/** Effect Router pattern for the literal lookup path. */
|
|
201
|
+
export declare const LOOKUP_ROUTE = "/v1/identities::lookup";
|
|
202
|
+
/** Effect Router pattern for the literal list path. */
|
|
203
|
+
export declare const LIST_ROUTE = "/v1/identities::list";
|
|
204
|
+
/** Exact paths used to classify method mismatches at the fallback route. */
|
|
205
|
+
export declare const KNOWN_PATHS: Set<string>;
|
|
206
|
+
/** Derived exact maximum bootstrap registration body size. */
|
|
207
|
+
export declare const REGISTER_BODY_CAP: number;
|
|
208
|
+
/** Derived exact maximum public lookup body size. */
|
|
209
|
+
export declare const LOOKUP_BODY_CAP: number;
|
|
210
|
+
/** Derived exact maximum public list body size. */
|
|
211
|
+
export declare const LIST_BODY_CAP: number;
|
|
212
|
+
export {};
|
|
213
|
+
//# sourceMappingURL=contract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../src/registry/contract.ts"],"names":[],"mappings":"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"}
|